@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
|
@@ -20,7 +20,7 @@ from contextlib import closing, contextmanager
|
|
|
20
20
|
from pathlib import Path
|
|
21
21
|
|
|
22
22
|
from ..errors import InvalidParams, RpcError
|
|
23
|
-
from ..home import profile_home_param
|
|
23
|
+
from ..home import profile_home_param, scoped_home
|
|
24
24
|
from ..rpc import CallContext
|
|
25
25
|
|
|
26
26
|
log = logging.getLogger("talaria_sidecar.state_db")
|
|
@@ -52,30 +52,107 @@ def _session_id(params: dict) -> str:
|
|
|
52
52
|
return sid
|
|
53
53
|
|
|
54
54
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
55
|
+
# TAL-1191: write RPCs borrow the Agent's shared registry handle for the home's state.db (the one cached chat agents
|
|
56
|
+
# hold) instead of a full writer open and close-time checkpoint per call. One extra reference per home stays pinned for
|
|
57
|
+
# _IDLE_RELEASE_S after its last write; the registry hands out a fresh generation once the file is replaced.
|
|
58
|
+
_IDLE_RELEASE_S = 60.0
|
|
59
|
+
_pins_lock = threading.Lock()
|
|
60
|
+
_pins: dict[str, tuple[object, threading.Timer]] = {}
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
def release_session_db(db) -> None:
|
|
64
|
+
"""Give back a registry reference (a cached agent's or a write pin); the final one closes the handle."""
|
|
65
|
+
if db is None:
|
|
66
|
+
return
|
|
59
67
|
try:
|
|
60
|
-
|
|
61
|
-
|
|
68
|
+
from hermes_state_registry import release_or_close
|
|
69
|
+
|
|
70
|
+
release_or_close(db)
|
|
62
71
|
except Exception: # noqa: BLE001
|
|
63
|
-
log.
|
|
72
|
+
log.warning("releasing a state.db handle failed", exc_info=True)
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
def _write(home: Path, what: str, op, *, level: int = logging.DEBUG) -> bool:
|
|
76
|
+
"""Run ``op(db)`` on the shared handle; False without a state.db or when it fails. A failed write unpins the handle,
|
|
77
|
+
so the next one reopens it unless another holder keeps it."""
|
|
78
|
+
try:
|
|
79
|
+
from hermes_state_registry import acquire
|
|
80
|
+
except ImportError as exc:
|
|
81
|
+
raise RpcError("hermes_state unavailable", condition="state_db_unavailable") from exc
|
|
82
|
+
db_path = home / "state.db"
|
|
83
|
+
if not db_path.exists():
|
|
64
84
|
return False
|
|
65
|
-
|
|
66
|
-
|
|
85
|
+
try:
|
|
86
|
+
db = acquire(db_path)
|
|
87
|
+
except Exception as exc: # noqa: BLE001
|
|
88
|
+
log.debug("Failed to open state.db at %s: %s", db_path, exc)
|
|
89
|
+
return False
|
|
90
|
+
key = os.path.realpath(home)
|
|
91
|
+
# This call's reference keeps the same generation open; a retired one (replaced file) closes before its replacement
|
|
92
|
+
# is written, so its close-time checkpoint cannot carry the new rows into the old inode.
|
|
93
|
+
_pin(key, None)
|
|
94
|
+
ok = False
|
|
95
|
+
try:
|
|
96
|
+
op(db)
|
|
97
|
+
ok = True
|
|
98
|
+
except Exception: # noqa: BLE001
|
|
99
|
+
log.log(level, "Failed to %s", what, exc_info=True)
|
|
100
|
+
if ok and db_path.exists():
|
|
101
|
+
_pin(key, db)
|
|
102
|
+
else:
|
|
103
|
+
release_session_db(db)
|
|
104
|
+
return ok
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
def _pin(key: str, db) -> None:
|
|
108
|
+
"""Make ``db`` (this call's reference) the home's pin with a fresh idle timer, giving back the previous pin."""
|
|
109
|
+
with _pins_lock:
|
|
110
|
+
previous = _pins.pop(key, None)
|
|
111
|
+
if previous is not None:
|
|
112
|
+
previous[1].cancel()
|
|
113
|
+
if db is not None:
|
|
114
|
+
timer = threading.Timer(_IDLE_RELEASE_S, lambda: _expire(key, timer))
|
|
115
|
+
timer.daemon = True
|
|
116
|
+
_pins[key] = (db, timer)
|
|
117
|
+
timer.start()
|
|
118
|
+
if previous is not None: # outside the lock: a final release checkpoints
|
|
119
|
+
release_session_db(previous[0])
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
def _expire(key: str, timer: threading.Timer) -> None:
|
|
123
|
+
with _pins_lock:
|
|
124
|
+
pinned = _pins.get(key)
|
|
125
|
+
if pinned is None or pinned[1] is not timer:
|
|
126
|
+
return
|
|
127
|
+
del _pins[key]
|
|
128
|
+
release_session_db(pinned[0])
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
def release_home(home) -> None:
|
|
132
|
+
"""Give back the pinned handle for ``home`` before its profile is deleted."""
|
|
133
|
+
_pin(os.path.realpath(home), None)
|
|
134
|
+
|
|
135
|
+
|
|
136
|
+
def release_all() -> None:
|
|
137
|
+
"""Shutdown: give back every pinned handle, so the final release still checkpoints once per process."""
|
|
138
|
+
with _pins_lock:
|
|
139
|
+
keys = list(_pins)
|
|
140
|
+
for key in keys:
|
|
141
|
+
_pin(key, None)
|
|
142
|
+
|
|
143
|
+
|
|
144
|
+
def sync_session_start(home: Path, session_id: str, model=None) -> bool:
|
|
145
|
+
return _write(home, "sync session start", lambda db: db.ensure_session(session_id=session_id, source="webui", model=model))
|
|
67
146
|
|
|
68
147
|
|
|
69
148
|
def sync_session_usage(home: Path, session_id: str, *, input_tokens=0, output_tokens=0, estimated_cost=None, model=None, title=None,
|
|
70
149
|
message_count=None, cache_read_tokens=0, cache_write_tokens=0, api_call_count=None) -> bool:
|
|
71
|
-
db
|
|
72
|
-
|
|
73
|
-
return False
|
|
74
|
-
try:
|
|
75
|
-
db.ensure_session(session_id=session_id, source="webui", model=model)
|
|
150
|
+
def op(db) -> None:
|
|
151
|
+
# The token update's own row guard creates the session with this source, like ``ensure_session``.
|
|
76
152
|
db.update_token_counts(
|
|
77
153
|
session_id=session_id, input_tokens=input_tokens, output_tokens=output_tokens, cache_read_tokens=cache_read_tokens,
|
|
78
154
|
cache_write_tokens=cache_write_tokens, api_call_count=api_call_count or 0, estimated_cost_usd=estimated_cost, model=model, absolute=True,
|
|
155
|
+
source="webui",
|
|
79
156
|
)
|
|
80
157
|
if title:
|
|
81
158
|
try:
|
|
@@ -87,22 +164,16 @@ def sync_session_usage(home: Path, session_id: str, *, input_tokens=0, output_to
|
|
|
87
164
|
db._execute_write(lambda conn: conn.execute("UPDATE sessions SET message_count = ? WHERE id = ?", (message_count, session_id)))
|
|
88
165
|
except Exception: # noqa: BLE001
|
|
89
166
|
log.debug("Failed to sync message count", exc_info=True)
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
log.debug("Failed to sync session usage", exc_info=True)
|
|
93
|
-
return False
|
|
94
|
-
finally:
|
|
95
|
-
_close(db)
|
|
167
|
+
|
|
168
|
+
return _write(home, "sync session usage", op)
|
|
96
169
|
|
|
97
170
|
|
|
98
171
|
def sync_session_title(home: Path, session_id: str, title: str, *, manual: bool = False) -> bool:
|
|
99
172
|
"""A manual (user-requested) title lands with ``user`` provenance; an auto title is ``llm`` and never replaces a user name."""
|
|
100
173
|
if not title:
|
|
101
174
|
return False
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
return False
|
|
105
|
-
try:
|
|
175
|
+
|
|
176
|
+
def op(db) -> None:
|
|
106
177
|
db.ensure_session(session_id=session_id, source="webui")
|
|
107
178
|
source = getattr(db, "TITLE_SOURCE_LLM", "llm")
|
|
108
179
|
|
|
@@ -118,28 +189,16 @@ def sync_session_title(home: Path, session_id: str, title: str, *, manual: bool
|
|
|
118
189
|
alt = db.get_next_title_in_lineage(title)
|
|
119
190
|
if alt and alt != title:
|
|
120
191
|
write(alt)
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
log.debug("Failed to sync session title", exc_info=True)
|
|
124
|
-
return False
|
|
125
|
-
finally:
|
|
126
|
-
_close(db)
|
|
192
|
+
|
|
193
|
+
return _write(home, "sync session title", op)
|
|
127
194
|
|
|
128
195
|
|
|
129
196
|
def append_message(home: Path, session_id: str, *, role: str, content: str, tool_name=None, timestamp=None) -> bool:
|
|
130
197
|
"""TAL-258 (predecessor ``_persist_handoff_summary_to_state_db``): one row through ``SessionDB.append_message``,
|
|
131
198
|
which also bumps the session's ``message_count``. False without a state.db or when the write fails."""
|
|
132
|
-
db
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
try:
|
|
136
|
-
db.append_message(session_id, role, content=content, tool_name=tool_name or None, timestamp=timestamp)
|
|
137
|
-
return True
|
|
138
|
-
except Exception: # noqa: BLE001
|
|
139
|
-
log.warning("Failed to append a %s row to state.db for %s", role, session_id, exc_info=True)
|
|
140
|
-
return False
|
|
141
|
-
finally:
|
|
142
|
-
_close(db)
|
|
199
|
+
return _write(home, f"append a {role} row to state.db for {session_id}",
|
|
200
|
+
lambda db: db.append_message(session_id, role, content=content, tool_name=tool_name or None, timestamp=timestamp),
|
|
201
|
+
level=logging.WARNING)
|
|
143
202
|
|
|
144
203
|
|
|
145
204
|
def _close(db) -> None:
|
|
@@ -181,12 +240,15 @@ def _is_safe_session_id(sid) -> bool:
|
|
|
181
240
|
return isinstance(sid, str) and bool(_SAFE_SESSION_ID.match(sid))
|
|
182
241
|
|
|
183
242
|
|
|
184
|
-
def _clean_artifacts(sessions_dir: Path, removed_id: str) -> bool:
|
|
243
|
+
def _clean_artifacts(sessions_dir: Path, removed_id: str, *, keep_legacy: bool) -> bool:
|
|
185
244
|
if not _is_safe_session_id(removed_id):
|
|
186
245
|
return False
|
|
187
246
|
ok = True
|
|
188
|
-
|
|
189
|
-
|
|
247
|
+
# ``session_<id>.json`` is the legacy snapshot older Agents wrote; it can carry plaintext secrets. It is kept while a
|
|
248
|
+
# live session's id is ``session_<id>``, because then it is that session's own transcript.
|
|
249
|
+
names = [f"{removed_id}.json", f"{removed_id}.jsonl"] + ([] if keep_legacy else [f"session_{removed_id}.json"])
|
|
250
|
+
for name in names:
|
|
251
|
+
artifact = sessions_dir / name
|
|
190
252
|
if artifact.exists():
|
|
191
253
|
try:
|
|
192
254
|
artifact.unlink(missing_ok=True)
|
|
@@ -219,13 +281,13 @@ def _process_manifests(conn, sessions_dir: Path, *, alive_query) -> bool:
|
|
|
219
281
|
mp.unlink(missing_ok=True)
|
|
220
282
|
continue
|
|
221
283
|
try:
|
|
222
|
-
alive = alive_query(conn, pending_ids)
|
|
284
|
+
alive = alive_query(conn, pending_ids + [f"session_{i}" for i in pending_ids])
|
|
223
285
|
except Exception: # noqa: BLE001 - fail closed, retry later
|
|
224
286
|
complete = False
|
|
225
287
|
continue
|
|
226
288
|
still_pending = []
|
|
227
289
|
for removed_id in pending_ids:
|
|
228
|
-
if removed_id in alive or not _clean_artifacts(sessions_dir, removed_id):
|
|
290
|
+
if removed_id in alive or not _clean_artifacts(sessions_dir, removed_id, keep_legacy=f"session_{removed_id}" in alive):
|
|
229
291
|
still_pending.append(removed_id)
|
|
230
292
|
if still_pending:
|
|
231
293
|
tmp = mp.with_suffix(".tmp")
|
|
@@ -288,19 +350,174 @@ def _timestamp_value(value):
|
|
|
288
350
|
return numeric if math.isfinite(numeric) else None
|
|
289
351
|
|
|
290
352
|
|
|
291
|
-
def
|
|
353
|
+
def _is_continuation(parent: dict, child: dict) -> bool:
|
|
354
|
+
"""The server's ``isContinuationSession``: ``child`` resumes ``parent`` after a compression or CLI close."""
|
|
355
|
+
lower = lambda v: str(v or "").strip().lower() # noqa: E731
|
|
356
|
+
if lower(child.get("session_source")) == "fork":
|
|
357
|
+
return False
|
|
358
|
+
if child.get("source") == "tool" or any(child.get(k) is not None for k in ("branched_from", "delegate_from", "reset_from")):
|
|
359
|
+
return False
|
|
360
|
+
if lower(parent.get("source")) and lower(child.get("source")) and lower(parent.get("source")) != lower(child.get("source")):
|
|
361
|
+
return False
|
|
362
|
+
if parent.get("end_reason") not in ("compression", "cli_close"):
|
|
363
|
+
return False
|
|
364
|
+
if parent.get("ended_at") is None:
|
|
365
|
+
return True
|
|
366
|
+
try:
|
|
367
|
+
started, ended = float(child.get("started_at") or 0), float(parent["ended_at"])
|
|
368
|
+
except (TypeError, ValueError):
|
|
369
|
+
return False
|
|
370
|
+
return math.isfinite(started) and math.isfinite(ended) and started + 1.0 >= ended
|
|
371
|
+
|
|
372
|
+
|
|
373
|
+
# The Agent's ``_CHAIN_CAP`` and the server's ``COMPRESSION_CHAIN_CAP``: the most hops a compression-chain walk takes.
|
|
374
|
+
_COMPRESSION_CHAIN_CAP = 1000
|
|
375
|
+
|
|
376
|
+
|
|
377
|
+
def _compression_lineage(records: list[dict], sid: str) -> list[str]:
|
|
378
|
+
"""The server's ``stateDbCompressionLineage``: ``sid`` then each single continuation, up to ``_COMPRESSION_CHAIN_CAP``
|
|
379
|
+
hops, root first."""
|
|
380
|
+
by_id = {r["id"]: r for r in records}
|
|
381
|
+
children: dict[str, list[dict]] = {}
|
|
382
|
+
for r in records:
|
|
383
|
+
children.setdefault(r["parent_id"], []).append(r)
|
|
384
|
+
lineage, current = [sid], by_id.get(sid)
|
|
385
|
+
for _ in range(_COMPRESSION_CHAIN_CAP):
|
|
386
|
+
if current is None:
|
|
387
|
+
break
|
|
388
|
+
nxt = [r for r in children.get(current["id"], []) if _is_continuation(current, r)]
|
|
389
|
+
if len(nxt) != 1 or nxt[0]["id"] in lineage:
|
|
390
|
+
break
|
|
391
|
+
current = nxt[0]
|
|
392
|
+
lineage.append(current["id"])
|
|
393
|
+
return lineage
|
|
394
|
+
|
|
395
|
+
|
|
396
|
+
class _ActiveWriteGuard(Exception):
|
|
397
|
+
"""Another Agent process holds a live turn lease or compression lock on a row the delete would remove."""
|
|
398
|
+
|
|
399
|
+
|
|
400
|
+
def _delete_locked(sid: str, home: Path, include_lineage: bool) -> dict:
|
|
292
401
|
stale_complete = _process_stale_manifests(home)
|
|
293
402
|
db_path = home / "state.db"
|
|
294
403
|
if not db_path.exists():
|
|
295
|
-
return False
|
|
404
|
+
return {"ok": False}
|
|
405
|
+
agent_db = _session_db(home)
|
|
406
|
+
if agent_db is None:
|
|
407
|
+
return {"ok": False}
|
|
408
|
+
try:
|
|
409
|
+
guarded = _write_guard_check(agent_db)
|
|
410
|
+
if guarded is None: # fail closed: without the Agent's guard, a live writer's rows cannot be told apart
|
|
411
|
+
log.warning("Agent has no session write-guard check; state.db rows are kept")
|
|
412
|
+
return {"ok": False}
|
|
413
|
+
try:
|
|
414
|
+
from hermes_state_mutation_retirement import delete_in_transaction
|
|
415
|
+
except ModuleNotFoundError as exc:
|
|
416
|
+
if exc.name != "hermes_state_mutation_retirement":
|
|
417
|
+
raise
|
|
418
|
+
result = _delete_rows(sid, include_lineage, home, db_path, guarded)
|
|
419
|
+
else:
|
|
420
|
+
result = _delete_runtime_rows(sid, home, agent_db, guarded, delete_in_transaction)
|
|
421
|
+
return {**result, "ok": result["ok"] and stale_complete}
|
|
422
|
+
finally:
|
|
423
|
+
_close(agent_db)
|
|
424
|
+
|
|
425
|
+
|
|
426
|
+
def _write_guard_check(agent_db):
|
|
427
|
+
"""The Agent's own user-delete guard, ``(conn, ids) -> bool``: true when a live turn lease or compression lock protects
|
|
428
|
+
any id; expired or dead-holder guards are reclaimed. ``_guarded_ids`` from v0.21.6, the per-row check before it."""
|
|
429
|
+
guarded_ids = getattr(agent_db, "_guarded_ids", None)
|
|
430
|
+
if guarded_ids is not None:
|
|
431
|
+
return lambda conn, ids: bool(guarded_ids(conn, ids))
|
|
432
|
+
rejects = getattr(agent_db, "_write_guards_reject", None)
|
|
433
|
+
if rejects is not None:
|
|
434
|
+
return lambda conn, ids: any(rejects(conn, i, allow_closed_compression_parent=True) for i in ids)
|
|
435
|
+
return None
|
|
436
|
+
|
|
437
|
+
|
|
438
|
+
def _write_cleanup_manifest(home: Path, removed_ids: list[str]) -> None:
|
|
439
|
+
sessions_dir = home / "sessions"
|
|
440
|
+
sessions_dir.mkdir(parents=True, exist_ok=True)
|
|
441
|
+
base = f".cleanup_manifest_{uuid.uuid4().hex}"
|
|
442
|
+
manifest, tmp = sessions_dir / f"{base}.json", sessions_dir / f"{base}.tmp"
|
|
443
|
+
try:
|
|
444
|
+
tmp.write_text(json.dumps(sorted(removed_ids)), encoding="utf-8")
|
|
445
|
+
tmp.rename(manifest)
|
|
446
|
+
except OSError:
|
|
447
|
+
tmp.unlink(missing_ok=True)
|
|
448
|
+
raise
|
|
449
|
+
|
|
450
|
+
|
|
451
|
+
def _delete_runtime_rows(requested: str, home: Path, agent_db, guarded, delete_in_transaction) -> dict:
|
|
452
|
+
"""Extend the legacy delete with the Agent's canonical target/retirement transaction.
|
|
453
|
+
|
|
454
|
+
Compression and receipt-backed reset segments are one conversation, even when the caller names its tip.
|
|
455
|
+
The Agent owns delegate/fork boundaries, live-ledger refusals, receipt compaction and tombstones.
|
|
456
|
+
"""
|
|
457
|
+
from hermes_state_mutation_guards import delete_targets
|
|
458
|
+
from hermes_state_runtime import RuntimeStoreError
|
|
459
|
+
from hermes_state_media import collect_retired_media
|
|
460
|
+
|
|
461
|
+
def write(conn):
|
|
462
|
+
# The Agent's owner lookup falls back to the physical id on an unreadable receipt; refuse before that loses its owner.
|
|
463
|
+
row = conn.execute("SELECT chat_id FROM sessions WHERE id=?", (requested,)).fetchone()
|
|
464
|
+
owner = row[0] if row else None
|
|
465
|
+
saved = conn.execute("SELECT value FROM state_meta WHERE key=?", ("gateway.local_policy.v1:" + owner,)).fetchone() if owner else None
|
|
466
|
+
if saved is not None:
|
|
467
|
+
from hermes_state_local_lineage import validate_local_lineage
|
|
468
|
+
raw = saved[0]
|
|
469
|
+
if len(raw) > 1_000_000:
|
|
470
|
+
raise ValueError("local receipt exceeds read budget")
|
|
471
|
+
receipt = json.loads(raw)
|
|
472
|
+
ids = receipt.get("lineage", [owner])
|
|
473
|
+
if (receipt.get("session_id") != owner or not isinstance(ids, list) or not ids
|
|
474
|
+
or len(ids) > _COMPRESSION_CHAIN_CAP or not all(isinstance(sid, str) and sid for sid in ids)):
|
|
475
|
+
raise ValueError("invalid local receipt")
|
|
476
|
+
validate_local_lineage(conn, receipt)
|
|
477
|
+
members = conn.execute("SELECT id,chat_id,user_id,session_key,source,model_config FROM sessions WHERE id IN (SELECT value FROM json_each(?))",
|
|
478
|
+
(json.dumps(ids),)).fetchall()
|
|
479
|
+
if len(members) != len(ids) or any(tuple(member)[1:4] != (owner, receipt["principal_id"], receipt["route"]) for member in members):
|
|
480
|
+
raise ValueError("local receipt owner mismatch")
|
|
481
|
+
for member in members:
|
|
482
|
+
config = json.loads(member[5] or '{}')
|
|
483
|
+
if member[0] != owner and (member[4] == 'tool' or any(config.get(key) is not None for key in ('_branched_from', '_delegate_from'))):
|
|
484
|
+
raise ValueError("explicit child is not a local continuation")
|
|
485
|
+
# Preserve the older user-delete guard over the complete canonical set, including closed ancestors.
|
|
486
|
+
if guarded(conn, delete_targets(conn, requested)):
|
|
487
|
+
raise _ActiveWriteGuard
|
|
488
|
+
try:
|
|
489
|
+
_, result = delete_in_transaction(agent_db, conn, requested, {})
|
|
490
|
+
except RuntimeStoreError as exc:
|
|
491
|
+
if exc.reason in ("session_busy", "unknown_execution"):
|
|
492
|
+
raise _ActiveWriteGuard from exc
|
|
493
|
+
raise
|
|
494
|
+
# Publish cleanup intent before the database commit; a failed manifest rolls back retirement too.
|
|
495
|
+
_write_cleanup_manifest(home, result["deleted_ids"])
|
|
496
|
+
return result["deleted_ids"]
|
|
497
|
+
|
|
498
|
+
deleted_ids = agent_db._execute_write(write)
|
|
499
|
+
# Agent v0.22.3+ tells the profile's plugins after the commit, like its own deletes; the emitter is fail-open.
|
|
500
|
+
import hermes_state_common
|
|
501
|
+
emit_session_deleted = getattr(hermes_state_common, "emit_session_deleted", None)
|
|
502
|
+
if emit_session_deleted is not None:
|
|
503
|
+
emit_session_deleted(agent_db, deleted_ids, reason="delete", primary=requested, sessions_dir=home / "sessions")
|
|
504
|
+
try:
|
|
505
|
+
collect_retired_media(agent_db)
|
|
506
|
+
except Exception: # noqa: BLE001 - retirement committed; retain its targets for caller cleanup and manifest retry
|
|
507
|
+
log.warning("Failed to collect retired session media", exc_info=True)
|
|
508
|
+
return {"ok": False, "deleted_ids": deleted_ids}
|
|
509
|
+
return {"ok": _process_stale_manifests(home), "deleted_ids": deleted_ids}
|
|
510
|
+
|
|
511
|
+
|
|
512
|
+
def _delete_rows(requested: str, include_lineage: bool, home: Path, db_path: Path, guarded) -> dict:
|
|
296
513
|
with closing(sqlite3.connect(str(db_path))) as conn:
|
|
297
514
|
conn.row_factory = sqlite3.Row
|
|
298
515
|
conn.execute("PRAGMA foreign_keys = ON")
|
|
299
516
|
conn.execute("BEGIN IMMEDIATE")
|
|
300
517
|
columns = {row[1] for row in conn.execute("PRAGMA table_info(sessions)").fetchall()}
|
|
301
518
|
if not {"id", "parent_session_id"}.issubset(columns):
|
|
302
|
-
return False
|
|
303
|
-
selected = ["id", "parent_session_id"] + [c if c in columns else f"NULL AS {c}" for c in ("model_config", "source", "end_reason", "started_at", "ended_at")]
|
|
519
|
+
return {"ok": False}
|
|
520
|
+
selected = ["id", "parent_session_id"] + [c if c in columns else f"NULL AS {c}" for c in ("model_config", "source", "session_source", "end_reason", "started_at", "ended_at", "chat_id")]
|
|
304
521
|
rows = conn.execute(f"SELECT {', '.join(selected)} FROM sessions").fetchall()
|
|
305
522
|
records = []
|
|
306
523
|
for row in rows:
|
|
@@ -316,7 +533,8 @@ def _delete_locked(sid: str, home: Path) -> bool:
|
|
|
316
533
|
model_config, known = parsed, True
|
|
317
534
|
records.append({
|
|
318
535
|
"id": row["id"], "parent_id": row["parent_session_id"], "delegate_from": model_config.get("_delegate_from"),
|
|
319
|
-
"branched_from": model_config.get("_branched_from"), "model_config_known": known, "source": row["source"],
|
|
536
|
+
"branched_from": model_config.get("_branched_from"), "model_config_known": known, "source": row["source"], "session_source": row["session_source"],
|
|
537
|
+
"reset_from": model_config.get("_reset_from"), "chat_id": row["chat_id"],
|
|
320
538
|
"end_reason": row["end_reason"], "started_at": row["started_at"], "ended_at": row["ended_at"],
|
|
321
539
|
})
|
|
322
540
|
by_id = {r["id"]: r for r in records}
|
|
@@ -339,82 +557,151 @@ def _delete_locked(sid: str, home: Path) -> bool:
|
|
|
339
557
|
return by_id.get(record["delegate_from"]) or {}
|
|
340
558
|
return by_id.get(record["parent_id"]) or {}
|
|
341
559
|
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
if delegate_from
|
|
560
|
+
def delegates_of(sid: str) -> list[str]:
|
|
561
|
+
preserved = {r["id"] for r in records if r["id"] != sid and must_preserve(r, lineage_parent(r))}
|
|
562
|
+
while True:
|
|
563
|
+
descendants = {r["id"] for r in records if r["id"] != sid and r["parent_id"] in preserved}
|
|
564
|
+
new_ids = descendants - preserved
|
|
565
|
+
if not new_ids:
|
|
566
|
+
break
|
|
567
|
+
preserved.update(new_ids)
|
|
568
|
+
found, frontier = {sid}, {sid}
|
|
569
|
+
while frontier:
|
|
570
|
+
next_frontier = set()
|
|
571
|
+
for record in records:
|
|
572
|
+
row_id = record["id"]
|
|
573
|
+
if row_id in found or row_id in preserved:
|
|
574
|
+
continue
|
|
575
|
+
parent_id, delegate_from = record["parent_id"], record["delegate_from"]
|
|
576
|
+
if delegate_from not in frontier and parent_id not in frontier:
|
|
577
|
+
continue
|
|
578
|
+
if must_preserve(record, lineage_parent(record)):
|
|
579
|
+
continue
|
|
580
|
+
if delegate_from is not None:
|
|
581
|
+
if delegate_from in frontier:
|
|
582
|
+
next_frontier.add(row_id)
|
|
583
|
+
continue
|
|
584
|
+
if record["source"] != "subagent":
|
|
585
|
+
continue
|
|
586
|
+
if parent_id in frontier and record["model_config_known"]:
|
|
363
587
|
next_frontier.add(row_id)
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
all_removed =
|
|
588
|
+
found.update(next_frontier)
|
|
589
|
+
frontier = next_frontier
|
|
590
|
+
return sorted(found - {sid})
|
|
591
|
+
|
|
592
|
+
# TAL-792: the compression continuations are resolved here, in the delete transaction, so one that a compression
|
|
593
|
+
# finished after the caller looked is guarded and removed too; one transaction removes them all, tip first.
|
|
594
|
+
sids = _compression_lineage(records, requested) if include_lineage else [requested]
|
|
595
|
+
plan = [(sid, delegates_of(sid)) for sid in reversed(sids)]
|
|
596
|
+
all_removed = list(dict.fromkeys(i for sid, delegate_ids in plan for i in (sid, *delegate_ids)))
|
|
597
|
+
if _has_retained_runtime_history(conn, records, all_removed):
|
|
598
|
+
return {"ok": False, "refused": "runtime_history_unsupported"}
|
|
599
|
+
# The Agent's own user-delete guard, checked over every row before any is removed. A live writer's turn lease or
|
|
600
|
+
# compression lock refuses the whole delete; expired or dead-holder guards are reclaimed.
|
|
601
|
+
if guarded(conn, all_removed):
|
|
602
|
+
raise _ActiveWriteGuard
|
|
373
603
|
placeholders = ",".join("?" * len(all_removed))
|
|
374
|
-
for
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
604
|
+
for sid, delegate_ids in plan:
|
|
605
|
+
for child_id in delegate_ids:
|
|
606
|
+
conn.execute("DELETE FROM messages WHERE session_id = ?", (child_id,))
|
|
607
|
+
for child_id in delegate_ids:
|
|
608
|
+
conn.execute("UPDATE sessions SET parent_session_id = NULL WHERE parent_session_id = ?", (child_id,))
|
|
609
|
+
for child_id in delegate_ids:
|
|
610
|
+
conn.execute("DELETE FROM sessions WHERE id = ?", (child_id,))
|
|
611
|
+
conn.execute("UPDATE sessions SET parent_session_id = NULL WHERE parent_session_id = ?", (sid,))
|
|
612
|
+
conn.execute("DELETE FROM messages WHERE session_id = ?", (sid,))
|
|
613
|
+
conn.execute("DELETE FROM sessions WHERE id = ?", (sid,))
|
|
383
614
|
tables = {row[0] for row in conn.execute("SELECT name FROM sqlite_master WHERE type='table'").fetchall()}
|
|
384
615
|
for table in ("compression_locks", "session_model_usage", "telegram_dm_topic_bindings"):
|
|
385
616
|
if table in tables:
|
|
386
617
|
conn.execute(f"DELETE FROM {table} WHERE session_id IN ({placeholders})", all_removed)
|
|
387
|
-
sessions_dir = home / "sessions"
|
|
388
|
-
sessions_dir.mkdir(parents=True, exist_ok=True)
|
|
389
|
-
base = f".cleanup_manifest_{uuid.uuid4().hex}"
|
|
390
|
-
manifest, tmp = sessions_dir / f"{base}.json", sessions_dir / f"{base}.tmp"
|
|
391
618
|
try:
|
|
392
|
-
|
|
393
|
-
tmp.rename(manifest)
|
|
619
|
+
_write_cleanup_manifest(home, all_removed)
|
|
394
620
|
except OSError:
|
|
395
621
|
log.warning("Failed to write cleanup manifest", exc_info=True)
|
|
396
|
-
tmp.unlink(missing_ok=True)
|
|
397
622
|
conn.rollback()
|
|
398
|
-
return False
|
|
623
|
+
return {"ok": False}
|
|
399
624
|
conn.commit()
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
625
|
+
return {"ok": _process_stale_manifests(home), "deleted_ids": all_removed}
|
|
626
|
+
|
|
627
|
+
|
|
628
|
+
def _has_retained_runtime_history(conn, records: list[dict], removed_ids: list[str]) -> bool:
|
|
629
|
+
"""Read-only downgrade fence, never a replacement for the Agent's retirement/receipt validator."""
|
|
630
|
+
targets = set(removed_ids)
|
|
631
|
+
by_id = {r["id"]: r for r in records}
|
|
632
|
+
# Inspect the logical family, including compressed delegates the legacy plan would detach.
|
|
633
|
+
# This only refuses deletion; the installed Agent remains the sole canonical retirement implementation.
|
|
634
|
+
while True:
|
|
635
|
+
connected = set()
|
|
636
|
+
for child in records:
|
|
637
|
+
parent = by_id.get(child["parent_id"])
|
|
638
|
+
if parent and (child['id'] in targets or parent['id'] in targets):
|
|
639
|
+
# Only markers actually copied from this parent are known to be inherited.
|
|
640
|
+
edge = {**child, **{k: None for k in ('branched_from', 'delegate_from', 'reset_from') if child[k] == parent[k]}}
|
|
641
|
+
if _is_continuation(parent, edge):
|
|
642
|
+
connected.update((parent['id'], child['id']))
|
|
643
|
+
if child['branched_from'] is None and child['reset_from'] is None and (child['delegate_from'] in targets
|
|
644
|
+
or (child['delegate_from'] is None and child['source'] == 'subagent' and child['parent_id'] in targets
|
|
645
|
+
and child['model_config_known'])):
|
|
646
|
+
connected.add(child['id'])
|
|
647
|
+
if connected.issubset(targets):
|
|
648
|
+
break
|
|
649
|
+
targets.update(connected)
|
|
650
|
+
tables = {r[0] for r in conn.execute("SELECT name FROM sqlite_master WHERE type='table'")}
|
|
651
|
+
placeholders = ','.join('?' for _ in targets)
|
|
652
|
+
for table, column in (("session_admissions", "target_session_id"), ("worker_executions", "session_id")):
|
|
653
|
+
if table in tables and conn.execute(f"SELECT 1 FROM {table} WHERE {column} IN ({placeholders}) LIMIT 1", tuple(targets)).fetchone():
|
|
654
|
+
return True
|
|
655
|
+
if 'state_meta' not in tables:
|
|
656
|
+
return False
|
|
657
|
+
# The key and stored chat owner still identify a reset receipt when its JSON is unreadable.
|
|
658
|
+
owners = targets | {r["chat_id"] for r in records if r["id"] in targets and isinstance(r["chat_id"], str)}
|
|
659
|
+
for key, raw in conn.execute("SELECT key,value FROM state_meta WHERE key GLOB 'gateway.*'"):
|
|
660
|
+
if key.startswith('gateway.local_policy.v1:') and key.removeprefix('gateway.local_policy.v1:') in owners:
|
|
661
|
+
return True
|
|
662
|
+
if key.startswith('gateway.retired_session.v1.') and key.removeprefix('gateway.retired_session.v1.') in targets:
|
|
663
|
+
return True
|
|
664
|
+
try:
|
|
665
|
+
receipt = json.loads(raw)
|
|
666
|
+
except (TypeError, ValueError):
|
|
667
|
+
continue
|
|
668
|
+
if not isinstance(receipt, dict):
|
|
669
|
+
continue
|
|
670
|
+
lineage = receipt.get('lineage')
|
|
671
|
+
entry = receipt.get('entry')
|
|
672
|
+
ids = [receipt.get('session_id'), receipt.get('target_session_id'),
|
|
673
|
+
entry.get('session_id') if isinstance(entry, dict) else None,
|
|
674
|
+
*(lineage if isinstance(lineage, list) else [])]
|
|
675
|
+
if any(isinstance(sid, str) and sid in targets for sid in ids):
|
|
676
|
+
return True
|
|
677
|
+
return False
|
|
409
678
|
|
|
410
679
|
|
|
411
|
-
def delete_cli_session(home: Path, sid: str) ->
|
|
680
|
+
def delete_cli_session(home: Path, sid: str, include_lineage: bool = False) -> dict:
|
|
412
681
|
try:
|
|
413
682
|
with _thread_lock(home), _process_lock(home):
|
|
414
|
-
return _delete_locked(sid, home)
|
|
683
|
+
return _delete_locked(sid, home, include_lineage)
|
|
684
|
+
except _ActiveWriteGuard: # the uncommitted transaction rolls back on close: nothing is removed
|
|
685
|
+
return {"ok": False, "refused": "active_turn"}
|
|
415
686
|
except Exception: # noqa: BLE001
|
|
416
687
|
log.warning("Failed to delete CLI session %s from state.db", sid, exc_info=True)
|
|
417
|
-
return False
|
|
688
|
+
return {"ok": False}
|
|
689
|
+
|
|
690
|
+
|
|
691
|
+
def prune_advice(home: Path) -> dict | None:
|
|
692
|
+
"""The Agent's low-disk session auto-prune question for ``home`` (v0.22.3 ``hermes_cli.prune_advisor``) in its own
|
|
693
|
+
words; None while the Agent would not ask (disk not low, ``sessions.auto_prune`` set, snoozed) or has no advisor."""
|
|
694
|
+
try:
|
|
695
|
+
from hermes_cli import prune_advisor
|
|
696
|
+
except ImportError:
|
|
697
|
+
return None
|
|
698
|
+
advice, stale = prune_advisor.cached_advice(home)
|
|
699
|
+
if advice is None and not stale:
|
|
700
|
+
return None
|
|
701
|
+
if advice is None or stale:
|
|
702
|
+
# Measures state.db (seconds on a large store), on this request's own worker thread.
|
|
703
|
+
advice = prune_advisor.advise(home)
|
|
704
|
+
return {"lines": prune_advisor.advice_lines(advice, command_prefix="/")} if advice else None
|
|
418
705
|
|
|
419
706
|
|
|
420
707
|
def register(registry) -> None:
|
|
@@ -449,4 +736,10 @@ def register(registry) -> None:
|
|
|
449
736
|
sid = _session_id(params)
|
|
450
737
|
if not _is_safe_session_id(sid):
|
|
451
738
|
raise InvalidParams("unsafe session_id")
|
|
452
|
-
return
|
|
739
|
+
return delete_cli_session(profile_home_param(params).resolve(), sid, params.get("include_compression_lineage") is True)
|
|
740
|
+
|
|
741
|
+
@registry.method("state_db.prune_advice")
|
|
742
|
+
def prune_advice_(ctx: CallContext, params: dict) -> dict:
|
|
743
|
+
home = profile_home_param(params)
|
|
744
|
+
with scoped_home(home):
|
|
745
|
+
return {"advice": prune_advice(home)}
|