@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
|
@@ -230,85 +230,6 @@ if ((typeof exports.default === 'function' || typeof exports.default === 'object
|
|
|
230
230
|
} //# sourceMappingURL=link.js.map
|
|
231
231
|
|
|
232
232
|
|
|
233
|
-
/***/ }),
|
|
234
|
-
|
|
235
|
-
/***/ 3067:
|
|
236
|
-
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
237
|
-
|
|
238
|
-
"use strict";
|
|
239
|
-
__webpack_require__.r(__webpack_exports__);
|
|
240
|
-
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
241
|
-
/* harmony export */ __next_app__: () => (/* binding */ __next_app__),
|
|
242
|
-
/* harmony export */ handler: () => (/* binding */ handler),
|
|
243
|
-
/* harmony export */ routeModule: () => (/* binding */ routeModule)
|
|
244
|
-
/* harmony export */ });
|
|
245
|
-
/* harmony import */ var next_dist_server_app_render_module_loading_instrument_module_getter__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(21635);
|
|
246
|
-
/* harmony import */ var next_dist_build_templates_app_page_runtime__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(86315);
|
|
247
|
-
/* harmony import */ var next_dist_server_app_render_interop_default__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(1020);
|
|
248
|
-
/* harmony import */ var next_dist_server_app_render_entry_base__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(61287);
|
|
249
|
-
/* harmony import */ var next_dist_server_app_render_entry_base__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(next_dist_server_app_render_entry_base__WEBPACK_IMPORTED_MODULE_3__);
|
|
250
|
-
/* harmony reexport (unknown) */ var __WEBPACK_REEXPORT_OBJECT__ = {};
|
|
251
|
-
/* harmony reexport (unknown) */ for(const __WEBPACK_IMPORT_KEY__ in next_dist_server_app_render_entry_base__WEBPACK_IMPORTED_MODULE_3__) if(["default","__next_app__","routeModule","handler"].indexOf(__WEBPACK_IMPORT_KEY__) < 0) __WEBPACK_REEXPORT_OBJECT__[__WEBPACK_IMPORT_KEY__] = () => next_dist_server_app_render_entry_base__WEBPACK_IMPORTED_MODULE_3__[__WEBPACK_IMPORT_KEY__]
|
|
252
|
-
/* harmony reexport (unknown) */ __webpack_require__.d(__webpack_exports__, __WEBPACK_REEXPORT_OBJECT__);
|
|
253
|
-
|
|
254
|
-
const module0 = (0,next_dist_server_app_render_module_loading_instrument_module_getter__WEBPACK_IMPORTED_MODULE_0__/* .instrumentModuleGetter */ .p)(() => Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 32056)));
|
|
255
|
-
const module1 = (0,next_dist_server_app_render_module_loading_instrument_module_getter__WEBPACK_IMPORTED_MODULE_0__/* .instrumentModuleGetter */ .p)(() => Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 95547, 23)));
|
|
256
|
-
const module2 = (0,next_dist_server_app_render_module_loading_instrument_module_getter__WEBPACK_IMPORTED_MODULE_0__/* .instrumentModuleGetter */ .p)(() => Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 55091, 23)));
|
|
257
|
-
const module3 = (0,next_dist_server_app_render_module_loading_instrument_module_getter__WEBPACK_IMPORTED_MODULE_0__/* .instrumentModuleGetter */ .p)(() => Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 45270, 23)));
|
|
258
|
-
const module4 = (0,next_dist_server_app_render_module_loading_instrument_module_getter__WEBPACK_IMPORTED_MODULE_0__/* .instrumentModuleGetter */ .p)(() => Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 28193, 23)));
|
|
259
|
-
const page5 = (0,next_dist_server_app_render_module_loading_instrument_module_getter__WEBPACK_IMPORTED_MODULE_0__/* .instrumentModuleGetter */ .p)(() => Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 99647)));
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
const tree = {
|
|
263
|
-
children: [
|
|
264
|
-
'',
|
|
265
|
-
{
|
|
266
|
-
children: ['__PAGE__', {}, {
|
|
267
|
-
page: [page5, "/home/runner/work/jarela/jarela/app/page.tsx"],
|
|
268
|
-
metadata: {
|
|
269
|
-
icon: [(async (props) => (await (0,next_dist_server_app_render_module_loading_instrument_module_getter__WEBPACK_IMPORTED_MODULE_0__/* .instrumentModuleGetter */ .p)(() => Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 86364)))()).default(props))],
|
|
270
|
-
apple: [],
|
|
271
|
-
openGraph: [],
|
|
272
|
-
twitter: [],
|
|
273
|
-
manifest: "/manifest.webmanifest"
|
|
274
|
-
}
|
|
275
|
-
}]
|
|
276
|
-
},
|
|
277
|
-
{
|
|
278
|
-
'layout': [module0, "/home/runner/work/jarela/jarela/app/layout.tsx"],
|
|
279
|
-
'global-error': [module1, "next/dist/client/components/builtin/global-error.js"],
|
|
280
|
-
'not-found': [module2, "next/dist/client/components/builtin/not-found.js"],
|
|
281
|
-
'forbidden': [module3, "next/dist/client/components/builtin/forbidden.js"],
|
|
282
|
-
'unauthorized': [module4, "next/dist/client/components/builtin/unauthorized.js"],
|
|
283
|
-
metadata: {
|
|
284
|
-
icon: [(async (props) => (await (0,next_dist_server_app_render_module_loading_instrument_module_getter__WEBPACK_IMPORTED_MODULE_0__/* .instrumentModuleGetter */ .p)(() => Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 86364)))()).default(props))],
|
|
285
|
-
apple: [],
|
|
286
|
-
openGraph: [],
|
|
287
|
-
twitter: [],
|
|
288
|
-
manifest: "/manifest.webmanifest"
|
|
289
|
-
}
|
|
290
|
-
},
|
|
291
|
-
[]
|
|
292
|
-
]
|
|
293
|
-
}.children;
|
|
294
|
-
const __next_app_require__ = __webpack_require__
|
|
295
|
-
const __next_app_load_chunk__ = () => Promise.resolve()
|
|
296
|
-
const entrypoint = (0,next_dist_build_templates_app_page_runtime__WEBPACK_IMPORTED_MODULE_1__/* .createAppPageEntrypoint */ .H)({
|
|
297
|
-
tree,
|
|
298
|
-
page: "/page",
|
|
299
|
-
pathname: "/",
|
|
300
|
-
require: __next_app_require__,
|
|
301
|
-
loadChunk: __next_app_load_chunk__,
|
|
302
|
-
interopDefault: next_dist_server_app_render_interop_default__WEBPACK_IMPORTED_MODULE_2__/* .interopDefault */ .T
|
|
303
|
-
});
|
|
304
|
-
const __next_app__ = entrypoint.__next_app__;
|
|
305
|
-
const routeModule = entrypoint.routeModule;
|
|
306
|
-
const handler = entrypoint.handler;
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
//# sourceMappingURL=app-page.js.map
|
|
310
|
-
|
|
311
|
-
|
|
312
233
|
/***/ }),
|
|
313
234
|
|
|
314
235
|
/***/ 3295:
|
|
@@ -2948,6 +2869,85 @@ module.exports = require("undici");
|
|
|
2948
2869
|
"use strict";
|
|
2949
2870
|
module.exports = require("next/dist/compiled/next-server/app-page.runtime.prod.js");
|
|
2950
2871
|
|
|
2872
|
+
/***/ }),
|
|
2873
|
+
|
|
2874
|
+
/***/ 13297:
|
|
2875
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
2876
|
+
|
|
2877
|
+
"use strict";
|
|
2878
|
+
__webpack_require__.r(__webpack_exports__);
|
|
2879
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
2880
|
+
/* harmony export */ __next_app__: () => (/* binding */ __next_app__),
|
|
2881
|
+
/* harmony export */ handler: () => (/* binding */ handler),
|
|
2882
|
+
/* harmony export */ routeModule: () => (/* binding */ routeModule)
|
|
2883
|
+
/* harmony export */ });
|
|
2884
|
+
/* harmony import */ var next_dist_server_app_render_module_loading_instrument_module_getter__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(21635);
|
|
2885
|
+
/* harmony import */ var next_dist_build_templates_app_page_runtime__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(86315);
|
|
2886
|
+
/* harmony import */ var next_dist_server_app_render_interop_default__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(1020);
|
|
2887
|
+
/* harmony import */ var next_dist_server_app_render_entry_base__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(61287);
|
|
2888
|
+
/* harmony import */ var next_dist_server_app_render_entry_base__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(next_dist_server_app_render_entry_base__WEBPACK_IMPORTED_MODULE_3__);
|
|
2889
|
+
/* harmony reexport (unknown) */ var __WEBPACK_REEXPORT_OBJECT__ = {};
|
|
2890
|
+
/* harmony reexport (unknown) */ for(const __WEBPACK_IMPORT_KEY__ in next_dist_server_app_render_entry_base__WEBPACK_IMPORTED_MODULE_3__) if(["default","__next_app__","routeModule","handler"].indexOf(__WEBPACK_IMPORT_KEY__) < 0) __WEBPACK_REEXPORT_OBJECT__[__WEBPACK_IMPORT_KEY__] = () => next_dist_server_app_render_entry_base__WEBPACK_IMPORTED_MODULE_3__[__WEBPACK_IMPORT_KEY__]
|
|
2891
|
+
/* harmony reexport (unknown) */ __webpack_require__.d(__webpack_exports__, __WEBPACK_REEXPORT_OBJECT__);
|
|
2892
|
+
|
|
2893
|
+
const module0 = (0,next_dist_server_app_render_module_loading_instrument_module_getter__WEBPACK_IMPORTED_MODULE_0__/* .instrumentModuleGetter */ .p)(() => Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 32056)));
|
|
2894
|
+
const module1 = (0,next_dist_server_app_render_module_loading_instrument_module_getter__WEBPACK_IMPORTED_MODULE_0__/* .instrumentModuleGetter */ .p)(() => Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 95547, 23)));
|
|
2895
|
+
const module2 = (0,next_dist_server_app_render_module_loading_instrument_module_getter__WEBPACK_IMPORTED_MODULE_0__/* .instrumentModuleGetter */ .p)(() => Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 55091, 23)));
|
|
2896
|
+
const module3 = (0,next_dist_server_app_render_module_loading_instrument_module_getter__WEBPACK_IMPORTED_MODULE_0__/* .instrumentModuleGetter */ .p)(() => Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 45270, 23)));
|
|
2897
|
+
const module4 = (0,next_dist_server_app_render_module_loading_instrument_module_getter__WEBPACK_IMPORTED_MODULE_0__/* .instrumentModuleGetter */ .p)(() => Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 28193, 23)));
|
|
2898
|
+
const page5 = (0,next_dist_server_app_render_module_loading_instrument_module_getter__WEBPACK_IMPORTED_MODULE_0__/* .instrumentModuleGetter */ .p)(() => Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 99647)));
|
|
2899
|
+
|
|
2900
|
+
|
|
2901
|
+
const tree = {
|
|
2902
|
+
children: [
|
|
2903
|
+
'',
|
|
2904
|
+
{
|
|
2905
|
+
children: ['__PAGE__', {}, {
|
|
2906
|
+
page: [page5, "/home/runner/work/jarela/jarela/app/page.tsx"],
|
|
2907
|
+
metadata: {
|
|
2908
|
+
icon: [(async (props) => (await (0,next_dist_server_app_render_module_loading_instrument_module_getter__WEBPACK_IMPORTED_MODULE_0__/* .instrumentModuleGetter */ .p)(() => Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 86364)))()).default(props))],
|
|
2909
|
+
apple: [],
|
|
2910
|
+
openGraph: [],
|
|
2911
|
+
twitter: [],
|
|
2912
|
+
manifest: "/manifest.webmanifest"
|
|
2913
|
+
}
|
|
2914
|
+
}]
|
|
2915
|
+
},
|
|
2916
|
+
{
|
|
2917
|
+
'layout': [module0, "/home/runner/work/jarela/jarela/app/layout.tsx"],
|
|
2918
|
+
'global-error': [module1, "next/dist/client/components/builtin/global-error.js"],
|
|
2919
|
+
'not-found': [module2, "next/dist/client/components/builtin/not-found.js"],
|
|
2920
|
+
'forbidden': [module3, "next/dist/client/components/builtin/forbidden.js"],
|
|
2921
|
+
'unauthorized': [module4, "next/dist/client/components/builtin/unauthorized.js"],
|
|
2922
|
+
metadata: {
|
|
2923
|
+
icon: [(async (props) => (await (0,next_dist_server_app_render_module_loading_instrument_module_getter__WEBPACK_IMPORTED_MODULE_0__/* .instrumentModuleGetter */ .p)(() => Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 86364)))()).default(props))],
|
|
2924
|
+
apple: [],
|
|
2925
|
+
openGraph: [],
|
|
2926
|
+
twitter: [],
|
|
2927
|
+
manifest: "/manifest.webmanifest"
|
|
2928
|
+
}
|
|
2929
|
+
},
|
|
2930
|
+
[]
|
|
2931
|
+
]
|
|
2932
|
+
}.children;
|
|
2933
|
+
const __next_app_require__ = __webpack_require__
|
|
2934
|
+
const __next_app_load_chunk__ = () => Promise.resolve()
|
|
2935
|
+
const entrypoint = (0,next_dist_build_templates_app_page_runtime__WEBPACK_IMPORTED_MODULE_1__/* .createAppPageEntrypoint */ .H)({
|
|
2936
|
+
tree,
|
|
2937
|
+
page: "/page",
|
|
2938
|
+
pathname: "/",
|
|
2939
|
+
require: __next_app_require__,
|
|
2940
|
+
loadChunk: __next_app_load_chunk__,
|
|
2941
|
+
interopDefault: next_dist_server_app_render_interop_default__WEBPACK_IMPORTED_MODULE_2__/* .interopDefault */ .T
|
|
2942
|
+
});
|
|
2943
|
+
const __next_app__ = entrypoint.__next_app__;
|
|
2944
|
+
const routeModule = entrypoint.routeModule;
|
|
2945
|
+
const handler = entrypoint.handler;
|
|
2946
|
+
|
|
2947
|
+
|
|
2948
|
+
//# sourceMappingURL=app-page.js.map
|
|
2949
|
+
|
|
2950
|
+
|
|
2951
2951
|
/***/ }),
|
|
2952
2952
|
|
|
2953
2953
|
/***/ 14116:
|
|
@@ -3042,7 +3042,7 @@ module.exports = require("node:http");
|
|
|
3042
3042
|
/***/ 38084:
|
|
3043
3043
|
/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
|
|
3044
3044
|
|
|
3045
|
-
Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__,
|
|
3045
|
+
Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 90801));
|
|
3046
3046
|
;
|
|
3047
3047
|
Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 26751));
|
|
3048
3048
|
|
|
@@ -3306,7 +3306,199 @@ module.exports = require("node:url");
|
|
|
3306
3306
|
|
|
3307
3307
|
/***/ }),
|
|
3308
3308
|
|
|
3309
|
-
/***/
|
|
3309
|
+
/***/ 75729:
|
|
3310
|
+
/***/ ((module, exports, __webpack_require__) => {
|
|
3311
|
+
|
|
3312
|
+
"use strict";
|
|
3313
|
+
|
|
3314
|
+
Object.defineProperty(exports, "__esModule", ({
|
|
3315
|
+
value: true
|
|
3316
|
+
}));
|
|
3317
|
+
Object.defineProperty(exports, "addBasePath", ({
|
|
3318
|
+
enumerable: true,
|
|
3319
|
+
get: function() {
|
|
3320
|
+
return addBasePath;
|
|
3321
|
+
}
|
|
3322
|
+
}));
|
|
3323
|
+
const _addpathprefix = __webpack_require__(71000);
|
|
3324
|
+
const _normalizetrailingslash = __webpack_require__(34956);
|
|
3325
|
+
const basePath = false || '';
|
|
3326
|
+
function addBasePath(path, required) {
|
|
3327
|
+
return (0, _normalizetrailingslash.normalizePathTrailingSlash)( false ? 0 : (0, _addpathprefix.addPathPrefix)(path, basePath));
|
|
3328
|
+
}
|
|
3329
|
+
if ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {
|
|
3330
|
+
Object.defineProperty(exports.default, '__esModule', {
|
|
3331
|
+
value: true
|
|
3332
|
+
});
|
|
3333
|
+
Object.assign(exports.default, exports);
|
|
3334
|
+
module.exports = exports.default;
|
|
3335
|
+
} //# sourceMappingURL=add-base-path.js.map
|
|
3336
|
+
|
|
3337
|
+
|
|
3338
|
+
/***/ }),
|
|
3339
|
+
|
|
3340
|
+
/***/ 75919:
|
|
3341
|
+
/***/ ((module) => {
|
|
3342
|
+
|
|
3343
|
+
"use strict";
|
|
3344
|
+
module.exports = require("node:worker_threads");
|
|
3345
|
+
|
|
3346
|
+
/***/ }),
|
|
3347
|
+
|
|
3348
|
+
/***/ 76760:
|
|
3349
|
+
/***/ ((module) => {
|
|
3350
|
+
|
|
3351
|
+
"use strict";
|
|
3352
|
+
module.exports = require("node:path");
|
|
3353
|
+
|
|
3354
|
+
/***/ }),
|
|
3355
|
+
|
|
3356
|
+
/***/ 77598:
|
|
3357
|
+
/***/ ((module) => {
|
|
3358
|
+
|
|
3359
|
+
"use strict";
|
|
3360
|
+
module.exports = require("node:crypto");
|
|
3361
|
+
|
|
3362
|
+
/***/ }),
|
|
3363
|
+
|
|
3364
|
+
/***/ 79428:
|
|
3365
|
+
/***/ ((module) => {
|
|
3366
|
+
|
|
3367
|
+
"use strict";
|
|
3368
|
+
module.exports = require("buffer");
|
|
3369
|
+
|
|
3370
|
+
/***/ }),
|
|
3371
|
+
|
|
3372
|
+
/***/ 79925:
|
|
3373
|
+
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
|
3374
|
+
|
|
3375
|
+
"use strict";
|
|
3376
|
+
// Format function modified from nodejs
|
|
3377
|
+
// Copyright Joyent, Inc. and other Node contributors.
|
|
3378
|
+
//
|
|
3379
|
+
// Permission is hereby granted, free of charge, to any person obtaining a
|
|
3380
|
+
// copy of this software and associated documentation files (the
|
|
3381
|
+
// "Software"), to deal in the Software without restriction, including
|
|
3382
|
+
// without limitation the rights to use, copy, modify, merge, publish,
|
|
3383
|
+
// distribute, sublicense, and/or sell copies of the Software, and to permit
|
|
3384
|
+
// persons to whom the Software is furnished to do so, subject to the
|
|
3385
|
+
// following conditions:
|
|
3386
|
+
//
|
|
3387
|
+
// The above copyright notice and this permission notice shall be included
|
|
3388
|
+
// in all copies or substantial portions of the Software.
|
|
3389
|
+
//
|
|
3390
|
+
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
|
3391
|
+
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
3392
|
+
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
|
|
3393
|
+
// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
|
|
3394
|
+
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
|
3395
|
+
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
|
|
3396
|
+
// USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
3397
|
+
|
|
3398
|
+
Object.defineProperty(exports, "__esModule", ({
|
|
3399
|
+
value: true
|
|
3400
|
+
}));
|
|
3401
|
+
0 && (0);
|
|
3402
|
+
function _export(target, all) {
|
|
3403
|
+
for(var name in all)Object.defineProperty(target, name, {
|
|
3404
|
+
enumerable: true,
|
|
3405
|
+
get: all[name]
|
|
3406
|
+
});
|
|
3407
|
+
}
|
|
3408
|
+
_export(exports, {
|
|
3409
|
+
formatUrl: function() {
|
|
3410
|
+
return formatUrl;
|
|
3411
|
+
},
|
|
3412
|
+
formatWithValidation: function() {
|
|
3413
|
+
return formatWithValidation;
|
|
3414
|
+
},
|
|
3415
|
+
urlObjectKeys: function() {
|
|
3416
|
+
return urlObjectKeys;
|
|
3417
|
+
}
|
|
3418
|
+
});
|
|
3419
|
+
const _interop_require_wildcard = __webpack_require__(24814);
|
|
3420
|
+
const _querystring = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(90485));
|
|
3421
|
+
const slashedProtocols = /https?|ftp|gopher|file/;
|
|
3422
|
+
function formatUrl(urlObj) {
|
|
3423
|
+
let { auth, hostname } = urlObj;
|
|
3424
|
+
let protocol = urlObj.protocol || '';
|
|
3425
|
+
let pathname = urlObj.pathname || '';
|
|
3426
|
+
let hash = urlObj.hash || '';
|
|
3427
|
+
let query = urlObj.query || '';
|
|
3428
|
+
let host = false;
|
|
3429
|
+
auth = auth ? encodeURIComponent(auth).replace(/%3A/i, ':') + '@' : '';
|
|
3430
|
+
if (urlObj.host) {
|
|
3431
|
+
host = auth + urlObj.host;
|
|
3432
|
+
} else if (hostname) {
|
|
3433
|
+
host = auth + (~hostname.indexOf(':') ? `[${hostname}]` : hostname);
|
|
3434
|
+
if (urlObj.port) {
|
|
3435
|
+
host += ':' + urlObj.port;
|
|
3436
|
+
}
|
|
3437
|
+
}
|
|
3438
|
+
if (query && typeof query === 'object') {
|
|
3439
|
+
query = String(_querystring.urlQueryToSearchParams(query));
|
|
3440
|
+
}
|
|
3441
|
+
let search = urlObj.search || query && `?${query}` || '';
|
|
3442
|
+
if (protocol && !protocol.endsWith(':')) protocol += ':';
|
|
3443
|
+
if (urlObj.slashes || (!protocol || slashedProtocols.test(protocol)) && host !== false) {
|
|
3444
|
+
host = '//' + (host || '');
|
|
3445
|
+
if (pathname && pathname[0] !== '/') pathname = '/' + pathname;
|
|
3446
|
+
} else if (!host) {
|
|
3447
|
+
host = '';
|
|
3448
|
+
}
|
|
3449
|
+
if (hash && hash[0] !== '#') hash = '#' + hash;
|
|
3450
|
+
if (search && search[0] !== '?') search = '?' + search;
|
|
3451
|
+
pathname = pathname.replace(/[?#]/g, encodeURIComponent);
|
|
3452
|
+
search = search.replace('#', '%23');
|
|
3453
|
+
return `${protocol}${host}${pathname}${search}${hash}`;
|
|
3454
|
+
}
|
|
3455
|
+
const urlObjectKeys = [
|
|
3456
|
+
'auth',
|
|
3457
|
+
'hash',
|
|
3458
|
+
'host',
|
|
3459
|
+
'hostname',
|
|
3460
|
+
'href',
|
|
3461
|
+
'path',
|
|
3462
|
+
'pathname',
|
|
3463
|
+
'port',
|
|
3464
|
+
'protocol',
|
|
3465
|
+
'query',
|
|
3466
|
+
'search',
|
|
3467
|
+
'slashes'
|
|
3468
|
+
];
|
|
3469
|
+
function formatWithValidation(url) {
|
|
3470
|
+
if (false) {}
|
|
3471
|
+
return formatUrl(url);
|
|
3472
|
+
} //# sourceMappingURL=format-url.js.map
|
|
3473
|
+
|
|
3474
|
+
|
|
3475
|
+
/***/ }),
|
|
3476
|
+
|
|
3477
|
+
/***/ 80099:
|
|
3478
|
+
/***/ ((module) => {
|
|
3479
|
+
|
|
3480
|
+
"use strict";
|
|
3481
|
+
module.exports = require("node:sqlite");
|
|
3482
|
+
|
|
3483
|
+
/***/ }),
|
|
3484
|
+
|
|
3485
|
+
/***/ 80481:
|
|
3486
|
+
/***/ ((module) => {
|
|
3487
|
+
|
|
3488
|
+
"use strict";
|
|
3489
|
+
module.exports = require("node:readline");
|
|
3490
|
+
|
|
3491
|
+
/***/ }),
|
|
3492
|
+
|
|
3493
|
+
/***/ 81630:
|
|
3494
|
+
/***/ ((module) => {
|
|
3495
|
+
|
|
3496
|
+
"use strict";
|
|
3497
|
+
module.exports = require("http");
|
|
3498
|
+
|
|
3499
|
+
/***/ }),
|
|
3500
|
+
|
|
3501
|
+
/***/ 90801:
|
|
3310
3502
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
3311
3503
|
|
|
3312
3504
|
"use strict";
|
|
@@ -4443,6 +4635,26 @@ function useSSE(onDone) {
|
|
|
4443
4635
|
// Cleared on every new start()/attach().
|
|
4444
4636
|
const [authError, setAuthError] = (0,react.useState)(null);
|
|
4445
4637
|
const abortRef = (0,react.useRef)(null);
|
|
4638
|
+
// Synchronous view of whether start()/attach() owns a live stream, and when
|
|
4639
|
+
// the last one settled. React's `streaming` lags a render behind, so the
|
|
4640
|
+
// activity poller reads this to avoid aborting a stream that just opened
|
|
4641
|
+
// or re-attaching a run whose stream has only just ended.
|
|
4642
|
+
const liveRef = (0,react.useRef)({
|
|
4643
|
+
busy: false,
|
|
4644
|
+
settledAt: 0
|
|
4645
|
+
});
|
|
4646
|
+
const markLive = (0,react.useCallback)(()=>{
|
|
4647
|
+
liveRef.current.busy = true;
|
|
4648
|
+
}, []);
|
|
4649
|
+
const markSettled = (0,react.useCallback)((ctrl)=>{
|
|
4650
|
+
if (ctrl && abortRef.current !== ctrl) return;
|
|
4651
|
+
liveRef.current = {
|
|
4652
|
+
busy: false,
|
|
4653
|
+
settledAt: Date.now()
|
|
4654
|
+
};
|
|
4655
|
+
}, []);
|
|
4656
|
+
const isLive = (0,react.useCallback)(()=>liveRef.current.busy, []);
|
|
4657
|
+
const lastSettledAt = (0,react.useCallback)(()=>liveRef.current.settledAt, []);
|
|
4446
4658
|
const threadIdRef = (0,react.useRef)(null);
|
|
4447
4659
|
// ADR-0080 — id of the steering message currently armed for a possible
|
|
4448
4660
|
// continuation break, or null. Set eagerly (before the steer PATCH
|
|
@@ -4604,6 +4816,7 @@ function useSSE(onDone) {
|
|
|
4604
4816
|
abortRef.current?.abort();
|
|
4605
4817
|
const ctrl = new AbortController();
|
|
4606
4818
|
abortRef.current = ctrl;
|
|
4819
|
+
markLive();
|
|
4607
4820
|
threadIdRef.current = threadId;
|
|
4608
4821
|
resetBuffer();
|
|
4609
4822
|
setStreaming(true);
|
|
@@ -4651,10 +4864,13 @@ function useSSE(onDone) {
|
|
|
4651
4864
|
// them.
|
|
4652
4865
|
setStreaming(false);
|
|
4653
4866
|
closeActivity();
|
|
4867
|
+
markSettled(ctrl);
|
|
4654
4868
|
}
|
|
4655
4869
|
}, [
|
|
4656
4870
|
closeActivity,
|
|
4657
4871
|
consume,
|
|
4872
|
+
markLive,
|
|
4873
|
+
markSettled,
|
|
4658
4874
|
openActivity,
|
|
4659
4875
|
resetBuffer
|
|
4660
4876
|
]);
|
|
@@ -4679,11 +4895,13 @@ function useSSE(onDone) {
|
|
|
4679
4895
|
// start()/attach() — same pattern as the `done` branch in consume().
|
|
4680
4896
|
closeActivity();
|
|
4681
4897
|
abortRef.current?.abort();
|
|
4898
|
+
markSettled(null);
|
|
4682
4899
|
steeredContinuationIdRef.current = null;
|
|
4683
4900
|
onDone?.();
|
|
4684
4901
|
}, [
|
|
4685
4902
|
closeActivity,
|
|
4686
4903
|
flushPending,
|
|
4904
|
+
markSettled,
|
|
4687
4905
|
onDone
|
|
4688
4906
|
]);
|
|
4689
4907
|
// Attach to an in-flight run for the given thread (server-side run kept
|
|
@@ -4697,6 +4915,7 @@ function useSSE(onDone) {
|
|
|
4697
4915
|
abortRef.current?.abort();
|
|
4698
4916
|
const ctrl = new AbortController();
|
|
4699
4917
|
abortRef.current = ctrl;
|
|
4918
|
+
markLive();
|
|
4700
4919
|
threadIdRef.current = threadId;
|
|
4701
4920
|
resetBuffer();
|
|
4702
4921
|
setStreaming(true);
|
|
@@ -4724,10 +4943,13 @@ function useSSE(onDone) {
|
|
|
4724
4943
|
// hangs in the composer and the "Reconnecting…" badge never clears.
|
|
4725
4944
|
setStreaming(false);
|
|
4726
4945
|
closeActivity();
|
|
4946
|
+
markSettled(ctrl);
|
|
4727
4947
|
}
|
|
4728
4948
|
}, [
|
|
4729
4949
|
closeActivity,
|
|
4730
4950
|
consume,
|
|
4951
|
+
markLive,
|
|
4952
|
+
markSettled,
|
|
4731
4953
|
onDone,
|
|
4732
4954
|
openActivity,
|
|
4733
4955
|
resetBuffer
|
|
@@ -4772,6 +4994,8 @@ function useSSE(onDone) {
|
|
|
4772
4994
|
start,
|
|
4773
4995
|
stop,
|
|
4774
4996
|
attach,
|
|
4997
|
+
isLive,
|
|
4998
|
+
lastSettledAt,
|
|
4775
4999
|
clearStreamingContent,
|
|
4776
5000
|
clearToolEvents,
|
|
4777
5001
|
armSteeredContinuation,
|
|
@@ -4791,6 +5015,8 @@ function useSSE(onDone) {
|
|
|
4791
5015
|
start,
|
|
4792
5016
|
stop,
|
|
4793
5017
|
attach,
|
|
5018
|
+
isLive,
|
|
5019
|
+
lastSettledAt,
|
|
4794
5020
|
clearStreamingContent,
|
|
4795
5021
|
clearToolEvents,
|
|
4796
5022
|
armSteeredContinuation,
|
|
@@ -5011,6 +5237,8 @@ function readLegacyGlobal() {
|
|
|
5011
5237
|
};
|
|
5012
5238
|
}
|
|
5013
5239
|
|
|
5240
|
+
// EXTERNAL MODULE: ./lib/ui/error-report.ts
|
|
5241
|
+
var error_report = __webpack_require__(10778);
|
|
5014
5242
|
;// ./node_modules/lucide-react/dist/esm/icons/shield-alert.mjs
|
|
5015
5243
|
/**
|
|
5016
5244
|
* @license lucide-react v1.47.0 - ISC
|
|
@@ -7110,9 +7338,53 @@ minus_iconData.node;
|
|
|
7110
7338
|
const Minus = (0,createLucideIcon/* default */.A)(minus_iconData);
|
|
7111
7339
|
//# sourceMappingURL=minus.mjs.map
|
|
7112
7340
|
|
|
7341
|
+
;// ./node_modules/lucide-react/dist/esm/icons/rotate-ccw.mjs
|
|
7342
|
+
/**
|
|
7343
|
+
* @license lucide-react v1.47.0 - ISC
|
|
7344
|
+
*
|
|
7345
|
+
* This source code is licensed under the ISC license.
|
|
7346
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
7347
|
+
*/
|
|
7348
|
+
const rotate_ccw_iconData = {
|
|
7349
|
+
name: "rotate-ccw",
|
|
7350
|
+
size: 24,
|
|
7351
|
+
node: [
|
|
7352
|
+
[
|
|
7353
|
+
"path",
|
|
7354
|
+
{
|
|
7355
|
+
d: "M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8",
|
|
7356
|
+
key: "1357e3"
|
|
7357
|
+
}
|
|
7358
|
+
],
|
|
7359
|
+
[
|
|
7360
|
+
"path",
|
|
7361
|
+
{
|
|
7362
|
+
d: "M3 3v5h5",
|
|
7363
|
+
key: "1xhq8a"
|
|
7364
|
+
}
|
|
7365
|
+
]
|
|
7366
|
+
]
|
|
7367
|
+
};
|
|
7368
|
+
rotate_ccw_iconData.node;
|
|
7369
|
+
const RotateCcw = (0,createLucideIcon/* default */.A)(rotate_ccw_iconData);
|
|
7370
|
+
//# sourceMappingURL=rotate-ccw.mjs.map
|
|
7371
|
+
|
|
7113
7372
|
;// ./components/ui/WorkflowChecklist.tsx
|
|
7114
7373
|
|
|
7115
7374
|
|
|
7375
|
+
const RETRYABLE_STATUSES = new Set([
|
|
7376
|
+
"done",
|
|
7377
|
+
"needs_attention",
|
|
7378
|
+
"skipped"
|
|
7379
|
+
]);
|
|
7380
|
+
function isWorkflowItemRetryable(item) {
|
|
7381
|
+
return RETRYABLE_STATUSES.has(item.status);
|
|
7382
|
+
}
|
|
7383
|
+
function statusLabel(status) {
|
|
7384
|
+
if (status === "done") return "verified";
|
|
7385
|
+
if (status === "needs_attention") return "needs attention";
|
|
7386
|
+
return status;
|
|
7387
|
+
}
|
|
7116
7388
|
function StatusIcon({ status }) {
|
|
7117
7389
|
if (status === "done") return /*#__PURE__*/ (0,react_jsx_runtime.jsx)(check/* default */.A, {
|
|
7118
7390
|
className: "h-3 w-3",
|
|
@@ -7142,11 +7414,15 @@ function statusClass(status) {
|
|
|
7142
7414
|
if (status === "skipped") return "border-border/60 bg-surface text-fg-faint";
|
|
7143
7415
|
return "border-border/60 bg-surface text-fg-faint";
|
|
7144
7416
|
}
|
|
7145
|
-
function
|
|
7417
|
+
function itemTooltip(item) {
|
|
7418
|
+
const note = item.status === "done" ? item.validation_evidence : item.reason;
|
|
7419
|
+
return note ? `${item.label}\n${statusLabel(item.status)}: ${note}` : item.label;
|
|
7420
|
+
}
|
|
7421
|
+
function WorkflowChecklist({ eyebrow, title, phaseLabel, summary, items, error, compact = false, onRetryItem, canRetryItem, retryDisabled = false, children }) {
|
|
7146
7422
|
return /*#__PURE__*/ (0,react_jsx_runtime.jsxs)("div", {
|
|
7147
7423
|
className: compact ? "flex flex-col gap-1.5" : "absolute inset-x-0 top-0 flex flex-col gap-2 transition-opacity duration-300",
|
|
7148
7424
|
children: [
|
|
7149
|
-
/*#__PURE__*/ (0,react_jsx_runtime.jsx)("p", {
|
|
7425
|
+
!compact && /*#__PURE__*/ (0,react_jsx_runtime.jsx)("p", {
|
|
7150
7426
|
className: "text-[10px] text-fg-faint uppercase tracking-wider text-center",
|
|
7151
7427
|
children: eyebrow
|
|
7152
7428
|
}),
|
|
@@ -7166,99 +7442,59 @@ function WorkflowChecklist({ eyebrow, title, phaseLabel, summary, items, error,
|
|
|
7166
7442
|
})
|
|
7167
7443
|
]
|
|
7168
7444
|
}),
|
|
7169
|
-
/*#__PURE__*/ (0,react_jsx_runtime.jsx)("p", {
|
|
7445
|
+
!compact && summary && /*#__PURE__*/ (0,react_jsx_runtime.jsx)("p", {
|
|
7170
7446
|
className: "mt-1 text-[11px] leading-snug text-fg-muted line-clamp-2",
|
|
7171
7447
|
children: summary
|
|
7172
7448
|
}),
|
|
7173
|
-
/*#__PURE__*/ (0,react_jsx_runtime.jsx)("
|
|
7174
|
-
className: compact ? "mt-1.5 flex max-h-
|
|
7175
|
-
children: items.map((item)
|
|
7176
|
-
|
|
7449
|
+
/*#__PURE__*/ (0,react_jsx_runtime.jsx)("ul", {
|
|
7450
|
+
className: compact ? "mt-1.5 flex max-h-48 flex-col gap-0.5 overflow-y-auto pr-1" : "mt-2 flex max-h-32 flex-col gap-1 overflow-y-auto pr-1",
|
|
7451
|
+
children: items.map((item)=>{
|
|
7452
|
+
const retryable = !!onRetryItem && isWorkflowItemRetryable(item) && (canRetryItem ? canRetryItem(item) : true);
|
|
7453
|
+
return /*#__PURE__*/ (0,react_jsx_runtime.jsxs)("li", {
|
|
7454
|
+
className: "group flex items-center gap-1.5 text-[10px] leading-tight text-fg-muted",
|
|
7177
7455
|
children: [
|
|
7178
|
-
/*#__PURE__*/ (0,react_jsx_runtime.
|
|
7179
|
-
|
|
7180
|
-
|
|
7181
|
-
|
|
7182
|
-
|
|
7183
|
-
|
|
7184
|
-
|
|
7185
|
-
|
|
7186
|
-
|
|
7187
|
-
|
|
7188
|
-
status: item.status
|
|
7189
|
-
})
|
|
7190
|
-
}),
|
|
7191
|
-
/*#__PURE__*/ (0,react_jsx_runtime.jsx)("span", {
|
|
7192
|
-
className: compact ? "min-w-0 flex-1 truncate" : "line-clamp-2",
|
|
7193
|
-
title: item.label,
|
|
7194
|
-
children: item.label
|
|
7195
|
-
})
|
|
7196
|
-
]
|
|
7456
|
+
/*#__PURE__*/ (0,react_jsx_runtime.jsx)("span", {
|
|
7457
|
+
role: "img",
|
|
7458
|
+
"aria-label": statusLabel(item.status),
|
|
7459
|
+
className: [
|
|
7460
|
+
"flex h-4 w-4 shrink-0 items-center justify-center rounded border",
|
|
7461
|
+
statusClass(item.status)
|
|
7462
|
+
].join(" "),
|
|
7463
|
+
children: /*#__PURE__*/ (0,react_jsx_runtime.jsx)(StatusIcon, {
|
|
7464
|
+
status: item.status
|
|
7465
|
+
})
|
|
7197
7466
|
}),
|
|
7198
|
-
|
|
7199
|
-
className: "
|
|
7467
|
+
/*#__PURE__*/ (0,react_jsx_runtime.jsx)("span", {
|
|
7468
|
+
className: compact ? "min-w-0 flex-1 truncate" : "min-w-0 flex-1 line-clamp-2",
|
|
7469
|
+
title: itemTooltip(item),
|
|
7470
|
+
children: item.label
|
|
7471
|
+
}),
|
|
7472
|
+
(item.attempts ?? 0) > 1 && /*#__PURE__*/ (0,react_jsx_runtime.jsxs)("span", {
|
|
7473
|
+
className: "shrink-0 text-[9px] tabular-nums text-fg-faint",
|
|
7474
|
+
title: `Attempt ${item.attempts}`,
|
|
7200
7475
|
children: [
|
|
7201
|
-
|
|
7202
|
-
|
|
7203
|
-
children: "Step contract"
|
|
7204
|
-
}),
|
|
7205
|
-
/*#__PURE__*/ (0,react_jsx_runtime.jsxs)("dl", {
|
|
7206
|
-
className: "mt-1 grid grid-cols-[auto_minmax(0,1fr)] gap-x-2 gap-y-1",
|
|
7207
|
-
children: [
|
|
7208
|
-
item.input && /*#__PURE__*/ (0,react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, {
|
|
7209
|
-
children: [
|
|
7210
|
-
/*#__PURE__*/ (0,react_jsx_runtime.jsx)("dt", {
|
|
7211
|
-
className: "text-fg-faint",
|
|
7212
|
-
children: "Input"
|
|
7213
|
-
}),
|
|
7214
|
-
/*#__PURE__*/ (0,react_jsx_runtime.jsx)("dd", {
|
|
7215
|
-
className: "break-words",
|
|
7216
|
-
children: item.input
|
|
7217
|
-
})
|
|
7218
|
-
]
|
|
7219
|
-
}),
|
|
7220
|
-
item.output && /*#__PURE__*/ (0,react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, {
|
|
7221
|
-
children: [
|
|
7222
|
-
/*#__PURE__*/ (0,react_jsx_runtime.jsx)("dt", {
|
|
7223
|
-
className: "text-fg-faint",
|
|
7224
|
-
children: "Output"
|
|
7225
|
-
}),
|
|
7226
|
-
/*#__PURE__*/ (0,react_jsx_runtime.jsx)("dd", {
|
|
7227
|
-
className: "break-words",
|
|
7228
|
-
children: item.output
|
|
7229
|
-
})
|
|
7230
|
-
]
|
|
7231
|
-
}),
|
|
7232
|
-
item.validation && /*#__PURE__*/ (0,react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, {
|
|
7233
|
-
children: [
|
|
7234
|
-
/*#__PURE__*/ (0,react_jsx_runtime.jsx)("dt", {
|
|
7235
|
-
className: "text-fg-faint",
|
|
7236
|
-
children: "Validation"
|
|
7237
|
-
}),
|
|
7238
|
-
/*#__PURE__*/ (0,react_jsx_runtime.jsx)("dd", {
|
|
7239
|
-
className: "break-words",
|
|
7240
|
-
children: item.validation
|
|
7241
|
-
})
|
|
7242
|
-
]
|
|
7243
|
-
}),
|
|
7244
|
-
item.validation_evidence && /*#__PURE__*/ (0,react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, {
|
|
7245
|
-
children: [
|
|
7246
|
-
/*#__PURE__*/ (0,react_jsx_runtime.jsx)("dt", {
|
|
7247
|
-
className: "text-fg-faint",
|
|
7248
|
-
children: "Evidence"
|
|
7249
|
-
}),
|
|
7250
|
-
/*#__PURE__*/ (0,react_jsx_runtime.jsx)("dd", {
|
|
7251
|
-
className: "break-words",
|
|
7252
|
-
children: item.validation_evidence
|
|
7253
|
-
})
|
|
7254
|
-
]
|
|
7255
|
-
})
|
|
7256
|
-
]
|
|
7257
|
-
})
|
|
7476
|
+
"attempt ",
|
|
7477
|
+
item.attempts
|
|
7258
7478
|
]
|
|
7479
|
+
}),
|
|
7480
|
+
retryable && /*#__PURE__*/ (0,react_jsx_runtime.jsx)("button", {
|
|
7481
|
+
type: "button",
|
|
7482
|
+
onClick: ()=>onRetryItem(item),
|
|
7483
|
+
disabled: retryDisabled,
|
|
7484
|
+
"aria-label": `Retry ${item.label}`,
|
|
7485
|
+
title: `Retry ${item.label}`,
|
|
7486
|
+
className: [
|
|
7487
|
+
"flex h-4 w-4 shrink-0 items-center justify-center rounded text-fg-faint hover:bg-surface-3 hover:text-fg disabled:opacity-40",
|
|
7488
|
+
item.status === "needs_attention" ? "" : "opacity-0 focus:opacity-100 group-hover:opacity-100"
|
|
7489
|
+
].join(" "),
|
|
7490
|
+
children: /*#__PURE__*/ (0,react_jsx_runtime.jsx)(RotateCcw, {
|
|
7491
|
+
className: "h-3 w-3",
|
|
7492
|
+
"aria-hidden": true
|
|
7493
|
+
})
|
|
7259
7494
|
})
|
|
7260
7495
|
]
|
|
7261
|
-
}, item.id)
|
|
7496
|
+
}, item.id);
|
|
7497
|
+
})
|
|
7262
7498
|
}),
|
|
7263
7499
|
error && /*#__PURE__*/ (0,react_jsx_runtime.jsx)("p", {
|
|
7264
7500
|
className: "mt-2 text-[10px] leading-tight text-red-400",
|
|
@@ -7271,6 +7507,21 @@ function WorkflowChecklist({ eyebrow, title, phaseLabel, summary, items, error,
|
|
|
7271
7507
|
});
|
|
7272
7508
|
}
|
|
7273
7509
|
|
|
7510
|
+
;// ./components/chat/workflow-step-retry.ts
|
|
7511
|
+
|
|
7512
|
+
/** Sends a retry request for one workflow step; null when the surface cannot send messages. */ const WorkflowStepRetryContext = (0,react.createContext)(null);
|
|
7513
|
+
function useWorkflowStepRetry() {
|
|
7514
|
+
return (0,react.useContext)(WorkflowStepRetryContext);
|
|
7515
|
+
}
|
|
7516
|
+
function workflowStepRetryMessage({ workflowId, itemId, label }) {
|
|
7517
|
+
const progressUpdate = workflowId === "version_adoption" ? `Call \`workflow_progress\` with \`workflow_id: "version_adoption"\`, \`item_id: "${itemId}"\`, and \`status: "checking"\`` : `Call \`workflow_progress\` for workflow \`${workflowId}\` with the complete items snapshot, setting this step to \`checking\``;
|
|
7518
|
+
return [
|
|
7519
|
+
`Retry workflow step "${label}" (item \`${itemId}\`) in workflow \`${workflowId}\`.`,
|
|
7520
|
+
`${progressUpdate}, then redo the step from its stated input and run its validation again.`,
|
|
7521
|
+
"Finally mark it `done` with newly observed `validation_evidence`, or `needs_attention` with the reason. Leave the other steps unchanged."
|
|
7522
|
+
].join(" ");
|
|
7523
|
+
}
|
|
7524
|
+
|
|
7274
7525
|
;// ./node_modules/lucide-react/dist/esm/icons/clock.mjs
|
|
7275
7526
|
/**
|
|
7276
7527
|
* @license lucide-react v1.47.0 - ISC
|
|
@@ -7512,6 +7763,7 @@ var ProviderLogo = __webpack_require__(17838);
|
|
|
7512
7763
|
|
|
7513
7764
|
|
|
7514
7765
|
|
|
7766
|
+
|
|
7515
7767
|
// Distinct lucide glyph per internal tool family so the chat transcript
|
|
7516
7768
|
// is glanceable — operator can tell a file write from a web fetch from a
|
|
7517
7769
|
// schedule from a memory read without reading the tool name.
|
|
@@ -7949,7 +8201,34 @@ function groupByCallId(events) {
|
|
|
7949
8201
|
}
|
|
7950
8202
|
g.absorbed = true;
|
|
7951
8203
|
}
|
|
7952
|
-
|
|
8204
|
+
const groups = order.map((id)=>map.get(id)).filter((g)=>!g.absorbed);
|
|
8205
|
+
annotateWorkflowAttempts(groups);
|
|
8206
|
+
return groups;
|
|
8207
|
+
}
|
|
8208
|
+
// Counts each workflow step's transitions into `checking` across the
|
|
8209
|
+
// message's workflow_progress calls, so auto-retried steps show "attempt N".
|
|
8210
|
+
// Rejected updates (ok:false) changed nothing and are not counted.
|
|
8211
|
+
function annotateWorkflowAttempts(groups) {
|
|
8212
|
+
const lastStatus = new Map();
|
|
8213
|
+
const attempts = new Map();
|
|
8214
|
+
for (const group of groups){
|
|
8215
|
+
if (group.name !== "workflow_progress") continue;
|
|
8216
|
+
if (coerceObject(unwrapLangChainSerializable(group.result))?.ok === false) continue;
|
|
8217
|
+
const view = workflowViewFor(group);
|
|
8218
|
+
if (!view) continue;
|
|
8219
|
+
const counts = {
|
|
8220
|
+
...attempts.get(view.workflow_id) ?? {}
|
|
8221
|
+
};
|
|
8222
|
+
for (const item of view.items){
|
|
8223
|
+
const key = `${view.workflow_id}:${item.id}`;
|
|
8224
|
+
if (item.status === "checking" && lastStatus.get(key) !== "checking") {
|
|
8225
|
+
counts[item.id] = (counts[item.id] ?? 0) + 1;
|
|
8226
|
+
}
|
|
8227
|
+
lastStatus.set(key, item.status);
|
|
8228
|
+
}
|
|
8229
|
+
attempts.set(view.workflow_id, counts);
|
|
8230
|
+
group.workflowAttempts = counts;
|
|
8231
|
+
}
|
|
7953
8232
|
}
|
|
7954
8233
|
function ToolCallCard({ group, startedAt }) {
|
|
7955
8234
|
const [open, setOpen] = (0,react.useState)(false);
|
|
@@ -8062,23 +8341,27 @@ function ToolCallCard({ group, startedAt }) {
|
|
|
8062
8341
|
/*#__PURE__*/ (0,react_jsx_runtime.jsx)(WorkflowProgressDetails, {
|
|
8063
8342
|
group: group
|
|
8064
8343
|
}),
|
|
8065
|
-
|
|
8066
|
-
|
|
8067
|
-
|
|
8068
|
-
|
|
8069
|
-
|
|
8070
|
-
|
|
8071
|
-
|
|
8072
|
-
|
|
8073
|
-
|
|
8074
|
-
|
|
8075
|
-
|
|
8076
|
-
|
|
8077
|
-
|
|
8078
|
-
|
|
8079
|
-
|
|
8080
|
-
|
|
8081
|
-
|
|
8344
|
+
!hasWorkflowView(group) && /*#__PURE__*/ (0,react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, {
|
|
8345
|
+
children: [
|
|
8346
|
+
hasVisibleArgs(group.args) ? /*#__PURE__*/ (0,react_jsx_runtime.jsx)(DetailSection, {
|
|
8347
|
+
label: "arguments",
|
|
8348
|
+
value: group.args
|
|
8349
|
+
}) : hasArgs ? /*#__PURE__*/ (0,react_jsx_runtime.jsx)(DetailSection, {
|
|
8350
|
+
label: "arguments (inferred from result)",
|
|
8351
|
+
value: effectiveArgs
|
|
8352
|
+
}) : null,
|
|
8353
|
+
group.status !== "running" && group.status !== "async" && (isToolResultRefEnvelope(group.result) ? /*#__PURE__*/ (0,react_jsx_runtime.jsx)(ToolResultRefDetails, {
|
|
8354
|
+
value: group.result
|
|
8355
|
+
}) : /*#__PURE__*/ (0,react_jsx_runtime.jsx)(DetailSection, {
|
|
8356
|
+
label: group.status === "error" ? "error" : "result",
|
|
8357
|
+
value: group.result,
|
|
8358
|
+
tone: group.status === "error" ? "error" : "default"
|
|
8359
|
+
})),
|
|
8360
|
+
group.status === "async" && /*#__PURE__*/ (0,react_jsx_runtime.jsx)(DetailSection, {
|
|
8361
|
+
label: "background handoff",
|
|
8362
|
+
value: group.result
|
|
8363
|
+
})
|
|
8364
|
+
]
|
|
8082
8365
|
})
|
|
8083
8366
|
]
|
|
8084
8367
|
})
|
|
@@ -8213,18 +8496,47 @@ function ToolResultRefDetails({ value }) {
|
|
|
8213
8496
|
]
|
|
8214
8497
|
});
|
|
8215
8498
|
}
|
|
8216
|
-
function
|
|
8499
|
+
function workflowViewFor(group) {
|
|
8217
8500
|
if (group.name !== "workflow_progress") return null;
|
|
8218
|
-
const
|
|
8501
|
+
const view = workflowProgressFrom(group.result) ?? workflowProgressPreviewFrom(group.args);
|
|
8502
|
+
const result = coerceObject(unwrapLangChainSerializable(group.result));
|
|
8503
|
+
const attempts = group.workflowAttempts;
|
|
8504
|
+
const withAttempts = view && attempts ? {
|
|
8505
|
+
...view,
|
|
8506
|
+
items: view.items.map((item)=>attempts[item.id] ? {
|
|
8507
|
+
...item,
|
|
8508
|
+
attempts: attempts[item.id]
|
|
8509
|
+
} : item)
|
|
8510
|
+
} : view;
|
|
8511
|
+
if (withAttempts && result?.ok === false && typeof result.error === "string") {
|
|
8512
|
+
return {
|
|
8513
|
+
...withAttempts,
|
|
8514
|
+
error: `Update rejected: ${result.error}`
|
|
8515
|
+
};
|
|
8516
|
+
}
|
|
8517
|
+
return withAttempts;
|
|
8518
|
+
}
|
|
8519
|
+
/** Workflow rows show only their work items; raw payloads stay visible when the call failed. */ function hasWorkflowView(group) {
|
|
8520
|
+
return group.status !== "error" && workflowViewFor(group) !== null;
|
|
8521
|
+
}
|
|
8522
|
+
function WorkflowProgressDetails({ group }) {
|
|
8523
|
+
const retryStep = useWorkflowStepRetry();
|
|
8524
|
+
const workflow = workflowViewFor(group);
|
|
8219
8525
|
if (!workflow) return null;
|
|
8526
|
+
const workflowId = workflow.workflow_id;
|
|
8220
8527
|
return /*#__PURE__*/ (0,react_jsx_runtime.jsx)(WorkflowChecklist, {
|
|
8221
8528
|
compact: true,
|
|
8222
8529
|
eyebrow: "workflow",
|
|
8223
|
-
title:
|
|
8530
|
+
title: workflowId.replace(/[_-]/g, " "),
|
|
8224
8531
|
phaseLabel: workflow.phase ?? "in progress",
|
|
8225
8532
|
summary: workflow.summary ?? "",
|
|
8226
8533
|
items: workflow.items,
|
|
8227
|
-
error: workflow.error
|
|
8534
|
+
error: workflow.error,
|
|
8535
|
+
onRetryItem: retryStep ? (item)=>retryStep({
|
|
8536
|
+
workflowId,
|
|
8537
|
+
itemId: item.id,
|
|
8538
|
+
label: item.label
|
|
8539
|
+
}) : undefined
|
|
8228
8540
|
});
|
|
8229
8541
|
}
|
|
8230
8542
|
function workflowProgressFrom(payload) {
|
|
@@ -37418,37 +37730,6 @@ link_2_iconData.node;
|
|
|
37418
37730
|
const Link2 = (0,createLucideIcon/* default */.A)(link_2_iconData);
|
|
37419
37731
|
//# sourceMappingURL=link-2.mjs.map
|
|
37420
37732
|
|
|
37421
|
-
;// ./node_modules/lucide-react/dist/esm/icons/rotate-ccw.mjs
|
|
37422
|
-
/**
|
|
37423
|
-
* @license lucide-react v1.47.0 - ISC
|
|
37424
|
-
*
|
|
37425
|
-
* This source code is licensed under the ISC license.
|
|
37426
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
37427
|
-
*/
|
|
37428
|
-
const rotate_ccw_iconData = {
|
|
37429
|
-
name: "rotate-ccw",
|
|
37430
|
-
size: 24,
|
|
37431
|
-
node: [
|
|
37432
|
-
[
|
|
37433
|
-
"path",
|
|
37434
|
-
{
|
|
37435
|
-
d: "M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8",
|
|
37436
|
-
key: "1357e3"
|
|
37437
|
-
}
|
|
37438
|
-
],
|
|
37439
|
-
[
|
|
37440
|
-
"path",
|
|
37441
|
-
{
|
|
37442
|
-
d: "M3 3v5h5",
|
|
37443
|
-
key: "1xhq8a"
|
|
37444
|
-
}
|
|
37445
|
-
]
|
|
37446
|
-
]
|
|
37447
|
-
};
|
|
37448
|
-
rotate_ccw_iconData.node;
|
|
37449
|
-
const RotateCcw = (0,createLucideIcon/* default */.A)(rotate_ccw_iconData);
|
|
37450
|
-
//# sourceMappingURL=rotate-ccw.mjs.map
|
|
37451
|
-
|
|
37452
37733
|
;// ./node_modules/lucide-react/dist/esm/icons/pause.mjs
|
|
37453
37734
|
/**
|
|
37454
37735
|
* @license lucide-react v1.47.0 - ISC
|
|
@@ -50527,7 +50808,7 @@ function StatusDot({ tone = "neutral", size = "xs", pulse, className, style, lab
|
|
|
50527
50808
|
}
|
|
50528
50809
|
|
|
50529
50810
|
;// ./components/chat/ContextBoundary.tsx
|
|
50530
|
-
/* __next_internal_client_entry_do_not_use__ WarmSummaryCard,ContextBoundaryDivider auto */
|
|
50811
|
+
/* __next_internal_client_entry_do_not_use__ WarmSummaryCard,ContextBoundaryDivider,topicsFromSummarySections auto */
|
|
50531
50812
|
// Inline visual artefacts for ADR-0042: the warm-summary card and the
|
|
50532
50813
|
// context-boundary divider that sits below it. Rendered by MessageList in
|
|
50533
50814
|
// the message stream — between summarised history (above) and the active
|
|
@@ -50539,17 +50820,25 @@ function StatusDot({ tone = "neutral", size = "xs", pulse, className, style, lab
|
|
|
50539
50820
|
|
|
50540
50821
|
|
|
50541
50822
|
|
|
50542
|
-
|
|
50823
|
+
const CHANNEL_LABELS = {
|
|
50824
|
+
bridge: "Bridge",
|
|
50825
|
+
watcher: "Watchers",
|
|
50826
|
+
scheduled_task: "Scheduled tasks"
|
|
50827
|
+
};
|
|
50828
|
+
function WarmSummaryCard({ olderCount, summary, summaryBeforeSeq, hotSinceSeq, computedAt, streaming, topics, channelSummaries = [] }) {
|
|
50543
50829
|
const [expanded, setExpanded] = (0,react.useState)(false);
|
|
50544
|
-
const
|
|
50830
|
+
const committed = hotSinceSeq != null && summaryBeforeSeq === hotSinceSeq;
|
|
50831
|
+
const fresh = !!summary && committed;
|
|
50545
50832
|
const stale = !!summary && !fresh;
|
|
50546
50833
|
const computing = stale && streaming;
|
|
50547
|
-
|
|
50834
|
+
// Summaries stored before topic segmentation still read as topics: their
|
|
50835
|
+
// markdown sections render through the same collapsible rows.
|
|
50836
|
+
const summaryTopics = summary ? topics && topics.length > 0 ? topics : topicsFromSummarySections(summary) : null;
|
|
50548
50837
|
return /*#__PURE__*/ (0,react_jsx_runtime.jsxs)("div", {
|
|
50549
50838
|
className: [
|
|
50550
50839
|
"relative my-4 rounded-2xl border bg-gradient-to-br shadow-sm",
|
|
50551
50840
|
"from-accent/[0.06] via-surface-2 to-surface-2",
|
|
50552
|
-
fresh ? "border-accent/30" : "border-border"
|
|
50841
|
+
fresh || committed ? "border-accent/30" : "border-border"
|
|
50553
50842
|
].join(" "),
|
|
50554
50843
|
children: [
|
|
50555
50844
|
/*#__PURE__*/ (0,react_jsx_runtime.jsxs)("div", {
|
|
@@ -50594,6 +50883,9 @@ function WarmSummaryCard({ olderCount, summary, summaryBeforeSeq, hotSinceSeq, c
|
|
|
50594
50883
|
children: /*#__PURE__*/ (0,react_jsx_runtime.jsx)(lib/* Markdown */.oz, {
|
|
50595
50884
|
children: stripWarmHeader(summary)
|
|
50596
50885
|
})
|
|
50886
|
+
}) : !summary && committed ? channelSummaries.length === 0 && /*#__PURE__*/ (0,react_jsx_runtime.jsx)("div", {
|
|
50887
|
+
className: "text-xs text-fg-faint italic",
|
|
50888
|
+
children: "No earlier chat messages needed summarising."
|
|
50597
50889
|
}) : !summary ? /*#__PURE__*/ (0,react_jsx_runtime.jsxs)("div", {
|
|
50598
50890
|
className: "flex items-center gap-2 text-xs text-fg-faint italic",
|
|
50599
50891
|
children: [
|
|
@@ -50607,6 +50899,9 @@ function WarmSummaryCard({ olderCount, summary, summaryBeforeSeq, hotSinceSeq, c
|
|
|
50607
50899
|
})
|
|
50608
50900
|
]
|
|
50609
50901
|
}) : null,
|
|
50902
|
+
channelSummaries.map((channel)=>/*#__PURE__*/ (0,react_jsx_runtime.jsx)(ChannelSummarySection, {
|
|
50903
|
+
channel: channel
|
|
50904
|
+
}, channel.channel)),
|
|
50610
50905
|
stale && /*#__PURE__*/ (0,react_jsx_runtime.jsxs)("div", {
|
|
50611
50906
|
className: "mt-2 inline-flex items-center gap-2 text-[11px] text-fg-faint",
|
|
50612
50907
|
children: [
|
|
@@ -50648,6 +50943,32 @@ function WarmSummaryCard({ olderCount, summary, summaryBeforeSeq, hotSinceSeq, c
|
|
|
50648
50943
|
]
|
|
50649
50944
|
});
|
|
50650
50945
|
}
|
|
50946
|
+
function ChannelSummarySection({ channel }) {
|
|
50947
|
+
const topics = channel.topics && channel.topics.length > 0 ? channel.topics : topicsFromSummarySections(channel.summary) ?? [
|
|
50948
|
+
{
|
|
50949
|
+
title: "Recap",
|
|
50950
|
+
start_at: "",
|
|
50951
|
+
end_at: "",
|
|
50952
|
+
recap: stripWarmHeader(channel.summary),
|
|
50953
|
+
facts: []
|
|
50954
|
+
}
|
|
50955
|
+
];
|
|
50956
|
+
return /*#__PURE__*/ (0,react_jsx_runtime.jsxs)("div", {
|
|
50957
|
+
className: "mt-2",
|
|
50958
|
+
children: [
|
|
50959
|
+
/*#__PURE__*/ (0,react_jsx_runtime.jsx)("div", {
|
|
50960
|
+
className: "mb-1 text-[9px] uppercase tracking-wide text-fg-faint",
|
|
50961
|
+
children: CHANNEL_LABELS[channel.channel] ?? channel.channel
|
|
50962
|
+
}),
|
|
50963
|
+
/*#__PURE__*/ (0,react_jsx_runtime.jsx)("div", {
|
|
50964
|
+
className: "flex flex-col gap-1",
|
|
50965
|
+
children: topics.map((topic, i)=>/*#__PURE__*/ (0,react_jsx_runtime.jsx)(TopicSegmentRow, {
|
|
50966
|
+
topic: topic
|
|
50967
|
+
}, `${channel.channel}-${topic.title}-${i}`))
|
|
50968
|
+
})
|
|
50969
|
+
]
|
|
50970
|
+
});
|
|
50971
|
+
}
|
|
50651
50972
|
function TopicSegmentRow({ topic }) {
|
|
50652
50973
|
const [open, setOpen] = (0,react.useState)(false);
|
|
50653
50974
|
const range = formatTopicRange(topic.start_at, topic.end_at);
|
|
@@ -50675,13 +50996,20 @@ function TopicSegmentRow({ topic }) {
|
|
|
50675
50996
|
range
|
|
50676
50997
|
]
|
|
50677
50998
|
}),
|
|
50999
|
+
typeof topic.message_count === "number" && topic.message_count > 0 && /*#__PURE__*/ (0,react_jsx_runtime.jsxs)("span", {
|
|
51000
|
+
className: "text-fg-faint shrink-0",
|
|
51001
|
+
children: [
|
|
51002
|
+
"\xb7 ",
|
|
51003
|
+
topic.message_count,
|
|
51004
|
+
" ",
|
|
51005
|
+
topic.message_count === 1 ? "msg" : "msgs"
|
|
51006
|
+
]
|
|
51007
|
+
}),
|
|
50678
51008
|
topic.facts.length > 0 && /*#__PURE__*/ (0,react_jsx_runtime.jsxs)("span", {
|
|
50679
51009
|
className: "ml-auto shrink-0 text-[9px] uppercase tracking-wide text-accent",
|
|
50680
51010
|
children: [
|
|
50681
51011
|
topic.facts.length,
|
|
50682
|
-
" "
|
|
50683
|
-
topic.facts.length === 1 ? "fact" : "facts",
|
|
50684
|
-
" saved"
|
|
51012
|
+
" memorized"
|
|
50685
51013
|
]
|
|
50686
51014
|
})
|
|
50687
51015
|
]
|
|
@@ -50701,22 +51029,34 @@ function TopicSegmentRow({ topic }) {
|
|
|
50701
51029
|
children: topic.recap
|
|
50702
51030
|
})
|
|
50703
51031
|
}),
|
|
50704
|
-
topic.facts.length > 0 && /*#__PURE__*/ (0,react_jsx_runtime.
|
|
50705
|
-
|
|
50706
|
-
|
|
50707
|
-
className: "text-[
|
|
50708
|
-
children:
|
|
50709
|
-
|
|
50710
|
-
|
|
51032
|
+
topic.facts.length > 0 && /*#__PURE__*/ (0,react_jsx_runtime.jsxs)("div", {
|
|
51033
|
+
children: [
|
|
51034
|
+
/*#__PURE__*/ (0,react_jsx_runtime.jsx)("div", {
|
|
51035
|
+
className: "text-[9px] uppercase tracking-wide text-fg-faint",
|
|
51036
|
+
children: "Memorized"
|
|
51037
|
+
}),
|
|
51038
|
+
/*#__PURE__*/ (0,react_jsx_runtime.jsx)("ul", {
|
|
51039
|
+
className: "space-y-0.5",
|
|
51040
|
+
children: topic.facts.map((fact, i)=>/*#__PURE__*/ (0,react_jsx_runtime.jsxs)("li", {
|
|
51041
|
+
className: "text-[11px] text-fg-faint",
|
|
50711
51042
|
children: [
|
|
50712
|
-
|
|
50713
|
-
|
|
51043
|
+
/*#__PURE__*/ (0,react_jsx_runtime.jsxs)("span", {
|
|
51044
|
+
className: "font-medium text-fg-muted",
|
|
51045
|
+
children: [
|
|
51046
|
+
fact.subject,
|
|
51047
|
+
":"
|
|
51048
|
+
]
|
|
51049
|
+
}),
|
|
51050
|
+
" ",
|
|
51051
|
+
fact.content,
|
|
51052
|
+
fact.key && /*#__PURE__*/ (0,react_jsx_runtime.jsx)("code", {
|
|
51053
|
+
className: "ml-1 text-[10px] text-fg-faint",
|
|
51054
|
+
children: fact.key
|
|
51055
|
+
})
|
|
50714
51056
|
]
|
|
50715
|
-
})
|
|
50716
|
-
|
|
50717
|
-
|
|
50718
|
-
]
|
|
50719
|
-
}, `${fact.subject}-${i}`))
|
|
51057
|
+
}, `${fact.key ?? fact.subject}-${i}`))
|
|
51058
|
+
})
|
|
51059
|
+
]
|
|
50720
51060
|
})
|
|
50721
51061
|
]
|
|
50722
51062
|
})
|
|
@@ -50849,7 +51189,38 @@ function ContextBoundary_formatBytes(n) {
|
|
|
50849
51189
|
// `buildWarmSummary` prepends a couple of plain-text header lines that read
|
|
50850
51190
|
// awkwardly inside a card that already has its own header. Strip them.
|
|
50851
51191
|
function stripWarmHeader(raw) {
|
|
50852
|
-
return raw.replace(/^--- Warm context summary ---\n/, "").replace(/^Compressed recap of
|
|
51192
|
+
return raw.replace(/\r\n/g, "\n").replace(/^\s*(<!--[\s\S]*?-->\s*)+/, "").replace(/^--- Warm context summary ---\n/, "").replace(/^Compressed recap of [^\n]*:\n/, "").trimStart();
|
|
51193
|
+
}
|
|
51194
|
+
/**
|
|
51195
|
+
* Splits a markdown summary into topic segments at its headings. Returns
|
|
51196
|
+
* null when there are fewer than two sections, so short or unstructured
|
|
51197
|
+
* summaries keep the plain prose rendering.
|
|
51198
|
+
*/ function topicsFromSummarySections(raw) {
|
|
51199
|
+
const sections = [];
|
|
51200
|
+
let title = null;
|
|
51201
|
+
let body = [];
|
|
51202
|
+
const flush = ()=>{
|
|
51203
|
+
const recap = body.join("\n").trim();
|
|
51204
|
+
if (title !== null || recap) sections.push({
|
|
51205
|
+
title: title ?? "Overview",
|
|
51206
|
+
start_at: "",
|
|
51207
|
+
end_at: "",
|
|
51208
|
+
recap,
|
|
51209
|
+
facts: []
|
|
51210
|
+
});
|
|
51211
|
+
};
|
|
51212
|
+
for (const line of stripWarmHeader(raw).split("\n")){
|
|
51213
|
+
const heading = /^#{1,3}\s+(.+?)\s*#*\s*$/.exec(line);
|
|
51214
|
+
if (heading) {
|
|
51215
|
+
flush();
|
|
51216
|
+
title = heading[1];
|
|
51217
|
+
body = [];
|
|
51218
|
+
} else {
|
|
51219
|
+
body.push(line);
|
|
51220
|
+
}
|
|
51221
|
+
}
|
|
51222
|
+
flush();
|
|
51223
|
+
return sections.length >= 2 ? sections : null;
|
|
50853
51224
|
}
|
|
50854
51225
|
function summaryLong(raw) {
|
|
50855
51226
|
// Heuristic: more than 6 lines or > 600 chars after the header strip.
|
|
@@ -50882,11 +51253,13 @@ function formatRelative(iso) {
|
|
|
50882
51253
|
|
|
50883
51254
|
|
|
50884
51255
|
|
|
51256
|
+
|
|
50885
51257
|
const ALL_FILTERS_SHOWN = Object.fromEntries(MESSAGE_FILTER_KEYS.map((k)=>[
|
|
50886
51258
|
k,
|
|
50887
51259
|
true
|
|
50888
51260
|
]));
|
|
50889
|
-
|
|
51261
|
+
const NO_CHANNEL_SUMMARIES = [];
|
|
51262
|
+
function MessageList({ threadId, messages, steeredSegments, agentConfig, userProfile, streamingContent, thinkingContent, toolEvents, hasMore, loadingMore, onLoadMore, queuedMessages, onRemoveQueued, hotSinceSeq, warmSummary, warmSummaryBeforeSeq, warmSummaryComputedAt, warmSummarySourceMessages, warmSummarySourceChars, warmSummaryTopics, warmChannelSummaries = NO_CHANNEL_SUMMARIES, warmSummaryPending = false, compactionPending = false, onSetContextPin, streaming, contextWindowTokens, onRetryMessage, filters = ALL_FILTERS_SHOWN, onToggleFilter: toggle = ()=>{}, onResetFilters: reset = ()=>{} }) {
|
|
50890
51263
|
const hostRef = (0,react.useRef)(null);
|
|
50891
51264
|
const maskRegionRef = (0,react.useRef)(null);
|
|
50892
51265
|
const scrollRef = (0,react.useRef)(null);
|
|
@@ -50911,6 +51284,9 @@ function MessageList({ threadId, messages, steeredSegments, notices, agentConfig
|
|
|
50911
51284
|
const [pendingHotSinceSeq, setPendingHotSinceSeq] = (0,react.useState)(null);
|
|
50912
51285
|
const [topControlsOpen, setTopControlsOpen] = (0,react.useState)(false);
|
|
50913
51286
|
const [summaryPopoverOpen, setSummaryPopoverOpen] = (0,react.useState)(false);
|
|
51287
|
+
const retryWorkflowStep = (0,react.useMemo)(()=>onRetryMessage ? (request)=>onRetryMessage(workflowStepRetryMessage(request), []) : null, [
|
|
51288
|
+
onRetryMessage
|
|
51289
|
+
]);
|
|
50914
51290
|
// Apply category filter. Messages with no `category` (NULL = ordinary
|
|
50915
51291
|
// chat) are always shown; tagged messages are gated by their toggle.
|
|
50916
51292
|
// The `tool_use` and `thinking` filters do NOT remove whole messages —
|
|
@@ -51280,7 +51656,11 @@ function MessageList({ threadId, messages, steeredSegments, notices, agentConfig
|
|
|
51280
51656
|
const nextHotCount = pendingBoundaryIndex < 0 ? null : visibleMessages.length - pendingBoundaryIndex;
|
|
51281
51657
|
const removesFromRecent = currentHotCount !== null && nextHotCount !== null ? nextHotCount < currentHotCount : false;
|
|
51282
51658
|
const hasWarmSummary = !!warmSummary;
|
|
51659
|
+
// A committed boundary whose chat range had nothing to summarise (e.g. a
|
|
51660
|
+
// bridge-only agent): the recap, if any, lives in the channel summaries.
|
|
51661
|
+
const summaryCommittedEmpty = !hasWarmSummary && effectiveHotSinceSeq !== null && warmSummaryBeforeSeq === effectiveHotSinceSeq;
|
|
51283
51662
|
const summaryFresh = hasWarmSummary && effectiveHotSinceSeq !== null && warmSummaryBeforeSeq === effectiveHotSinceSeq;
|
|
51663
|
+
const summaryReady = summaryFresh || summaryCommittedEmpty;
|
|
51284
51664
|
const summaryUpdating = hasWarmSummary && !summaryFresh && !!streaming;
|
|
51285
51665
|
const summaryStale = hasWarmSummary && !summaryFresh && !summaryUpdating;
|
|
51286
51666
|
process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && (0,react.useEffect)(()=>{
|
|
@@ -51381,10 +51761,29 @@ function MessageList({ threadId, messages, steeredSegments, notices, agentConfig
|
|
|
51381
51761
|
}
|
|
51382
51762
|
boundaryAnchorRef.current = null;
|
|
51383
51763
|
}, []);
|
|
51764
|
+
// While a programmatic smooth scroll (locate boundary, deep link) animates
|
|
51765
|
+
// away from the bottom, its first frames are still "near bottom". Without
|
|
51766
|
+
// this lock, scroll sync re-arms bottom-follow and the post-render snap
|
|
51767
|
+
// cancels the animation, so the target is never reached.
|
|
51768
|
+
const programmaticScrollUntilRef = (0,react.useRef)(0);
|
|
51384
51769
|
const syncScrollButton = (0,react.useCallback)((el)=>{
|
|
51385
51770
|
const isAtBottom = el.scrollHeight - el.scrollTop - el.clientHeight < 100;
|
|
51386
|
-
|
|
51387
|
-
|
|
51771
|
+
const locked = Date.now() < programmaticScrollUntilRef.current;
|
|
51772
|
+
atBottomRef.current = isAtBottom && !locked;
|
|
51773
|
+
setShowScrollButton(!atBottomRef.current && hasScrollTarget);
|
|
51774
|
+
}, [
|
|
51775
|
+
hasScrollTarget
|
|
51776
|
+
]);
|
|
51777
|
+
const scrollTargetIntoView = (0,react.useCallback)((target)=>{
|
|
51778
|
+
programmaticScrollUntilRef.current = Date.now() + PROGRAMMATIC_SCROLL_LOCK_MS;
|
|
51779
|
+
atBottomRef.current = false;
|
|
51780
|
+
setShowScrollButton(hasScrollTarget);
|
|
51781
|
+
target.scrollIntoView({
|
|
51782
|
+
behavior: "smooth",
|
|
51783
|
+
block: "center"
|
|
51784
|
+
});
|
|
51785
|
+
target.classList.add("jarela-deep-link-flash");
|
|
51786
|
+
window.setTimeout(()=>target.classList.remove("jarela-deep-link-flash"), 1600);
|
|
51388
51787
|
}, [
|
|
51389
51788
|
hasScrollTarget
|
|
51390
51789
|
]);
|
|
@@ -51513,14 +51912,7 @@ function MessageList({ threadId, messages, steeredSegments, notices, agentConfig
|
|
|
51513
51912
|
const safe = id.replace(/"/g, '\\"');
|
|
51514
51913
|
const el = root.querySelector(`[data-message-id="${safe}"]`);
|
|
51515
51914
|
if (!el) return;
|
|
51516
|
-
|
|
51517
|
-
setShowScrollButton(hasScrollTarget);
|
|
51518
|
-
el.scrollIntoView({
|
|
51519
|
-
behavior: "smooth",
|
|
51520
|
-
block: "center"
|
|
51521
|
-
});
|
|
51522
|
-
el.classList.add("jarela-deep-link-flash");
|
|
51523
|
-
setTimeout(()=>el.classList.remove("jarela-deep-link-flash"), 1600);
|
|
51915
|
+
scrollTargetIntoView(el);
|
|
51524
51916
|
// Strip the hash so the next streaming message / list-length change
|
|
51525
51917
|
// doesn't yank the view back to this anchor. replaceState avoids
|
|
51526
51918
|
// triggering a hashchange event (which would re-enter this handler).
|
|
@@ -51533,7 +51925,7 @@ function MessageList({ threadId, messages, steeredSegments, notices, agentConfig
|
|
|
51533
51925
|
return ()=>window.removeEventListener("hashchange", scrollToHashTarget);
|
|
51534
51926
|
}, [
|
|
51535
51927
|
messages.length,
|
|
51536
|
-
|
|
51928
|
+
scrollTargetIntoView
|
|
51537
51929
|
]);
|
|
51538
51930
|
// Handle orientation changes and resizes to maintain scroll position
|
|
51539
51931
|
process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && (0,react.useEffect)(()=>{
|
|
@@ -51564,419 +51956,411 @@ function MessageList({ threadId, messages, steeredSegments, notices, agentConfig
|
|
|
51564
51956
|
if (!root) return;
|
|
51565
51957
|
const boundary = effectiveHotSinceSeq !== null ? document.getElementById(`context-boundary-${effectiveHotSinceSeq}`) : root.querySelector("[data-focus-boundary='1']");
|
|
51566
51958
|
if (!boundary) return;
|
|
51567
|
-
|
|
51568
|
-
setShowScrollButton(hasScrollTarget);
|
|
51569
|
-
boundary.scrollIntoView({
|
|
51570
|
-
behavior: "smooth",
|
|
51571
|
-
block: "center"
|
|
51572
|
-
});
|
|
51959
|
+
scrollTargetIntoView(boundary);
|
|
51573
51960
|
}
|
|
51574
|
-
return /*#__PURE__*/ (0,react_jsx_runtime.
|
|
51575
|
-
|
|
51576
|
-
|
|
51577
|
-
|
|
51578
|
-
|
|
51579
|
-
|
|
51580
|
-
|
|
51581
|
-
className: "
|
|
51961
|
+
return /*#__PURE__*/ (0,react_jsx_runtime.jsx)(WorkflowStepRetryContext.Provider, {
|
|
51962
|
+
value: retryWorkflowStep,
|
|
51963
|
+
children: /*#__PURE__*/ (0,react_jsx_runtime.jsxs)("div", {
|
|
51964
|
+
ref: hostRef,
|
|
51965
|
+
className: "flex-1 flex flex-col min-h-0 relative",
|
|
51966
|
+
children: [
|
|
51967
|
+
visibleMessages.length > 0 && /*#__PURE__*/ (0,react_jsx_runtime.jsx)("div", {
|
|
51968
|
+
className: "shrink-0 px-4 pt-[calc(var(--app-safe-top)+3rem)] pb-1",
|
|
51969
|
+
children: /*#__PURE__*/ (0,react_jsx_runtime.jsxs)("div", {
|
|
51970
|
+
className: "w-full border-b border-border/45 bg-surface/30 px-2 py-1 backdrop-blur-sm",
|
|
51971
|
+
children: [
|
|
51972
|
+
/*#__PURE__*/ (0,react_jsx_runtime.jsxs)("button", {
|
|
51973
|
+
type: "button",
|
|
51974
|
+
onClick: ()=>setTopControlsOpen((v)=>!v),
|
|
51975
|
+
"aria-expanded": topControlsOpen,
|
|
51976
|
+
className: "w-full flex items-center gap-2 py-0.5 text-[11px] text-fg-faint hover:text-fg transition-colors",
|
|
51977
|
+
children: [
|
|
51978
|
+
/*#__PURE__*/ (0,react_jsx_runtime.jsx)(CollapseChevron, {
|
|
51979
|
+
open: topControlsOpen,
|
|
51980
|
+
size: 10
|
|
51981
|
+
}),
|
|
51982
|
+
/*#__PURE__*/ (0,react_jsx_runtime.jsx)("span", {
|
|
51983
|
+
className: "font-semibold uppercase tracking-[0.16em]",
|
|
51984
|
+
children: "Filters & focus"
|
|
51985
|
+
}),
|
|
51986
|
+
hiddenCount > 0 && /*#__PURE__*/ (0,react_jsx_runtime.jsxs)("span", {
|
|
51987
|
+
className: "ml-auto text-[10px] text-fg-faint",
|
|
51988
|
+
"aria-live": "polite",
|
|
51989
|
+
children: [
|
|
51990
|
+
hiddenCount,
|
|
51991
|
+
" hidden"
|
|
51992
|
+
]
|
|
51993
|
+
})
|
|
51994
|
+
]
|
|
51995
|
+
}),
|
|
51996
|
+
topControlsOpen && /*#__PURE__*/ (0,react_jsx_runtime.jsxs)("div", {
|
|
51997
|
+
className: "mt-1 flex items-center gap-1.5 flex-wrap py-1",
|
|
51998
|
+
children: [
|
|
51999
|
+
availableChips.map((key)=>{
|
|
52000
|
+
const on = filters[key];
|
|
52001
|
+
const Icon = on ? eye/* default */.A : EyeOff;
|
|
52002
|
+
return /*#__PURE__*/ (0,react_jsx_runtime.jsxs)("button", {
|
|
52003
|
+
type: "button",
|
|
52004
|
+
onClick: ()=>toggle(key),
|
|
52005
|
+
className: [
|
|
52006
|
+
"inline-flex items-center gap-1 rounded-none border px-2 py-0.5 text-[10px] leading-4 transition-colors",
|
|
52007
|
+
on ? "border-border/70 bg-surface-2/70 text-fg-muted hover:text-fg" : "border-border/35 bg-transparent text-fg-faint line-through decoration-fg-faint/60 hover:text-fg-muted"
|
|
52008
|
+
].join(" "),
|
|
52009
|
+
title: // ADR-0044 — for the three channels the model's own
|
|
52010
|
+
// context is scoped by, the chip's meaning is dual:
|
|
52011
|
+
// it doesn't just show/hide rows here, it also
|
|
52012
|
+
// decides whether that channel's history is folded
|
|
52013
|
+
// into the next turn the agent sees.
|
|
52014
|
+
CHANNEL_SCOPED_FILTER_KEYS.has(key) ? on ? `Hide + exclude ${CHIP_LABELS[key]} from the next turn` : `Show + include ${CHIP_LABELS[key]} in the next turn` : on ? `Hide ${CHIP_LABELS[key]} messages` : `Show ${CHIP_LABELS[key]} messages`,
|
|
52015
|
+
"aria-pressed": on,
|
|
52016
|
+
children: [
|
|
52017
|
+
/*#__PURE__*/ (0,react_jsx_runtime.jsx)(Icon, {
|
|
52018
|
+
size: 10
|
|
52019
|
+
}),
|
|
52020
|
+
/*#__PURE__*/ (0,react_jsx_runtime.jsx)("span", {
|
|
52021
|
+
children: CHIP_LABELS[key]
|
|
52022
|
+
})
|
|
52023
|
+
]
|
|
52024
|
+
}, key);
|
|
52025
|
+
}),
|
|
52026
|
+
onSetContextPin && /*#__PURE__*/ (0,react_jsx_runtime.jsx)("button", {
|
|
52027
|
+
type: "button",
|
|
52028
|
+
onClick: scrollToBoundaryLine,
|
|
52029
|
+
disabled: !hasContextPin,
|
|
52030
|
+
className: "control-tap ml-auto rounded-none border border-border/60 bg-surface-2/70 px-2 py-0.5 text-[10px] leading-4 text-fg-faint transition-colors hover:border-accent/40 hover:text-fg disabled:cursor-not-allowed disabled:opacity-40 disabled:hover:border-border/60 disabled:hover:text-fg-faint",
|
|
52031
|
+
title: hasContextPin ? "Locate the focus boundary in the message list" : "Set a focus boundary first (drag the divider or pin a message) to enable this",
|
|
52032
|
+
children: "Locate boundary line"
|
|
52033
|
+
})
|
|
52034
|
+
]
|
|
52035
|
+
})
|
|
52036
|
+
]
|
|
52037
|
+
})
|
|
52038
|
+
}),
|
|
52039
|
+
/*#__PURE__*/ (0,react_jsx_runtime.jsxs)("div", {
|
|
52040
|
+
ref: maskRegionRef,
|
|
52041
|
+
className: "relative flex-1 min-h-0 overflow-hidden",
|
|
51582
52042
|
children: [
|
|
51583
|
-
/*#__PURE__*/ (0,react_jsx_runtime.jsxs)("
|
|
51584
|
-
|
|
51585
|
-
|
|
51586
|
-
"
|
|
51587
|
-
|
|
52043
|
+
/*#__PURE__*/ (0,react_jsx_runtime.jsxs)("div", {
|
|
52044
|
+
ref: scrollRef,
|
|
52045
|
+
onScroll: handleScroll,
|
|
52046
|
+
className: "flex-1 h-full overflow-y-auto overflow-x-hidden px-4 py-4 panel-scrollbar",
|
|
52047
|
+
style: {
|
|
52048
|
+
// Scroll-anchor jumps (deep-link to a message) land below the
|
|
52049
|
+
// floating header, not under it.
|
|
52050
|
+
scrollPaddingTop: "calc(3rem + var(--app-safe-top))"
|
|
52051
|
+
},
|
|
51588
52052
|
children: [
|
|
51589
|
-
/*#__PURE__*/ (0,react_jsx_runtime.jsx)(
|
|
51590
|
-
|
|
51591
|
-
|
|
51592
|
-
}),
|
|
51593
|
-
/*#__PURE__*/ (0,react_jsx_runtime.jsx)("span", {
|
|
51594
|
-
className: "font-semibold uppercase tracking-[0.16em]",
|
|
51595
|
-
children: "Filters & focus"
|
|
52053
|
+
hasMore && /*#__PURE__*/ (0,react_jsx_runtime.jsx)("div", {
|
|
52054
|
+
className: "text-center py-1.5 text-[11px] text-fg-faint select-none",
|
|
52055
|
+
children: loadingMore ? "Loading earlier messages…" : "Scroll up for earlier messages"
|
|
51596
52056
|
}),
|
|
51597
|
-
|
|
51598
|
-
className: "
|
|
51599
|
-
"aria-live": "polite",
|
|
52057
|
+
compactionPending && /*#__PURE__*/ (0,react_jsx_runtime.jsxs)("div", {
|
|
52058
|
+
className: "my-2 flex items-center justify-center gap-2 rounded-lg border border-border bg-surface-2/70 px-3 py-1.5 text-[11px] text-fg-faint select-none",
|
|
51600
52059
|
children: [
|
|
51601
|
-
|
|
51602
|
-
|
|
52060
|
+
/*#__PURE__*/ (0,react_jsx_runtime.jsx)(StatusDot, {
|
|
52061
|
+
tone: "accent",
|
|
52062
|
+
size: "sm",
|
|
52063
|
+
pulse: true
|
|
52064
|
+
}),
|
|
52065
|
+
/*#__PURE__*/ (0,react_jsx_runtime.jsx)("span", {
|
|
52066
|
+
children: "Summarising earlier messages… this turn still sees the full history."
|
|
52067
|
+
})
|
|
51603
52068
|
]
|
|
51604
|
-
})
|
|
51605
|
-
|
|
51606
|
-
|
|
51607
|
-
|
|
51608
|
-
|
|
51609
|
-
|
|
51610
|
-
|
|
51611
|
-
const on = filters[key];
|
|
51612
|
-
const Icon = on ? eye/* default */.A : EyeOff;
|
|
51613
|
-
return /*#__PURE__*/ (0,react_jsx_runtime.jsxs)("button", {
|
|
51614
|
-
type: "button",
|
|
51615
|
-
onClick: ()=>toggle(key),
|
|
51616
|
-
className: [
|
|
51617
|
-
"inline-flex items-center gap-1 rounded-none border px-2 py-0.5 text-[10px] leading-4 transition-colors",
|
|
51618
|
-
on ? "border-border/70 bg-surface-2/70 text-fg-muted hover:text-fg" : "border-border/35 bg-transparent text-fg-faint line-through decoration-fg-faint/60 hover:text-fg-muted"
|
|
51619
|
-
].join(" "),
|
|
51620
|
-
title: // ADR-0044 — for the three channels the model's own
|
|
51621
|
-
// context is scoped by, the chip's meaning is dual:
|
|
51622
|
-
// it doesn't just show/hide rows here, it also
|
|
51623
|
-
// decides whether that channel's history is folded
|
|
51624
|
-
// into the next turn the agent sees.
|
|
51625
|
-
CHANNEL_SCOPED_FILTER_KEYS.has(key) ? on ? `Hide + exclude ${CHIP_LABELS[key]} from the next turn` : `Show + include ${CHIP_LABELS[key]} in the next turn` : on ? `Hide ${CHIP_LABELS[key]} messages` : `Show ${CHIP_LABELS[key]} messages`,
|
|
51626
|
-
"aria-pressed": on,
|
|
52069
|
+
}),
|
|
52070
|
+
visibleMessages.length === 0 && !streamingContent && /*#__PURE__*/ (0,react_jsx_runtime.jsx)("div", {
|
|
52071
|
+
className: "flex items-center justify-center h-full text-fg-faint text-sm select-none",
|
|
52072
|
+
children: messages.length === 0 ? /*#__PURE__*/ (0,react_jsx_runtime.jsx)("span", {
|
|
52073
|
+
children: "Send a message to begin"
|
|
52074
|
+
}) : /*#__PURE__*/ (0,react_jsx_runtime.jsxs)("div", {
|
|
52075
|
+
className: "flex flex-col items-center gap-2 text-center px-4",
|
|
51627
52076
|
children: [
|
|
51628
|
-
/*#__PURE__*/ (0,react_jsx_runtime.
|
|
51629
|
-
|
|
52077
|
+
/*#__PURE__*/ (0,react_jsx_runtime.jsxs)("span", {
|
|
52078
|
+
children: [
|
|
52079
|
+
hiddenCount,
|
|
52080
|
+
" message",
|
|
52081
|
+
hiddenCount === 1 ? " is" : "s are",
|
|
52082
|
+
" hidden by filters"
|
|
52083
|
+
]
|
|
51630
52084
|
}),
|
|
51631
|
-
/*#__PURE__*/ (0,react_jsx_runtime.jsx)("
|
|
51632
|
-
|
|
52085
|
+
/*#__PURE__*/ (0,react_jsx_runtime.jsx)("button", {
|
|
52086
|
+
type: "button",
|
|
52087
|
+
onClick: reset,
|
|
52088
|
+
className: "control-tap text-xs px-2.5 py-1 rounded-md border border-border bg-surface-2 text-fg-muted hover:text-fg hover:bg-surface-3 transition-colors",
|
|
52089
|
+
children: "Show all messages"
|
|
51633
52090
|
})
|
|
51634
52091
|
]
|
|
51635
|
-
}
|
|
52092
|
+
})
|
|
51636
52093
|
}),
|
|
51637
|
-
|
|
51638
|
-
|
|
51639
|
-
|
|
51640
|
-
|
|
51641
|
-
|
|
51642
|
-
|
|
51643
|
-
|
|
52094
|
+
(()=>{
|
|
52095
|
+
// ADR-0042. The boundary divider + warm summary card live INSIDE the
|
|
52096
|
+
// message stream so they scroll with content (not above as a fixed
|
|
52097
|
+
// banner). `boundaryIndex` is the index of the first hot message in
|
|
52098
|
+
// the visible list; everything before it is older-than-pin and gets
|
|
52099
|
+
// covered by the warm summary card sitting above the divider.
|
|
52100
|
+
//
|
|
52101
|
+
const hasPin = effectiveHotSinceSeq !== null;
|
|
52102
|
+
const boundaryIndex = hasPin ? boundaryIndexFor(effectiveHotSinceSeq) : -1;
|
|
52103
|
+
const pinAfterAll = hasPin && visibleMessages.length > 0 && boundaryIndex === visibleMessages.length;
|
|
52104
|
+
// The pin is the boundary's source of truth. Summary data can arrive
|
|
52105
|
+
// later (or be unavailable on an older thread), but hiding the line
|
|
52106
|
+
// in that interval makes a valid focus selection look like it vanished.
|
|
52107
|
+
const hasBoundary = hasPin && boundaryIndex >= 0;
|
|
52108
|
+
const olderInVisible = pinAfterAll ? visibleMessages.length : hasBoundary ? boundaryIndex : 0;
|
|
52109
|
+
// "+ N more we don't know about yet" — older pages are likely unloaded.
|
|
52110
|
+
const olderCountLabel = olderInVisible + (hasMore ? 1 : 0);
|
|
52111
|
+
const attachedActivities = new Map();
|
|
52112
|
+
const hiddenActivityIds = new Set();
|
|
52113
|
+
for(let i = 0; i < visibleMessages.length - 1; i++){
|
|
52114
|
+
const activityMessage = visibleMessages[i];
|
|
52115
|
+
const activity = activityMessage.metadata?.automation_activity;
|
|
52116
|
+
if (!activity) continue;
|
|
52117
|
+
const related = visibleMessages[i + 1];
|
|
52118
|
+
const matches = !related.metadata?.automation_activity && (activity.source_kind === "bridge" ? related.role === "user" && related.metadata?.bridge_conversation?.key === activity.source_id : related.role === "assistant" && related.category === activity.source_kind);
|
|
52119
|
+
if (!matches) continue;
|
|
52120
|
+
attachedActivities.set(related.id, activity);
|
|
52121
|
+
hiddenActivityIds.add(activityMessage.id);
|
|
52122
|
+
}
|
|
52123
|
+
const previousVisibleRoles = new Map();
|
|
52124
|
+
let previousVisibleRole = null;
|
|
52125
|
+
for (const message of visibleMessages){
|
|
52126
|
+
previousVisibleRoles.set(message.id, previousVisibleRole);
|
|
52127
|
+
if (!hiddenActivityIds.has(message.id)) previousVisibleRole = message.role;
|
|
52128
|
+
}
|
|
52129
|
+
const renderBoundary = (key)=>/*#__PURE__*/ (0,react_jsx_runtime.jsx)("div", {
|
|
52130
|
+
id: effectiveHotSinceSeq !== null ? `context-boundary-${effectiveHotSinceSeq}` : undefined,
|
|
52131
|
+
"data-focus-boundary": "1",
|
|
52132
|
+
"data-boundary-seq": effectiveHotSinceSeq ?? undefined,
|
|
52133
|
+
children: /*#__PURE__*/ (0,react_jsx_runtime.jsx)(ContextBoundaryDivider, {
|
|
52134
|
+
sourceMessages: warmSummarySourceMessages ?? null,
|
|
52135
|
+
sourceChars: warmSummarySourceChars ?? null,
|
|
52136
|
+
summaryChars: warmSummary ? warmSummary.length : null,
|
|
52137
|
+
lineStats: lineStatsForHotSince(effectiveHotSinceSeq),
|
|
52138
|
+
updating: warmSummaryPending && !summaryFresh,
|
|
52139
|
+
draggable: !!onSetContextPin,
|
|
52140
|
+
hidden: isDraggingFocus,
|
|
52141
|
+
disabled: !!streaming,
|
|
52142
|
+
onClick: handleBoundaryClick,
|
|
52143
|
+
onPointerDown: handleBoundaryPointerDown,
|
|
52144
|
+
onPointerMove: handleBoundaryPointerMove,
|
|
52145
|
+
onPointerUp: handleBoundaryPointerUp,
|
|
52146
|
+
onPointerCancel: handleBoundaryPointerCancel
|
|
52147
|
+
})
|
|
52148
|
+
}, key);
|
|
52149
|
+
const nodes = visibleMessages.flatMap((msg, i)=>{
|
|
52150
|
+
const out = [];
|
|
52151
|
+
if (hasBoundary && !pinAfterAll && i === boundaryIndex) {
|
|
52152
|
+
out.push(renderBoundary(`boundary-${msg.id}`));
|
|
52153
|
+
}
|
|
52154
|
+
if (hiddenActivityIds.has(msg.id)) return out;
|
|
52155
|
+
const previousRole = previousVisibleRoles.get(msg.id);
|
|
52156
|
+
const startsTurn = previousRole == null || previousRole !== msg.role;
|
|
52157
|
+
const steeredSegment = steeredSegments?.find((segment)=>segment.id === msg.id);
|
|
52158
|
+
if (steeredSegment) {
|
|
52159
|
+
out.push(/*#__PURE__*/ (0,react_jsx_runtime.jsx)(StreamingBubble, {
|
|
52160
|
+
content: steeredSegment.content,
|
|
52161
|
+
threadId: threadId ?? null,
|
|
52162
|
+
agentConfig: agentConfig ?? null,
|
|
52163
|
+
showAvatar: i === 0 || visibleMessages[i - 1].role !== "assistant"
|
|
52164
|
+
}, `steered-${steeredSegment.id}`));
|
|
52165
|
+
}
|
|
52166
|
+
out.push(/*#__PURE__*/ (0,react_jsx_runtime.jsx)("div", {
|
|
52167
|
+
id: typeof msg.seq === "number" ? String(msg.seq) : `msg-${msg.id}`,
|
|
52168
|
+
"data-message-id": msg.id,
|
|
52169
|
+
"data-hot-candidate": "1",
|
|
52170
|
+
"data-message-seq": msg.seq,
|
|
52171
|
+
"data-created-at": msg.created_at,
|
|
52172
|
+
className: startsTurn && i > 0 ? "mt-3" : undefined,
|
|
52173
|
+
children: /*#__PURE__*/ (0,react_jsx_runtime.jsx)(MessageBubble, {
|
|
52174
|
+
message: msg,
|
|
52175
|
+
attachedActivity: attachedActivities.get(msg.id),
|
|
52176
|
+
threadId: threadId ?? null,
|
|
52177
|
+
agentConfig: agentConfig,
|
|
52178
|
+
userProfile: userProfile,
|
|
52179
|
+
showAvatar: startsTurn,
|
|
52180
|
+
showToolEvents: filters.tool_use,
|
|
52181
|
+
contextWindowTokens: contextWindowTokens ?? null,
|
|
52182
|
+
isLatest: i === visibleMessages.length - 1 && !streamingContent,
|
|
52183
|
+
onRetry: onRetryMessage
|
|
52184
|
+
})
|
|
52185
|
+
}, msg.id));
|
|
52186
|
+
return out;
|
|
52187
|
+
});
|
|
52188
|
+
if (hasBoundary && pinAfterAll) nodes.push(renderBoundary("boundary-tail"));
|
|
52189
|
+
return nodes;
|
|
52190
|
+
})(),
|
|
52191
|
+
/*#__PURE__*/ (0,react_jsx_runtime.jsx)(LiveTurnActivity, {
|
|
52192
|
+
thinkingContent: thinkingContent,
|
|
52193
|
+
streamingContent: streamingContent,
|
|
52194
|
+
toolEvents: toolEvents,
|
|
52195
|
+
filters: filters,
|
|
52196
|
+
threadId: threadId ?? null,
|
|
52197
|
+
agentConfig: agentConfig ?? null,
|
|
52198
|
+
showStreamingAvatar: messages.length === 0 || messages[messages.length - 1].role !== "assistant",
|
|
52199
|
+
streaming: streaming
|
|
52200
|
+
}),
|
|
52201
|
+
queuedMessages && queuedMessages.length > 0 && /*#__PURE__*/ (0,react_jsx_runtime.jsx)("div", {
|
|
52202
|
+
className: "flex flex-col gap-1 mt-2 mb-1",
|
|
52203
|
+
children: queuedMessages.map((q)=>/*#__PURE__*/ (0,react_jsx_runtime.jsx)(QueuedBubble, {
|
|
52204
|
+
item: q,
|
|
52205
|
+
onRemove: onRemoveQueued
|
|
52206
|
+
}, q.id))
|
|
51644
52207
|
})
|
|
51645
52208
|
]
|
|
52209
|
+
}),
|
|
52210
|
+
/*#__PURE__*/ (0,react_jsx_runtime.jsx)("div", {
|
|
52211
|
+
ref: dragMaskRef,
|
|
52212
|
+
className: "pointer-events-none absolute left-0 right-0 top-0 z-40 opacity-0 transition-opacity duration-75",
|
|
52213
|
+
style: {
|
|
52214
|
+
transform: "translateY(0px)",
|
|
52215
|
+
height: "0px",
|
|
52216
|
+
background: "linear-gradient(to top, rgba(82,82,91,0.24) 0%, rgba(82,82,91,0.2) 22%, rgba(82,82,91,0.14) 48%, rgba(82,82,91,0.08) 72%, rgba(82,82,91,0.03) 88%, rgba(82,82,91,0) 100%)",
|
|
52217
|
+
borderBottom: "0",
|
|
52218
|
+
backdropFilter: "grayscale(0.5) saturate(0.18) contrast(0.98)",
|
|
52219
|
+
WebkitBackdropFilter: "grayscale(0.5) saturate(0.18) contrast(0.98)",
|
|
52220
|
+
maskImage: "linear-gradient(to top, black 0%, rgba(0,0,0,0.88) 72%, rgba(0,0,0,0.32) 90%, transparent 100%)",
|
|
52221
|
+
WebkitMaskImage: "linear-gradient(to top, black 0%, rgba(0,0,0,0.88) 72%, rgba(0,0,0,0.32) 90%, transparent 100%)"
|
|
52222
|
+
}
|
|
51646
52223
|
})
|
|
51647
52224
|
]
|
|
51648
|
-
})
|
|
51649
|
-
|
|
51650
|
-
|
|
51651
|
-
|
|
51652
|
-
|
|
51653
|
-
|
|
51654
|
-
|
|
51655
|
-
|
|
51656
|
-
|
|
51657
|
-
|
|
52225
|
+
}),
|
|
52226
|
+
showScrollButton && /*#__PURE__*/ (0,react_jsx_runtime.jsx)("button", {
|
|
52227
|
+
onClick: scrollToBottom,
|
|
52228
|
+
style: {
|
|
52229
|
+
bottom: "calc(1rem + var(--app-safe-bottom))"
|
|
52230
|
+
},
|
|
52231
|
+
className: "absolute right-4 p-2 rounded-full bg-accent/40 hover:bg-accent/80 text-white backdrop-blur-sm shadow-md transition-all animate-in fade-in slide-in-from-bottom-2 duration-200 z-20",
|
|
52232
|
+
title: "Auto-scroll paused — resume at latest message",
|
|
52233
|
+
"aria-label": "Resume auto-scroll to latest message",
|
|
52234
|
+
children: /*#__PURE__*/ (0,react_jsx_runtime.jsx)(ArrowDown, {
|
|
52235
|
+
size: 18
|
|
52236
|
+
})
|
|
52237
|
+
}),
|
|
52238
|
+
isDraggingFocus && /*#__PURE__*/ (0,react_jsx_runtime.jsx)(react_jsx_runtime.Fragment, {
|
|
52239
|
+
children: /*#__PURE__*/ (0,react_jsx_runtime.jsxs)("div", {
|
|
52240
|
+
ref: dragGuideRef,
|
|
52241
|
+
className: "pointer-events-none absolute left-4 right-4 z-50 opacity-0",
|
|
51658
52242
|
style: {
|
|
51659
|
-
|
|
51660
|
-
// floating header, not under it.
|
|
51661
|
-
scrollPaddingTop: "calc(3rem + var(--app-safe-top))"
|
|
52243
|
+
transform: "translateY(0px)"
|
|
51662
52244
|
},
|
|
51663
52245
|
children: [
|
|
51664
|
-
|
|
51665
|
-
className: "
|
|
51666
|
-
children: loadingMore ? "Loading earlier messages…" : "Scroll up for earlier messages"
|
|
51667
|
-
}),
|
|
51668
|
-
compactionPending && /*#__PURE__*/ (0,react_jsx_runtime.jsxs)("div", {
|
|
51669
|
-
className: "my-2 flex items-center justify-center gap-2 rounded-lg border border-border bg-surface-2/70 px-3 py-1.5 text-[11px] text-fg-faint select-none",
|
|
51670
|
-
children: [
|
|
51671
|
-
/*#__PURE__*/ (0,react_jsx_runtime.jsx)(StatusDot, {
|
|
51672
|
-
tone: "accent",
|
|
51673
|
-
size: "sm",
|
|
51674
|
-
pulse: true
|
|
51675
|
-
}),
|
|
51676
|
-
/*#__PURE__*/ (0,react_jsx_runtime.jsx)("span", {
|
|
51677
|
-
children: "Summarising earlier messages… this turn still sees the full history."
|
|
51678
|
-
})
|
|
51679
|
-
]
|
|
52246
|
+
/*#__PURE__*/ (0,react_jsx_runtime.jsx)("div", {
|
|
52247
|
+
className: "h-[2px] bg-gradient-to-r from-transparent via-accent to-transparent opacity-95 shadow-[0_0_8px_rgba(59,130,246,0.55)]"
|
|
51680
52248
|
}),
|
|
51681
|
-
|
|
51682
|
-
|
|
51683
|
-
|
|
51684
|
-
|
|
51685
|
-
|
|
51686
|
-
|
|
52249
|
+
/*#__PURE__*/ (0,react_jsx_runtime.jsx)("span", {
|
|
52250
|
+
ref: dragGuideStatsRef,
|
|
52251
|
+
className: "absolute right-1 top-1/2 -translate-y-1/2 text-[10px] text-fg-faint bg-surface/75 px-1.5 rounded border border-border/60",
|
|
52252
|
+
children: lineStatsForHotSince(effectiveHotSinceSeq)
|
|
52253
|
+
})
|
|
52254
|
+
]
|
|
52255
|
+
})
|
|
52256
|
+
}),
|
|
52257
|
+
summaryPopoverOpen && /*#__PURE__*/ (0,react_jsx_runtime.jsx)(Dialog/* Dialog */.l, {
|
|
52258
|
+
open: true,
|
|
52259
|
+
onClose: ()=>setSummaryPopoverOpen(false),
|
|
52260
|
+
title: "Earlier messages summary",
|
|
52261
|
+
size: "xl",
|
|
52262
|
+
align: "top",
|
|
52263
|
+
padded: false,
|
|
52264
|
+
children: /*#__PURE__*/ (0,react_jsx_runtime.jsxs)("div", {
|
|
52265
|
+
className: "p-4 space-y-3",
|
|
52266
|
+
children: [
|
|
52267
|
+
/*#__PURE__*/ (0,react_jsx_runtime.jsx)("div", {
|
|
52268
|
+
className: "flex items-center gap-2",
|
|
52269
|
+
children: /*#__PURE__*/ (0,react_jsx_runtime.jsxs)("span", {
|
|
52270
|
+
className: [
|
|
52271
|
+
"text-[10px] px-1.5 py-px rounded border inline-flex items-center gap-1",
|
|
52272
|
+
summaryUpdating ? "border-accent/40 bg-accent/10 text-accent" : summaryReady ? "border-emerald-500/30 bg-emerald-500/10 text-emerald-600 dark:text-emerald-400" : summaryStale ? "border-amber-500/30 bg-amber-500/10 text-amber-700 dark:text-amber-400" : "border-border bg-surface-2 text-fg-faint"
|
|
52273
|
+
].join(" "),
|
|
51687
52274
|
children: [
|
|
51688
|
-
/*#__PURE__*/ (0,react_jsx_runtime.
|
|
51689
|
-
|
|
51690
|
-
|
|
51691
|
-
" message",
|
|
51692
|
-
hiddenCount === 1 ? " is" : "s are",
|
|
51693
|
-
" hidden by filters"
|
|
51694
|
-
]
|
|
52275
|
+
summaryUpdating && /*#__PURE__*/ (0,react_jsx_runtime.jsx)("span", {
|
|
52276
|
+
className: "h-2 w-2 rounded-full bg-accent animate-pulse",
|
|
52277
|
+
"aria-label": "Summary updating"
|
|
51695
52278
|
}),
|
|
51696
|
-
/*#__PURE__*/ (0,react_jsx_runtime.jsx)("
|
|
51697
|
-
|
|
51698
|
-
onClick: reset,
|
|
51699
|
-
className: "control-tap text-xs px-2.5 py-1 rounded-md border border-border bg-surface-2 text-fg-muted hover:text-fg hover:bg-surface-3 transition-colors",
|
|
51700
|
-
children: "Show all messages"
|
|
52279
|
+
/*#__PURE__*/ (0,react_jsx_runtime.jsx)("span", {
|
|
52280
|
+
children: summaryUpdating ? "updating" : summaryReady ? "ready" : summaryStale ? "needs refresh" : "pending"
|
|
51701
52281
|
})
|
|
51702
52282
|
]
|
|
51703
52283
|
})
|
|
51704
52284
|
}),
|
|
51705
|
-
((
|
|
51706
|
-
|
|
51707
|
-
|
|
51708
|
-
// banner). `boundaryIndex` is the index of the first hot message in
|
|
51709
|
-
// the visible list; everything before it is older-than-pin and gets
|
|
51710
|
-
// covered by the warm summary card sitting above the divider.
|
|
51711
|
-
//
|
|
51712
|
-
const hasPin = effectiveHotSinceSeq !== null;
|
|
51713
|
-
const boundaryIndex = hasPin ? boundaryIndexFor(effectiveHotSinceSeq) : -1;
|
|
51714
|
-
const pinAfterAll = hasPin && visibleMessages.length > 0 && boundaryIndex === visibleMessages.length;
|
|
51715
|
-
// The pin is the boundary's source of truth. Summary data can arrive
|
|
51716
|
-
// later (or be unavailable on an older thread), but hiding the line
|
|
51717
|
-
// in that interval makes a valid focus selection look like it vanished.
|
|
51718
|
-
const hasBoundary = hasPin && boundaryIndex >= 0;
|
|
51719
|
-
const olderInVisible = pinAfterAll ? visibleMessages.length : hasBoundary ? boundaryIndex : 0;
|
|
51720
|
-
// "+ N more we don't know about yet" — older pages are likely unloaded.
|
|
51721
|
-
const olderCountLabel = olderInVisible + (hasMore ? 1 : 0);
|
|
51722
|
-
const attachedActivities = new Map();
|
|
51723
|
-
const hiddenActivityIds = new Set();
|
|
51724
|
-
for(let i = 0; i < visibleMessages.length - 1; i++){
|
|
51725
|
-
const activityMessage = visibleMessages[i];
|
|
51726
|
-
const activity = activityMessage.metadata?.automation_activity;
|
|
51727
|
-
if (!activity) continue;
|
|
51728
|
-
const related = visibleMessages[i + 1];
|
|
51729
|
-
const matches = !related.metadata?.automation_activity && (activity.source_kind === "bridge" ? related.role === "user" && related.metadata?.bridge_conversation?.key === activity.source_id : related.role === "assistant" && related.category === activity.source_kind);
|
|
51730
|
-
if (!matches) continue;
|
|
51731
|
-
attachedActivities.set(related.id, activity);
|
|
51732
|
-
hiddenActivityIds.add(activityMessage.id);
|
|
51733
|
-
}
|
|
51734
|
-
const previousVisibleRoles = new Map();
|
|
51735
|
-
let previousVisibleRole = null;
|
|
51736
|
-
for (const message of visibleMessages){
|
|
51737
|
-
previousVisibleRoles.set(message.id, previousVisibleRole);
|
|
51738
|
-
if (!hiddenActivityIds.has(message.id)) previousVisibleRole = message.role;
|
|
51739
|
-
}
|
|
51740
|
-
const renderBoundary = (key)=>/*#__PURE__*/ (0,react_jsx_runtime.jsx)("div", {
|
|
51741
|
-
id: effectiveHotSinceSeq !== null ? `context-boundary-${effectiveHotSinceSeq}` : undefined,
|
|
51742
|
-
"data-focus-boundary": "1",
|
|
51743
|
-
"data-boundary-seq": effectiveHotSinceSeq ?? undefined,
|
|
51744
|
-
children: /*#__PURE__*/ (0,react_jsx_runtime.jsx)(ContextBoundaryDivider, {
|
|
51745
|
-
sourceMessages: warmSummarySourceMessages ?? null,
|
|
51746
|
-
sourceChars: warmSummarySourceChars ?? null,
|
|
51747
|
-
summaryChars: warmSummary ? warmSummary.length : null,
|
|
51748
|
-
lineStats: lineStatsForHotSince(effectiveHotSinceSeq),
|
|
51749
|
-
updating: warmSummaryPending && !summaryFresh,
|
|
51750
|
-
draggable: !!onSetContextPin,
|
|
51751
|
-
hidden: isDraggingFocus,
|
|
51752
|
-
disabled: !!streaming,
|
|
51753
|
-
onClick: handleBoundaryClick,
|
|
51754
|
-
onPointerDown: handleBoundaryPointerDown,
|
|
51755
|
-
onPointerMove: handleBoundaryPointerMove,
|
|
51756
|
-
onPointerUp: handleBoundaryPointerUp,
|
|
51757
|
-
onPointerCancel: handleBoundaryPointerCancel
|
|
51758
|
-
})
|
|
51759
|
-
}, key);
|
|
51760
|
-
const nodes = visibleMessages.flatMap((msg, i)=>{
|
|
51761
|
-
const out = [];
|
|
51762
|
-
if (hasBoundary && !pinAfterAll && i === boundaryIndex) {
|
|
51763
|
-
out.push(renderBoundary(`boundary-${msg.id}`));
|
|
51764
|
-
}
|
|
51765
|
-
if (hiddenActivityIds.has(msg.id)) return out;
|
|
51766
|
-
const previousRole = previousVisibleRoles.get(msg.id);
|
|
51767
|
-
const startsTurn = previousRole == null || previousRole !== msg.role;
|
|
51768
|
-
const steeredSegment = steeredSegments?.find((segment)=>segment.id === msg.id);
|
|
51769
|
-
if (steeredSegment) {
|
|
51770
|
-
out.push(/*#__PURE__*/ (0,react_jsx_runtime.jsx)(StreamingBubble, {
|
|
51771
|
-
content: steeredSegment.content,
|
|
51772
|
-
threadId: threadId ?? null,
|
|
51773
|
-
agentConfig: agentConfig ?? null,
|
|
51774
|
-
showAvatar: i === 0 || visibleMessages[i - 1].role !== "assistant"
|
|
51775
|
-
}, `steered-${steeredSegment.id}`));
|
|
51776
|
-
}
|
|
51777
|
-
out.push(/*#__PURE__*/ (0,react_jsx_runtime.jsx)("div", {
|
|
51778
|
-
id: typeof msg.seq === "number" ? String(msg.seq) : `msg-${msg.id}`,
|
|
51779
|
-
"data-message-id": msg.id,
|
|
51780
|
-
"data-hot-candidate": "1",
|
|
51781
|
-
"data-message-seq": msg.seq,
|
|
51782
|
-
"data-created-at": msg.created_at,
|
|
51783
|
-
className: startsTurn && i > 0 ? "mt-3" : undefined,
|
|
51784
|
-
children: /*#__PURE__*/ (0,react_jsx_runtime.jsx)(MessageBubble, {
|
|
51785
|
-
message: msg,
|
|
51786
|
-
attachedActivity: attachedActivities.get(msg.id),
|
|
51787
|
-
threadId: threadId ?? null,
|
|
51788
|
-
agentConfig: agentConfig,
|
|
51789
|
-
userProfile: userProfile,
|
|
51790
|
-
showAvatar: startsTurn,
|
|
51791
|
-
showToolEvents: filters.tool_use,
|
|
51792
|
-
contextWindowTokens: contextWindowTokens ?? null,
|
|
51793
|
-
isLatest: i === visibleMessages.length - 1 && !streamingContent,
|
|
51794
|
-
onRetry: onRetryMessage
|
|
51795
|
-
})
|
|
51796
|
-
}, msg.id));
|
|
51797
|
-
return out;
|
|
51798
|
-
});
|
|
51799
|
-
if (hasBoundary && pinAfterAll) nodes.push(renderBoundary("boundary-tail"));
|
|
51800
|
-
return nodes;
|
|
51801
|
-
})(),
|
|
51802
|
-
/*#__PURE__*/ (0,react_jsx_runtime.jsx)(LiveTurnActivity, {
|
|
51803
|
-
thinkingContent: thinkingContent,
|
|
51804
|
-
streamingContent: streamingContent,
|
|
51805
|
-
toolEvents: toolEvents,
|
|
51806
|
-
filters: filters,
|
|
51807
|
-
threadId: threadId ?? null,
|
|
51808
|
-
agentConfig: agentConfig ?? null,
|
|
51809
|
-
showStreamingAvatar: messages.length === 0 || messages[messages.length - 1].role !== "assistant",
|
|
51810
|
-
streaming: streaming
|
|
51811
|
-
}),
|
|
51812
|
-
queuedMessages && queuedMessages.length > 0 && /*#__PURE__*/ (0,react_jsx_runtime.jsx)("div", {
|
|
51813
|
-
className: "flex flex-col gap-1 mt-2 mb-1",
|
|
51814
|
-
children: queuedMessages.map((q)=>/*#__PURE__*/ (0,react_jsx_runtime.jsx)(QueuedBubble, {
|
|
51815
|
-
item: q,
|
|
51816
|
-
onRemove: onRemoveQueued
|
|
51817
|
-
}, q.id))
|
|
52285
|
+
!summaryUpdating && /*#__PURE__*/ (0,react_jsx_runtime.jsx)("p", {
|
|
52286
|
+
className: "text-[11px] text-fg-faint",
|
|
52287
|
+
children: summaryFresh ? "Showing the latest summary for messages above the boundary line." : summaryCommittedEmpty ? warmChannelSummaries.length > 0 ? "No chat messages above the boundary line; automation activity there is summarised below." : "Nothing above the boundary line needed summarising." : summaryStale ? "This summary is from an older focus and will refresh after the next reply." : "No summary yet. It will appear after the next reply."
|
|
51818
52288
|
}),
|
|
51819
|
-
|
|
51820
|
-
|
|
51821
|
-
|
|
51822
|
-
|
|
51823
|
-
|
|
51824
|
-
|
|
51825
|
-
|
|
52289
|
+
/*#__PURE__*/ (0,react_jsx_runtime.jsx)(WarmSummaryCard, {
|
|
52290
|
+
olderCount: countOlderForHotSince(effectiveHotSinceSeq) + (hasMore ? 1 : 0),
|
|
52291
|
+
summary: warmSummary ?? null,
|
|
52292
|
+
summaryBeforeSeq: warmSummaryBeforeSeq ?? null,
|
|
52293
|
+
hotSinceSeq: effectiveHotSinceSeq,
|
|
52294
|
+
computedAt: warmSummaryComputedAt ?? null,
|
|
52295
|
+
streaming: !!streaming,
|
|
52296
|
+
topics: warmSummaryTopics ?? null,
|
|
52297
|
+
channelSummaries: warmChannelSummaries
|
|
52298
|
+
})
|
|
51826
52299
|
]
|
|
51827
|
-
}),
|
|
51828
|
-
/*#__PURE__*/ (0,react_jsx_runtime.jsx)("div", {
|
|
51829
|
-
ref: dragMaskRef,
|
|
51830
|
-
className: "pointer-events-none absolute left-0 right-0 top-0 z-40 opacity-0 transition-opacity duration-75",
|
|
51831
|
-
style: {
|
|
51832
|
-
transform: "translateY(0px)",
|
|
51833
|
-
height: "0px",
|
|
51834
|
-
background: "linear-gradient(to top, rgba(82,82,91,0.24) 0%, rgba(82,82,91,0.2) 22%, rgba(82,82,91,0.14) 48%, rgba(82,82,91,0.08) 72%, rgba(82,82,91,0.03) 88%, rgba(82,82,91,0) 100%)",
|
|
51835
|
-
borderBottom: "0",
|
|
51836
|
-
backdropFilter: "grayscale(0.5) saturate(0.18) contrast(0.98)",
|
|
51837
|
-
WebkitBackdropFilter: "grayscale(0.5) saturate(0.18) contrast(0.98)",
|
|
51838
|
-
maskImage: "linear-gradient(to top, black 0%, rgba(0,0,0,0.88) 72%, rgba(0,0,0,0.32) 90%, transparent 100%)",
|
|
51839
|
-
WebkitMaskImage: "linear-gradient(to top, black 0%, rgba(0,0,0,0.88) 72%, rgba(0,0,0,0.32) 90%, transparent 100%)"
|
|
51840
|
-
}
|
|
51841
52300
|
})
|
|
51842
|
-
|
|
51843
|
-
|
|
51844
|
-
|
|
51845
|
-
|
|
51846
|
-
|
|
51847
|
-
|
|
51848
|
-
},
|
|
51849
|
-
className: "absolute right-4 p-2 rounded-full bg-accent/40 hover:bg-accent/80 text-white backdrop-blur-sm shadow-md transition-all animate-in fade-in slide-in-from-bottom-2 duration-200 z-20",
|
|
51850
|
-
title: "Auto-scroll paused — resume at latest message",
|
|
51851
|
-
"aria-label": "Resume auto-scroll to latest message",
|
|
51852
|
-
children: /*#__PURE__*/ (0,react_jsx_runtime.jsx)(ArrowDown, {
|
|
51853
|
-
size: 18
|
|
51854
|
-
})
|
|
51855
|
-
}),
|
|
51856
|
-
isDraggingFocus && /*#__PURE__*/ (0,react_jsx_runtime.jsx)(react_jsx_runtime.Fragment, {
|
|
51857
|
-
children: /*#__PURE__*/ (0,react_jsx_runtime.jsxs)("div", {
|
|
51858
|
-
ref: dragGuideRef,
|
|
51859
|
-
className: "pointer-events-none absolute left-4 right-4 z-50 opacity-0",
|
|
51860
|
-
style: {
|
|
51861
|
-
transform: "translateY(0px)"
|
|
52301
|
+
}),
|
|
52302
|
+
/*#__PURE__*/ (0,react_jsx_runtime.jsxs)(Dialog/* Dialog */.l, {
|
|
52303
|
+
open: confirmOpen,
|
|
52304
|
+
onClose: ()=>{
|
|
52305
|
+
setConfirmOpen(false);
|
|
52306
|
+
setPendingHotSinceSeq(null);
|
|
51862
52307
|
},
|
|
52308
|
+
size: "sm",
|
|
52309
|
+
align: "center",
|
|
52310
|
+
dismissOnBackdrop: false,
|
|
51863
52311
|
children: [
|
|
51864
|
-
/*#__PURE__*/ (0,react_jsx_runtime.jsx)("
|
|
51865
|
-
className: "
|
|
52312
|
+
/*#__PURE__*/ (0,react_jsx_runtime.jsx)("h4", {
|
|
52313
|
+
className: "text-sm font-semibold text-fg",
|
|
52314
|
+
children: "Move conversation focus here?"
|
|
51866
52315
|
}),
|
|
51867
|
-
/*#__PURE__*/ (0,react_jsx_runtime.jsx)("
|
|
51868
|
-
|
|
51869
|
-
|
|
51870
|
-
children: lineStatsForHotSince(effectiveHotSinceSeq)
|
|
51871
|
-
})
|
|
51872
|
-
]
|
|
51873
|
-
})
|
|
51874
|
-
}),
|
|
51875
|
-
summaryPopoverOpen && /*#__PURE__*/ (0,react_jsx_runtime.jsx)(Dialog/* Dialog */.l, {
|
|
51876
|
-
open: true,
|
|
51877
|
-
onClose: ()=>setSummaryPopoverOpen(false),
|
|
51878
|
-
title: "Earlier messages summary",
|
|
51879
|
-
size: "xl",
|
|
51880
|
-
align: "top",
|
|
51881
|
-
padded: false,
|
|
51882
|
-
children: /*#__PURE__*/ (0,react_jsx_runtime.jsxs)("div", {
|
|
51883
|
-
className: "p-4 space-y-3",
|
|
51884
|
-
children: [
|
|
51885
|
-
/*#__PURE__*/ (0,react_jsx_runtime.jsx)("div", {
|
|
51886
|
-
className: "flex items-center gap-2",
|
|
51887
|
-
children: /*#__PURE__*/ (0,react_jsx_runtime.jsxs)("span", {
|
|
51888
|
-
className: [
|
|
51889
|
-
"text-[10px] px-1.5 py-px rounded border inline-flex items-center gap-1",
|
|
51890
|
-
summaryUpdating ? "border-accent/40 bg-accent/10 text-accent" : summaryFresh ? "border-emerald-500/30 bg-emerald-500/10 text-emerald-600 dark:text-emerald-400" : summaryStale ? "border-amber-500/30 bg-amber-500/10 text-amber-700 dark:text-amber-400" : "border-border bg-surface-2 text-fg-faint"
|
|
51891
|
-
].join(" "),
|
|
51892
|
-
children: [
|
|
51893
|
-
summaryUpdating && /*#__PURE__*/ (0,react_jsx_runtime.jsx)("span", {
|
|
51894
|
-
className: "h-2 w-2 rounded-full bg-accent animate-pulse",
|
|
51895
|
-
"aria-label": "Summary updating"
|
|
51896
|
-
}),
|
|
51897
|
-
/*#__PURE__*/ (0,react_jsx_runtime.jsx)("span", {
|
|
51898
|
-
children: summaryUpdating ? "updating" : summaryFresh ? "ready" : summaryStale ? "needs refresh" : "pending"
|
|
51899
|
-
})
|
|
51900
|
-
]
|
|
51901
|
-
})
|
|
52316
|
+
/*#__PURE__*/ (0,react_jsx_runtime.jsx)("p", {
|
|
52317
|
+
className: "text-xs text-fg-muted leading-relaxed",
|
|
52318
|
+
children: "Start a new conversation context from this point. New replies will prioritize recent messages below this line."
|
|
51902
52319
|
}),
|
|
51903
|
-
|
|
52320
|
+
nextHotCount !== null && /*#__PURE__*/ (0,react_jsx_runtime.jsxs)("p", {
|
|
51904
52321
|
className: "text-[11px] text-fg-faint",
|
|
51905
|
-
children:
|
|
52322
|
+
children: [
|
|
52323
|
+
"Recent in focus: ",
|
|
52324
|
+
nextHotCount,
|
|
52325
|
+
" loaded message",
|
|
52326
|
+
nextHotCount === 1 ? "" : "s",
|
|
52327
|
+
"; earlier loaded summary: ",
|
|
52328
|
+
Math.max(0, visibleMessages.length - nextHotCount),
|
|
52329
|
+
"."
|
|
52330
|
+
]
|
|
51906
52331
|
}),
|
|
51907
|
-
/*#__PURE__*/ (0,react_jsx_runtime.jsx)(
|
|
51908
|
-
|
|
51909
|
-
|
|
51910
|
-
|
|
51911
|
-
|
|
51912
|
-
|
|
51913
|
-
|
|
51914
|
-
|
|
52332
|
+
removesFromRecent && /*#__PURE__*/ (0,react_jsx_runtime.jsx)("p", {
|
|
52333
|
+
className: "text-[11px] text-amber-600 dark:text-amber-400",
|
|
52334
|
+
children: "This reduces recent in-focus messages. You can drag upward later to add history back."
|
|
52335
|
+
}),
|
|
52336
|
+
/*#__PURE__*/ (0,react_jsx_runtime.jsxs)("div", {
|
|
52337
|
+
className: "flex justify-end gap-2 pt-1",
|
|
52338
|
+
children: [
|
|
52339
|
+
/*#__PURE__*/ (0,react_jsx_runtime.jsx)("button", {
|
|
52340
|
+
type: "button",
|
|
52341
|
+
onClick: ()=>{
|
|
52342
|
+
setConfirmOpen(false);
|
|
52343
|
+
setPendingHotSinceSeq(null);
|
|
52344
|
+
},
|
|
52345
|
+
className: "px-3 py-1.5 text-xs text-fg-subtle hover:text-fg transition-colors",
|
|
52346
|
+
children: "Cancel"
|
|
52347
|
+
}),
|
|
52348
|
+
/*#__PURE__*/ (0,react_jsx_runtime.jsx)("button", {
|
|
52349
|
+
type: "button",
|
|
52350
|
+
onClick: ()=>{
|
|
52351
|
+
if (pendingHotSinceSeq !== null && onSetContextPin) onSetContextPin(pendingHotSinceSeq);
|
|
52352
|
+
setConfirmOpen(false);
|
|
52353
|
+
setPendingHotSinceSeq(null);
|
|
52354
|
+
},
|
|
52355
|
+
className: "px-3 py-1.5 rounded-md text-xs border border-accent/40 bg-accent text-white hover:opacity-95 transition-opacity",
|
|
52356
|
+
children: "Move focus"
|
|
52357
|
+
})
|
|
52358
|
+
]
|
|
51915
52359
|
})
|
|
51916
52360
|
]
|
|
51917
52361
|
})
|
|
51918
|
-
|
|
51919
|
-
|
|
51920
|
-
open: confirmOpen,
|
|
51921
|
-
onClose: ()=>{
|
|
51922
|
-
setConfirmOpen(false);
|
|
51923
|
-
setPendingHotSinceSeq(null);
|
|
51924
|
-
},
|
|
51925
|
-
size: "sm",
|
|
51926
|
-
align: "center",
|
|
51927
|
-
dismissOnBackdrop: false,
|
|
51928
|
-
children: [
|
|
51929
|
-
/*#__PURE__*/ (0,react_jsx_runtime.jsx)("h4", {
|
|
51930
|
-
className: "text-sm font-semibold text-fg",
|
|
51931
|
-
children: "Move conversation focus here?"
|
|
51932
|
-
}),
|
|
51933
|
-
/*#__PURE__*/ (0,react_jsx_runtime.jsx)("p", {
|
|
51934
|
-
className: "text-xs text-fg-muted leading-relaxed",
|
|
51935
|
-
children: "Start a new conversation context from this point. New replies will prioritize recent messages below this line."
|
|
51936
|
-
}),
|
|
51937
|
-
nextHotCount !== null && /*#__PURE__*/ (0,react_jsx_runtime.jsxs)("p", {
|
|
51938
|
-
className: "text-[11px] text-fg-faint",
|
|
51939
|
-
children: [
|
|
51940
|
-
"Recent in focus: ",
|
|
51941
|
-
nextHotCount,
|
|
51942
|
-
" loaded message",
|
|
51943
|
-
nextHotCount === 1 ? "" : "s",
|
|
51944
|
-
"; earlier loaded summary: ",
|
|
51945
|
-
Math.max(0, visibleMessages.length - nextHotCount),
|
|
51946
|
-
"."
|
|
51947
|
-
]
|
|
51948
|
-
}),
|
|
51949
|
-
removesFromRecent && /*#__PURE__*/ (0,react_jsx_runtime.jsx)("p", {
|
|
51950
|
-
className: "text-[11px] text-amber-600 dark:text-amber-400",
|
|
51951
|
-
children: "This reduces recent in-focus messages. You can drag upward later to add history back."
|
|
51952
|
-
}),
|
|
51953
|
-
/*#__PURE__*/ (0,react_jsx_runtime.jsxs)("div", {
|
|
51954
|
-
className: "flex justify-end gap-2 pt-1",
|
|
51955
|
-
children: [
|
|
51956
|
-
/*#__PURE__*/ (0,react_jsx_runtime.jsx)("button", {
|
|
51957
|
-
type: "button",
|
|
51958
|
-
onClick: ()=>{
|
|
51959
|
-
setConfirmOpen(false);
|
|
51960
|
-
setPendingHotSinceSeq(null);
|
|
51961
|
-
},
|
|
51962
|
-
className: "px-3 py-1.5 text-xs text-fg-subtle hover:text-fg transition-colors",
|
|
51963
|
-
children: "Cancel"
|
|
51964
|
-
}),
|
|
51965
|
-
/*#__PURE__*/ (0,react_jsx_runtime.jsx)("button", {
|
|
51966
|
-
type: "button",
|
|
51967
|
-
onClick: ()=>{
|
|
51968
|
-
if (pendingHotSinceSeq !== null && onSetContextPin) onSetContextPin(pendingHotSinceSeq);
|
|
51969
|
-
setConfirmOpen(false);
|
|
51970
|
-
setPendingHotSinceSeq(null);
|
|
51971
|
-
},
|
|
51972
|
-
className: "px-3 py-1.5 rounded-md text-xs border border-accent/40 bg-accent text-white hover:opacity-95 transition-opacity",
|
|
51973
|
-
children: "Move focus"
|
|
51974
|
-
})
|
|
51975
|
-
]
|
|
51976
|
-
})
|
|
51977
|
-
]
|
|
51978
|
-
})
|
|
51979
|
-
]
|
|
52362
|
+
]
|
|
52363
|
+
})
|
|
51980
52364
|
});
|
|
51981
52365
|
}
|
|
51982
52366
|
// ADR-0044 — the subset of MESSAGE_FILTER_KEYS that also map to a
|
|
@@ -51988,6 +52372,7 @@ const CHANNEL_SCOPED_FILTER_KEYS = new Set([
|
|
|
51988
52372
|
"watcher",
|
|
51989
52373
|
"bridge"
|
|
51990
52374
|
]);
|
|
52375
|
+
const PROGRAMMATIC_SCROLL_LOCK_MS = 1500;
|
|
51991
52376
|
const CHIP_LABELS = {
|
|
51992
52377
|
scheduled_task: "scheduled",
|
|
51993
52378
|
watcher: "watcher",
|
|
@@ -52157,7 +52542,46 @@ function QueuedBubble({ item, onRemove }) {
|
|
|
52157
52542
|
}
|
|
52158
52543
|
|
|
52159
52544
|
;// ./components/chat/chat-helpers.ts
|
|
52160
|
-
/* __next_internal_client_entry_do_not_use__ isUnconfirmed,appendUnique,applyThreadMeta,makeQueuedId,parseWarmSummaryTopics auto */ //
|
|
52545
|
+
/* __next_internal_client_entry_do_not_use__ compactionOutcomeToast,isUnconfirmed,appendUnique,applyThreadMeta,makeQueuedId,parseWarmSummaryTopics auto */ // Maps the /compact response to the toast the user sees. The server's reason
|
|
52546
|
+
// decides the text: "nothing to compact" means the thread is empty, anything
|
|
52547
|
+
// else means there were messages but no summary came out of them.
|
|
52548
|
+
function compactionOutcomeToast(result) {
|
|
52549
|
+
if (result.compacted) {
|
|
52550
|
+
const n = result.message_count ?? 0;
|
|
52551
|
+
return {
|
|
52552
|
+
kind: "success",
|
|
52553
|
+
title: "Context compacted",
|
|
52554
|
+
body: n > 0 ? `Summarised ${n} message${n === 1 ? "" : "s"} into warm context.` : "Started a fresh context window."
|
|
52555
|
+
};
|
|
52556
|
+
}
|
|
52557
|
+
if (result.reason === "nothing to compact") {
|
|
52558
|
+
return {
|
|
52559
|
+
kind: "info",
|
|
52560
|
+
title: "Nothing to compact",
|
|
52561
|
+
body: "This conversation has no messages yet."
|
|
52562
|
+
};
|
|
52563
|
+
}
|
|
52564
|
+
if (result.reason === "already compacting") {
|
|
52565
|
+
return {
|
|
52566
|
+
kind: "info",
|
|
52567
|
+
title: "Already compacting",
|
|
52568
|
+
body: "A compaction for this conversation is still running."
|
|
52569
|
+
};
|
|
52570
|
+
}
|
|
52571
|
+
if (result.reason === "timed out") {
|
|
52572
|
+
return {
|
|
52573
|
+
kind: "error",
|
|
52574
|
+
title: "Compaction timed out",
|
|
52575
|
+
body: "The summary took too long and was discarded. Context is unchanged."
|
|
52576
|
+
};
|
|
52577
|
+
}
|
|
52578
|
+
return {
|
|
52579
|
+
kind: "info",
|
|
52580
|
+
title: "Nothing was compacted",
|
|
52581
|
+
body: "There was too little to summarise, or the model returned no usable summary. Context is unchanged."
|
|
52582
|
+
};
|
|
52583
|
+
}
|
|
52584
|
+
// Append-with-reconcile. Merges server-persisted rows into the local list
|
|
52161
52585
|
// with three rules, applied in order for each incoming message:
|
|
52162
52586
|
//
|
|
52163
52587
|
// 1. Already present by server id → update in place (handles the
|
|
@@ -52242,10 +52666,12 @@ function applyThreadMeta(meta, payload) {
|
|
|
52242
52666
|
meta.setWarmSummarySourceMessages(payload.warm_summary_source_messages ?? null);
|
|
52243
52667
|
meta.setWarmSummarySourceChars(payload.warm_summary_source_chars ?? null);
|
|
52244
52668
|
meta.setWarmSummaryTopics?.(payload.warm_summary_topics ?? null);
|
|
52669
|
+
meta.setWarmChannelSummaries?.(payload.warm_channel_summaries ?? []);
|
|
52245
52670
|
meta.setContextWindowTokens(payload.context_window_tokens ?? null);
|
|
52246
52671
|
const summaryFresh = hotSinceSeq !== null && summaryBeforeSeq === hotSinceSeq;
|
|
52247
52672
|
meta.setWarmSummaryPending?.(hotSinceSeq !== null && !summaryFresh);
|
|
52248
52673
|
meta.setCompactionPending?.(payload.pending_hot_since_seq != null);
|
|
52674
|
+
meta.setManualCompactionPending?.(payload.manual_compaction_pending === true);
|
|
52249
52675
|
}
|
|
52250
52676
|
function makeQueuedId(prefix = "q") {
|
|
52251
52677
|
return `${prefix}-${Date.now()}-${Math.random().toString(36).slice(2, 6)}`;
|
|
@@ -52261,8 +52687,6 @@ function makeQueuedId(prefix = "q") {
|
|
|
52261
52687
|
}
|
|
52262
52688
|
}
|
|
52263
52689
|
|
|
52264
|
-
// EXTERNAL MODULE: ./lib/ui/error-report.ts
|
|
52265
|
-
var error_report = __webpack_require__(10778);
|
|
52266
52690
|
;// ./lib/ui/error-message.ts
|
|
52267
52691
|
/* __next_internal_client_entry_do_not_use__ friendlyErrorTitle,reportError auto */ // Centralized human-friendly error-title mapping. Used by pushErrorToast
|
|
52268
52692
|
// callers so the headline a user sees is consistent across the UI:
|
|
@@ -52593,7 +53017,6 @@ function useThreadCrossDeviceSync({ threadId, streamingRef, messagesRef, setMess
|
|
|
52593
53017
|
|
|
52594
53018
|
function useThreadData({ threadId, attach }) {
|
|
52595
53019
|
const [messages, setMessages] = (0,react.useState)([]);
|
|
52596
|
-
const [notices, setNotices] = (0,react.useState)([]);
|
|
52597
53020
|
const [hasMore, setHasMore] = (0,react.useState)(false);
|
|
52598
53021
|
const [loadingMore, setLoadingMore] = (0,react.useState)(false);
|
|
52599
53022
|
const [messagesLoading, setMessagesLoading] = (0,react.useState)(false);
|
|
@@ -52607,8 +53030,10 @@ function useThreadData({ threadId, attach }) {
|
|
|
52607
53030
|
const [warmSummarySourceMessages, setWarmSummarySourceMessages] = (0,react.useState)(null);
|
|
52608
53031
|
const [warmSummarySourceChars, setWarmSummarySourceChars] = (0,react.useState)(null);
|
|
52609
53032
|
const [warmSummaryTopics, setWarmSummaryTopics] = (0,react.useState)(null);
|
|
53033
|
+
const [warmChannelSummaries, setWarmChannelSummaries] = (0,react.useState)([]);
|
|
52610
53034
|
const [warmSummaryPending, setWarmSummaryPending] = (0,react.useState)(false);
|
|
52611
53035
|
const [compactionPending, setCompactionPending] = (0,react.useState)(false);
|
|
53036
|
+
const [manualCompactionPending, setManualCompactionPending] = (0,react.useState)(false);
|
|
52612
53037
|
const [contextWindowTokens, setContextWindowTokens] = (0,react.useState)(null);
|
|
52613
53038
|
const messagesRef = (0,react.useRef)([]);
|
|
52614
53039
|
messagesRef.current = messages;
|
|
@@ -52625,22 +53050,14 @@ function useThreadData({ threadId, attach }) {
|
|
|
52625
53050
|
setContextWindowTokens,
|
|
52626
53051
|
setWarmSummaryPending,
|
|
52627
53052
|
setCompactionPending,
|
|
52628
|
-
|
|
53053
|
+
setManualCompactionPending,
|
|
53054
|
+
setWarmSummaryTopics,
|
|
53055
|
+
setWarmChannelSummaries
|
|
52629
53056
|
};
|
|
52630
|
-
const addNotice = (0,react.useCallback)((text)=>{
|
|
52631
|
-
setNotices((p)=>[
|
|
52632
|
-
...p,
|
|
52633
|
-
{
|
|
52634
|
-
id: `notice-${Date.now()}`,
|
|
52635
|
-
text
|
|
52636
|
-
}
|
|
52637
|
-
]);
|
|
52638
|
-
}, []);
|
|
52639
53057
|
process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && (0,react.useEffect)(()=>{
|
|
52640
53058
|
if (!threadId) {
|
|
52641
53059
|
setMetadataThreadId(null);
|
|
52642
53060
|
setMessages([]);
|
|
52643
|
-
setNotices([]);
|
|
52644
53061
|
setHasMore(false);
|
|
52645
53062
|
setMessagesLoading(false);
|
|
52646
53063
|
setHotSince(null);
|
|
@@ -52652,8 +53069,10 @@ function useThreadData({ threadId, attach }) {
|
|
|
52652
53069
|
setWarmSummarySourceMessages(null);
|
|
52653
53070
|
setWarmSummarySourceChars(null);
|
|
52654
53071
|
setWarmSummaryTopics(null);
|
|
53072
|
+
setWarmChannelSummaries([]);
|
|
52655
53073
|
setWarmSummaryPending(false);
|
|
52656
53074
|
setCompactionPending(false);
|
|
53075
|
+
setManualCompactionPending(false);
|
|
52657
53076
|
setContextWindowTokens(null);
|
|
52658
53077
|
return;
|
|
52659
53078
|
}
|
|
@@ -52671,8 +53090,10 @@ function useThreadData({ threadId, attach }) {
|
|
|
52671
53090
|
setWarmSummarySourceMessages(null);
|
|
52672
53091
|
setWarmSummarySourceChars(null);
|
|
52673
53092
|
setWarmSummaryTopics(null);
|
|
53093
|
+
setWarmChannelSummaries([]);
|
|
52674
53094
|
setWarmSummaryPending(false);
|
|
52675
53095
|
setCompactionPending(false);
|
|
53096
|
+
setManualCompactionPending(false);
|
|
52676
53097
|
setContextWindowTokens(null);
|
|
52677
53098
|
client/* api */.FH.threads.get(threadId).then((d)=>{
|
|
52678
53099
|
if (cancelled) return;
|
|
@@ -52718,6 +53139,7 @@ function useThreadData({ threadId, attach }) {
|
|
|
52718
53139
|
setWarmSummarySourceMessages(updated.warm_summary_source_messages);
|
|
52719
53140
|
setWarmSummarySourceChars(updated.warm_summary_source_chars);
|
|
52720
53141
|
setWarmSummaryTopics(updated.warm_summary_topics);
|
|
53142
|
+
setWarmChannelSummaries(updated.warm_channel_summaries ?? []);
|
|
52721
53143
|
setCompactionPending(updated.pending_hot_since_seq != null);
|
|
52722
53144
|
const summaryFresh = updated.hot_since_seq != null && updated.warm_summary_before_seq === updated.hot_since_seq;
|
|
52723
53145
|
if (!updated.pending_hot_since_seq && (!updated.hot_since_seq || summaryFresh)) {
|
|
@@ -52735,7 +53157,7 @@ function useThreadData({ threadId, attach }) {
|
|
|
52735
53157
|
if (!threadId) return;
|
|
52736
53158
|
const summaryFresh = hotSinceSeq !== null && warmSummaryBeforeSeq === hotSinceSeq;
|
|
52737
53159
|
const summaryStale = warmSummaryPending && hotSinceSeq !== null && !summaryFresh;
|
|
52738
|
-
if (!summaryStale && !compactionPending) {
|
|
53160
|
+
if (!summaryStale && !compactionPending && !manualCompactionPending) {
|
|
52739
53161
|
if (warmSummaryPending && hotSinceSeq !== null && summaryFresh) setWarmSummaryPending(false);
|
|
52740
53162
|
return;
|
|
52741
53163
|
}
|
|
@@ -52761,6 +53183,7 @@ function useThreadData({ threadId, attach }) {
|
|
|
52761
53183
|
threadId,
|
|
52762
53184
|
warmSummaryPending,
|
|
52763
53185
|
compactionPending,
|
|
53186
|
+
manualCompactionPending,
|
|
52764
53187
|
hotSince,
|
|
52765
53188
|
hotSinceSeq,
|
|
52766
53189
|
warmSummaryBefore,
|
|
@@ -52798,9 +53221,6 @@ function useThreadData({ threadId, attach }) {
|
|
|
52798
53221
|
messages,
|
|
52799
53222
|
setMessages,
|
|
52800
53223
|
messagesRef,
|
|
52801
|
-
notices,
|
|
52802
|
-
setNotices,
|
|
52803
|
-
addNotice,
|
|
52804
53224
|
hasMore,
|
|
52805
53225
|
setHasMore,
|
|
52806
53226
|
loadingMore,
|
|
@@ -52815,8 +53235,10 @@ function useThreadData({ threadId, attach }) {
|
|
|
52815
53235
|
warmSummarySourceMessages,
|
|
52816
53236
|
warmSummarySourceChars,
|
|
52817
53237
|
warmSummaryTopics,
|
|
53238
|
+
warmChannelSummaries,
|
|
52818
53239
|
warmSummaryPending,
|
|
52819
53240
|
compactionPending,
|
|
53241
|
+
manualCompactionPending,
|
|
52820
53242
|
contextWindowTokens,
|
|
52821
53243
|
metaApplier,
|
|
52822
53244
|
loadOlder,
|
|
@@ -52824,6 +53246,96 @@ function useThreadData({ threadId, attach }) {
|
|
|
52824
53246
|
};
|
|
52825
53247
|
}
|
|
52826
53248
|
|
|
53249
|
+
;// ./components/chat/useThreadActivity.ts
|
|
53250
|
+
/* __next_internal_client_entry_do_not_use__ useThreadActivity auto */
|
|
53251
|
+
|
|
53252
|
+
|
|
53253
|
+
const BUSY_POLL_MS = 1500;
|
|
53254
|
+
const IDLE_POLL_MS = 5000;
|
|
53255
|
+
// A run's stream ends a moment before the registry marks it finished; a
|
|
53256
|
+
// snapshot inside this window may still report the run that just ended.
|
|
53257
|
+
const SETTLE_GRACE_MS = 2000;
|
|
53258
|
+
/**
|
|
53259
|
+
* Poll what the thread is doing on the server and keep the chat in step:
|
|
53260
|
+
* re-attach to a turn started elsewhere (scheduler, watcher, bridge, another
|
|
53261
|
+
* device), restore compaction flags after a remount, and refresh the thread
|
|
53262
|
+
* metadata once a compaction finishes.
|
|
53263
|
+
*/ function useThreadActivity({ threadId, attach, isLive, lastSettledAt, metaApplier }) {
|
|
53264
|
+
const [activity, setActivity] = (0,react.useState)(null);
|
|
53265
|
+
const deps = (0,react.useRef)({
|
|
53266
|
+
attach,
|
|
53267
|
+
isLive,
|
|
53268
|
+
lastSettledAt,
|
|
53269
|
+
metaApplier
|
|
53270
|
+
});
|
|
53271
|
+
deps.current = {
|
|
53272
|
+
attach,
|
|
53273
|
+
isLive,
|
|
53274
|
+
lastSettledAt,
|
|
53275
|
+
metaApplier
|
|
53276
|
+
};
|
|
53277
|
+
process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && (0,react.useEffect)(()=>{
|
|
53278
|
+
setActivity(null);
|
|
53279
|
+
if (!threadId) return;
|
|
53280
|
+
let cancelled = false;
|
|
53281
|
+
let timer = null;
|
|
53282
|
+
let hadCompaction = false;
|
|
53283
|
+
const schedule = (ms)=>{
|
|
53284
|
+
if (!cancelled) timer = window.setTimeout(tick, ms);
|
|
53285
|
+
};
|
|
53286
|
+
async function tick() {
|
|
53287
|
+
if (cancelled || !threadId) return;
|
|
53288
|
+
if (typeof document !== "undefined" && document.hidden) {
|
|
53289
|
+
schedule(IDLE_POLL_MS);
|
|
53290
|
+
return;
|
|
53291
|
+
}
|
|
53292
|
+
let next;
|
|
53293
|
+
try {
|
|
53294
|
+
next = await client/* api */.FH.threads.activity(threadId);
|
|
53295
|
+
} catch {
|
|
53296
|
+
schedule(IDLE_POLL_MS);
|
|
53297
|
+
return;
|
|
53298
|
+
}
|
|
53299
|
+
if (cancelled) return;
|
|
53300
|
+
setActivity(next);
|
|
53301
|
+
const d = deps.current;
|
|
53302
|
+
const serverRunning = next.run !== null || next.queue_depth > 0;
|
|
53303
|
+
const recentlySettled = Date.now() - d.lastSettledAt() < SETTLE_GRACE_MS;
|
|
53304
|
+
if (serverRunning && !d.isLive() && !recentlySettled) {
|
|
53305
|
+
d.attach(threadId).catch(()=>{});
|
|
53306
|
+
}
|
|
53307
|
+
if (next.compaction) {
|
|
53308
|
+
if (next.compaction.kind !== "refresh") d.metaApplier.setCompactionPending?.(true);
|
|
53309
|
+
if (next.compaction.kind === "manual") d.metaApplier.setManualCompactionPending?.(true);
|
|
53310
|
+
hadCompaction = true;
|
|
53311
|
+
} else if (hadCompaction) {
|
|
53312
|
+
hadCompaction = false;
|
|
53313
|
+
// The compaction just finished. Clear the flags from the snapshot
|
|
53314
|
+
// itself so a failed refresh below can't leave the chat locked, then
|
|
53315
|
+
// pull the new boundary and recap.
|
|
53316
|
+
d.metaApplier.setCompactionPending?.(false);
|
|
53317
|
+
d.metaApplier.setManualCompactionPending?.(false);
|
|
53318
|
+
client/* api */.FH.threads.get(threadId, {
|
|
53319
|
+
limit: 1
|
|
53320
|
+
}).then((meta)=>{
|
|
53321
|
+
if (!cancelled) applyThreadMeta(deps.current.metaApplier, meta);
|
|
53322
|
+
}).catch(()=>{});
|
|
53323
|
+
}
|
|
53324
|
+
schedule(next.busy ? BUSY_POLL_MS : IDLE_POLL_MS);
|
|
53325
|
+
}
|
|
53326
|
+
// The thread load attaches to any in-flight run itself; give it a beat
|
|
53327
|
+
// so this poller doesn't race it with a second attach.
|
|
53328
|
+
schedule(BUSY_POLL_MS);
|
|
53329
|
+
return ()=>{
|
|
53330
|
+
cancelled = true;
|
|
53331
|
+
if (timer !== null) window.clearTimeout(timer);
|
|
53332
|
+
};
|
|
53333
|
+
}, [
|
|
53334
|
+
threadId
|
|
53335
|
+
]);
|
|
53336
|
+
return activity;
|
|
53337
|
+
}
|
|
53338
|
+
|
|
52827
53339
|
;// ./components/chat/useUserProfileAndAgent.ts
|
|
52828
53340
|
/* __next_internal_client_entry_do_not_use__ useUserProfileAndAgent auto */
|
|
52829
53341
|
|
|
@@ -53023,6 +53535,9 @@ function useChatSubmitHandlers({ agentId, steerRun, attachments, setAttachments,
|
|
|
53023
53535
|
|
|
53024
53536
|
|
|
53025
53537
|
|
|
53538
|
+
|
|
53539
|
+
|
|
53540
|
+
|
|
53026
53541
|
|
|
53027
53542
|
function ChatView({ threadId, agentId, sessionLoading, sessionError, onMessageSent }) {
|
|
53028
53543
|
const { state } = (0,AppContext/* useAppContext */.U)();
|
|
@@ -53079,6 +53594,19 @@ function ChatView({ threadId, agentId, sessionLoading, sessionError, onMessageSe
|
|
|
53079
53594
|
attachRef.current = sse.attach;
|
|
53080
53595
|
clearStreamingRef.current = sse.clearStreamingContent;
|
|
53081
53596
|
clearToolEventsRef.current = sse.clearToolEvents;
|
|
53597
|
+
// `compacting` lives in this component, which remounts per agent; the
|
|
53598
|
+
// server flag keeps a /compact started before an agent switch visible.
|
|
53599
|
+
const sessionCompacting = compacting || thread.manualCompactionPending;
|
|
53600
|
+
const activity = useThreadActivity({
|
|
53601
|
+
threadId,
|
|
53602
|
+
attach: stableAttach,
|
|
53603
|
+
isLive: sse.isLive,
|
|
53604
|
+
lastSettledAt: sse.lastSettledAt,
|
|
53605
|
+
metaApplier: thread.metaApplier
|
|
53606
|
+
});
|
|
53607
|
+
// Run phases come through the attached stream; background compaction
|
|
53608
|
+
// outside a run has no stream, so label it from the polled activity.
|
|
53609
|
+
const backgroundCompaction = !sse.streaming && !sessionCompacting ? activity?.compaction?.kind ?? null : null;
|
|
53082
53610
|
useChatErrorReporting({
|
|
53083
53611
|
sessionError,
|
|
53084
53612
|
streamError: sse.error,
|
|
@@ -53088,6 +53616,8 @@ function ChatView({ threadId, agentId, sessionLoading, sessionError, onMessageSe
|
|
|
53088
53616
|
});
|
|
53089
53617
|
const streamingRef = (0,react.useRef)(false);
|
|
53090
53618
|
streamingRef.current = sse.streaming;
|
|
53619
|
+
const currentThreadIdRef = (0,react.useRef)(threadId);
|
|
53620
|
+
currentThreadIdRef.current = threadId;
|
|
53091
53621
|
// Auto compaction starts server-side during a run; poll so the banner shows live.
|
|
53092
53622
|
process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && (0,react.useEffect)(()=>{
|
|
53093
53623
|
if (!threadId || !sse.streaming) return;
|
|
@@ -53118,10 +53648,13 @@ function ChatView({ threadId, agentId, sessionLoading, sessionError, onMessageSe
|
|
|
53118
53648
|
});
|
|
53119
53649
|
useTrackLoading(!!sessionLoading);
|
|
53120
53650
|
useTrackLoading(sse.streaming);
|
|
53121
|
-
useTrackLoading(
|
|
53651
|
+
useTrackLoading(sessionCompacting);
|
|
53122
53652
|
useTrackLoading(thread.loadingMore);
|
|
53123
53653
|
useTrackLoading(thread.messagesLoading);
|
|
53124
53654
|
useTrackLoading(agentConfigLoading);
|
|
53655
|
+
useActivityWhile(sessionCompacting, "Compacting session…");
|
|
53656
|
+
useActivityWhile(backgroundCompaction === "auto", "Compacting earlier messages…");
|
|
53657
|
+
useActivityWhile(backgroundCompaction === "refresh", "Updating summary…");
|
|
53125
53658
|
useActivityWhile(thread.messagesLoading, "Loading chat history…");
|
|
53126
53659
|
useActivityWhile(agentConfigLoading, "Loading agent…");
|
|
53127
53660
|
useActivityWhile(profileLoading, "Loading profile…");
|
|
@@ -53225,19 +53758,35 @@ function ChatView({ threadId, agentId, sessionLoading, sessionError, onMessageSe
|
|
|
53225
53758
|
const queue = useChatQueue({
|
|
53226
53759
|
threadId,
|
|
53227
53760
|
streaming: sse.streaming,
|
|
53228
|
-
compacting,
|
|
53761
|
+
compacting: sessionCompacting,
|
|
53229
53762
|
launchRun
|
|
53230
53763
|
});
|
|
53231
53764
|
queueApiRef.current = queue;
|
|
53232
53765
|
drainQueueRef.current = queue.drainQueueRef.current;
|
|
53233
53766
|
async function handleCompact() {
|
|
53234
53767
|
if (!agentId) return;
|
|
53768
|
+
const notifyCompaction = (result)=>{
|
|
53769
|
+
const toast = compactionOutcomeToast(result);
|
|
53770
|
+
(0,ui_toasts/* pushToast */.Iz)({
|
|
53771
|
+
...toast,
|
|
53772
|
+
source: "system",
|
|
53773
|
+
sourceLabel: "Chat",
|
|
53774
|
+
agent_id: agentId,
|
|
53775
|
+
thread_id: threadId,
|
|
53776
|
+
ttl: 5000,
|
|
53777
|
+
dedupeKey: `compact:${agentId}`
|
|
53778
|
+
});
|
|
53779
|
+
};
|
|
53235
53780
|
setCompacting(true);
|
|
53236
53781
|
try {
|
|
53237
53782
|
const result = await client/* api */.FH.agents.compact(agentId, {
|
|
53238
53783
|
resetContext: true
|
|
53239
53784
|
});
|
|
53240
|
-
|
|
53785
|
+
// The thread may have changed while compaction ran; never apply its
|
|
53786
|
+
// result to a different thread's view.
|
|
53787
|
+
const compactedThreadId = threadId;
|
|
53788
|
+
const stillCurrent = ()=>compactedThreadId !== null && currentThreadIdRef.current === compactedThreadId;
|
|
53789
|
+
if (result.compacted && compactedThreadId !== null && stillCurrent()) {
|
|
53241
53790
|
// Server moved the hot/warm pin to just after the last existing
|
|
53242
53791
|
// message and persisted the warm summary. Mirror that in-place so
|
|
53243
53792
|
// the warm card shows the fresh summary without wiping the visible
|
|
@@ -53249,16 +53798,29 @@ function ChatView({ threadId, agentId, sessionLoading, sessionError, onMessageSe
|
|
|
53249
53798
|
thread.metaApplier.setWarmSummary(result.warm_summary ?? null);
|
|
53250
53799
|
thread.metaApplier.setWarmSummaryBefore(result.warm_summary_before ?? null);
|
|
53251
53800
|
thread.metaApplier.setWarmSummaryBeforeSeq(result.warm_summary_before_seq ?? null);
|
|
53252
|
-
thread.metaApplier.setWarmSummaryBeforeSeq(result.warm_summary_before_seq ?? null);
|
|
53253
53801
|
thread.metaApplier.setWarmSummaryComputedAt(result.warm_summary_computed_at ?? null);
|
|
53254
53802
|
thread.metaApplier.setWarmSummarySourceMessages(result.warm_summary_source_messages ?? null);
|
|
53255
53803
|
thread.metaApplier.setWarmSummarySourceChars(result.warm_summary_source_chars ?? null);
|
|
53256
53804
|
thread.metaApplier.setWarmSummaryTopics?.(parseWarmSummaryTopics(result.warm_summary_topics));
|
|
53257
|
-
|
|
53258
|
-
|
|
53259
|
-
|
|
53805
|
+
// The compact response carries only the chat recap; channel recaps
|
|
53806
|
+
// (bridge, watcher, scheduled task) come with the thread metadata.
|
|
53807
|
+
void client/* api */.FH.threads.get(compactedThreadId, {
|
|
53808
|
+
limit: 1
|
|
53809
|
+
}).then((d)=>{
|
|
53810
|
+
if (stillCurrent()) applyThreadMeta(thread.metaApplier, d);
|
|
53811
|
+
}).catch(()=>{});
|
|
53812
|
+
}
|
|
53813
|
+
notifyCompaction(result);
|
|
53260
53814
|
} catch (err) {
|
|
53261
|
-
|
|
53815
|
+
(0,error_report/* pushErrorToast */.uS)({
|
|
53816
|
+
title: "Compaction failed",
|
|
53817
|
+
error: err,
|
|
53818
|
+
context: {
|
|
53819
|
+
panel: "chat",
|
|
53820
|
+
action: "compact",
|
|
53821
|
+
agent_id: agentId
|
|
53822
|
+
}
|
|
53823
|
+
});
|
|
53262
53824
|
} finally{
|
|
53263
53825
|
setCompacting(false);
|
|
53264
53826
|
queue.drainQueueRef.current();
|
|
@@ -53284,7 +53846,6 @@ function ChatView({ threadId, agentId, sessionLoading, sessionError, onMessageSe
|
|
|
53284
53846
|
threadId: threadId,
|
|
53285
53847
|
messages: thread.messages,
|
|
53286
53848
|
steeredSegments: sse.steeredSegments,
|
|
53287
|
-
notices: thread.notices,
|
|
53288
53849
|
agentConfig: agentConfig,
|
|
53289
53850
|
userProfile: userProfile,
|
|
53290
53851
|
// streamingContent stays visible past `streaming=false` so the bubble
|
|
@@ -53311,8 +53872,9 @@ function ChatView({ threadId, agentId, sessionLoading, sessionError, onMessageSe
|
|
|
53311
53872
|
warmSummarySourceMessages: thread.warmSummarySourceMessages,
|
|
53312
53873
|
warmSummarySourceChars: thread.warmSummarySourceChars,
|
|
53313
53874
|
warmSummaryTopics: thread.warmSummaryTopics,
|
|
53875
|
+
warmChannelSummaries: thread.warmChannelSummaries,
|
|
53314
53876
|
warmSummaryPending: thread.warmSummaryPending,
|
|
53315
|
-
compactionPending: thread.compactionPending ||
|
|
53877
|
+
compactionPending: thread.compactionPending || sessionCompacting,
|
|
53316
53878
|
onSetContextPin: thread.setContextPin,
|
|
53317
53879
|
streaming: sse.streaming,
|
|
53318
53880
|
contextWindowTokens: thread.contextWindowTokens,
|
|
@@ -53340,7 +53902,7 @@ function ChatView({ threadId, agentId, sessionLoading, sessionError, onMessageSe
|
|
|
53340
53902
|
onVoiceTranscript: handleVoiceTranscript,
|
|
53341
53903
|
disabled: !agentId,
|
|
53342
53904
|
placeholder: composerPlaceholder({
|
|
53343
|
-
compacting,
|
|
53905
|
+
compacting: sessionCompacting,
|
|
53344
53906
|
sessionLoading: !!sessionLoading,
|
|
53345
53907
|
streaming: sse.streaming
|
|
53346
53908
|
})
|
|
@@ -73625,6 +74187,22 @@ function BootScreen({ agents, agentsLoaded, activeAgentId, onPickAgent, suppress
|
|
|
73625
74187
|
setAdoptionBusy(null);
|
|
73626
74188
|
}
|
|
73627
74189
|
}
|
|
74190
|
+
async function handleAdoptionItemRetry(itemId) {
|
|
74191
|
+
if (adoptionBusy || adoption?.status === "running") return;
|
|
74192
|
+
setAdoptionBusy("retry");
|
|
74193
|
+
try {
|
|
74194
|
+
const next = await client/* api */.FH.lifecycle.adoption.retryItem(itemId);
|
|
74195
|
+
setAdoption(next);
|
|
74196
|
+
adoptionRunStartedRef.current = null;
|
|
74197
|
+
} catch {
|
|
74198
|
+
setAdoption((prev)=>prev ? {
|
|
74199
|
+
...prev,
|
|
74200
|
+
error: "Could not retry that step."
|
|
74201
|
+
} : prev);
|
|
74202
|
+
} finally{
|
|
74203
|
+
setAdoptionBusy(null);
|
|
74204
|
+
}
|
|
74205
|
+
}
|
|
73628
74206
|
// The agent rendered in the centered tile. During `loading` and
|
|
73629
74207
|
// `pick` it's the default (so the user sees the same artwork as soon
|
|
73630
74208
|
// as agents resolve). During `opening` it's whatever was picked.
|
|
@@ -73767,6 +74345,9 @@ function BootScreen({ agents, agentsLoaded, activeAgentId, onPickAgent, suppress
|
|
|
73767
74345
|
summary: adoptionLiveLabel ?? adoption.summary,
|
|
73768
74346
|
items: adoption.checklist,
|
|
73769
74347
|
error: adoption.error,
|
|
74348
|
+
onRetryItem: (item)=>void handleAdoptionItemRetry(item.id),
|
|
74349
|
+
canRetryItem: (item)=>item.id !== "fetch-changes",
|
|
74350
|
+
retryDisabled: adoptionBusy !== null || adoption.status === "running",
|
|
73770
74351
|
children: [
|
|
73771
74352
|
adoption.status === "done" && /*#__PURE__*/ (0,react_jsx_runtime.jsx)("p", {
|
|
73772
74353
|
className: "mt-2 rounded-lg border border-border/50 bg-surface px-2 py-1 text-[10px] leading-snug text-fg-muted",
|
|
@@ -77394,198 +77975,6 @@ function AppShell() {
|
|
|
77394
77975
|
}
|
|
77395
77976
|
|
|
77396
77977
|
|
|
77397
|
-
/***/ }),
|
|
77398
|
-
|
|
77399
|
-
/***/ 75729:
|
|
77400
|
-
/***/ ((module, exports, __webpack_require__) => {
|
|
77401
|
-
|
|
77402
|
-
"use strict";
|
|
77403
|
-
|
|
77404
|
-
Object.defineProperty(exports, "__esModule", ({
|
|
77405
|
-
value: true
|
|
77406
|
-
}));
|
|
77407
|
-
Object.defineProperty(exports, "addBasePath", ({
|
|
77408
|
-
enumerable: true,
|
|
77409
|
-
get: function() {
|
|
77410
|
-
return addBasePath;
|
|
77411
|
-
}
|
|
77412
|
-
}));
|
|
77413
|
-
const _addpathprefix = __webpack_require__(71000);
|
|
77414
|
-
const _normalizetrailingslash = __webpack_require__(34956);
|
|
77415
|
-
const basePath = false || '';
|
|
77416
|
-
function addBasePath(path, required) {
|
|
77417
|
-
return (0, _normalizetrailingslash.normalizePathTrailingSlash)( false ? 0 : (0, _addpathprefix.addPathPrefix)(path, basePath));
|
|
77418
|
-
}
|
|
77419
|
-
if ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {
|
|
77420
|
-
Object.defineProperty(exports.default, '__esModule', {
|
|
77421
|
-
value: true
|
|
77422
|
-
});
|
|
77423
|
-
Object.assign(exports.default, exports);
|
|
77424
|
-
module.exports = exports.default;
|
|
77425
|
-
} //# sourceMappingURL=add-base-path.js.map
|
|
77426
|
-
|
|
77427
|
-
|
|
77428
|
-
/***/ }),
|
|
77429
|
-
|
|
77430
|
-
/***/ 75919:
|
|
77431
|
-
/***/ ((module) => {
|
|
77432
|
-
|
|
77433
|
-
"use strict";
|
|
77434
|
-
module.exports = require("node:worker_threads");
|
|
77435
|
-
|
|
77436
|
-
/***/ }),
|
|
77437
|
-
|
|
77438
|
-
/***/ 76760:
|
|
77439
|
-
/***/ ((module) => {
|
|
77440
|
-
|
|
77441
|
-
"use strict";
|
|
77442
|
-
module.exports = require("node:path");
|
|
77443
|
-
|
|
77444
|
-
/***/ }),
|
|
77445
|
-
|
|
77446
|
-
/***/ 77598:
|
|
77447
|
-
/***/ ((module) => {
|
|
77448
|
-
|
|
77449
|
-
"use strict";
|
|
77450
|
-
module.exports = require("node:crypto");
|
|
77451
|
-
|
|
77452
|
-
/***/ }),
|
|
77453
|
-
|
|
77454
|
-
/***/ 79428:
|
|
77455
|
-
/***/ ((module) => {
|
|
77456
|
-
|
|
77457
|
-
"use strict";
|
|
77458
|
-
module.exports = require("buffer");
|
|
77459
|
-
|
|
77460
|
-
/***/ }),
|
|
77461
|
-
|
|
77462
|
-
/***/ 79925:
|
|
77463
|
-
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
|
77464
|
-
|
|
77465
|
-
"use strict";
|
|
77466
|
-
// Format function modified from nodejs
|
|
77467
|
-
// Copyright Joyent, Inc. and other Node contributors.
|
|
77468
|
-
//
|
|
77469
|
-
// Permission is hereby granted, free of charge, to any person obtaining a
|
|
77470
|
-
// copy of this software and associated documentation files (the
|
|
77471
|
-
// "Software"), to deal in the Software without restriction, including
|
|
77472
|
-
// without limitation the rights to use, copy, modify, merge, publish,
|
|
77473
|
-
// distribute, sublicense, and/or sell copies of the Software, and to permit
|
|
77474
|
-
// persons to whom the Software is furnished to do so, subject to the
|
|
77475
|
-
// following conditions:
|
|
77476
|
-
//
|
|
77477
|
-
// The above copyright notice and this permission notice shall be included
|
|
77478
|
-
// in all copies or substantial portions of the Software.
|
|
77479
|
-
//
|
|
77480
|
-
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
|
77481
|
-
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
77482
|
-
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
|
|
77483
|
-
// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
|
|
77484
|
-
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
|
77485
|
-
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
|
|
77486
|
-
// USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
77487
|
-
|
|
77488
|
-
Object.defineProperty(exports, "__esModule", ({
|
|
77489
|
-
value: true
|
|
77490
|
-
}));
|
|
77491
|
-
0 && (0);
|
|
77492
|
-
function _export(target, all) {
|
|
77493
|
-
for(var name in all)Object.defineProperty(target, name, {
|
|
77494
|
-
enumerable: true,
|
|
77495
|
-
get: all[name]
|
|
77496
|
-
});
|
|
77497
|
-
}
|
|
77498
|
-
_export(exports, {
|
|
77499
|
-
formatUrl: function() {
|
|
77500
|
-
return formatUrl;
|
|
77501
|
-
},
|
|
77502
|
-
formatWithValidation: function() {
|
|
77503
|
-
return formatWithValidation;
|
|
77504
|
-
},
|
|
77505
|
-
urlObjectKeys: function() {
|
|
77506
|
-
return urlObjectKeys;
|
|
77507
|
-
}
|
|
77508
|
-
});
|
|
77509
|
-
const _interop_require_wildcard = __webpack_require__(24814);
|
|
77510
|
-
const _querystring = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(90485));
|
|
77511
|
-
const slashedProtocols = /https?|ftp|gopher|file/;
|
|
77512
|
-
function formatUrl(urlObj) {
|
|
77513
|
-
let { auth, hostname } = urlObj;
|
|
77514
|
-
let protocol = urlObj.protocol || '';
|
|
77515
|
-
let pathname = urlObj.pathname || '';
|
|
77516
|
-
let hash = urlObj.hash || '';
|
|
77517
|
-
let query = urlObj.query || '';
|
|
77518
|
-
let host = false;
|
|
77519
|
-
auth = auth ? encodeURIComponent(auth).replace(/%3A/i, ':') + '@' : '';
|
|
77520
|
-
if (urlObj.host) {
|
|
77521
|
-
host = auth + urlObj.host;
|
|
77522
|
-
} else if (hostname) {
|
|
77523
|
-
host = auth + (~hostname.indexOf(':') ? `[${hostname}]` : hostname);
|
|
77524
|
-
if (urlObj.port) {
|
|
77525
|
-
host += ':' + urlObj.port;
|
|
77526
|
-
}
|
|
77527
|
-
}
|
|
77528
|
-
if (query && typeof query === 'object') {
|
|
77529
|
-
query = String(_querystring.urlQueryToSearchParams(query));
|
|
77530
|
-
}
|
|
77531
|
-
let search = urlObj.search || query && `?${query}` || '';
|
|
77532
|
-
if (protocol && !protocol.endsWith(':')) protocol += ':';
|
|
77533
|
-
if (urlObj.slashes || (!protocol || slashedProtocols.test(protocol)) && host !== false) {
|
|
77534
|
-
host = '//' + (host || '');
|
|
77535
|
-
if (pathname && pathname[0] !== '/') pathname = '/' + pathname;
|
|
77536
|
-
} else if (!host) {
|
|
77537
|
-
host = '';
|
|
77538
|
-
}
|
|
77539
|
-
if (hash && hash[0] !== '#') hash = '#' + hash;
|
|
77540
|
-
if (search && search[0] !== '?') search = '?' + search;
|
|
77541
|
-
pathname = pathname.replace(/[?#]/g, encodeURIComponent);
|
|
77542
|
-
search = search.replace('#', '%23');
|
|
77543
|
-
return `${protocol}${host}${pathname}${search}${hash}`;
|
|
77544
|
-
}
|
|
77545
|
-
const urlObjectKeys = [
|
|
77546
|
-
'auth',
|
|
77547
|
-
'hash',
|
|
77548
|
-
'host',
|
|
77549
|
-
'hostname',
|
|
77550
|
-
'href',
|
|
77551
|
-
'path',
|
|
77552
|
-
'pathname',
|
|
77553
|
-
'port',
|
|
77554
|
-
'protocol',
|
|
77555
|
-
'query',
|
|
77556
|
-
'search',
|
|
77557
|
-
'slashes'
|
|
77558
|
-
];
|
|
77559
|
-
function formatWithValidation(url) {
|
|
77560
|
-
if (false) {}
|
|
77561
|
-
return formatUrl(url);
|
|
77562
|
-
} //# sourceMappingURL=format-url.js.map
|
|
77563
|
-
|
|
77564
|
-
|
|
77565
|
-
/***/ }),
|
|
77566
|
-
|
|
77567
|
-
/***/ 80099:
|
|
77568
|
-
/***/ ((module) => {
|
|
77569
|
-
|
|
77570
|
-
"use strict";
|
|
77571
|
-
module.exports = require("node:sqlite");
|
|
77572
|
-
|
|
77573
|
-
/***/ }),
|
|
77574
|
-
|
|
77575
|
-
/***/ 80481:
|
|
77576
|
-
/***/ ((module) => {
|
|
77577
|
-
|
|
77578
|
-
"use strict";
|
|
77579
|
-
module.exports = require("node:readline");
|
|
77580
|
-
|
|
77581
|
-
/***/ }),
|
|
77582
|
-
|
|
77583
|
-
/***/ 81630:
|
|
77584
|
-
/***/ ((module) => {
|
|
77585
|
-
|
|
77586
|
-
"use strict";
|
|
77587
|
-
module.exports = require("http");
|
|
77588
|
-
|
|
77589
77978
|
/***/ }),
|
|
77590
77979
|
|
|
77591
77980
|
/***/ 94735:
|
|
@@ -77658,7 +78047,7 @@ function Home() {
|
|
|
77658
78047
|
var __webpack_require__ = require("../webpack-runtime.js");
|
|
77659
78048
|
__webpack_require__.C(exports);
|
|
77660
78049
|
var __webpack_exec__ = (moduleId) => (__webpack_require__(__webpack_require__.s = moduleId))
|
|
77661
|
-
var __webpack_exports__ = __webpack_require__.X(0, [2970,7377,7981,2430,1427,4992,46,2653,466], () => (__webpack_exec__(
|
|
78050
|
+
var __webpack_exports__ = __webpack_require__.X(0, [2970,7377,7981,2430,1427,4992,46,2653,466], () => (__webpack_exec__(13297)));
|
|
77662
78051
|
module.exports = __webpack_exports__;
|
|
77663
78052
|
|
|
77664
78053
|
})();
|