aicodeman 1.8.0 → 1.8.2

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.
Files changed (123) hide show
  1. package/README.md +23 -6
  2. package/README.zh-CN.md +22 -5
  3. package/dist/config/webview-limits.d.ts +36 -0
  4. package/dist/config/webview-limits.d.ts.map +1 -0
  5. package/dist/config/webview-limits.js +40 -0
  6. package/dist/config/webview-limits.js.map +1 -0
  7. package/dist/types/index.d.ts +1 -0
  8. package/dist/types/index.d.ts.map +1 -1
  9. package/dist/types/index.js +1 -0
  10. package/dist/types/index.js.map +1 -1
  11. package/dist/types/webview.d.ts +84 -0
  12. package/dist/types/webview.d.ts.map +1 -0
  13. package/dist/types/webview.js +21 -0
  14. package/dist/types/webview.js.map +1 -0
  15. package/dist/web/middleware/auth.d.ts.map +1 -1
  16. package/dist/web/middleware/auth.js +75 -3
  17. package/dist/web/middleware/auth.js.map +1 -1
  18. package/dist/web/public/admin-ui.js.gz +0 -0
  19. package/dist/web/public/api-client.c9b1cddc.js.gz +0 -0
  20. package/dist/web/public/app.adc992cd.js +38 -0
  21. package/dist/web/public/app.adc992cd.js.br +0 -0
  22. package/dist/web/public/app.adc992cd.js.gz +0 -0
  23. package/dist/web/public/{constants.21a0a83e.js → constants.e7175b95.js} +3 -0
  24. package/dist/web/public/constants.e7175b95.js.br +0 -0
  25. package/dist/web/public/{constants.21a0a83e.js.gz → constants.e7175b95.js.gz} +0 -0
  26. package/dist/web/public/cron-ui.js.gz +0 -0
  27. package/dist/web/public/i18n.4dcf1b87.js.gz +0 -0
  28. package/dist/web/public/image-input.ee16ad88.js.gz +0 -0
  29. package/dist/web/public/index.html +86 -12
  30. package/dist/web/public/index.html.br +0 -0
  31. package/dist/web/public/index.html.gz +0 -0
  32. package/dist/web/public/input-cjk.63794d0b.js.gz +0 -0
  33. package/dist/web/public/keyboard-accessory.3f91acef.js.gz +0 -0
  34. package/dist/web/public/mobile-handlers.bc2b8c1d.js.gz +0 -0
  35. package/dist/web/public/mobile.2ebdbb03.css +1 -0
  36. package/dist/web/public/mobile.2ebdbb03.css.br +0 -0
  37. package/dist/web/public/mobile.2ebdbb03.css.gz +0 -0
  38. package/dist/web/public/notification-manager.fca811fd.js.gz +0 -0
  39. package/dist/web/public/orchestrator-panel.js.gz +0 -0
  40. package/dist/web/public/panels-ui.58582d4c.js.gz +0 -0
  41. package/dist/web/public/ralph-panel.6de2d0f8.js.gz +0 -0
  42. package/dist/web/public/ralph-wizard.13a1831e.js.gz +0 -0
  43. package/dist/web/public/respawn-ui.2d249da9.js.gz +0 -0
  44. package/dist/web/public/sanitize-html.bc7078d6.js.gz +0 -0
  45. package/dist/web/public/{session-ui.713c8836.js → session-ui.fd39c53c.js} +2 -2
  46. package/dist/web/public/session-ui.fd39c53c.js.br +0 -0
  47. package/dist/web/public/session-ui.fd39c53c.js.gz +0 -0
  48. package/dist/web/public/{settings-ui.0259fbe8.js → settings-ui.478c8242.js} +2 -2
  49. package/dist/web/public/settings-ui.478c8242.js.br +0 -0
  50. package/dist/web/public/settings-ui.478c8242.js.gz +0 -0
  51. package/dist/web/public/styles.3f797179.css +1 -0
  52. package/dist/web/public/styles.3f797179.css.br +0 -0
  53. package/dist/web/public/styles.3f797179.css.gz +0 -0
  54. package/dist/web/public/subagent-windows.69b60c35.js.gz +0 -0
  55. package/dist/web/public/sw.js.gz +0 -0
  56. package/dist/web/public/terminal-ui.2d582bf6.js +3 -0
  57. package/dist/web/public/terminal-ui.2d582bf6.js.br +0 -0
  58. package/dist/web/public/terminal-ui.2d582bf6.js.gz +0 -0
  59. package/dist/web/public/ultracode-panel.js.gz +0 -0
  60. package/dist/web/public/ultracode-windows.js.gz +0 -0
  61. package/dist/web/public/upload.html.gz +0 -0
  62. package/dist/web/public/vendor/dompurify.min.js.gz +0 -0
  63. package/dist/web/public/vendor/marked.min.js.gz +0 -0
  64. package/dist/web/public/vendor/xterm-addon-fit.min.js.gz +0 -0
  65. package/dist/web/public/vendor/xterm-addon-serialize.min.js.gz +0 -0
  66. package/dist/web/public/vendor/xterm-addon-unicode11.min.js.gz +0 -0
  67. package/dist/web/public/vendor/xterm-addon-webgl.min.js.gz +0 -0
  68. package/dist/web/public/vendor/xterm-zerolag-input.137ad9f0.js.gz +0 -0
  69. package/dist/web/public/vendor/xterm.css.gz +0 -0
  70. package/dist/web/public/vendor/xterm.min.js.gz +0 -0
  71. package/dist/web/public/voice-input.085e9e73.js.gz +0 -0
  72. package/dist/web/public/webview-tabs.js +445 -0
  73. package/dist/web/public/webview-tabs.js.br +0 -0
  74. package/dist/web/public/webview-tabs.js.gz +0 -0
  75. package/dist/web/routes/index.d.ts +1 -0
  76. package/dist/web/routes/index.d.ts.map +1 -1
  77. package/dist/web/routes/index.js +1 -0
  78. package/dist/web/routes/index.js.map +1 -1
  79. package/dist/web/routes/webview-routes.d.ts +50 -0
  80. package/dist/web/routes/webview-routes.d.ts.map +1 -0
  81. package/dist/web/routes/webview-routes.js +541 -0
  82. package/dist/web/routes/webview-routes.js.map +1 -0
  83. package/dist/web/schemas.d.ts +26 -0
  84. package/dist/web/schemas.d.ts.map +1 -1
  85. package/dist/web/schemas.js +34 -0
  86. package/dist/web/schemas.js.map +1 -1
  87. package/dist/web/server.d.ts.map +1 -1
  88. package/dist/web/server.js +11 -5
  89. package/dist/web/server.js.map +1 -1
  90. package/dist/web/sse-events.d.ts +7 -1
  91. package/dist/web/sse-events.d.ts.map +1 -1
  92. package/dist/web/sse-events.js +8 -1
  93. package/dist/web/sse-events.js.map +1 -1
  94. package/dist/web/webview-proxy.d.ts +181 -0
  95. package/dist/web/webview-proxy.d.ts.map +1 -0
  96. package/dist/web/webview-proxy.js +491 -0
  97. package/dist/web/webview-proxy.js.map +1 -0
  98. package/dist/webview-capabilities.d.ts +55 -0
  99. package/dist/webview-capabilities.d.ts.map +1 -0
  100. package/dist/webview-capabilities.js +102 -0
  101. package/dist/webview-capabilities.js.map +1 -0
  102. package/dist/webview-store.d.ts +16 -0
  103. package/dist/webview-store.d.ts.map +1 -0
  104. package/dist/webview-store.js +34 -0
  105. package/dist/webview-store.js.map +1 -0
  106. package/package.json +11 -2
  107. package/dist/web/public/app.2e95c82d.js +0 -38
  108. package/dist/web/public/app.2e95c82d.js.br +0 -0
  109. package/dist/web/public/app.2e95c82d.js.gz +0 -0
  110. package/dist/web/public/constants.21a0a83e.js.br +0 -0
  111. package/dist/web/public/mobile.f2dcfa13.css +0 -1
  112. package/dist/web/public/mobile.f2dcfa13.css.br +0 -0
  113. package/dist/web/public/mobile.f2dcfa13.css.gz +0 -0
  114. package/dist/web/public/session-ui.713c8836.js.br +0 -0
  115. package/dist/web/public/session-ui.713c8836.js.gz +0 -0
  116. package/dist/web/public/settings-ui.0259fbe8.js.br +0 -0
  117. package/dist/web/public/settings-ui.0259fbe8.js.gz +0 -0
  118. package/dist/web/public/styles.d2f415e2.css +0 -1
  119. package/dist/web/public/styles.d2f415e2.css.br +0 -0
  120. package/dist/web/public/styles.d2f415e2.css.gz +0 -0
  121. package/dist/web/public/terminal-ui.9ea677e9.js +0 -3
  122. package/dist/web/public/terminal-ui.9ea677e9.js.br +0 -0
  123. package/dist/web/public/terminal-ui.9ea677e9.js.gz +0 -0
package/README.md CHANGED
@@ -16,6 +16,8 @@
16
16
  <img src="https://img.shields.io/badge/Tests-2861%20total-22c55e?style=flat-square" alt="Tests">
17
17
  <a href="https://www.npmjs.com/package/aicodeman"><img src="https://img.shields.io/npm/v/aicodeman?style=flat-square&label=npm&color=22c55e" alt="npm version"></a>
18
18
  <a href="https://github.com/Ark0N/Codeman/stargazers"><img src="https://img.shields.io/github/stars/Ark0N/Codeman?style=flat-square&color=eab308" alt="GitHub stars"></a>
19
+ <a href="https://github.com/Ark0N/Codeman/graphs/contributors"><img src="https://img.shields.io/github/contributors/Ark0N/Codeman?style=flat-square&color=3b82f6" alt="Contributors"></a>
20
+ <a href="https://github.com/Ark0N/Codeman/commits/master"><img src="https://img.shields.io/github/commit-activity/t/Ark0N/Codeman?style=flat-square&color=1e3a5f" alt="Total commits"></a>
19
21
  </p>
20
22
 
21
23
  <p align="center">
@@ -23,7 +25,7 @@
23
25
  </p>
24
26
 
25
27
  <p align="center">
26
- <img src="docs/images/subagent-demo.gif" alt="Codeman — parallel subagent visualization" width="900">
28
+ <img src="docs/images/subagent-demo-20260724.gif" alt="Codeman — parallel subagent visualization" width="900">
27
29
  </p>
28
30
 
29
31
  **Codeman** is a self-hosted mission control for AI coding agents. It spawns Claude Code, OpenCode, Codex, or Gemini CLI inside persistent tmux sessions, streams the real terminal to any browser, and keeps agents productive after you walk away: it re-prompts on idle, resumes when a usage limit resets, runs scheduled jobs, and shows every background agent working in real time.
@@ -33,7 +35,11 @@
33
35
  - **Runs while you sleep** - [idle detection + respawn cycling](#respawn-controller) and auto-resume when a subscription limit resets, for 24+ hour unattended runs
34
36
  - **See your agents think** - [live floating windows](#live-agent-visualization) for every subagent and teammate, with real-time transcripts
35
37
  - **Nothing gets lost** - tmux persistence across restarts and network drops, exactly-once input delivery, full-scrollback replay
36
- - **Self-hosted and boring on purpose** - loopback-only by default, MIT licensed, no telemetry, runs entirely on your machine
38
+ - **Self-hosted and private** - loopback-only by default, MIT licensed, no telemetry, runs entirely on your machine
39
+
40
+ <p align="center">
41
+ <img src="docs/images/codeman-tour-20260724.png" alt="Codeman dashboard tour: session tabs per case, one-click Run for new agents, live plan usage in the header" width="900">
42
+ </p>
37
43
 
38
44
  ---
39
45
 
@@ -213,12 +219,12 @@ The most responsive AI coding agent experience on any phone. Full xterm.js termi
213
219
  <table>
214
220
  <tr>
215
221
  <td align="center" width="33%"><img src="docs/screenshots/mobile-landing-qr.png" alt="Mobile — landing page with QR auth" width="260"></td>
216
- <td align="center" width="33%"><img src="docs/screenshots/mobile-session-idle.png" alt="Mobile — idle session with keyboard accessory" width="260"></td>
222
+ <td align="center" width="33%"><img src="docs/screenshots/mobile-session-keyboard-20260727.png" alt="Mobile — answering an agent's plan prompt with the keyboard accessory bar and Enter button" width="260"></td>
217
223
  <td align="center" width="33%"><img src="docs/screenshots/mobile-session-active.png" alt="Mobile — active agent session" width="260"></td>
218
224
  </tr>
219
225
  <tr>
220
226
  <td align="center"><em>Landing page with QR auth</em></td>
221
- <td align="center"><em>Keyboard accessory bar</em></td>
227
+ <td align="center"><em>Answering prompts by touch</em></td>
222
228
  <td align="center"><em>Agent working in real-time</em></td>
223
229
  </tr>
224
230
  </table>
@@ -248,7 +254,12 @@ The security design addresses all 6 critical QR auth flaws identified in ["Demys
248
254
 
249
255
  ### Touch-Optimized Interface
250
256
 
257
+ <p align="center">
258
+ <img src="docs/screenshots/mobile-toolbar-enter-20260727.png" alt="Mobile toolbar: accessory bar with /init, /clear, clipboard and Esc above the Run, case, stop, Enter, voice and settings controls" width="560">
259
+ </p>
260
+
251
261
  - **Keyboard accessory bar** — `/init`, `/clear`, `/compact` quick-action buttons above the virtual keyboard. Destructive commands (`/clear`, `/compact`) require a double-press to confirm — first tap arms the button, second tap executes — so you never fire one by accident on a bumpy commute
262
+ - **Dedicated Enter button** — submitting is a constant need on a touch keyboard, so the phone toolbar gives it a button of its own. It replays the keypress through the terminal, so text buffered by local echo is flushed first rather than stranded. Starting a shell moves into the Run dropdown (`Terminal / Shell`), which is the rarer action
252
263
  - **Swipe navigation** — left/right on the terminal to switch sessions (80px threshold, 300ms)
253
264
  - **Smart keyboard handling** — toolbar and terminal shift up when keyboard opens (uses `visualViewport` API with 100px threshold for iOS address bar drift)
254
265
  - **Safe area support** — respects iPhone notch and home indicator via `env(safe-area-inset-*)`
@@ -270,7 +281,7 @@ codeman web --https
270
281
  Watch background agents work in real-time. Codeman monitors agent activity and displays each agent in a draggable floating window with animated Matrix-style connection lines back to the parent session.
271
282
 
272
283
  <p align="center">
273
- <img src="docs/images/subagent-spawn.png" alt="Subagent Visualization" width="900">
284
+ <img src="docs/images/subagent-windows-20260724.png" alt="Subagent Visualization: three parallel Explore agents as floating windows with live tool-call feeds" width="900">
274
285
  </p>
275
286
 
276
287
  - **Floating terminal windows** — draggable, resizable panels for each agent with a live activity log showing every tool call, file read, and progress update as it happens
@@ -279,6 +290,12 @@ Watch background agents work in real-time. Codeman monitors agent activity and d
279
290
  - **Auto-behavior** — windows auto-open on spawn, auto-minimize on completion, tab badge shows "AGENT" or "AGENTS (n)" count
280
291
  - **Nested agents** — supports 3-level hierarchies (lead session -> teammate agents -> sub-subagents)
281
292
 
293
+ Multi-agent Workflow runs ("ultracode") get the same treatment: a floating run window tracks the whole workflow live, with phases, per-agent token counts, and the current tool of every agent:
294
+
295
+ <p align="center">
296
+ <img src="docs/images/ultracode-window-20260724.png" alt="Ultracode workflow visualization: a live run window with per-agent tokens and phases" width="900">
297
+ </p>
298
+
282
299
  **Agent Teams** — first-class support for Claude Code's native multi-agent teams (`CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1`). `TeamWatcher` polls `~/.claude/teams/`, matches teammates to their lead session, and surfaces them as live subagent windows with **team-aware idle detection** — so the Respawn Controller won't fire while teammates are still working. See [`docs/agent-teams/`](docs/agent-teams/).
283
300
 
284
301
  ---
@@ -587,7 +604,7 @@ When someone authenticates via QR, the desktop shows a notification toast with t
587
604
 
588
605
  ## Security
589
606
 
590
- By default Codeman launches sessions with `--dangerously-skip-permissions`, so the web UI is by design a remote-code-execution surface for whoever can reach it — the whole security model exists to control _who_ that is. (The startup permission mode is configurable; see below.) Recent hardening (v0.9.0 + v0.9.5) closes the browser-driven attack paths that bite self-hosted dev tools. Full model: [`docs/security-architecture.md`](docs/security-architecture.md). **Found a vulnerability?** See [`SECURITY.md`](SECURITY.md) for private disclosure and the list of known limitations.
607
+ By default Codeman launches sessions with `--dangerously-skip-permissions`, so the web UI is by design a remote-code-execution surface for whoever can reach it — the whole security model exists to control _who_ that is. (The startup permission mode is configurable; see below.) Recent hardening (v0.9.0 + v0.9.5) closes the browser-driven attack paths that bite self-hosted dev tools. Full model: [`docs/security-architecture.md`](docs/security-architecture.md). **Found a vulnerability?** See [`SECURITY.md`](.github/SECURITY.md) for private disclosure and the list of known limitations.
591
608
 
592
609
  ### Network & access
593
610
 
package/README.zh-CN.md CHANGED
@@ -18,10 +18,16 @@
18
18
  <a href="https://www.typescriptlang.org/"><img src="https://img.shields.io/badge/TypeScript-5.9-3b82f6?style=flat-square&logo=typescript&logoColor=white" alt="TypeScript 5.9"></a>
19
19
  <a href="https://fastify.dev/"><img src="https://img.shields.io/badge/Fastify-5.x-1e3a5f?style=flat-square&logo=fastify&logoColor=white" alt="Fastify"></a>
20
20
  <img src="https://img.shields.io/badge/Tests-2861%20total-22c55e?style=flat-square" alt="Tests">
21
+ <a href="https://github.com/Ark0N/Codeman/graphs/contributors"><img src="https://img.shields.io/github/contributors/Ark0N/Codeman?style=flat-square&color=3b82f6" alt="Contributors"></a>
22
+ <a href="https://github.com/Ark0N/Codeman/commits/master"><img src="https://img.shields.io/github/commit-activity/t/Ark0N/Codeman?style=flat-square&color=1e3a5f" alt="Total commits"></a>
21
23
  </p>
22
24
 
23
25
  <p align="center">
24
- <img src="docs/images/subagent-demo.gif" alt="Codeman — 并行子智能体可视化" width="900">
26
+ <img src="docs/images/subagent-demo-20260724.gif" alt="Codeman — 并行子智能体可视化" width="900">
27
+ </p>
28
+
29
+ <p align="center">
30
+ <img src="docs/images/codeman-tour-20260724.png" alt="Codeman 仪表盘导览:按项目分组的会话标签页、一键 Run 启动新智能体、页头实时用量" width="900">
25
31
  </p>
26
32
 
27
33
  > 本文档由英文版 [`README.md`](README.md) 翻译而来。如有出入,以英文版为准。
@@ -203,12 +209,12 @@ codeman web -H 0.0.0.0 # 绑定局域网 —— 必须设置 CODEMAN_
203
209
  <table>
204
210
  <tr>
205
211
  <td align="center" width="33%"><img src="docs/screenshots/mobile-landing-qr.png" alt="移动端 — 带二维码认证的登录页" width="260"></td>
206
- <td align="center" width="33%"><img src="docs/screenshots/mobile-session-idle.png" alt="移动端 — 带键盘配件栏的空闲会话" width="260"></td>
212
+ <td align="center" width="33%"><img src="docs/screenshots/mobile-session-keyboard-20260727.png" alt="移动端 — 通过键盘配件栏与 Enter 按钮回答智能体的方案提示" width="260"></td>
207
213
  <td align="center" width="33%"><img src="docs/screenshots/mobile-session-active.png" alt="移动端 — 活动中的智能体会话" width="260"></td>
208
214
  </tr>
209
215
  <tr>
210
216
  <td align="center"><em>带二维码认证的登录页</em></td>
211
- <td align="center"><em>键盘配件栏</em></td>
217
+ <td align="center"><em>触控回答提示</em></td>
212
218
  <td align="center"><em>智能体实时工作中</em></td>
213
219
  </tr>
214
220
  </table>
@@ -238,7 +244,12 @@ codeman web -H 0.0.0.0 # 绑定局域网 —— 必须设置 CODEMAN_
238
244
 
239
245
  ### 触控优化界面
240
246
 
247
+ <p align="center">
248
+ <img src="docs/screenshots/mobile-toolbar-enter-20260727.png" alt="移动端工具栏:配件栏的 /init、/clear、剪贴板与 Esc,下方是 Run、案例、停止、Enter、语音与设置控件" width="560">
249
+ </p>
250
+
241
251
  - **键盘配件栏** —— 在虚拟键盘上方提供 `/init`、`/clear`、`/compact` 快捷按钮。破坏性命令(`/clear`、`/compact`)需双击确认 —— 第一次点击「上膛」,第二次点击执行 —— 这样在颠簸的通勤路上也不会误触
252
+ - **独立的 Enter 按钮** —— 在触控键盘上提交是高频操作,因此手机工具栏为它单独设了一个按钮。它会以按键的方式回放,从而先冲刷本地回显缓冲的文本,不会让内容滞留在屏幕上。启动 Shell 这类低频操作则移入 Run 下拉菜单(`Terminal / Shell`)
242
253
  - **滑动导航** —— 在终端上左右滑动切换会话(阈值 80px,300ms)
243
254
  - **智能键盘处理** —— 键盘弹出时工具栏与终端整体上移(使用 `visualViewport` API,并对 iOS 地址栏漂移设置 100px 阈值)
244
255
  - **安全区适配** —— 通过 `env(safe-area-inset-*)` 适配 iPhone 刘海与底部 Home 指示条
@@ -260,7 +271,7 @@ codeman web --https
260
271
  实时观看后台智能体工作。Codeman 监控智能体活动,将每个智能体显示在一个可拖拽的浮动窗口中,并用「黑客帝国」风格的动态连接线连回父会话。
261
272
 
262
273
  <p align="center">
263
- <img src="docs/images/subagent-spawn.png" alt="子智能体可视化" width="900">
274
+ <img src="docs/images/subagent-windows-20260724.png" alt="子智能体可视化 —— 三个并行 Explore 智能体的浮动窗口与实时工具调用日志" width="900">
264
275
  </p>
265
276
 
266
277
  - **浮动终端窗口** —— 每个智能体一个可拖拽、可调整大小的面板,带实时活动日志,逐条展示每一次工具调用、文件读取与进度更新
@@ -269,6 +280,12 @@ codeman web --https
269
280
  - **自动行为** —— 窗口在产生时自动打开、完成时自动最小化,标签徽标显示「AGENT」或「AGENTS (n)」计数
270
281
  - **嵌套智能体** —— 支持 3 层层级(主会话 → 团队成员智能体 → 子-子智能体)
271
282
 
283
+ 多智能体 Workflow 运行(「ultracode」)同样可视化:一个浮动运行窗口实时跟踪整个工作流,展示阶段、各智能体的 token 用量与当前工具:
284
+
285
+ <p align="center">
286
+ <img src="docs/images/ultracode-window-20260724.png" alt="Ultracode 工作流可视化 —— 实时运行窗口,含各智能体 token 与阶段" width="900">
287
+ </p>
288
+
272
289
  **智能体团队(Agent Teams)** —— 一等公民式支持 Claude Code 原生的多智能体团队(`CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1`)。`TeamWatcher` 轮询 `~/.claude/teams/`,将团队成员匹配到其主会话,并以实时子智能体窗口呈现,且具备**团队感知的空闲检测** —— 因此当团队成员仍在工作时,重生控制器不会被触发。详见 [`docs/agent-teams/`](docs/agent-teams/)。
273
290
 
274
291
  ---
@@ -577,7 +594,7 @@ URL 被刻意保持精简(`/q/` 路径 + 6 字符码 ≈ 53–56 个字符)
577
594
 
578
595
  ## 安全
579
596
 
580
- Codeman 默认用 `--dangerously-skip-permissions` 启动会话,因此 Web UI 在设计上对任何能访问到它的人都是一个远程代码执行面 —— 整套安全模型的存在就是为了控制*谁*能访问。(启动权限模式可配置,见下文。)近期加固(v0.9.0 + v0.9.5)封堵了那些常困扰自托管开发工具的浏览器驱动攻击路径。完整模型:[`docs/security-architecture.md`](docs/security-architecture.md)。**发现了漏洞?** 私下披露方式与已知限制清单见 [`SECURITY.md`](SECURITY.md)。
597
+ Codeman 默认用 `--dangerously-skip-permissions` 启动会话,因此 Web UI 在设计上对任何能访问到它的人都是一个远程代码执行面 —— 整套安全模型的存在就是为了控制*谁*能访问。(启动权限模式可配置,见下文。)近期加固(v0.9.0 + v0.9.5)封堵了那些常困扰自托管开发工具的浏览器驱动攻击路径。完整模型:[`docs/security-architecture.md`](docs/security-architecture.md)。**发现了漏洞?** 私下披露方式与已知限制清单见 [`SECURITY.md`](.github/SECURITY.md)。
581
598
 
582
599
  ### 网络与访问
583
600
 
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Limits and timeouts for web tabs (dashboards embedded as Codeman tabs).
3
+ *
4
+ * Every value here bounds something an untrusted-ish upstream controls: how many
5
+ * dashboards can be saved, how long the server will wait on one, how much of a
6
+ * response it will buffer before rewriting HTML, and how many sockets a single
7
+ * dashboard may hold open. Env-overridable in the same style as the other config
8
+ * modules.
9
+ */
10
+ /** Max saved webviews (per owner in multi-user mode). */
11
+ export declare const MAX_WEBVIEWS: number;
12
+ /**
13
+ * Max iframes kept mounted at once. Switching tabs must not reload a dashboard,
14
+ * so frames stay alive while hidden; past this many, the least-recently-viewed
15
+ * frame is evicted. Consumed by the frontend via `GET /api/webviews`.
16
+ */
17
+ export declare const MAX_LIVE_WEBVIEW_FRAMES: number;
18
+ /** How long a minted proxy capability stays valid (rolling, refreshed on use). */
19
+ export declare const WEBVIEW_CAPABILITY_TTL_MS: number;
20
+ /** Max concurrent capabilities held in memory before the oldest are dropped. */
21
+ export declare const MAX_WEBVIEW_CAPABILITIES = 200;
22
+ /** Upstream request timeout for a proxied HTTP request. */
23
+ export declare const WEBVIEW_UPSTREAM_TIMEOUT_MS: number;
24
+ /** Shorter timeout for the editor's "Test" probe, which a human is waiting on. */
25
+ export declare const WEBVIEW_PROBE_TIMEOUT_MS: number;
26
+ /**
27
+ * Max bytes of an HTML response buffered for `<base>` injection and link
28
+ * rewriting. Larger HTML documents stream through untouched: the rewrite is a
29
+ * convenience, and buffering an unbounded upstream body is a memory hazard.
30
+ */
31
+ export declare const MAX_WEBVIEW_HTML_REWRITE_BYTES: number;
32
+ /** Max concurrent proxied WebSockets per webview (mirrors MAX_WS_PER_SESSION). */
33
+ export declare const MAX_WEBVIEW_SOCKETS: number;
34
+ /** URL path prefix the proxy is mounted at. Single source of truth. */
35
+ export declare const WEBVIEW_PROXY_PREFIX = "/webview";
36
+ //# sourceMappingURL=webview-limits.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webview-limits.d.ts","sourceRoot":"","sources":["../../src/config/webview-limits.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAOH,yDAAyD;AACzD,eAAO,MAAM,YAAY,QAAqC,CAAC;AAE/D;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,QAA+C,CAAC;AAEpF,kFAAkF;AAClF,eAAO,MAAM,yBAAyB,QAAmE,CAAC;AAE1G,gFAAgF;AAChF,eAAO,MAAM,wBAAwB,MAAM,CAAC;AAE5C,2DAA2D;AAC3D,eAAO,MAAM,2BAA2B,QAA+C,CAAC;AAExF,kFAAkF;AAClF,eAAO,MAAM,wBAAwB,QAAoD,CAAC;AAE1F;;;;GAIG;AACH,eAAO,MAAM,8BAA8B,QAA4D,CAAC;AAExG,kFAAkF;AAClF,eAAO,MAAM,mBAAmB,QAA2C,CAAC;AAE5E,uEAAuE;AACvE,eAAO,MAAM,oBAAoB,aAAa,CAAC"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Limits and timeouts for web tabs (dashboards embedded as Codeman tabs).
3
+ *
4
+ * Every value here bounds something an untrusted-ish upstream controls: how many
5
+ * dashboards can be saved, how long the server will wait on one, how much of a
6
+ * response it will buffer before rewriting HTML, and how many sockets a single
7
+ * dashboard may hold open. Env-overridable in the same style as the other config
8
+ * modules.
9
+ */
10
+ function envInt(name, fallback) {
11
+ const parsed = parseInt(process.env[name] || '', 10);
12
+ return Number.isFinite(parsed) && parsed > 0 ? parsed : fallback;
13
+ }
14
+ /** Max saved webviews (per owner in multi-user mode). */
15
+ export const MAX_WEBVIEWS = envInt('CODEMAN_MAX_WEBVIEWS', 50);
16
+ /**
17
+ * Max iframes kept mounted at once. Switching tabs must not reload a dashboard,
18
+ * so frames stay alive while hidden; past this many, the least-recently-viewed
19
+ * frame is evicted. Consumed by the frontend via `GET /api/webviews`.
20
+ */
21
+ export const MAX_LIVE_WEBVIEW_FRAMES = envInt('CODEMAN_MAX_LIVE_WEBVIEW_FRAMES', 6);
22
+ /** How long a minted proxy capability stays valid (rolling, refreshed on use). */
23
+ export const WEBVIEW_CAPABILITY_TTL_MS = envInt('CODEMAN_WEBVIEW_CAPABILITY_TTL_MS', 12 * 60 * 60 * 1000);
24
+ /** Max concurrent capabilities held in memory before the oldest are dropped. */
25
+ export const MAX_WEBVIEW_CAPABILITIES = 200;
26
+ /** Upstream request timeout for a proxied HTTP request. */
27
+ export const WEBVIEW_UPSTREAM_TIMEOUT_MS = envInt('CODEMAN_WEBVIEW_TIMEOUT_MS', 30_000);
28
+ /** Shorter timeout for the editor's "Test" probe, which a human is waiting on. */
29
+ export const WEBVIEW_PROBE_TIMEOUT_MS = envInt('CODEMAN_WEBVIEW_PROBE_TIMEOUT_MS', 8_000);
30
+ /**
31
+ * Max bytes of an HTML response buffered for `<base>` injection and link
32
+ * rewriting. Larger HTML documents stream through untouched: the rewrite is a
33
+ * convenience, and buffering an unbounded upstream body is a memory hazard.
34
+ */
35
+ export const MAX_WEBVIEW_HTML_REWRITE_BYTES = envInt('CODEMAN_MAX_WEBVIEW_HTML_BYTES', 8 * 1024 * 1024);
36
+ /** Max concurrent proxied WebSockets per webview (mirrors MAX_WS_PER_SESSION). */
37
+ export const MAX_WEBVIEW_SOCKETS = envInt('CODEMAN_MAX_WEBVIEW_SOCKETS', 8);
38
+ /** URL path prefix the proxy is mounted at. Single source of truth. */
39
+ export const WEBVIEW_PROXY_PREFIX = '/webview';
40
+ //# sourceMappingURL=webview-limits.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webview-limits.js","sourceRoot":"","sources":["../../src/config/webview-limits.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,SAAS,MAAM,CAAC,IAAY,EAAE,QAAgB;IAC5C,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;IACrD,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC;AACnE,CAAC;AAED,yDAAyD;AACzD,MAAM,CAAC,MAAM,YAAY,GAAG,MAAM,CAAC,sBAAsB,EAAE,EAAE,CAAC,CAAC;AAE/D;;;;GAIG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,MAAM,CAAC,iCAAiC,EAAE,CAAC,CAAC,CAAC;AAEpF,kFAAkF;AAClF,MAAM,CAAC,MAAM,yBAAyB,GAAG,MAAM,CAAC,mCAAmC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;AAE1G,gFAAgF;AAChF,MAAM,CAAC,MAAM,wBAAwB,GAAG,GAAG,CAAC;AAE5C,2DAA2D;AAC3D,MAAM,CAAC,MAAM,2BAA2B,GAAG,MAAM,CAAC,4BAA4B,EAAE,MAAM,CAAC,CAAC;AAExF,kFAAkF;AAClF,MAAM,CAAC,MAAM,wBAAwB,GAAG,MAAM,CAAC,kCAAkC,EAAE,KAAK,CAAC,CAAC;AAE1F;;;;GAIG;AACH,MAAM,CAAC,MAAM,8BAA8B,GAAG,MAAM,CAAC,gCAAgC,EAAE,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC;AAExG,kFAAkF;AAClF,MAAM,CAAC,MAAM,mBAAmB,GAAG,MAAM,CAAC,6BAA6B,EAAE,CAAC,CAAC,CAAC;AAE5E,uEAAuE;AACvE,MAAM,CAAC,MAAM,oBAAoB,GAAG,UAAU,CAAC"}
@@ -69,4 +69,5 @@ export * from './update.js';
69
69
  export * from './workflow-run.js';
70
70
  export * from './search.js';
71
71
  export * from './user.js';
72
+ export * from './webview.js';
72
73
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoDG;AAEH,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoDG;AAEH,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC"}
@@ -69,4 +69,5 @@ export * from './update.js';
69
69
  export * from './workflow-run.js';
70
70
  export * from './search.js';
71
71
  export * from './user.js';
72
+ export * from './webview.js';
72
73
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoDG;AAEH,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoDG;AAEH,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC"}
@@ -0,0 +1,84 @@
1
+ /**
2
+ * @fileoverview Web tab (dashboard) types.
3
+ *
4
+ * A "webview" is a saved URL that Codeman renders as a tab alongside agent
5
+ * sessions: Grafana on :3000, a Uptime-Kuma on :4000, an internal status page.
6
+ * It is deliberately NOT a sixth `SessionMode`, it has no PTY, no tmux, no
7
+ * respawn and no idle detection. Same reasoning that keeps Docker and remote-SSH
8
+ * as case overlays rather than modes.
9
+ *
10
+ * Key exports:
11
+ * - Webview, the persisted record (`~/.codeman/webviews.json`).
12
+ * - WebviewEmbedMode, 'proxy' (served through Codeman's origin) or 'direct'
13
+ * (a plain cross-origin iframe, only viable for HTTPS targets that allow framing).
14
+ * - WebviewProbe, the result of the server-side reachability/framing probe.
15
+ * - WebviewOpenData, what `POST /api/webviews/:id/open` hands the browser.
16
+ *
17
+ * No I/O here. Persistence lives in `src/webview-store.ts`, capability minting in
18
+ * `src/webview-capabilities.ts`, the proxy helpers in `src/web/webview-proxy.ts`.
19
+ */
20
+ /**
21
+ * How the browser should embed a webview.
22
+ *
23
+ * - `proxy`: the iframe points at `/webview/<capability>/` on Codeman's own
24
+ * origin and the server relays to the target. Required whenever the target is
25
+ * plain HTTP (an HTTPS Codeman page cannot embed it: mixed content) or refuses
26
+ * framing via `X-Frame-Options` / `frame-ancestors`.
27
+ * - `direct`: the iframe points at the target URL itself. Cheaper, but only works
28
+ * for HTTPS targets that permit framing, and needs the target origin added to
29
+ * the page CSP's `frame-src`.
30
+ */
31
+ export type WebviewEmbedMode = 'proxy' | 'direct';
32
+ /** A saved dashboard, persisted to `~/.codeman/webviews.json`. */
33
+ export interface Webview {
34
+ id: string;
35
+ /** Display name shown on the tab. */
36
+ name: string;
37
+ /** Absolute target URL. `http:` / `https:` only, never with embedded credentials. */
38
+ url: string;
39
+ /** Optional single-glyph tab icon (emoji or letter). */
40
+ icon?: string;
41
+ /** Default embed strategy for this dashboard. */
42
+ embedMode: WebviewEmbedMode;
43
+ /**
44
+ * When false (the default) the iframe is sandboxed WITHOUT `allow-same-origin`,
45
+ * so a proxied page runs in an opaque origin and cannot read the Codeman page or
46
+ * call its API. Setting this to true trades that isolation for the page's own
47
+ * cookies/localStorage, only for dashboards the user fully trusts.
48
+ */
49
+ trusted: boolean;
50
+ /** Multi-user owner (username). Undefined in single-user mode. */
51
+ owner?: string;
52
+ createdAt: number;
53
+ lastOpenedAt?: number;
54
+ }
55
+ /** Result of the server-side probe used by the "Test" button in the editor. */
56
+ export interface WebviewProbe {
57
+ /** True when the server could complete an HTTP request to the target. */
58
+ reachable: boolean;
59
+ /** Upstream status code, when a response came back. */
60
+ status?: number;
61
+ /** Raw `X-Frame-Options` value, if the target sent one. */
62
+ xFrameOptions?: string;
63
+ /** The `frame-ancestors` directive extracted from the target's CSP, if any. */
64
+ frameAncestors?: string;
65
+ /** True when the target permits being framed cross-origin by this Codeman. */
66
+ framable: boolean;
67
+ /** Strategy the UI should default to for this URL. */
68
+ recommendedMode: WebviewEmbedMode;
69
+ /** Human-readable explanation of the recommendation (or the failure). */
70
+ reason: string;
71
+ }
72
+ /** Payload of `POST /api/webviews/:id/open`. */
73
+ export interface WebviewOpenData {
74
+ /** The webview being opened (echoed so the client can refresh its copy). */
75
+ webview: Webview;
76
+ /**
77
+ * Same-origin path the iframe should load. Present for `proxy` mode only;
78
+ * `direct` mode uses `webview.url` instead.
79
+ */
80
+ embedUrl?: string;
81
+ /** Epoch ms at which the capability behind `embedUrl` stops working. */
82
+ expiresAt?: number;
83
+ }
84
+ //# sourceMappingURL=webview.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webview.d.ts","sourceRoot":"","sources":["../../src/types/webview.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH;;;;;;;;;;GAUG;AACH,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,QAAQ,CAAC;AAElD,kEAAkE;AAClE,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,qCAAqC;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,qFAAqF;IACrF,GAAG,EAAE,MAAM,CAAC;IACZ,wDAAwD;IACxD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,iDAAiD;IACjD,SAAS,EAAE,gBAAgB,CAAC;IAC5B;;;;;OAKG;IACH,OAAO,EAAE,OAAO,CAAC;IACjB,kEAAkE;IAClE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,+EAA+E;AAC/E,MAAM,WAAW,YAAY;IAC3B,yEAAyE;IACzE,SAAS,EAAE,OAAO,CAAC;IACnB,uDAAuD;IACvD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,2DAA2D;IAC3D,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,+EAA+E;IAC/E,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,8EAA8E;IAC9E,QAAQ,EAAE,OAAO,CAAC;IAClB,sDAAsD;IACtD,eAAe,EAAE,gBAAgB,CAAC;IAClC,yEAAyE;IACzE,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,gDAAgD;AAChD,MAAM,WAAW,eAAe;IAC9B,4EAA4E;IAC5E,OAAO,EAAE,OAAO,CAAC;IACjB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,wEAAwE;IACxE,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * @fileoverview Web tab (dashboard) types.
3
+ *
4
+ * A "webview" is a saved URL that Codeman renders as a tab alongside agent
5
+ * sessions: Grafana on :3000, a Uptime-Kuma on :4000, an internal status page.
6
+ * It is deliberately NOT a sixth `SessionMode`, it has no PTY, no tmux, no
7
+ * respawn and no idle detection. Same reasoning that keeps Docker and remote-SSH
8
+ * as case overlays rather than modes.
9
+ *
10
+ * Key exports:
11
+ * - Webview, the persisted record (`~/.codeman/webviews.json`).
12
+ * - WebviewEmbedMode, 'proxy' (served through Codeman's origin) or 'direct'
13
+ * (a plain cross-origin iframe, only viable for HTTPS targets that allow framing).
14
+ * - WebviewProbe, the result of the server-side reachability/framing probe.
15
+ * - WebviewOpenData, what `POST /api/webviews/:id/open` hands the browser.
16
+ *
17
+ * No I/O here. Persistence lives in `src/webview-store.ts`, capability minting in
18
+ * `src/webview-capabilities.ts`, the proxy helpers in `src/web/webview-proxy.ts`.
19
+ */
20
+ export {};
21
+ //# sourceMappingURL=webview.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webview.js","sourceRoot":"","sources":["../../src/types/webview.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG"}
@@ -1 +1 @@
1
- {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../src/web/middleware/auth.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAgC,MAAM,SAAS,CAAC;AAE7E,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAgD,KAAK,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAU1G,OAAO,EAAqC,KAAK,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAIlF,OAAO,QAAQ,SAAS,CAAC;IACvB,UAAU,cAAc;QACtB,QAAQ,CAAC,EAAE,QAAQ,CAAC;KACrB;CACF;AAGD,eAAO,MAAM,gBAAgB,oBAAoB,CAAC;AAElD,8EAA8E;AAC9E,UAAU,SAAS;IACjB,YAAY,EAAE,kBAAkB,CAAC,MAAM,EAAE,iBAAiB,CAAC,GAAG,IAAI,CAAC;IACnE,YAAY,EAAE,kBAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC;IACxD,cAAc,EAAE,kBAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC;IAC1D,kBAAkB,EAAE,kBAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC;IAC9D,gEAAgE;IAChE,YAAY,EAAE,kBAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC;CACzD;AA6ED;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,eAAe,EAAE,KAAK,EAAE,OAAO,GAAG,SAAS,CAuJtF;AAmKD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,UAAU,GAAG,IAAI,CAazF;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,eAAe,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CAqDlF"}
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../src/web/middleware/auth.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAgC,MAAM,SAAS,CAAC;AAE7E,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAgD,KAAK,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAY1G,OAAO,EAAqC,KAAK,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAIlF,OAAO,QAAQ,SAAS,CAAC;IACvB,UAAU,cAAc;QACtB,QAAQ,CAAC,EAAE,QAAQ,CAAC;KACrB;CACF;AAGD,eAAO,MAAM,gBAAgB,oBAAoB,CAAC;AAElD,8EAA8E;AAC9E,UAAU,SAAS;IACjB,YAAY,EAAE,kBAAkB,CAAC,MAAM,EAAE,iBAAiB,CAAC,GAAG,IAAI,CAAC;IACnE,YAAY,EAAE,kBAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC;IACxD,cAAc,EAAE,kBAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC;IAC1D,kBAAkB,EAAE,kBAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC;IAC9D,gEAAgE;IAChE,YAAY,EAAE,kBAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC;CACzD;AAwHD;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,eAAe,EAAE,KAAK,EAAE,OAAO,GAAG,SAAS,CA6JtF;AAyKD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,UAAU,GAAG,IAAI,CAuBzF;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,eAAe,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CA8DlF"}
@@ -14,6 +14,8 @@ import { AUTH_SESSION_TTL_MS, MAX_AUTH_SESSIONS, AUTH_FAILURE_MAX, AUTH_FAILURE_
14
14
  import { getHookSecret, HOOK_SECRET_HEADER } from '../../config/hook-secret.js';
15
15
  import { isMultiUserMode } from '../../config/multiuser.js';
16
16
  import { findUser, setPassword, touchLastLogin, verifyPassword } from '../../user-store.js';
17
+ import { webviewCapabilities } from '../../webview-capabilities.js';
18
+ import { capabilityFromProxyPath, capabilityFromReferer } from '../webview-proxy.js';
17
19
  import { ApiErrorCode, createErrorResponse } from '../../types.js';
18
20
  // Auth session cookie name
19
21
  export const AUTH_COOKIE_NAME = 'codeman_session';
@@ -89,6 +91,48 @@ function isPasswordChangeExempt(req) {
89
91
  return false;
90
92
  return !url.startsWith('/api/');
91
93
  }
94
+ /**
95
+ * Whether this request carries a VALID web-tab proxy capability.
96
+ *
97
+ * Requests under `/webview/<cap>/` cannot authenticate the normal way. The iframe
98
+ * rendering a dashboard is sandboxed without `allow-same-origin`, so it runs in an
99
+ * opaque origin: every request it makes is cross-site, meaning the `SameSite=lax`
100
+ * `codeman_session` cookie is never attached, and non-GET requests and WebSocket
101
+ * upgrades arrive with `Origin: null`. Both the cookie check and the CSRF Origin
102
+ * guard would therefore reject a perfectly legitimate dashboard asset load.
103
+ *
104
+ * The capability in the path is the credential instead: 192 bits of entropy, held
105
+ * in memory only (a restart invalidates it), rolling TTL, bound to the user who
106
+ * minted it through an already-authenticated `POST /api/webviews/:id/open`, and
107
+ * granting nothing but "relay bytes to this one saved URL".
108
+ *
109
+ * The exemption is deliberately narrow: it requires the capability to RESOLVE, so
110
+ * a bare `/webview/anything` reaches nothing, and a `/webviewfoo` path does not
111
+ * match the prefix at all. The Host allowlist is NOT bypassed, so DNS-rebinding
112
+ * protection still applies to these requests.
113
+ */
114
+ function hasValidWebviewCapability(req) {
115
+ const url = (req.url ?? '').split('?')[0];
116
+ const fromPath = capabilityFromProxyPath(url);
117
+ if (fromPath)
118
+ return webviewCapabilities.resolve(fromPath) !== undefined;
119
+ // Referer form: a dashboard subresource requested with a ROOT-ABSOLUTE URL, which
120
+ // lands on Codeman's root and is relayed by the 404 fallback. Without this the
121
+ // asset would be rejected here, before the fallback ever runs.
122
+ //
123
+ // This is the only exemption decided by a header the request itself supplies, so
124
+ // it is fenced in hard: safe methods only, and never for Codeman's own functional
125
+ // surfaces. Without those fences a page could present a webview Referer and skip
126
+ // auth on /api. It is not a privilege escalation even so, holding a live
127
+ // capability already implies an authenticated `POST /api/webviews/:id/open`, but
128
+ // the exemption should stay no wider than the problem it solves.
129
+ if (req.method !== 'GET' && req.method !== 'HEAD')
130
+ return false;
131
+ if (url.startsWith('/api/') || url.startsWith('/ws/') || url.startsWith('/q/'))
132
+ return false;
133
+ const fromReferer = capabilityFromReferer(typeof req.headers.referer === 'string' ? req.headers.referer : undefined);
134
+ return !!fromReferer && webviewCapabilities.resolve(fromReferer) !== undefined;
135
+ }
92
136
  /**
93
137
  * Register HTTP Basic Auth middleware with session cookies and rate limiting.
94
138
  * Only active when CODEMAN_PASSWORD is set.
@@ -170,6 +214,11 @@ export function registerAuthMiddleware(app, https) {
170
214
  done();
171
215
  return;
172
216
  }
217
+ // Web-tab proxy, authenticated by the capability in the path, not the cookie.
218
+ if (hasValidWebviewCapability(req)) {
219
+ done();
220
+ return;
221
+ }
173
222
  const clientIp = req.ip;
174
223
  // Check session cookie first (avoids re-sending credentials on every request)
175
224
  // Use get() instead of has() so refreshOnGet extends the TTL on active sessions
@@ -280,6 +329,12 @@ function registerMultiUserAuthHook(app, https, authSessions, authFailures, hookS
280
329
  // QR redemption path — handled by the route itself.
281
330
  if (req.url?.startsWith('/q/'))
282
331
  return;
332
+ // Web-tab proxy, authenticated by the capability in the path, not the cookie.
333
+ // `req.authUser` stays undefined here on purpose: the proxy handler enforces
334
+ // ownership against the identity BOUND TO THE CAPABILITY, which is stricter
335
+ // than re-deriving it from a request that carries no credentials.
336
+ if (hasValidWebviewCapability(req))
337
+ return;
283
338
  const clientIp = req.ip;
284
339
  // 1. Cookie session (carries identity + mustChangePassword snapshot).
285
340
  const sessionToken = req.cookies[AUTH_COOKIE_NAME];
@@ -402,7 +457,15 @@ export function registerHostGuard(app, getPolicy) {
402
457
  reply.code(403).send('Forbidden: host not allowed');
403
458
  return;
404
459
  }
405
- if (!SAFE_HTTP_METHODS.has(req.method) && !isAllowedRequestOrigin(req.headers.origin, policy)) {
460
+ // The Host allowlist above is NEVER bypassed. The Origin (CSRF) check is,
461
+ // but only for a request carrying a valid web-tab capability: a sandboxed
462
+ // dashboard is opaque-origin, so its form posts and uploads arrive with
463
+ // `Origin: null`, which this guard rejects by design. The capability is the
464
+ // credential in that case, and it is unguessable, see
465
+ // hasValidWebviewCapability.
466
+ if (!SAFE_HTTP_METHODS.has(req.method) &&
467
+ !isAllowedRequestOrigin(req.headers.origin, policy) &&
468
+ !hasValidWebviewCapability(req)) {
406
469
  reply.code(403).send('Forbidden: cross-site request blocked');
407
470
  return;
408
471
  }
@@ -452,8 +515,17 @@ export function registerSecurityHeaders(app, https) {
452
515
  // Invalid origin header — do not set CORS headers
453
516
  }
454
517
  }
455
- // Handle CORS preflight
456
- if (req.method === 'OPTIONS') {
518
+ // Handle CORS preflight.
519
+ //
520
+ // EXCEPT for the web-tab proxy, which must answer its own preflight. A
521
+ // sandboxed dashboard iframe is opaque-origin, so it sends `Origin: null`;
522
+ // the CORS block above only emits headers for localhost origins, so a bare
523
+ // 204 from here carries no `Access-Control-Allow-Origin` and the browser
524
+ // rejects the preflight. Every dashboard fetch then fails with an opaque
525
+ // net::ERR_FAILED while the page itself renders fine (script/css/img loads
526
+ // are not CORS-checked). Falling through lets the proxy route reply with the
527
+ // right headers.
528
+ if (req.method === 'OPTIONS' && !hasValidWebviewCapability(req)) {
457
529
  reply.code(204).send();
458
530
  done();
459
531
  return;
@@ -1 +1 @@
1
- {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/web/middleware/auth.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/web/middleware/auth.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE1D,OAAO,EAAE,oBAAoB,EAAE,sBAAsB,EAAmB,MAAM,2BAA2B,CAAC;AAC1G,OAAO,EACL,mBAAmB,EACnB,iBAAiB,EACjB,gBAAgB,EAChB,sBAAsB,GACvB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAChF,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC5F,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,EAAE,uBAAuB,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AACrF,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAiB,MAAM,gBAAgB,CAAC;AAUlF,2BAA2B;AAC3B,MAAM,CAAC,MAAM,gBAAgB,GAAG,iBAAiB,CAAC;AAYlD,sEAAsE;AACtE,SAAS,iBAAiB,CAAC,KAAmB,EAAE,QAA4C,EAAE,GAAW;IACvG,MAAM,WAAW,GAAG,QAAQ,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,sBAAsB,CAAC;IAC5E,MAAM,iBAAiB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC,CAAC;IACrE,KAAK,CAAC,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC;IACvD,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;AAC9D,CAAC;AAED,qFAAqF;AACrF,SAAS,cAAc,CAAC,MAAe;IACrC,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAC;IACzD,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QACzE,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACjC,IAAI,GAAG,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC;QACzB,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC;IAC/E,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;;;;;;;GAUG;AACH,SAAS,qBAAqB,CAC5B,GAAmB,EACnB,KAAmB,EACnB,kBAAsD;IAEtD,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,iBAAiB,IAAI,GAAG,CAAC,GAAG,KAAK,uBAAuB,CAAC,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;QACpG,MAAM,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC;QAClB,MAAM,UAAU,GAAG,EAAE,KAAK,WAAW,IAAI,EAAE,KAAK,KAAK,IAAI,EAAE,KAAK,kBAAkB,CAAC;QACnF,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,kBAAkB,CAAC,WAAW,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;YAC/F,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;YAC9C,IAAI,SAAS,CAAC,MAAM,KAAK,QAAQ,CAAC,MAAM,IAAI,eAAe,CAAC,SAAS,EAAE,QAAQ,CAAC,EAAE,CAAC;gBACjF,OAAO,QAAQ,CAAC;YAClB,CAAC;YACD,MAAM,MAAM,GAAG,GAAG,CAAC,EAAE,CAAC;YACtB,MAAM,YAAY,GAAG,kBAAkB,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACzD,IAAI,YAAY,IAAI,gBAAgB,EAAE,CAAC;gBACrC,iBAAiB,CAAC,KAAK,EAAE,kBAAkB,EAAE,MAAM,CAAC,CAAC;gBACrD,OAAO,UAAU,CAAC;YACpB,CAAC;YACD,kBAAkB,CAAC,GAAG,CAAC,MAAM,EAAE,YAAY,GAAG,CAAC,CAAC,CAAC;YACjD,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;YAC3D,OAAO,UAAU,CAAC;QACpB,CAAC;QACD,0DAA0D;IAC5D,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;;;GAIG;AACH,SAAS,sBAAsB,CAAC,GAAmB;IACjD,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1C,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,kBAAkB;QAAE,OAAO,IAAI,CAAC;IACjE,mFAAmF;IACnF,8EAA8E;IAC9E,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC;QAAE,OAAO,KAAK,CAAC;IACzC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;AAClC,CAAC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,SAAS,yBAAyB,CAAC,GAAmB;IACpD,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAE1C,MAAM,QAAQ,GAAG,uBAAuB,CAAC,GAAG,CAAC,CAAC;IAC9C,IAAI,QAAQ;QAAE,OAAO,mBAAmB,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,SAAS,CAAC;IAEzE,kFAAkF;IAClF,+EAA+E;IAC/E,+DAA+D;IAC/D,EAAE;IACF,iFAAiF;IACjF,kFAAkF;IAClF,iFAAiF;IACjF,yEAAyE;IACzE,iFAAiF;IACjF,iEAAiE;IACjE,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM;QAAE,OAAO,KAAK,CAAC;IAChE,IAAI,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAE7F,MAAM,WAAW,GAAG,qBAAqB,CAAC,OAAO,GAAG,CAAC,OAAO,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IACrH,OAAO,CAAC,CAAC,WAAW,IAAI,mBAAmB,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,SAAS,CAAC;AACjF,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,sBAAsB,CAAC,GAAoB,EAAE,KAAc;IACzE,MAAM,KAAK,GAAc;QACvB,YAAY,EAAE,IAAI;QAClB,YAAY,EAAE,IAAI;QAClB,cAAc,EAAE,IAAI;QACpB,kBAAkB,EAAE,IAAI;QACxB,YAAY,EAAE,IAAI;KACnB,CAAC;IAEF,kFAAkF;IAClF,uEAAuE;IACvE,IAAI,CAAC,GAAG,CAAC,mBAAmB,CAAC,UAAU,CAAC;QAAE,GAAG,CAAC,eAAe,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;IAErF,MAAM,SAAS,GAAG,eAAe,EAAE,CAAC;IACpC,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;IAElD,8EAA8E;IAC9E,gFAAgF;IAChF,4BAA4B;IAC5B,IAAI,CAAC,SAAS,IAAI,CAAC,YAAY;QAAE,OAAO,KAAK,CAAC;IAE9C,6DAA6D;IAC7D,KAAK,CAAC,YAAY,GAAG,IAAI,kBAAkB,CAA4B;QACrE,KAAK,EAAE,mBAAmB;QAC1B,YAAY,EAAE,IAAI;KACnB,CAAC,CAAC;IAEH,4DAA4D;IAC5D,KAAK,CAAC,YAAY,GAAG,IAAI,kBAAkB,CAAiB;QAC1D,KAAK,EAAE,sBAAsB;QAC7B,YAAY,EAAE,KAAK;KACpB,CAAC,CAAC;IAEH,0EAA0E;IAC1E,KAAK,CAAC,cAAc,GAAG,IAAI,kBAAkB,CAAiB;QAC5D,KAAK,EAAE,sBAAsB;QAC7B,YAAY,EAAE,KAAK;KACpB,CAAC,CAAC;IAEH,8EAA8E;IAC9E,gFAAgF;IAChF,gFAAgF;IAChF,iFAAiF;IACjF,6DAA6D;IAC7D,KAAK,CAAC,kBAAkB,GAAG,IAAI,kBAAkB,CAAiB;QAChE,KAAK,EAAE,sBAAsB;QAC7B,YAAY,EAAE,KAAK;KACpB,CAAC,CAAC;IAEH,MAAM,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC;IACxC,MAAM,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC;IACxC,MAAM,kBAAkB,GAAG,KAAK,CAAC,kBAAkB,CAAC;IAEpD,IAAI,SAAS,EAAE,CAAC;QACd,6EAA6E;QAC7E,oEAAoE;QACpE,KAAK,CAAC,YAAY,GAAG,IAAI,kBAAkB,CAAiB;YAC1D,KAAK,EAAE,sBAAsB;YAC7B,YAAY,EAAE,KAAK;SACpB,CAAC,CAAC;QACH,yBAAyB,CAAC,GAAG,EAAE,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,kBAAkB,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;QAC1G,OAAO,KAAK,CAAC;IACf,CAAC;IAED,+EAA+E;IAC/E,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,OAAO,CAAC;IAC7D,MAAM,cAAc,GAAG,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,YAAY,IAAI,YAAY,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAEpG,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QAC5C,MAAM,MAAM,GAAG,qBAAqB,CAAC,GAAG,EAAE,KAAK,EAAE,kBAAkB,CAAC,CAAC;QACrE,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;YACxB,IAAI,EAAE,CAAC;YACP,OAAO;QACT,CAAC;QACD,IAAI,MAAM,KAAK,UAAU;YAAE,OAAO;QAElC,gFAAgF;QAChF,IAAI,GAAG,CAAC,GAAG,EAAE,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;YAC/B,IAAI,EAAE,CAAC;YACP,OAAO;QACT,CAAC;QAED,8EAA8E;QAC9E,IAAI,yBAAyB,CAAC,GAAG,CAAC,EAAE,CAAC;YACnC,IAAI,EAAE,CAAC;YACP,OAAO;QACT,CAAC;QAED,MAAM,QAAQ,GAAG,GAAG,CAAC,EAAE,CAAC;QAExB,8EAA8E;QAC9E,gFAAgF;QAChF,MAAM,YAAY,GAAG,GAAG,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;QACnD,IAAI,YAAY,IAAI,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC,KAAK,SAAS,EAAE,CAAC;YACjE,yEAAyE;YACzE,2EAA2E;YAC3E,KAAK,CAAC,SAAS,CAAC,gBAAgB,EAAE,YAAY,EAAE;gBAC9C,QAAQ,EAAE,IAAI;gBACd,MAAM,EAAE,KAAK;gBACb,QAAQ,EAAE,KAAK;gBACf,MAAM,EAAE,mBAAmB,GAAG,IAAI,EAAE,UAAU;gBAC9C,IAAI,EAAE,GAAG;aACV,CAAC,CAAC;YACH,IAAI,EAAE,CAAC;YACP,OAAO;QACT,CAAC;QAED,mFAAmF;QACnF,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC;QACvC,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;QACxC,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAChD,IAAI,OAAO,CAAC,MAAM,KAAK,WAAW,CAAC,MAAM,IAAI,eAAe,CAAC,OAAO,EAAE,WAAW,CAAC,EAAE,CAAC;YACnF,4EAA4E;YAC5E,MAAM,KAAK,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YAE9C,yDAAyD;YACzD,IAAI,YAAY,CAAC,IAAI,IAAI,iBAAiB,EAAE,CAAC;gBAC3C,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;gBACnD,IAAI,SAAS,KAAK,SAAS;oBAAE,YAAY,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YAC9D,CAAC;YAED,YAAY,CAAC,GAAG,CAAC,KAAK,EAAE;gBACtB,EAAE,EAAE,QAAQ;gBACZ,EAAE,EAAE,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,EAAE;gBACnC,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;gBACrB,MAAM,EAAE,OAAO;aAChB,CAAC,CAAC;YAEH,yCAAyC;YACzC,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAE9B,KAAK,CAAC,SAAS,CAAC,gBAAgB,EAAE,KAAK,EAAE;gBACvC,QAAQ,EAAE,IAAI;gBACd,MAAM,EAAE,KAAK;gBACb,QAAQ,EAAE,KAAK;gBACf,MAAM,EAAE,mBAAmB,GAAG,IAAI,EAAE,UAAU;gBAC9C,IAAI,EAAE,GAAG;aACV,CAAC,CAAC;YACH,IAAI,EAAE,CAAC;YACP,OAAO;QACT,CAAC;QAED,wEAAwE;QACxE,MAAM,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACjD,IAAI,QAAQ,IAAI,gBAAgB,EAAE,CAAC;YACjC,iBAAiB,CAAC,KAAK,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC;YACjD,OAAO;QACT,CAAC;QAED,oCAAoC;QACpC,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,GAAG,CAAC,CAAC,CAAC;QAEzC,KAAK,CAAC,MAAM,CAAC,kBAAkB,EAAE,uBAAuB,CAAC,CAAC;QAC1D,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;GAKG;AACH,SAAS,yBAAyB,CAChC,GAAoB,EACpB,KAAc,EACd,YAA2D,EAC3D,YAAgD,EAChD,kBAAsD,EACtD,YAAgD;IAEhD,MAAM,gBAAgB,GAAG,CAAC,KAAmB,EAAE,KAAa,EAAE,EAAE,CAC9D,KAAK,CAAC,SAAS,CAAC,gBAAgB,EAAE,KAAK,EAAE;QACvC,QAAQ,EAAE,IAAI;QACd,MAAM,EAAE,KAAK;QACb,QAAQ,EAAE,KAAK;QACf,MAAM,EAAE,mBAAmB,GAAG,IAAI;QAClC,IAAI,EAAE,GAAG;KACV,CAAC,CAAC;IAEL,iFAAiF;IACjF,mFAAmF;IACnF,MAAM,gBAAgB,GAAG,CAAC,QAAgB,EAAE,EAAE;QAC5C,IAAI,OAA2B,CAAC;QAChC,IAAI,MAAM,GAAG,QAAQ,CAAC;QACtB,IAAI,SAA6B,CAAC;QAClC,IAAI,QAAQ,GAAG,QAAQ,CAAC;QACxB,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,YAAY,EAAE,CAAC;YAClC,IAAI,CAAC,CAAC,SAAS,GAAG,QAAQ,EAAE,CAAC;gBAC3B,QAAQ,GAAG,CAAC,CAAC,SAAS,CAAC;gBACvB,SAAS,GAAG,CAAC,CAAC;YAChB,CAAC;YACD,IAAI,CAAC,CAAC,QAAQ,KAAK,QAAQ,IAAI,CAAC,CAAC,SAAS,GAAG,MAAM,EAAE,CAAC;gBACpD,MAAM,GAAG,CAAC,CAAC,SAAS,CAAC;gBACrB,OAAO,GAAG,CAAC,CAAC;YACd,CAAC;QACH,CAAC;QACD,MAAM,GAAG,GAAG,OAAO,IAAI,SAAS,CAAC;QACjC,IAAI,GAAG,KAAK,SAAS;YAAE,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAClD,CAAC,CAAC;IAEF,MAAM,qBAAqB,GAAG,CAAC,GAAmB,EAAE,KAAmB,EAAE,UAAmB,EAAW,EAAE;QACvG,IAAI,UAAU,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,EAAE,CAAC;YAC/C,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,YAAY,CAAC,wBAAwB,CAAC,CAAC,CAAC;YACjF,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;IAEF,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;QAC5C,MAAM,MAAM,GAAG,qBAAqB,CAAC,GAAG,EAAE,KAAK,EAAE,kBAAkB,CAAC,CAAC;QACrE,IAAI,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,UAAU;YAAE,OAAO;QAEzD,oDAAoD;QACpD,IAAI,GAAG,CAAC,GAAG,EAAE,UAAU,CAAC,KAAK,CAAC;YAAE,OAAO;QAEvC,8EAA8E;QAC9E,6EAA6E;QAC7E,4EAA4E;QAC5E,kEAAkE;QAClE,IAAI,yBAAyB,CAAC,GAAG,CAAC;YAAE,OAAO;QAE3C,MAAM,QAAQ,GAAG,GAAG,CAAC,EAAE,CAAC;QAExB,sEAAsE;QACtE,MAAM,YAAY,GAAG,GAAG,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;QACnD,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACzE,IAAI,MAAM,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YAC9B,kFAAkF;YAClF,gFAAgF;YAChF,gFAAgF;YAChF,8EAA8E;YAC9E,IAAI,IAA0C,CAAC;YAC/C,IAAI,CAAC;gBACH,IAAI,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YACzC,CAAC;YAAC,MAAM,CAAC;gBACP,gFAAgF;gBAChF,8EAA8E;gBAC9E,8EAA8E;gBAC9E,8EAA8E;gBAC9E,GAAG,CAAC,QAAQ,GAAG,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,MAAM,EAAE,CAAC;gBAC1E,gBAAgB,CAAC,KAAK,EAAE,YAAa,CAAC,CAAC;gBACvC,qBAAqB,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;gBAC/D,OAAO;YACT,CAAC;YACD,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAC3B,YAAY,CAAC,MAAM,CAAC,YAAa,CAAC,CAAC;gBACnC,KAAK,CAAC,WAAW,CAAC,gBAAgB,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;gBACnD,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;gBACrC,OAAO;YACT,CAAC;YACD,mFAAmF;YACnF,uEAAuE;YACvE,GAAG,CAAC,QAAQ,GAAG,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;YAC5D,gBAAgB,CAAC,KAAK,EAAE,YAAa,CAAC,CAAC,CAAC,mBAAmB;YAC3D,qBAAqB,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;YAC7D,OAAO;QACT,CAAC;QAED,wDAAwD;QACxD,+EAA+E;QAC/E,wCAAwC;QACxC,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC/C,IAAI,MAAM,IAAI,gBAAgB,EAAE,CAAC;YAC/B,iBAAiB,CAAC,KAAK,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC;YACjD,OAAO;QACT,CAAC;QACD,MAAM,KAAK,GAAG,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;QACxD,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;YACrD,6EAA6E;YAC7E,kFAAkF;YAClF,+EAA+E;YAC/E,4EAA4E;YAC5E,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;YACpE,IAAI,MAAM,EAAE,CAAC;gBACX,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;gBAC7C,IAAI,MAAM;oBAAE,KAAK,WAAW,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;gBAC5E,KAAK,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;gBACnD,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;gBAC9B,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;gBAE9B,MAAM,KAAK,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;gBAC9C,IAAI,YAAY,CAAC,IAAI,IAAI,iBAAiB;oBAAE,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAC5E,YAAY,CAAC,GAAG,CAAC,KAAK,EAAE;oBACtB,EAAE,EAAE,QAAQ;oBACZ,EAAE,EAAE,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,EAAE;oBACnC,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;oBACrB,MAAM,EAAE,OAAO;oBACf,QAAQ,EAAE,IAAI,CAAC,QAAQ;oBACvB,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,kBAAkB,EAAE,CAAC,CAAC,IAAI,CAAC,kBAAkB;iBAC9C,CAAC,CAAC;gBACH,GAAG,CAAC,QAAQ,GAAG,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;gBAC5D,gBAAgB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;gBAC/B,qBAAqB,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;gBAC7D,OAAO;YACT,CAAC;YACD,4EAA4E;YAC5E,0EAA0E;YAC1E,6EAA6E;YAC7E,4BAA4B;YAC5B,MAAM,KAAK,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YACpD,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;YAClC,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC;YACvC,IAAI,KAAK,IAAI,gBAAgB,EAAE,CAAC;gBAC9B,iBAAiB,CAAC,KAAK,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC;gBACjD,OAAO;YACT,CAAC;YACD,KAAK,CAAC,MAAM,CAAC,kBAAkB,EAAE,uBAAuB,CAAC,CAAC;YAC1D,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YACrC,OAAO;QACT,CAAC;QAED,2EAA2E;QAC3E,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC;QACvC,KAAK,CAAC,MAAM,CAAC,kBAAkB,EAAE,uBAAuB,CAAC,CAAC;QAC1D,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;AACL,CAAC;AAED,sFAAsF;AACtF,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC;AAE9D;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,iBAAiB,CAAC,GAAoB,EAAE,SAA2B;IACjF,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QAC5C,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;QAC3B,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC;YACpD,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;YACpD,OAAO;QACT,CAAC;QACD,0EAA0E;QAC1E,0EAA0E;QAC1E,wEAAwE;QACxE,4EAA4E;QAC5E,sDAAsD;QACtD,6BAA6B;QAC7B,IACE,CAAC,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC;YAClC,CAAC,sBAAsB,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC;YACnD,CAAC,yBAAyB,CAAC,GAAG,CAAC,EAC/B,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;YAC9D,OAAO;QACT,CAAC;QACD,IAAI,EAAE,CAAC;IACT,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,uBAAuB,CAAC,GAAoB,EAAE,KAAc;IAC1E,+EAA+E;IAC/E,8EAA8E;IAC9E,2EAA2E;IAC3E,2EAA2E;IAC3E,6CAA6C;IAC7C,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,KAAK,GAAG,CAAC;IACpD,MAAM,SAAS,GACb,4DAA4D,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACxG,MAAM,UAAU,GAAG,2CAA2C,CAAC;IAC/D,0EAA0E;IAC1E,6EAA6E;IAC7E,2EAA2E;IAC3E,8EAA8E;IAC9E,8BAA8B;IAC9B,MAAM,SAAS,GAAG,2BAA2B,CAAC;IAC9C,MAAM,GAAG,GACP,uBAAuB,SAAS,+DAA+D;QAC/F,+BAA+B,UAAU,qEAAqE,SAAS,EAAE,CAAC;IAE5H,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QAC5C,KAAK,CAAC,MAAM,CAAC,wBAAwB,EAAE,SAAS,CAAC,CAAC;QAClD,KAAK,CAAC,MAAM,CAAC,iBAAiB,EAAE,YAAY,CAAC,CAAC;QAC9C,KAAK,CAAC,MAAM,CAAC,yBAAyB,EAAE,GAAG,CAAC,CAAC;QAC7C,IAAI,KAAK,EAAE,CAAC;YACV,KAAK,CAAC,MAAM,CAAC,2BAA2B,EAAE,qCAAqC,CAAC,CAAC;QACnF,CAAC;QAED,iDAAiD;QACjD,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC;QAClC,IAAI,MAAM,EAAE,CAAC;YACX,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;gBAC5B,IAAI,GAAG,CAAC,QAAQ,KAAK,WAAW,IAAI,GAAG,CAAC,QAAQ,KAAK,WAAW,IAAI,GAAG,CAAC,QAAQ,KAAK,KAAK,EAAE,CAAC;oBAC3F,KAAK,CAAC,MAAM,CAAC,6BAA6B,EAAE,MAAM,CAAC,CAAC;oBACpD,KAAK,CAAC,MAAM,CAAC,8BAA8B,EAAE,wCAAwC,CAAC,CAAC;oBACvF,KAAK,CAAC,MAAM,CAAC,8BAA8B,EAAE,6BAA6B,CAAC,CAAC;oBAC5E,KAAK,CAAC,MAAM,CAAC,wBAAwB,EAAE,OAAO,CAAC,CAAC;gBAClD,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,kDAAkD;YACpD,CAAC;QACH,CAAC;QAED,yBAAyB;QACzB,EAAE;QACF,uEAAuE;QACvE,2EAA2E;QAC3E,2EAA2E;QAC3E,yEAAyE;QACzE,yEAAyE;QACzE,2EAA2E;QAC3E,6EAA6E;QAC7E,iBAAiB;QACjB,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,EAAE,CAAC;YAChE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;YACvB,IAAI,EAAE,CAAC;YACP,OAAO;QACT,CAAC;QAED,IAAI,EAAE,CAAC;IACT,CAAC,CAAC,CAAC;AACL,CAAC"}
Binary file