@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
|
@@ -0,0 +1,458 @@
|
|
|
1
|
+
"""Bounded, module-preserving pytest subprocesses and verified JUnit aggregation.
|
|
2
|
+
|
|
3
|
+
Also loaded as a pytest plugin to record collection and actual test starts. Only
|
|
4
|
+
the existing pytest dependency is used; orchestration itself is Python stdlib.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from collections import Counter, defaultdict
|
|
8
|
+
import atexit
|
|
9
|
+
import json
|
|
10
|
+
import contextlib
|
|
11
|
+
import os
|
|
12
|
+
from pathlib import Path
|
|
13
|
+
import signal
|
|
14
|
+
import subprocess
|
|
15
|
+
import sys
|
|
16
|
+
import tempfile
|
|
17
|
+
import time
|
|
18
|
+
import traceback
|
|
19
|
+
import xml.etree.ElementTree as ET
|
|
20
|
+
|
|
21
|
+
WORKERS = "TALARIA_SIDECAR_WORKERS"
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
def worker_count(value=None):
|
|
25
|
+
if value is None:
|
|
26
|
+
cpu = getattr(os, "process_cpu_count", os.cpu_count)() or 1
|
|
27
|
+
if hasattr(os, "sched_getaffinity"):
|
|
28
|
+
cpu = min(cpu, len(os.sched_getaffinity(0)))
|
|
29
|
+
return min(4, cpu)
|
|
30
|
+
if not value.isdecimal() or int(value) < 1:
|
|
31
|
+
raise ValueError(f"{WORKERS} must be a positive integer")
|
|
32
|
+
return int(value)
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
def partition(nodeids, count):
|
|
36
|
+
modules = defaultdict(list)
|
|
37
|
+
for nodeid in nodeids:
|
|
38
|
+
modules[nodeid.split("::", 1)[0]].append(nodeid)
|
|
39
|
+
groups = [[] for _ in range(min(count, len(modules)))]
|
|
40
|
+
for _, items in sorted(modules.items(), key=lambda pair: (-len(pair[1]), pair[0])):
|
|
41
|
+
min(groups, key=len).extend(items)
|
|
42
|
+
return groups
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
# Pytest plugin hooks. The collection and execution journal is independent of
|
|
46
|
+
# JUnit, which can contain an extra testcase for a teardown error.
|
|
47
|
+
_collected, _started, _layers = [], [], {}
|
|
48
|
+
_inventory, _active_case, _harness_launch = {}, None, False
|
|
49
|
+
_launches, _violations = [], []
|
|
50
|
+
_active_phase = 'collection'
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
def pytest_addoption(parser):
|
|
54
|
+
parser.addoption('--talaria-layer', choices=('all', 'fast', 'process', 'compatibility'), default='all')
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
def pytest_configure(config):
|
|
58
|
+
global _inventory
|
|
59
|
+
path = Path(config.rootpath) / 'tests/process_inventory.json'
|
|
60
|
+
if path.exists():
|
|
61
|
+
data = json.loads(path.read_text())
|
|
62
|
+
if data.get('schemaVersion') != 1 or not isinstance(data.get('families'), dict):
|
|
63
|
+
raise ValueError('invalid process inventory')
|
|
64
|
+
_inventory = data['families']
|
|
65
|
+
for family, entry in _inventory.items():
|
|
66
|
+
if (not isinstance(entry, dict) or entry.get('layer') not in ('process', 'compatibility')
|
|
67
|
+
or not isinstance(entry.get('reason'), str) or not entry['reason'].strip()
|
|
68
|
+
or not isinstance(entry.get('cases'), list) or not entry['cases']
|
|
69
|
+
or any(not isinstance(case, str) or (case and not (case.startswith('[') and case.endswith(']'))) for case in entry['cases'])
|
|
70
|
+
or len(entry['cases']) != len(set(entry['cases']))):
|
|
71
|
+
raise ValueError(f'invalid process inventory family: {family}')
|
|
72
|
+
sys.addaudithook(_audit_launch)
|
|
73
|
+
def final_policy_check():
|
|
74
|
+
if _violations:
|
|
75
|
+
try:
|
|
76
|
+
pytest_sessionfinish(None)
|
|
77
|
+
finally:
|
|
78
|
+
os._exit(1)
|
|
79
|
+
atexit.register(final_policy_check)
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
def _audit_launch(event, args):
|
|
83
|
+
if event not in ('subprocess.Popen', 'os.fork', 'os.forkpty', 'os.posix_spawn', 'os.exec',
|
|
84
|
+
'os.system', 'os.startfile', 'os.startfile/2', 'socket.connect', 'socket.bind',
|
|
85
|
+
'socket.getaddrinfo', 'socket.gethostbyname', 'socket.gethostbyname_ex',
|
|
86
|
+
'socket.gethostbyaddr', 'socket.getnameinfo', 'socket.sendto', 'socket.sendmsg'):
|
|
87
|
+
return
|
|
88
|
+
family = (_active_case or '').split('[', 1)[0]
|
|
89
|
+
if family not in _inventory:
|
|
90
|
+
boundary = 'network access' if event.startswith('socket.') else 'process launch'
|
|
91
|
+
violation = f'unclassified {boundary} in {_active_case or "collection"}: {event} {args[:2]!r}'
|
|
92
|
+
_violations.append(violation)
|
|
93
|
+
raise RuntimeError(violation)
|
|
94
|
+
_launches.append({'nodeid': _active_case, 'phase': _active_phase, 'harness': _harness_launch, 'event': event, 'args': repr(args[:2])})
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
@contextlib.contextmanager
|
|
98
|
+
def harness_process_scan():
|
|
99
|
+
global _harness_launch
|
|
100
|
+
previous, _harness_launch = _harness_launch, True
|
|
101
|
+
try:
|
|
102
|
+
yield
|
|
103
|
+
finally:
|
|
104
|
+
_harness_launch = previous
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
def pytest_runtest_logreport(report):
|
|
108
|
+
global _active_case, _active_phase
|
|
109
|
+
_active_phase = {'setup': 'call', 'call': 'teardown', 'teardown': 'collection'}[report.when]
|
|
110
|
+
if report.when == 'teardown':
|
|
111
|
+
_active_case = None
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
def case_layer(nodeid):
|
|
115
|
+
return _inventory.get(nodeid.split('[', 1)[0], {}).get('layer', 'fast')
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
def pytest_collection_modifyitems(items, config):
|
|
119
|
+
selected, deselected = [], []
|
|
120
|
+
layer = config.getoption('--talaria-layer')
|
|
121
|
+
for item in items:
|
|
122
|
+
family, bracket, case = item.nodeid.partition('[')
|
|
123
|
+
entry = _inventory.get(family)
|
|
124
|
+
agent = ({'sidecar', 'handshaken'} & set(item.fixturenames) or any(
|
|
125
|
+
mark.kwargs.get('reason') == 'pinned Hermes Agent checkout with venv not found'
|
|
126
|
+
for mark in item.iter_markers('skipif')))
|
|
127
|
+
if agent and case_layer(item.nodeid) != 'compatibility':
|
|
128
|
+
raise ValueError(f'unclassified Agent case: {item.nodeid}')
|
|
129
|
+
if entry and ('[' + case if bracket else '') not in entry['cases']:
|
|
130
|
+
raise ValueError(f'unreviewed process case: {item.nodeid}')
|
|
131
|
+
target = selected if layer == 'all' or layer == case_layer(item.nodeid) else deselected
|
|
132
|
+
target.append(item)
|
|
133
|
+
config.hook.pytest_deselected(items=deselected)
|
|
134
|
+
items[:] = selected
|
|
135
|
+
for item in items:
|
|
136
|
+
item.user_properties.append(("talaria_nodeid", item.nodeid))
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
def pytest_collection_finish(session):
|
|
140
|
+
_collected.extend(item.nodeid for item in session.items)
|
|
141
|
+
for item in session.items:
|
|
142
|
+
_layers[item.nodeid] = case_layer(item.nodeid)
|
|
143
|
+
if os.environ.get('TALARIA_POLICY_CHECK_ALL') == '1':
|
|
144
|
+
reviewed = {family + case
|
|
145
|
+
for family, entry in _inventory.items() for case in entry['cases']}
|
|
146
|
+
missing = reviewed - set(_collected)
|
|
147
|
+
if missing:
|
|
148
|
+
raise ValueError(f'missing reviewed coverage: {sorted(missing)}')
|
|
149
|
+
|
|
150
|
+
|
|
151
|
+
def pytest_runtest_logstart(nodeid):
|
|
152
|
+
global _active_case, _active_phase
|
|
153
|
+
_active_case, _active_phase = nodeid, 'setup'
|
|
154
|
+
_started.append(nodeid)
|
|
155
|
+
|
|
156
|
+
|
|
157
|
+
def pytest_sessionfinish(session):
|
|
158
|
+
if _violations:
|
|
159
|
+
print('\n'.join(_violations), file=sys.stderr, flush=True)
|
|
160
|
+
if session is not None:
|
|
161
|
+
session.exitstatus = 1
|
|
162
|
+
if path := os.environ.get('TALARIA_PYTEST_MANIFEST'):
|
|
163
|
+
Path(path).write_text(json.dumps({'collected': _collected, 'started': _started, 'layers': _layers, 'launches': _launches, 'violations': _violations}))
|
|
164
|
+
|
|
165
|
+
|
|
166
|
+
def layer_arguments(args):
|
|
167
|
+
remaining, layer, release = [], 'all', None
|
|
168
|
+
for arg in args:
|
|
169
|
+
if arg.startswith('--layer='):
|
|
170
|
+
layer = arg.split('=', 1)[1]
|
|
171
|
+
elif arg.startswith('--agent-release='):
|
|
172
|
+
release = arg.split('=', 1)[1]
|
|
173
|
+
else:
|
|
174
|
+
remaining.append(arg)
|
|
175
|
+
if layer not in ('all', 'fast', 'process', 'compatibility'):
|
|
176
|
+
raise ValueError('layer must be all, fast, process or compatibility')
|
|
177
|
+
layers = ['fast', 'process', 'compatibility'] if layer == 'all' else [layer]
|
|
178
|
+
if release and layer == 'all':
|
|
179
|
+
pin = Path(__file__).resolve().parents[1] / 'agent_dependency.json'
|
|
180
|
+
active = json.loads(pin.read_text())['x-talaria']['releaseTag']
|
|
181
|
+
if release != active:
|
|
182
|
+
layers = ['compatibility']
|
|
183
|
+
return remaining, layers
|
|
184
|
+
|
|
185
|
+
|
|
186
|
+
def report_argument(args):
|
|
187
|
+
"""Only an unfiltered full suite is parallelized; all other pytest arguments pass through serially."""
|
|
188
|
+
remaining, report = [], None
|
|
189
|
+
iterator = iter(args)
|
|
190
|
+
for arg in iterator:
|
|
191
|
+
if arg in ("--junitxml", "--junit-xml"):
|
|
192
|
+
report = next(iterator) # pytest would reject a missing value too.
|
|
193
|
+
elif arg.startswith(("--junitxml=", "--junit-xml=")):
|
|
194
|
+
report = arg.split("=", 1)[1]
|
|
195
|
+
else:
|
|
196
|
+
remaining.append(arg)
|
|
197
|
+
return remaining, Path(report).resolve() if report else None
|
|
198
|
+
|
|
199
|
+
|
|
200
|
+
def reap_orphans(processes, *, terminate=False):
|
|
201
|
+
if sys.platform != "linux":
|
|
202
|
+
return
|
|
203
|
+
# Only adopted children belong to this reaper. Popen must retain the exit
|
|
204
|
+
# statuses of registered collection/workers, including already-dead workers.
|
|
205
|
+
managed = {proc.pid for proc in processes if proc.returncode is None}
|
|
206
|
+
children = Path(f"/proc/self/task/{os.getpid()}/children")
|
|
207
|
+
while True:
|
|
208
|
+
try:
|
|
209
|
+
direct = None if terminate else set(map(int, children.read_text().split()))
|
|
210
|
+
except FileNotFoundError: # CONFIG_PROC_CHILDREN is optional.
|
|
211
|
+
direct = None
|
|
212
|
+
# During final cleanup, children are exiting and the proc list can omit
|
|
213
|
+
# entries. Use the same fallback snapshot for that discovery too.
|
|
214
|
+
if direct is None:
|
|
215
|
+
direct = {pid for pid, ppid, _, _ in process_snapshot() if ppid == os.getpid()}
|
|
216
|
+
adopted, reaped = direct - managed, False
|
|
217
|
+
for pid in adopted:
|
|
218
|
+
try:
|
|
219
|
+
# The fallback snapshot includes its already-reaped ps child.
|
|
220
|
+
# Confirm wait ownership before signaling any remaining child.
|
|
221
|
+
waited, _ = os.waitpid(pid, os.WNOHANG)
|
|
222
|
+
if terminate and not waited:
|
|
223
|
+
try:
|
|
224
|
+
os.kill(pid, signal.SIGKILL)
|
|
225
|
+
except ProcessLookupError:
|
|
226
|
+
pass
|
|
227
|
+
waited, _ = os.waitpid(pid, 0)
|
|
228
|
+
reaped |= bool(waited)
|
|
229
|
+
except ChildProcessError:
|
|
230
|
+
pass
|
|
231
|
+
if not terminate or not reaped:
|
|
232
|
+
return
|
|
233
|
+
|
|
234
|
+
|
|
235
|
+
def wait_for(proc, processes):
|
|
236
|
+
while proc.poll() is None:
|
|
237
|
+
reap_orphans(processes)
|
|
238
|
+
time.sleep(.02)
|
|
239
|
+
reap_orphans(processes)
|
|
240
|
+
return proc.returncode
|
|
241
|
+
|
|
242
|
+
|
|
243
|
+
def process_snapshot():
|
|
244
|
+
# Readline can set native COLUMNS behind os.environ's back. Ownership paths
|
|
245
|
+
# must survive that terminal width in both pytest fixtures and final cleanup.
|
|
246
|
+
with harness_process_scan():
|
|
247
|
+
listing = subprocess.check_output(["ps", "-ww", "-eo", "pid=,ppid=,pgid=,args="], text=True)
|
|
248
|
+
return [(int(row[0]), int(row[1]), int(row[2]), row[3])
|
|
249
|
+
for row in (line.split(None, 3) for line in listing.splitlines()) if len(row) == 4]
|
|
250
|
+
|
|
251
|
+
|
|
252
|
+
def cleanup(processes, state):
|
|
253
|
+
"""Reap workers and kill their process groups even when pytest exited first."""
|
|
254
|
+
for proc in processes:
|
|
255
|
+
try:
|
|
256
|
+
os.killpg(proc.pid, signal.SIGKILL)
|
|
257
|
+
except PermissionError:
|
|
258
|
+
# If group signaling is refused, kill the leader directly; the
|
|
259
|
+
# ownership scan below still covers its group and detached children.
|
|
260
|
+
proc.kill()
|
|
261
|
+
except ProcessLookupError:
|
|
262
|
+
pass
|
|
263
|
+
proc.wait()
|
|
264
|
+
# Tests can detach a process from pytest's group. Reuse the fixture's
|
|
265
|
+
# disposable-path ownership rule to clean those up on crashes/cancellation.
|
|
266
|
+
rows = process_snapshot()
|
|
267
|
+
parents = {pid: ppid for pid, ppid, _, _ in rows}
|
|
268
|
+
ancestors, pid = set(), os.getpid()
|
|
269
|
+
while pid > 1 and pid not in ancestors:
|
|
270
|
+
ancestors.add(pid)
|
|
271
|
+
pid = parents.get(pid, 0)
|
|
272
|
+
owned = {os.getpid()}
|
|
273
|
+
while True:
|
|
274
|
+
expanded = owned | {pid for pid, parent in parents.items() if parent in owned}
|
|
275
|
+
if expanded == owned:
|
|
276
|
+
break
|
|
277
|
+
owned = expanded
|
|
278
|
+
groups = {proc.pid for proc in processes}
|
|
279
|
+
for pid, _, pgid, args in rows:
|
|
280
|
+
if (str(state) in args or pid in owned or pgid in groups) and pid not in ancestors:
|
|
281
|
+
try:
|
|
282
|
+
os.kill(pid, signal.SIGKILL)
|
|
283
|
+
except ProcessLookupError:
|
|
284
|
+
pass
|
|
285
|
+
reap_orphans(processes, terminate=True)
|
|
286
|
+
|
|
287
|
+
|
|
288
|
+
def merge_reports(jobs, destination):
|
|
289
|
+
merged = ET.Element("testsuites")
|
|
290
|
+
durations, modules, manifests = [], defaultdict(float), []
|
|
291
|
+
for job, expected in jobs:
|
|
292
|
+
manifest = json.loads((job / "manifest.json").read_text())
|
|
293
|
+
if manifest.get('violations'):
|
|
294
|
+
raise ValueError('; '.join(manifest['violations']))
|
|
295
|
+
manifests.append(manifest)
|
|
296
|
+
if Counter(manifest["collected"]) != Counter(expected) or Counter(manifest["started"]) != Counter(expected):
|
|
297
|
+
raise ValueError(f"incomplete or duplicate test coverage in {job}")
|
|
298
|
+
report = ET.parse(job / "junit.xml").getroot()
|
|
299
|
+
suites = [report] if report.tag == "testsuite" else list(report.findall("testsuite"))
|
|
300
|
+
if not suites:
|
|
301
|
+
raise ValueError(f"missing testsuites in {job}")
|
|
302
|
+
cases = [case for suite in suites for case in suite.findall("testcase")]
|
|
303
|
+
covered = [case.find("properties/property[@name='talaria_nodeid']") for case in cases]
|
|
304
|
+
if any(prop is None for prop in covered) or set(prop.get("value") for prop in covered) != set(expected):
|
|
305
|
+
raise ValueError(f"JUnit coverage differs from collection in {job}")
|
|
306
|
+
by_node = defaultdict(list)
|
|
307
|
+
for case, prop in zip(cases, covered):
|
|
308
|
+
by_node[prop.get("value")].append(case)
|
|
309
|
+
for records in by_node.values():
|
|
310
|
+
# Pytest emits two records only for a call failure plus a teardown
|
|
311
|
+
# error. Repeated successful records would inflate receipt counts.
|
|
312
|
+
if len(records) > 1 and (len(records) != 2 or
|
|
313
|
+
sum(case.find("failure") is not None for case in records) != 1 or
|
|
314
|
+
sum(case.find("error") is not None for case in records) != 1):
|
|
315
|
+
raise ValueError(f"duplicate JUnit testcase in {job}")
|
|
316
|
+
for suite in suites:
|
|
317
|
+
cases = suite.findall("testcase")
|
|
318
|
+
counts = {"tests": len(cases), **{key: sum(len(case.findall(tag)) for case in cases)
|
|
319
|
+
for key, tag in (("failures", "failure"), ("errors", "error"), ("skipped", "skipped"))}}
|
|
320
|
+
if any(int(suite.get(key, "-1")) != count for key, count in counts.items()):
|
|
321
|
+
raise ValueError(f"JUnit counts differ from testcases in {job}")
|
|
322
|
+
merged.append(suite)
|
|
323
|
+
for case in cases:
|
|
324
|
+
duration = float(case.get("time", "0"))
|
|
325
|
+
nodeid = case.find("properties/property[@name='talaria_nodeid']").get("value")
|
|
326
|
+
durations.append((duration, nodeid))
|
|
327
|
+
modules[nodeid.split("::", 1)[0]] += duration
|
|
328
|
+
destination.parent.mkdir(parents=True, exist_ok=True)
|
|
329
|
+
temporary = destination.with_suffix(".tmp")
|
|
330
|
+
coverage = {'collected': [node for manifest in manifests for node in manifest['collected']],
|
|
331
|
+
'started': [node for manifest in manifests for node in manifest['started']],
|
|
332
|
+
'layers': {node: layer for manifest in manifests for node, layer in manifest.get('layers', {}).items()},
|
|
333
|
+
'launches': [launch for manifest in manifests for launch in manifest.get('launches', [])]}
|
|
334
|
+
coverage_path = Path(str(destination) + '.coverage.json')
|
|
335
|
+
coverage_temporary = coverage_path.with_suffix('.tmp')
|
|
336
|
+
coverage_temporary.write_text(json.dumps(coverage))
|
|
337
|
+
coverage_temporary.replace(coverage_path)
|
|
338
|
+
ET.ElementTree(merged).write(temporary, encoding="utf-8", xml_declaration=True)
|
|
339
|
+
temporary.replace(destination)
|
|
340
|
+
for label, entries in (("Slow tests", durations), ("Slow modules", [(seconds, name) for name, seconds in modules.items()])):
|
|
341
|
+
print(label + ":", flush=True)
|
|
342
|
+
for seconds, name in sorted(entries, reverse=True)[:10]:
|
|
343
|
+
print(f" {seconds:.3f}s {name}", flush=True)
|
|
344
|
+
return any(case.find(tag) is not None for case in merged.iter("testcase") for tag in ("failure", "error"))
|
|
345
|
+
|
|
346
|
+
|
|
347
|
+
def run(args):
|
|
348
|
+
remaining, report = report_argument(args)
|
|
349
|
+
if report:
|
|
350
|
+
report.unlink(missing_ok=True) # A stale report must never prove this run passed.
|
|
351
|
+
Path(str(report) + '.coverage.json').unlink(missing_ok=True)
|
|
352
|
+
remaining, layers = layer_arguments(remaining)
|
|
353
|
+
count = worker_count(os.environ.get(WORKERS))
|
|
354
|
+
selected = 1 if remaining else count
|
|
355
|
+
print(f"Sidecar pytest: workers={selected}, host budget={os.environ.get('TALARIA_SIDECAR_TOTAL_WORKERS', count)}", flush=True)
|
|
356
|
+
diagnostics = Path(str(report) + ".workers") if report else Path(__file__).resolve().parents[2] / ".codex-tmp/sidecar-pytest"
|
|
357
|
+
diagnostics.mkdir(parents=True, exist_ok=True)
|
|
358
|
+
# A unique invocation directory also prevents reusing evidence on retries.
|
|
359
|
+
output = Path(tempfile.mkdtemp(prefix="run-", dir=diagnostics))
|
|
360
|
+
processes, streams = [], []
|
|
361
|
+
with tempfile.TemporaryDirectory(prefix="talaria-pytest-state-") as directory:
|
|
362
|
+
state = Path(directory)
|
|
363
|
+
|
|
364
|
+
def launch(name, arguments, layer=None, complete=False):
|
|
365
|
+
job, home = output / name, state / name
|
|
366
|
+
job.mkdir()
|
|
367
|
+
for child in ("home", "tmp"):
|
|
368
|
+
(home / child).mkdir(parents=True)
|
|
369
|
+
env = {**os.environ, "HOME": str(home / "home"), "TMPDIR": str(home / "tmp"),
|
|
370
|
+
"PYTHONPATH": str(Path(__file__).parent) + os.pathsep + os.environ.get("PYTHONPATH", ""),
|
|
371
|
+
"TALARIA_PYTEST_MANIFEST": str(job / "manifest.json")}
|
|
372
|
+
if layer in ('fast', 'process'):
|
|
373
|
+
env.pop('HERMES_WEBUI_AGENT_DIR', None)
|
|
374
|
+
env.pop('HERMES_WEBUI_PYTHON', None)
|
|
375
|
+
env['TALARIA_TEST_LAYER'] = layer or 'collection'
|
|
376
|
+
env['TALARIA_POLICY_CHECK_ALL'] = '1' if complete else '0'
|
|
377
|
+
log = (job / "output.log").open("w")
|
|
378
|
+
streams.append(log)
|
|
379
|
+
proc = subprocess.Popen([sys.executable, "-m", "pytest", "-p", "suite_runner", "-q",
|
|
380
|
+
f"--basetemp={home / 'pytest'}", *arguments], env=env,
|
|
381
|
+
stdout=log, stderr=subprocess.STDOUT, start_new_session=True)
|
|
382
|
+
processes.append(proc)
|
|
383
|
+
return job, proc
|
|
384
|
+
|
|
385
|
+
try:
|
|
386
|
+
job, collection = launch("collection", [*remaining, "--collect-only"], complete=not remaining)
|
|
387
|
+
if wait_for(collection, processes):
|
|
388
|
+
raise ValueError("pytest collection failed")
|
|
389
|
+
collected = json.loads((job / "manifest.json").read_text())
|
|
390
|
+
nodeids = collected['collected']
|
|
391
|
+
if not nodeids or len(nodeids) != len(set(nodeids)):
|
|
392
|
+
raise ValueError("empty or duplicate pytest collection")
|
|
393
|
+
expected = [node for node in nodeids if collected['layers'][node] in layers]
|
|
394
|
+
if not expected:
|
|
395
|
+
raise ValueError('empty selected layer coverage')
|
|
396
|
+
if any(arg in ('--collect-only', '--collectonly', '--co') for arg in remaining):
|
|
397
|
+
print('\n'.join(expected), flush=True)
|
|
398
|
+
return 0
|
|
399
|
+
print(f"Collected {len(nodeids)} cases; selected {len(expected)} in {layers}; diagnostics: {output}", flush=True)
|
|
400
|
+
jobs = []
|
|
401
|
+
failed = False
|
|
402
|
+
for layer in layers:
|
|
403
|
+
groups = partition([node for node in expected if collected['layers'][node] == layer], selected)
|
|
404
|
+
current = []
|
|
405
|
+
for group in groups:
|
|
406
|
+
name = f'worker-{len(jobs) + 1}'
|
|
407
|
+
selection = remaining if remaining else list(dict.fromkeys(node.split('::', 1)[0] for node in group))
|
|
408
|
+
job, proc = launch(name, [f"--junitxml={output / name / 'junit.xml'}",
|
|
409
|
+
f'--talaria-layer={layer}', *selection], layer)
|
|
410
|
+
jobs.append((job, group, proc))
|
|
411
|
+
current.append((job, proc))
|
|
412
|
+
for job, proc in current:
|
|
413
|
+
code = wait_for(proc, processes)
|
|
414
|
+
print(f'{job.name} ({layer}): exit={code}', flush=True)
|
|
415
|
+
failed |= code != 0
|
|
416
|
+
if Counter(node for _, group, _ in jobs for node in group) != Counter(expected):
|
|
417
|
+
raise ValueError('missing or duplicate selected layer coverage')
|
|
418
|
+
report_failed = merge_reports([(job, group) for job, group, _ in jobs], report or output / "junit.xml")
|
|
419
|
+
return int(failed or report_failed)
|
|
420
|
+
finally:
|
|
421
|
+
for sig in (signal.SIGINT, signal.SIGTERM):
|
|
422
|
+
signal.signal(sig, signal.SIG_IGN)
|
|
423
|
+
try:
|
|
424
|
+
cleanup(processes, state)
|
|
425
|
+
finally:
|
|
426
|
+
# Release checkouts may be disposable. Keep logs in the run
|
|
427
|
+
# output too, including cancellation and partial startup.
|
|
428
|
+
for stream in streams:
|
|
429
|
+
stream.close()
|
|
430
|
+
path = Path(stream.name)
|
|
431
|
+
print(f"=== {path.parent.name}/output.log ===\n{path.read_text()}", flush=True)
|
|
432
|
+
print(f"Worker diagnostics retained: {output}", flush=True)
|
|
433
|
+
|
|
434
|
+
|
|
435
|
+
def main():
|
|
436
|
+
if sys.argv[1:2] == ['--requires-agent']:
|
|
437
|
+
print(str('compatibility' in layer_arguments(sys.argv[2:])[1]).lower())
|
|
438
|
+
return 0
|
|
439
|
+
if sys.platform == "linux":
|
|
440
|
+
import ctypes
|
|
441
|
+
if ctypes.CDLL(None, use_errno=True).prctl(36, 1, 0, 0, 0): # PR_SET_CHILD_SUBREAPER
|
|
442
|
+
raise OSError("could not enable pytest child reaping")
|
|
443
|
+
|
|
444
|
+
def interrupt(signum, frame):
|
|
445
|
+
raise InterruptedError(f"sidecar suite interrupted by signal {signum}")
|
|
446
|
+
|
|
447
|
+
for sig in (signal.SIGINT, signal.SIGTERM):
|
|
448
|
+
signal.signal(sig, interrupt)
|
|
449
|
+
try:
|
|
450
|
+
return run(sys.argv[1:])
|
|
451
|
+
except (Exception, KeyboardInterrupt) as error:
|
|
452
|
+
print(f"Sidecar suite failed: {error}", file=sys.stderr, flush=True)
|
|
453
|
+
traceback.print_exc()
|
|
454
|
+
return 1
|
|
455
|
+
|
|
456
|
+
|
|
457
|
+
if __name__ == "__main__":
|
|
458
|
+
sys.exit(main())
|
package/sidecar/scripts/test.sh
CHANGED
|
@@ -1,10 +1,14 @@
|
|
|
1
1
|
#!/usr/bin/env bash
|
|
2
|
-
# Run the
|
|
3
|
-
#
|
|
4
|
-
# Agent
|
|
2
|
+
# Run the shared fast/process/compatibility suite. Fast and synthetic process
|
|
3
|
+
# layers need only pytest; compatibility uses the selected Agent interpreter.
|
|
4
|
+
# Without an Agent checkout, the existing checker provisions the active pin.
|
|
5
5
|
set -euo pipefail
|
|
6
6
|
here="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
|
7
7
|
runner="${HERMES_WEBUI_TEST_PYTHON:-python3}"
|
|
8
|
+
if [[ -z "${HERMES_WEBUI_AGENT_DIR:-}" && "$("$runner" "$here/scripts/suite_runner.py" --requires-agent "$@")" == true ]]; then
|
|
9
|
+
exec "$runner" "$here/../../scripts/check-agent-compatibility.py" --skip-docker --skip-sidecar-tests \
|
|
10
|
+
--command "$here/scripts/test.sh" "$@"
|
|
11
|
+
fi
|
|
8
12
|
venv="$here/.venv"
|
|
9
13
|
if [[ ! -x "$venv/bin/python" ]]; then
|
|
10
14
|
"$runner" -m venv "$venv"
|
|
@@ -16,7 +20,9 @@ trap 'rm -rf -- "$state"' EXIT
|
|
|
16
20
|
cd "$here"
|
|
17
21
|
# GitHub's relocated Linux Python needs LD_LIBRARY_PATH; nothing else from the caller's environment leaks in.
|
|
18
22
|
env -i PATH="$PATH" HOME="$state" TMPDIR="$state" ${LD_LIBRARY_PATH:+LD_LIBRARY_PATH="$LD_LIBRARY_PATH"} \
|
|
19
|
-
HERMES_WEBUI_AGENT_DIR="${HERMES_WEBUI_AGENT_DIR
|
|
23
|
+
HERMES_WEBUI_AGENT_DIR="${HERMES_WEBUI_AGENT_DIR:-}" \
|
|
20
24
|
HERMES_WEBUI_PYTHON="${HERMES_WEBUI_PYTHON:-}" \
|
|
25
|
+
${TALARIA_SIDECAR_WORKERS+TALARIA_SIDECAR_WORKERS="$TALARIA_SIDECAR_WORKERS"} \
|
|
26
|
+
${TALARIA_SIDECAR_TOTAL_WORKERS:+TALARIA_SIDECAR_TOTAL_WORKERS="$TALARIA_SIDECAR_TOTAL_WORKERS"} \
|
|
21
27
|
PYTHONPATH="$here" \
|
|
22
|
-
"$venv/bin/python"
|
|
28
|
+
"$venv/bin/python" "$here/scripts/suite_runner.py" "$@"
|
|
@@ -7,4 +7,9 @@ stdio (docs/architecture/sidecar-rpc.md). Standard library only.
|
|
|
7
7
|
|
|
8
8
|
from __future__ import annotations
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
import os
|
|
11
|
+
|
|
12
|
+
# Also protect direct Python entry points before any method imports the Agent.
|
|
13
|
+
os.environ["HERMES_DISABLE_LAZY_INSTALLS"] = "1"
|
|
14
|
+
|
|
15
|
+
SIDECAR_RPC_VERSION = 53
|
|
@@ -7,6 +7,7 @@ import os
|
|
|
7
7
|
import sys
|
|
8
8
|
from pathlib import Path
|
|
9
9
|
|
|
10
|
+
from .home import _PROCESS_HOME
|
|
10
11
|
from .methods import build_methods
|
|
11
12
|
from .rpc import DEFAULT_MAX_CALLS, RpcServer
|
|
12
13
|
from .runtime import AgentRuntime
|
|
@@ -29,11 +30,10 @@ def _claim_stdout():
|
|
|
29
30
|
def main() -> int:
|
|
30
31
|
rpc_out = _claim_stdout()
|
|
31
32
|
logging.basicConfig(stream=sys.stderr, level=os.environ.get("TALARIA_SIDECAR_LOG_LEVEL", "INFO"), format="[sidecar] %(levelname)s %(name)s: %(message)s")
|
|
32
|
-
hermes_home = Path(os.environ.get("HERMES_HOME") or Path.home() / ".hermes").expanduser()
|
|
33
33
|
# Every turn here has a human behind the Web UI: flagged actions must ask (approval cards), never auto-approve.
|
|
34
34
|
os.environ.setdefault("HERMES_EXEC_ASK", "1")
|
|
35
35
|
agent_dir = os.environ.get("TALARIA_SIDECAR_AGENT_DIR") or os.environ.get("HERMES_WEBUI_AGENT_DIR")
|
|
36
|
-
runtime = AgentRuntime(
|
|
36
|
+
runtime = AgentRuntime(_PROCESS_HOME, Path(agent_dir) if agent_dir else None)
|
|
37
37
|
if runtime.agent_dir is not None and str(runtime.agent_dir) not in sys.path:
|
|
38
38
|
# Append, never prepend: the Agent venv's site-packages must win over
|
|
39
39
|
# any same-named module in the checkout (api/config.py has the history).
|
|
@@ -44,8 +44,17 @@ def main() -> int:
|
|
|
44
44
|
finally:
|
|
45
45
|
# The server closes stdin to stop the sidecar: end every cached agent's memory session on the way out.
|
|
46
46
|
from .methods.chat import drain_agents
|
|
47
|
-
|
|
48
|
-
|
|
47
|
+
from .agent_mutation import close_all
|
|
48
|
+
from .methods.dashboard_plugins import close_dashboard_sources
|
|
49
|
+
|
|
50
|
+
try:
|
|
51
|
+
close_all()
|
|
52
|
+
drain_agents()
|
|
53
|
+
finally:
|
|
54
|
+
try:
|
|
55
|
+
runtime.retire()
|
|
56
|
+
finally:
|
|
57
|
+
close_dashboard_sources()
|
|
49
58
|
|
|
50
59
|
|
|
51
60
|
if __name__ == "__main__":
|