@maudecode/talaria-web 1.18.0 → 1.20.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/_release.json +8 -8
- package/dist/api/auth-raw.js +16 -16
- package/dist/api/auth-raw.js.map +1 -1
- package/dist/api/automation-raw.d.ts +2 -2
- package/dist/api/automation-raw.js +93 -38
- package/dist/api/automation-raw.js.map +1 -1
- package/dist/api/automation-router.d.ts +99 -17
- package/dist/api/automation-router.js +22 -14
- package/dist/api/automation-router.js.map +1 -1
- package/dist/api/chat-router.d.ts +1433 -37
- package/dist/api/chat-router.js +205 -90
- package/dist/api/chat-router.js.map +1 -1
- package/dist/api/git-router.d.ts +6 -2
- package/dist/api/git-router.js +30 -30
- package/dist/api/git-router.js.map +1 -1
- package/dist/api/raw-routes.d.ts +3 -3
- package/dist/api/raw-routes.js +76 -62
- package/dist/api/raw-routes.js.map +1 -1
- package/dist/api/router.d.ts +5 -5
- package/dist/api/router.js +22 -22
- package/dist/api/router.js.map +1 -1
- package/dist/api/session-visibility.d.ts +4 -4
- package/dist/api/session-visibility.js +26 -16
- package/dist/api/session-visibility.js.map +1 -1
- package/dist/api/sessions-router.d.ts +2635 -151
- package/dist/api/sessions-router.js +193 -177
- package/dist/api/sessions-router.js.map +1 -1
- package/dist/api/settings-router.d.ts +450 -11
- package/dist/api/settings-router.js +102 -49
- package/dist/api/settings-router.js.map +1 -1
- package/dist/api/sse-routes.d.ts +2 -2
- package/dist/api/sse-routes.js +102 -80
- package/dist/api/sse-routes.js.map +1 -1
- package/dist/api/tools-raw.d.ts +5 -0
- package/dist/api/tools-raw.js +58 -33
- package/dist/api/tools-raw.js.map +1 -1
- package/dist/api/tools-router.d.ts +963 -109
- package/dist/api/tools-router.js +426 -72
- package/dist/api/tools-router.js.map +1 -1
- package/dist/api/transcribe-stream.d.ts +16 -0
- package/dist/api/transcribe-stream.js +172 -0
- package/dist/api/transcribe-stream.js.map +1 -0
- package/dist/app.d.ts +4 -1
- package/dist/app.js +80 -57
- package/dist/app.js.map +1 -1
- package/dist/auth/crypto.d.ts +3 -0
- package/dist/auth/crypto.js +18 -0
- package/dist/auth/crypto.js.map +1 -1
- package/dist/auth/gate.js +14 -9
- package/dist/auth/gate.js.map +1 -1
- package/dist/auth/passkeys.d.ts +15 -14
- package/dist/auth/passkeys.js +89 -91
- package/dist/auth/passkeys.js.map +1 -1
- package/dist/auth/store.d.ts +17 -7
- package/dist/auth/store.js +93 -52
- package/dist/auth/store.js.map +1 -1
- package/dist/bin/talaria-web.js +12 -81
- package/dist/bin/talaria-web.js.map +1 -1
- package/dist/cli/ctl.js +8 -2
- package/dist/cli/ctl.js.map +1 -1
- package/dist/cli/dotenv.d.ts +5 -0
- package/dist/cli/dotenv.js +14 -2
- package/dist/cli/dotenv.js.map +1 -1
- package/dist/cli/launcher.js +5 -5
- package/dist/cli/launcher.js.map +1 -1
- package/dist/cli/main.d.ts +1 -0
- package/dist/cli/main.js +90 -0
- package/dist/cli/main.js.map +1 -0
- package/dist/cli/supervise.d.ts +24 -0
- package/dist/cli/supervise.js +147 -6
- package/dist/cli/supervise.js.map +1 -1
- package/dist/config/agent-config.d.ts +37 -11
- package/dist/config/agent-config.js +146 -64
- package/dist/config/agent-config.js.map +1 -1
- package/dist/config.d.ts +2 -0
- package/dist/config.js +14 -5
- package/dist/config.js.map +1 -1
- package/dist/fs/atomic.d.ts +4 -0
- package/dist/fs/atomic.js +19 -2
- package/dist/fs/atomic.js.map +1 -1
- package/dist/fs/stat.d.ts +7 -0
- package/dist/fs/stat.js +27 -0
- package/dist/fs/stat.js.map +1 -0
- package/dist/http/context.d.ts +28 -9
- package/dist/http/context.js +77 -25
- package/dist/http/context.js.map +1 -1
- package/dist/onboarding.d.ts +2 -2
- package/dist/onboarding.js +10 -8
- package/dist/onboarding.js.map +1 -1
- package/dist/profiles/profiles.d.ts +12 -4
- package/dist/profiles/profiles.js +78 -30
- package/dist/profiles/profiles.js.map +1 -1
- package/dist/projects.d.ts +15 -6
- package/dist/projects.js +55 -47
- package/dist/projects.js.map +1 -1
- package/dist/providers/catalog.d.ts +85 -14
- package/dist/providers/catalog.js +502 -146
- package/dist/providers/catalog.js.map +1 -1
- package/dist/providers/env-file.d.ts +10 -3
- package/dist/providers/env-file.js +24 -75
- package/dist/providers/env-file.js.map +1 -1
- package/dist/providers/runtime-env.d.ts +4 -2
- package/dist/providers/runtime-env.js +9 -6
- package/dist/providers/runtime-env.js.map +1 -1
- package/dist/providers/tables.d.ts +3 -1
- package/dist/providers/tables.js +4 -2
- package/dist/providers/tables.js.map +1 -1
- package/dist/redact.js +56 -23
- package/dist/redact.js.map +1 -1
- package/dist/release.d.ts +7 -0
- package/dist/release.js +19 -3
- package/dist/release.js.map +1 -1
- package/dist/runtime.d.ts +5 -1
- package/dist/runtime.js +303 -96
- package/dist/runtime.js.map +1 -1
- package/dist/server.js +31 -18
- package/dist/server.js.map +1 -1
- package/dist/sessions/anchor.d.ts +11 -4
- package/dist/sessions/anchor.js +33 -37
- package/dist/sessions/anchor.js.map +1 -1
- package/dist/sessions/background-events.d.ts +2 -0
- package/dist/sessions/background-events.js +10 -0
- package/dist/sessions/background-events.js.map +1 -0
- package/dist/sessions/background-tasks.d.ts +49 -23
- package/dist/sessions/background-tasks.js +161 -89
- package/dist/sessions/background-tasks.js.map +1 -1
- package/dist/sessions/background-updates.d.ts +15 -8
- package/dist/sessions/background-updates.js +101 -25
- package/dist/sessions/background-updates.js.map +1 -1
- package/dist/sessions/cli-sessions.d.ts +23 -6
- package/dist/sessions/cli-sessions.js +84 -84
- package/dist/sessions/cli-sessions.js.map +1 -1
- package/dist/sessions/completions.d.ts +38 -2
- package/dist/sessions/completions.js +348 -77
- package/dist/sessions/completions.js.map +1 -1
- package/dist/sessions/compress.d.ts +8 -0
- package/dist/sessions/compress.js +2 -2
- package/dist/sessions/compress.js.map +1 -1
- package/dist/sessions/drafts.d.ts +14 -10
- package/dist/sessions/drafts.js +38 -43
- package/dist/sessions/drafts.js.map +1 -1
- package/dist/sessions/export.d.ts +2 -0
- package/dist/sessions/export.js +6 -2
- package/dist/sessions/export.js.map +1 -1
- package/dist/sessions/gateway-sessions.d.ts +86 -0
- package/dist/sessions/gateway-sessions.js +914 -0
- package/dist/sessions/gateway-sessions.js.map +1 -0
- package/dist/sessions/gateway-watcher.d.ts +10 -11
- package/dist/sessions/gateway-watcher.js +25 -21
- package/dist/sessions/gateway-watcher.js.map +1 -1
- package/dist/sessions/goals.d.ts +31 -0
- package/dist/sessions/goals.js +75 -0
- package/dist/sessions/goals.js.map +1 -0
- package/dist/sessions/journal.d.ts +5 -79
- package/dist/sessions/journal.js +15 -606
- package/dist/sessions/journal.js.map +1 -1
- package/dist/sessions/list.d.ts +34 -18
- package/dist/sessions/list.js +161 -147
- package/dist/sessions/list.js.map +1 -1
- package/dist/sessions/merge.d.ts +77 -13
- package/dist/sessions/merge.js +315 -65
- package/dist/sessions/merge.js.map +1 -1
- package/dist/sessions/notices.d.ts +22 -0
- package/dist/sessions/notices.js +72 -0
- package/dist/sessions/notices.js.map +1 -0
- package/dist/sessions/pending.d.ts +10 -4
- package/dist/sessions/pending.js +83 -7
- package/dist/sessions/pending.js.map +1 -1
- package/dist/sessions/prefix-index.d.ts +85 -0
- package/dist/sessions/prefix-index.js +243 -0
- package/dist/sessions/prefix-index.js.map +1 -0
- package/dist/sessions/recovery.d.ts +4 -7
- package/dist/sessions/recovery.js +100 -283
- package/dist/sessions/recovery.js.map +1 -1
- package/dist/sessions/relay.d.ts +20 -20
- package/dist/sessions/relay.js +205 -127
- package/dist/sessions/relay.js.map +1 -1
- package/dist/sessions/service.d.ts +251 -78
- package/dist/sessions/service.js +1510 -564
- package/dist/sessions/service.js.map +1 -1
- package/dist/sessions/session.d.ts +20 -2
- package/dist/sessions/session.js +33 -5
- package/dist/sessions/session.js.map +1 -1
- package/dist/sessions/shares.d.ts +7 -6
- package/dist/sessions/shares.js +22 -45
- package/dist/sessions/shares.js.map +1 -1
- package/dist/sessions/source-kind.js +1 -0
- package/dist/sessions/source-kind.js.map +1 -1
- package/dist/sessions/state-db-identity.d.ts +18 -0
- package/dist/sessions/state-db-identity.js +67 -0
- package/dist/sessions/state-db-identity.js.map +1 -0
- package/dist/sessions/state-db-worker.js +24 -5
- package/dist/sessions/state-db-worker.js.map +1 -1
- package/dist/sessions/state-db.d.ts +157 -21
- package/dist/sessions/state-db.js +1145 -204
- package/dist/sessions/state-db.js.map +1 -1
- package/dist/sessions/state-saved.d.ts +1 -1
- package/dist/sessions/state-saved.js +35 -11
- package/dist/sessions/state-saved.js.map +1 -1
- package/dist/sessions/storage/backend.d.ts +171 -0
- package/dist/sessions/storage/backend.js +19 -0
- package/dist/sessions/storage/backend.js.map +1 -0
- package/dist/sessions/storage/conformance.d.ts +20 -0
- package/dist/sessions/storage/conformance.js +237 -0
- package/dist/sessions/storage/conformance.js.map +1 -0
- package/dist/sessions/storage/document.d.ts +16 -0
- package/dist/sessions/storage/document.js +44 -0
- package/dist/sessions/storage/document.js.map +1 -0
- package/dist/sessions/storage/json-documents.d.ts +25 -0
- package/dist/sessions/storage/json-documents.js +277 -0
- package/dist/sessions/storage/json-documents.js.map +1 -0
- package/dist/sessions/storage/json-files.d.ts +23 -0
- package/dist/sessions/storage/json-files.js +244 -0
- package/dist/sessions/storage/json-files.js.map +1 -0
- package/dist/sessions/storage/json-installation.d.ts +3 -0
- package/dist/sessions/storage/json-installation.js +31 -0
- package/dist/sessions/storage/json-installation.js.map +1 -0
- package/dist/sessions/storage/json-journal.d.ts +113 -0
- package/dist/sessions/storage/json-journal.js +756 -0
- package/dist/sessions/storage/json-journal.js.map +1 -0
- package/dist/sessions/storage/json-recovery.d.ts +4 -0
- package/dist/sessions/storage/json-recovery.js +195 -0
- package/dist/sessions/storage/json-recovery.js.map +1 -0
- package/dist/sessions/storage/json.d.ts +82 -0
- package/dist/sessions/storage/json.js +350 -0
- package/dist/sessions/storage/json.js.map +1 -0
- package/dist/sessions/storage/row.d.ts +6 -0
- package/dist/sessions/storage/row.js +49 -0
- package/dist/sessions/storage/row.js.map +1 -0
- package/dist/sessions/storage/search-text.d.ts +4 -0
- package/dist/sessions/storage/search-text.js +16 -0
- package/dist/sessions/storage/search-text.js.map +1 -0
- package/dist/sessions/store.d.ts +67 -73
- package/dist/sessions/store.js +341 -607
- package/dist/sessions/store.js.map +1 -1
- package/dist/sessions/streams.d.ts +12 -7
- package/dist/sessions/streams.js +58 -15
- package/dist/sessions/streams.js.map +1 -1
- package/dist/sessions/titles.js +1 -1
- package/dist/sessions/titles.js.map +1 -1
- package/dist/sessions/todo.d.ts +5 -0
- package/dist/sessions/todo.js +28 -21
- package/dist/sessions/todo.js.map +1 -1
- package/dist/sessions/tool-display.d.ts +8 -5
- package/dist/sessions/tool-display.js +28 -16
- package/dist/sessions/tool-display.js.map +1 -1
- package/dist/sessions/turn-context.d.ts +10 -1
- package/dist/sessions/turn-context.js +13 -6
- package/dist/sessions/turn-context.js.map +1 -1
- package/dist/sessions/turn.d.ts +110 -22
- package/dist/sessions/turn.js +918 -380
- package/dist/sessions/turn.js.map +1 -1
- package/dist/sessions/wakeup-pause.d.ts +8 -13
- package/dist/sessions/wakeup-pause.js +31 -49
- package/dist/sessions/wakeup-pause.js.map +1 -1
- package/dist/sessions/window.js +13 -12
- package/dist/sessions/window.js.map +1 -1
- package/dist/settings.d.ts +19 -7
- package/dist/settings.js +179 -183
- package/dist/settings.js.map +1 -1
- package/dist/sidecar/client.d.ts +41 -4
- package/dist/sidecar/client.js +192 -42
- package/dist/sidecar/client.js.map +1 -1
- package/dist/sidecar/discover.d.ts +2 -1
- package/dist/sidecar/discover.js +93 -10
- package/dist/sidecar/discover.js.map +1 -1
- package/dist/sidecar/env.d.ts +4 -0
- package/dist/sidecar/env.js +3 -0
- package/dist/sidecar/env.js.map +1 -0
- package/dist/sidecar/fake.d.ts +6 -2
- package/dist/sidecar/fake.js +34 -4
- package/dist/sidecar/fake.js.map +1 -1
- package/dist/spa.d.ts +9 -4
- package/dist/spa.js +36 -12
- package/dist/spa.js.map +1 -1
- package/dist/startup-timing.d.ts +66 -0
- package/dist/startup-timing.js +129 -0
- package/dist/startup-timing.js.map +1 -0
- package/dist/test/env-file.d.ts +5 -0
- package/dist/test/env-file.js +88 -0
- package/dist/test/env-file.js.map +1 -0
- package/dist/test/fs-handles.d.ts +11 -0
- package/dist/test/fs-handles.js +31 -0
- package/dist/test/fs-handles.js.map +1 -0
- package/dist/test/harness.d.ts +1 -0
- package/dist/test/harness.js +1 -1
- package/dist/test/harness.js.map +1 -1
- package/dist/test/passkeys.d.ts +22 -0
- package/dist/test/passkeys.js +62 -0
- package/dist/test/passkeys.js.map +1 -0
- package/dist/test/storage.d.ts +15 -0
- package/dist/test/storage.js +26 -0
- package/dist/test/storage.js.map +1 -0
- package/dist/tools/commands.d.ts +6 -1
- package/dist/tools/commands.js +8 -2
- package/dist/tools/commands.js.map +1 -1
- package/dist/tools/connectors.d.ts +33 -0
- package/dist/tools/connectors.js +121 -0
- package/dist/tools/connectors.js.map +1 -0
- package/dist/tools/crons.d.ts +46 -5
- package/dist/tools/crons.js +100 -26
- package/dist/tools/crons.js.map +1 -1
- package/dist/tools/dashboard-plugins.d.ts +34 -5
- package/dist/tools/dashboard-plugins.js +146 -14
- package/dist/tools/dashboard-plugins.js.map +1 -1
- package/dist/tools/extensions.d.ts +5 -4
- package/dist/tools/extensions.js +213 -207
- package/dist/tools/extensions.js.map +1 -1
- package/dist/tools/gateway-restart.d.ts +82 -0
- package/dist/tools/gateway-restart.js +222 -0
- package/dist/tools/gateway-restart.js.map +1 -0
- package/dist/tools/health.d.ts +28 -4
- package/dist/tools/health.js +171 -50
- package/dist/tools/health.js.map +1 -1
- package/dist/tools/hygiene.d.ts +4 -3
- package/dist/tools/hygiene.js +23 -9
- package/dist/tools/hygiene.js.map +1 -1
- package/dist/tools/insights.d.ts +1 -1
- package/dist/tools/insights.js +2 -2
- package/dist/tools/insights.js.map +1 -1
- package/dist/tools/kanban.d.ts +4 -2
- package/dist/tools/kanban.js +28 -19
- package/dist/tools/kanban.js.map +1 -1
- package/dist/tools/mcp-health.js +74 -24
- package/dist/tools/mcp-health.js.map +1 -1
- package/dist/tools/mcp.js +19 -1
- package/dist/tools/mcp.js.map +1 -1
- package/dist/tools/memory-masks.d.ts +5 -0
- package/dist/tools/memory-masks.js +256 -0
- package/dist/tools/memory-masks.js.map +1 -0
- package/dist/tools/memory.d.ts +29 -3
- package/dist/tools/memory.js +69 -27
- package/dist/tools/memory.js.map +1 -1
- package/dist/tools/plugin-oauth.d.ts +14 -0
- package/dist/tools/plugin-oauth.js +53 -0
- package/dist/tools/plugin-oauth.js.map +1 -0
- package/dist/tools/plugin-settings.d.ts +15 -0
- package/dist/tools/plugin-settings.js +90 -0
- package/dist/tools/plugin-settings.js.map +1 -0
- package/dist/tools/prune-advice.d.ts +50 -0
- package/dist/tools/prune-advice.js +114 -0
- package/dist/tools/prune-advice.js.map +1 -0
- package/dist/tools/skills.d.ts +13 -5
- package/dist/tools/skills.js +53 -19
- package/dist/tools/skills.js.map +1 -1
- package/dist/tools/update-notifications.d.ts +102 -17
- package/dist/tools/update-notifications.js +400 -82
- package/dist/tools/update-notifications.js.map +1 -1
- package/dist/tools/update-rollback.d.ts +11 -0
- package/dist/tools/update-rollback.js +28 -0
- package/dist/tools/update-rollback.js.map +1 -0
- package/dist/tools/updates.d.ts +100 -33
- package/dist/tools/updates.js +1085 -345
- package/dist/tools/updates.js.map +1 -1
- package/dist/util.d.ts +2 -0
- package/dist/util.js +5 -0
- package/dist/util.js.map +1 -1
- package/dist/workspace/git.d.ts +16 -1
- package/dist/workspace/git.js +291 -11
- package/dist/workspace/git.js.map +1 -1
- package/dist/workspace/media.d.ts +12 -9
- package/dist/workspace/media.js +98 -38
- package/dist/workspace/media.js.map +1 -1
- package/dist/workspace/preview.js +4 -14
- package/dist/workspace/preview.js.map +1 -1
- package/dist/workspace/rollback.d.ts +8 -4
- package/dist/workspace/rollback.js +22 -12
- package/dist/workspace/rollback.js.map +1 -1
- package/dist/workspace/workspaces.d.ts +15 -19
- package/dist/workspace/workspaces.js +55 -127
- package/dist/workspace/workspaces.js.map +1 -1
- package/dist/workspace/worktrees.js +170 -32
- package/dist/workspace/worktrees.js.map +1 -1
- package/package.json +6 -4
- package/sidecar/agent_dependency.json +4 -4
- package/sidecar/agent_support.json +29 -0
- package/sidecar/scripts/record-fixtures.py +12 -3
- package/sidecar/scripts/replay_sidecar.py +8 -0
- package/sidecar/scripts/suite_runner.py +458 -0
- package/sidecar/scripts/test.sh +11 -5
- package/sidecar/talaria_sidecar/__init__.py +6 -1
- package/sidecar/talaria_sidecar/__main__.py +13 -4
- package/sidecar/talaria_sidecar/agent_mutation.py +1111 -0
- package/sidecar/talaria_sidecar/agent_services.py +1116 -0
- package/sidecar/talaria_sidecar/context_detail.py +59 -0
- package/sidecar/talaria_sidecar/dependency_sync.py +85 -0
- package/sidecar/talaria_sidecar/home.py +133 -14
- package/sidecar/talaria_sidecar/methods/__init__.py +2 -2
- package/sidecar/talaria_sidecar/methods/aux.py +211 -41
- package/sidecar/talaria_sidecar/methods/chat.py +1378 -200
- package/sidecar/talaria_sidecar/methods/checkpoints.py +29 -4
- package/sidecar/talaria_sidecar/methods/commands.py +483 -13
- package/sidecar/talaria_sidecar/methods/config.py +195 -6
- package/sidecar/talaria_sidecar/methods/connectors.py +375 -0
- package/sidecar/talaria_sidecar/methods/cron.py +374 -36
- package/sidecar/talaria_sidecar/methods/cron_execution.py +284 -0
- package/sidecar/talaria_sidecar/methods/dashboard_plugins.py +301 -0
- package/sidecar/talaria_sidecar/methods/gateway.py +215 -55
- package/sidecar/talaria_sidecar/methods/gateway_sessions.py +418 -0
- package/sidecar/talaria_sidecar/methods/goals.py +81 -41
- package/sidecar/talaria_sidecar/methods/kanban.py +82 -30
- package/sidecar/talaria_sidecar/methods/memory.py +84 -0
- package/sidecar/talaria_sidecar/methods/oauth.py +144 -13
- package/sidecar/talaria_sidecar/methods/plugin_catalog.py +198 -0
- package/sidecar/talaria_sidecar/methods/plugin_oauth.py +234 -0
- package/sidecar/talaria_sidecar/methods/process.py +229 -16
- package/sidecar/talaria_sidecar/methods/profiles.py +48 -9
- package/sidecar/talaria_sidecar/methods/providers.py +196 -26
- package/sidecar/talaria_sidecar/methods/runtime.py +71 -1
- package/sidecar/talaria_sidecar/methods/skills.py +83 -5
- package/sidecar/talaria_sidecar/methods/state_db.py +405 -112
- package/sidecar/talaria_sidecar/methods/stt.py +159 -78
- package/sidecar/talaria_sidecar/methods/text.py +14 -1
- package/sidecar/talaria_sidecar/methods/toolsets.py +51 -0
- package/sidecar/talaria_sidecar/methods/usage.py +113 -14
- package/sidecar/talaria_sidecar/methods/worktree.py +145 -19
- package/sidecar/talaria_sidecar/methods/write_approval.py +181 -0
- package/sidecar/talaria_sidecar/rpc.py +70 -7
- package/sidecar/talaria_sidecar/runtime.py +122 -14
- package/sidecar/talaria_sidecar/speed.py +47 -0
- package/sidecar/talaria_sidecar/startup_timing.py +119 -0
- package/static/dist/FILES.txt +242 -215
- package/static/dist/THIRD_PARTY_LICENSES.md +6 -22
- package/static/dist/assets/AppShell-3isgvoro.js +8 -0
- package/static/dist/assets/Button-f4n6dapf.js +1 -0
- package/static/dist/assets/ChatPage-k7b6xfax.js +4 -0
- package/static/dist/assets/ConnectTargets-juqvt5lm.js +1 -0
- package/static/dist/assets/Dialog-hta5utr3.js +1 -0
- package/static/dist/assets/ExtensionRoute-zrhjn0wm.js +1 -0
- package/static/dist/assets/Field-b6ez48oz.js +1 -0
- package/static/dist/assets/HubRoute-iwvso2tz.js +2 -0
- package/static/dist/assets/LinkCheckContext-ix6zqqkk.js +1 -0
- package/static/dist/assets/Markdown-jdeth7zq.js +2 -0
- package/static/dist/assets/MarkdownRenderer-fbswsgld.js +302 -0
- package/static/dist/assets/MarkdownRenderer-i9o6nr38.css +1 -0
- package/static/dist/assets/OAuthSignIn-bpd8hom3.js +1 -0
- package/static/dist/assets/ResourceSwitch-odi6dy2o.js +1 -0
- package/static/dist/assets/RightPanel-eu6enlo6.js +1 -0
- package/static/dist/assets/Select-kr07928w.js +1 -0
- package/static/dist/assets/SessionListPanel-etb2i54l.js +1 -0
- package/static/dist/assets/SettingsLayout-eu3xxp23.js +1 -0
- package/static/dist/assets/States-icab19yg.js +1 -0
- package/static/dist/assets/TerminalPanel-hngmsr8b.js +16 -0
- package/static/dist/assets/Toaster-nb2uzjw1.js +1 -0
- package/static/dist/assets/_app-ga1moszl.js +1 -0
- package/static/dist/assets/_app.ext._extensionId-na62087t.js +1 -0
- package/static/dist/assets/_app.index-jypgdqoi.js +1 -0
- package/static/dist/assets/_app.insights-kabejdtm.js +1 -0
- package/static/dist/assets/_app.kanban-m19kfcmx.js +1 -0
- package/static/dist/assets/_app.logs-iw4m96sz.js +1 -0
- package/static/dist/assets/_app.memory-jq5frwcg.js +1 -0
- package/static/dist/assets/_app.profiles-kwa3m7rp.js +1 -0
- package/static/dist/assets/_app.session._sessionId-o5lyeipj.js +1 -0
- package/static/dist/assets/_app.settings-ckl8hdll.js +1 -0
- package/static/dist/assets/_app.settings._section-dtdjk98a.js +3 -0
- package/static/dist/assets/_app.skills-n016rihd.js +1 -0
- package/static/dist/assets/_app.tasks-n8zuqsqe.js +1 -0
- package/static/dist/assets/_app.todos-btew5v2s.js +1 -0
- package/static/dist/assets/_app.workspaces-lnfk95ch.js +1 -0
- package/static/dist/assets/abnfDiagram-VCTEODGH-dttheegb.js +1 -0
- package/static/dist/assets/{angular-html-nu6l31w3.js → angular-html-l28bd5fo.js} +1 -1
- package/static/dist/assets/{angular-ts-fbx4f8mm.js → angular-ts-ffzx1vj0.js} +1 -1
- package/static/dist/assets/{apl-bx2xr7dh.js → apl-b7h7mmy4.js} +1 -1
- package/static/dist/assets/{arc-7popfhbk.js → arc-fk1b21lm.js} +1 -1
- package/static/dist/assets/architecture-7GRP2DOG-ic435919.js +1 -0
- package/static/dist/assets/architectureDiagram-5GKGNRK7-8r3glgiq.js +36 -0
- package/static/dist/assets/archive-il7c6053.js +1 -0
- package/static/dist/assets/{astro-g77i97cb.js → astro-k117fy0t.js} +1 -1
- package/static/dist/assets/back-gu3nu279.js +1 -0
- package/static/dist/assets/{blade-boo0u92y.js → blade-npefsmn8.js} +1 -1
- package/static/dist/assets/{blockDiagram-I7D4REHJ-jzthp1wa.js → blockDiagram-I7D4REHJ-jenyos6c.js} +4 -4
- package/static/dist/assets/{c-cat0w3sc.js → c-2umg6kbn.js} +1 -1
- package/static/dist/assets/{c4Diagram-7LVT6UL2-mwr67mt8.js → c4Diagram-7LVT6UL2-nzlx7yc4.js} +1 -1
- package/static/dist/assets/cancel-bsnfo36u.js +1 -0
- package/static/dist/assets/channel-dsbtk01y.js +1 -0
- package/static/dist/assets/{chunk-4HAMMTFA-gpq1y228.js → chunk-4HAMMTFA-g0cru63b.js} +20 -20
- package/static/dist/assets/{chunk-75Z2AOVW-ktje58c4.js → chunk-75Z2AOVW-7rkswkjw.js} +1 -1
- package/static/dist/assets/chunk-DU6HZSFF-fn73jzdo.js +128 -0
- package/static/dist/assets/{chunk-F27PBJKO-cmev85ti.js → chunk-F27PBJKO-oey8e72m.js} +1 -1
- package/static/dist/assets/{chunk-FOHPRMQF-opuflp73.js → chunk-FOHPRMQF-ipewusgj.js} +8 -8
- package/static/dist/assets/{chunk-GMAD6QVW-htjgt22y.js → chunk-GMAD6QVW-l2a32wiy.js} +6 -6
- package/static/dist/assets/{chunk-GVQU2GXP-qndvoxl7.js → chunk-GVQU2GXP-o9dwzh8h.js} +1 -1
- package/static/dist/assets/{chunk-IMKFNOWR-e5bkd5q6.js → chunk-IMKFNOWR-eblwj20b.js} +5 -5
- package/static/dist/assets/{chunk-L3NEJ4N5-mj1155r6.js → chunk-L3NEJ4N5-o2mufspb.js} +1 -1
- package/static/dist/assets/chunk-OSK3NFVY-ijp9pw29.js +10 -0
- package/static/dist/assets/{chunk-P2QGCYS3-f7t54xfm.js → chunk-P2QGCYS3-hs9hqwl4.js} +1 -1
- package/static/dist/assets/{chunk-POPQ4Y6H-i927v9oa.js → chunk-POPQ4Y6H-bp9rsqez.js} +1 -1
- package/static/dist/assets/{chunk-PWAF6VOD-m84lmnyt.js → chunk-PWAF6VOD-brkprov6.js} +1 -1
- package/static/dist/assets/{chunk-SHT3W25Y-mi0tlcu9.js → chunk-SHT3W25Y-gmpv0pxz.js} +13 -13
- package/static/dist/assets/{chunk-SVP7TREG-dnau702j.js → chunk-SVP7TREG-oldm08fu.js} +4 -4
- package/static/dist/assets/{chunk-TICWLB2K-edem1gkg.js → chunk-TICWLB2K-ooqilfv7.js} +6 -6
- package/static/dist/assets/{chunk-XXDRQBXY-n40pf9vy.js → chunk-XXDRQBXY-jkmnqu65.js} +1 -1
- package/static/dist/assets/classDiagram-ZZMXUADV-fvgcv24g.js +1 -0
- package/static/dist/assets/classDiagram-v2-VYDZK3BY-fvgcv24g.js +1 -0
- package/static/dist/assets/{cobol-go622aep.js → cobol-ssf9hkh7.js} +1 -1
- package/static/dist/assets/{coffee-jwo1xjhq.js → coffee-lsi9fwae.js} +1 -1
- package/static/dist/assets/copied-bz3gkazh.js +1 -0
- package/static/dist/assets/copy-jo006coq.js +1 -0
- package/static/dist/assets/cose-bilkent-JH36ORCC-layy2r27.js +1 -0
- package/static/dist/assets/{cpp-nre7j0kq.js → cpp-lfrh4y55.js} +1 -1
- package/static/dist/assets/{crystal-lviso2je.js → crystal-efh4pte7.js} +1 -1
- package/static/dist/assets/{css-ywz9j4hb.js → css-i82qdo89.js} +1 -1
- package/static/dist/assets/cynefin-OW5HDTMX-d47op7qs.js +1 -0
- package/static/dist/assets/cynefinDiagram-5FMLGOSQ-doa7594y.js +62 -0
- package/static/dist/assets/cytoscape.esm-fjn2algp.js +321 -0
- package/static/dist/assets/dagre-GXQ25YYZ-os768dp4.js +4 -0
- package/static/dist/assets/dagre-o5jmjz46.js +1 -0
- package/static/dist/assets/{diagram-S7CK7UJ4-l8abxaes.js → diagram-S7CK7UJ4-fyi81nxd.js} +4 -4
- package/static/dist/assets/diagram-UQ7AKVKN-j3exggaq.js +41 -0
- package/static/dist/assets/{diagram-VSXAHHWV-fnky6lvc.js → diagram-VSXAHHWV-omo1en2l.js} +1 -1
- package/static/dist/assets/diagram-VX7I27RA-oro2cyu0.js +24 -0
- package/static/dist/assets/diagram-Z3DM3KII-byt9vdb7.js +24 -0
- package/static/dist/assets/dist-crc46di9.js +7 -0
- package/static/dist/assets/dist-etpoyscq.js +44 -0
- package/static/dist/assets/{dist-c4c2m3kv.js → dist-nb670eu6.js} +1 -1
- package/static/dist/assets/ebnfDiagram-PWID7BFC-ee3haugh.js +1 -0
- package/static/dist/assets/{edge-dvv35byi.js → edge-lrob635n.js} +1 -1
- package/static/dist/assets/{elixir-i2f1ki1g.js → elixir-kdpxeq93.js} +1 -1
- package/static/dist/assets/{elm-cpepyjm4.js → elm-c8irj9uh.js} +1 -1
- package/static/dist/assets/erDiagram-RLTQ6QDP-d1e93yff.js +99 -0
- package/static/dist/assets/{erb-idlyfheg.js → erb-flwsv146.js} +1 -1
- package/static/dist/assets/eventmodeling-NTZA5JFV-i1ihb40c.js +1 -0
- package/static/dist/assets/flowDiagram-HODETNUW-jahfpiod.js +1 -0
- package/static/dist/assets/folder-plus-ivoglq98.js +1 -0
- package/static/dist/assets/{ganttDiagram-EL5Y4UJY-ngbsyp37.js → ganttDiagram-EL5Y4UJY-m7g0jud4.js} +1 -1
- package/static/dist/assets/{git-rebase-d9lpfpbn.js → git-rebase-bli19aoq.js} +1 -1
- package/static/dist/assets/gitGraph-4MIJSDKK-hzdj07yy.js +1 -0
- package/static/dist/assets/{gitGraphDiagram-WWUBYQGX-eravdti4.js → gitGraphDiagram-WWUBYQGX-dm9agbna.js} +1 -1
- package/static/dist/assets/{glimmer-js-39i0urfb.js → glimmer-js-d4icg38p.js} +1 -1
- package/static/dist/assets/{glimmer-ts-gdtd6n73.js → glimmer-ts-bk75772u.js} +1 -1
- package/static/dist/assets/{glsl-o1djm5pp.js → glsl-lqormp2b.js} +1 -1
- package/static/dist/assets/{graphql-kj6rz55t.js → graphql-hw6s5qzd.js} +1 -1
- package/static/dist/assets/{hack-pe1qqr2i.js → hack-ozrv6l4d.js} +1 -1
- package/static/dist/assets/{haml-cknnbcqs.js → haml-gytfosdt.js} +1 -1
- package/static/dist/assets/{handlebars-hwq64orh.js → handlebars-b6g7jffd.js} +1 -1
- package/static/dist/assets/highlighted-body-KPVGNVTW-mmgz2czu.js +1 -0
- package/static/dist/assets/host-fr6lni1p.js +1 -0
- package/static/dist/assets/{html-derivative-h2i2pyjc.js → html-derivative-f1tqcroo.js} +1 -1
- package/static/dist/assets/{html-ha05xtvt.js → html-on6oj6yj.js} +1 -1
- package/static/dist/assets/{http-cf94zu27.js → http-odhufsl7.js} +1 -1
- package/static/dist/assets/{hurl-lslax568.js → hurl-mu680336.js} +1 -1
- package/static/dist/assets/index-73649w7o.js +10 -0
- package/static/dist/assets/index-lhf1fsdf.css +2 -0
- package/static/dist/assets/info-A6RAGUB7-lll1dqmm.js +1 -0
- package/static/dist/assets/infoDiagram-27XIBGKW-k7esc639.js +2 -0
- package/static/dist/assets/{ishikawaDiagram-5VMMS53U-i6ypq351.js → ishikawaDiagram-5VMMS53U-lgr6k9wo.js} +6 -6
- package/static/dist/assets/{java-ndjf2o89.js → java-nxbe8uju.js} +1 -1
- package/static/dist/assets/{javascript-coftlwy3.js → javascript-lz3kxcyz.js} +1 -1
- package/static/dist/assets/{jinja-etei9wy7.js → jinja-l5pk84gt.js} +1 -1
- package/static/dist/assets/{jison-hyekgft1.js → jison-jdutdwyy.js} +1 -1
- package/static/dist/assets/{journeyDiagram-3NMN7TZE-lduf1z95.js → journeyDiagram-3NMN7TZE-ndmbxuqk.js} +1 -1
- package/static/dist/assets/{json-lok0yaho.js → json-dnge4ssf.js} +1 -1
- package/static/dist/assets/{jsx-b64w0nbx.js → jsx-c3lwhkep.js} +1 -1
- package/static/dist/assets/{jsx-runtime-eu92a5pu.js → jsx-runtime-o40ukmjl.js} +1 -1
- package/static/dist/assets/{julia-jxxzz2yn.js → julia-hwd4rrcb.js} +1 -1
- package/static/dist/assets/{just-mc29iw9t.js → just-nka3oxdx.js} +1 -1
- package/static/dist/assets/{kanban-definition-UXKFOSKX-e18bu4pg.js → kanban-definition-UXKFOSKX-mjxym0jp.js} +28 -28
- package/static/dist/assets/katex-cbdd1ohw.css +1 -0
- package/static/dist/assets/katex-pbij2oo6.js +257 -0
- package/static/dist/assets/{latex-pafa03ft.js → latex-iqmr7e40.js} +1 -1
- package/static/dist/assets/lazyRouteComponent-cwb6l7xh.js +1 -0
- package/static/dist/assets/{line-meizqsvn.js → line-mtr5k6il.js} +1 -1
- package/static/dist/assets/linear-jlwrvvy6.js +1 -0
- package/static/dist/assets/link-iadw4ghw.js +2 -0
- package/static/dist/assets/{liquid-hz5c2pov.js → liquid-okmk9tbp.js} +1 -1
- package/static/dist/assets/locale-cs-n41hptse.js +5 -0
- package/static/dist/assets/locale-de-k7ht47ew.js +5 -0
- package/static/dist/assets/locale-es-ih078lco.js +5 -0
- package/static/dist/assets/locale-fr-ojabnf41.js +5 -0
- package/static/dist/assets/locale-it-kb96jufy.js +5 -0
- package/static/dist/assets/locale-ja-jpsp3xs1.js +7 -0
- package/static/dist/assets/locale-ko-cpzuy0n7.js +5 -0
- package/static/dist/assets/locale-pl-dbap4leu.js +5 -0
- package/static/dist/assets/locale-pt-nci7w72x.js +5 -0
- package/static/dist/assets/locale-ru-soghe4cs.js +7 -0
- package/static/dist/assets/locale-tr-ks00mu68.js +5 -0
- package/static/dist/assets/locale-vi-ij7twfm6.js +5 -0
- package/static/dist/assets/locale-zh-Hant-feakwr7a.js +5 -0
- package/static/dist/assets/locale-zh-ren0vjyv.js +7 -0
- package/static/dist/assets/login-lkhtzfcl.js +1 -0
- package/static/dist/assets/{lua-leyf8mlb.js → lua-krx4xj5h.js} +1 -1
- package/static/dist/assets/{marko-cn1fzpdv.js → marko-gbvpfehz.js} +1 -1
- package/static/dist/assets/{mdc-huhy88df.js → mdc-c21zlyi5.js} +1 -1
- package/static/dist/assets/mermaid-HWGCJPDP-jx0q5dm2.js +1 -0
- package/static/dist/assets/mermaid-parser.core-k91vdnvi.js +7 -0
- package/static/dist/assets/micromark-factory-space-fnmnpi6s.js +1 -0
- package/static/dist/assets/{mindmap-definition-YA3MSWOX-27b26eok.js → mindmap-definition-YA3MSWOX-ehztfea4.js} +28 -28
- package/static/dist/assets/{nginx-e7lvhsmn.js → nginx-f3d68ed4.js} +1 -1
- package/static/dist/assets/{nim-dun5d8mk.js → nim-dw0jcy70.js} +1 -1
- package/static/dist/assets/onboarding-f67z0a2r.js +1 -0
- package/static/dist/assets/packet-AYTQ26CC-ok2xrblz.js +1 -0
- package/static/dist/assets/pcmTap.worklet-74EKjWAZ.js +1 -0
- package/static/dist/assets/pegDiagram-XKGWAZYB-ec3rpj0m.js +1 -0
- package/static/dist/assets/{perl-bj3oqtet.js → perl-3c0r45c8.js} +1 -1
- package/static/dist/assets/{php-buzp12r0.js → php-rznhidvp.js} +1 -1
- package/static/dist/assets/pie-WAS4IAKB-iwkir23u.js +1 -0
- package/static/dist/assets/pieDiagram-E7YTZNPT-fcpqpekh.js +39 -0
- package/static/dist/assets/{pug-mjad7he9.js → pug-f2le4f3y.js} +1 -1
- package/static/dist/assets/{qml-d1gdp10s.js → qml-e2wbq9cr.js} +1 -1
- package/static/dist/assets/{quadrantDiagram-AXDQQJYC-hhue7d8o.js → quadrantDiagram-AXDQQJYC-lqsync43.js} +1 -1
- package/static/dist/assets/queryKeys-ed4n2egc.js +9 -0
- package/static/dist/assets/{r-o3r9c7ao.js → r-epfzuw6q.js} +1 -1
- package/static/dist/assets/radar-RG4KPBEZ-hje4jbk6.js +1 -0
- package/static/dist/assets/railroad-74A4TZTK-gll9n6qi.js +1 -0
- package/static/dist/assets/railroad-abnf-HS5TGJTU-o6h6lpn4.js +1 -0
- package/static/dist/assets/railroad-ebnf-LZEXJU2U-juaefj6o.js +1 -0
- package/static/dist/assets/railroad-peg-WCYAUIDC-cgfhvpah.js +1 -0
- package/static/dist/assets/railroadDiagram-O6MQD6OU-lp3w7awf.js +1 -0
- package/static/dist/assets/{razor-ilc585yr.js → razor-pea1u1d0.js} +1 -1
- package/static/dist/assets/refresh-cw-iccm7a4e.js +1 -0
- package/static/dist/assets/refresh-i9ya9dvl.js +1 -0
- package/static/dist/assets/{regexp-mpjtcvwm.js → regexp-hzte0a5x.js} +1 -1
- package/static/dist/assets/registry-g7w3353u.js +1 -0
- package/static/dist/assets/requirementDiagram-BXWQKSXE-ha8eibcf.js +84 -0
- package/static/dist/assets/rolldown-runtime-bnnw9q4a.js +1 -0
- package/static/dist/assets/{rst-jrkwjdyi.js → rst-m6tugj5o.js} +1 -1
- package/static/dist/assets/{ruby-n4tjcbpz.js → ruby-l19vq3w1.js} +1 -1
- package/static/dist/assets/runtime-nlxpnegr.js +1 -0
- package/static/dist/assets/{sankeyDiagram-P5KCCOFB-fqb8xcjf.js → sankeyDiagram-P5KCCOFB-oxf31pr9.js} +1 -1
- package/static/dist/assets/{sas-hjo6y93k.js → sas-ktdxo397.js} +1 -1
- package/static/dist/assets/{scss-ncidjv48.js → scss-kn3oxfwf.js} +1 -1
- package/static/dist/assets/{sequenceDiagram-WJ2MYXX4-dlcz6qjz.js → sequenceDiagram-WJ2MYXX4-jiq8lhyo.js} +11 -11
- package/static/dist/assets/settings_section_extensions_title-fadc7o65.js +1 -0
- package/static/dist/assets/share._token-o76ki0ly.js +2 -0
- package/static/dist/assets/{shellscript-m8whjpqd.js → shellscript-l100jtrg.js} +1 -1
- package/static/dist/assets/{shellsession-i5bj6syz.js → shellsession-m5qukwow.js} +1 -1
- package/static/dist/assets/sizeCapture-INFHLROL-dk1io13w.js +1 -0
- package/static/dist/assets/sliders-horizontal-ddcs88av.js +1 -0
- package/static/dist/assets/{soy-hhh36ysq.js → soy-mexlscur.js} +1 -1
- package/static/dist/assets/{sql-j21bzcl6.js → sql-o0ho5suh.js} +1 -1
- package/static/dist/assets/src-h89s0hs4.js +1 -0
- package/static/dist/assets/{stata-bbu2onh1.js → stata-be9ck1q3.js} +1 -1
- package/static/dist/assets/stateDiagram-D77RDMKH-f3fslnon.js +1 -0
- package/static/dist/assets/stateDiagram-v2-MP3YSRHH-hlt6yphw.js +1 -0
- package/static/dist/assets/{surrealql-l5vczuco.js → surrealql-gk1xkkyy.js} +1 -1
- package/static/dist/assets/{svelte-idn422g6.js → svelte-k6ecjilf.js} +1 -1
- package/static/dist/assets/swimlanes-42K2YHIH-k1hmk7jf.js +1 -0
- package/static/dist/assets/swimlanesDiagram-VR7AAH4N-hd5t9tnt.js +8 -0
- package/static/dist/assets/{templ-e22qou3c.js → templ-gf3bftk6.js} +1 -1
- package/static/dist/assets/{tex-deqpc5ee.js → tex-d21fqv1z.js} +1 -1
- package/static/dist/assets/{timeline-definition-24CTP7MA-b1vl2zil.js → timeline-definition-24CTP7MA-n3ncfy9r.js} +8 -8
- package/static/dist/assets/toast-liparz2j.js +56 -0
- package/static/dist/assets/treeView-Q6P3EWNA-l3y2pejt.js +1 -0
- package/static/dist/assets/treemap-WGGIJYW6-jown9axh.js +1 -0
- package/static/dist/assets/{ts-tags-ctnibc27.js → ts-tags-n0g61gr6.js} +1 -1
- package/static/dist/assets/{tsx-i163n32g.js → tsx-cvv7wv6q.js} +1 -1
- package/static/dist/assets/{twig-x0fi7wm8.js → twig-n1f67204.js} +1 -1
- package/static/dist/assets/{typescript-g18c34xz.js → typescript-og7o55cx.js} +1 -1
- package/static/dist/assets/untitled-mj86r4gz.js +1 -0
- package/static/dist/assets/useDebounced-g8r0ggve.js +1 -0
- package/static/dist/assets/useForm-o4uu74mx.js +1 -0
- package/static/dist/assets/{useParams-b4dq6n4q.js → useParams-ftsveu84.js} +1 -1
- package/static/dist/assets/{useSearch-ipfmv3he.js → useSearch-crqueqga.js} +1 -1
- package/static/dist/assets/vennDiagram-4TSXK5OY-dh59uq1c.js +34 -0
- package/static/dist/assets/{vue-mwu5l1bb.js → vue-ej4xpwqw.js} +1 -1
- package/static/dist/assets/{vue-html-nskj3du0.js → vue-html-d48xsjuo.js} +1 -1
- package/static/dist/assets/{vue-vine-cqe77smq.js → vue-vine-pev88ip6.js} +1 -1
- package/static/dist/assets/wardley-WFR3VGLG-e6d74b0j.js +1 -0
- package/static/dist/assets/wardleyDiagram-VM6X3IG4-hnofh78f.js +78 -0
- package/static/dist/assets/with-selector-nu1b5z0v.js +1 -0
- package/static/dist/assets/{xml-gau7gvrv.js → xml-ifxp6gqb.js} +1 -1
- package/static/dist/assets/{xsl-ew09zq8b.js → xsl-fug2cckc.js} +1 -1
- package/static/dist/assets/{xychartDiagram-S5SC5T6Z-e49523ab.js → xychartDiagram-S5SC5T6Z-bpymjelb.js} +6 -6
- package/static/dist/assets/{yaml-ofnrxtvf.js → yaml-fjmafnlo.js} +1 -1
- package/static/dist/extension-sdk.js +1 -1
- package/static/dist/index.html +1 -1
- package/static/dist/sw.js +180 -136
- package/static/dist/assets/AppShell-g3bkgnvt.js +0 -1
- package/static/dist/assets/ChatPage-oo7bdan6.js +0 -25
- package/static/dist/assets/Dialog-g355qxhp.js +0 -1
- package/static/dist/assets/ExtensionRoute-i2y9fvjm.js +0 -1
- package/static/dist/assets/HubRoute-lmkrbw47.js +0 -2
- package/static/dist/assets/Markdown-j4kut4j2.js +0 -598
- package/static/dist/assets/Markdown-lwviulmg.css +0 -1
- package/static/dist/assets/RightPanel-ohlsdzfl.js +0 -1
- package/static/dist/assets/Select-kddq75qc.js +0 -1
- package/static/dist/assets/SessionListPanel-lu3oy0hw.js +0 -1
- package/static/dist/assets/SettingsLayout-o9bv4mgb.js +0 -1
- package/static/dist/assets/States-eq6fe29m.js +0 -1
- package/static/dist/assets/Toaster-pc247u9f.js +0 -1
- package/static/dist/assets/_app-f8n1i0m1.js +0 -1
- package/static/dist/assets/_app.ext._extensionId-gfbzpoou.js +0 -1
- package/static/dist/assets/_app.index-bzzv80hk.js +0 -1
- package/static/dist/assets/_app.insights-dzixbryi.js +0 -1
- package/static/dist/assets/_app.kanban-c6hep2us.js +0 -1
- package/static/dist/assets/_app.logs-i69qds98.js +0 -1
- package/static/dist/assets/_app.memory-kl4vf0gd.js +0 -1
- package/static/dist/assets/_app.profiles-b8zinmyp.js +0 -1
- package/static/dist/assets/_app.session._sessionId-fn1bhde6.js +0 -1
- package/static/dist/assets/_app.settings-cg8plwmf.js +0 -1
- package/static/dist/assets/_app.settings._section-bkwbi9zn.js +0 -3
- package/static/dist/assets/_app.skills-cs47sbvs.js +0 -1
- package/static/dist/assets/_app.tasks-dwvk64tc.js +0 -1
- package/static/dist/assets/_app.todos-c8xjm8p3.js +0 -1
- package/static/dist/assets/_app.workspaces-ehvd1gds.js +0 -1
- package/static/dist/assets/abnfDiagram-VCTEODGH-c8kdixke.js +0 -1
- package/static/dist/assets/architecture-7GRP2DOG-6crvnylg.js +0 -1
- package/static/dist/assets/architectureDiagram-5GKGNRK7-cku06x1p.js +0 -36
- package/static/dist/assets/back-h7aun7ew.js +0 -1
- package/static/dist/assets/cancel-fhi0vcnu.js +0 -1
- package/static/dist/assets/channel-b2zo73z1.js +0 -1
- package/static/dist/assets/chunk-DU6HZSFF-ofajdixh.js +0 -128
- package/static/dist/assets/chunk-OSK3NFVY-e7gkikcw.js +0 -10
- package/static/dist/assets/classDiagram-ZZMXUADV-oe99st8x.js +0 -1
- package/static/dist/assets/classDiagram-v2-VYDZK3BY-oe99st8x.js +0 -1
- package/static/dist/assets/copied-hcplv46p.js +0 -1
- package/static/dist/assets/copy-magtofyp.js +0 -1
- package/static/dist/assets/cose-bilkent-JH36ORCC-eclcy6ja.js +0 -1
- package/static/dist/assets/cynefin-OW5HDTMX-siqlulkl.js +0 -1
- package/static/dist/assets/cynefinDiagram-5FMLGOSQ-i648tah9.js +0 -62
- package/static/dist/assets/cytoscape.esm-bqu53u12.js +0 -321
- package/static/dist/assets/dagre-GXQ25YYZ-mwn6uc17.js +0 -4
- package/static/dist/assets/dagre-lkoknbjn.js +0 -1
- package/static/dist/assets/diagram-UQ7AKVKN-mekq7zgq.js +0 -41
- package/static/dist/assets/diagram-VX7I27RA-xe6r5qfw.js +0 -24
- package/static/dist/assets/diagram-Z3DM3KII-nq07dg7k.js +0 -24
- package/static/dist/assets/ebnfDiagram-PWID7BFC-c62ipm3g.js +0 -1
- package/static/dist/assets/endpoints-klbxod4t.js +0 -64
- package/static/dist/assets/erDiagram-RLTQ6QDP-h39kmnzy.js +0 -99
- package/static/dist/assets/eventmodeling-NTZA5JFV-obfede4u.js +0 -1
- package/static/dist/assets/flowDiagram-HODETNUW-kdpsp1je.js +0 -1
- package/static/dist/assets/gitGraph-4MIJSDKK-fr2i7caa.js +0 -1
- package/static/dist/assets/highlighted-body-KPVGNVTW-jwpop9p8.js +0 -1
- package/static/dist/assets/host-i828xuo7.js +0 -1
- package/static/dist/assets/index-eh8zilnv.css +0 -2
- package/static/dist/assets/index-r648f4o1.js +0 -11
- package/static/dist/assets/info-A6RAGUB7-h11x0dxo.js +0 -1
- package/static/dist/assets/infoDiagram-27XIBGKW-dfh47dw9.js +0 -2
- package/static/dist/assets/lazyRouteComponent-e1y4t2i9.js +0 -1
- package/static/dist/assets/linear-becwlnhk.js +0 -1
- package/static/dist/assets/link-oot2yn73.js +0 -1
- package/static/dist/assets/login-gu28l9ou.js +0 -1
- package/static/dist/assets/mermaid-HWGCJPDP-mtwrj8fn.js +0 -1
- package/static/dist/assets/mermaid-parser.core-ntne45i9.js +0 -7
- package/static/dist/assets/not-found-ccnnac39.js +0 -1
- package/static/dist/assets/onboarding-lkphzu1s.js +0 -1
- package/static/dist/assets/onboarding_model_label-ftpjdwqk.js +0 -1
- package/static/dist/assets/packet-AYTQ26CC-l6jdka8p.js +0 -1
- package/static/dist/assets/pegDiagram-XKGWAZYB-g1er3bxj.js +0 -1
- package/static/dist/assets/pie-WAS4IAKB-i0ylcrt9.js +0 -1
- package/static/dist/assets/pieDiagram-E7YTZNPT-fbz1e55z.js +0 -39
- package/static/dist/assets/radar-RG4KPBEZ-f9b70aa4.js +0 -1
- package/static/dist/assets/railroad-74A4TZTK-lgsuoeda.js +0 -1
- package/static/dist/assets/railroad-abnf-HS5TGJTU-nf9d6pdx.js +0 -1
- package/static/dist/assets/railroad-ebnf-LZEXJU2U-f7ummkt5.js +0 -1
- package/static/dist/assets/railroad-peg-WCYAUIDC-oczq5tqs.js +0 -1
- package/static/dist/assets/railroadDiagram-O6MQD6OU-eqpy9fnz.js +0 -1
- package/static/dist/assets/refresh-abtu93ke.js +0 -1
- package/static/dist/assets/refresh-cw-hlwb02qv.js +0 -1
- package/static/dist/assets/requirementDiagram-BXWQKSXE-ogf6puhi.js +0 -84
- package/static/dist/assets/rolldown-runtime-b9miacsj.js +0 -1
- package/static/dist/assets/root-mbklpuv4.js +0 -1
- package/static/dist/assets/saved-girnabkf.js +0 -1
- package/static/dist/assets/settings_section_extensions_title-h14cwk6f.js +0 -1
- package/static/dist/assets/share._token-kl0r7ido.js +0 -2
- package/static/dist/assets/sizeCapture-INFHLROL-g612l48j.js +0 -1
- package/static/dist/assets/sliders-horizontal-n1zm34qq.js +0 -1
- package/static/dist/assets/src-hjyib4mu.js +0 -1
- package/static/dist/assets/sse-iwku0sjo.js +0 -1
- package/static/dist/assets/stateDiagram-D77RDMKH-fyoznpcs.js +0 -1
- package/static/dist/assets/stateDiagram-v2-MP3YSRHH-ixhx8r46.js +0 -1
- package/static/dist/assets/swimlanes-42K2YHIH-oefldhfy.js +0 -1
- package/static/dist/assets/swimlanesDiagram-VR7AAH4N-h9ersk2e.js +0 -8
- package/static/dist/assets/todoStore-jjr5yr78.js +0 -1
- package/static/dist/assets/treeView-Q6P3EWNA-f7hcci5o.js +0 -1
- package/static/dist/assets/treemap-WGGIJYW6-nl85071a.js +0 -1
- package/static/dist/assets/units-kgxzxfhi.js +0 -1
- package/static/dist/assets/untitled-cikfjntn.js +0 -1
- package/static/dist/assets/useForm-kqoqg0k9.js +0 -1
- package/static/dist/assets/useLocale-o59tbiea.js +0 -1
- package/static/dist/assets/vennDiagram-4TSXK5OY-h5hzbk0n.js +0 -34
- package/static/dist/assets/wardley-WFR3VGLG-jftvpm3e.js +0 -1
- package/static/dist/assets/wardleyDiagram-VM6X3IG4-hedh85ge.js +0 -78
- /package/static/dist/assets/{ChatPage-gmu5c7lf.css → TerminalPanel-gmu5c7lf.css} +0 -0
package/dist/cli/supervise.js
CHANGED
|
@@ -2,33 +2,174 @@
|
|
|
2
2
|
* `talaria-web serve` runs the server in a child so a self-update can restart it
|
|
3
3
|
* (Python `os.execv`; Node has no in-place exec). The supervisor keeps the PID
|
|
4
4
|
* that ctl, launchd, and systemd track, forwards signals, and respawns only
|
|
5
|
-
* when the child
|
|
5
|
+
* when the child requests a restart, or once after an updated worker fails before readiness.
|
|
6
|
+
*
|
|
7
|
+
* Lifetime contract (TAL-1432): a worker never outlives its supervisor holding the port.
|
|
8
|
+
* - The supervisor forwards the first stop signal once, kills its own worker if it has not exited
|
|
9
|
+
* within `stopGraceMs`, and returns or respawns only after that worker's `close`.
|
|
10
|
+
* - The worker (`watchRetirement`) retires on a stop signal or when its IPC supervisor disconnects:
|
|
11
|
+
* before its close path exists it exits at once; after, it stops listening, drains, and exits
|
|
12
|
+
* within `WORKER_SHUTDOWN_MS`, which is shorter than the supervisor's grace.
|
|
13
|
+
* A process stuck in an uninterruptible kernel wait ignores SIGKILL too; the supervisor then keeps
|
|
14
|
+
* waiting rather than start a successor that cannot bind.
|
|
6
15
|
*/
|
|
7
16
|
import { spawn } from 'node:child_process';
|
|
17
|
+
import { existsSync, renameSync, rmSync } from 'node:fs';
|
|
18
|
+
import { atomicWriteText } from '../fs/atomic.js';
|
|
19
|
+
import { readUpdateRollback, rollbackPaths } from '../tools/update-rollback.js';
|
|
20
|
+
import { homeDotenvKeys, setHomeDotenvKeys } from './dotenv.js';
|
|
8
21
|
export const RESTART_EXIT_CODE = 75;
|
|
9
22
|
export const WORKER_ENV = 'TALARIA_WEB_WORKER';
|
|
23
|
+
export const WORKER_SHUTDOWN_MS = 10_000;
|
|
24
|
+
export const STOP_GRACE_MS = 15_000;
|
|
10
25
|
export async function supervise(opts) {
|
|
11
26
|
const [cmd, ...args] = opts.command;
|
|
12
27
|
if (!cmd)
|
|
13
28
|
throw new Error('supervise: empty command');
|
|
14
29
|
const cwd = process.cwd();
|
|
15
30
|
let stopping = false;
|
|
31
|
+
let afterRestart = false;
|
|
32
|
+
let rolledBack = false;
|
|
16
33
|
for (;;) {
|
|
17
|
-
const
|
|
18
|
-
|
|
34
|
+
const env = { ...opts.env, [WORKER_ENV]: '1' };
|
|
35
|
+
// Reload home-file values in each worker; the supervisor may hold credentials revoked since startup.
|
|
36
|
+
for (const key of homeDotenvKeys(env))
|
|
37
|
+
Reflect.deleteProperty(env, key);
|
|
38
|
+
setHomeDotenvKeys(env, new Set());
|
|
39
|
+
const paths = opts.packageRoot && opts.stateDir ? rollbackPaths(opts.packageRoot, opts.stateDir) : null;
|
|
40
|
+
const pendingUpdate = paths && existsSync(paths.previous) ? readUpdateRollback(opts.stateDir) : null;
|
|
41
|
+
const child = spawn(cmd, args, { cwd, stdio: ['inherit', 'inherit', 'inherit', 'ipc'], env });
|
|
42
|
+
let ready = false;
|
|
43
|
+
child.on('message', (message) => {
|
|
44
|
+
if (message !== 'ready' || ready)
|
|
45
|
+
return;
|
|
46
|
+
ready = true;
|
|
47
|
+
if (afterRestart && !rolledBack && paths && pendingUpdate) {
|
|
48
|
+
// A later update may already have written a different marker after this worker started listening.
|
|
49
|
+
if (JSON.stringify(readUpdateRollback(opts.stateDir)) !== JSON.stringify(pendingUpdate))
|
|
50
|
+
return;
|
|
51
|
+
try {
|
|
52
|
+
rmSync(paths.failed, { recursive: true, force: true });
|
|
53
|
+
rmSync(paths.marker, { force: true });
|
|
54
|
+
}
|
|
55
|
+
catch (error) {
|
|
56
|
+
opts.log(`[serve] could not finish update recovery cleanup: ${error.message}`);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
let killTimer;
|
|
61
|
+
const forward = (signal) => () => {
|
|
62
|
+
// The worker shuts down once; repeating the signal would only cut its cleanup short.
|
|
63
|
+
if (stopping)
|
|
64
|
+
return;
|
|
65
|
+
stopping = true;
|
|
66
|
+
child.kill(signal);
|
|
67
|
+
const graceMs = opts.stopGraceMs ?? STOP_GRACE_MS;
|
|
68
|
+
killTimer = setTimeout(() => {
|
|
69
|
+
opts.log(`[serve] worker ${String(child.pid)} did not exit within ${String(graceMs)} ms of ${signal}; killing it`);
|
|
70
|
+
child.kill('SIGKILL');
|
|
71
|
+
}, graceMs);
|
|
72
|
+
};
|
|
19
73
|
const handlers = [['SIGTERM', forward('SIGTERM')], ['SIGINT', forward('SIGINT')], ['SIGHUP', forward('SIGHUP')]];
|
|
20
74
|
for (const [signal, handler] of handlers)
|
|
21
75
|
process.on(signal, handler);
|
|
22
76
|
const code = await new Promise((resolve) => {
|
|
23
|
-
child.on('
|
|
24
|
-
child.on('error', (error) => {
|
|
77
|
+
child.on('close', (status, signal) => { resolve(status ?? (signal ? 128 + (signal === 'SIGKILL' ? 9 : 15) : 1)); });
|
|
78
|
+
child.on('error', (error) => {
|
|
79
|
+
// A started worker still owns its port: wait for its close rather than return or respawn beside it.
|
|
80
|
+
if (child.pid !== undefined) {
|
|
81
|
+
opts.log(`[serve] worker error: ${error.message}`);
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
opts.log(`[serve] worker failed to start: ${error.message}`);
|
|
85
|
+
resolve(1);
|
|
86
|
+
});
|
|
25
87
|
});
|
|
88
|
+
clearTimeout(killTimer);
|
|
26
89
|
for (const [signal, handler] of handlers)
|
|
27
90
|
process.off(signal, handler);
|
|
28
|
-
if (
|
|
91
|
+
if (stopping)
|
|
29
92
|
return code;
|
|
93
|
+
if (code !== RESTART_EXIT_CODE) {
|
|
94
|
+
const marker = readUpdateRollback(opts.stateDir);
|
|
95
|
+
if (!afterRestart || ready || rolledBack || !marker || !paths || !opts.packageRoot || !existsSync(paths.previous))
|
|
96
|
+
return code;
|
|
97
|
+
try {
|
|
98
|
+
rmSync(paths.failed, { recursive: true, force: true });
|
|
99
|
+
renameSync(opts.packageRoot, paths.failed);
|
|
100
|
+
try {
|
|
101
|
+
renameSync(paths.previous, opts.packageRoot);
|
|
102
|
+
}
|
|
103
|
+
catch (error) {
|
|
104
|
+
renameSync(paths.failed, opts.packageRoot);
|
|
105
|
+
throw error;
|
|
106
|
+
}
|
|
107
|
+
// Record the attempt before spawning again; never loop if the restored worker also crashes.
|
|
108
|
+
rolledBack = true;
|
|
109
|
+
try {
|
|
110
|
+
atomicWriteText(paths.marker, JSON.stringify({ ...marker, failedVersion: marker.version }));
|
|
111
|
+
}
|
|
112
|
+
catch (error) {
|
|
113
|
+
opts.log(`[serve] could not persist failed update: ${error.message}`);
|
|
114
|
+
}
|
|
115
|
+
opts.log(`[serve] update to ${marker.version} failed to start; restored ${marker.previousVersion}`);
|
|
116
|
+
continue;
|
|
117
|
+
}
|
|
118
|
+
catch (error) {
|
|
119
|
+
opts.log(`[serve] update rollback failed: ${error.message}`);
|
|
120
|
+
return code;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
rolledBack = false;
|
|
124
|
+
afterRestart = true;
|
|
30
125
|
opts.log('[serve] restarting the server with the updated source');
|
|
31
126
|
await new Promise((r) => setTimeout(r, opts.restartDelayMs ?? 500));
|
|
32
127
|
}
|
|
33
128
|
}
|
|
129
|
+
/** Retires the server on SIGTERM/SIGINT/SIGHUP and, for a supervised worker, on loss of its supervisor. */
|
|
130
|
+
export function watchRetirement(opts) {
|
|
131
|
+
const events = opts.events ?? process;
|
|
132
|
+
const exit = opts.exit ?? ((code) => { process.exit(code); });
|
|
133
|
+
const deadlineMs = opts.deadlineMs ?? WORKER_SHUTDOWN_MS;
|
|
134
|
+
let close = null;
|
|
135
|
+
let retiring = false;
|
|
136
|
+
let exited = false;
|
|
137
|
+
const finish = (code) => { if (!exited) {
|
|
138
|
+
exited = true;
|
|
139
|
+
exit(code);
|
|
140
|
+
} };
|
|
141
|
+
const run = (shutdown) => {
|
|
142
|
+
const timer = setTimeout(() => {
|
|
143
|
+
opts.log(`[webui] shutdown did not finish within ${String(deadlineMs)} ms; exiting`);
|
|
144
|
+
finish(1);
|
|
145
|
+
}, deadlineMs);
|
|
146
|
+
void Promise.resolve().then(shutdown).then(() => { clearTimeout(timer); finish(0); }, (error) => { clearTimeout(timer); opts.log(`[webui] shutdown failed: ${error.message}`); finish(1); });
|
|
147
|
+
};
|
|
148
|
+
const retire = (reason) => {
|
|
149
|
+
if (retiring)
|
|
150
|
+
return;
|
|
151
|
+
retiring = true;
|
|
152
|
+
opts.log(`[webui] ${reason}; shutting down`);
|
|
153
|
+
// Nothing has been served before the close path exists.
|
|
154
|
+
if (close)
|
|
155
|
+
run(close);
|
|
156
|
+
else
|
|
157
|
+
finish(0);
|
|
158
|
+
};
|
|
159
|
+
for (const signal of ['SIGTERM', 'SIGINT', 'SIGHUP'])
|
|
160
|
+
events.on(signal, () => { retire(`${signal} received`); });
|
|
161
|
+
if (opts.supervised) {
|
|
162
|
+
events.on('disconnect', () => { retire('supervisor disconnected'); });
|
|
163
|
+
// The listener must not keep a worker alive that would otherwise exit.
|
|
164
|
+
if (events === process)
|
|
165
|
+
process.channel?.unref();
|
|
166
|
+
if (!events.connected)
|
|
167
|
+
retire('supervisor disconnected');
|
|
168
|
+
}
|
|
169
|
+
return {
|
|
170
|
+
get retiring() { return retiring; },
|
|
171
|
+
attach: (shutdown) => { if (!retiring)
|
|
172
|
+
close = shutdown; },
|
|
173
|
+
};
|
|
174
|
+
}
|
|
34
175
|
//# sourceMappingURL=supervise.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"supervise.js","sourceRoot":"","sources":["../../src/cli/supervise.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"supervise.js","sourceRoot":"","sources":["../../src/cli/supervise.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,10 @@
|
|
|
1
|
+
import type { SidecarResult } from '@maudecode/talaria-web-contracts';
|
|
1
2
|
import type { SidecarLike } from '../sidecar/client.js';
|
|
3
|
+
export type SpeedTier = SidecarResult<'models.speed_tiers'>['tiers'][number][number];
|
|
4
|
+
/** One auxiliary slot as the Agent lists it (TAL-800); the static catalog's rows carry no effort or inheritance. */
|
|
5
|
+
export type AuxSlot = Omit<SidecarResult<'aux.tasks'>['tasks'][number], 'reasoning_effort'> & {
|
|
6
|
+
reasoning_effort: string | null;
|
|
7
|
+
};
|
|
2
8
|
export type Config = Record<string, unknown>;
|
|
3
9
|
export type Dict = Record<string, unknown>;
|
|
4
10
|
export declare const isDict: (v: unknown) => v is Dict;
|
|
@@ -26,9 +32,28 @@ export declare class AgentConfig {
|
|
|
26
32
|
/** Parsed config.yaml (empty object when the file is missing). */
|
|
27
33
|
read(profileHome: string, opts?: ConfigFileOptions): Promise<Config>;
|
|
28
34
|
/** Synchronous last-known config for callers that cannot await (workspace resolution); refreshes in the background. */
|
|
29
|
-
peek(profileHome: string
|
|
35
|
+
peek(profileHome: string, opts?: {
|
|
36
|
+
refresh?: boolean;
|
|
37
|
+
}): Config | null;
|
|
30
38
|
/** Read-modify-write under a per-file lock (homes sharing an `HERMES_CONFIG_PATH` override serialise); `mutate` returns false to skip the write. */
|
|
31
39
|
update(profileHome: string, mutate: (config: Config) => unknown, opts?: ConfigFileOptions): Promise<Config>;
|
|
40
|
+
/** The Agent owns speed eligibility. A failed lookup must not erase a saved tier. */
|
|
41
|
+
speedTiers(profileHome: string, config: Config, models: {
|
|
42
|
+
model: string;
|
|
43
|
+
provider: string;
|
|
44
|
+
}[]): Promise<SpeedTier[][]>;
|
|
45
|
+
/**
|
|
46
|
+
* TAL-800: the profile's auxiliary slots as its Agent lists them (plugin tasks included), and the Agent's other
|
|
47
|
+
* `auxiliary.*` keys. The static catalog only when the Agent cannot list them; `reserved` is then unknown (null).
|
|
48
|
+
*/
|
|
49
|
+
auxiliarySlots(profileHome: string): Promise<{
|
|
50
|
+
slots: AuxSlot[];
|
|
51
|
+
reserved: string[] | null;
|
|
52
|
+
}>;
|
|
53
|
+
/** TAL-901: the personalities the profile's Agent offers for its config; throws when the Agent cannot list them. */
|
|
54
|
+
agentPersonalities(profileHome: string): Promise<PersonalityRow[]>;
|
|
55
|
+
/** The Agent's personalities to list and select from; the config's own block only while the sidecar cannot list them. */
|
|
56
|
+
personalities(profileHome: string): Promise<PersonalityRow[]>;
|
|
32
57
|
invalidate(profileHome?: string): void;
|
|
33
58
|
}
|
|
34
59
|
/** Settings `provider_cost_budget` → positive number or null. */
|
|
@@ -67,6 +92,7 @@ export interface ReasoningStatus {
|
|
|
67
92
|
supported_efforts: string[];
|
|
68
93
|
supports_reasoning_effort: boolean;
|
|
69
94
|
supports_thinking_toggle: boolean;
|
|
95
|
+
supports_session_scope: boolean;
|
|
70
96
|
}
|
|
71
97
|
export type EffortsResolver = (model: string, provider: string, baseUrl: string) => Promise<string[]>;
|
|
72
98
|
/**
|
|
@@ -75,25 +101,25 @@ export type EffortsResolver = (model: string, provider: string, baseUrl: string)
|
|
|
75
101
|
* endpoint never receives a supra-ceiling level.
|
|
76
102
|
*/
|
|
77
103
|
export declare function coerceReasoningEffort(effort: string, supported: string[], provider?: string): string;
|
|
104
|
+
/** The Web display preference, shared by the settings response and native-owner watches. */
|
|
105
|
+
export declare function showReasoning(config: Config): boolean;
|
|
78
106
|
export declare function reasoningStatus(config: Config, resolve: EffortsResolver, opts?: {
|
|
79
107
|
model?: string | null;
|
|
80
108
|
provider?: string | null;
|
|
81
109
|
baseUrl?: string | null;
|
|
82
110
|
}): Promise<ReasoningStatus>;
|
|
83
111
|
export declare function validReasoningEffort(effort: string): boolean;
|
|
84
|
-
export
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
export declare function personalityPrompt(config: Config, name: string): string | null;
|
|
112
|
+
export type PersonalityRow = SidecarResult<'personalities.list'>['personalities'][number];
|
|
113
|
+
/** The pre-TAL-901 reading of `agent.personalities` alone, kept only for when the sidecar cannot list the Agent's. */
|
|
114
|
+
export declare function configPersonalities(config: Config): PersonalityRow[];
|
|
115
|
+
/** The personality `name` selects, compared case-folded as the Agent does; undefined when there is none. */
|
|
116
|
+
export declare function findPersonality(rows: PersonalityRow[], name: string): PersonalityRow | undefined;
|
|
90
117
|
/** Python `_apply_advanced_model_options` (in place). */
|
|
91
118
|
export declare function applyAdvancedModelOptions(target: Dict, advanced: unknown): void;
|
|
92
119
|
export declare function publicAdvancedModelOptions(modelCfg: Dict): Dict;
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
export declare function
|
|
96
|
-
export declare function auxiliaryModels(config: Config): {
|
|
120
|
+
/** Effective configured endpoint, shared by speed display and validation after model selection. */
|
|
121
|
+
export declare function modelBaseUrl(config: Config, provider: string): string;
|
|
122
|
+
export declare function auxiliaryModels(config: Config, tiers: SpeedTier[], slots: AuxSlot[]): {
|
|
97
123
|
tasks: Dict[];
|
|
98
124
|
main: Dict;
|
|
99
125
|
};
|
|
@@ -6,11 +6,11 @@
|
|
|
6
6
|
* Policy helpers (model section, reasoning, max_tokens, auxiliary slots,
|
|
7
7
|
* personalities) port Python `api/config.py`.
|
|
8
8
|
*/
|
|
9
|
-
import { statSync } from 'node:fs';
|
|
10
9
|
import { homedir } from 'node:os';
|
|
11
10
|
import { join, resolve as resolvePath } from 'node:path';
|
|
12
|
-
import { PORTAL_PROVIDERS, PROVIDER_ALIASES, PROVIDER_DISPLAY, PROVIDER_MODELS, VALID_REASONING_EFFORTS, AUXILIARY_TASK_CATALOG,
|
|
11
|
+
import { LOCAL_RUNTIME_PROVIDER, PORTAL_PROVIDERS, PROVIDER_ALIASES, PROVIDER_DISPLAY, PROVIDER_MODELS, VALID_REASONING_EFFORTS, AUXILIARY_TASK_CATALOG, RETIRED_AUX_TASK_SLOTS } from '../providers/tables.js';
|
|
13
12
|
import { str } from '../util.js';
|
|
13
|
+
import { fileStatKey } from '../fs/stat.js';
|
|
14
14
|
export const isDict = (v) => typeof v === 'object' && v !== null && !Array.isArray(v);
|
|
15
15
|
export const dict = (v) => (isDict(v) ? v : {});
|
|
16
16
|
export class ConfigUnavailable extends Error {
|
|
@@ -30,9 +30,8 @@ export class AgentConfig {
|
|
|
30
30
|
/** Fingerprint of the config file; `missing` only when it does not exist. Any other stat failure (EACCES, EIO, ...) is unreadable, never empty. */
|
|
31
31
|
statKey(profileHome, opts = {}) {
|
|
32
32
|
try {
|
|
33
|
-
const st = statSync(this.path(profileHome, opts), { bigint: true });
|
|
34
33
|
// ctime moves on chmod/chown, so a permission change re-reads through the sidecar instead of serving the old parse.
|
|
35
|
-
return
|
|
34
|
+
return fileStatKey(this.path(profileHome, opts));
|
|
36
35
|
}
|
|
37
36
|
catch (error) {
|
|
38
37
|
const code = error.code;
|
|
@@ -76,7 +75,7 @@ export class AgentConfig {
|
|
|
76
75
|
throw new ConfigUnavailable('config.yaml changed while it was being read; retry');
|
|
77
76
|
}
|
|
78
77
|
/** Synchronous last-known config for callers that cannot await (workspace resolution); refreshes in the background. */
|
|
79
|
-
peek(profileHome) {
|
|
78
|
+
peek(profileHome, opts = {}) {
|
|
80
79
|
let key;
|
|
81
80
|
try {
|
|
82
81
|
key = this.statKey(profileHome);
|
|
@@ -90,7 +89,8 @@ export class AgentConfig {
|
|
|
90
89
|
if (key === 'missing')
|
|
91
90
|
return {};
|
|
92
91
|
// A changed file invalidates the snapshot: callers gate on `null` (fail closed) until the matching read lands.
|
|
93
|
-
|
|
92
|
+
if (opts.refresh !== false)
|
|
93
|
+
void this.read(profileHome).catch(() => undefined);
|
|
94
94
|
return null;
|
|
95
95
|
}
|
|
96
96
|
/** Read-modify-write under a per-file lock (homes sharing an `HERMES_CONFIG_PATH` override serialise); `mutate` returns false to skip the write. */
|
|
@@ -99,7 +99,7 @@ export class AgentConfig {
|
|
|
99
99
|
const prev = this.locks.get(file) ?? Promise.resolve();
|
|
100
100
|
const run = prev.catch(() => undefined).then(async () => {
|
|
101
101
|
const config = await this.read(profileHome, opts);
|
|
102
|
-
if (mutate(config) === false)
|
|
102
|
+
if (await mutate(config) === false)
|
|
103
103
|
return config;
|
|
104
104
|
const sidecar = this.deps.sidecar();
|
|
105
105
|
if (!sidecar)
|
|
@@ -111,6 +111,48 @@ export class AgentConfig {
|
|
|
111
111
|
this.locks.set(file, run);
|
|
112
112
|
return run;
|
|
113
113
|
}
|
|
114
|
+
/** The Agent owns speed eligibility. A failed lookup must not erase a saved tier. */
|
|
115
|
+
async speedTiers(profileHome, config, models) {
|
|
116
|
+
const sidecar = this.deps.sidecar();
|
|
117
|
+
if (!sidecar)
|
|
118
|
+
throw new ConfigUnavailable('Hermes Agent sidecar is not running; speed tiers are unavailable');
|
|
119
|
+
try {
|
|
120
|
+
const routes = models.map(({ model, provider }) => ({ model, provider: resolveProviderAlias(provider), base_url: modelBaseUrl(config, provider) }));
|
|
121
|
+
const result = await sidecar.call('models.speed_tiers', { profile_home: profileHome, routes });
|
|
122
|
+
if (result.tiers.length !== routes.length)
|
|
123
|
+
throw new Error('incomplete speed tier response');
|
|
124
|
+
return result.tiers;
|
|
125
|
+
}
|
|
126
|
+
catch (error) {
|
|
127
|
+
throw new ConfigUnavailable(`Speed tiers are unavailable: ${String(error)}`);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* TAL-800: the profile's auxiliary slots as its Agent lists them (plugin tasks included), and the Agent's other
|
|
132
|
+
* `auxiliary.*` keys. The static catalog only when the Agent cannot list them; `reserved` is then unknown (null).
|
|
133
|
+
*/
|
|
134
|
+
async auxiliarySlots(profileHome) {
|
|
135
|
+
const sidecar = this.deps.sidecar();
|
|
136
|
+
// A failed listing offers the built-in table only, so a plugin slot is never assignable without the Agent vouching for it.
|
|
137
|
+
const listed = sidecar ? await sidecar.call('aux.tasks', { profile_home: profileHome }).catch(() => null) : null;
|
|
138
|
+
return listed ? { slots: listed.tasks, reserved: listed.reserved } : { slots: AUXILIARY_TASK_CATALOG.map((slot) => ({ ...slot, inherit_from: null, reasoning_effort: null, effective: null })), reserved: null };
|
|
139
|
+
}
|
|
140
|
+
/** TAL-901: the personalities the profile's Agent offers for its config; throws when the Agent cannot list them. */
|
|
141
|
+
async agentPersonalities(profileHome) {
|
|
142
|
+
const sidecar = this.deps.sidecar();
|
|
143
|
+
if (!sidecar)
|
|
144
|
+
throw new ConfigUnavailable('Hermes Agent sidecar is not running; personalities are unavailable');
|
|
145
|
+
return (await sidecar.call('personalities.list', { config: await this.read(profileHome) })).personalities;
|
|
146
|
+
}
|
|
147
|
+
/** The Agent's personalities to list and select from; the config's own block only while the sidecar cannot list them. */
|
|
148
|
+
async personalities(profileHome) {
|
|
149
|
+
try {
|
|
150
|
+
return await this.agentPersonalities(profileHome);
|
|
151
|
+
}
|
|
152
|
+
catch {
|
|
153
|
+
return configPersonalities(await this.read(profileHome));
|
|
154
|
+
}
|
|
155
|
+
}
|
|
114
156
|
invalidate(profileHome) {
|
|
115
157
|
if (profileHome)
|
|
116
158
|
this.cache.delete(this.path(profileHome));
|
|
@@ -148,7 +190,7 @@ export function canonicaliseProviderId(name) {
|
|
|
148
190
|
if (raw in PROVIDER_DISPLAY || raw in PROVIDER_MODELS)
|
|
149
191
|
return raw;
|
|
150
192
|
const resolved = resolveProviderAlias(raw);
|
|
151
|
-
if (resolved && (resolved in PROVIDER_DISPLAY || resolved in PROVIDER_MODELS))
|
|
193
|
+
if (resolved && (resolved in PROVIDER_DISPLAY || resolved in PROVIDER_MODELS || resolved === LOCAL_RUNTIME_PROVIDER))
|
|
152
194
|
return resolved;
|
|
153
195
|
return raw;
|
|
154
196
|
}
|
|
@@ -317,8 +359,14 @@ export function coerceReasoningEffort(effort, supported, provider = '') {
|
|
|
317
359
|
}
|
|
318
360
|
return raw;
|
|
319
361
|
}
|
|
320
|
-
|
|
362
|
+
/** The Web display preference, shared by the settings response and native-owner watches. */
|
|
363
|
+
export function showReasoning(config) {
|
|
321
364
|
const display = dict(config.display);
|
|
365
|
+
const webui = dict(dict(display.platforms).webui).show_reasoning;
|
|
366
|
+
const raw = typeof webui === 'boolean' ? webui : display.show_reasoning;
|
|
367
|
+
return typeof raw === 'boolean' ? raw : true;
|
|
368
|
+
}
|
|
369
|
+
export async function reasoningStatus(config, resolve, opts = {}) {
|
|
322
370
|
const agent = dict(config.agent);
|
|
323
371
|
let model = str(opts.model).trim();
|
|
324
372
|
let provider = str(opts.provider).trim();
|
|
@@ -332,48 +380,41 @@ export async function reasoningStatus(config, resolve, opts = {}) {
|
|
|
332
380
|
baseUrl = str(m.base_url).trim();
|
|
333
381
|
}
|
|
334
382
|
const supported = model ? await resolve(model, provider, baseUrl) : [];
|
|
335
|
-
const showRaw = display.show_reasoning;
|
|
336
383
|
return {
|
|
337
|
-
show_reasoning:
|
|
384
|
+
show_reasoning: showReasoning(config),
|
|
338
385
|
reasoning_effort: coerceReasoningEffort(str(agent.reasoning_effort), supported, provider),
|
|
339
386
|
supported_efforts: supported,
|
|
340
387
|
supports_reasoning_effort: supported.length > 0,
|
|
341
388
|
supports_thinking_toggle: supported.length > 0,
|
|
389
|
+
supports_session_scope: true,
|
|
342
390
|
};
|
|
343
391
|
}
|
|
344
392
|
export function validReasoningEffort(effort) {
|
|
345
393
|
const raw = effort.trim().toLowerCase();
|
|
346
394
|
return !raw || raw === 'none' || VALID_REASONING_EFFORTS.includes(raw);
|
|
347
395
|
}
|
|
348
|
-
|
|
349
|
-
export function
|
|
396
|
+
/** The pre-TAL-901 reading of `agent.personalities` alone, kept only for when the sidecar cannot list the Agent's. */
|
|
397
|
+
export function configPersonalities(config) {
|
|
350
398
|
const raw = dict(config.agent).personalities;
|
|
351
399
|
if (!isDict(raw))
|
|
352
400
|
return [];
|
|
353
401
|
return Object.entries(raw).map(([name, value]) => {
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
402
|
+
if (isDict(value)) {
|
|
403
|
+
const parts = [str(value.system_prompt) || str(value.prompt)];
|
|
404
|
+
if (value.tone)
|
|
405
|
+
parts.push(`Tone: ${str(value.tone)}`);
|
|
406
|
+
if (value.style)
|
|
407
|
+
parts.push(`Style: ${str(value.style)}`);
|
|
408
|
+
return { name, description: str(value.description), prompt: parts.filter(Boolean).join('\n') };
|
|
409
|
+
}
|
|
410
|
+
const text = str(value);
|
|
411
|
+
return { name, description: text.slice(0, 80) + (text.length > 80 ? '...' : ''), prompt: text };
|
|
360
412
|
});
|
|
361
413
|
}
|
|
362
|
-
/**
|
|
363
|
-
export function
|
|
364
|
-
const
|
|
365
|
-
|
|
366
|
-
return null;
|
|
367
|
-
const value = raw[name];
|
|
368
|
-
if (isDict(value)) {
|
|
369
|
-
const parts = [str(value.system_prompt) || str(value.prompt)];
|
|
370
|
-
if (value.tone)
|
|
371
|
-
parts.push(`Tone: ${str(value.tone)}`);
|
|
372
|
-
if (value.style)
|
|
373
|
-
parts.push(`Style: ${str(value.style)}`);
|
|
374
|
-
return parts.filter(Boolean).join('\n');
|
|
375
|
-
}
|
|
376
|
-
return str(value);
|
|
414
|
+
/** The personality `name` selects, compared case-folded as the Agent does; undefined when there is none. */
|
|
415
|
+
export function findPersonality(rows, name) {
|
|
416
|
+
const key = name.trim().toLowerCase();
|
|
417
|
+
return key ? rows.find((row) => row.name.toLowerCase() === key) : undefined;
|
|
377
418
|
}
|
|
378
419
|
// ── advanced model options / auxiliary slots ──────────────────────────
|
|
379
420
|
function coerceOptionalPositiveInt(value, field) {
|
|
@@ -434,10 +475,10 @@ export function applyAdvancedModelOptions(target, advanced) {
|
|
|
434
475
|
const tier = str(advanced.service_tier).trim().toLowerCase();
|
|
435
476
|
if (!tier || tier === 'default')
|
|
436
477
|
Reflect.deleteProperty(target, 'service_tier');
|
|
437
|
-
else if (tier === 'priority')
|
|
438
|
-
target.service_tier =
|
|
478
|
+
else if (tier === 'priority' || tier === 'ultrafast')
|
|
479
|
+
target.service_tier = tier;
|
|
439
480
|
else
|
|
440
|
-
throw new Error('service_tier must be one of: default, priority');
|
|
481
|
+
throw new Error('service_tier must be one of: default, priority, ultrafast');
|
|
441
482
|
}
|
|
442
483
|
if (advanced.api_key_clear)
|
|
443
484
|
Reflect.deleteProperty(target, 'api_key');
|
|
@@ -455,21 +496,24 @@ export function publicAdvancedModelOptions(modelCfg) {
|
|
|
455
496
|
api_key_set: Boolean(str(modelCfg.api_key).trim()),
|
|
456
497
|
};
|
|
457
498
|
}
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
const
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
499
|
+
/** Effective configured endpoint, shared by speed display and validation after model selection. */
|
|
500
|
+
export function modelBaseUrl(config, provider) {
|
|
501
|
+
const pid = canonicaliseProviderId(provider);
|
|
502
|
+
const model = modelSection(config);
|
|
503
|
+
if (canonicaliseProviderId(model.provider) === pid && str(model.base_url).trim())
|
|
504
|
+
return str(model.base_url).trim();
|
|
505
|
+
const providers = dict(config.providers);
|
|
506
|
+
const key = Object.keys(providers).find((k) => canonicaliseProviderId(k) === pid);
|
|
507
|
+
const base = str(dict(key ? providers[key] : null).base_url).trim();
|
|
508
|
+
if (base)
|
|
509
|
+
return base;
|
|
510
|
+
const custom = customProviderEntries(config).find((cp) => customProviderSlug(cp.name) === pid);
|
|
511
|
+
return str(custom?.base_url).trim();
|
|
512
|
+
}
|
|
513
|
+
function auxTaskPayload(slot, entry) {
|
|
470
514
|
const e = dict(entry);
|
|
471
515
|
return {
|
|
472
|
-
task: key,
|
|
516
|
+
task: slot.key,
|
|
473
517
|
provider: str(e.provider).trim() || 'auto',
|
|
474
518
|
model: str(e.model).trim(),
|
|
475
519
|
base_url: str(e.base_url).trim(),
|
|
@@ -478,23 +522,26 @@ function auxTaskPayload(key, entry, label, description) {
|
|
|
478
522
|
max_concurrency: e.max_concurrency ?? '',
|
|
479
523
|
extra_body: isDict(e.extra_body) ? e.extra_body : {},
|
|
480
524
|
api_key_set: Boolean(str(e.api_key).trim()),
|
|
481
|
-
label,
|
|
482
|
-
description,
|
|
525
|
+
label: slot.label,
|
|
526
|
+
description: slot.description,
|
|
527
|
+
inherit_from: slot.inherit_from,
|
|
528
|
+
reasoning_effort: slot.reasoning_effort,
|
|
529
|
+
effective: slot.effective,
|
|
483
530
|
};
|
|
484
531
|
}
|
|
485
|
-
export function auxiliaryModels(config) {
|
|
532
|
+
export function auxiliaryModels(config, tiers, slots) {
|
|
486
533
|
const modelCfg = modelSection(config);
|
|
487
534
|
const aux = dict(config.auxiliary);
|
|
488
535
|
const mainProvider = str(modelCfg.provider).trim();
|
|
489
536
|
const mainModel = str(modelCfg.default ?? modelCfg.name).trim();
|
|
490
|
-
const supportsFast = mainModelSupportsServiceTier(mainModel, mainProvider);
|
|
491
537
|
return {
|
|
492
|
-
tasks:
|
|
538
|
+
tasks: slots.map((slot) => auxTaskPayload(slot, slot.key === DELEGATION_TASK ? config.delegation : aux[slot.key])),
|
|
493
539
|
main: {
|
|
494
540
|
provider: mainProvider,
|
|
495
541
|
model: mainModel,
|
|
496
|
-
supports_fast_tier:
|
|
497
|
-
|
|
542
|
+
supports_fast_tier: tiers.some((t) => t.service_tier === 'priority'),
|
|
543
|
+
supported_speed_tiers: tiers,
|
|
544
|
+
service_tier: tiers.find((t) => t.service_tier === str(modelCfg.service_tier).trim().toLowerCase())?.service_tier ?? 'default',
|
|
498
545
|
...publicAdvancedModelOptions(modelCfg),
|
|
499
546
|
},
|
|
500
547
|
};
|
|
@@ -512,9 +559,27 @@ function auxiliarySelection(providerRaw, modelRaw) {
|
|
|
512
559
|
return [provider === 'auto' ? parsed[1] : provider, parsed[0]];
|
|
513
560
|
}
|
|
514
561
|
const isCustomProvider = (provider) => { const p = str(provider).trim(); return p === 'custom' || p.startsWith('custom:'); };
|
|
562
|
+
/**
|
|
563
|
+
* TAL-1273: the Agent's subagent slot. `delegate_task` reads top-level `delegation`, where Auto (inherit the parent) is
|
|
564
|
+
* stored as empty strings, and a `base_url` outranks `provider`. Only `custom` keeps a direct endpoint; any other pick
|
|
565
|
+
* clears its `base_url` and `api_mode` so the child really runs on the picked provider.
|
|
566
|
+
*/
|
|
567
|
+
const DELEGATION_TASK = 'delegation';
|
|
568
|
+
function delegationRoute(entry, provider, model, advanced) {
|
|
569
|
+
const route = { ...dict(entry), provider: provider === 'auto' ? '' : provider, model };
|
|
570
|
+
if (provider !== 'custom')
|
|
571
|
+
Object.assign(route, { base_url: '', api_mode: '' });
|
|
572
|
+
if (isDict(advanced)) {
|
|
573
|
+
// The section has no timeout, concurrency, extra_body, or speed keys; only the endpoint and its key apply.
|
|
574
|
+
applyAdvancedModelOptions(route, Object.fromEntries(['base_url', 'api_key', 'api_key_clear'].filter((k) => k in advanced).map((k) => [k, advanced[k]])));
|
|
575
|
+
}
|
|
576
|
+
return route;
|
|
577
|
+
}
|
|
515
578
|
export async function setAuxiliaryModel(store, home, task, providerRaw, modelRaw, advanced) {
|
|
516
|
-
|
|
517
|
-
|
|
579
|
+
const listing = await store.auxiliarySlots(home);
|
|
580
|
+
const slots = listing.slots.map((slot) => slot.key);
|
|
581
|
+
if (task !== '__reset__' && !slots.includes(task))
|
|
582
|
+
throw new Error(`Unknown auxiliary task slot: '${task}'. Valid: [${slots.map((s) => `'${s}'`).join(', ')}]`);
|
|
518
583
|
const [provider, model] = task === '__reset__' ? ['auto', ''] : auxiliarySelection(providerRaw, modelRaw);
|
|
519
584
|
await store.update(home, (config) => {
|
|
520
585
|
const aux = dict(config.auxiliary);
|
|
@@ -523,9 +588,20 @@ export async function setAuxiliaryModel(store, home, task, providerRaw, modelRaw
|
|
|
523
588
|
if (task === '__reset__') {
|
|
524
589
|
for (const retired of RETIRED_AUX_TASK_SLOTS)
|
|
525
590
|
Reflect.deleteProperty(aux, retired);
|
|
526
|
-
|
|
527
|
-
|
|
591
|
+
// A route block the Agent neither lists nor owns is a disabled or removed plugin's task: Reset All clears it too, so
|
|
592
|
+
// re-enabling the plugin does not bring back a pin the user reset. Unknown ownership (no listing) leaves it alone.
|
|
593
|
+
const { reserved } = listing;
|
|
594
|
+
const orphans = reserved ? Object.keys(aux).filter((key) => isDict(aux[key]) && !slots.includes(key) && !reserved.includes(key)) : [];
|
|
595
|
+
for (const slot of [...slots, ...orphans])
|
|
596
|
+
if (slot !== DELEGATION_TASK)
|
|
597
|
+
aux[slot] = autoSlot(aux[slot]);
|
|
528
598
|
config.auxiliary = aux;
|
|
599
|
+
if (slots.includes(DELEGATION_TASK))
|
|
600
|
+
config.delegation = delegationRoute(config.delegation, 'auto', '', null);
|
|
601
|
+
return;
|
|
602
|
+
}
|
|
603
|
+
if (task === DELEGATION_TASK) {
|
|
604
|
+
config.delegation = delegationRoute(config.delegation, provider, model, advanced);
|
|
529
605
|
return;
|
|
530
606
|
}
|
|
531
607
|
const slot = provider === 'auto' && !model ? autoSlot(aux[task]) : dict(aux[task]);
|
|
@@ -564,7 +640,7 @@ export async function setDefaultModel(store, home, modelId, providerRaw, advance
|
|
|
564
640
|
throw new Error('model is required');
|
|
565
641
|
let persistedModel = selected;
|
|
566
642
|
let persistedProvider = '';
|
|
567
|
-
await store.update(home, (config) => {
|
|
643
|
+
await store.update(home, async (config) => {
|
|
568
644
|
const modelCfg = modelSection(config);
|
|
569
645
|
const previousProvider = str(modelCfg.provider).trim();
|
|
570
646
|
const requested = str(providerRaw).trim();
|
|
@@ -638,9 +714,15 @@ export async function setDefaultModel(store, home, modelId, providerRaw, advance
|
|
|
638
714
|
Reflect.deleteProperty(modelCfg, 'base_url');
|
|
639
715
|
}
|
|
640
716
|
applyAdvancedModelOptions(modelCfg, advanced);
|
|
641
|
-
if (!mainModelSupportsServiceTier(persistedModel, persistedProvider))
|
|
642
|
-
Reflect.deleteProperty(modelCfg, 'service_tier');
|
|
643
717
|
config.model = modelCfg;
|
|
718
|
+
if (modelCfg.service_tier) {
|
|
719
|
+
const [tiers] = await store.speedTiers(home, config, [{ model: persistedModel, provider: persistedProvider }]);
|
|
720
|
+
if (!tiers.some((t) => t.service_tier === modelCfg.service_tier)) {
|
|
721
|
+
if (dict(advanced).service_tier)
|
|
722
|
+
throw new Error('service_tier is not supported for this model and route');
|
|
723
|
+
Reflect.deleteProperty(modelCfg, 'service_tier');
|
|
724
|
+
}
|
|
725
|
+
}
|
|
644
726
|
});
|
|
645
727
|
return { ok: true, model: persistedModel, provider: persistedProvider || null };
|
|
646
728
|
}
|