netizen-cli 0.10.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- netizen_cli/__init__.py +3 -0
- netizen_cli/__main__.py +4 -0
- netizen_cli/admin/__init__.py +1 -0
- netizen_cli/admin/auth.py +928 -0
- netizen_cli/admin/errors.py +9 -0
- netizen_cli/admin/port_config.py +115 -0
- netizen_cli/admin/presentation.py +257 -0
- netizen_cli/admin/queries.py +337 -0
- netizen_cli/admin/static/admin.css +260 -0
- netizen_cli/admin/static/admin.js +2898 -0
- netizen_cli/admin/static/index.html +327 -0
- netizen_cli/admin/transport.py +935 -0
- netizen_cli/admin/web.py +2717 -0
- netizen_cli/bindings.py +3215 -0
- netizen_cli/builtin_skills.py +93 -0
- netizen_cli/cards/__init__.py +105 -0
- netizen_cli/cards/callbacks.py +565 -0
- netizen_cli/cards/controls.py +2273 -0
- netizen_cli/cards/defaults.py +213 -0
- netizen_cli/cards/model_info.py +80 -0
- netizen_cli/cards/questions.py +220 -0
- netizen_cli/cards/reply.py +2247 -0
- netizen_cli/cards/scheduled.py +836 -0
- netizen_cli/channel/__init__.py +1 -0
- netizen_cli/channel/completion_mentions.py +60 -0
- netizen_cli/channel/input_preparation.py +644 -0
- netizen_cli/channel/messages.py +57 -0
- netizen_cli/channel/ports.py +52 -0
- netizen_cli/channel/question_inputs.py +51 -0
- netizen_cli/channel/reactions.py +293 -0
- netizen_cli/channel/reply_presenter.py +1505 -0
- netizen_cli/channel/topics.py +70 -0
- netizen_cli/channel_app.py +6593 -0
- netizen_cli/cli.py +287 -0
- netizen_cli/cli_data.py +536 -0
- netizen_cli/cli_packages.py +526 -0
- netizen_cli/cli_services.py +651 -0
- netizen_cli/cli_setup.py +242 -0
- netizen_cli/cli_update.py +303 -0
- netizen_cli/cli_update_restore.py +53 -0
- netizen_cli/cli_update_worker.py +333 -0
- netizen_cli/codex_runtime.py +7125 -0
- netizen_cli/completion_mention.py +16 -0
- netizen_cli/database_migrations.py +218 -0
- netizen_cli/defaults/__init__.py +5 -0
- netizen_cli/defaults/models.py +39 -0
- netizen_cli/defaults/service.py +232 -0
- netizen_cli/defaults/store.py +260 -0
- netizen_cli/deployment/__init__.py +1 -0
- netizen_cli/deployment/restart_worker.py +134 -0
- netizen_cli/deployment/update_executor.py +258 -0
- netizen_cli/deployment/update_protocol.py +281 -0
- netizen_cli/domain.py +416 -0
- netizen_cli/error_messages.py +124 -0
- netizen_cli/experience.py +531 -0
- netizen_cli/feishu_app_onboarding.py +187 -0
- netizen_cli/feishu_app_permissions.py +123 -0
- netizen_cli/git_status.py +63 -0
- netizen_cli/image_inputs.py +579 -0
- netizen_cli/instance.py +84 -0
- netizen_cli/lark_app.py +125 -0
- netizen_cli/main.py +903 -0
- netizen_cli/management/__init__.py +83 -0
- netizen_cli/management/blocking_io.py +352 -0
- netizen_cli/management/chat_labels.py +266 -0
- netizen_cli/management/coordination.py +32 -0
- netizen_cli/management/service.py +2187 -0
- netizen_cli/management/updates.py +214 -0
- netizen_cli/markdown_images.py +78 -0
- netizen_cli/message_content.py +786 -0
- netizen_cli/message_history.py +643 -0
- netizen_cli/message_preparation.py +60 -0
- netizen_cli/message_projection.py +923 -0
- netizen_cli/migrations/__init__.py +1 -0
- netizen_cli/migrations/schema.py +103 -0
- netizen_cli/migrations/v14.py +438 -0
- netizen_cli/model_settings.py +269 -0
- netizen_cli/package_resources.py +22 -0
- netizen_cli/projects.py +327 -0
- netizen_cli/prompt_projection.py +327 -0
- netizen_cli/quoted_context.py +312 -0
- netizen_cli/resources/config.example.yaml +35 -0
- netizen_cli/resources/skills/netizen-lark/SKILL.md +64 -0
- netizen_cli/resources/skills/netizen-user-guide/SKILL.md +37 -0
- netizen_cli/resources/skills/netizen-user-guide/references/user-guide.md +842 -0
- netizen_cli/result_images.py +123 -0
- netizen_cli/runtime/__init__.py +1 -0
- netizen_cli/runtime/contracts.py +792 -0
- netizen_cli/runtime/name_writes.py +67 -0
- netizen_cli/runtime/thread_naming.py +451 -0
- netizen_cli/schedules/__init__.py +1 -0
- netizen_cli/schedules/mcp.py +535 -0
- netizen_cli/schedules/models.py +394 -0
- netizen_cli/schedules/scheduler.py +374 -0
- netizen_cli/schedules/service.py +766 -0
- netizen_cli/schedules/store.py +771 -0
- netizen_cli/sdk_gap_adapter.py +1151 -0
- netizen_cli/service_launcher.py +583 -0
- netizen_cli/session_settings.py +126 -0
- netizen_cli/settings.py +216 -0
- netizen_cli/skill_references.py +40 -0
- netizen_cli/terminal_cleanup.py +155 -0
- netizen_cli/turn_activity.py +688 -0
- netizen_cli/turn_files.py +812 -0
- netizen_cli/turn_patch_children.py +254 -0
- netizen_cli/turn_plan_observer.py +315 -0
- netizen_cli/user_questions.py +106 -0
- netizen_cli-0.10.0.dist-info/METADATA +18 -0
- netizen_cli-0.10.0.dist-info/RECORD +112 -0
- netizen_cli-0.10.0.dist-info/WHEEL +5 -0
- netizen_cli-0.10.0.dist-info/entry_points.txt +2 -0
- netizen_cli-0.10.0.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,327 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="zh-CN">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8">
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
6
|
+
<title>Netizen Admin</title>
|
|
7
|
+
<link rel="stylesheet" href="/static/admin.css">
|
|
8
|
+
<script src="/static/admin.js" defer></script>
|
|
9
|
+
</head>
|
|
10
|
+
<body>
|
|
11
|
+
<header class="topbar">
|
|
12
|
+
<div>
|
|
13
|
+
<p class="eyebrow">INSTANCE CONTROL PLANE</p>
|
|
14
|
+
<h1>Netizen Admin</h1>
|
|
15
|
+
<p id="instance-root" class="instance-root">__NETIZEN_INSTANCE_ROOT__</p>
|
|
16
|
+
</div>
|
|
17
|
+
<button id="logout" class="quiet">退出登录</button>
|
|
18
|
+
</header>
|
|
19
|
+
|
|
20
|
+
<nav class="tabs" aria-label="管理模块">
|
|
21
|
+
<button class="tab active" data-tab="projects" aria-selected="true">Projects</button>
|
|
22
|
+
<button class="tab" data-tab="sessions" aria-selected="false">Sessions</button>
|
|
23
|
+
<button class="tab" data-tab="side-topics" aria-selected="false">Side Topics</button>
|
|
24
|
+
<button class="tab" data-tab="schedules" aria-selected="false">定时任务</button>
|
|
25
|
+
<button class="tab" data-tab="defaults" aria-selected="false">默认会话配置</button>
|
|
26
|
+
<button class="tab" data-tab="updates" aria-selected="false">系统维护</button>
|
|
27
|
+
</nav>
|
|
28
|
+
|
|
29
|
+
<main>
|
|
30
|
+
<p id="status" class="status" role="status" aria-live="polite"></p>
|
|
31
|
+
|
|
32
|
+
<section id="projects" class="panel active" aria-labelledby="projects-heading">
|
|
33
|
+
<div class="section-head">
|
|
34
|
+
<div><p class="eyebrow">WORKSPACES</p><h2 id="projects-heading">Projects</h2></div>
|
|
35
|
+
<button class="refresh" data-refresh="projects">刷新</button>
|
|
36
|
+
</div>
|
|
37
|
+
<div class="forms-grid">
|
|
38
|
+
<form id="register-project" class="card-form">
|
|
39
|
+
<h3>登记已有目录</h3>
|
|
40
|
+
<label>Alias<input name="alias" maxlength="64" required></label>
|
|
41
|
+
<label>绝对路径<input name="path" maxlength="4096" required></label>
|
|
42
|
+
<button type="submit">登记</button>
|
|
43
|
+
</form>
|
|
44
|
+
<form id="create-project" class="card-form">
|
|
45
|
+
<h3>创建空目录</h3>
|
|
46
|
+
<label>Alias<input name="alias" maxlength="64" required></label>
|
|
47
|
+
<label>绝对路径(可留空)<input name="path" maxlength="4096"></label>
|
|
48
|
+
<button type="submit">创建</button>
|
|
49
|
+
</form>
|
|
50
|
+
</div>
|
|
51
|
+
<section id="project-delete-result" class="project-delete-result" aria-live="polite" aria-atomic="true" hidden>
|
|
52
|
+
<p id="project-delete-message"></p>
|
|
53
|
+
<ul id="project-delete-remaining"></ul>
|
|
54
|
+
</section>
|
|
55
|
+
<div class="table-wrap"><table><thead><tr>
|
|
56
|
+
<th>Project</th><th>路径</th><th>状态</th><th>会话</th><th>归档</th><th>最近激活</th><th>操作</th>
|
|
57
|
+
</tr></thead><tbody id="projects-body"></tbody></table></div>
|
|
58
|
+
<button id="projects-next" class="next" hidden>下一页</button>
|
|
59
|
+
</section>
|
|
60
|
+
|
|
61
|
+
<section id="sessions" class="panel" aria-labelledby="sessions-heading" hidden>
|
|
62
|
+
<div class="section-head">
|
|
63
|
+
<div><p class="eyebrow">ORDINARY THREADS</p><h2 id="sessions-heading">Sessions</h2></div>
|
|
64
|
+
<button class="refresh" data-refresh="sessions">刷新</button>
|
|
65
|
+
</div>
|
|
66
|
+
<form id="session-filter" class="filter-bar">
|
|
67
|
+
<fieldset class="multi-filter" data-session-multi="project"><legend>Project</legend></fieldset>
|
|
68
|
+
<fieldset class="multi-filter" data-session-multi="scopeKind"><legend>Scope</legend></fieldset>
|
|
69
|
+
<fieldset class="multi-filter" data-session-multi="inventoryState"><legend>会话状态</legend></fieldset>
|
|
70
|
+
<fieldset class="multi-filter" data-session-multi="current"><legend>当前指针</legend></fieldset>
|
|
71
|
+
<fieldset class="time-range-filter" data-time-range data-time-range-id="session-created">
|
|
72
|
+
<legend>创建时间</legend>
|
|
73
|
+
</fieldset>
|
|
74
|
+
<label>每页
|
|
75
|
+
<select id="session-page-size" name="pageSize"><option value="10">10</option><option value="20" selected>20</option><option value="50">50</option><option value="100">100</option></select>
|
|
76
|
+
</label>
|
|
77
|
+
<button type="submit">筛选</button>
|
|
78
|
+
<button type="button" id="session-filter-reset" class="refresh">重置</button>
|
|
79
|
+
</form>
|
|
80
|
+
<p id="sessions-catalog-notice" class="hint" role="status" hidden>原生目录暂时无法确认部分会话的状态,请稍后刷新。</p>
|
|
81
|
+
<div class="table-wrap"><table><thead><tr>
|
|
82
|
+
<th>飞书位置</th><th>类型</th><th>Session</th><th>会话状态</th><th>运行态</th><th>Project</th><th>配置</th><th title="原生会话最近更新时间,按浏览器本地时区显示">最近更新</th><th>操作</th>
|
|
83
|
+
</tr></thead><tbody id="sessions-body"></tbody></table></div>
|
|
84
|
+
<nav class="pagination" aria-label="Sessions 分页">
|
|
85
|
+
<button id="sessions-previous" class="next" disabled>上一页</button>
|
|
86
|
+
<span id="sessions-page" aria-live="polite">第 1 页</span>
|
|
87
|
+
<button id="sessions-next" class="next" disabled>下一页</button>
|
|
88
|
+
</nav>
|
|
89
|
+
</section>
|
|
90
|
+
|
|
91
|
+
<section id="side-topics" class="panel" aria-labelledby="sides-heading" hidden>
|
|
92
|
+
<div class="section-head">
|
|
93
|
+
<div><p class="eyebrow">EPHEMERAL THREADS</p><h2 id="sides-heading">Side Topics</h2></div>
|
|
94
|
+
<button class="refresh" data-refresh="side-topics">刷新</button>
|
|
95
|
+
</div>
|
|
96
|
+
<form id="side-filter" class="filter-bar">
|
|
97
|
+
<label>Project<input name="project" maxlength="64"></label>
|
|
98
|
+
<label>Parent Binding<input name="parentBindingId" maxlength="512"></label>
|
|
99
|
+
<label>Chat ID<input name="chatId" maxlength="512"></label>
|
|
100
|
+
<label>Topic ID<input name="topicId" maxlength="512"></label>
|
|
101
|
+
<label>Root Message ID<input name="rootMessageId" maxlength="512"></label>
|
|
102
|
+
<label>状态
|
|
103
|
+
<select name="state"><option value="">全部</option><option value="creating">Creating</option><option value="open">Open</option><option value="closed">Closed</option><option value="failed">Failed</option><option value="expired">Expired</option></select>
|
|
104
|
+
</label>
|
|
105
|
+
<fieldset class="time-range-filter" data-time-range data-time-range-id="side-created">
|
|
106
|
+
<legend>创建时间</legend>
|
|
107
|
+
</fieldset>
|
|
108
|
+
<button type="submit">筛选</button>
|
|
109
|
+
</form>
|
|
110
|
+
<div class="table-wrap"><table><thead><tr>
|
|
111
|
+
<th>Side</th><th>Parent / Project</th><th>飞书维度</th><th>状态</th><th>运行态</th><th>操作</th>
|
|
112
|
+
</tr></thead><tbody id="sides-body"></tbody></table></div>
|
|
113
|
+
<button id="sides-next" class="next" hidden>下一页</button>
|
|
114
|
+
</section>
|
|
115
|
+
<section id="defaults" class="panel" aria-labelledby="defaults-heading" hidden>
|
|
116
|
+
<div class="section-head">
|
|
117
|
+
<div><p class="eyebrow">SESSION DEFAULTS</p><h2 id="defaults-heading">默认会话配置</h2></div>
|
|
118
|
+
<button class="refresh" data-refresh="defaults">刷新</button>
|
|
119
|
+
</div>
|
|
120
|
+
<p class="defaults-help">用于当前位置没有会话时自动创建会话。优先使用指定聊天配置;未配置时,按顺序匹配群名规则。</p>
|
|
121
|
+
<div class="defaults-toolbar">
|
|
122
|
+
<div class="defaults-tabs" role="tablist" aria-label="默认配置匹配方式">
|
|
123
|
+
<button id="defaults-tab-chat" class="defaults-tab" role="tab" aria-selected="true" aria-controls="defaults-panel-chat" tabindex="0" data-defaults-tab="chat">指定聊天</button>
|
|
124
|
+
<button id="defaults-tab-group_name" class="defaults-tab" role="tab" aria-selected="false" aria-controls="defaults-panel-group_name" tabindex="-1" data-defaults-tab="group_name">群名匹配</button>
|
|
125
|
+
</div>
|
|
126
|
+
<button id="defaults-new" class="action" disabled>添加聊天配置</button>
|
|
127
|
+
</div>
|
|
128
|
+
<div id="defaults-panel-chat" role="tabpanel" aria-labelledby="defaults-tab-chat" tabindex="0">
|
|
129
|
+
<div class="table-wrap"><table><thead><tr><th>聊天</th><th>Project</th><th>会话配置</th><th>操作</th></tr></thead><tbody id="defaults-chat-body"></tbody></table></div>
|
|
130
|
+
<nav id="defaults-pagination" class="pagination" aria-label="指定聊天配置分页" hidden><button id="defaults-previous" class="next" disabled>上一页</button><span id="defaults-page" aria-live="polite"></span><button id="defaults-next" class="next" disabled>下一页</button></nav>
|
|
131
|
+
</div>
|
|
132
|
+
<div id="defaults-panel-group_name" role="tabpanel" aria-labelledby="defaults-tab-group_name" tabindex="0" hidden>
|
|
133
|
+
<p class="defaults-order-help">从上到下采用第一条命中规则,通过上移、下移调整优先级。</p>
|
|
134
|
+
<div class="table-wrap"><table><thead><tr><th>优先级</th><th>群名包含</th><th>Project</th><th>会话配置</th><th>操作</th></tr></thead><tbody id="defaults-rules-body"></tbody></table></div>
|
|
135
|
+
</div>
|
|
136
|
+
</section>
|
|
137
|
+
<dialog id="defaults-drawer" class="editor-drawer" aria-labelledby="defaults-editor-title">
|
|
138
|
+
<form id="defaults-editor" class="card-form drawer-form" hidden>
|
|
139
|
+
<div class="drawer-head"><div><p class="eyebrow">SESSION DEFAULTS</p><h3 id="defaults-editor-title"></h3></div><button id="defaults-close" class="drawer-close" type="button" aria-label="关闭默认配置表单">×</button></div>
|
|
140
|
+
<div class="drawer-body">
|
|
141
|
+
<fieldset id="defaults-fields">
|
|
142
|
+
<h4>适用对象</h4>
|
|
143
|
+
<div class="schedule-form-grid">
|
|
144
|
+
<label id="defaults-chat-field">聊天 ID<input id="defaults-chat" maxlength="256" required placeholder="群聊或单聊的 chat_id" aria-describedby="defaults-target-help"></label>
|
|
145
|
+
<label id="defaults-keyword-field" hidden>群名包含<input id="defaults-keyword" maxlength="200" disabled placeholder="输入群名关键词" aria-describedby="defaults-target-help"></label>
|
|
146
|
+
</div>
|
|
147
|
+
<p id="defaults-target-help" class="defaults-field-help"></p>
|
|
148
|
+
<h4>会话配置</h4>
|
|
149
|
+
<div class="schedule-form-grid">
|
|
150
|
+
<label>Project<select id="defaults-project" required><option value="">选择 Project</option></select></label>
|
|
151
|
+
<label>模型<select id="defaults-model"><option value="">继承 Codex</option></select></label>
|
|
152
|
+
<label>推理强度<select id="defaults-effort" disabled></select></label>
|
|
153
|
+
<label>速度<select id="defaults-tier" disabled></select></label>
|
|
154
|
+
<label>上下文<select id="defaults-context"><option value="current-only">当前消息</option><option value="catch-up">补齐未读上下文</option></select></label>
|
|
155
|
+
</div>
|
|
156
|
+
<h4>任务反馈</h4>
|
|
157
|
+
<div class="defaults-feedback">
|
|
158
|
+
<label><input id="defaults-reactions" type="checkbox">表情反馈</label>
|
|
159
|
+
<label><input id="defaults-progress" type="checkbox">进度卡片</label>
|
|
160
|
+
<label><input id="defaults-completion-mention" type="checkbox">结束时 @ 提醒</label>
|
|
161
|
+
</div>
|
|
162
|
+
</fieldset>
|
|
163
|
+
<p id="defaults-note" class="defaults-field-help" role="status"></p>
|
|
164
|
+
</div>
|
|
165
|
+
<div class="drawer-footer"><button id="defaults-cancel" class="drawer-cancel" type="button">取消</button><button id="defaults-save" type="submit">保存</button></div>
|
|
166
|
+
</form>
|
|
167
|
+
</dialog>
|
|
168
|
+
<section id="schedules" class="panel" aria-labelledby="schedules-heading" hidden>
|
|
169
|
+
<div class="section-head">
|
|
170
|
+
<div><p class="eyebrow">SCHEDULED TASKS</p><h2 id="schedules-heading">定时任务</h2></div>
|
|
171
|
+
<div class="actions"><button id="schedule-new" class="action">创建计划</button><button class="refresh" data-refresh="schedules">刷新</button></div>
|
|
172
|
+
</div>
|
|
173
|
+
<p class="schedule-help">可在独立新话题执行,或定时向指定原会话提交输入。立即运行使用已保存的计划,不改变定时安排;手动暂停或已结束的计划也可以运行一次,原会话须处于当前且可用。</p>
|
|
174
|
+
<p id="schedule-run-receipt" class="meta-line" role="status" hidden></p>
|
|
175
|
+
<form id="schedule-filter" class="filter-bar">
|
|
176
|
+
<label>Project<select id="schedule-filter-project" name="project"><option value="">全部 Project</option></select></label>
|
|
177
|
+
<label>启停状态<select id="schedule-filter-enabled" name="enabled"><option value="">全部</option><option value="true">已启用</option><option value="false">已暂停</option></select></label>
|
|
178
|
+
<label>结束状态<select id="schedule-filter-ended" name="ended"><option value="">全部</option><option value="false" selected>未结束</option><option value="true">已结束</option></select></label>
|
|
179
|
+
<button type="submit">筛选</button>
|
|
180
|
+
</form>
|
|
181
|
+
<p class="meta-line">未结束包含仍有触发机会的计划,以及最后一次正在启动、执行或结果待确认的计划。暂停不会停止本次执行。</p>
|
|
182
|
+
<div class="table-wrap"><table><thead><tr><th>计划</th><th>Project</th><th>目标会话</th><th>时间安排</th><th>计划状态</th><th>执行情况</th><th>操作</th></tr></thead><tbody id="schedules-body"></tbody></table></div>
|
|
183
|
+
<button id="schedules-next" class="next" hidden>下一页</button>
|
|
184
|
+
<section id="schedule-detail" class="schedule-detail" hidden aria-labelledby="schedule-detail-title">
|
|
185
|
+
<h3 id="schedule-detail-title"></h3>
|
|
186
|
+
<p id="schedule-detail-state"></p>
|
|
187
|
+
<p id="schedule-detail-settings"></p>
|
|
188
|
+
<p id="schedule-detail-rule"></p>
|
|
189
|
+
<pre id="schedule-detail-instructions"></pre>
|
|
190
|
+
<ol id="schedule-detail-preview"></ol>
|
|
191
|
+
<h3>最近触发记录</h3>
|
|
192
|
+
<p>执行状态以普通会话为准;停止和继续任务请使用话题或 Sessions 中的现有能力。</p>
|
|
193
|
+
<div class="table-wrap"><table><thead><tr><th>触发时间</th><th>触发来源</th><th>调度状态</th><th>执行入口</th></tr></thead><tbody id="schedule-runs-body"></tbody></table></div>
|
|
194
|
+
<button id="schedule-runs-next" class="next" hidden>下一页记录</button>
|
|
195
|
+
</section>
|
|
196
|
+
</section>
|
|
197
|
+
<dialog id="schedule-drawer" class="editor-drawer" aria-labelledby="schedule-editor-title">
|
|
198
|
+
<form id="schedule-editor" class="card-form" hidden>
|
|
199
|
+
<div class="schedule-editor-head"><div><p class="eyebrow">SCHEDULED TASK</p><h3 id="schedule-editor-title">创建计划</h3></div><button id="schedule-close" type="button" aria-label="关闭计划表单">×</button></div>
|
|
200
|
+
<fieldset id="schedule-fields">
|
|
201
|
+
<div class="schedule-editor-body">
|
|
202
|
+
<div class="schedule-form-grid">
|
|
203
|
+
<label>名称<input id="schedule-name" maxlength="128" required></label>
|
|
204
|
+
<label>执行目标<select id="schedule-target-kind"><option value="new_topic">每次新建独立话题</option><option value="binding">在原会话继续</option></select></label>
|
|
205
|
+
<label id="schedule-binding-query-field" hidden>查找原会话<input id="schedule-binding-query" maxlength="512" placeholder="Project、聊天 ID 或会话短 ID" disabled></label>
|
|
206
|
+
<label id="schedule-binding-field" hidden>原会话<select id="schedule-binding" disabled><option value="">选择原会话</option></select></label>
|
|
207
|
+
<label id="schedule-project-field">Project<select id="schedule-project" required><option value="">选择 Project</option></select></label>
|
|
208
|
+
<label id="schedule-chat-field">目标会话 ID<input id="schedule-chat" maxlength="512" required></label>
|
|
209
|
+
</div>
|
|
210
|
+
<p id="schedule-target-note" class="meta-line" hidden>沿用原会话的 Project、模型、上下文和反馈;空闲时启动新一轮,忙碌时追加当前任务。切走或归档后自动暂停,恢复后继续;删除原会话也会删除计划。目标创建后不可更换。</p>
|
|
211
|
+
<p id="schedule-target-options-note" class="meta-line" hidden role="status"></p>
|
|
212
|
+
<label>任务指令<textarea id="schedule-instructions" rows="5" maxlength="16000" required placeholder="说明每次执行需要完成什么,以及何时需要用户关注。"></textarea></label>
|
|
213
|
+
<h4>触发规则</h4>
|
|
214
|
+
<div class="schedule-form-grid">
|
|
215
|
+
<label>时区<input id="schedule-timezone" placeholder="例如 Asia/Shanghai" maxlength="128" required></label>
|
|
216
|
+
<label>时间规则<select id="schedule-kind"><option value="daily">每天</option><option value="weekly">每周</option><option value="interval">固定间隔</option><option value="once">一次性</option></select></label>
|
|
217
|
+
<label data-schedule-rule="daily weekly">当地时间<input id="schedule-time" type="time" step="60" value="09:00"></label>
|
|
218
|
+
<label data-schedule-rule="once" hidden>触发日期与时间<input id="schedule-at" type="datetime-local" step="60" aria-describedby="schedule-timezone-note"></label>
|
|
219
|
+
<label id="schedule-offset-field" hidden>选择这一天的哪一次时间<select id="schedule-offset"></select></label>
|
|
220
|
+
<label data-schedule-rule="interval" hidden>间隔分钟<input id="schedule-every" type="number" min="1" step="1" value="60"></label>
|
|
221
|
+
</div>
|
|
222
|
+
<p id="schedule-timezone-note" class="meta-line">日期和时间均按上方时区解释。</p>
|
|
223
|
+
<fieldset id="schedule-weekdays" data-schedule-rule="weekly" hidden><legend>每周重复</legend>
|
|
224
|
+
<label><input type="checkbox" value="0">周一</label><label><input type="checkbox" value="1">周二</label><label><input type="checkbox" value="2">周三</label><label><input type="checkbox" value="3">周四</label><label><input type="checkbox" value="4">周五</label><label><input type="checkbox" value="5">周六</label><label><input type="checkbox" value="6">周日</label>
|
|
225
|
+
</fieldset>
|
|
226
|
+
<fieldset id="schedule-end-condition" data-schedule-rule="daily weekly interval">
|
|
227
|
+
<legend>截止时间(可选)</legend>
|
|
228
|
+
<div class="schedule-form-grid">
|
|
229
|
+
<label>截止日期与时间<input id="schedule-end-at" type="datetime-local" step="60" aria-describedby="schedule-timezone-note schedule-end-note"></label>
|
|
230
|
+
<label id="schedule-end-offset-field" hidden>选择截止时间的哪一次<select id="schedule-end-offset"></select></label>
|
|
231
|
+
</div>
|
|
232
|
+
<p id="schedule-end-note" class="meta-line">留空则不设截止时间,截止时刻仍可触发。</p>
|
|
233
|
+
</fieldset>
|
|
234
|
+
<details id="schedule-session-settings" class="schedule-session-settings">
|
|
235
|
+
<summary>会话配置 · <span id="schedule-session-summary">继承 Codex · 当前消息</span></summary>
|
|
236
|
+
<p id="schedule-session-note" role="status" aria-live="polite"></p>
|
|
237
|
+
<div class="schedule-form-grid">
|
|
238
|
+
<label>模型<select id="schedule-model"><option value="">继承 Codex</option></select></label>
|
|
239
|
+
<label>思考强度<select id="schedule-effort" disabled></select></label>
|
|
240
|
+
<label>速度<select id="schedule-tier" disabled></select></label>
|
|
241
|
+
<label>消息上下文<select id="schedule-context"><option value="current-only">当前消息</option><option value="catch-up">补齐未读上下文</option></select></label>
|
|
242
|
+
</div>
|
|
243
|
+
<label class="schedule-checkbox"><input id="schedule-reactions" type="checkbox">任务表情反馈</label>
|
|
244
|
+
<label class="schedule-checkbox"><input id="schedule-progress" type="checkbox">进度卡片</label>
|
|
245
|
+
<label class="schedule-checkbox"><input id="schedule-completion-mention" type="checkbox">结束时 @ 提醒(自动首轮除外)</label>
|
|
246
|
+
</details>
|
|
247
|
+
<label class="schedule-checkbox"><input id="schedule-enabled" type="checkbox" checked>启用计划</label>
|
|
248
|
+
<p id="schedule-preview-message" role="status" aria-live="polite">保存前请预览触发时间。</p>
|
|
249
|
+
<ol id="schedule-preview-times"></ol>
|
|
250
|
+
</div>
|
|
251
|
+
<div class="schedule-editor-footer"><button id="schedule-preview" type="button">预览触发时间</button><div class="actions"><button id="schedule-cancel" type="button">取消</button><button id="schedule-save" type="submit" disabled>保存计划</button></div></div>
|
|
252
|
+
</fieldset>
|
|
253
|
+
</form>
|
|
254
|
+
</dialog>
|
|
255
|
+
<section id="updates" class="panel" aria-labelledby="updates-heading" hidden>
|
|
256
|
+
<div class="section-head">
|
|
257
|
+
<div><p class="eyebrow">NETIZEN</p><h2 id="updates-heading">系统维护</h2></div>
|
|
258
|
+
<button id="updates-refresh" class="refresh" data-refresh="updates">刷新维护状态</button>
|
|
259
|
+
</div>
|
|
260
|
+
<div class="update-versions">
|
|
261
|
+
<div><p>当前版本</p><strong id="update-current">—</strong><p id="update-source"></p></div>
|
|
262
|
+
</div>
|
|
263
|
+
<p id="update-message"></p>
|
|
264
|
+
<div class="update-operation" role="status" aria-live="polite">
|
|
265
|
+
<strong id="update-phase"></strong>
|
|
266
|
+
<p id="update-detail"></p>
|
|
267
|
+
</div>
|
|
268
|
+
<section class="service-restart" aria-labelledby="restart-heading">
|
|
269
|
+
<h3 id="restart-heading">服务重启</h3>
|
|
270
|
+
<p>使用本实例绑定的 Python 环境中当前安装的程序,重新启动 Netizen 及其 Codex 运行环境。不更新软件包、不切换环境,也不重启其他实例。</p>
|
|
271
|
+
<p id="restart-warning" class="update-warning">重启会中断正在执行的任务、暂停 Goal,并结束临时 Side 会话。重启后不会自动续跑,管理页需要重新登录。</p>
|
|
272
|
+
<button id="service-restart" class="refresh" aria-describedby="restart-warning restart-message" disabled>重启服务</button>
|
|
273
|
+
<p id="restart-message" class="update-warning"></p>
|
|
274
|
+
</section>
|
|
275
|
+
<p class="update-help"><a href="https://github.com/lijingda/netizen/blob/main/docs/deployment.md" target="_blank" rel="noopener noreferrer">部署与恢复说明</a></p>
|
|
276
|
+
</section>
|
|
277
|
+
</main>
|
|
278
|
+
|
|
279
|
+
<template id="time-range-template">
|
|
280
|
+
<input type="hidden" name="createdFrom" data-time-range-from>
|
|
281
|
+
<input type="hidden" name="createdBefore" data-time-range-before>
|
|
282
|
+
<div class="time-range-control">
|
|
283
|
+
<button type="button" class="time-range-trigger" data-time-range-trigger aria-haspopup="dialog" aria-expanded="false">
|
|
284
|
+
<span class="time-range-calendar-icon" aria-hidden="true"></span>
|
|
285
|
+
<span class="time-range-summary" data-time-range-summary>全部时间</span>
|
|
286
|
+
<span class="time-range-chevron" aria-hidden="true">⌄</span>
|
|
287
|
+
</button>
|
|
288
|
+
<button type="button" class="time-range-quick-clear" data-time-range-quick-clear aria-label="清除创建时间筛选" title="清除创建时间筛选" hidden>×</button>
|
|
289
|
+
</div>
|
|
290
|
+
<div class="time-range-backdrop" data-time-range-backdrop hidden></div>
|
|
291
|
+
<div class="time-range-popover" data-time-range-popover role="dialog" hidden>
|
|
292
|
+
<div class="time-range-presets">
|
|
293
|
+
<h3 data-time-range-dialog-title>创建时间</h3>
|
|
294
|
+
<p>快捷范围</p>
|
|
295
|
+
<div class="time-range-preset-list">
|
|
296
|
+
<button type="button" data-time-range-preset="all">不限时间</button>
|
|
297
|
+
<button type="button" data-time-range-preset="today">今天</button>
|
|
298
|
+
<button type="button" data-time-range-preset="yesterday">昨天</button>
|
|
299
|
+
<button type="button" data-time-range-preset="last-24-hours">最近 24 小时</button>
|
|
300
|
+
<button type="button" data-time-range-preset="last-7-days">最近 7 天</button>
|
|
301
|
+
<button type="button" data-time-range-preset="last-30-days">最近 30 天</button>
|
|
302
|
+
</div>
|
|
303
|
+
</div>
|
|
304
|
+
<div class="time-range-custom">
|
|
305
|
+
<h3>自定义范围</h3>
|
|
306
|
+
<div class="time-range-fields">
|
|
307
|
+
<label>开始时间
|
|
308
|
+
<input type="datetime-local" step="60" data-time-range-start autocomplete="off">
|
|
309
|
+
</label>
|
|
310
|
+
<label>结束时间
|
|
311
|
+
<input type="datetime-local" step="60" data-time-range-end autocomplete="off">
|
|
312
|
+
</label>
|
|
313
|
+
</div>
|
|
314
|
+
<p class="time-range-hint" data-time-range-help>开始和结束时间均包含所选分钟。</p>
|
|
315
|
+
<p class="time-range-zone" data-time-range-zone></p>
|
|
316
|
+
<p class="time-range-error" data-time-range-error role="alert" aria-live="polite"></p>
|
|
317
|
+
<div class="time-range-footer">
|
|
318
|
+
<button type="button" class="time-range-clear" data-time-range-clear>清除</button>
|
|
319
|
+
<span class="time-range-footer-spacer"></span>
|
|
320
|
+
<button type="button" class="time-range-cancel" data-time-range-cancel>取消</button>
|
|
321
|
+
<button type="button" class="time-range-done" data-time-range-done>完成</button>
|
|
322
|
+
</div>
|
|
323
|
+
</div>
|
|
324
|
+
</div>
|
|
325
|
+
</template>
|
|
326
|
+
</body>
|
|
327
|
+
</html>
|