elanous 0.2.10 → 0.2.12

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 (615) hide show
  1. package/apps/pwa/out/404/index.html +1 -1
  2. package/apps/pwa/out/404.html +1 -1
  3. package/apps/pwa/out/_next/static/-6XrAoD3eU7NyMHAE4xPS/_buildManifest.js +1 -0
  4. package/apps/pwa/out/_next/static/chunks/1147-466ec15afacc1a65.js +1 -0
  5. package/apps/pwa/out/_next/static/chunks/1159-0c5ef8bc21cb6afb.js +1 -0
  6. package/apps/pwa/out/_next/static/chunks/1394-ee3795b112907122.js +1 -0
  7. package/apps/pwa/out/_next/static/chunks/1452.93700483b9d4fc61.js +9 -0
  8. package/apps/pwa/out/_next/static/chunks/{6062-73e68343a9814f6a.js → 1829-b453a1b22d3999bb.js} +1 -1
  9. package/apps/pwa/out/_next/static/chunks/2176-c379e3ebce874151.js +1 -0
  10. package/apps/pwa/out/_next/static/chunks/2426.8c6ee0c668d53def.js +1 -0
  11. package/apps/pwa/out/_next/static/chunks/3170-7ec60a56fa0e4728.js +1 -0
  12. package/apps/pwa/out/_next/static/chunks/3278-ae6ef084769f6195.js +1 -0
  13. package/apps/pwa/out/_next/static/chunks/3454-988a53dac60a1763.js +1 -0
  14. package/apps/pwa/out/_next/static/chunks/3638-aa80b4641ea439db.js +1 -0
  15. package/apps/pwa/out/_next/static/chunks/3735-fe3402553ac1c9c6.js +1 -0
  16. package/apps/pwa/out/_next/static/chunks/3869-3cd46526879f454c.js +1 -0
  17. package/apps/pwa/out/_next/static/chunks/390.c373e31b3b9d0c41.js +5 -0
  18. package/apps/pwa/out/_next/static/chunks/3992-2e522a8ac5f2afde.js +25 -0
  19. package/apps/pwa/out/_next/static/chunks/4215-c9d91dd644ec1719.js +1 -0
  20. package/apps/pwa/out/_next/static/chunks/4508-5d0161d1e724d735.js +1 -0
  21. package/apps/pwa/out/_next/static/chunks/4685-c3c1c625b71accd1.js +1 -0
  22. package/apps/pwa/out/_next/static/chunks/4733-623a79345b171e1c.js +1 -0
  23. package/apps/pwa/out/_next/static/chunks/4883.3bd969ea1d3aaaff.js +2 -0
  24. package/apps/pwa/out/_next/static/chunks/5532.6899a12958a89b72.js +1 -0
  25. package/apps/pwa/out/_next/static/chunks/{8067-87ce253ec2f23697.js → 5845-e6c003ce8d5fd36a.js} +1 -1
  26. package/apps/pwa/out/_next/static/chunks/5978-b27004c677119115.js +1 -0
  27. package/apps/pwa/out/_next/static/chunks/{8046cadf-211ca3c0e00f2b72.js → 5cd7e3a9-404fd6b8d0ecd44c.js} +1 -1
  28. package/apps/pwa/out/_next/static/chunks/6048-4c5c33579bc4ef78.js +1 -0
  29. package/apps/pwa/out/_next/static/chunks/6303-422dbf0f67c72aac.js +1 -0
  30. package/apps/pwa/out/_next/static/chunks/6751-bb3595948b2e311b.js +1 -0
  31. package/apps/pwa/out/_next/static/chunks/7274-19b7279f18b47ab3.js +1 -0
  32. package/apps/pwa/out/_next/static/chunks/7277-0b2fc7c16ba2d64b.js +1 -0
  33. package/apps/pwa/out/_next/static/chunks/{4323.c5dfb6f503304775.js → 7334.a6679d9168f37aa8.js} +1 -1
  34. package/apps/pwa/out/_next/static/chunks/7551-a0e0707b79164ddd.js +1 -0
  35. package/apps/pwa/out/_next/static/chunks/7758-0b018a9e4fc56200.js +1 -0
  36. package/apps/pwa/out/_next/static/chunks/7777-79f845045aa1ed86.js +1 -0
  37. package/apps/pwa/out/_next/static/chunks/79f8be9e-957d68913b590b08.js +1 -0
  38. package/apps/pwa/out/_next/static/chunks/8025-cc24ee5d8f2fb6f8.js +1 -0
  39. package/apps/pwa/out/_next/static/chunks/8039-df92e08fede5de8f.js +1 -0
  40. package/apps/pwa/out/_next/static/chunks/8206-c6684dcde12be721.js +1 -0
  41. package/apps/pwa/out/_next/static/chunks/8421-1c4acfb1395a0edf.js +1 -0
  42. package/apps/pwa/out/_next/static/chunks/8605-0259994816604c49.js +1 -0
  43. package/apps/pwa/out/_next/static/chunks/8725.bf46bb1395dd0fa2.js +1 -0
  44. package/apps/pwa/out/_next/static/chunks/8734-252d511cd276c0dc.js +1 -0
  45. package/apps/pwa/out/_next/static/chunks/8834-ca1cb09c1cb1a6bf.js +1 -0
  46. package/apps/pwa/out/_next/static/chunks/{2415.ed6428ff334c7ce2.js → 9269.d2a4795bc6812717.js} +1 -1
  47. package/apps/pwa/out/_next/static/chunks/9538-2816b90923606459.js +1 -0
  48. package/apps/pwa/out/_next/static/chunks/9656-c1540088f5859c80.js +1 -0
  49. package/apps/pwa/out/_next/static/chunks/9906-482c6619b3fdda20.js +1 -0
  50. package/apps/pwa/out/_next/static/chunks/9920-5cfdc5e8fd209825.js +1 -0
  51. package/apps/pwa/out/_next/static/chunks/app/_not-found/page-d16993889b125c42.js +1 -0
  52. package/apps/pwa/out/_next/static/chunks/app/approvals/page-cb169620945d1952.js +1 -0
  53. package/apps/pwa/out/_next/static/chunks/app/autopilot/page-cefe8169e36cf62a.js +1 -0
  54. package/apps/pwa/out/_next/static/chunks/app/board/page-d2e35228bc497119.js +1 -0
  55. package/apps/pwa/out/_next/static/chunks/app/botlab/{page-54b32bd27726588d.js → page-5c05b0da4bc1392c.js} +1 -1
  56. package/apps/pwa/out/_next/static/chunks/app/bots/page-e0ccdb576812b523.js +1 -0
  57. package/apps/pwa/out/_next/static/chunks/app/chat/page-813c4a52c9d05ca8.js +1 -0
  58. package/apps/pwa/out/_next/static/chunks/app/consult/page-4731f2c215358937.js +1 -0
  59. package/apps/pwa/out/_next/static/chunks/app/control/page-a022b257950f39e6.js +1 -0
  60. package/apps/pwa/out/_next/static/chunks/app/design-check/page-a2ffc717e04b8b0a.js +1 -0
  61. package/apps/pwa/out/_next/static/chunks/app/editor/page-b59ee4e70fc18fcf.js +1 -0
  62. package/apps/pwa/out/_next/static/chunks/app/exec/page-a67e11ba962337b5.js +1 -0
  63. package/apps/pwa/out/_next/static/chunks/app/field/page-c172dabd796eb7a3.js +1 -0
  64. package/apps/pwa/out/_next/static/chunks/app/healthz/route-d16993889b125c42.js +1 -0
  65. package/apps/pwa/out/_next/static/chunks/app/inside/page-1efd0cb9e0ed9d13.js +1 -0
  66. package/apps/pwa/out/_next/static/chunks/app/intake/page-d5dc7ff69a37b4cf.js +1 -0
  67. package/apps/pwa/out/_next/static/chunks/app/layout-e71c84189e8c683e.js +1 -0
  68. package/apps/pwa/out/_next/static/chunks/app/live/page-1d6a533ce5a6efcb.js +1 -0
  69. package/apps/pwa/out/_next/static/chunks/app/market/page-dfca9b7d2de0b135.js +1 -0
  70. package/apps/pwa/out/_next/static/chunks/app/missions/[id]/page-793fa536b3a6ef37.js +1 -0
  71. package/apps/pwa/out/_next/static/chunks/app/morning/page-6dd3bfbbde2a5c2c.js +1 -0
  72. package/apps/pwa/out/_next/static/chunks/app/not-found-490653e8d4cc8852.js +1 -0
  73. package/apps/pwa/out/_next/static/chunks/app/observatory/page-77447356baad75d2.js +1 -0
  74. package/apps/pwa/out/_next/static/chunks/app/ops/checklist/page-29e961191f6057df.js +1 -0
  75. package/apps/pwa/out/_next/static/chunks/app/ops/release/page-c822f55b884d9104.js +1 -0
  76. package/apps/pwa/out/_next/static/chunks/app/ops/seats/page-fa4ccfc432424e52.js +1 -0
  77. package/apps/pwa/out/_next/static/chunks/app/outputs/page-6d604227e1664b71.js +1 -0
  78. package/apps/pwa/out/_next/static/chunks/app/page-9c7e8f744a765daf.js +1 -0
  79. package/apps/pwa/out/_next/static/chunks/app/reflection/page-4048543b4b7ad5e0.js +1 -0
  80. package/apps/pwa/out/_next/static/chunks/app/scheduler/page-4c3a3126abed551a.js +1 -0
  81. package/apps/pwa/out/_next/static/chunks/app/sessions/page-64b0aecb1ca75e75.js +1 -0
  82. package/apps/pwa/out/_next/static/chunks/app/settings/devices/page-4292d0149020e8a7.js +1 -0
  83. package/apps/pwa/out/_next/static/chunks/app/settings/page-db14d0be7f1c460c.js +1 -0
  84. package/apps/pwa/out/_next/static/chunks/app/setup/done/page-e5d8072cd7cfef73.js +1 -0
  85. package/apps/pwa/out/_next/static/chunks/app/setup/layout-d16993889b125c42.js +1 -0
  86. package/apps/pwa/out/_next/static/chunks/app/setup/page-9547b5cec7cf76bf.js +1 -0
  87. package/apps/pwa/out/_next/static/chunks/app/share/page-e6dcb83265530636.js +1 -0
  88. package/apps/pwa/out/_next/static/chunks/app/showroom/page-45248f08d6aecae5.js +1 -0
  89. package/apps/pwa/out/_next/static/chunks/app/tasks/page-2cddeb9e2aeedc55.js +1 -0
  90. package/apps/pwa/out/_next/static/chunks/app/term/page-e297866051595d81.js +1 -0
  91. package/apps/pwa/out/_next/static/chunks/app/today/page-baba2e047872fb0f.js +1 -0
  92. package/apps/pwa/out/_next/static/chunks/app/trace/page-e895da4ec9cac345.js +1 -0
  93. package/apps/pwa/out/_next/static/chunks/app/vault/page-4344faf20216233b.js +1 -0
  94. package/apps/pwa/out/_next/static/chunks/app/workflows/chat-ui/page-698bb29f11864b89.js +1 -0
  95. package/apps/pwa/out/_next/static/chunks/app/workflows/page-bd6a6dc1ddc273f2.js +1 -0
  96. package/apps/pwa/out/_next/static/chunks/app/workspace/page-2e9e2fb01c9da1c9.js +1 -0
  97. package/apps/pwa/out/_next/static/chunks/app/worktrees/page-d62ceb13411ebba4.js +1 -0
  98. package/apps/pwa/out/_next/static/chunks/{2ea96958-e8c7e112de50b067.js → f48170cc-d05d28bf87a43bf4.js} +1 -1
  99. package/apps/pwa/out/_next/static/chunks/framework-172630e6aa5e2d7f.js +1 -0
  100. package/apps/pwa/out/_next/static/chunks/main-app-f0fe2d7477845181.js +1 -0
  101. package/apps/pwa/out/_next/static/chunks/main-fc98ac70b44eccb0.js +1 -0
  102. package/apps/pwa/out/_next/static/chunks/pages/_app-5bd7f10271f72413.js +1 -0
  103. package/apps/pwa/out/_next/static/chunks/pages/_error-97d0d85ea05fef9b.js +1 -0
  104. package/apps/pwa/out/_next/static/chunks/webpack-9e4d02d567b98240.js +1 -0
  105. package/apps/pwa/out/_next/static/css/128fb7fb670b2fbf.css +1 -0
  106. package/apps/pwa/out/approvals/index.html +1 -1
  107. package/apps/pwa/out/approvals/index.txt +23 -23
  108. package/apps/pwa/out/autopilot/index.html +1 -1
  109. package/apps/pwa/out/autopilot/index.txt +23 -23
  110. package/apps/pwa/out/board/index.html +1 -1
  111. package/apps/pwa/out/board/index.txt +23 -23
  112. package/apps/pwa/out/botlab/index.html +1 -1
  113. package/apps/pwa/out/botlab/index.txt +22 -22
  114. package/apps/pwa/out/bots/index.html +1 -1
  115. package/apps/pwa/out/bots/index.txt +22 -22
  116. package/apps/pwa/out/chat/index.html +1 -1
  117. package/apps/pwa/out/chat/index.txt +22 -22
  118. package/apps/pwa/out/consult/index.html +1 -1
  119. package/apps/pwa/out/consult/index.txt +23 -23
  120. package/apps/pwa/out/control/index.html +1 -1
  121. package/apps/pwa/out/control/index.txt +23 -23
  122. package/apps/pwa/out/design-check/index.html +1 -1
  123. package/apps/pwa/out/design-check/index.txt +23 -23
  124. package/apps/pwa/out/editor/index.html +1 -1
  125. package/apps/pwa/out/editor/index.txt +23 -23
  126. package/apps/pwa/out/exec/index.html +1 -1
  127. package/apps/pwa/out/exec/index.txt +23 -23
  128. package/apps/pwa/out/field/index.html +1 -1
  129. package/apps/pwa/out/field/index.txt +23 -23
  130. package/apps/pwa/out/healthz +1 -1
  131. package/apps/pwa/out/index.html +1 -1
  132. package/apps/pwa/out/index.txt +22 -22
  133. package/apps/pwa/out/inside/index.html +1 -0
  134. package/apps/pwa/out/inside/index.txt +31 -0
  135. package/apps/pwa/out/intake/index.html +1 -1
  136. package/apps/pwa/out/intake/index.txt +23 -23
  137. package/apps/pwa/out/live/index.html +1 -1
  138. package/apps/pwa/out/live/index.txt +23 -23
  139. package/apps/pwa/out/market/index.html +1 -1
  140. package/apps/pwa/out/market/index.txt +22 -22
  141. package/apps/pwa/out/missions/placeholder/index.html +1 -1
  142. package/apps/pwa/out/missions/placeholder/index.txt +22 -22
  143. package/apps/pwa/out/morning/index.html +1 -1
  144. package/apps/pwa/out/morning/index.txt +23 -23
  145. package/apps/pwa/out/observatory/index.html +1 -1
  146. package/apps/pwa/out/observatory/index.txt +23 -23
  147. package/apps/pwa/out/ops/checklist/index.html +1 -1
  148. package/apps/pwa/out/ops/checklist/index.txt +22 -22
  149. package/apps/pwa/out/ops/release/index.html +1 -1
  150. package/apps/pwa/out/ops/release/index.txt +22 -22
  151. package/apps/pwa/out/ops/seats/index.html +1 -1
  152. package/apps/pwa/out/ops/seats/index.txt +22 -22
  153. package/apps/pwa/out/outputs/index.html +1 -0
  154. package/apps/pwa/out/outputs/index.txt +30 -0
  155. package/apps/pwa/out/reflection/index.html +1 -1
  156. package/apps/pwa/out/reflection/index.txt +23 -23
  157. package/apps/pwa/out/scheduler/index.html +1 -1
  158. package/apps/pwa/out/scheduler/index.txt +23 -23
  159. package/apps/pwa/out/sessions/index.html +1 -1
  160. package/apps/pwa/out/sessions/index.txt +22 -22
  161. package/apps/pwa/out/settings/devices/index.html +1 -1
  162. package/apps/pwa/out/settings/devices/index.txt +23 -23
  163. package/apps/pwa/out/settings/index.html +1 -1
  164. package/apps/pwa/out/settings/index.txt +23 -23
  165. package/apps/pwa/out/setup/done/index.html +1 -1
  166. package/apps/pwa/out/setup/done/index.txt +23 -23
  167. package/apps/pwa/out/setup/index.html +1 -1
  168. package/apps/pwa/out/setup/index.txt +23 -23
  169. package/apps/pwa/out/share/index.html +1 -1
  170. package/apps/pwa/out/share/index.txt +23 -23
  171. package/apps/pwa/out/showroom/index.html +1 -1
  172. package/apps/pwa/out/showroom/index.txt +22 -22
  173. package/apps/pwa/out/tasks/index.html +1 -1
  174. package/apps/pwa/out/tasks/index.txt +23 -23
  175. package/apps/pwa/out/term/index.html +1 -1
  176. package/apps/pwa/out/term/index.txt +23 -24
  177. package/apps/pwa/out/today/index.html +1 -1
  178. package/apps/pwa/out/today/index.txt +23 -23
  179. package/apps/pwa/out/trace/index.html +1 -1
  180. package/apps/pwa/out/trace/index.txt +23 -23
  181. package/apps/pwa/out/vault/index.html +1 -1
  182. package/apps/pwa/out/vault/index.txt +23 -23
  183. package/apps/pwa/out/workflows/chat-ui/index.html +1 -1
  184. package/apps/pwa/out/workflows/chat-ui/index.txt +23 -23
  185. package/apps/pwa/out/workflows/index.html +1 -1
  186. package/apps/pwa/out/workflows/index.txt +23 -23
  187. package/apps/pwa/out/workspace/index.html +1 -1
  188. package/apps/pwa/out/workspace/index.txt +23 -24
  189. package/apps/pwa/out/worktrees/index.html +1 -1
  190. package/apps/pwa/out/worktrees/index.txt +23 -23
  191. package/graphs/context/nightly-condense.yaml +21 -0
  192. package/graphs/context/recipes.yaml +12 -0
  193. package/graphs/demo/inside-seed.yaml +20 -0
  194. package/graphs/demo/recipes.yaml +12 -0
  195. package/graphs/drafts/draft-cleanup.yaml +19 -0
  196. package/graphs/drafts/recipes.yaml +23 -0
  197. package/graphs/intake/intake-daily.yaml +2 -1
  198. package/graphs/ops/recipes.yaml +3 -0
  199. package/graphs/ops/secret-exposure.yaml +24 -0
  200. package/graphs/release/recipes.yaml +3 -0
  201. package/graphs/release/release-loop.yaml +4 -1
  202. package/graphs/video/explainer-line.yaml +2 -2
  203. package/package.json +2 -1
  204. package/plugins/card-followup/examples/sample-card.png +0 -0
  205. package/plugins/elanous-hwp/README.md +25 -0
  206. package/plugins/elanous-hwp/cli.ts +22 -0
  207. package/plugins/elanous-hwp/converter.ts +237 -0
  208. package/plugins/elanous-hwp/fixtures/fixed-controls.hwpx +0 -0
  209. package/plugins/elanous-hwp/fixtures/fixed-table-controls.hwpx +0 -0
  210. package/plugins/elanous-hwp/fixtures/fixed.hwpx +0 -0
  211. package/plugins/elanous-hwp/plugin.json +16 -0
  212. package/plugins/elanous-hwp/plugin.ts +40 -0
  213. package/scripts/ci-public-export-leak-gate.ts +75 -14
  214. package/scripts/ci-public-leak-gate.ts +44 -9
  215. package/scripts/context-hooks/claude-stop.sh +4 -0
  216. package/scripts/context-hooks/emit.ts +24 -0
  217. package/scripts/context-hooks/post-tool-use.sh +4 -0
  218. package/scripts/coord-channel-watch.sh +12 -0
  219. package/scripts/coord-requests-bridge.ts +143 -0
  220. package/scripts/field-feed/lib.ts +4 -0
  221. package/scripts/fleet/node-setup.sh +20 -3
  222. package/scripts/homebrew-formula-bump.ts +69 -0
  223. package/scripts/lib/telegram-inject-args.ts +31 -0
  224. package/scripts/marketing/measure-site-numbers.ts +169 -0
  225. package/scripts/measure-gate-shards.ts +309 -0
  226. package/scripts/measure-pod-memory-by-goal.ts +130 -0
  227. package/scripts/mission-request-judge.ts +31 -1
  228. package/scripts/morning-report.ts +2 -2
  229. package/scripts/opportunity-scan.ts +1 -1
  230. package/scripts/release-loop/auto-approve-node.ts +21 -4
  231. package/scripts/release-loop/checklist-gate-node.ts +2 -1
  232. package/scripts/release-loop/cut-branch.ts +84 -0
  233. package/scripts/release-loop/gate-node.ts +22 -15
  234. package/scripts/release-loop/mac-smoke-node.ts +229 -0
  235. package/scripts/release-loop/node-verdict.ts +3 -3
  236. package/scripts/release-loop/ops-upgrade-node.ts +47 -6
  237. package/scripts/release-loop/publish-node.ts +4 -1
  238. package/scripts/release-loop/tui-node-checks.ts +42 -0
  239. package/scripts/release-loop/tui-sim-node.ts +32 -8
  240. package/scripts/release-loop/unattended-release.ts +5 -3
  241. package/scripts/release-loop/version-node.ts +74 -13
  242. package/scripts/signal-digest-cycle.ts +2 -7
  243. package/scripts/signal-digest-photo.ts +11 -0
  244. package/scripts/tech1-public-measure.ts +94 -0
  245. package/scripts/telegram-inject.ts +14 -6
  246. package/scripts/test-diet/node.ts +1 -1
  247. package/scripts/test-diet/remeasure-list.ts +112 -0
  248. package/scripts/tui-regress.ts +2 -2
  249. package/scripts/ux/demo-rehearsal.ts +247 -0
  250. package/scripts/ux/demo-seed.ts +108 -0
  251. package/scripts/ux/lib/rehearsal-verdict.ts +80 -0
  252. package/skills/diagram-master/SKILL.md +366 -0
  253. package/skills/diagram-master/references/engines/excalidraw/color-palette.md +67 -0
  254. package/skills/diagram-master/references/engines/excalidraw/element-templates.md +182 -0
  255. package/skills/diagram-master/references/engines/excalidraw/json-schema.md +71 -0
  256. package/skills/diagram-master/references/engines/excalidraw/render_excalidraw.py +189 -0
  257. package/skills/diagram-master/references/engines/excalidraw/render_template.html +57 -0
  258. package/skills/diagram-master/references/engines/matplotlib/matplotlib-patterns.md +235 -0
  259. package/skills/diagram-master/references/engines/matplotlib/render_matplotlib.py +184 -0
  260. package/skills/diagram-master/references/engines/mermaid/domain-templates.md +435 -0
  261. package/skills/diagram-master/references/engines/mermaid/render_mermaid.py +116 -0
  262. package/skills/diagram-master/references/engines/mermaid/syntax-reference.md +2247 -0
  263. package/skills/diagram-master/references/engines/nanobannana/render_nanobannana2.py +168 -0
  264. package/skills/diagram-master/references/engines/svg/color-palette.md +188 -0
  265. package/skills/diagram-master/references/engines/svg/html-base-template.html +332 -0
  266. package/skills/diagram-master/references/engines/svg/interactivity-patterns.md +435 -0
  267. package/skills/diagram-master/references/engines/svg/render_interactive_svg.py +212 -0
  268. package/skills/diagram-master/references/engines/svg/svg-element-templates.md +349 -0
  269. package/skills/diagram-master/references/examples/README.md +69 -0
  270. package/skills/diagram-master/references/examples/ref_grid_architecture.png +0 -0
  271. package/skills/diagram-master/references/examples/ref_layered_flow.png +0 -0
  272. package/skills/diagram-master/references/pyproject.toml +16 -0
  273. package/skills/diagram-master/references/quality-checklist.md +33 -0
  274. package/skills/diagram-master/references/routing-guide.md +164 -0
  275. package/skills/diagram-master/references/uv.lock +1356 -0
  276. package/skills/google-workspace/SKILL.md +33 -0
  277. package/skills/google-workspace/scripts/gws-safe.sh +177 -0
  278. package/skills/grill-me/SKILL.md +1 -1
  279. package/skills/lecture-note-digitizer/SKILL.md +926 -0
  280. package/skills/lecture-note-digitizer/references/convert_to_pdf.py +30 -0
  281. package/skills/lecture-note-digitizer/references/extract_slide_diagram.py +73 -0
  282. package/skills/lecture-note-digitizer/references/html-template.md +167 -0
  283. package/skills/lecture-note-digitizer/references/katex-style-guide.md +165 -0
  284. package/skills/omni-crawl/SKILL.md +21 -11
  285. package/skills/omni-crawl/scripts/main.ts +6 -6
  286. package/skills/omni-crawl/src/router.ts +3 -3
  287. package/skills/omni-digest/SKILL.md +17 -9
  288. package/skills/omni-digest/digest.md +2 -2
  289. package/skills/omni-digest/src/fetch.ts +30 -3
  290. package/skills/pitch-deck/SKILL.md +2 -2
  291. package/skills/pitch-deck/template.html +2 -2
  292. package/skills/youtube-master/SKILL.md +163 -0
  293. package/skills/youtube-master/package-lock.json +558 -0
  294. package/skills/youtube-master/package.json +13 -0
  295. package/skills/youtube-master/references/study-note-template.md +124 -0
  296. package/skills/youtube-master/scripts/main.ts +435 -0
  297. package/skills/youtube-master/scripts/transcribe-local.ts +24 -0
  298. package/skills/youtube-master/src/audio.ts +63 -0
  299. package/skills/youtube-master/src/domain-staging.ts +50 -0
  300. package/skills/youtube-master/src/env.ts +36 -0
  301. package/skills/youtube-master/src/obsidian.ts +155 -0
  302. package/skills/youtube-master/src/router.ts +110 -0
  303. package/skills/youtube-master/src/stt.ts +199 -0
  304. package/skills/youtube-master/src/study-note.ts +175 -0
  305. package/skills/youtube-master/src/summarize.ts +358 -0
  306. package/skills/youtube-master/src/transcript.ts +76 -0
  307. package/skills/youtube-master/src/types.ts +91 -0
  308. package/skills/youtube-master/src/util.ts +93 -0
  309. package/skills/youtube-master/src/youtube.ts +70 -0
  310. package/skills/youtube-master/tsconfig.json +13 -0
  311. package/src/acp/server.ts +5 -2
  312. package/src/agent-mission/driver.ts +215 -23
  313. package/src/agent-mission/pty-decision.ts +71 -0
  314. package/src/agent-mission/review-loop.ts +30 -0
  315. package/src/autopilot/build/llm-conflict-merge.ts +16 -3
  316. package/src/autopilot/pty-control-loop.ts +4 -1
  317. package/src/autopilot/tool-registry.ts +2 -0
  318. package/src/boot/daemon-prompt-turn.ts +5 -0
  319. package/src/boot/daemon-runtime.ts +9 -3
  320. package/src/boot/daemon-tools/web-search.ts +3 -0
  321. package/src/card-followup/core.ts +109 -0
  322. package/src/chat/index.ts +2 -0
  323. package/src/cli/drive-input-jail.ts +101 -0
  324. package/src/cli/hooks-cli.ts +17 -3
  325. package/src/cli/make-cli.ts +43 -0
  326. package/src/cli/persona-cli.ts +98 -9
  327. package/src/cli/plugin-cli.ts +31 -22
  328. package/src/cli/pod-cli.ts +36 -9
  329. package/src/cli/pod-memory-advice.ts +35 -0
  330. package/src/cli/pr-cli.ts +51 -15
  331. package/src/cli/pty-drive-cli.ts +41 -7
  332. package/src/cli/pty-drive-verdict.ts +40 -0
  333. package/src/cli/release-cli.ts +63 -10
  334. package/src/cli/setup-cli.ts +43 -1
  335. package/src/cli/skills-cli.ts +17 -1
  336. package/src/context-bus/claude-hooks-install.ts +10 -0
  337. package/src/context-bus/context-now-surfaces.ts +65 -0
  338. package/src/context-bus/context-now.ts +104 -0
  339. package/src/context-bus/coord-events.ts +2 -2
  340. package/src/context-bus/external-events.ts +52 -0
  341. package/src/context-bus/long-term-memory.ts +108 -0
  342. package/src/context-bus/nightly-condense.ts +153 -0
  343. package/src/context-bus/session-events.ts +35 -0
  344. package/src/dashboard/dashboard-status-lines.ts +2 -0
  345. package/src/dashboard/index.ts +17 -4
  346. package/src/dashboard/slash-runtime/dashboard-handlers.ts +31 -1
  347. package/src/decisions/decision-cards.ts +10 -3
  348. package/src/decisions/decision-ledger.ts +13 -5
  349. package/src/discord/sprint21-runtime.ts +5 -1
  350. package/src/discord-self-message.ts +32 -0
  351. package/src/discord-slash-wire.ts +5 -1
  352. package/src/discord.ts +17 -1
  353. package/src/domains/core-tools.ts +3 -2
  354. package/src/domains/outbound-alert.ts +105 -32
  355. package/src/domains/outbound-log-probe.ts +8 -0
  356. package/src/domains/telegram-kind-route.ts +51 -13
  357. package/src/exec-requests/default-outputs.ts +25 -0
  358. package/src/exec-requests/planner.ts +10 -2
  359. package/src/exec-requests/runner.ts +20 -6
  360. package/src/exec-requests/store.ts +3 -0
  361. package/src/execution-loop/launch-gate.ts +109 -0
  362. package/src/field/field-reel.ts +5 -1
  363. package/src/field-note/index.ts +201 -0
  364. package/src/field-note/telegram.ts +142 -0
  365. package/src/field-note/transcribe.ts +248 -0
  366. package/src/graph-kinds/registry.ts +3 -3
  367. package/src/graph-runner/graph-cli.ts +61 -1
  368. package/src/graph-runner/graph-grow-llm.ts +47 -0
  369. package/src/graph-runner/graph-grow.ts +50 -0
  370. package/src/graph-runner/runner.ts +329 -33
  371. package/src/grok/agent-search.ts +8 -2
  372. package/src/guardian/secret-exposure-scan.ts +101 -0
  373. package/src/harness/harness-cli-command.ts +375 -13
  374. package/src/harness/harness-pod-dispatch.ts +43 -23
  375. package/src/harness/harness-seams.ts +38 -4
  376. package/src/harness/harness-stop.ts +23 -4
  377. package/src/harness/launch-registry.ts +91 -0
  378. package/src/harness/process-garbage.ts +5 -3
  379. package/src/hooks/consult-intake.ts +153 -0
  380. package/src/hooks/dispatch.ts +82 -0
  381. package/src/hooks/expose.ts +254 -0
  382. package/src/hooks/github-shadow.ts +108 -0
  383. package/src/hooks/providers.ts +71 -5
  384. package/src/hooks/queue.ts +1 -1
  385. package/src/hooks/receiver.ts +94 -16
  386. package/src/index.ts +76 -14
  387. package/src/intake-plane/categorize.ts +18 -46
  388. package/src/intake-plane/discord-seat-work.ts +38 -2
  389. package/src/intake-plane/front-route-classifier.ts +33 -39
  390. package/src/intake-plane/persona-answer.ts +30 -0
  391. package/src/intake-plane/runtime-callables.ts +8 -1
  392. package/src/intake-plane/telegram-seat-work.ts +36 -2
  393. package/src/intake-plane/wish-card.ts +33 -0
  394. package/src/intake-plane/wish-folder.ts +67 -0
  395. package/src/intent-gate/gate.ts +30 -10
  396. package/src/live/detail-switch.ts +5 -0
  397. package/src/llm/difficulty.ts +57 -0
  398. package/src/llm/judge-layer.ts +101 -0
  399. package/src/llm/mission-router.ts +33 -19
  400. package/src/loops/contract/examples/cmo-seat.loop.yaml +51 -0
  401. package/src/loops/contract/examples/orchestrator.loop.yaml +57 -0
  402. package/src/loops/contract/examples/steward.loop.yaml +50 -0
  403. package/src/loops/contract/loop-agent.schema.json +138 -0
  404. package/src/loops/contract/validate.ts +64 -0
  405. package/src/loops/registry.ts +20 -6
  406. package/src/market/signed-index.ts +4 -0
  407. package/src/maturity/bot-command-maturity.ts +45 -0
  408. package/src/maturity/feature-maturity.ts +27 -4
  409. package/src/model-tier/index.ts +2 -2
  410. package/src/model-tier/tier-resolver.ts +20 -20
  411. package/src/model-tier/types.ts +6 -6
  412. package/src/mss/logging/log-store.ts +15 -0
  413. package/src/nexus/api/config-model-tier.ts +5 -4
  414. package/src/nexus/api/fabric-plans.ts +53 -0
  415. package/src/nexus/api/harness-api.ts +5 -1
  416. package/src/nexus/api/health.ts +2 -0
  417. package/src/nexus/api/http-server.ts +67 -8
  418. package/src/nexus/api/inside-events.ts +226 -0
  419. package/src/nexus/api/meta-api.ts +21 -8
  420. package/src/nexus/api/missions.ts +6 -1
  421. package/src/nexus/api/ops-seats.ts +33 -0
  422. package/src/nexus/api/outbound-report.ts +40 -7
  423. package/src/nexus/api/outputs-route.ts +44 -0
  424. package/src/nexus/api/personas.ts +95 -53
  425. package/src/nexus/api/seat-requests.ts +44 -2
  426. package/src/nexus/api/sessions-store.ts +17 -38
  427. package/src/nexus/api/sub-seat-charters.ts +34 -0
  428. package/src/nexus/api/tabs-mutations.ts +3 -1
  429. package/src/nexus/api/task-cards-api.ts +19 -0
  430. package/src/nexus/api/trace.ts +18 -6
  431. package/src/nexus/api/workflow-history.ts +88 -0
  432. package/src/nexus/api/workflow-run-event-bridge.ts +1 -0
  433. package/src/nexus/api/workflows.ts +132 -6
  434. package/src/nexus/index.ts +2 -0
  435. package/src/nexus/kinds/webterm.ts +2 -1
  436. package/src/nexus/outbound/delivery-ledger.ts +17 -8
  437. package/src/nexus/outbound/router.ts +8 -3
  438. package/src/nexus/webterm/pty.ts +6 -2
  439. package/src/onboarding/cli-auth-status.ts +80 -0
  440. package/src/onboarding/voice-ai.ts +3 -3
  441. package/src/org/seat-budget.ts +48 -0
  442. package/src/org/stall-escalation.ts +63 -0
  443. package/src/outputs/ledger.ts +120 -0
  444. package/src/persona/persona-todo.ts +79 -0
  445. package/src/persona/presets.ts +123 -2
  446. package/src/persona/team-set.ts +155 -0
  447. package/src/plugins/install/plugin-install.ts +14 -0
  448. package/src/plugins/maker/market-bundle.ts +110 -0
  449. package/src/plugins/maker/plugin-maker.ts +254 -11
  450. package/src/plugins/maker/wizard-generate.ts +103 -0
  451. package/src/pod-lease/admission.ts +150 -0
  452. package/src/pod-lease/dependency-state.ts +85 -0
  453. package/src/pod-lease/host-lease.ts +127 -0
  454. package/src/project/project-suggestion.ts +16 -0
  455. package/src/project/session-context.ts +24 -0
  456. package/src/release-loop/checklist.ts +17 -5
  457. package/src/release-loop/feature-store.ts +29 -13
  458. package/src/release-loop/landed-but-yellow.ts +48 -0
  459. package/src/release-loop/next-md-merge.ts +58 -0
  460. package/src/release-loop/release-note.ts +59 -4
  461. package/src/seat-dispatch/seat-ask.ts +130 -0
  462. package/src/seat-dispatch/seat-questions.ts +100 -0
  463. package/src/seat-loop/seat-loop.ts +709 -29
  464. package/src/seat-loop/seat-report.ts +37 -2
  465. package/src/self-dev/dev-cli.ts +4 -1
  466. package/src/self-dev/dev-pipeline.ts +37 -1
  467. package/src/self-dev/draft-sweep.ts +79 -40
  468. package/src/self-dev/draft-triage-rules.ts +62 -7
  469. package/src/self-dev/fabric-plan-core.ts +297 -0
  470. package/src/self-dev/orchestrate.ts +36 -4
  471. package/src/self-dev/release-path-guard.ts +62 -0
  472. package/src/self-dev/shard-aggregate.ts +230 -0
  473. package/src/self-dev/shard-placement.ts +60 -0
  474. package/src/self-dev/shard-plan.ts +48 -0
  475. package/src/self-dev/shard-pod-run.ts +77 -0
  476. package/src/self-dev/shard-run.ts +105 -0
  477. package/src/self-implement/budget-gate.ts +29 -12
  478. package/src/self-implement/gate-baseline.ts +1 -1
  479. package/src/self-implement/gate-candidate-ranking.ts +60 -0
  480. package/src/self-implement/gate-cli.ts +40 -1
  481. package/src/self-implement/gate-scope.ts +44 -13
  482. package/src/self-implement/graph-variant.ts +171 -0
  483. package/src/self-implement/harness-policy-gates.ts +1 -1
  484. package/src/self-implement/headless-elanous-driver.ts +27 -3
  485. package/src/self-implement/host-regate.ts +22 -1
  486. package/src/self-implement/importer-test-index.ts +2 -1
  487. package/src/self-implement/l8-merge-queue.ts +130 -0
  488. package/src/self-implement/orchestrator.ts +257 -9
  489. package/src/self-implement/route-consumer-test-index.ts +122 -0
  490. package/src/self-implement/seams.ts +72 -11
  491. package/src/self-implement/test-seams.ts +2 -0
  492. package/src/self-implement/uncommitted-work.ts +59 -0
  493. package/src/session/index.ts +36 -13
  494. package/src/skills/gift-install.ts +215 -0
  495. package/src/skills/tools/web-search.ts +4 -1
  496. package/src/steward/launch.ts +42 -26
  497. package/src/steward/steward-cards.ts +17 -9
  498. package/src/steward/triage.ts +46 -14
  499. package/src/task-cards/card-cli.ts +25 -1
  500. package/src/task-orchestrator/mission.ts +5 -0
  501. package/src/task-orchestrator/store.ts +12 -3
  502. package/src/task-orchestrator/surfaces/pod-command-job.ts +43 -17
  503. package/src/task-orchestrator/surfaces/pod-lease.ts +156 -19
  504. package/src/task-orchestrator/surfaces/pod-pool.ts +127 -26
  505. package/src/task-orchestrator/surfaces/self-implement-pod.ts +222 -40
  506. package/src/task-orchestrator/surfaces/self-implement.ts +15 -2
  507. package/src/task-orchestrator/types.ts +2 -0
  508. package/src/telegram-card-followup.ts +16 -96
  509. package/src/telegram-commands.ts +31 -1
  510. package/src/telegram-project-command.ts +145 -0
  511. package/src/telegram-report.ts +21 -17
  512. package/src/telegram.ts +61 -8
  513. package/src/tool-runtime/self-cognition-runtimes.ts +13 -3
  514. package/src/user-config.ts +110 -24
  515. package/src/version/packed-revision.json +1 -1
  516. package/src/web-search/grok.ts +7 -1
  517. package/src/web-search/index.ts +28 -1
  518. package/src/web-search/provider.ts +4 -0
  519. package/src/web-search/x-intent.ts +5 -0
  520. package/src/workflow-runtime/executor.ts +277 -47
  521. package/src/workflow-runtime/index.ts +1 -0
  522. package/src/workflow-runtime/nodes/subworkflow.ts +60 -0
  523. package/src/workflow-runtime/plugin-kind-node.ts +1 -1
  524. package/src/workflow-runtime/schema.ts +79 -4
  525. package/src/workflow-runtime/types.ts +35 -4
  526. package/apps/pwa/out/_next/static/2DsiDfDCks44g1cPUMhiW/_buildManifest.js +0 -1
  527. package/apps/pwa/out/_next/static/chunks/1105-c473ed46272fba79.js +0 -1
  528. package/apps/pwa/out/_next/static/chunks/1377-1efeffbbac0963ff.js +0 -1
  529. package/apps/pwa/out/_next/static/chunks/1470.98a6ab61ccb4131c.js +0 -1
  530. package/apps/pwa/out/_next/static/chunks/216-5acd01cbde4acda7.js +0 -1
  531. package/apps/pwa/out/_next/static/chunks/2330-c2f07246c8788af1.js +0 -1
  532. package/apps/pwa/out/_next/static/chunks/2375-cb6debea56cce4fb.js +0 -1
  533. package/apps/pwa/out/_next/static/chunks/24-e6d28380efab7faf.js +0 -1
  534. package/apps/pwa/out/_next/static/chunks/2977-e38442e86289f1d3.js +0 -1
  535. package/apps/pwa/out/_next/static/chunks/2982-2a2df543be3d2e5a.js +0 -25
  536. package/apps/pwa/out/_next/static/chunks/3403.4bc97b4066945a94.js +0 -5
  537. package/apps/pwa/out/_next/static/chunks/3615-740dd270764ffa24.js +0 -1
  538. package/apps/pwa/out/_next/static/chunks/371-4ad6af55dad02ced.js +0 -1
  539. package/apps/pwa/out/_next/static/chunks/3734-1015fe991eb9b7e7.js +0 -1
  540. package/apps/pwa/out/_next/static/chunks/4114-3e63117452378807.js +0 -1
  541. package/apps/pwa/out/_next/static/chunks/5012-a7fe6f3c8b6fe45a.js +0 -1
  542. package/apps/pwa/out/_next/static/chunks/5609-012bb3557211f07e.js +0 -1
  543. package/apps/pwa/out/_next/static/chunks/5783-ef40ebfc91d55230.js +0 -1
  544. package/apps/pwa/out/_next/static/chunks/5791-bb82743fa6299562.js +0 -1
  545. package/apps/pwa/out/_next/static/chunks/62-ff227c3edb8b248b.js +0 -1
  546. package/apps/pwa/out/_next/static/chunks/6320-baac91d68843a9a6.js +0 -1
  547. package/apps/pwa/out/_next/static/chunks/6725-68ab7cc0b1faf00d.js +0 -1
  548. package/apps/pwa/out/_next/static/chunks/6998-a654fe5c58271600.js +0 -1
  549. package/apps/pwa/out/_next/static/chunks/7633-1b3709b0854c9412.js +0 -1
  550. package/apps/pwa/out/_next/static/chunks/7647.2fcd30d894d5ee30.js +0 -1
  551. package/apps/pwa/out/_next/static/chunks/7673-2eda1507d38dadb8.js +0 -1
  552. package/apps/pwa/out/_next/static/chunks/7951-8b03dbb10b24cd06.js +0 -1
  553. package/apps/pwa/out/_next/static/chunks/7990-e12efba616f46e03.js +0 -1
  554. package/apps/pwa/out/_next/static/chunks/8142-744998d65d7bb17e.js +0 -1
  555. package/apps/pwa/out/_next/static/chunks/8195-6fde3d7a39859206.js +0 -10
  556. package/apps/pwa/out/_next/static/chunks/8619-4365e03a2862830f.js +0 -1
  557. package/apps/pwa/out/_next/static/chunks/8894-b5fb36bab837cd29.js +0 -1
  558. package/apps/pwa/out/_next/static/chunks/920-f7dceb78f1c585ef.js +0 -1
  559. package/apps/pwa/out/_next/static/chunks/9454-84d0d5d77446bd92.js +0 -1
  560. package/apps/pwa/out/_next/static/chunks/9651-3cd291a6fa1370d2.js +0 -1
  561. package/apps/pwa/out/_next/static/chunks/988-5f92e7ab7ccea3dd.js +0 -1
  562. package/apps/pwa/out/_next/static/chunks/9989-5582582f06429840.js +0 -1
  563. package/apps/pwa/out/_next/static/chunks/ae787e4c-f2998de7f1ba72a4.js +0 -1
  564. package/apps/pwa/out/_next/static/chunks/app/_not-found/page-859cea1570b6227a.js +0 -1
  565. package/apps/pwa/out/_next/static/chunks/app/approvals/page-d2253d7e58ef1890.js +0 -1
  566. package/apps/pwa/out/_next/static/chunks/app/autopilot/page-5441d4a9ab35e518.js +0 -1
  567. package/apps/pwa/out/_next/static/chunks/app/board/page-d9b12d680922d980.js +0 -1
  568. package/apps/pwa/out/_next/static/chunks/app/bots/page-e268d6d145827a22.js +0 -1
  569. package/apps/pwa/out/_next/static/chunks/app/chat/page-f8116559c7424da7.js +0 -1
  570. package/apps/pwa/out/_next/static/chunks/app/consult/page-1085399fd0f32112.js +0 -1
  571. package/apps/pwa/out/_next/static/chunks/app/control/page-1df686a14f65895a.js +0 -1
  572. package/apps/pwa/out/_next/static/chunks/app/design-check/page-54e1f966ab60a4dc.js +0 -1
  573. package/apps/pwa/out/_next/static/chunks/app/editor/page-7ed95f296f5ee8e9.js +0 -1
  574. package/apps/pwa/out/_next/static/chunks/app/exec/page-11edac668d77e5c3.js +0 -1
  575. package/apps/pwa/out/_next/static/chunks/app/field/page-59e2b9a22cd5a6d5.js +0 -1
  576. package/apps/pwa/out/_next/static/chunks/app/healthz/route-859cea1570b6227a.js +0 -1
  577. package/apps/pwa/out/_next/static/chunks/app/intake/page-2976df21ad74ab48.js +0 -1
  578. package/apps/pwa/out/_next/static/chunks/app/layout-34d211a67f16d510.js +0 -1
  579. package/apps/pwa/out/_next/static/chunks/app/live/page-8ff652d5d950639b.js +0 -1
  580. package/apps/pwa/out/_next/static/chunks/app/market/page-b31610deda76337b.js +0 -1
  581. package/apps/pwa/out/_next/static/chunks/app/missions/[id]/page-6cb0e1bbefe5fb3d.js +0 -1
  582. package/apps/pwa/out/_next/static/chunks/app/morning/page-a286a152cf584576.js +0 -1
  583. package/apps/pwa/out/_next/static/chunks/app/not-found-d9237581e7003bcb.js +0 -1
  584. package/apps/pwa/out/_next/static/chunks/app/observatory/page-83274e761643fdd2.js +0 -1
  585. package/apps/pwa/out/_next/static/chunks/app/ops/checklist/page-ceee6cfb1d4e6d68.js +0 -1
  586. package/apps/pwa/out/_next/static/chunks/app/ops/release/page-9c9f8bb3e4a64091.js +0 -1
  587. package/apps/pwa/out/_next/static/chunks/app/ops/seats/page-c17217603ea3426a.js +0 -1
  588. package/apps/pwa/out/_next/static/chunks/app/page-efb6177cbf1e8a51.js +0 -1
  589. package/apps/pwa/out/_next/static/chunks/app/reflection/page-d307523703bc4df3.js +0 -1
  590. package/apps/pwa/out/_next/static/chunks/app/scheduler/page-462f4e4bab45ce7d.js +0 -1
  591. package/apps/pwa/out/_next/static/chunks/app/sessions/page-8990e96f33af3837.js +0 -1
  592. package/apps/pwa/out/_next/static/chunks/app/settings/devices/page-e168fa1030af0548.js +0 -1
  593. package/apps/pwa/out/_next/static/chunks/app/settings/page-1233e05a4068bc9c.js +0 -1
  594. package/apps/pwa/out/_next/static/chunks/app/setup/done/page-13a1840b1fac337a.js +0 -1
  595. package/apps/pwa/out/_next/static/chunks/app/setup/layout-859cea1570b6227a.js +0 -1
  596. package/apps/pwa/out/_next/static/chunks/app/setup/page-64a29fc80b11ab55.js +0 -1
  597. package/apps/pwa/out/_next/static/chunks/app/share/page-68e787339a16b3dc.js +0 -1
  598. package/apps/pwa/out/_next/static/chunks/app/showroom/page-4fddc90b23feb215.js +0 -1
  599. package/apps/pwa/out/_next/static/chunks/app/tasks/page-886ba8260dc79c79.js +0 -1
  600. package/apps/pwa/out/_next/static/chunks/app/term/page-0f26507a1722e40b.js +0 -1
  601. package/apps/pwa/out/_next/static/chunks/app/today/page-109d4ccd42259c9d.js +0 -1
  602. package/apps/pwa/out/_next/static/chunks/app/trace/page-f5c2a4e510726774.js +0 -1
  603. package/apps/pwa/out/_next/static/chunks/app/vault/page-b2e0039416f42522.js +0 -1
  604. package/apps/pwa/out/_next/static/chunks/app/workflows/chat-ui/page-26102fd7350f171e.js +0 -1
  605. package/apps/pwa/out/_next/static/chunks/app/workflows/page-708948bc8a802794.js +0 -1
  606. package/apps/pwa/out/_next/static/chunks/app/workspace/page-5e5611620f78fb0b.js +0 -1
  607. package/apps/pwa/out/_next/static/chunks/app/worktrees/page-139ba5c367bbf60a.js +0 -1
  608. package/apps/pwa/out/_next/static/chunks/framework-ea806bb57f2b8923.js +0 -1
  609. package/apps/pwa/out/_next/static/chunks/main-8d2302399c2c8f87.js +0 -1
  610. package/apps/pwa/out/_next/static/chunks/main-app-202b4e81f33895ea.js +0 -1
  611. package/apps/pwa/out/_next/static/chunks/pages/_app-b10928c60f0b8488.js +0 -1
  612. package/apps/pwa/out/_next/static/chunks/pages/_error-689039227d443fab.js +0 -1
  613. package/apps/pwa/out/_next/static/chunks/webpack-e5bea36f183b25e6.js +0 -1
  614. package/apps/pwa/out/_next/static/css/43feca5fd387dcbd.css +0 -1
  615. /package/apps/pwa/out/_next/static/{2DsiDfDCks44g1cPUMhiW → -6XrAoD3eU7NyMHAE4xPS}/_ssgManifest.js +0 -0
@@ -22,6 +22,7 @@ export const FEATURE_MATURITY = {
22
22
  '/editor': { pwa: 'beta' },
23
23
  '/intake': { pwa: 'beta' },
24
24
  '/trace': { pwa: 'beta' },
25
+ '/inside': { pwa: 'beta' },
25
26
  '/board': { pwa: 'beta' },
26
27
  '/autopilot': { pwa: 'beta' },
27
28
  '/missions/[id]': { pwa: 'beta' },
@@ -31,6 +32,7 @@ export const FEATURE_MATURITY = {
31
32
  '/vault': { pwa: 'beta' },
32
33
  '/observatory': { pwa: 'beta' },
33
34
  '/exec': { pwa: 'beta' },
35
+ '/outputs': { pwa: 'beta' },
34
36
  '/field': { pwa: 'beta' },
35
37
  '/showroom': { pwa: 'beta' },
36
38
  '/workflows': { pwa: 'beta' },
@@ -55,11 +57,11 @@ export const FEATURE_MATURITY = {
55
57
  pty: 'beta', pr: 'beta', repo: 'beta', role: 'beta', machine: 'beta',
56
58
  where: 'stable', shadow: 'beta', llm: 'beta', storage: 'beta', leader: 'beta',
57
59
  pod: 'beta', browser: 'beta', questions: 'beta', usage: 'stable', live: 'beta',
58
- research: 'beta', release: 'beta', seat: 'beta', coord: 'beta', 'model-watch': 'beta', doctor: 'stable',
60
+ research: 'beta', release: 'beta', seat: 'beta', coord: 'beta', context: 'beta', 'model-watch': 'beta', doctor: 'stable',
59
61
  control: 'beta', resources: 'beta', hooks: 'beta', setup: 'stable', start: 'stable',
60
62
  grounding: 'beta', graph: 'beta', loop: 'stable', card: 'stable', 'launch-head': 'beta',
61
- a2a: 'beta', plugin: 'stable', skills: 'beta', connect: 'beta', import: 'beta',
62
- persona: 'beta', market: 'beta', directive: 'stable', connector: 'beta', storyboard: 'beta',
63
+ a2a: 'beta', plugin: 'stable', make: 'beta', skills: 'beta', connect: 'beta', import: 'beta',
64
+ persona: 'beta', 'team-set': 'beta', market: 'beta', directive: 'stable', connector: 'beta', storyboard: 'beta',
63
65
  python: 'beta', 'self-update': 'stable', 'measure-fabric-arc-ab': 'beta', mcp: 'beta',
64
66
  relay: 'beta', 'telegram-test': 'beta', telegram: 'beta', 'discord-test': 'beta',
65
67
  sync: 'beta', status: 'beta', git: 'beta', gh: 'beta', repro: 'system',
@@ -86,6 +88,8 @@ export const FEATURE_MATURITY = {
86
88
  model: 'stable',
87
89
  clear: 'stable',
88
90
  status: 'stable',
91
+ now: 'beta', // CTX2 «지금 무엇이 돌고 있나» (#23379)
92
+ wish: 'beta',
89
93
  remaining: 'stable',
90
94
  setup: 'stable',
91
95
  quit: 'stable',
@@ -144,7 +148,26 @@ export const FEATURE_MATURITY = {
144
148
  'auto-tts': 'beta',
145
149
  directive: 'ops',
146
150
  },
147
- } as const satisfies { pwaRoute: Record<string, SurfaceMaturity>; cliRoot: Record<string, Maturity>; tuiSlash: Record<string, Maturity> };
151
+ telegramCommand: {
152
+ help: 'stable', status: 'stable', new: 'stable', clear: 'stable', reset: 'stable',
153
+ ping: 'stable', provider: 'stable', sessions: 'stable', fork: 'stable', resume: 'stable',
154
+ decisions: 'stable', work: 'stable', cancel: 'stable',
155
+ skills: 'beta', skill: 'beta', digest: 'beta', intake: 'beta', ad: 'beta',
156
+ taste: 'beta', missions: 'beta', attach: 'beta', detach: 'beta', now: 'beta', project: 'beta', wish: 'beta',
157
+ brain: 'tool', cc: 'tool', cdx: 'tool', gem: 'tool', local: 'tool',
158
+ harness: 'ops',
159
+ // Existing commands outside the CXO four-grade menu list are owner-only.
160
+ cc_clear: 'system', coo: 'system', cto: 'system', cmo: 'system', cxo: 'system', mission_del: 'system',
161
+ bots: 'system', bot: 'system', screen: 'system', chart: 'system', routines: 'system', botsay: 'system',
162
+ },
163
+ discordCommand: {
164
+ status: 'stable', sessions: 'stable', new: 'stable', fork: 'stable',
165
+ persona: 'beta', poll: 'beta', attach: 'beta',
166
+ brain: 'tool', cc: 'tool', cdx: 'tool', gem: 'tool',
167
+ relay: 'ops', showroom: 'ops', bots: 'ops', bot: 'ops', screen: 'ops', chart: 'ops',
168
+ routines: 'ops', botsay: 'ops', 'voice-join': 'ops', 'voice-leave': 'ops', 'voice-status': 'ops',
169
+ },
170
+ } as const satisfies { pwaRoute: Record<string, SurfaceMaturity>; cliRoot: Record<string, Maturity>; tuiSlash: Record<string, Maturity>; telegramCommand: Record<string, Maturity>; discordCommand: Record<string, Maturity> };
148
171
 
149
172
  /** Unregistered routes and surfaces are not implicitly mature. Desktop shares the PWA implementation. */
150
173
  export function maturityOn(route: string, surface: Surface): Maturity | undefined {
@@ -7,12 +7,12 @@ export {
7
7
  MODEL_TIER_LABELS,
8
8
  TTS_VOICE_CONTEXTS,
9
9
  isModelTier,
10
- isModelTierPersona,
10
+ isModelTierProfile,
11
11
  isTtsVoiceContext,
12
12
  modelTierRank,
13
13
  type BudgetUserConfig,
14
14
  type ModelTier,
15
- type ModelTierPersona,
15
+ type ModelTierProfile,
16
16
  type ModelTierSurface,
17
17
  type ModelTierUserConfig,
18
18
  type ModelTierVoiceConfig,
@@ -4,7 +4,7 @@
4
4
  // Precedence (high → low):
5
5
  // 1. `modelTier.voice.stt` (per-surface override · §3.4a.1)
6
6
  // 2. `modelTier.preset` (Phase 2 preset catalog · undefined today)
7
- // 3. `modelTier.persona`-based default (casual & power both ↦ Balanced
7
+ // 3. `modelTier.profile`-based default (casual & power both ↦ Balanced
8
8
  // today; Phase 3 can broaden)
9
9
  // 4. DEFAULT_MODEL_TIER ('balanced')
10
10
  //
@@ -40,7 +40,7 @@ export type SttTierSource =
40
40
  | 'session-override'
41
41
  | 'user-config-surface'
42
42
  | 'preset'
43
- | 'persona'
43
+ | 'profile'
44
44
  | 'default';
45
45
 
46
46
  export interface ResolvedSttTier extends SttTierSpec {
@@ -83,14 +83,14 @@ export function resolveSttTier(
83
83
  };
84
84
  }
85
85
 
86
- // 3. Persona-driven default — casual and power both land on
86
+ // 3. Profile-driven default — casual and power both land on
87
87
  // Balanced today (PLAN §3.0.3). `custom` keeps the same default
88
88
  // until an override or preset is set.
89
- if (modelTier?.persona) {
89
+ if (modelTier?.profile) {
90
90
  return {
91
91
  ...STT_TIER_MAP[DEFAULT_MODEL_TIER],
92
92
  tier: DEFAULT_MODEL_TIER,
93
- source: 'persona',
93
+ source: 'profile',
94
94
  };
95
95
  }
96
96
 
@@ -108,7 +108,7 @@ export type LlmTierSource =
108
108
  | 'session-override'
109
109
  | 'user-config-surface'
110
110
  | 'preset'
111
- | 'persona'
111
+ | 'profile'
112
112
  | 'default';
113
113
 
114
114
  export interface ResolvedLlmTier extends LlmTierSpec {
@@ -126,7 +126,7 @@ export type TtsTierSource =
126
126
  | 'session-override'
127
127
  | 'user-config-surface'
128
128
  | 'preset'
129
- | 'persona'
129
+ | 'profile'
130
130
  | 'default';
131
131
 
132
132
  export interface ResolvedTtsTier extends TtsTierSpec {
@@ -153,13 +153,13 @@ export function resolveTtsTier(
153
153
  if (modelTier?.preset) {
154
154
  return { ...TTS_TIER_MAP[DEFAULT_MODEL_TIER], tier: DEFAULT_MODEL_TIER, source: 'preset' };
155
155
  }
156
- if (modelTier?.persona) {
157
- return { ...TTS_TIER_MAP[DEFAULT_MODEL_TIER], tier: DEFAULT_MODEL_TIER, source: 'persona' };
156
+ if (modelTier?.profile) {
157
+ return { ...TTS_TIER_MAP[DEFAULT_MODEL_TIER], tier: DEFAULT_MODEL_TIER, source: 'profile' };
158
158
  }
159
159
  return { ...TTS_TIER_MAP[DEFAULT_MODEL_TIER], tier: DEFAULT_MODEL_TIER, source: 'default' };
160
160
  }
161
161
 
162
- /** Resolve LLM tier. Precedence mirrors STT (surface → preset → persona
162
+ /** Resolve LLM tier. Precedence mirrors STT (surface → preset → profile
163
163
  * → default) — diverges only in that the resolver needs the active
164
164
  * `llm.provider` to expand the tier ladder. */
165
165
  export function resolveLlmTier(
@@ -196,12 +196,12 @@ export function resolveLlmTier(
196
196
  provider,
197
197
  };
198
198
  }
199
- // 3. Persona-driven default.
200
- if (modelTier?.persona) {
199
+ // 3. Profile-driven default.
200
+ if (modelTier?.profile) {
201
201
  return {
202
202
  ...lookupLlmTierSpec(provider, DEFAULT_MODEL_TIER),
203
203
  tier: DEFAULT_MODEL_TIER,
204
- source: 'persona',
204
+ source: 'profile',
205
205
  provider,
206
206
  };
207
207
  }
@@ -220,7 +220,7 @@ export type EmbeddingTierSource =
220
220
  | 'session-override'
221
221
  | 'user-config-surface'
222
222
  | 'preset'
223
- | 'persona'
223
+ | 'profile'
224
224
  | 'default';
225
225
 
226
226
  export interface ResolvedEmbeddingTier extends EmbeddingTierSpec {
@@ -230,7 +230,7 @@ export interface ResolvedEmbeddingTier extends EmbeddingTierSpec {
230
230
  }
231
231
 
232
232
  /** Resolve the embedding tier. Same precedence chain as LLM: session
233
- * override → per-surface (modelTier.embedding) → preset → persona →
233
+ * override → per-surface (modelTier.embedding) → preset → profile →
234
234
  * default. The provider is supplied by the caller — typical wiring
235
235
  * reads `cfg.embedding?.provider` (future field) and falls back to
236
236
  * 'openai'. */
@@ -273,11 +273,11 @@ export function resolveEmbeddingTier(
273
273
  provider,
274
274
  };
275
275
  }
276
- if (modelTier?.persona) {
276
+ if (modelTier?.profile) {
277
277
  return {
278
278
  ...lookupEmbeddingTierSpec(provider, DEFAULT_MODEL_TIER),
279
279
  tier: DEFAULT_MODEL_TIER,
280
- source: 'persona',
280
+ source: 'profile',
281
281
  provider,
282
282
  };
283
283
  }
@@ -295,7 +295,7 @@ export type VisionTierSource =
295
295
  | 'session-override'
296
296
  | 'user-config-surface'
297
297
  | 'preset'
298
- | 'persona'
298
+ | 'profile'
299
299
  | 'default';
300
300
 
301
301
  export interface ResolvedVisionTier extends VisionTierSpec {
@@ -337,11 +337,11 @@ export function resolveVisionTier(
337
337
  provider,
338
338
  };
339
339
  }
340
- if (modelTier?.persona) {
340
+ if (modelTier?.profile) {
341
341
  return {
342
342
  ...lookupVisionTierSpec(provider, DEFAULT_MODEL_TIER),
343
343
  tier: DEFAULT_MODEL_TIER,
344
- source: 'persona',
344
+ source: 'profile',
345
345
  provider,
346
346
  };
347
347
  }
@@ -61,15 +61,15 @@ export function modelTierRank(t: ModelTier): number {
61
61
  * adds `llm` and `tts`. Embedding / vision land in Phase 3. */
62
62
  export type ModelTierSurface = 'stt' | 'llm' | 'tts';
63
63
 
64
- // ── Persona ────────────────────────────────────────────────────────
64
+ // ── Model tier profile ─────────────────────────────────────────────
65
65
 
66
- /** Zero-config baseline (§3.0 of the PLAN) — two-persona framework.
66
+ /** Zero-config baseline (§3.0 of the PLAN) — model tier profiles.
67
67
  * - `casual`: never touches settings; surfaces minimal UI.
68
68
  * - `power`: opens slider / picker / preset etc.
69
69
  * - `custom`: preset or per-surface overrides decide. */
70
- export type ModelTierPersona = 'casual' | 'power' | 'custom';
70
+ export type ModelTierProfile = 'casual' | 'power' | 'custom';
71
71
 
72
- export function isModelTierPersona(v: unknown): v is ModelTierPersona {
72
+ export function isModelTierProfile(v: unknown): v is ModelTierProfile {
73
73
  return v === 'casual' || v === 'power' || v === 'custom';
74
74
  }
75
75
 
@@ -112,9 +112,9 @@ export function isTtsVoiceContext(v: unknown): v is TtsVoiceContext {
112
112
 
113
113
  /** Root `modelTier` sub-tree of UserConfig. Sparse — every field is
114
114
  * optional so the resolver can fall through (surface override → preset
115
- * → persona → default). */
115
+ * → profile → default). */
116
116
  export interface ModelTierUserConfig {
117
- persona?: ModelTierPersona;
117
+ profile?: ModelTierProfile;
118
118
  preset?: string;
119
119
  voice?: ModelTierVoiceConfig;
120
120
  llm?: ModelTier;
@@ -125,6 +125,9 @@ export interface LogQuery {
125
125
  /** event/data/category LIKE 부분 일치. */
126
126
  grep?: string;
127
127
  sessionId?: string;
128
+ /** Trace ownership: explicit row projectId takes precedence over session ownership. */
129
+ projectId?: string;
130
+ projectSessionIds?: readonly string[];
128
131
  sinceMs?: number;
129
132
  untilMs?: number;
130
133
  /** 증분 커서 — id > afterId 를 오름차순으로(SSE 드레인). */
@@ -397,6 +400,18 @@ export class LogStore {
397
400
  params.push(needle, needle, needle);
398
401
  }
399
402
  if (q.sessionId) { where.push('session_id = ?'); params.push(q.sessionId); }
403
+ if (q.projectId !== undefined) {
404
+ const sessionIds = [...new Set(q.projectSessionIds ?? [])];
405
+ // An explicit project tag wins, even if the row's session belongs to another project.
406
+ // Guard JSON extraction so malformed and absent payloads cannot match by accident.
407
+ const tagged = "CASE WHEN json_valid(data) THEN json_extract(data, '$.projectId') ELSE NULL END";
408
+ const session = "CASE WHEN json_valid(data) THEN json_extract(data, '$.sessionId') ELSE NULL END";
409
+ const untagged = "CASE WHEN json_valid(data) THEN json_type(data, '$.projectId') IS NULL ELSE 1 END";
410
+ where.push(`(${tagged} = ? OR (${untagged} AND (${sessionIds.length
411
+ ? `session_id IN (${sessionIds.map(() => '?').join(',')}) OR ${session} IN (${sessionIds.map(() => '?').join(',')})`
412
+ : '0'})))`);
413
+ params.push(q.projectId, ...sessionIds, ...sessionIds);
414
+ }
400
415
  if (q.sinceMs !== undefined) { where.push('ts_ms >= ?'); params.push(q.sinceMs); }
401
416
  if (q.untilMs !== undefined) { where.push('ts_ms <= ?'); params.push(q.untilMs); }
402
417
  if (q.afterId !== undefined) { where.push('id > ?'); params.push(q.afterId); }
@@ -39,7 +39,7 @@ function jsonResponse(body: unknown, status = 200): Response {
39
39
 
40
40
  import {
41
41
  isModelTier,
42
- isModelTierPersona,
42
+ isModelTierProfile,
43
43
  type BudgetUserConfig,
44
44
  type ModelTier,
45
45
  type ModelTierUserConfig,
@@ -74,9 +74,10 @@ function normalizeModelTier(v: unknown): ModelTierUserConfig | undefined | 'inva
74
74
  if (!v || typeof v !== 'object' || Array.isArray(v)) return 'invalid';
75
75
  const r = v as Record<string, unknown>;
76
76
  const out: ModelTierUserConfig = {};
77
- if (r.persona !== undefined) {
78
- if (!isModelTierPersona(r.persona)) return 'invalid';
79
- out.persona = r.persona;
77
+ const profile = r.profile === undefined ? r.persona : r.profile;
78
+ if (profile !== undefined) {
79
+ if (!isModelTierProfile(profile)) return 'invalid';
80
+ out.profile = profile;
80
81
  }
81
82
  if (r.preset !== undefined) {
82
83
  if (typeof r.preset !== 'string' || r.preset.trim().length === 0) return 'invalid';
@@ -0,0 +1,53 @@
1
+ import { effectiveInstanceRoot } from '../../instance/resolve.js';
2
+ import {
3
+ approveFabricPlan,
4
+ createFabricPlan,
5
+ loadFabricPlan,
6
+ type FabricPlan,
7
+ } from '../../self-dev/fabric-plan-core.js';
8
+ import { jsonResponse } from './json-response.js';
9
+
10
+ export interface FabricPlansRouteOpts {
11
+ create?: (root: string, request: string) => Promise<FabricPlan>;
12
+ }
13
+
14
+ /** This route never launches a plan. Only approval writes the fabric execution-candidate ledger. */
15
+ export async function handleFabricPlans(req: Request, opts: FabricPlansRouteOpts = {}): Promise<Response> {
16
+ const pathname = new URL(req.url).pathname;
17
+ const root = effectiveInstanceRoot();
18
+ if (pathname === '/v1/fabric/decompose') {
19
+ if (req.method !== 'POST') return jsonResponse({ error: 'method-not-allowed' }, 405);
20
+ let body: unknown;
21
+ try { body = await req.json(); }
22
+ catch { return jsonResponse({ error: 'invalid_json' }, 400); }
23
+ const request = body && typeof body === 'object' && !Array.isArray(body)
24
+ ? (body as Record<string, unknown>).request : undefined;
25
+ if (typeof request !== 'string' || !request.trim()) return jsonResponse({ error: 'invalid_request' }, 400);
26
+ try {
27
+ const plan = await (opts.create ?? createFabricPlan)(root, request);
28
+ return jsonResponse({ plan }, 201);
29
+ } catch (error) {
30
+ return jsonResponse({ error: 'decomposition_failed', reason: error instanceof Error ? error.message : String(error) }, 422);
31
+ }
32
+ }
33
+ const match = /^\/v1\/fabric\/plans\/([^/]+)(\/approve)?$/.exec(pathname);
34
+ if (!match) return jsonResponse({ error: 'not-found' }, 404);
35
+ let id: string;
36
+ try { id = decodeURIComponent(match[1]!); }
37
+ catch { return jsonResponse({ error: 'invalid_plan_id' }, 400); }
38
+ if (!/^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/i.test(id)) return jsonResponse({ error: 'invalid_plan_id' }, 400);
39
+ if (!match[2]) {
40
+ if (req.method !== 'GET') return jsonResponse({ error: 'method-not-allowed' }, 405);
41
+ const plan = loadFabricPlan(root, id);
42
+ return plan ? jsonResponse({ plan }) : jsonResponse({ error: 'not-found' }, 404);
43
+ }
44
+ if (req.method !== 'POST') return jsonResponse({ error: 'method-not-allowed' }, 405);
45
+ // The ledger transition is atomic and rejects a second approval; no draft is executable.
46
+ try {
47
+ return jsonResponse({ candidate: approveFabricPlan(root, id) });
48
+ } catch (error) {
49
+ if (error instanceof Error && error.message.startsWith('fabric plan not found:')) return jsonResponse({ error: 'not-found' }, 404);
50
+ if (error instanceof Error && error.message === 'fabric plan already approved') return jsonResponse({ error: 'already-approved' }, 409);
51
+ throw error;
52
+ }
53
+ }
@@ -19,6 +19,7 @@ import { resolveHarnessTarget } from '../../self-implement/harness-target-option
19
19
  import { queryRunningRuns, type RunningRunsResult } from '../../self-implement/running-runs.js';
20
20
  import { getDefaultLogStore, type LogStore } from '../../mss/logging/log-store.js';
21
21
  import { createSeqTracker, makeEnvelope, type FeedbackEnvelope } from '../../feedback/envelope.js';
22
+ import { publishInsideEvent } from './inside-events.js';
22
23
 
23
24
  const JSON_HEADERS = { 'content-type': 'application/json; charset=utf-8' };
24
25
  const ASK_USAGE = 'usage: POST /v1/harness/ask with JSON body {"text":"<ask>"} — optional "target":"<path>" (홈 안의 git repo·디렉터리·파일)';
@@ -248,7 +249,10 @@ export async function handleHarnessAskPost(req: Request, _metaApi: HarnessMetaAp
248
249
  }
249
250
 
250
251
  const acceptanceId = deps.createAcceptanceId?.() ?? crypto.randomUUID();
251
- const log = deps.log ?? ((event, data) => debug.log('harness-http', event, data));
252
+ const log = (event: string, data: Record<string, unknown>) => {
253
+ (deps.log ?? ((name: string, payload: Record<string, unknown>) => debug.log('harness-http', name, payload)))(event, data);
254
+ publishInsideEvent({ ...data, kind: 'harness-run', event });
255
+ };
252
256
  const suppliedOrigin = (body as { origin?: unknown }).origin;
253
257
  const origin = suppliedOrigin === undefined ? null
254
258
  : readReportOrigin({ [REPORT_ORIGIN_ENV]: JSON.stringify(suppliedOrigin) });
@@ -128,6 +128,8 @@ export function handleHealth(
128
128
  universeRoot: safeUniverseRoot(),
129
129
  testUniverse: safeTestUniverse(),
130
130
  bindHost: safeBindHost(bind),
131
+ // W4 — POST /v1/workflows/:name/run understands onlyNode · fromNode+fromRunId · mode (PWA enables its run-mode buttons on this).
132
+ workflowRunModes: true as const,
131
133
  ...(setup?.mode === true
132
134
  ? { setupMode: true as const, setupMissing: setup.missing }
133
135
  : {}),
@@ -21,6 +21,7 @@ import type { TelegramEvent } from '../../workflow-runtime/triggers/telegram-sou
21
21
  import { spawnSync } from 'node:child_process';
22
22
  import { isAbsolute } from 'node:path';
23
23
  import { createProject, listProjects } from '../../project/project-store.js';
24
+ import { handleOutputsGet, type OutputsDeps } from './outputs-route.js';
24
25
  import { compareTokenConstTime } from '../../acp/transport/auth.js';
25
26
  import { ensureAuthToken } from '../../auth/acp-token.js';
26
27
  import type { NexusState } from '../state/state.js';
@@ -42,6 +43,7 @@ import { OPENAI_RELAY_PATH, tryHandleOpenAiRelay } from './openai-relay.js';
42
43
  import { handleHealth, type HealthSetupContext } from './health.js';
43
44
  import { handleTabsList, handleTabDetail, handleNexusSnapshot } from './tabs.js';
44
45
  import { handleSseEvents } from './events.js';
46
+ import { handleInsideEvents, INSIDE_EVENTS_PATH, startInsideEventRelay } from './inside-events.js';
45
47
  import { dispatchIntentPredictionRoute } from './intent-prediction.js';
46
48
  import { handleNotificationAction } from './notification-action.js';
47
49
  import { handleUserIntentEmit, handleUserIntentBatch } from './user-intents.js';
@@ -157,6 +159,7 @@ import {
157
159
  } from './vault-api.js';
158
160
  import { handleBuildsGet, parseBuildsPath } from './builds-api.js';
159
161
  import { handleHarnessAskPost, handleHarnessAskStatusGet, handleHarnessRunEventsGet, handleHarnessRunScreenGet, handleHarnessRunsGet, handleHarnessStopPost } from './harness-api.js';
162
+ import { handleFabricPlans, type FabricPlansRouteOpts } from './fabric-plans.js';
160
163
  import { dispatchPersonaRoute } from './personas.js';
161
164
  import { handleMe } from './operator.js';
162
165
  import { handleOpsApi } from './ops-api.js';
@@ -178,6 +181,7 @@ import { handleChannelBotsGet, handleChannelBotSet } from './setup-channel-bot.j
178
181
  import { handleLlmRoutePredict } from './llm-route-predict.js';
179
182
  import type { MissionRouter } from '../../llm/mission-router.js';
180
183
  import { handleContextFetchUrl } from './context-url.js';
184
+ import { contextNow } from '../../context-bus/context-now.js';
181
185
  import type { IntentPredictionService } from '../../intent-prediction/index.js';
182
186
  import type { NotificationActionLoopback } from '../../web-push/notification-action-loopback.js';
183
187
  import { handlePlatforms } from './platforms.js';
@@ -331,7 +335,7 @@ import {
331
335
  handleTasksList,
332
336
  handleTaskDetail,
333
337
  } from './tasks-scheduler.js';
334
- import { handleTaskCardsGet } from './task-cards-api.js';
338
+ import { handleTaskCardsGet, handleTaskCardsWishPost } from './task-cards-api.js';
335
339
  import { handleTaskCreatePost, handleTaskApprovePost } from './tasks-create.js';
336
340
  import { matchIngestAuthorization } from './ingest-token.js';
337
341
  import {
@@ -340,6 +344,8 @@ import {
340
344
  handleWorkflowApprovalsPending,
341
345
  handleWorkflowDelete,
342
346
  handleWorkflowGet,
347
+ handleWorkflowHistoryList,
348
+ handleWorkflowHistoryVersionGet,
343
349
  handleWorkflowPut,
344
350
  handleWorkflowRunGet,
345
351
  handleWorkflowRunsList,
@@ -461,8 +467,11 @@ export function probeNexusHttpPort(
461
467
  export type NexusWsBridgeInit = Omit<WsBridgeOpts, 'hostname' | 'port'>;
462
468
 
463
469
  export interface NexusHttpServerOpts {
470
+ /** Optional fabric-plan ledger and decomposition seam; production uses the instance root and existing fabric decomposer. */
471
+ fabricPlans?: FabricPlansRouteOpts;
464
472
  /** Optional installer state root for isolated API consumers and tests. */
465
473
  pluginStateRoot?: string;
474
+ outputs?: OutputsDeps;
466
475
  execRequests?: ExecRequestRunner;
467
476
  seatRequests?: SeatRequestsDeps;
468
477
  consultRequests?: ConsultRequestsDeps;
@@ -790,11 +799,13 @@ export function startNexusHttpServer(opts: NexusHttpServerOpts): NexusHttpServer
790
799
  }
791
800
 
792
801
  const url = `http://${hostname}:${resolvedPort}`;
802
+ const stopInsideRelay = startInsideEventRelay();
793
803
  return {
794
804
  port: resolvedPort,
795
805
  hostname,
796
806
  url,
797
807
  stop() {
808
+ stopInsideRelay();
798
809
  try { server!.stop(true); } catch { /* idempotent */ }
799
810
  setInProcessOutbound(null);
800
811
  },
@@ -984,6 +995,11 @@ export async function routeRequest(
984
995
  }
985
996
  }
986
997
 
998
+ if (pathname === INSIDE_EVENTS_PATH) {
999
+ if (!opts.metaApi || !checkAuth(req, opts.metaApi)) return jsonResponse({ error: 'unauthorized' }, 401);
1000
+ return handleInsideEvents(req);
1001
+ }
1002
+
987
1003
  if (pathname === LIVE_SHIPPED_PATH) {
988
1004
  return handleLiveShipped(req, { authorize: (request) => !!opts.metaApi && checkAuth(request, opts.metaApi) });
989
1005
  }
@@ -1312,11 +1328,21 @@ export async function routeRequest(
1312
1328
  return handleGraphsValidatePost(req, opts.metaApi);
1313
1329
  }
1314
1330
 
1331
+ if (pathname === '/v1/fabric/decompose' || pathname.startsWith('/v1/fabric/plans/')) {
1332
+ if (!opts.metaApi || !checkAuth(req, opts.metaApi)) return jsonResponse({ error: 'unauthorized' }, 401);
1333
+ return handleFabricPlans(req, opts.fabricPlans);
1334
+ }
1335
+
1315
1336
  if (pathname === '/v1/projects' && (method === 'GET' || method === 'POST')) {
1316
1337
  if (!opts.metaApi || !checkAuth(req, opts.metaApi)) return jsonResponse({ error: 'unauthorized' }, 401);
1317
1338
  return method === 'GET' ? handleProjectsGet() : handleProjectsPost(req);
1318
1339
  }
1319
1340
 
1341
+ if (method === 'GET' && pathname === '/v1/outputs') {
1342
+ if (!opts.metaApi || !checkAuth(req, opts.metaApi)) return jsonResponse({ error: 'unauthorized' }, 401);
1343
+ return handleOutputsGet(req, opts.outputs);
1344
+ }
1345
+
1320
1346
  if (pathname === '/v1/config/chat-fast-path' && (method === 'GET' || method === 'PUT')) {
1321
1347
  if (!opts.metaApi || !checkAuth(req, opts.metaApi)) return jsonResponse({ error: 'unauthorized' }, 401);
1322
1348
  return handleChatFastPathConfig(req);
@@ -1328,6 +1354,19 @@ export async function routeRequest(
1328
1354
  return (opts.usageHandler ?? handleUsageGet)();
1329
1355
  }
1330
1356
 
1357
+ // SK2 (PWA) list — GET must be routed before the non-GET block below; the original route sat inside it,
1358
+ // so the PWA banner's GET always fell through to «not-found» (found by the DEMO-RUNa rehearsal · 10-03).
1359
+ if (method === 'GET' && pathname === '/v1/skills/problems') {
1360
+ if (!opts.metaApi) return jsonResponse({ error: 'meta-api-not-wired' }, 503);
1361
+ const { handleSkillProblems } = await import('./skill-problems.js');
1362
+ return handleSkillProblems(req, opts.metaApi);
1363
+ }
1364
+
1365
+ if (method === 'GET' && pathname === '/v1/persona-presets') {
1366
+ if (!opts.metaApi || !checkAuth(req, opts.metaApi)) return jsonResponse({ error: 'unauthorized' }, 401);
1367
+ return dispatchPersonaRoute(req, pathname) as Promise<Response>;
1368
+ }
1369
+
1331
1370
  // Mutation routes (PR ι) — POST/PATCH/DELETE on /v1/nexus/tabs[/:id[/action]].
1332
1371
  // Templates POST handled here too (PR κ).
1333
1372
  // Config / secrets PUT/POST/DELETE here too (PR μ).
@@ -1357,6 +1396,10 @@ export async function routeRequest(
1357
1396
  const mutated = await handleGraphsMutation(pathname, req);
1358
1397
  if (mutated) return mutated;
1359
1398
  }
1399
+ if (method === 'POST' && pathname === '/v1/task-cards/wish') {
1400
+ if (!opts.metaApi || !checkAuth(req, opts.metaApi)) return jsonResponse({ error: 'unauthorized' }, 401);
1401
+ return handleTaskCardsWishPost(req);
1402
+ }
1360
1403
  if (method === 'POST' && pathname === '/v1/tasks') {
1361
1404
  if (!opts.metaApi) return jsonResponse({ error: 'meta-api-not-wired' }, 503);
1362
1405
  return handleTaskCreatePost(req, opts.metaApi);
@@ -1613,10 +1656,10 @@ export async function routeRequest(
1613
1656
  if (!opts.metaApi || !checkAuth(req, opts.metaApi)) return jsonResponse({ error: 'unauthorized' }, 401);
1614
1657
  return pathname === '/v1/setup/child-llm' ? handleChildLlmSet(req) : handleAnswerPrioritySet(req);
1615
1658
  }
1616
- // PWA `/settings` Phase 3 (2026-05-19) — persona description PATCH.
1617
- // dispatchPersonaRoute 가 PATCH 분기를 자체 처리. GET sibling 은
1618
- // 아래 GET-only 블록의 기존 /v1/personas 핸들러.
1619
- if (pathname.startsWith('/v1/personas/') && method === 'PATCH') {
1659
+ // Persona creation and editing require owner auth before parsing a write body.
1660
+ if ((method === 'POST' && pathname === '/v1/personas')
1661
+ || (method === 'PATCH' && pathname.startsWith('/v1/personas/'))) {
1662
+ if (!opts.metaApi || !checkAuth(req, opts.metaApi)) return jsonResponse({ error: 'unauthorized' }, 401);
1620
1663
  const result = await dispatchPersonaRoute(req, pathname);
1621
1664
  if (result) return result;
1622
1665
  }
@@ -2613,7 +2656,7 @@ export async function routeRequest(
2613
2656
  catch { return jsonResponse({ error: 'bad_request' }, 400); }
2614
2657
  return handleScheduleDetail(req, id, opts.metaApi);
2615
2658
  }
2616
- if (pathname === '/v1/task-cards' || /^\/v1\/task-cards\/[^/]+$/.test(pathname)) {
2659
+ if (method === 'GET' && (pathname === '/v1/task-cards' || /^\/v1\/task-cards\/[^/]+$/.test(pathname))) {
2617
2660
  return handleTaskCardsGet(pathname);
2618
2661
  }
2619
2662
  if (pathname === '/v1/tasks') {
@@ -2706,11 +2749,23 @@ export async function routeRequest(
2706
2749
  }
2707
2750
  if (pathname.startsWith('/v1/workflows/')) {
2708
2751
  if (!opts.metaApi) return jsonResponse({ error: 'meta-api-not-wired' }, 503);
2709
- const wfName = decodeURIComponent(pathname.slice('/v1/workflows/'.length));
2752
+ const segments = pathname.slice('/v1/workflows/'.length).split('/');
2753
+ let wfName: string;
2754
+ try { wfName = decodeURIComponent(segments[0] ?? ''); }
2755
+ catch { return jsonResponse({ error: 'bad_request', reason: 'invalid workflow name' }, 400); }
2710
2756
  if (!wfName || wfName.includes('/') || wfName.includes('\\') || wfName.includes('..')) {
2711
2757
  return jsonResponse({ error: 'bad_request', reason: 'invalid workflow name' }, 400);
2712
2758
  }
2713
- return handleWorkflowGet(req, wfName, opts.metaApi);
2759
+ if (segments.length === 2 && segments[1] === 'history') {
2760
+ return handleWorkflowHistoryList(req, wfName, opts.metaApi);
2761
+ }
2762
+ if (segments.length === 3 && segments[1] === 'history') {
2763
+ let id: string;
2764
+ try { id = decodeURIComponent(segments[2] ?? ''); }
2765
+ catch { return jsonResponse({ error: 'bad_request', reason: 'invalid workflow history version id' }, 400); }
2766
+ return handleWorkflowHistoryVersionGet(req, wfName, id, opts.metaApi);
2767
+ }
2768
+ if (segments.length === 1) return handleWorkflowGet(req, wfName, opts.metaApi);
2714
2769
  }
2715
2770
  if (pathname.startsWith('/v1/nexus/templates/')) {
2716
2771
  const name = pathname.slice('/v1/nexus/templates/'.length);
@@ -2775,6 +2830,10 @@ export async function routeRequest(
2775
2830
  const result = await dispatchPersonaRoute(req, pathname);
2776
2831
  if (result) return result;
2777
2832
  }
2833
+ if (pathname === '/v1/context/now') {
2834
+ if (!opts.metaApi || !checkAuth(req, opts.metaApi)) return jsonResponse({ error: 'unauthorized' }, 401);
2835
+ return jsonResponse(contextNow({ ...(url.searchParams.has('topic') ? { topic: url.searchParams.get('topic') ?? '' } : {}) }));
2836
+ }
2778
2837
  // §6.3 (2026-05-09) — context URL fetch (showroom).
2779
2838
  // POST /v1/context/fetch-url
2780
2839
  if (pathname === '/v1/context/fetch-url') {