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.
- package/apps/pwa/out/404/index.html +1 -1
- package/apps/pwa/out/404.html +1 -1
- package/apps/pwa/out/_next/static/-6XrAoD3eU7NyMHAE4xPS/_buildManifest.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1147-466ec15afacc1a65.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1159-0c5ef8bc21cb6afb.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1394-ee3795b112907122.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1452.93700483b9d4fc61.js +9 -0
- package/apps/pwa/out/_next/static/chunks/{6062-73e68343a9814f6a.js → 1829-b453a1b22d3999bb.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/2176-c379e3ebce874151.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2426.8c6ee0c668d53def.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3170-7ec60a56fa0e4728.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3278-ae6ef084769f6195.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3454-988a53dac60a1763.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3638-aa80b4641ea439db.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3735-fe3402553ac1c9c6.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3869-3cd46526879f454c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/390.c373e31b3b9d0c41.js +5 -0
- package/apps/pwa/out/_next/static/chunks/3992-2e522a8ac5f2afde.js +25 -0
- package/apps/pwa/out/_next/static/chunks/4215-c9d91dd644ec1719.js +1 -0
- package/apps/pwa/out/_next/static/chunks/4508-5d0161d1e724d735.js +1 -0
- package/apps/pwa/out/_next/static/chunks/4685-c3c1c625b71accd1.js +1 -0
- package/apps/pwa/out/_next/static/chunks/4733-623a79345b171e1c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/4883.3bd969ea1d3aaaff.js +2 -0
- package/apps/pwa/out/_next/static/chunks/5532.6899a12958a89b72.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{8067-87ce253ec2f23697.js → 5845-e6c003ce8d5fd36a.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/5978-b27004c677119115.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{8046cadf-211ca3c0e00f2b72.js → 5cd7e3a9-404fd6b8d0ecd44c.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/6048-4c5c33579bc4ef78.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6303-422dbf0f67c72aac.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6751-bb3595948b2e311b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7274-19b7279f18b47ab3.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7277-0b2fc7c16ba2d64b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{4323.c5dfb6f503304775.js → 7334.a6679d9168f37aa8.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/7551-a0e0707b79164ddd.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7758-0b018a9e4fc56200.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7777-79f845045aa1ed86.js +1 -0
- package/apps/pwa/out/_next/static/chunks/79f8be9e-957d68913b590b08.js +1 -0
- package/apps/pwa/out/_next/static/chunks/8025-cc24ee5d8f2fb6f8.js +1 -0
- package/apps/pwa/out/_next/static/chunks/8039-df92e08fede5de8f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/8206-c6684dcde12be721.js +1 -0
- package/apps/pwa/out/_next/static/chunks/8421-1c4acfb1395a0edf.js +1 -0
- package/apps/pwa/out/_next/static/chunks/8605-0259994816604c49.js +1 -0
- package/apps/pwa/out/_next/static/chunks/8725.bf46bb1395dd0fa2.js +1 -0
- package/apps/pwa/out/_next/static/chunks/8734-252d511cd276c0dc.js +1 -0
- package/apps/pwa/out/_next/static/chunks/8834-ca1cb09c1cb1a6bf.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{2415.ed6428ff334c7ce2.js → 9269.d2a4795bc6812717.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/9538-2816b90923606459.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9656-c1540088f5859c80.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9906-482c6619b3fdda20.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9920-5cfdc5e8fd209825.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/_not-found/page-d16993889b125c42.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/approvals/page-cb169620945d1952.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/autopilot/page-cefe8169e36cf62a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/board/page-d2e35228bc497119.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/botlab/{page-54b32bd27726588d.js → page-5c05b0da4bc1392c.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/bots/page-e0ccdb576812b523.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/chat/page-813c4a52c9d05ca8.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/consult/page-4731f2c215358937.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/control/page-a022b257950f39e6.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/design-check/page-a2ffc717e04b8b0a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/editor/page-b59ee4e70fc18fcf.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/exec/page-a67e11ba962337b5.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/field/page-c172dabd796eb7a3.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/healthz/route-d16993889b125c42.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/inside/page-1efd0cb9e0ed9d13.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/intake/page-d5dc7ff69a37b4cf.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/layout-e71c84189e8c683e.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/live/page-1d6a533ce5a6efcb.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/market/page-dfca9b7d2de0b135.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/missions/[id]/page-793fa536b3a6ef37.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/morning/page-6dd3bfbbde2a5c2c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/not-found-490653e8d4cc8852.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/observatory/page-77447356baad75d2.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/ops/checklist/page-29e961191f6057df.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/ops/release/page-c822f55b884d9104.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/ops/seats/page-fa4ccfc432424e52.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/outputs/page-6d604227e1664b71.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/page-9c7e8f744a765daf.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/reflection/page-4048543b4b7ad5e0.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/scheduler/page-4c3a3126abed551a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/sessions/page-64b0aecb1ca75e75.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/settings/devices/page-4292d0149020e8a7.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/settings/page-db14d0be7f1c460c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/setup/done/page-e5d8072cd7cfef73.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/setup/layout-d16993889b125c42.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/setup/page-9547b5cec7cf76bf.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/share/page-e6dcb83265530636.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/showroom/page-45248f08d6aecae5.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/tasks/page-2cddeb9e2aeedc55.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/term/page-e297866051595d81.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/today/page-baba2e047872fb0f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/trace/page-e895da4ec9cac345.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/vault/page-4344faf20216233b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/workflows/chat-ui/page-698bb29f11864b89.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/workflows/page-bd6a6dc1ddc273f2.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/workspace/page-2e9e2fb01c9da1c9.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/worktrees/page-d62ceb13411ebba4.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{2ea96958-e8c7e112de50b067.js → f48170cc-d05d28bf87a43bf4.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/framework-172630e6aa5e2d7f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/main-app-f0fe2d7477845181.js +1 -0
- package/apps/pwa/out/_next/static/chunks/main-fc98ac70b44eccb0.js +1 -0
- package/apps/pwa/out/_next/static/chunks/pages/_app-5bd7f10271f72413.js +1 -0
- package/apps/pwa/out/_next/static/chunks/pages/_error-97d0d85ea05fef9b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/webpack-9e4d02d567b98240.js +1 -0
- package/apps/pwa/out/_next/static/css/128fb7fb670b2fbf.css +1 -0
- package/apps/pwa/out/approvals/index.html +1 -1
- package/apps/pwa/out/approvals/index.txt +23 -23
- package/apps/pwa/out/autopilot/index.html +1 -1
- package/apps/pwa/out/autopilot/index.txt +23 -23
- package/apps/pwa/out/board/index.html +1 -1
- package/apps/pwa/out/board/index.txt +23 -23
- package/apps/pwa/out/botlab/index.html +1 -1
- package/apps/pwa/out/botlab/index.txt +22 -22
- package/apps/pwa/out/bots/index.html +1 -1
- package/apps/pwa/out/bots/index.txt +22 -22
- package/apps/pwa/out/chat/index.html +1 -1
- package/apps/pwa/out/chat/index.txt +22 -22
- package/apps/pwa/out/consult/index.html +1 -1
- package/apps/pwa/out/consult/index.txt +23 -23
- package/apps/pwa/out/control/index.html +1 -1
- package/apps/pwa/out/control/index.txt +23 -23
- package/apps/pwa/out/design-check/index.html +1 -1
- package/apps/pwa/out/design-check/index.txt +23 -23
- package/apps/pwa/out/editor/index.html +1 -1
- package/apps/pwa/out/editor/index.txt +23 -23
- package/apps/pwa/out/exec/index.html +1 -1
- package/apps/pwa/out/exec/index.txt +23 -23
- package/apps/pwa/out/field/index.html +1 -1
- package/apps/pwa/out/field/index.txt +23 -23
- package/apps/pwa/out/healthz +1 -1
- package/apps/pwa/out/index.html +1 -1
- package/apps/pwa/out/index.txt +22 -22
- package/apps/pwa/out/inside/index.html +1 -0
- package/apps/pwa/out/inside/index.txt +31 -0
- package/apps/pwa/out/intake/index.html +1 -1
- package/apps/pwa/out/intake/index.txt +23 -23
- package/apps/pwa/out/live/index.html +1 -1
- package/apps/pwa/out/live/index.txt +23 -23
- package/apps/pwa/out/market/index.html +1 -1
- package/apps/pwa/out/market/index.txt +22 -22
- package/apps/pwa/out/missions/placeholder/index.html +1 -1
- package/apps/pwa/out/missions/placeholder/index.txt +22 -22
- package/apps/pwa/out/morning/index.html +1 -1
- package/apps/pwa/out/morning/index.txt +23 -23
- package/apps/pwa/out/observatory/index.html +1 -1
- package/apps/pwa/out/observatory/index.txt +23 -23
- package/apps/pwa/out/ops/checklist/index.html +1 -1
- package/apps/pwa/out/ops/checklist/index.txt +22 -22
- package/apps/pwa/out/ops/release/index.html +1 -1
- package/apps/pwa/out/ops/release/index.txt +22 -22
- package/apps/pwa/out/ops/seats/index.html +1 -1
- package/apps/pwa/out/ops/seats/index.txt +22 -22
- package/apps/pwa/out/outputs/index.html +1 -0
- package/apps/pwa/out/outputs/index.txt +30 -0
- package/apps/pwa/out/reflection/index.html +1 -1
- package/apps/pwa/out/reflection/index.txt +23 -23
- package/apps/pwa/out/scheduler/index.html +1 -1
- package/apps/pwa/out/scheduler/index.txt +23 -23
- package/apps/pwa/out/sessions/index.html +1 -1
- package/apps/pwa/out/sessions/index.txt +22 -22
- package/apps/pwa/out/settings/devices/index.html +1 -1
- package/apps/pwa/out/settings/devices/index.txt +23 -23
- package/apps/pwa/out/settings/index.html +1 -1
- package/apps/pwa/out/settings/index.txt +23 -23
- package/apps/pwa/out/setup/done/index.html +1 -1
- package/apps/pwa/out/setup/done/index.txt +23 -23
- package/apps/pwa/out/setup/index.html +1 -1
- package/apps/pwa/out/setup/index.txt +23 -23
- package/apps/pwa/out/share/index.html +1 -1
- package/apps/pwa/out/share/index.txt +23 -23
- package/apps/pwa/out/showroom/index.html +1 -1
- package/apps/pwa/out/showroom/index.txt +22 -22
- package/apps/pwa/out/tasks/index.html +1 -1
- package/apps/pwa/out/tasks/index.txt +23 -23
- package/apps/pwa/out/term/index.html +1 -1
- package/apps/pwa/out/term/index.txt +23 -24
- package/apps/pwa/out/today/index.html +1 -1
- package/apps/pwa/out/today/index.txt +23 -23
- package/apps/pwa/out/trace/index.html +1 -1
- package/apps/pwa/out/trace/index.txt +23 -23
- package/apps/pwa/out/vault/index.html +1 -1
- package/apps/pwa/out/vault/index.txt +23 -23
- package/apps/pwa/out/workflows/chat-ui/index.html +1 -1
- package/apps/pwa/out/workflows/chat-ui/index.txt +23 -23
- package/apps/pwa/out/workflows/index.html +1 -1
- package/apps/pwa/out/workflows/index.txt +23 -23
- package/apps/pwa/out/workspace/index.html +1 -1
- package/apps/pwa/out/workspace/index.txt +23 -24
- package/apps/pwa/out/worktrees/index.html +1 -1
- package/apps/pwa/out/worktrees/index.txt +23 -23
- package/graphs/context/nightly-condense.yaml +21 -0
- package/graphs/context/recipes.yaml +12 -0
- package/graphs/demo/inside-seed.yaml +20 -0
- package/graphs/demo/recipes.yaml +12 -0
- package/graphs/drafts/draft-cleanup.yaml +19 -0
- package/graphs/drafts/recipes.yaml +23 -0
- package/graphs/intake/intake-daily.yaml +2 -1
- package/graphs/ops/recipes.yaml +3 -0
- package/graphs/ops/secret-exposure.yaml +24 -0
- package/graphs/release/recipes.yaml +3 -0
- package/graphs/release/release-loop.yaml +4 -1
- package/graphs/video/explainer-line.yaml +2 -2
- package/package.json +2 -1
- package/plugins/card-followup/examples/sample-card.png +0 -0
- package/plugins/elanous-hwp/README.md +25 -0
- package/plugins/elanous-hwp/cli.ts +22 -0
- package/plugins/elanous-hwp/converter.ts +237 -0
- package/plugins/elanous-hwp/fixtures/fixed-controls.hwpx +0 -0
- package/plugins/elanous-hwp/fixtures/fixed-table-controls.hwpx +0 -0
- package/plugins/elanous-hwp/fixtures/fixed.hwpx +0 -0
- package/plugins/elanous-hwp/plugin.json +16 -0
- package/plugins/elanous-hwp/plugin.ts +40 -0
- package/scripts/ci-public-export-leak-gate.ts +75 -14
- package/scripts/ci-public-leak-gate.ts +44 -9
- package/scripts/context-hooks/claude-stop.sh +4 -0
- package/scripts/context-hooks/emit.ts +24 -0
- package/scripts/context-hooks/post-tool-use.sh +4 -0
- package/scripts/coord-channel-watch.sh +12 -0
- package/scripts/coord-requests-bridge.ts +143 -0
- package/scripts/field-feed/lib.ts +4 -0
- package/scripts/fleet/node-setup.sh +20 -3
- package/scripts/homebrew-formula-bump.ts +69 -0
- package/scripts/lib/telegram-inject-args.ts +31 -0
- package/scripts/marketing/measure-site-numbers.ts +169 -0
- package/scripts/measure-gate-shards.ts +309 -0
- package/scripts/measure-pod-memory-by-goal.ts +130 -0
- package/scripts/mission-request-judge.ts +31 -1
- package/scripts/morning-report.ts +2 -2
- package/scripts/opportunity-scan.ts +1 -1
- package/scripts/release-loop/auto-approve-node.ts +21 -4
- package/scripts/release-loop/checklist-gate-node.ts +2 -1
- package/scripts/release-loop/cut-branch.ts +84 -0
- package/scripts/release-loop/gate-node.ts +22 -15
- package/scripts/release-loop/mac-smoke-node.ts +229 -0
- package/scripts/release-loop/node-verdict.ts +3 -3
- package/scripts/release-loop/ops-upgrade-node.ts +47 -6
- package/scripts/release-loop/publish-node.ts +4 -1
- package/scripts/release-loop/tui-node-checks.ts +42 -0
- package/scripts/release-loop/tui-sim-node.ts +32 -8
- package/scripts/release-loop/unattended-release.ts +5 -3
- package/scripts/release-loop/version-node.ts +74 -13
- package/scripts/signal-digest-cycle.ts +2 -7
- package/scripts/signal-digest-photo.ts +11 -0
- package/scripts/tech1-public-measure.ts +94 -0
- package/scripts/telegram-inject.ts +14 -6
- package/scripts/test-diet/node.ts +1 -1
- package/scripts/test-diet/remeasure-list.ts +112 -0
- package/scripts/tui-regress.ts +2 -2
- package/scripts/ux/demo-rehearsal.ts +247 -0
- package/scripts/ux/demo-seed.ts +108 -0
- package/scripts/ux/lib/rehearsal-verdict.ts +80 -0
- package/skills/diagram-master/SKILL.md +366 -0
- package/skills/diagram-master/references/engines/excalidraw/color-palette.md +67 -0
- package/skills/diagram-master/references/engines/excalidraw/element-templates.md +182 -0
- package/skills/diagram-master/references/engines/excalidraw/json-schema.md +71 -0
- package/skills/diagram-master/references/engines/excalidraw/render_excalidraw.py +189 -0
- package/skills/diagram-master/references/engines/excalidraw/render_template.html +57 -0
- package/skills/diagram-master/references/engines/matplotlib/matplotlib-patterns.md +235 -0
- package/skills/diagram-master/references/engines/matplotlib/render_matplotlib.py +184 -0
- package/skills/diagram-master/references/engines/mermaid/domain-templates.md +435 -0
- package/skills/diagram-master/references/engines/mermaid/render_mermaid.py +116 -0
- package/skills/diagram-master/references/engines/mermaid/syntax-reference.md +2247 -0
- package/skills/diagram-master/references/engines/nanobannana/render_nanobannana2.py +168 -0
- package/skills/diagram-master/references/engines/svg/color-palette.md +188 -0
- package/skills/diagram-master/references/engines/svg/html-base-template.html +332 -0
- package/skills/diagram-master/references/engines/svg/interactivity-patterns.md +435 -0
- package/skills/diagram-master/references/engines/svg/render_interactive_svg.py +212 -0
- package/skills/diagram-master/references/engines/svg/svg-element-templates.md +349 -0
- package/skills/diagram-master/references/examples/README.md +69 -0
- package/skills/diagram-master/references/examples/ref_grid_architecture.png +0 -0
- package/skills/diagram-master/references/examples/ref_layered_flow.png +0 -0
- package/skills/diagram-master/references/pyproject.toml +16 -0
- package/skills/diagram-master/references/quality-checklist.md +33 -0
- package/skills/diagram-master/references/routing-guide.md +164 -0
- package/skills/diagram-master/references/uv.lock +1356 -0
- package/skills/google-workspace/SKILL.md +33 -0
- package/skills/google-workspace/scripts/gws-safe.sh +177 -0
- package/skills/grill-me/SKILL.md +1 -1
- package/skills/lecture-note-digitizer/SKILL.md +926 -0
- package/skills/lecture-note-digitizer/references/convert_to_pdf.py +30 -0
- package/skills/lecture-note-digitizer/references/extract_slide_diagram.py +73 -0
- package/skills/lecture-note-digitizer/references/html-template.md +167 -0
- package/skills/lecture-note-digitizer/references/katex-style-guide.md +165 -0
- package/skills/omni-crawl/SKILL.md +21 -11
- package/skills/omni-crawl/scripts/main.ts +6 -6
- package/skills/omni-crawl/src/router.ts +3 -3
- package/skills/omni-digest/SKILL.md +17 -9
- package/skills/omni-digest/digest.md +2 -2
- package/skills/omni-digest/src/fetch.ts +30 -3
- package/skills/pitch-deck/SKILL.md +2 -2
- package/skills/pitch-deck/template.html +2 -2
- package/skills/youtube-master/SKILL.md +163 -0
- package/skills/youtube-master/package-lock.json +558 -0
- package/skills/youtube-master/package.json +13 -0
- package/skills/youtube-master/references/study-note-template.md +124 -0
- package/skills/youtube-master/scripts/main.ts +435 -0
- package/skills/youtube-master/scripts/transcribe-local.ts +24 -0
- package/skills/youtube-master/src/audio.ts +63 -0
- package/skills/youtube-master/src/domain-staging.ts +50 -0
- package/skills/youtube-master/src/env.ts +36 -0
- package/skills/youtube-master/src/obsidian.ts +155 -0
- package/skills/youtube-master/src/router.ts +110 -0
- package/skills/youtube-master/src/stt.ts +199 -0
- package/skills/youtube-master/src/study-note.ts +175 -0
- package/skills/youtube-master/src/summarize.ts +358 -0
- package/skills/youtube-master/src/transcript.ts +76 -0
- package/skills/youtube-master/src/types.ts +91 -0
- package/skills/youtube-master/src/util.ts +93 -0
- package/skills/youtube-master/src/youtube.ts +70 -0
- package/skills/youtube-master/tsconfig.json +13 -0
- package/src/acp/server.ts +5 -2
- package/src/agent-mission/driver.ts +215 -23
- package/src/agent-mission/pty-decision.ts +71 -0
- package/src/agent-mission/review-loop.ts +30 -0
- package/src/autopilot/build/llm-conflict-merge.ts +16 -3
- package/src/autopilot/pty-control-loop.ts +4 -1
- package/src/autopilot/tool-registry.ts +2 -0
- package/src/boot/daemon-prompt-turn.ts +5 -0
- package/src/boot/daemon-runtime.ts +9 -3
- package/src/boot/daemon-tools/web-search.ts +3 -0
- package/src/card-followup/core.ts +109 -0
- package/src/chat/index.ts +2 -0
- package/src/cli/drive-input-jail.ts +101 -0
- package/src/cli/hooks-cli.ts +17 -3
- package/src/cli/make-cli.ts +43 -0
- package/src/cli/persona-cli.ts +98 -9
- package/src/cli/plugin-cli.ts +31 -22
- package/src/cli/pod-cli.ts +36 -9
- package/src/cli/pod-memory-advice.ts +35 -0
- package/src/cli/pr-cli.ts +51 -15
- package/src/cli/pty-drive-cli.ts +41 -7
- package/src/cli/pty-drive-verdict.ts +40 -0
- package/src/cli/release-cli.ts +63 -10
- package/src/cli/setup-cli.ts +43 -1
- package/src/cli/skills-cli.ts +17 -1
- package/src/context-bus/claude-hooks-install.ts +10 -0
- package/src/context-bus/context-now-surfaces.ts +65 -0
- package/src/context-bus/context-now.ts +104 -0
- package/src/context-bus/coord-events.ts +2 -2
- package/src/context-bus/external-events.ts +52 -0
- package/src/context-bus/long-term-memory.ts +108 -0
- package/src/context-bus/nightly-condense.ts +153 -0
- package/src/context-bus/session-events.ts +35 -0
- package/src/dashboard/dashboard-status-lines.ts +2 -0
- package/src/dashboard/index.ts +17 -4
- package/src/dashboard/slash-runtime/dashboard-handlers.ts +31 -1
- package/src/decisions/decision-cards.ts +10 -3
- package/src/decisions/decision-ledger.ts +13 -5
- package/src/discord/sprint21-runtime.ts +5 -1
- package/src/discord-self-message.ts +32 -0
- package/src/discord-slash-wire.ts +5 -1
- package/src/discord.ts +17 -1
- package/src/domains/core-tools.ts +3 -2
- package/src/domains/outbound-alert.ts +105 -32
- package/src/domains/outbound-log-probe.ts +8 -0
- package/src/domains/telegram-kind-route.ts +51 -13
- package/src/exec-requests/default-outputs.ts +25 -0
- package/src/exec-requests/planner.ts +10 -2
- package/src/exec-requests/runner.ts +20 -6
- package/src/exec-requests/store.ts +3 -0
- package/src/execution-loop/launch-gate.ts +109 -0
- package/src/field/field-reel.ts +5 -1
- package/src/field-note/index.ts +201 -0
- package/src/field-note/telegram.ts +142 -0
- package/src/field-note/transcribe.ts +248 -0
- package/src/graph-kinds/registry.ts +3 -3
- package/src/graph-runner/graph-cli.ts +61 -1
- package/src/graph-runner/graph-grow-llm.ts +47 -0
- package/src/graph-runner/graph-grow.ts +50 -0
- package/src/graph-runner/runner.ts +329 -33
- package/src/grok/agent-search.ts +8 -2
- package/src/guardian/secret-exposure-scan.ts +101 -0
- package/src/harness/harness-cli-command.ts +375 -13
- package/src/harness/harness-pod-dispatch.ts +43 -23
- package/src/harness/harness-seams.ts +38 -4
- package/src/harness/harness-stop.ts +23 -4
- package/src/harness/launch-registry.ts +91 -0
- package/src/harness/process-garbage.ts +5 -3
- package/src/hooks/consult-intake.ts +153 -0
- package/src/hooks/dispatch.ts +82 -0
- package/src/hooks/expose.ts +254 -0
- package/src/hooks/github-shadow.ts +108 -0
- package/src/hooks/providers.ts +71 -5
- package/src/hooks/queue.ts +1 -1
- package/src/hooks/receiver.ts +94 -16
- package/src/index.ts +76 -14
- package/src/intake-plane/categorize.ts +18 -46
- package/src/intake-plane/discord-seat-work.ts +38 -2
- package/src/intake-plane/front-route-classifier.ts +33 -39
- package/src/intake-plane/persona-answer.ts +30 -0
- package/src/intake-plane/runtime-callables.ts +8 -1
- package/src/intake-plane/telegram-seat-work.ts +36 -2
- package/src/intake-plane/wish-card.ts +33 -0
- package/src/intake-plane/wish-folder.ts +67 -0
- package/src/intent-gate/gate.ts +30 -10
- package/src/live/detail-switch.ts +5 -0
- package/src/llm/difficulty.ts +57 -0
- package/src/llm/judge-layer.ts +101 -0
- package/src/llm/mission-router.ts +33 -19
- package/src/loops/contract/examples/cmo-seat.loop.yaml +51 -0
- package/src/loops/contract/examples/orchestrator.loop.yaml +57 -0
- package/src/loops/contract/examples/steward.loop.yaml +50 -0
- package/src/loops/contract/loop-agent.schema.json +138 -0
- package/src/loops/contract/validate.ts +64 -0
- package/src/loops/registry.ts +20 -6
- package/src/market/signed-index.ts +4 -0
- package/src/maturity/bot-command-maturity.ts +45 -0
- package/src/maturity/feature-maturity.ts +27 -4
- package/src/model-tier/index.ts +2 -2
- package/src/model-tier/tier-resolver.ts +20 -20
- package/src/model-tier/types.ts +6 -6
- package/src/mss/logging/log-store.ts +15 -0
- package/src/nexus/api/config-model-tier.ts +5 -4
- package/src/nexus/api/fabric-plans.ts +53 -0
- package/src/nexus/api/harness-api.ts +5 -1
- package/src/nexus/api/health.ts +2 -0
- package/src/nexus/api/http-server.ts +67 -8
- package/src/nexus/api/inside-events.ts +226 -0
- package/src/nexus/api/meta-api.ts +21 -8
- package/src/nexus/api/missions.ts +6 -1
- package/src/nexus/api/ops-seats.ts +33 -0
- package/src/nexus/api/outbound-report.ts +40 -7
- package/src/nexus/api/outputs-route.ts +44 -0
- package/src/nexus/api/personas.ts +95 -53
- package/src/nexus/api/seat-requests.ts +44 -2
- package/src/nexus/api/sessions-store.ts +17 -38
- package/src/nexus/api/sub-seat-charters.ts +34 -0
- package/src/nexus/api/tabs-mutations.ts +3 -1
- package/src/nexus/api/task-cards-api.ts +19 -0
- package/src/nexus/api/trace.ts +18 -6
- package/src/nexus/api/workflow-history.ts +88 -0
- package/src/nexus/api/workflow-run-event-bridge.ts +1 -0
- package/src/nexus/api/workflows.ts +132 -6
- package/src/nexus/index.ts +2 -0
- package/src/nexus/kinds/webterm.ts +2 -1
- package/src/nexus/outbound/delivery-ledger.ts +17 -8
- package/src/nexus/outbound/router.ts +8 -3
- package/src/nexus/webterm/pty.ts +6 -2
- package/src/onboarding/cli-auth-status.ts +80 -0
- package/src/onboarding/voice-ai.ts +3 -3
- package/src/org/seat-budget.ts +48 -0
- package/src/org/stall-escalation.ts +63 -0
- package/src/outputs/ledger.ts +120 -0
- package/src/persona/persona-todo.ts +79 -0
- package/src/persona/presets.ts +123 -2
- package/src/persona/team-set.ts +155 -0
- package/src/plugins/install/plugin-install.ts +14 -0
- package/src/plugins/maker/market-bundle.ts +110 -0
- package/src/plugins/maker/plugin-maker.ts +254 -11
- package/src/plugins/maker/wizard-generate.ts +103 -0
- package/src/pod-lease/admission.ts +150 -0
- package/src/pod-lease/dependency-state.ts +85 -0
- package/src/pod-lease/host-lease.ts +127 -0
- package/src/project/project-suggestion.ts +16 -0
- package/src/project/session-context.ts +24 -0
- package/src/release-loop/checklist.ts +17 -5
- package/src/release-loop/feature-store.ts +29 -13
- package/src/release-loop/landed-but-yellow.ts +48 -0
- package/src/release-loop/next-md-merge.ts +58 -0
- package/src/release-loop/release-note.ts +59 -4
- package/src/seat-dispatch/seat-ask.ts +130 -0
- package/src/seat-dispatch/seat-questions.ts +100 -0
- package/src/seat-loop/seat-loop.ts +709 -29
- package/src/seat-loop/seat-report.ts +37 -2
- package/src/self-dev/dev-cli.ts +4 -1
- package/src/self-dev/dev-pipeline.ts +37 -1
- package/src/self-dev/draft-sweep.ts +79 -40
- package/src/self-dev/draft-triage-rules.ts +62 -7
- package/src/self-dev/fabric-plan-core.ts +297 -0
- package/src/self-dev/orchestrate.ts +36 -4
- package/src/self-dev/release-path-guard.ts +62 -0
- package/src/self-dev/shard-aggregate.ts +230 -0
- package/src/self-dev/shard-placement.ts +60 -0
- package/src/self-dev/shard-plan.ts +48 -0
- package/src/self-dev/shard-pod-run.ts +77 -0
- package/src/self-dev/shard-run.ts +105 -0
- package/src/self-implement/budget-gate.ts +29 -12
- package/src/self-implement/gate-baseline.ts +1 -1
- package/src/self-implement/gate-candidate-ranking.ts +60 -0
- package/src/self-implement/gate-cli.ts +40 -1
- package/src/self-implement/gate-scope.ts +44 -13
- package/src/self-implement/graph-variant.ts +171 -0
- package/src/self-implement/harness-policy-gates.ts +1 -1
- package/src/self-implement/headless-elanous-driver.ts +27 -3
- package/src/self-implement/host-regate.ts +22 -1
- package/src/self-implement/importer-test-index.ts +2 -1
- package/src/self-implement/l8-merge-queue.ts +130 -0
- package/src/self-implement/orchestrator.ts +257 -9
- package/src/self-implement/route-consumer-test-index.ts +122 -0
- package/src/self-implement/seams.ts +72 -11
- package/src/self-implement/test-seams.ts +2 -0
- package/src/self-implement/uncommitted-work.ts +59 -0
- package/src/session/index.ts +36 -13
- package/src/skills/gift-install.ts +215 -0
- package/src/skills/tools/web-search.ts +4 -1
- package/src/steward/launch.ts +42 -26
- package/src/steward/steward-cards.ts +17 -9
- package/src/steward/triage.ts +46 -14
- package/src/task-cards/card-cli.ts +25 -1
- package/src/task-orchestrator/mission.ts +5 -0
- package/src/task-orchestrator/store.ts +12 -3
- package/src/task-orchestrator/surfaces/pod-command-job.ts +43 -17
- package/src/task-orchestrator/surfaces/pod-lease.ts +156 -19
- package/src/task-orchestrator/surfaces/pod-pool.ts +127 -26
- package/src/task-orchestrator/surfaces/self-implement-pod.ts +222 -40
- package/src/task-orchestrator/surfaces/self-implement.ts +15 -2
- package/src/task-orchestrator/types.ts +2 -0
- package/src/telegram-card-followup.ts +16 -96
- package/src/telegram-commands.ts +31 -1
- package/src/telegram-project-command.ts +145 -0
- package/src/telegram-report.ts +21 -17
- package/src/telegram.ts +61 -8
- package/src/tool-runtime/self-cognition-runtimes.ts +13 -3
- package/src/user-config.ts +110 -24
- package/src/version/packed-revision.json +1 -1
- package/src/web-search/grok.ts +7 -1
- package/src/web-search/index.ts +28 -1
- package/src/web-search/provider.ts +4 -0
- package/src/web-search/x-intent.ts +5 -0
- package/src/workflow-runtime/executor.ts +277 -47
- package/src/workflow-runtime/index.ts +1 -0
- package/src/workflow-runtime/nodes/subworkflow.ts +60 -0
- package/src/workflow-runtime/plugin-kind-node.ts +1 -1
- package/src/workflow-runtime/schema.ts +79 -4
- package/src/workflow-runtime/types.ts +35 -4
- package/apps/pwa/out/_next/static/2DsiDfDCks44g1cPUMhiW/_buildManifest.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1105-c473ed46272fba79.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1377-1efeffbbac0963ff.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1470.98a6ab61ccb4131c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/216-5acd01cbde4acda7.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2330-c2f07246c8788af1.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2375-cb6debea56cce4fb.js +0 -1
- package/apps/pwa/out/_next/static/chunks/24-e6d28380efab7faf.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2977-e38442e86289f1d3.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2982-2a2df543be3d2e5a.js +0 -25
- package/apps/pwa/out/_next/static/chunks/3403.4bc97b4066945a94.js +0 -5
- package/apps/pwa/out/_next/static/chunks/3615-740dd270764ffa24.js +0 -1
- package/apps/pwa/out/_next/static/chunks/371-4ad6af55dad02ced.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3734-1015fe991eb9b7e7.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4114-3e63117452378807.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5012-a7fe6f3c8b6fe45a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5609-012bb3557211f07e.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5783-ef40ebfc91d55230.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5791-bb82743fa6299562.js +0 -1
- package/apps/pwa/out/_next/static/chunks/62-ff227c3edb8b248b.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6320-baac91d68843a9a6.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6725-68ab7cc0b1faf00d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6998-a654fe5c58271600.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7633-1b3709b0854c9412.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7647.2fcd30d894d5ee30.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7673-2eda1507d38dadb8.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7951-8b03dbb10b24cd06.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7990-e12efba616f46e03.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8142-744998d65d7bb17e.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8195-6fde3d7a39859206.js +0 -10
- package/apps/pwa/out/_next/static/chunks/8619-4365e03a2862830f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8894-b5fb36bab837cd29.js +0 -1
- package/apps/pwa/out/_next/static/chunks/920-f7dceb78f1c585ef.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9454-84d0d5d77446bd92.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9651-3cd291a6fa1370d2.js +0 -1
- package/apps/pwa/out/_next/static/chunks/988-5f92e7ab7ccea3dd.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9989-5582582f06429840.js +0 -1
- package/apps/pwa/out/_next/static/chunks/ae787e4c-f2998de7f1ba72a4.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/_not-found/page-859cea1570b6227a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/approvals/page-d2253d7e58ef1890.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/autopilot/page-5441d4a9ab35e518.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/board/page-d9b12d680922d980.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/bots/page-e268d6d145827a22.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/chat/page-f8116559c7424da7.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/consult/page-1085399fd0f32112.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/control/page-1df686a14f65895a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/design-check/page-54e1f966ab60a4dc.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/editor/page-7ed95f296f5ee8e9.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/exec/page-11edac668d77e5c3.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/field/page-59e2b9a22cd5a6d5.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/healthz/route-859cea1570b6227a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/intake/page-2976df21ad74ab48.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/layout-34d211a67f16d510.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/live/page-8ff652d5d950639b.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/market/page-b31610deda76337b.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/missions/[id]/page-6cb0e1bbefe5fb3d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/morning/page-a286a152cf584576.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/not-found-d9237581e7003bcb.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/observatory/page-83274e761643fdd2.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/ops/checklist/page-ceee6cfb1d4e6d68.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/ops/release/page-9c9f8bb3e4a64091.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/ops/seats/page-c17217603ea3426a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/page-efb6177cbf1e8a51.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/reflection/page-d307523703bc4df3.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/scheduler/page-462f4e4bab45ce7d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/sessions/page-8990e96f33af3837.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/settings/devices/page-e168fa1030af0548.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/settings/page-1233e05a4068bc9c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/setup/done/page-13a1840b1fac337a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/setup/layout-859cea1570b6227a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/setup/page-64a29fc80b11ab55.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/share/page-68e787339a16b3dc.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/showroom/page-4fddc90b23feb215.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/tasks/page-886ba8260dc79c79.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/term/page-0f26507a1722e40b.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/today/page-109d4ccd42259c9d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/trace/page-f5c2a4e510726774.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/vault/page-b2e0039416f42522.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/workflows/chat-ui/page-26102fd7350f171e.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/workflows/page-708948bc8a802794.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/workspace/page-5e5611620f78fb0b.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/worktrees/page-139ba5c367bbf60a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/framework-ea806bb57f2b8923.js +0 -1
- package/apps/pwa/out/_next/static/chunks/main-8d2302399c2c8f87.js +0 -1
- package/apps/pwa/out/_next/static/chunks/main-app-202b4e81f33895ea.js +0 -1
- package/apps/pwa/out/_next/static/chunks/pages/_app-b10928c60f0b8488.js +0 -1
- package/apps/pwa/out/_next/static/chunks/pages/_error-689039227d443fab.js +0 -1
- package/apps/pwa/out/_next/static/chunks/webpack-e5bea36f183b25e6.js +0 -1
- package/apps/pwa/out/_next/static/css/43feca5fd387dcbd.css +0 -1
- /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
|
-
|
|
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 {
|
package/src/model-tier/index.ts
CHANGED
|
@@ -7,12 +7,12 @@ export {
|
|
|
7
7
|
MODEL_TIER_LABELS,
|
|
8
8
|
TTS_VOICE_CONTEXTS,
|
|
9
9
|
isModelTier,
|
|
10
|
-
|
|
10
|
+
isModelTierProfile,
|
|
11
11
|
isTtsVoiceContext,
|
|
12
12
|
modelTierRank,
|
|
13
13
|
type BudgetUserConfig,
|
|
14
14
|
type ModelTier,
|
|
15
|
-
type
|
|
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.
|
|
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
|
-
| '
|
|
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.
|
|
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?.
|
|
89
|
+
if (modelTier?.profile) {
|
|
90
90
|
return {
|
|
91
91
|
...STT_TIER_MAP[DEFAULT_MODEL_TIER],
|
|
92
92
|
tier: DEFAULT_MODEL_TIER,
|
|
93
|
-
source: '
|
|
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
|
-
| '
|
|
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
|
-
| '
|
|
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?.
|
|
157
|
-
return { ...TTS_TIER_MAP[DEFAULT_MODEL_TIER], tier: DEFAULT_MODEL_TIER, source: '
|
|
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 →
|
|
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.
|
|
200
|
-
if (modelTier?.
|
|
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: '
|
|
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
|
-
| '
|
|
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 →
|
|
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?.
|
|
276
|
+
if (modelTier?.profile) {
|
|
277
277
|
return {
|
|
278
278
|
...lookupEmbeddingTierSpec(provider, DEFAULT_MODEL_TIER),
|
|
279
279
|
tier: DEFAULT_MODEL_TIER,
|
|
280
|
-
source: '
|
|
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
|
-
| '
|
|
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?.
|
|
340
|
+
if (modelTier?.profile) {
|
|
341
341
|
return {
|
|
342
342
|
...lookupVisionTierSpec(provider, DEFAULT_MODEL_TIER),
|
|
343
343
|
tier: DEFAULT_MODEL_TIER,
|
|
344
|
-
source: '
|
|
344
|
+
source: 'profile',
|
|
345
345
|
provider,
|
|
346
346
|
};
|
|
347
347
|
}
|
package/src/model-tier/types.ts
CHANGED
|
@@ -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
|
-
// ──
|
|
64
|
+
// ── Model tier profile ─────────────────────────────────────────────
|
|
65
65
|
|
|
66
|
-
/** Zero-config baseline (§3.0 of the PLAN) —
|
|
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
|
|
70
|
+
export type ModelTierProfile = 'casual' | 'power' | 'custom';
|
|
71
71
|
|
|
72
|
-
export function
|
|
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
|
-
* →
|
|
115
|
+
* → profile → default). */
|
|
116
116
|
export interface ModelTierUserConfig {
|
|
117
|
-
|
|
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
|
-
|
|
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
|
-
|
|
78
|
-
|
|
79
|
-
|
|
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 =
|
|
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) });
|
package/src/nexus/api/health.ts
CHANGED
|
@@ -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
|
-
//
|
|
1617
|
-
|
|
1618
|
-
|
|
1619
|
-
|
|
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
|
|
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
|
-
|
|
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') {
|