@circuitwall/jarela 2.2.1 → 2.3.0
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/.next/standalone/.next/BUILD_ID +1 -1
- package/.next/standalone/.next/app-path-routes-manifest.json +6 -5
- package/.next/standalone/.next/build-manifest.json +2 -2
- package/.next/standalone/.next/prerender-manifest.json +3 -3
- package/.next/standalone/.next/routes-manifest.json +8 -0
- package/.next/standalone/.next/server/app/_global-error/page.js +68 -68
- package/.next/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/_global-error.html +1 -1
- package/.next/standalone/.next/server/app/_global-error.rsc +1 -1
- package/.next/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_not-found/page.js +76 -76
- package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/_not-found.html +2 -2
- package/.next/standalone/.next/server/app/_not-found.rsc +2 -2
- package/.next/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/api/v1/access/[identity]/route.js +93 -93
- package/.next/standalone/.next/server/app/api/v1/access/route.js +169 -169
- package/.next/standalone/.next/server/app/api/v1/agents/[id]/compact/route.js +82 -56
- package/.next/standalone/.next/server/app/api/v1/agents/[id]/compact/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/v1/agents/[id]/display-filters/route.js +122 -122
- package/.next/standalone/.next/server/app/api/v1/agents/[id]/route.js +100 -100
- package/.next/standalone/.next/server/app/api/v1/agents/[id]/thread/route.js +753 -753
- package/.next/standalone/.next/server/app/api/v1/agents/route.js +65 -65
- package/.next/standalone/.next/server/app/api/v1/allowed-sites/[hostname]/route.js +364 -364
- package/.next/standalone/.next/server/app/api/v1/allowed-sites/route.js +802 -802
- package/.next/standalone/.next/server/app/api/v1/artifacts/lifecycle/route.js +2 -2
- package/.next/standalone/.next/server/app/api/v1/attachments/files/route.js +49 -49
- package/.next/standalone/.next/server/app/api/v1/attachments/images/route.js +910 -910
- package/.next/standalone/.next/server/app/api/v1/bridges/[id]/chats/route.js +589 -16
- package/.next/standalone/.next/server/app/api/v1/bridges/[id]/chats/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/v1/bridges/[id]/ignores/[remote_jid]/route.js +23 -23
- package/.next/standalone/.next/server/app/api/v1/bridges/[id]/ignores/route.js +30 -30
- package/.next/standalone/.next/server/app/api/v1/bridges/[id]/lookup/route.js +703 -130
- package/.next/standalone/.next/server/app/api/v1/bridges/[id]/lookup/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/v1/bridges/[id]/pair/route.js +708 -135
- package/.next/standalone/.next/server/app/api/v1/bridges/[id]/pair/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/v1/bridges/[id]/route.js +802 -229
- package/.next/standalone/.next/server/app/api/v1/bridges/[id]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/v1/bridges/[id]/routes/[route_id]/route.js +739 -739
- package/.next/standalone/.next/server/app/api/v1/bridges/[id]/routes/route.js +1035 -1035
- package/.next/standalone/.next/server/app/api/v1/bridges/[id]/status/route.js +679 -106
- package/.next/standalone/.next/server/app/api/v1/bridges/[id]/status/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/v1/bridges/kinds/route.js +804 -804
- package/.next/standalone/.next/server/app/api/v1/bridges/route.js +700 -700
- package/.next/standalone/.next/server/app/api/v1/builtin-tools/route.js +9 -9
- package/.next/standalone/.next/server/app/api/v1/builtin-tools/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/v1/config/route.js +85 -85
- package/.next/standalone/.next/server/app/api/v1/credentials/[id]/route.js +709 -709
- package/.next/standalone/.next/server/app/api/v1/credentials/[id]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/v1/credentials/route.js +2 -2
- package/.next/standalone/.next/server/app/api/v1/credentials/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/v1/dashboard/currency/route.js +10 -10
- package/.next/standalone/.next/server/app/api/v1/dashboard/metrics/route.js +784 -784
- package/.next/standalone/.next/server/app/api/v1/dashboard/pricing/route.js +23 -23
- package/.next/standalone/.next/server/app/api/v1/dashboard/pricing-task/route.js +86 -86
- package/.next/standalone/.next/server/app/api/v1/dashboard/pricing-task/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/v1/delegations/codex/[job_id]/route.js +57 -57
- package/.next/standalone/.next/server/app/api/v1/delegations/codex/[job_id]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/v1/documents/search/route.js +523 -523
- package/.next/standalone/.next/server/app/api/v1/documents/settings/route.js +44 -44
- package/.next/standalone/.next/server/app/api/v1/documents/sources/[id]/reindex/route.js +65 -65
- package/.next/standalone/.next/server/app/api/v1/documents/sources/[id]/reindex/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/v1/documents/sources/[id]/route.js +122 -122
- package/.next/standalone/.next/server/app/api/v1/documents/sources/[id]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/v1/documents/sources/route.js +37 -37
- package/.next/standalone/.next/server/app/api/v1/documents/sources/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/v1/env/route.js +9 -9
- package/.next/standalone/.next/server/app/api/v1/env-sync/allowlist/route.js +368 -368
- package/.next/standalone/.next/server/app/api/v1/env-sync/route.js +44 -44
- package/.next/standalone/.next/server/app/api/v1/events/route.js +751 -178
- package/.next/standalone/.next/server/app/api/v1/events/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/v1/events/test/route.js +77 -77
- package/.next/standalone/.next/server/app/api/v1/extension/agents/route.js +763 -763
- package/.next/standalone/.next/server/app/api/v1/extension/agents/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/v1/extension/browser/activate/route.js +44 -44
- package/.next/standalone/.next/server/app/api/v1/extension/browser/foreground/route.js +9 -9
- package/.next/standalone/.next/server/app/api/v1/extension/browser/history/route.js +65 -65
- package/.next/standalone/.next/server/app/api/v1/extension/browser/poll/route.js +34 -34
- package/.next/standalone/.next/server/app/api/v1/extension/browser/progress/route.js +204 -204
- package/.next/standalone/.next/server/app/api/v1/extension/browser/result/route.js +133 -133
- package/.next/standalone/.next/server/app/api/v1/extension/browser/retry/route.js +106 -106
- package/.next/standalone/.next/server/app/api/v1/extension/browser/status/route.js +114 -114
- package/.next/standalone/.next/server/app/api/v1/extension/browser/tabs/route.js +134 -134
- package/.next/standalone/.next/server/app/api/v1/extension/fill/route.js +690 -690
- package/.next/standalone/.next/server/app/api/v1/extension/fill/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/v1/extension/refine/route.js +93 -93
- package/.next/standalone/.next/server/app/api/v1/extension/refine/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/v1/extension/turn/route.js +9 -9
- package/.next/standalone/.next/server/app/api/v1/extension/turn/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/v1/extensions/route.js +185 -185
- package/.next/standalone/.next/server/app/api/v1/extensions/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/v1/extensions/tools/[name]/config/route.js +171 -171
- package/.next/standalone/.next/server/app/api/v1/extensions/tools/[name]/config/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/v1/extensions/tools/[name]/route.js +396 -396
- package/.next/standalone/.next/server/app/api/v1/extensions/tools/[name]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/v1/extensions/tools/[name]/secrets/route.js +212 -212
- package/.next/standalone/.next/server/app/api/v1/extensions/tools/[name]/secrets/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/v1/files/[name]/route.js +235 -235
- package/.next/standalone/.next/server/app/api/v1/fs/browse/route.js +26 -26
- package/.next/standalone/.next/server/app/api/v1/harnesses/[id]/route.js +221 -221
- package/.next/standalone/.next/server/app/api/v1/harnesses/default/route.js +58 -58
- package/.next/standalone/.next/server/app/api/v1/harnesses/route.js +72 -72
- package/.next/standalone/.next/server/app/api/v1/health/probes/route.js +9 -9
- package/.next/standalone/.next/server/app/api/v1/health/probes/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/v1/health/route.js +772 -772
- package/.next/standalone/.next/server/app/api/v1/integrations/[name]/route.js +133 -133
- package/.next/standalone/.next/server/app/api/v1/integrations/[name]/test/route.js +9 -9
- package/.next/standalone/.next/server/app/api/v1/integrations/[name]/test/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/v1/integrations/gmail/oauth/callback/route.js +363 -363
- package/.next/standalone/.next/server/app/api/v1/integrations/gmail/oauth/start/route.js +233 -233
- package/.next/standalone/.next/server/app/api/v1/integrations/gmail/oauth/status/route.js +682 -682
- package/.next/standalone/.next/server/app/api/v1/integrations/outlook/oauth/callback/route.js +879 -879
- package/.next/standalone/.next/server/app/api/v1/integrations/outlook/oauth/start/route.js +108 -108
- package/.next/standalone/.next/server/app/api/v1/integrations/outlook/oauth/status/route.js +952 -952
- package/.next/standalone/.next/server/app/api/v1/integrations/route.js +216 -216
- package/.next/standalone/.next/server/app/api/v1/lifecycle/adoption/route.js +864 -847
- package/.next/standalone/.next/server/app/api/v1/lifecycle/adoption/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/v1/local-file/route.js +26 -26
- package/.next/standalone/.next/server/app/api/v1/logs/route.js +70 -70
- package/.next/standalone/.next/server/app/api/v1/maps/embed/route.js +72 -72
- package/.next/standalone/.next/server/app/api/v1/mcp-servers/[name]/route.js +979 -979
- package/.next/standalone/.next/server/app/api/v1/mcp-servers/registry/route.js +196 -196
- package/.next/standalone/.next/server/app/api/v1/mcp-servers/route.js +2 -2
- package/.next/standalone/.next/server/app/api/v1/memory/[namespace]/[key]/route.js +381 -381
- package/.next/standalone/.next/server/app/api/v1/memory/policy/route.js +79 -79
- package/.next/standalone/.next/server/app/api/v1/memory/route.js +51 -51
- package/.next/standalone/.next/server/app/api/v1/memory/search/route.js +131 -131
- package/.next/standalone/.next/server/app/api/v1/models/[name]/compact-threads/route.js +374 -369
- package/.next/standalone/.next/server/app/api/v1/models/[name]/compact-threads/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/v1/models/[name]/route.js +143 -143
- package/.next/standalone/.next/server/app/api/v1/models/route.js +543 -543
- package/.next/standalone/.next/server/app/api/v1/packages/catalog/route.js +445 -445
- package/.next/standalone/.next/server/app/api/v1/packages/defaults/[id]/route.js +120 -120
- package/.next/standalone/.next/server/app/api/v1/packages/defaults/[id]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/v1/packages/install/[id]/route.js +234 -234
- package/.next/standalone/.next/server/app/api/v1/packages/install/[id]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/v1/packages/install/route.js +407 -407
- package/.next/standalone/.next/server/app/api/v1/packages/install/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/v1/packages/manifests/[name]/enabled/route.js +37 -37
- package/.next/standalone/.next/server/app/api/v1/packages/manifests/[name]/enabled/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/v1/packages/manifests/[name]/route.js +107 -107
- package/.next/standalone/.next/server/app/api/v1/packages/manifests/[name]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/v1/packages/manifests/route.js +228 -228
- package/.next/standalone/.next/server/app/api/v1/packages/manifests/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/v1/packages/reload/route.js +9 -9
- package/.next/standalone/.next/server/app/api/v1/packages/reload/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/v1/packages/route.js +148 -148
- package/.next/standalone/.next/server/app/api/v1/packages/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/v1/page-capture/route.js +787 -787
- package/.next/standalone/.next/server/app/api/v1/page-capture/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/v1/pending-actions/[id]/approve/route.js +507 -507
- package/.next/standalone/.next/server/app/api/v1/pending-actions/[id]/approve/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/v1/pending-actions/[id]/deny/route.js +181 -181
- package/.next/standalone/.next/server/app/api/v1/pending-actions/[id]/deny/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/v1/pending-actions/route.js +258 -258
- package/.next/standalone/.next/server/app/api/v1/pending-actions/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/v1/profile/location/route.js +30 -30
- package/.next/standalone/.next/server/app/api/v1/profile/route.js +164 -164
- package/.next/standalone/.next/server/app/api/v1/providers/[provider]/models/route.js +44 -44
- package/.next/standalone/.next/server/app/api/v1/providers/[provider]/probe/route.js +9 -9
- package/.next/standalone/.next/server/app/api/v1/providers/github-copilot/auth/route.js +164 -164
- package/.next/standalone/.next/server/app/api/v1/providers/route.js +94 -94
- package/.next/standalone/.next/server/app/api/v1/proxy-config/route.js +450 -450
- package/.next/standalone/.next/server/app/api/v1/redaction/init/route.js +37 -37
- package/.next/standalone/.next/server/app/api/v1/redaction/route.js +58 -58
- package/.next/standalone/.next/server/app/api/v1/scheduled-tasks/[id]/route.js +600 -600
- package/.next/standalone/.next/server/app/api/v1/scheduled-tasks/[id]/run/route.js +44 -44
- package/.next/standalone/.next/server/app/api/v1/scheduled-tasks/[id]/run/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/v1/scheduled-tasks/route.js +732 -732
- package/.next/standalone/.next/server/app/api/v1/security/idle-timeout/route.js +359 -359
- package/.next/standalone/.next/server/app/api/v1/security/pin/route.js +197 -197
- package/.next/standalone/.next/server/app/api/v1/security/state/route.js +51 -51
- package/.next/standalone/.next/server/app/api/v1/security/unlock/route.js +176 -176
- package/.next/standalone/.next/server/app/api/v1/security/verify-pin/route.js +190 -190
- package/.next/standalone/.next/server/app/api/v1/setup/test-key/route.js +26 -26
- package/.next/standalone/.next/server/app/api/v1/skills/[id]/route.js +770 -770
- package/.next/standalone/.next/server/app/api/v1/skills/repos/[id]/route.js +115 -115
- package/.next/standalone/.next/server/app/api/v1/skills/repos/route.js +327 -327
- package/.next/standalone/.next/server/app/api/v1/skills/route.js +870 -870
- package/.next/standalone/.next/server/app/api/v1/system/abort/route.js +838 -808
- package/.next/standalone/.next/server/app/api/v1/system/restart/route.js +177 -177
- package/.next/standalone/.next/server/app/api/v1/system/restart/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/v1/tailscale/route.js +164 -164
- package/.next/standalone/.next/server/app/api/v1/tasks/[agent_id]/route.js +115 -115
- package/.next/standalone/.next/server/app/api/v1/tasks/route.js +23 -23
- package/.next/standalone/.next/server/app/api/v1/threads/[thread_id]/activity/route.js +1429 -0
- package/.next/standalone/.next/server/app/api/v1/threads/[thread_id]/activity/route.js.nft.json +1 -0
- package/.next/standalone/.next/server/app/api/v1/threads/[thread_id]/activity/route_client-reference-manifest.js +1 -0
- package/.next/standalone/.next/server/app/api/v1/threads/[thread_id]/context-pin/route.js +635 -634
- package/.next/standalone/.next/server/app/api/v1/threads/[thread_id]/context-pin/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/v1/threads/[thread_id]/route.js +53 -439
- package/.next/standalone/.next/server/app/api/v1/threads/[thread_id]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/v1/threads/[thread_id]/run/route.js +172 -172
- package/.next/standalone/.next/server/app/api/v1/threads/[thread_id]/run/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/v1/threads/route.js +908 -908
- package/.next/standalone/.next/server/app/api/v1/tools/route.js +2 -2
- package/.next/standalone/.next/server/app/api/v1/tools/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/v1/update/apply/route.js +17 -17
- package/.next/standalone/.next/server/app/api/v1/update/apply/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/v1/update/route.js +570 -570
- package/.next/standalone/.next/server/app/api/v1/voice/transcribe/route.js +224 -224
- package/.next/standalone/.next/server/app/api/v1/voice/tts/route.js +975 -975
- package/.next/standalone/.next/server/app/api/v1/watchers/[id]/route.js +23 -23
- package/.next/standalone/.next/server/app/api/v1/watchers/[id]/run/route.js +72 -72
- package/.next/standalone/.next/server/app/api/v1/watchers/[id]/run/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/v1/watchers/reaction-scripts/route.js +128 -128
- package/.next/standalone/.next/server/app/api/v1/watchers/route.js +164 -164
- package/.next/standalone/.next/server/app/api/v1/watchers/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/icon.svg/route.js +62 -62
- package/.next/standalone/.next/server/app/manifest.webmanifest/route.js +436 -436
- package/.next/standalone/.next/server/app/page.js +1243 -854
- package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/setup/page.js +91 -91
- package/.next/standalone/.next/server/app/setup/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app-paths-manifest.json +6 -5
- package/.next/standalone/.next/server/chunks/{424.js → 1388.js} +335 -986
- package/.next/standalone/.next/server/chunks/1433.js +1 -1
- package/.next/standalone/.next/server/chunks/1638.js +1 -2
- package/.next/standalone/.next/server/chunks/1738.js +1 -1
- package/.next/standalone/.next/server/chunks/210.js +6 -6
- package/.next/standalone/.next/server/chunks/2151.js +31 -1
- package/.next/standalone/.next/server/chunks/2207.js +1 -0
- package/.next/standalone/.next/server/chunks/2471.js +28 -28
- package/.next/standalone/.next/server/chunks/2504.js +1 -1
- package/.next/standalone/.next/server/chunks/2695.js +17 -17
- package/.next/standalone/.next/server/chunks/3042.js +14 -8
- package/.next/standalone/.next/server/chunks/3399.js +1 -1
- package/.next/standalone/.next/server/chunks/3566.js +1 -1
- package/.next/standalone/.next/server/chunks/4189.js +946 -0
- package/.next/standalone/.next/server/chunks/{9590.js → 423.js} +8 -3
- package/.next/standalone/.next/server/chunks/4433.js +146 -146
- package/.next/standalone/.next/server/chunks/4508.js +1 -1
- package/.next/standalone/.next/server/chunks/4588.js +1 -0
- package/.next/standalone/.next/server/chunks/46.js +5 -0
- package/.next/standalone/.next/server/chunks/466.js +12 -0
- package/.next/standalone/.next/server/chunks/4868.js +206 -206
- package/.next/standalone/.next/server/chunks/4992.js +13 -0
- package/.next/standalone/.next/server/chunks/5120.js +963 -0
- package/.next/standalone/.next/server/chunks/5701.js +1 -1
- package/.next/standalone/.next/server/chunks/5900.js +1 -1
- package/.next/standalone/.next/server/chunks/6210.js +1 -0
- package/.next/standalone/.next/server/chunks/6213.js +1 -1
- package/.next/standalone/.next/server/chunks/6649.js +2 -2
- package/.next/standalone/.next/server/chunks/6703.js +3 -3
- package/.next/standalone/.next/server/chunks/7445.js +1 -0
- package/.next/standalone/.next/server/chunks/8067.js +12 -0
- package/.next/standalone/.next/server/chunks/8461.js +14 -9
- package/.next/standalone/.next/server/chunks/8558.js +1 -1
- package/.next/standalone/.next/server/chunks/8724.js +1 -1
- package/.next/standalone/.next/server/chunks/8849.js +91 -91
- package/.next/standalone/.next/server/chunks/9032.js +6 -5
- package/.next/standalone/.next/server/chunks/{2563.js → 9164.js} +33173 -31461
- package/.next/standalone/.next/server/chunks/9237.js +396 -396
- package/.next/standalone/.next/server/chunks/{9640.js → 9304.js} +1628 -570
- package/.next/standalone/.next/server/chunks/9406.js +1 -1
- package/.next/standalone/.next/server/chunks/9824.js +98 -98
- package/.next/standalone/.next/server/chunks/9826.js +1 -0
- package/.next/standalone/.next/server/middleware-build-manifest.js +2 -2
- package/.next/standalone/.next/server/middleware.js +415 -397
- package/.next/standalone/.next/server/pages/404.html +2 -2
- package/.next/standalone/.next/server/pages/500.html +1 -1
- package/.next/standalone/.next/server/preview-props.json +3 -3
- package/.next/standalone/.next/server/server-reference-manifest.json +1 -1
- package/.next/standalone/.next/static/chunks/{1395-a340fb0a345382a4.js → 1395-e4a99912b8f83044.js} +13 -1
- package/.next/standalone/.next/static/chunks/app/_global-error/{page-36cb8b428b38b26a.js → page-6fc5f8e744c81802.js} +1 -1
- package/.next/standalone/.next/static/chunks/app/api/v1/access/[identity]/{route-36cb8b428b38b26a.js → route-6fc5f8e744c81802.js} +1 -1
- package/.next/standalone/.next/static/chunks/app/api/v1/access/{route-36cb8b428b38b26a.js → route-6fc5f8e744c81802.js} +1 -1
- package/.next/standalone/.next/static/chunks/app/api/v1/agents/[id]/compact/{route-36cb8b428b38b26a.js → route-6fc5f8e744c81802.js} +1 -1
- package/.next/standalone/.next/static/chunks/app/api/v1/agents/[id]/display-filters/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/agents/[id]/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/agents/[id]/thread/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/agents/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/allowed-sites/[hostname]/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/allowed-sites/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/artifacts/lifecycle/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/attachments/files/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/attachments/images/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/bridges/[id]/chats/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/bridges/[id]/ignores/[remote_jid]/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/bridges/[id]/ignores/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/bridges/[id]/lookup/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/bridges/[id]/pair/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/bridges/[id]/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/bridges/[id]/routes/[route_id]/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/bridges/[id]/routes/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/bridges/[id]/status/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/bridges/kinds/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/bridges/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/builtin-tools/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/config/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/credentials/[id]/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/credentials/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/dashboard/currency/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/dashboard/metrics/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/dashboard/pricing/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/dashboard/pricing-task/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/delegations/codex/[job_id]/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/documents/search/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/documents/settings/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/documents/sources/[id]/reindex/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/documents/sources/[id]/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/documents/sources/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/env/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/env-sync/allowlist/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/env-sync/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/events/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/events/test/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/extension/agents/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/extension/browser/activate/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/extension/browser/foreground/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/extension/browser/history/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/extension/browser/poll/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/extension/browser/progress/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/extension/browser/result/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/extension/browser/retry/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/extension/browser/status/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/extension/browser/tabs/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/extension/fill/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/extension/refine/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/extension/turn/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/extensions/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/extensions/tools/[name]/config/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/extensions/tools/[name]/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/extensions/tools/[name]/secrets/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/files/[name]/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/fs/browse/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/harnesses/[id]/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/harnesses/default/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/harnesses/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/health/probes/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/health/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/integrations/[name]/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/integrations/[name]/test/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/integrations/gmail/oauth/callback/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/integrations/gmail/oauth/start/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/integrations/gmail/oauth/status/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/integrations/outlook/oauth/callback/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/integrations/outlook/oauth/start/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/integrations/outlook/oauth/status/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/integrations/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/lifecycle/adoption/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/local-file/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/logs/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/maps/embed/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/mcp-servers/[name]/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/mcp-servers/registry/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/mcp-servers/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/memory/[namespace]/[key]/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/memory/policy/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/memory/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/memory/search/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/models/[name]/compact-threads/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/models/[name]/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/models/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/packages/catalog/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/packages/defaults/[id]/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/packages/install/[id]/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/packages/install/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/packages/manifests/[name]/enabled/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/packages/manifests/[name]/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/packages/manifests/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/packages/reload/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/packages/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/page-capture/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/pending-actions/[id]/approve/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/pending-actions/[id]/deny/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/pending-actions/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/profile/location/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/profile/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/providers/[provider]/models/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/providers/[provider]/probe/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/providers/github-copilot/auth/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/providers/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/proxy-config/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/redaction/init/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/redaction/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/scheduled-tasks/[id]/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/scheduled-tasks/[id]/run/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/scheduled-tasks/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/security/idle-timeout/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/security/pin/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/security/state/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/security/unlock/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/security/verify-pin/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/setup/test-key/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/skills/[id]/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/skills/repos/[id]/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/skills/repos/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/skills/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/system/abort/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/system/restart/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/tailscale/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/tasks/[agent_id]/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/tasks/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/threads/[thread_id]/activity/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/threads/[thread_id]/context-pin/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/threads/[thread_id]/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/threads/[thread_id]/run/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/threads/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/tools/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/update/apply/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/update/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/voice/transcribe/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/voice/tts/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/watchers/[id]/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/watchers/[id]/run/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/watchers/reaction-scripts/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/api/v1/watchers/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/manifest.webmanifest/route-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/app/{page-7017f07f8a7a083c.js → page-213a623b37226452.js} +1041 -652
- package/.next/standalone/.next/static/chunks/next/dist/client/components/builtin/app-error-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/next/dist/client/components/builtin/forbidden-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/next/dist/client/components/builtin/not-found-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/chunks/next/dist/client/components/builtin/unauthorized-6fc5f8e744c81802.js +17 -0
- package/.next/standalone/.next/static/css/{d80058f0b9b41c09.css → 312542a5725ba0d5.css} +2 -2
- package/.next/standalone/docs/adoption/changesets.json +309 -0
- package/.next/standalone/lib/skills/builtins/memory-organization/SKILL.md +16 -0
- package/.next/standalone/package.json +3 -3
- package/CHANGELOG.md +25 -0
- package/api/client.ts +9 -0
- package/api/types.ts +29 -0
- package/app/api/v1/lifecycle/adoption/route.ts +14 -2
- package/app/api/v1/models/[name]/compact-threads/route.ts +14 -11
- package/app/api/v1/threads/[thread_id]/activity/route.ts +19 -0
- package/app/api/v1/threads/[thread_id]/context-pin/route.test.ts +1 -0
- package/app/api/v1/threads/[thread_id]/context-pin/route.ts +2 -1
- package/app/api/v1/threads/[thread_id]/route.ts +5 -1
- package/components/chat/ChatView.tsx +52 -11
- package/components/chat/ContextBoundary.test.tsx +68 -1
- package/components/chat/ContextBoundary.tsx +92 -13
- package/components/chat/MessageList.test.tsx +31 -0
- package/components/chat/MessageList.tsx +49 -28
- package/components/chat/ToolList.test.tsx +92 -16
- package/components/chat/ToolList.tsx +59 -4
- package/components/chat/chat-helpers.test.tsx +24 -1
- package/components/chat/chat-helpers.ts +47 -4
- package/components/chat/useThreadActivity.test.tsx +113 -0
- package/components/chat/useThreadActivity.ts +94 -0
- package/components/chat/useThreadData.ts +16 -16
- package/components/chat/workflow-step-retry.ts +25 -0
- package/components/ui/BootScreen.tsx +17 -0
- package/components/ui/WorkflowChecklist.tsx +71 -33
- package/hooks/useSSE.ts +28 -3
- package/lib/agents/compaction-pipeline.test.ts +202 -0
- package/lib/agents/compaction-pipeline.ts +483 -0
- package/lib/agents/conversation-summary.ts +37 -21
- package/lib/agents/prepare/history-window.test.ts +18 -0
- package/lib/agents/prepare/history-window.ts +11 -2
- package/lib/agents/prepare/request.ts +4 -0
- package/lib/agents/prepare/system-prompt.test.ts +39 -0
- package/lib/agents/prepare/system-prompt.ts +8 -3
- package/lib/agents/prompt-registry.test.ts +5 -140
- package/lib/agents/prompt-registry.ts +45 -1
- package/lib/agents/prompt-variants.ts +146 -0
- package/lib/agents/run-registry.test.ts +22 -0
- package/lib/agents/run-registry.ts +29 -0
- package/lib/agents/run-thread.retry.test.ts +67 -1
- package/lib/agents/run-thread.ts +86 -1
- package/lib/agents/thread-activity.test.ts +31 -0
- package/lib/agents/thread-activity.ts +27 -0
- package/lib/agents/thread-compaction-state.test.ts +82 -0
- package/lib/agents/thread-compaction-state.ts +121 -0
- package/lib/agents/thread-compaction.test.ts +83 -4
- package/lib/agents/thread-compaction.ts +34 -11
- package/lib/agents/warm-summary-background.test.ts +219 -5
- package/lib/agents/warm-summary-background.ts +325 -142
- package/lib/agents/warm-topics.test.ts +37 -0
- package/lib/agents/warm-topics.ts +297 -0
- package/lib/agents/workflow-step-retry.test.ts +96 -0
- package/lib/agents/workflow-step-retry.ts +216 -0
- package/lib/api/browser-control.ts +0 -3
- package/lib/db/migrations.ts +5 -0
- package/lib/env/config.ts +2 -0
- package/lib/env/schema.ts +12 -0
- package/lib/lifecycle/changeset-build.test.ts +93 -0
- package/lib/lifecycle/changeset-build.ts +210 -0
- package/lib/lifecycle/changesets.test.ts +101 -0
- package/lib/lifecycle/changesets.ts +166 -0
- package/lib/lifecycle/surface-collect.test.ts +88 -0
- package/lib/lifecycle/surface-collect.ts +64 -0
- package/lib/lifecycle/surface-snapshot.test.ts +104 -0
- package/lib/lifecycle/surface-snapshot.ts +210 -0
- package/lib/memory/record.ts +0 -2
- package/lib/providers/external.ts +0 -2
- package/lib/skills/builtins/memory-organization/SKILL.md +16 -0
- package/lib/stores/threads.test.ts +9 -0
- package/lib/stores/threads.ts +21 -11
- package/lib/stores/version-adoption.test.ts +96 -0
- package/lib/stores/version-adoption.ts +239 -26
- package/lib/stores/workflow-progress.ts +3 -0
- package/lib/tools/communications/ms-todo.ts +0 -7
- package/lib/tools/general/memory.ts +1 -1
- package/lib/tools/general/workflow-progress.ts +2 -0
- package/lib/tools/runtime/catalog.ts +1 -25
- package/lib/triggers/registry.ts +0 -4
- package/package.json +3 -3
- package/scripts/install-to-system.ps1 +39 -11
- package/scripts/install-to-system.sh +37 -3
- package/.next/standalone/.next/server/chunks/3979.js +0 -581
- package/.next/standalone/.next/server/chunks/5936.js +0 -594
- package/.next/standalone/.next/static/chunks/app/api/v1/agents/[id]/display-filters/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/agents/[id]/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/agents/[id]/thread/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/agents/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/allowed-sites/[hostname]/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/allowed-sites/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/artifacts/lifecycle/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/attachments/files/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/attachments/images/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/bridges/[id]/chats/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/bridges/[id]/ignores/[remote_jid]/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/bridges/[id]/ignores/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/bridges/[id]/lookup/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/bridges/[id]/pair/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/bridges/[id]/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/bridges/[id]/routes/[route_id]/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/bridges/[id]/routes/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/bridges/[id]/status/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/bridges/kinds/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/bridges/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/builtin-tools/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/config/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/credentials/[id]/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/credentials/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/dashboard/currency/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/dashboard/metrics/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/dashboard/pricing/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/dashboard/pricing-task/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/delegations/codex/[job_id]/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/documents/search/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/documents/settings/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/documents/sources/[id]/reindex/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/documents/sources/[id]/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/documents/sources/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/env/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/env-sync/allowlist/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/env-sync/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/events/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/events/test/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/extension/agents/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/extension/browser/activate/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/extension/browser/foreground/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/extension/browser/history/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/extension/browser/poll/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/extension/browser/progress/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/extension/browser/result/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/extension/browser/retry/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/extension/browser/status/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/extension/browser/tabs/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/extension/fill/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/extension/refine/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/extension/turn/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/extensions/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/extensions/tools/[name]/config/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/extensions/tools/[name]/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/extensions/tools/[name]/secrets/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/files/[name]/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/fs/browse/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/harnesses/[id]/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/harnesses/default/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/harnesses/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/health/probes/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/health/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/integrations/[name]/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/integrations/[name]/test/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/integrations/gmail/oauth/callback/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/integrations/gmail/oauth/start/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/integrations/gmail/oauth/status/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/integrations/outlook/oauth/callback/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/integrations/outlook/oauth/start/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/integrations/outlook/oauth/status/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/integrations/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/lifecycle/adoption/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/local-file/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/logs/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/maps/embed/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/mcp-servers/[name]/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/mcp-servers/registry/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/mcp-servers/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/memory/[namespace]/[key]/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/memory/policy/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/memory/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/memory/search/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/models/[name]/compact-threads/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/models/[name]/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/models/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/packages/catalog/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/packages/defaults/[id]/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/packages/install/[id]/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/packages/install/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/packages/manifests/[name]/enabled/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/packages/manifests/[name]/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/packages/manifests/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/packages/reload/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/packages/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/page-capture/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/pending-actions/[id]/approve/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/pending-actions/[id]/deny/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/pending-actions/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/profile/location/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/profile/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/providers/[provider]/models/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/providers/[provider]/probe/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/providers/github-copilot/auth/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/providers/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/proxy-config/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/redaction/init/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/redaction/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/scheduled-tasks/[id]/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/scheduled-tasks/[id]/run/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/scheduled-tasks/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/security/idle-timeout/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/security/pin/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/security/state/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/security/unlock/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/security/verify-pin/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/setup/test-key/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/skills/[id]/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/skills/repos/[id]/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/skills/repos/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/skills/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/system/abort/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/system/restart/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/tailscale/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/tasks/[agent_id]/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/tasks/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/threads/[thread_id]/context-pin/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/threads/[thread_id]/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/threads/[thread_id]/run/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/threads/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/tools/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/update/apply/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/update/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/voice/transcribe/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/voice/tts/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/watchers/[id]/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/watchers/[id]/run/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/watchers/reaction-scripts/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/api/v1/watchers/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/app/manifest.webmanifest/route-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/next/dist/client/components/builtin/app-error-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/next/dist/client/components/builtin/forbidden-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/next/dist/client/components/builtin/not-found-36cb8b428b38b26a.js +0 -17
- package/.next/standalone/.next/static/chunks/next/dist/client/components/builtin/unauthorized-36cb8b428b38b26a.js +0 -17
- /package/.next/standalone/.next/static/{NUrC9xax1sp1Q70nlFqS6 → bMRK5y3ruT7c3WtBfCQOG}/_buildManifest.js +0 -0
- /package/.next/standalone/.next/static/{NUrC9xax1sp1Q70nlFqS6 → bMRK5y3ruT7c3WtBfCQOG}/_ssgManifest.js +0 -0
|
@@ -13,6 +13,7 @@ const {
|
|
|
13
13
|
getVersionAdoptionState,
|
|
14
14
|
recordVersionAdoptionWorkflowProgress,
|
|
15
15
|
updateVersionAdoptionState,
|
|
16
|
+
VersionAdoptionRequestError,
|
|
16
17
|
} = await import("@/lib/stores/version-adoption");
|
|
17
18
|
|
|
18
19
|
afterAll(() => {
|
|
@@ -132,6 +133,7 @@ describe("version adoption state", () => {
|
|
|
132
133
|
expect(running.checklist[0].status).toBe("done");
|
|
133
134
|
expect(running.checklist[1].id).toBe("build-todo-list");
|
|
134
135
|
expect(running.checklist[1].status).toBe("checking");
|
|
136
|
+
expect(running.checklist[1].attempts).toBe(1);
|
|
135
137
|
});
|
|
136
138
|
|
|
137
139
|
it("records item-by-item adoption progress through the workflow helper", () => {
|
|
@@ -174,6 +176,100 @@ describe("version adoption state", () => {
|
|
|
174
176
|
});
|
|
175
177
|
});
|
|
176
178
|
|
|
179
|
+
it("builds adaptation items and prompt hints from bundled release changesets", () => {
|
|
180
|
+
upsertAgentConfig({
|
|
181
|
+
id: "default-agent",
|
|
182
|
+
name: "Assistant",
|
|
183
|
+
identity: "helper",
|
|
184
|
+
instructions: "Be useful.",
|
|
185
|
+
tools: [],
|
|
186
|
+
is_default: true,
|
|
187
|
+
});
|
|
188
|
+
updateVersionAdoptionState("mark_done", "2.0.5");
|
|
189
|
+
|
|
190
|
+
const pending = getVersionAdoptionState("2.2.1");
|
|
191
|
+
expect(pending.previous_version).toBe("2.0.5");
|
|
192
|
+
expect(pending.checklist[0]).toMatchObject({ id: "fetch-changes", status: "done" });
|
|
193
|
+
expect(pending.checklist[0].validation_evidence).toContain("bundled release changesets for 2.1.0, 2.2.0, 2.2.1");
|
|
194
|
+
expect(pending.stale_prompt_risks).toEqual(expect.arrayContaining([
|
|
195
|
+
"Adapt agent settings to tool changes",
|
|
196
|
+
"Adapt scheduled task and watcher prompts",
|
|
197
|
+
"Adapt agent instructions and skills",
|
|
198
|
+
]));
|
|
199
|
+
|
|
200
|
+
const running = updateVersionAdoptionState("start", "2.2.1");
|
|
201
|
+
const prompt = running.adoption_prompt ?? "";
|
|
202
|
+
expect(prompt).toContain("read deterministically by the system from the bundled release changesets");
|
|
203
|
+
expect(prompt).toContain("Release changesets — model-facing prompt and tool description/schema changes from 2.0.5 to 2.2.1:");
|
|
204
|
+
expect(prompt).toContain("tool `workflow_progress`");
|
|
205
|
+
expect(prompt).toContain("params added: validation_evidence");
|
|
206
|
+
expect(prompt).toContain("apply an edit only after the user approves it");
|
|
207
|
+
expect(prompt).not.toContain("partial");
|
|
208
|
+
|
|
209
|
+
const adoption = recordVersionAdoptionWorkflowProgress({
|
|
210
|
+
item_id: "build-todo-list",
|
|
211
|
+
status: "done",
|
|
212
|
+
validation_evidence: "Every changed prompt and tool is covered by an adapt item.",
|
|
213
|
+
}, "2.2.1");
|
|
214
|
+
const ids = adoption.state.checklist.map((item) => item.id);
|
|
215
|
+
expect(ids).toEqual(["adapt-settings", "adapt-task-prompts", "adapt-instructions-skills"]);
|
|
216
|
+
for (const item of adoption.state.checklist) {
|
|
217
|
+
expect(item.input.trim()).not.toBe("");
|
|
218
|
+
expect(item.output.trim()).not.toBe("");
|
|
219
|
+
expect(item.validation).toMatch(/re-(read|list)/);
|
|
220
|
+
}
|
|
221
|
+
expect(adoption.state.checklist[0].affected_files).toContain("tool:workflow_progress");
|
|
222
|
+
});
|
|
223
|
+
|
|
224
|
+
it("retries a single adoption step with a focused prompt and keeps other steps", () => {
|
|
225
|
+
upsertAgentConfig({
|
|
226
|
+
id: "default-agent",
|
|
227
|
+
name: "Assistant",
|
|
228
|
+
identity: "helper",
|
|
229
|
+
instructions: "Be useful.",
|
|
230
|
+
tools: [],
|
|
231
|
+
is_default: true,
|
|
232
|
+
});
|
|
233
|
+
updateVersionAdoptionState("mark_done", "2.0.5");
|
|
234
|
+
updateVersionAdoptionState("start", "2.2.1");
|
|
235
|
+
recordVersionAdoptionWorkflowProgress({
|
|
236
|
+
item_id: "build-todo-list",
|
|
237
|
+
status: "done",
|
|
238
|
+
validation_evidence: "Every changed prompt and tool is covered.",
|
|
239
|
+
}, "2.2.1");
|
|
240
|
+
recordVersionAdoptionWorkflowProgress({
|
|
241
|
+
phase: "adoption",
|
|
242
|
+
item_id: "adapt-settings",
|
|
243
|
+
status: "done",
|
|
244
|
+
validation_evidence: "Re-read agent settings; no removed tools referenced.",
|
|
245
|
+
}, "2.2.1");
|
|
246
|
+
recordVersionAdoptionWorkflowProgress({
|
|
247
|
+
phase: "adoption",
|
|
248
|
+
item_id: "adapt-task-prompts",
|
|
249
|
+
status: "needs_attention",
|
|
250
|
+
}, "2.2.1");
|
|
251
|
+
|
|
252
|
+
const retried = updateVersionAdoptionState("retry", "2.2.1", "adapt-settings");
|
|
253
|
+
expect(retried.status).toBe("running");
|
|
254
|
+
expect(retried.phase).toBe("adoption");
|
|
255
|
+
const settings = retried.checklist.find((item) => item.id === "adapt-settings");
|
|
256
|
+
expect(settings?.status).toBe("checking");
|
|
257
|
+
expect(settings?.attempts).toBe(1);
|
|
258
|
+
expect(settings?.validation_evidence).toBeUndefined();
|
|
259
|
+
expect(retried.checklist.find((item) => item.id === "adapt-task-prompts")?.status).toBe("needs_attention");
|
|
260
|
+
|
|
261
|
+
const prompt = retried.adoption_prompt ?? "";
|
|
262
|
+
expect(prompt).toContain("Retry one Jarela version adoption step for upgrade from 2.0.5 to 2.2.1");
|
|
263
|
+
expect(prompt).toContain("Step: adapt-settings");
|
|
264
|
+
expect(prompt).toContain('item_id: "adapt-settings"');
|
|
265
|
+
expect(prompt).toContain('phase: "adoption"');
|
|
266
|
+
expect(prompt).toContain("Release changesets:");
|
|
267
|
+
expect(prompt).not.toContain("Phase 1 — impact radius analysis");
|
|
268
|
+
|
|
269
|
+
expect(() => updateVersionAdoptionState("retry", "2.2.1", "missing-step")).toThrow(VersionAdoptionRequestError);
|
|
270
|
+
expect(() => updateVersionAdoptionState("retry", "2.2.1", "fetch-changes")).toThrow(VersionAdoptionRequestError);
|
|
271
|
+
});
|
|
272
|
+
|
|
177
273
|
it("blocks adoption until a default agent exists", () => {
|
|
178
274
|
const state = getVersionAdoptionState("1.29.5");
|
|
179
275
|
expect(state.status).toBe("blocked_no_default_agent");
|
|
@@ -3,6 +3,12 @@ import { getMemory, putMemory } from "@/lib/stores/memory";
|
|
|
3
3
|
import { getDefaultAgentConfig } from "@/lib/stores/agent-configs";
|
|
4
4
|
import { getOrCreateAgentThread } from "@/lib/stores/threads";
|
|
5
5
|
import { getCurrentVersion } from "@/lib/lifecycle/version";
|
|
6
|
+
import {
|
|
7
|
+
changesetsBetween,
|
|
8
|
+
formatChangesetsForPrompt,
|
|
9
|
+
summarizeChangesets,
|
|
10
|
+
type ChangesetRange,
|
|
11
|
+
} from "@/lib/lifecycle/changesets";
|
|
6
12
|
import {
|
|
7
13
|
completeWorkflow,
|
|
8
14
|
mergeWorkflowProgress,
|
|
@@ -34,6 +40,7 @@ export interface VersionAdoptionChecklistItem {
|
|
|
34
40
|
validation: string;
|
|
35
41
|
status: VersionAdoptionChecklistStatus;
|
|
36
42
|
validation_evidence?: string;
|
|
43
|
+
attempts?: number;
|
|
37
44
|
reason: string;
|
|
38
45
|
affected_files: string[];
|
|
39
46
|
action?: VersionAdoptionAction;
|
|
@@ -62,6 +69,9 @@ type StoredVersionAdoptionState = VersionAdoptionState & {
|
|
|
62
69
|
last_adopted_version: string | null;
|
|
63
70
|
};
|
|
64
71
|
|
|
72
|
+
/** A client request that cannot be applied to the current adoption state. */
|
|
73
|
+
export class VersionAdoptionRequestError extends Error {}
|
|
74
|
+
|
|
65
75
|
const DEFAULT_CHECKLIST: VersionAdoptionChecklistItem[] = [
|
|
66
76
|
{
|
|
67
77
|
id: "instructions",
|
|
@@ -102,9 +112,9 @@ const PHASE_1_CHECKLIST: VersionAdoptionChecklistItem[] = [
|
|
|
102
112
|
{
|
|
103
113
|
id: "fetch-changes",
|
|
104
114
|
label: "Fetch changes",
|
|
105
|
-
input: "Previously adopted version
|
|
106
|
-
output: "The changed-file list between the baseline and current version.",
|
|
107
|
-
validation: "Use the system-computed git diff result; if no baseline is available, explicitly identify first-adoption status.",
|
|
115
|
+
input: "Previously adopted version, current version, the bundled release changesets, and git history when running from a source checkout.",
|
|
116
|
+
output: "The prompt and tool description/schema deltas from the release changesets, or the changed-file list from git, between the baseline and current version.",
|
|
117
|
+
validation: "Use the system-computed changeset or git diff result; if no baseline is available, explicitly identify first-adoption status.",
|
|
108
118
|
status: "pending",
|
|
109
119
|
reason: "Compare the current version with the previously adopted version or baseline.",
|
|
110
120
|
affected_files: [],
|
|
@@ -112,9 +122,9 @@ const PHASE_1_CHECKLIST: VersionAdoptionChecklistItem[] = [
|
|
|
112
122
|
{
|
|
113
123
|
id: "build-todo-list",
|
|
114
124
|
label: "Build todo list",
|
|
115
|
-
input: "System-computed
|
|
125
|
+
input: "System-computed change surface and classified adoption surfaces.",
|
|
116
126
|
output: "A Phase 2 checklist covering all matched changes and a fallback review for unmatched changes.",
|
|
117
|
-
validation: "Check that every changed path is represented by an adoption item or explicitly covered by the fallback.",
|
|
127
|
+
validation: "Check that every changed prompt, tool, or path is represented by an adoption item or explicitly covered by the fallback.",
|
|
118
128
|
status: "pending",
|
|
119
129
|
reason: "Turn detected version changes into the concrete Phase 2 adoption checklist.",
|
|
120
130
|
affected_files: [],
|
|
@@ -192,6 +202,7 @@ function normalizeChecklistItem(value: unknown): VersionAdoptionChecklistItem |
|
|
|
192
202
|
? item.validation
|
|
193
203
|
: "Verify findings against the affected files; report unavailable evidence instead of inferring.",
|
|
194
204
|
...(validationEvidence ? { validation_evidence: validationEvidence } : {}),
|
|
205
|
+
...(typeof item.attempts === "number" && Number.isInteger(item.attempts) && item.attempts > 0 ? { attempts: item.attempts } : {}),
|
|
195
206
|
...(isVersionAdoptionAction(item.action) ? { action: item.action } : {}),
|
|
196
207
|
};
|
|
197
208
|
}
|
|
@@ -262,12 +273,118 @@ function item(
|
|
|
262
273
|
};
|
|
263
274
|
}
|
|
264
275
|
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
276
|
+
type ChangeSource = "changeset" | "git" | "none";
|
|
277
|
+
|
|
278
|
+
interface AdoptionPlan {
|
|
279
|
+
items: VersionAdoptionChecklistItem[];
|
|
280
|
+
source: ChangeSource;
|
|
281
|
+
range: ChangesetRange | null;
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
function changesetChecklist(previousVersion: string, range: ChangesetRange): VersionAdoptionChecklistItem[] {
|
|
285
|
+
const summary = summarizeChangesets(range.entries);
|
|
286
|
+
const toolRefs = summary.toolNames.map((name) => `tool:${name}`);
|
|
287
|
+
const promptRefs = summary.promptIds.map((id) => `prompt:${id}`);
|
|
288
|
+
const removed = summary.removedTools.length > 0 ? ` Removed tools: ${summary.removedTools.join(", ")}.` : "";
|
|
289
|
+
const items: VersionAdoptionChecklistItem[] = [];
|
|
290
|
+
const surfaceItem = (
|
|
291
|
+
entry: Omit<VersionAdoptionChecklistItem, "status" | "affected_files"> & { refs: string[] },
|
|
292
|
+
): VersionAdoptionChecklistItem => {
|
|
293
|
+
const { refs, ...rest } = entry;
|
|
294
|
+
return { ...rest, status: "pending", affected_files: refs.slice(0, 12) };
|
|
295
|
+
};
|
|
296
|
+
|
|
297
|
+
if (summary.toolNames.length > 0) {
|
|
298
|
+
items.push(surfaceItem({
|
|
299
|
+
id: "adapt-settings",
|
|
300
|
+
label: "Adapt agent settings to tool changes",
|
|
301
|
+
reason: `${summary.toolNames.length} built-in tool(s) changed description or schema since ${previousVersion}.${removed}`,
|
|
302
|
+
input: "Release changeset tool deltas, every agent's configuration from read_agent_config (tool allowlist and delegate targets), and the live catalog from list_tools.",
|
|
303
|
+
output: "Per agent: proposed settings edits for allowlists that reference removed tools or should include changed tools the user relies on, or an explicit no-change finding.",
|
|
304
|
+
validation: "After approved edits, re-read each agent with read_agent_config and confirm every allowlisted tool name exists in list_tools; name every agent checked.",
|
|
305
|
+
action: "review_permissions",
|
|
306
|
+
refs: toolRefs,
|
|
307
|
+
}));
|
|
308
|
+
}
|
|
309
|
+
if (summary.toolNames.length > 0 || summary.promptIds.length > 0) {
|
|
310
|
+
items.push(surfaceItem({
|
|
311
|
+
id: "adapt-task-prompts",
|
|
312
|
+
label: "Adapt scheduled task and watcher prompts",
|
|
313
|
+
reason: "Long-lived task and watcher prompts can reference changed tools or parameters, or repeat built-in guidance that changed.",
|
|
314
|
+
input: "Release changeset tool and prompt deltas, plus every prompt returned by list_scheduled_tasks and list_watchers.",
|
|
315
|
+
output: "For each affected task or watcher: current prompt, proposed prompt, and the changeset delta that motivates it; unaffected ones listed as checked.",
|
|
316
|
+
validation: "After approved update_scheduled_task / update_watcher calls, re-list and confirm each stored prompt equals the approved text and names only tools present in list_tools.",
|
|
317
|
+
action: "review_schedule",
|
|
318
|
+
refs: [...toolRefs, ...promptRefs],
|
|
319
|
+
}));
|
|
320
|
+
items.push(surfaceItem({
|
|
321
|
+
id: "adapt-instructions-skills",
|
|
322
|
+
label: "Adapt agent instructions and skills",
|
|
323
|
+
reason: "Agent instructions and user skills can reference changed tools or parameters, or duplicate or contradict changed built-in prompt guidance.",
|
|
324
|
+
input: "Release changeset prompt and tool deltas, each agent's instructions from read_agent_instruction, and user skills from list_skills / read_skill.",
|
|
325
|
+
output: "For each affected instruction or skill: before and after text and the changeset delta that motivates it; unaffected ones listed as checked.",
|
|
326
|
+
validation: "After approved update_agent_instruction / write_skill calls, re-read each artifact and confirm the stored text matches and names only tools and parameters present in list_tools and the changed schemas.",
|
|
327
|
+
action: "read_skill",
|
|
328
|
+
refs: [...promptRefs, ...toolRefs],
|
|
329
|
+
}));
|
|
330
|
+
}
|
|
331
|
+
if (summary.hints.length > 0) {
|
|
332
|
+
items.push(surfaceItem({
|
|
333
|
+
id: "release-hints",
|
|
334
|
+
label: "Apply release adoption hints",
|
|
335
|
+
reason: `The release notes include ${summary.hints.length} adoption hint(s) from the maintainers.`,
|
|
336
|
+
input: `Adoption hints: ${summary.hints.join(" | ")}`,
|
|
337
|
+
output: "Each hint applied to the user's setup, or a finding that it does not apply.",
|
|
338
|
+
validation: "For each hint, cite the artifact or setting checked and re-read anything changed.",
|
|
339
|
+
action: "review_release",
|
|
340
|
+
refs: [],
|
|
341
|
+
}));
|
|
342
|
+
}
|
|
343
|
+
if (!range.complete) {
|
|
344
|
+
items.push(surfaceItem({
|
|
345
|
+
id: "version-diff",
|
|
346
|
+
label: "Review changes not covered by changesets",
|
|
347
|
+
reason: `Bundled changesets do not fully cover ${previousVersion} → current; older releases predate changesets.`,
|
|
348
|
+
input: "The available changesets and the changelog for the uncovered versions.",
|
|
349
|
+
output: "Findings for uncovered versions and any required adoption actions.",
|
|
350
|
+
validation: "State which versions were covered by changesets and which only by the changelog.",
|
|
351
|
+
action: "review_release",
|
|
352
|
+
refs: [],
|
|
353
|
+
}));
|
|
268
354
|
}
|
|
355
|
+
if (items.length === 0) {
|
|
356
|
+
items.push(surfaceItem({
|
|
357
|
+
id: "version-diff",
|
|
358
|
+
label: "Review version changes",
|
|
359
|
+
reason: "Release changesets report no prompt or tool description/schema changes; user prompts, skills, and settings need no adaptation.",
|
|
360
|
+
input: "Release changesets for the version range.",
|
|
361
|
+
output: "Confirmation that no adaptation is required.",
|
|
362
|
+
validation: "Confirm each changeset in the range lists no tool or prompt changes and no adoption hints.",
|
|
363
|
+
action: "review_release",
|
|
364
|
+
refs: [],
|
|
365
|
+
}));
|
|
366
|
+
items[0].status = "skipped";
|
|
367
|
+
}
|
|
368
|
+
return items;
|
|
369
|
+
}
|
|
269
370
|
|
|
371
|
+
function computeAdoptionPlan(previousVersion: string | null, currentVersion: string): AdoptionPlan {
|
|
372
|
+
if (!previousVersion) {
|
|
373
|
+
return { items: DEFAULT_CHECKLIST.map((entry) => ({ ...entry })), source: "none", range: null };
|
|
374
|
+
}
|
|
375
|
+
const range = changesetsBetween(previousVersion, currentVersion);
|
|
376
|
+
if (range.entries.length > 0) {
|
|
377
|
+
return { items: changesetChecklist(previousVersion, range), source: "changeset", range };
|
|
378
|
+
}
|
|
270
379
|
const files = changedFiles(previousVersion, currentVersion);
|
|
380
|
+
return { items: gitChecklist(files), source: files.length > 0 ? "git" : "none", range: null };
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
function buildChecklist(previousVersion: string | null, currentVersion: string): VersionAdoptionChecklistItem[] {
|
|
384
|
+
return computeAdoptionPlan(previousVersion, currentVersion).items;
|
|
385
|
+
}
|
|
386
|
+
|
|
387
|
+
function gitChecklist(files: readonly string[]): VersionAdoptionChecklistItem[] {
|
|
271
388
|
const dynamic = [
|
|
272
389
|
item(
|
|
273
390
|
"permissions",
|
|
@@ -353,26 +470,35 @@ function phase1Checklist(): VersionAdoptionChecklistItem[] {
|
|
|
353
470
|
return PHASE_1_CHECKLIST.map((entry) => ({ ...entry }));
|
|
354
471
|
}
|
|
355
472
|
|
|
356
|
-
// `fetch-changes` never needs an agent tool call: the
|
|
357
|
-
// on already ran synchronously in createState() (via
|
|
358
|
-
// the item starts pre-completed with the
|
|
359
|
-
// its reason. Only `build-todo-list` is left
|
|
473
|
+
// `fetch-changes` never needs an agent tool call: the changeset read or git
|
|
474
|
+
// diff it reports on already ran synchronously in createState() (via
|
|
475
|
+
// computeAdoptionPlan), so the item starts pre-completed with the
|
|
476
|
+
// deterministic result baked into its reason. Only `build-todo-list` is left
|
|
477
|
+
// for the agent to actually do.
|
|
360
478
|
function resolvedPhase1Checklist(
|
|
361
|
-
|
|
479
|
+
plan: AdoptionPlan,
|
|
362
480
|
isFirst: boolean,
|
|
363
481
|
): VersionAdoptionChecklistItem[] {
|
|
364
482
|
const [fetchChanges, ...rest] = phase1Checklist();
|
|
483
|
+
const adoptionChecklist = plan.items;
|
|
365
484
|
const affectedCount = adoptionChecklist.reduce((n, entry) => n + entry.affected_files.length, 0);
|
|
485
|
+
const changesetVersions = plan.range?.entries.map((entry) => entry.version).join(", ") ?? "";
|
|
486
|
+
const evidence = isFirst
|
|
487
|
+
? "System confirmed that this is the first adoption and no prior baseline exists."
|
|
488
|
+
: plan.source === "changeset"
|
|
489
|
+
? `System read bundled release changesets for ${changesetVersions}${plan.range?.complete ? "" : " (partial coverage)"}; ${affectedCount} changed prompt/tool surface reference(s) were counted.`
|
|
490
|
+
: `System computed the changed-file surface against the prior version; ${affectedCount} affected file(s) were counted.`;
|
|
491
|
+
const reason = isFirst
|
|
492
|
+
? "First adoption — no previously adopted version to diff against."
|
|
493
|
+
: plan.source === "changeset"
|
|
494
|
+
? `Read deterministically from the bundled release changesets (prompt and tool description/schema deltas): ${affectedCount} surface reference(s) across ${adoptionChecklist.length} area(s).`
|
|
495
|
+
: `Computed deterministically via git diff against the previously adopted version: ${affectedCount} affected file(s) across ${adoptionChecklist.length} area(s).`;
|
|
366
496
|
return [
|
|
367
497
|
{
|
|
368
498
|
...fetchChanges,
|
|
369
499
|
status: "done",
|
|
370
|
-
validation_evidence:
|
|
371
|
-
|
|
372
|
-
: `System computed the changed-file surface against the prior version; ${affectedCount} affected file(s) were counted.`,
|
|
373
|
-
reason: isFirst
|
|
374
|
-
? "First adoption — no previously adopted version to diff against."
|
|
375
|
-
: `Computed deterministically via git diff against the previously adopted version: ${affectedCount} affected file(s) across ${adoptionChecklist.length} area(s).`,
|
|
500
|
+
validation_evidence: evidence,
|
|
501
|
+
reason,
|
|
376
502
|
},
|
|
377
503
|
...rest,
|
|
378
504
|
];
|
|
@@ -380,7 +506,8 @@ function resolvedPhase1Checklist(
|
|
|
380
506
|
|
|
381
507
|
function stalePromptRisks(checklist: readonly VersionAdoptionChecklistItem[]): string[] {
|
|
382
508
|
return checklist
|
|
383
|
-
.filter((item) => item.id === "skills-instructions" || item.id === "scheduled-work" || item.id === "stale-prompts" || item.id === "permissions"
|
|
509
|
+
.filter((item) => item.id === "skills-instructions" || item.id === "scheduled-work" || item.id === "stale-prompts" || item.id === "permissions"
|
|
510
|
+
|| item.id === "adapt-settings" || item.id === "adapt-task-prompts" || item.id === "adapt-instructions-skills")
|
|
384
511
|
.map((item) => item.label);
|
|
385
512
|
}
|
|
386
513
|
|
|
@@ -395,11 +522,21 @@ function buildAdoptionPrompt(state: Pick<VersionAdoptionState, "current_version"
|
|
|
395
522
|
const phaseLabel = state.is_first_adoption
|
|
396
523
|
? `current-version baseline ${state.current_version}`
|
|
397
524
|
: `upgrade from ${state.previous_version} to ${state.current_version}`;
|
|
525
|
+
const plan = computeAdoptionPlan(state.previous_version, state.current_version);
|
|
526
|
+
const changesetSection = plan.source === "changeset" && plan.range
|
|
527
|
+
? [
|
|
528
|
+
"",
|
|
529
|
+
`Release changesets — model-facing prompt and tool description/schema changes from ${state.previous_version} to ${state.current_version}${plan.range.complete ? "" : " (partial: older versions predate changesets)"}:`,
|
|
530
|
+
formatChangesetsForPrompt(plan.range.entries),
|
|
531
|
+
]
|
|
532
|
+
: [];
|
|
398
533
|
return [
|
|
399
534
|
`Run Jarela version adoption for ${phaseLabel}.`,
|
|
400
535
|
"",
|
|
401
536
|
"Phase 1 — impact radius analysis:",
|
|
402
|
-
|
|
537
|
+
plan.source === "changeset"
|
|
538
|
+
? "- The change surface (`fetch-changes`) was already read deterministically by the system from the bundled release changesets: prompt text and built-in tool description/schema deltas between the previously adopted version and this one. They are listed under \"Release changesets\" below. Do not independently fetch or guess at what changed; that item is already marked done in the UI."
|
|
539
|
+
: "- The changed-file surface (`fetch-changes`) was already computed deterministically by the system via git diff against the previously adopted version — see each Phase 2 checklist item below with its affected_files. Do not independently fetch or guess at what changed; that item is already marked done in the UI.",
|
|
403
540
|
"- Every checklist item provides its input, expected output, and validation criteria. Work from the stated inputs, validate the output using those criteria, and report observed evidence before marking the item done.",
|
|
404
541
|
"- Prefer executable checks for code-verifiable behavior. If a check cannot run, say why and leave the result unverified or mark the item needs_attention.",
|
|
405
542
|
"- Call `workflow_progress` with `workflow_id: \"version_adoption\"`, `phase: \"impact_radius\"`, `item_id: \"build-todo-list\"`, and `status: \"checking\"`.",
|
|
@@ -410,9 +547,10 @@ function buildAdoptionPrompt(state: Pick<VersionAdoptionState, "current_version"
|
|
|
410
547
|
"- Start Phase 2 by calling `workflow_progress` with `workflow_id: \"version_adoption\"` and `phase: \"adoption\"`; the UI will swap from the Phase 1 checklist to the generated adoption todo list.",
|
|
411
548
|
"- Before each Phase 2 checklist item, call `workflow_progress` with that `item_id` and `status: \"checking\"`.",
|
|
412
549
|
"- If Phase 1 finds actionable adoption work, complete safe local updates directly when your available tools allow it.",
|
|
550
|
+
"- For `adapt-*` items, compare each user artifact (agent settings, instructions, skills, scheduled task and watcher prompts) with the release changesets: removed tools, added, removed, or newly required parameters, changed tool descriptions, and built-in prompt guidance the artifact now duplicates or contradicts. Show the before and after text, apply an edit only after the user approves it, then re-read the artifact to validate.",
|
|
413
551
|
"- For risky or external side effects, propose an approval flow instead of acting silently.",
|
|
414
552
|
"- If Phase 1 finds no adoption work, explicitly say that Phase 2 is skipped and why.",
|
|
415
|
-
"- After each Phase 2 item, call `workflow_progress` with `status: \"done\"` and observed `validation_evidence`, or `status: \"skipped\"` / `status: \"needs_attention\"` as appropriate.",
|
|
553
|
+
"- After each Phase 2 item, call `workflow_progress` with `status: \"done\"` and observed `validation_evidence`, or `status: \"skipped\"` / `status: \"needs_attention\"` as appropriate. Add `needs_user: true` only when the user must decide or act; other unfinished or failed steps are retried automatically, up to 3 attempts per step.",
|
|
416
554
|
"- Before your final response, call `workflow_progress` with `workflow_id: \"version_adoption\"`, `phase: \"complete\"`, and a concise `summary`.",
|
|
417
555
|
"",
|
|
418
556
|
"Constraints:",
|
|
@@ -423,15 +561,81 @@ function buildAdoptionPrompt(state: Pick<VersionAdoptionState, "current_version"
|
|
|
423
561
|
"Phase 1 checklist:",
|
|
424
562
|
...PHASE_1_CHECKLIST.map((item) => `- ${item.id}: ${item.label} — Input: ${item.input} Output: ${item.output} Validation: ${item.validation} Reason: ${item.reason}`),
|
|
425
563
|
"Phase 2 adoption checklist:",
|
|
426
|
-
...
|
|
564
|
+
...plan.items.map((item) => `- ${item.id}: ${item.label}: Input: ${item.input} Output: ${item.output} Validation: ${item.validation} Reason: ${item.reason}${item.affected_files.length > 0 ? ` Affected: ${item.affected_files.join(", ")}.` : ""}`),
|
|
427
565
|
state.stale_prompt_risks.length > 0 ? `Stale-prompt risks: ${state.stale_prompt_risks.join(", ")}.` : "Stale-prompt risks: none detected in the checklist.",
|
|
566
|
+
...changesetSection,
|
|
428
567
|
].join("\n");
|
|
429
568
|
}
|
|
430
569
|
|
|
570
|
+
function buildAdoptionStepRetryPrompt(
|
|
571
|
+
state: Pick<VersionAdoptionState, "current_version" | "previous_version" | "is_first_adoption">,
|
|
572
|
+
phase: "impact_radius" | "adoption",
|
|
573
|
+
entry: VersionAdoptionChecklistItem,
|
|
574
|
+
): string {
|
|
575
|
+
const phaseLabel = state.is_first_adoption
|
|
576
|
+
? `current-version baseline ${state.current_version}`
|
|
577
|
+
: `upgrade from ${state.previous_version} to ${state.current_version}`;
|
|
578
|
+
const plan = computeAdoptionPlan(state.previous_version, state.current_version);
|
|
579
|
+
const changesetSection = phase === "adoption" && plan.source === "changeset" && plan.range
|
|
580
|
+
? ["", "Release changesets:", formatChangesetsForPrompt(plan.range.entries)]
|
|
581
|
+
: [];
|
|
582
|
+
return [
|
|
583
|
+
`Retry one Jarela version adoption step for ${phaseLabel}. The user asked to redo only this step; leave every other checklist item unchanged.`,
|
|
584
|
+
"",
|
|
585
|
+
`Step: ${entry.id} — ${entry.label}`,
|
|
586
|
+
`Input: ${entry.input}`,
|
|
587
|
+
`Output: ${entry.output}`,
|
|
588
|
+
`Validation: ${entry.validation}`,
|
|
589
|
+
`Reason: ${entry.reason}`,
|
|
590
|
+
...(entry.affected_files.length > 0 ? [`Affected: ${entry.affected_files.join(", ")}.`] : []),
|
|
591
|
+
"",
|
|
592
|
+
`- Call \`workflow_progress\` with \`workflow_id: "version_adoption"\`, \`phase: "${phase}"\`, \`item_id: "${entry.id}"\`, and \`status: "checking"\`.`,
|
|
593
|
+
"- Redo the step from its stated input. Prefer executable checks for code-verifiable behavior, and do not reuse earlier evidence: run the validation again.",
|
|
594
|
+
`- Then call \`workflow_progress\` for \`item_id: "${entry.id}"\` with \`status: "done"\` and newly observed \`validation_evidence\`, or \`status: "needs_attention"\` with the reason.`,
|
|
595
|
+
"- For `adapt-*` steps, show the before and after text and apply an edit only after the user approves it, then re-read the artifact.",
|
|
596
|
+
"- Do not create external issues, PRs, scheduled tasks, watcher updates, or credential changes unless the user explicitly approves.",
|
|
597
|
+
"- Keep the response concise: what you rechecked, the observed result, and any approval needed.",
|
|
598
|
+
...changesetSection,
|
|
599
|
+
].join("\n");
|
|
600
|
+
}
|
|
601
|
+
|
|
602
|
+
function retryAdoptionItem(
|
|
603
|
+
state: StoredVersionAdoptionState,
|
|
604
|
+
checklist: VersionAdoptionChecklistItem[],
|
|
605
|
+
itemId: string,
|
|
606
|
+
t: string,
|
|
607
|
+
): StoredVersionAdoptionState {
|
|
608
|
+
const index = checklist.findIndex((entry) => entry.id === itemId);
|
|
609
|
+
if (index === -1) throw new VersionAdoptionRequestError(`Unknown adoption checklist item: ${itemId}`);
|
|
610
|
+
if (itemId === "fetch-changes") {
|
|
611
|
+
throw new VersionAdoptionRequestError("fetch-changes is computed by the system and cannot be retried by the agent.");
|
|
612
|
+
}
|
|
613
|
+
if (!state.default_agent_id) {
|
|
614
|
+
return { ...state, status: "blocked_no_default_agent", phase: null, error: "No default agent is configured." };
|
|
615
|
+
}
|
|
616
|
+
const phase = PHASE_1_CHECKLIST.some((entry) => entry.id === itemId) ? "impact_radius" : "adoption";
|
|
617
|
+
const { validation_evidence: _previousEvidence, ...rest } = checklist[index];
|
|
618
|
+
checklist[index] = { ...rest, status: "checking", attempts: (rest.attempts ?? 0) + 1 };
|
|
619
|
+
const thread = getOrCreateAgentThread(state.default_agent_id);
|
|
620
|
+
return {
|
|
621
|
+
...state,
|
|
622
|
+
status: "running",
|
|
623
|
+
phase,
|
|
624
|
+
started_at: state.started_at ?? t,
|
|
625
|
+
completed_at: null,
|
|
626
|
+
dismissed_at: null,
|
|
627
|
+
checklist,
|
|
628
|
+
adoption_thread_id: thread.thread_id,
|
|
629
|
+
adoption_prompt: buildAdoptionStepRetryPrompt(state, phase, checklist[index]),
|
|
630
|
+
error: null,
|
|
631
|
+
};
|
|
632
|
+
}
|
|
633
|
+
|
|
431
634
|
function createState(currentVersion: string, previousVersion: string | null): StoredVersionAdoptionState {
|
|
432
635
|
const defaultAgent = getDefaultAgentConfig();
|
|
433
636
|
const isFirst = previousVersion === null;
|
|
434
|
-
const
|
|
637
|
+
const plan = computeAdoptionPlan(previousVersion, currentVersion);
|
|
638
|
+
const adoptionChecklist = plan.items;
|
|
435
639
|
const summaryInput = {
|
|
436
640
|
current_version: currentVersion,
|
|
437
641
|
previous_version: previousVersion,
|
|
@@ -450,7 +654,7 @@ function createState(currentVersion: string, previousVersion: string | null): St
|
|
|
450
654
|
started_at: null,
|
|
451
655
|
completed_at: null,
|
|
452
656
|
dismissed_at: null,
|
|
453
|
-
checklist: resolvedPhase1Checklist(
|
|
657
|
+
checklist: resolvedPhase1Checklist(plan, isFirst),
|
|
454
658
|
stale_prompt_risks: stalePromptRisks(adoptionChecklist),
|
|
455
659
|
summary: buildSummary(summaryInput, adoptionChecklist),
|
|
456
660
|
error: defaultAgent ? null : "No default agent is configured.",
|
|
@@ -475,6 +679,7 @@ export function getVersionAdoptionState(currentVersion = getCurrentVersion()): V
|
|
|
475
679
|
export function updateVersionAdoptionState(
|
|
476
680
|
action: "start" | "mark_done" | "dismiss" | "retry",
|
|
477
681
|
currentVersion = getCurrentVersion(),
|
|
682
|
+
itemId?: string,
|
|
478
683
|
): VersionAdoptionState {
|
|
479
684
|
const existing = parseStored();
|
|
480
685
|
const state = existing && existing.current_version === currentVersion
|
|
@@ -483,6 +688,10 @@ export function updateVersionAdoptionState(
|
|
|
483
688
|
const t = now();
|
|
484
689
|
const nextChecklist = state.checklist.map((entry) => ({ ...entry }));
|
|
485
690
|
|
|
691
|
+
if (action === "retry" && itemId) {
|
|
692
|
+
return persist(retryAdoptionItem(state, nextChecklist, itemId, t));
|
|
693
|
+
}
|
|
694
|
+
|
|
486
695
|
if (action === "start" || action === "retry") {
|
|
487
696
|
if (!state.default_agent_id) {
|
|
488
697
|
return persist({
|
|
@@ -497,7 +706,11 @@ export function updateVersionAdoptionState(
|
|
|
497
706
|
// still-open item (normally build-todo-list) as checking instead of
|
|
498
707
|
// hardcoding index 0, which would otherwise clobber that done status.
|
|
499
708
|
const firstOpen = nextChecklist.findIndex((entry) => entry.status !== "done" && entry.status !== "skipped");
|
|
500
|
-
if (firstOpen !== -1)
|
|
709
|
+
if (firstOpen !== -1) {
|
|
710
|
+
const entry = nextChecklist[firstOpen];
|
|
711
|
+
if (entry.status !== "checking") entry.attempts = (entry.attempts ?? 0) + 1;
|
|
712
|
+
entry.status = "checking";
|
|
713
|
+
}
|
|
501
714
|
const running = {
|
|
502
715
|
...state,
|
|
503
716
|
status: "running",
|
|
@@ -5,6 +5,8 @@ export interface WorkflowItem<Action extends string = string> {
|
|
|
5
5
|
label: string;
|
|
6
6
|
status: WorkflowItemStatus;
|
|
7
7
|
validation_evidence?: string;
|
|
8
|
+
/** Times the step has entered `checking`; auto- and manual retries add one each. */
|
|
9
|
+
attempts?: number;
|
|
8
10
|
reason: string;
|
|
9
11
|
affected_files: string[];
|
|
10
12
|
action?: Action;
|
|
@@ -59,6 +61,7 @@ export function updateWorkflowItem<State extends WorkflowState>(
|
|
|
59
61
|
return {
|
|
60
62
|
...item,
|
|
61
63
|
status,
|
|
64
|
+
...(status === "checking" && item.status !== "checking" ? { attempts: (item.attempts ?? 0) + 1 } : {}),
|
|
62
65
|
...(validationEvidence ? { validation_evidence: validationEvidence } : {}),
|
|
63
66
|
};
|
|
64
67
|
});
|
|
@@ -21,19 +21,12 @@ import { registerLangChainPackage } from "../packages/langchain-package";
|
|
|
21
21
|
import {
|
|
22
22
|
getMicrosoftAccessToken,
|
|
23
23
|
resolveMicrosoftAuth,
|
|
24
|
-
type MicrosoftAuth,
|
|
25
24
|
} from "@/lib/integrations/microsoft-oauth";
|
|
26
25
|
|
|
27
26
|
const msTodoReadTools = optionalTools<StructuredToolInterface>("@circuitwall/ms-todo-langchain", "msTodoReadTools");
|
|
28
27
|
const msTodoWriteTools = optionalTools<StructuredToolInterface>("@circuitwall/ms-todo-langchain", "msTodoWriteTools");
|
|
29
28
|
const setAuthResolver = optionalFunction<(resolver: () => unknown) => void>("@circuitwall/ms-todo-langchain", "setAuthResolver", () => undefined);
|
|
30
29
|
|
|
31
|
-
// Exposed for the integrations test endpoint, matching the gmail/outlook
|
|
32
|
-
// `_resolveXxxAuth` probe convention.
|
|
33
|
-
export function _resolveMsTodoAuth(): MicrosoftAuth | { error: string } {
|
|
34
|
-
return resolveMicrosoftAuth();
|
|
35
|
-
}
|
|
36
|
-
|
|
37
30
|
// Bridge: the package calls this on every tool invocation. We resolve
|
|
38
31
|
// the user's Microsoft credentials from Jarela's encrypted store (or env
|
|
39
32
|
// vars) and exchange them for a short-lived access token via the shared
|
|
@@ -46,7 +46,7 @@ export const memoryUpsertTool = tool(
|
|
|
46
46
|
{
|
|
47
47
|
name: "memory_upsert",
|
|
48
48
|
description:
|
|
49
|
-
"Store a durable, structured memory record for proactive semantic recall. Use namespace='facts' for information that should surface in future conversations. Store explicit user preferences, verified facts, decisions, constraints, and reusable project context; do not store transient chat details or secrets. Use an expiry for temporary facts, and status='archived' to soft-retire a record instead of deleting it.",
|
|
49
|
+
"Store a durable, structured memory record for proactive semantic recall. Use namespace='facts' for information that should surface in future conversations. Store explicit user preferences, verified facts, decisions, constraints, and reusable project context; do not store transient chat details or secrets. Use an expiry for temporary facts, and status='archived' to soft-retire a record instead of deleting it. Save proactively in the same turn the information appears so other agents can use it immediately; do not defer to background compaction.",
|
|
50
50
|
schema: z.object({
|
|
51
51
|
namespace: z.string().describe("Memory namespace. Use 'facts' for proactively recalled durable knowledge."),
|
|
52
52
|
key: z.string().describe("Stable, descriptive key such as 'user-research-preference' or 'project-auth-decision'."),
|
|
@@ -30,6 +30,7 @@ const workflowProgressSchema = z.object({
|
|
|
30
30
|
summary: z.string().max(300).optional().describe("Optional short workflow summary shown in the chat checklist."),
|
|
31
31
|
detail: z.string().max(300).optional().describe("Optional live progress text to stream immediately to the UI."),
|
|
32
32
|
needs_attention_reason: z.string().max(300).optional().describe("Optional reason shown when the item or workflow needs user attention."),
|
|
33
|
+
needs_user: z.boolean().optional().describe("For version_adoption only: set true when item_id cannot progress without the user's input or approval."),
|
|
33
34
|
});
|
|
34
35
|
|
|
35
36
|
function versionAdoptionPhase(phase: string | undefined): "impact_radius" | "adoption" | "complete" | undefined {
|
|
@@ -132,6 +133,7 @@ export const workflowProgressTool = tool(
|
|
|
132
133
|
name: "workflow_progress",
|
|
133
134
|
description:
|
|
134
135
|
"Report structured progress for a substantial multi-step task. Use only when the task has several dependent phases, likely spans turns, or needs explicit verification; skip simple tasks and work already covered by native tool progress. For agent-created workflows, send the full current items snapshot on every call and reuse the same workflow_id. Keep secrets and private data out of workflow fields. Mark items done only with observed validation evidence; use needs_attention for blockers; phase=complete requires every item done or skipped. " +
|
|
136
|
+
"A rejected update, or a step left checking or needs_attention at the end of the turn, is retried automatically (at most 3 attempts per step); set needs_user=true on a step that only the user can unblock. " +
|
|
135
137
|
"Every item needs input, expected output, and concrete validation criteria. Completed items also need observed validation_evidence. The system-owned version_adoption workflow has its own durable checklist.",
|
|
136
138
|
schema: workflowProgressSchema,
|
|
137
139
|
},
|
|
@@ -5,10 +5,7 @@ import {
|
|
|
5
5
|
registeredTools,
|
|
6
6
|
registeredNames,
|
|
7
7
|
registeredCategory,
|
|
8
|
-
registeredCapability,
|
|
9
|
-
registeredGroup,
|
|
10
8
|
registeredIntegration,
|
|
11
|
-
groupForCategory,
|
|
12
9
|
type Capability,
|
|
13
10
|
type ToolCategory,
|
|
14
11
|
type ToolGroup,
|
|
@@ -30,7 +27,7 @@ import { isBasicToolCategory, normalizeToolCategory } from "./categories";
|
|
|
30
27
|
import { isAlwaysOnTool } from "./always-on";
|
|
31
28
|
import { getIntegrationReadiness } from "@/lib/health/probe-cache";
|
|
32
29
|
import { getInjectedSubprocessEnv } from "@/lib/env/allowlist";
|
|
33
|
-
import { getAllTools
|
|
30
|
+
import { getAllTools } from "./runtime";
|
|
34
31
|
|
|
35
32
|
export type ToolSource = "builtin" | "external" | "mcp";
|
|
36
33
|
export type ToolStatus = "enabled" | "disabled" | "unavailable";
|
|
@@ -94,10 +91,6 @@ export function getToolSource(name: string): ToolSource {
|
|
|
94
91
|
return "mcp";
|
|
95
92
|
}
|
|
96
93
|
|
|
97
|
-
export function getToolCapability(name: string): Capability {
|
|
98
|
-
return registeredCapability(name) ?? "execute";
|
|
99
|
-
}
|
|
100
|
-
|
|
101
94
|
export function getToolCategory(name: string): ToolCategory {
|
|
102
95
|
const builtin = registeredCategory(name);
|
|
103
96
|
if (builtin) return builtin;
|
|
@@ -108,16 +101,6 @@ export function getToolCategory(name: string): ToolCategory {
|
|
|
108
101
|
return normalizeToolCategory(mcpCat) as ToolCategory;
|
|
109
102
|
}
|
|
110
103
|
|
|
111
|
-
export function getToolGroup(name: string): ToolGroup {
|
|
112
|
-
const cat = getToolCategory(name);
|
|
113
|
-
if (cat === "MCP") return null;
|
|
114
|
-
const builtinGroup = registeredGroup(name);
|
|
115
|
-
if (builtinGroup !== undefined) return builtinGroup;
|
|
116
|
-
const mcpGroup = getMcpToolMeta(name)?.group;
|
|
117
|
-
if (mcpGroup !== undefined) return mcpGroup as ToolGroup;
|
|
118
|
-
return groupForCategory(cat);
|
|
119
|
-
}
|
|
120
|
-
|
|
121
104
|
export function getToolCredentialsRequired(name: string): string[] {
|
|
122
105
|
if (registeredCategory(name)) return [];
|
|
123
106
|
const ext = loadExternal().credentialsRequired.get(name);
|
|
@@ -160,13 +143,6 @@ export function getDefaultAgentToolNames(): string[] {
|
|
|
160
143
|
.map((t) => t.name);
|
|
161
144
|
}
|
|
162
145
|
|
|
163
|
-
export async function getDefaultAgentToolNamesAsync(): Promise<string[]> {
|
|
164
|
-
const tools = await getAllToolsAsync();
|
|
165
|
-
return tools
|
|
166
|
-
.filter((t) => isDefaultBasicTool(t.name, getToolCategory(t.name)))
|
|
167
|
-
.map((t) => t.name);
|
|
168
|
-
}
|
|
169
|
-
|
|
170
146
|
function isDefaultBasicTool(name: string, category: string): boolean {
|
|
171
147
|
return isBasicToolCategory(category) && !DEFAULT_EXCLUDED_BASIC_TOOLS.has(name);
|
|
172
148
|
}
|
package/lib/triggers/registry.ts
CHANGED
|
@@ -14,10 +14,6 @@ export function registerTriggerHandler(handler: TriggerHandler): void {
|
|
|
14
14
|
state.handlers.set(handler.kind, handler);
|
|
15
15
|
}
|
|
16
16
|
|
|
17
|
-
export function getTriggerHandler(kind: string): TriggerHandler | undefined {
|
|
18
|
-
return state.handlers.get(kind);
|
|
19
|
-
}
|
|
20
|
-
|
|
21
17
|
export function listTriggerHandlers(): TriggerHandler[] {
|
|
22
18
|
return Array.from(state.handlers.values());
|
|
23
19
|
}
|