268 lines
17 KiB
HTML
268 lines
17 KiB
HTML
<!doctype html>
|
|
<html lang="ru">
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
<meta name="color-scheme" content="dark">
|
|
<meta name="theme-color" content="#101714">
|
|
<title>Домовой — консоль создателя</title>
|
|
<link rel="stylesheet" href="/assets/console.css">
|
|
</head>
|
|
<body>
|
|
<div class="grain" aria-hidden="true"></div>
|
|
|
|
<main id="login-view" class="login-shell">
|
|
<section class="login-panel" aria-labelledby="login-title">
|
|
<div class="brand-mark" aria-hidden="true">Д</div>
|
|
<p class="eyebrow">защищённый вход · creator</p>
|
|
<h1 id="login-title">Домовой</h1>
|
|
<p class="login-copy">Личная операторская консоль. Учётные данные используются только для выпуска ограниченной сессии и не сохраняются браузером.</p>
|
|
<form id="login-form" class="login-form">
|
|
<label for="creator-username">Логин</label>
|
|
<input id="creator-username" name="username" type="text" autocomplete="username" required autofocus>
|
|
<label for="creator-password">Пароль</label>
|
|
<div class="secret-row">
|
|
<input id="creator-password" name="password" type="password" autocomplete="current-password" required>
|
|
<button class="icon-button" id="toggle-secret" type="button" aria-label="Показать пароль" title="Показать пароль">
|
|
<span aria-hidden="true">◉</span>
|
|
</button>
|
|
</div>
|
|
<button id="login-button" class="primary-button" type="submit">
|
|
<span>Открыть консоль</span><span aria-hidden="true">→</span>
|
|
</button>
|
|
<p id="login-error" class="form-error" role="alert"></p>
|
|
</form>
|
|
<div class="trust-line"><span></span>Сессия действует 8 часов<span></span></div>
|
|
</section>
|
|
</main>
|
|
|
|
<div id="console-view" class="console" hidden>
|
|
<header class="topbar">
|
|
<a class="wordmark" href="/" aria-label="Домовой, главная">
|
|
<span class="wordmark-symbol">Д</span>
|
|
<span><strong>Домовой</strong><small>консоль создателя</small></span>
|
|
</a>
|
|
<div class="topbar-actions">
|
|
<span id="connection-state" class="connection"><i></i>система доступна</span>
|
|
<button id="refresh-all" class="text-button" type="button">Обновить</button>
|
|
<button id="logout" class="icon-button" type="button" aria-label="Завершить сессию" title="Выйти">↗</button>
|
|
</div>
|
|
</header>
|
|
|
|
<aside class="context-rail">
|
|
<div>
|
|
<p class="rail-index">01 / КОНТЕКСТ</p>
|
|
<h2>Точка внимания</h2>
|
|
<p class="rail-copy">Укажите рабочий контекст. Он сохраняется только в этом браузере и не даёт дополнительных полномочий.</p>
|
|
</div>
|
|
<form id="context-form" class="context-form">
|
|
<label for="session-id">Идентификатор сессии</label>
|
|
<input id="session-id" autocomplete="off" placeholder="session-id">
|
|
<label for="workspace-id">Рабочая область</label>
|
|
<input id="workspace-id" autocomplete="off" placeholder="workspace-id">
|
|
<label for="task-id">Задача</label>
|
|
<input id="task-id" autocomplete="off" placeholder="task-id">
|
|
<label for="prospective-id">Выбранное ожидание</label>
|
|
<input id="prospective-id" autocomplete="off" placeholder="prospective-item-id">
|
|
<label for="capability-id">Возможность</label>
|
|
<input id="capability-id" autocomplete="off" value="cognitive-proposal">
|
|
<button class="secondary-button" type="submit">Загрузить контекст</button>
|
|
</form>
|
|
<div class="session-stamp">
|
|
<span>ACTOR</span>
|
|
<strong id="session-actor">—</strong>
|
|
<span>СЕССИЯ ДО</span>
|
|
<strong id="session-expiry">—</strong>
|
|
</div>
|
|
</aside>
|
|
|
|
<main class="workspace">
|
|
<section class="workspace-head">
|
|
<div>
|
|
<p class="eyebrow">операционная картина</p>
|
|
<h1>Состояние сейчас</h1>
|
|
</div>
|
|
<p id="last-update" class="last-update">Данные ещё не запрошены</p>
|
|
</section>
|
|
|
|
<section class="signal-strip" aria-label="Сводка состояния">
|
|
<div><span>ФОКУС</span><strong id="focus-signal" data-state="idle">ожидает</strong></div>
|
|
<div><span>ЗАДАЧА</span><strong id="task-signal" data-state="idle">ожидает</strong></div>
|
|
<div><span>CONTINUITY</span><strong id="prospective-signal" data-state="idle">ожидает</strong></div>
|
|
<div><span>ВОЗМОЖНОСТЬ</span><strong id="capability-signal" data-state="idle">ожидает</strong></div>
|
|
</section>
|
|
|
|
<section class="advisor-panel" aria-labelledby="advisor-title">
|
|
<div class="advisor-intro">
|
|
<p>COGNITIVE / ADVISORY V1</p>
|
|
<h2 id="advisor-title">Спросить Домового</h2>
|
|
<span>Ответ — только совет. Он не сохраняется, не создаёт задач и не запускает действий.</span>
|
|
</div>
|
|
<form id="advisory-form" class="advisor-form">
|
|
<label for="advisory-message">Ваш вопрос</label>
|
|
<textarea id="advisory-message" rows="3" maxlength="16384" placeholder="Что стоит проверить в выбранном контексте?" required></textarea>
|
|
<div id="advisory-egress" class="advisor-egress" hidden>
|
|
<p class="advisor-egress-kicker">ВНЕШНИЙ КОГНИТИВНЫЙ ПРОВАЙДЕР</p>
|
|
<p id="advisory-disclosure">Текст вопроса будет передан согласно активной политике данных.</p>
|
|
<label for="advisory-egress-ack">
|
|
<input id="advisory-egress-ack" type="checkbox">
|
|
<span>Подтверждаю передачу этого вопроса внешнему провайдеру</span>
|
|
</label>
|
|
</div>
|
|
<div class="advisor-controls">
|
|
<span id="advisory-privacy"><i></i> локальный детерминированный режим</span>
|
|
<button id="advisory-submit" class="primary-button" type="submit"><span>Получить совет</span><span aria-hidden="true">→</span></button>
|
|
</div>
|
|
</form>
|
|
<div id="advisory-result" class="advisor-result" aria-live="polite" hidden>
|
|
<div><span>СТАТУС</span><strong id="advisory-state">—</strong></div>
|
|
<p id="advisory-text"></p>
|
|
</div>
|
|
</section>
|
|
|
|
<section class="register-panel" aria-labelledby="register-title">
|
|
<header>
|
|
<div><p>Continuity / ближайшие</p><h2 id="register-title">Реестр ожиданий</h2></div>
|
|
<span id="prospective-count">0 ЗАПИСЕЙ</span>
|
|
</header>
|
|
<div id="prospective-list" class="register-list">
|
|
<p class="register-empty">Реестр ещё не загружен.</p>
|
|
</div>
|
|
</section>
|
|
|
|
<section class="activity-panel" aria-labelledby="activity-title">
|
|
<header>
|
|
<div><p>Commit / владелец</p><h2 id="activity-title">Журнал действий</h2></div>
|
|
<div class="activity-tools">
|
|
<span id="action-count">0 ЗАПИСЕЙ</span>
|
|
<button id="refresh-actions" class="icon-button" type="button" aria-label="Обновить журнал действий" title="Обновить журнал действий">↻</button>
|
|
</div>
|
|
</header>
|
|
<div id="action-history" class="activity-list" aria-live="polite" aria-busy="false">
|
|
<p class="register-empty">Журнал ещё не загружен.</p>
|
|
</div>
|
|
</section>
|
|
|
|
<section class="data-grid">
|
|
<article class="data-card focus-card">
|
|
<header><span class="card-number">01</span><div><p>Situation</p><h2>Активный фокус</h2></div><span id="focus-badge" class="status-badge neutral">НЕ ЗАГРУЖЕН</span></header>
|
|
<dl>
|
|
<div><dt>Проект</dt><dd id="focus-project">—</dd></div>
|
|
<div><dt>Цель</dt><dd id="focus-goal">—</dd></div>
|
|
<div><dt>Область</dt><dd id="focus-scope">—</dd></div>
|
|
<div><dt>Привязка</dt><dd id="focus-binding">—</dd></div>
|
|
</dl>
|
|
<p id="focus-message" class="card-message">Введите идентификаторы сессии и рабочей области.</p>
|
|
</article>
|
|
|
|
<article class="data-card task-card">
|
|
<header><span class="card-number">02</span><div><p>Work</p><h2>Задача в фокусе</h2></div><span id="task-badge" class="status-badge neutral">НЕ ЗАГРУЖЕНА</span></header>
|
|
<dl>
|
|
<div><dt>Задача</dt><dd id="task-value">—</dd></div>
|
|
<div><dt>Цель</dt><dd id="task-goal">—</dd></div>
|
|
<div><dt>Область</dt><dd id="task-scope">—</dd></div>
|
|
<div><dt>Ревизия</dt><dd id="task-revision">—</dd></div>
|
|
</dl>
|
|
<p id="task-message" class="card-message">Укажите задачу для проверки относительно активного фокуса.</p>
|
|
</article>
|
|
|
|
<article class="data-card prospective-card">
|
|
<header><span class="card-number">03</span><div><p>Continuity</p><h2>Будущая значимость</h2></div><span id="prospective-badge" class="status-badge neutral">НЕ ЗАГРУЖЕНА</span></header>
|
|
<div class="prospective-core">
|
|
<div><span>СОСТОЯНИЕ</span><strong id="prospective-state">—</strong></div>
|
|
<div class="time-marker"><i aria-hidden="true"></i><span>СРАБОТАЕТ</span><time id="prospective-trigger">—</time></div>
|
|
</div>
|
|
<dl class="compact-list">
|
|
<div><dt>Ожидание</dt><dd id="prospective-value">—</dd></div>
|
|
<div><dt>Обязательство</dt><dd id="prospective-commitment">—</dd></div>
|
|
<div><dt>Цель</dt><dd id="prospective-goal">—</dd></div>
|
|
<div><dt>Область</dt><dd id="prospective-scope">—</dd></div>
|
|
<div><dt>Principal</dt><dd id="prospective-owner">—</dd></div>
|
|
<div><dt>Ревизия</dt><dd id="prospective-revision">—</dd></div>
|
|
</dl>
|
|
<p id="prospective-message" class="card-message">Укажите идентификатор ProspectiveItem для проверки владельца и состояния.</p>
|
|
<section class="commit-zone" aria-labelledby="commit-zone-title">
|
|
<div class="commit-zone-copy">
|
|
<p>Commit / контролируемый переход</p>
|
|
<h3 id="commit-zone-title">Подтвердить исполнение</h3>
|
|
<span id="action-readiness">Доступно только для доставленного ожидания с проверенной Work-задачей.</span>
|
|
</div>
|
|
<label for="satisfaction-evidence">Ссылка на подтверждение</label>
|
|
<textarea id="satisfaction-evidence" rows="2" maxlength="512" placeholder="artifact://… или краткая ссылка на результат"></textarea>
|
|
<button id="prepare-satisfaction" class="commit-button" type="button" disabled>
|
|
<span>Отметить исполненным</span><span aria-hidden="true">→</span>
|
|
</button>
|
|
<div class="notification-command">
|
|
<div><strong>Windows-напоминание</strong><span id="notification-readiness">Доступно для доставленного ожидания с проверенной Work-задачей.</span></div>
|
|
<button id="prepare-notification" class="secondary-button" type="button" disabled>Отправить уведомление</button>
|
|
</div>
|
|
<div id="action-result" class="action-result" hidden>
|
|
<div><span>ИСХОД</span><strong id="action-state">—</strong></div>
|
|
<div><span>ACTION</span><code id="action-id">—</code></div>
|
|
<div><span>ATTEMPT</span><code id="attempt-id">—</code></div>
|
|
<button id="reconcile-action" class="secondary-button" type="button" hidden>Проверить исход</button>
|
|
</div>
|
|
</section>
|
|
</article>
|
|
|
|
<article class="data-card capability-card">
|
|
<header><span class="card-number">04</span><div><p>Capability</p><h2>Готовность</h2></div><span id="capability-badge" class="status-badge neutral">НЕИЗВЕСТНО</span></header>
|
|
<div class="capability-core">
|
|
<div class="radar" aria-hidden="true"><span></span><i></i></div>
|
|
<div><span>ТЕКУЩЕЕ СОСТОЯНИЕ</span><strong id="capability-state">—</strong><small id="capability-reason">Причина не получена</small></div>
|
|
</div>
|
|
<dl class="compact-list">
|
|
<div><dt>Возможность</dt><dd id="capability-value">—</dd></div>
|
|
<div><dt>Ревизия</dt><dd id="capability-revision">—</dd></div>
|
|
<div><dt>Наблюдалось</dt><dd id="capability-observed">—</dd></div>
|
|
</dl>
|
|
</article>
|
|
</section>
|
|
</main>
|
|
</div>
|
|
|
|
<dialog id="satisfaction-dialog" class="confirmation-dialog" aria-labelledby="confirmation-title">
|
|
<form method="dialog">
|
|
<p class="eyebrow">commit / явное подтверждение</p>
|
|
<h2 id="confirmation-title">Зафиксировать исполнение?</h2>
|
|
<p class="confirmation-copy">Домовой создаст авторизованное действие и передаст его Continuity Executor. Этот переход меняет каноническое состояние.</p>
|
|
<dl class="confirmation-grid">
|
|
<div><dt>Ожидание</dt><dd id="confirm-prospective">—</dd></div>
|
|
<div><dt>Ревизия</dt><dd id="confirm-prospective-revision">—</dd></div>
|
|
<div><dt>Work-задача</dt><dd id="confirm-task">—</dd></div>
|
|
<div><dt>Ревизия Work</dt><dd id="confirm-task-revision">—</dd></div>
|
|
<div class="wide"><dt>Подтверждение</dt><dd id="confirm-evidence">—</dd></div>
|
|
</dl>
|
|
<p id="confirmation-error" class="form-error" role="alert"></p>
|
|
<div class="confirmation-actions">
|
|
<button id="cancel-satisfaction" class="text-button" type="button">Отмена</button>
|
|
<button id="confirm-satisfaction" class="commit-button" type="button">Подтверждаю переход</button>
|
|
</div>
|
|
</form>
|
|
</dialog>
|
|
|
|
<dialog id="notification-dialog" class="confirmation-dialog" aria-labelledby="notification-confirmation-title">
|
|
<form method="dialog">
|
|
<p class="eyebrow">commit / внешнее действие</p>
|
|
<h2 id="notification-confirmation-title">Отправить напоминание?</h2>
|
|
<p class="confirmation-copy">Домовой создаст неизменяемое авторизованное действие и передаст типизированное уведомление в закреплённый receiver. Состояние Continuity не изменится; доставка не означает прочтение.</p>
|
|
<dl class="confirmation-grid">
|
|
<div><dt>Ожидание</dt><dd id="notify-confirm-prospective">—</dd></div>
|
|
<div><dt>Ревизия</dt><dd id="notify-confirm-prospective-revision">—</dd></div>
|
|
<div><dt>Work-задача</dt><dd id="notify-confirm-task">—</dd></div>
|
|
<div><dt>Ревизия Work</dt><dd id="notify-confirm-task-revision">—</dd></div>
|
|
<div class="wide"><dt>Канал</dt><dd>Локальное уведомление Windows · закреплённый receiver</dd></div>
|
|
</dl>
|
|
<p id="notification-confirmation-error" class="form-error" role="alert"></p>
|
|
<div class="confirmation-actions">
|
|
<button id="cancel-notification" class="text-button" type="button">Отмена</button>
|
|
<button id="confirm-notification" class="commit-button" type="button">Подтверждаю отправку</button>
|
|
</div>
|
|
</form>
|
|
</dialog>
|
|
|
|
<div id="toast" class="toast" role="status" aria-live="polite" hidden></div>
|
|
<script src="/assets/console.js" defer></script>
|
|
</body>
|
|
</html>
|