@maudecode/talaria-web 1.17.2 → 1.19.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.d.ts +1 -1
- package/dist/api/auth-raw.js +20 -20
- package/dist/api/auth-raw.js.map +1 -1
- package/dist/api/automation-raw.d.ts +7 -1
- package/dist/api/automation-raw.js +74 -27
- package/dist/api/automation-raw.js.map +1 -1
- package/dist/api/automation-router.d.ts +128 -23
- package/dist/api/automation-router.js +29 -13
- package/dist/api/automation-router.js.map +1 -1
- package/dist/api/chat-router.d.ts +1845 -40
- package/dist/api/chat-router.js +196 -114
- package/dist/api/chat-router.js.map +1 -1
- package/dist/api/git-router.d.ts +37 -3
- package/dist/api/git-router.js +47 -48
- package/dist/api/git-router.js.map +1 -1
- package/dist/api/raw-routes.d.ts +9 -1
- package/dist/api/raw-routes.js +286 -73
- package/dist/api/raw-routes.js.map +1 -1
- package/dist/api/router.d.ts +16 -6
- package/dist/api/router.js +28 -26
- 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 +3312 -131
- package/dist/api/sessions-router.js +287 -157
- package/dist/api/sessions-router.js.map +1 -1
- package/dist/api/settings-router.d.ts +457 -8
- package/dist/api/settings-router.js +54 -33
- package/dist/api/settings-router.js.map +1 -1
- package/dist/api/sse-routes.d.ts +7 -2
- package/dist/api/sse-routes.js +109 -62
- package/dist/api/sse-routes.js.map +1 -1
- package/dist/api/tools-raw.d.ts +5 -0
- package/dist/api/tools-raw.js +63 -55
- package/dist/api/tools-raw.js.map +1 -1
- package/dist/api/tools-router.d.ts +998 -85
- package/dist/api/tools-router.js +447 -61
- 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 +98 -59
- package/dist/app.js.map +1 -1
- package/dist/auth/gate.js +15 -11
- package/dist/auth/gate.js.map +1 -1
- package/dist/auth/oidc.d.ts +5 -2
- package/dist/auth/oidc.js +8 -7
- package/dist/auth/oidc.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 +2 -1
- package/dist/cli/ctl.js.map +1 -1
- package/dist/cli/dotenv.d.ts +5 -0
- package/dist/cli/dotenv.js +15 -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 +85 -0
- package/dist/cli/main.js.map +1 -0
- package/dist/cli/supervise.d.ts +2 -0
- package/dist/cli/supervise.js +67 -4
- package/dist/cli/supervise.js.map +1 -1
- package/dist/config/agent-config.d.ts +34 -11
- package/dist/config/agent-config.js +116 -60
- package/dist/config/agent-config.js.map +1 -1
- package/dist/config.d.ts +4 -0
- package/dist/config.js +19 -6
- package/dist/config.js.map +1 -1
- package/dist/fs/atomic.d.ts +1 -0
- package/dist/fs/atomic.js +4 -1
- package/dist/fs/atomic.js.map +1 -1
- package/dist/fs/stat.d.ts +1 -0
- package/dist/fs/stat.js +11 -0
- package/dist/fs/stat.js.map +1 -0
- package/dist/http/context.d.ts +31 -12
- package/dist/http/context.js +60 -24
- package/dist/http/context.js.map +1 -1
- package/dist/http/csp.d.ts +2 -1
- package/dist/http/csp.js +3 -2
- package/dist/http/csp.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 +20 -4
- package/dist/profiles/profiles.js +115 -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 +84 -14
- package/dist/providers/catalog.js +474 -151
- 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/raster-image.d.ts +7 -0
- package/dist/raster-image.js +267 -0
- package/dist/raster-image.js.map +1 -0
- package/dist/redact.js +342 -46
- package/dist/redact.js.map +1 -1
- package/dist/release.d.ts +7 -0
- package/dist/release.js +14 -0
- package/dist/release.js.map +1 -1
- package/dist/runtime.d.ts +5 -1
- package/dist/runtime.js +305 -96
- package/dist/runtime.js.map +1 -1
- package/dist/server.js +15 -0
- package/dist/server.js.map +1 -1
- package/dist/sessions/anchor.d.ts +9 -3
- package/dist/sessions/anchor.js +28 -36
- 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 +26 -27
- package/dist/sessions/background-tasks.js +89 -97
- 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 +27 -6
- package/dist/sessions/cli-sessions.js +152 -42
- package/dist/sessions/cli-sessions.js.map +1 -1
- package/dist/sessions/completions.d.ts +77 -9
- package/dist/sessions/completions.js +482 -45
- 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 +5 -0
- package/dist/sessions/export.js +30 -0
- package/dist/sessions/export.js.map +1 -1
- package/dist/sessions/gateway-sessions.d.ts +46 -0
- package/dist/sessions/gateway-sessions.js +378 -0
- package/dist/sessions/gateway-sessions.js.map +1 -0
- package/dist/sessions/gateway-watcher.d.ts +7 -3
- package/dist/sessions/gateway-watcher.js +31 -19
- 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/handoff.d.ts +32 -0
- package/dist/sessions/handoff.js +114 -0
- package/dist/sessions/handoff.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 +31 -16
- package/dist/sessions/list.js +139 -129
- package/dist/sessions/list.js.map +1 -1
- package/dist/sessions/merge.d.ts +69 -13
- package/dist/sessions/merge.js +265 -64
- 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 +82 -0
- package/dist/sessions/prefix-index.js +232 -0
- package/dist/sessions/prefix-index.js.map +1 -0
- package/dist/sessions/recovery.d.ts +19 -0
- package/dist/sessions/recovery.js +322 -0
- package/dist/sessions/recovery.js.map +1 -0
- package/dist/sessions/relay.d.ts +38 -19
- package/dist/sessions/relay.js +302 -79
- package/dist/sessions/relay.js.map +1 -1
- package/dist/sessions/service.d.ts +260 -55
- package/dist/sessions/service.js +1448 -462
- package/dist/sessions/service.js.map +1 -1
- package/dist/sessions/session.d.ts +24 -2
- package/dist/sessions/session.js +69 -7
- 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.d.ts +1 -0
- package/dist/sessions/state-db-worker.js +35 -0
- package/dist/sessions/state-db-worker.js.map +1 -0
- package/dist/sessions/state-db.d.ts +113 -7
- package/dist/sessions/state-db.js +861 -44
- package/dist/sessions/state-db.js.map +1 -1
- package/dist/sessions/storage/backend.d.ts +162 -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 +23 -0
- package/dist/sessions/storage/json-documents.js +233 -0
- package/dist/sessions/storage/json-documents.js.map +1 -0
- package/dist/sessions/storage/json-files.d.ts +12 -0
- package/dist/sessions/storage/json-files.js +124 -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 +114 -0
- package/dist/sessions/storage/json-journal.js +686 -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 +68 -0
- package/dist/sessions/storage/json.js +258 -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 +65 -68
- package/dist/sessions/store.js +305 -602
- package/dist/sessions/store.js.map +1 -1
- package/dist/sessions/streams.d.ts +4 -0
- package/dist/sessions/streams.js +9 -1
- package/dist/sessions/streams.js.map +1 -1
- package/dist/sessions/titles.d.ts +2 -0
- package/dist/sessions/titles.js +5 -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 +5 -4
- package/dist/sessions/tool-display.js +30 -50
- package/dist/sessions/tool-display.js.map +1 -1
- package/dist/sessions/turn-context.d.ts +11 -2
- package/dist/sessions/turn-context.js +18 -11
- package/dist/sessions/turn-context.js.map +1 -1
- package/dist/sessions/turn.d.ts +122 -17
- package/dist/sessions/turn.js +939 -358
- package/dist/sessions/turn.js.map +1 -1
- package/dist/sessions/wakeup-pause.d.ts +54 -0
- package/dist/sessions/wakeup-pause.js +163 -0
- package/dist/sessions/wakeup-pause.js.map +1 -0
- 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 +178 -184
- package/dist/settings.js.map +1 -1
- package/dist/sidecar/client.d.ts +17 -3
- package/dist/sidecar/client.js +78 -8
- 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 +2 -2
- package/dist/sidecar/fake.js +19 -2
- package/dist/sidecar/fake.js.map +1 -1
- package/dist/startup.d.ts +13 -5
- package/dist/startup.js +48 -0
- package/dist/startup.js.map +1 -1
- 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/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/test/ts-worker-hooks.d.ts +1 -0
- package/dist/test/ts-worker-hooks.js +24 -0
- package/dist/test/ts-worker-hooks.js.map +1 -0
- package/dist/text/diff.d.ts +9 -14
- package/dist/text/diff.js +74 -108
- package/dist/text/diff.js.map +1 -1
- 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 +38 -1
- package/dist/tools/crons.js +122 -18
- package/dist/tools/crons.js.map +1 -1
- package/dist/tools/dashboard-plugins.d.ts +53 -0
- package/dist/tools/dashboard-plugins.js +188 -0
- package/dist/tools/dashboard-plugins.js.map +1 -0
- package/dist/tools/extensions.d.ts +18 -5
- package/dist/tools/extensions.js +344 -266
- package/dist/tools/extensions.js.map +1 -1
- package/dist/tools/gateway-restart.d.ts +62 -0
- package/dist/tools/gateway-restart.js +142 -0
- package/dist/tools/gateway-restart.js.map +1 -0
- package/dist/tools/health.d.ts +44 -0
- package/dist/tools/health.js +201 -46
- 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/kanban.d.ts +4 -2
- package/dist/tools/kanban.js +28 -19
- package/dist/tools/kanban.js.map +1 -1
- package/dist/tools/mcp.d.ts +13 -0
- package/dist/tools/mcp.js +88 -0
- 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-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/project-os.d.ts +11 -0
- package/dist/tools/project-os.js +267 -0
- package/dist/tools/project-os.js.map +1 -0
- package/dist/tools/skills.d.ts +14 -5
- package/dist/tools/skills.js +49 -16
- package/dist/tools/skills.js.map +1 -1
- package/dist/tools/update-notifications.d.ts +34 -15
- package/dist/tools/update-notifications.js +141 -57
- 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 +110 -32
- package/dist/tools/updates.js +1112 -294
- package/dist/tools/updates.js.map +1 -1
- package/dist/tools/wiki.d.ts +68 -0
- package/dist/tools/wiki.js +413 -0
- package/dist/tools/wiki.js.map +1 -0
- package/dist/util.d.ts +2 -0
- package/dist/util.js +5 -0
- package/dist/util.js.map +1 -1
- package/dist/workspace/escape.d.ts +61 -0
- package/dist/workspace/escape.js +149 -0
- package/dist/workspace/escape.js.map +1 -0
- package/dist/workspace/extract.d.ts +22 -0
- package/dist/workspace/extract.js +308 -0
- package/dist/workspace/extract.js.map +1 -0
- package/dist/workspace/fs.d.ts +12 -0
- package/dist/workspace/fs.js +92 -23
- package/dist/workspace/fs.js.map +1 -1
- package/dist/workspace/git.d.ts +34 -1
- package/dist/workspace/git.js +328 -35
- package/dist/workspace/git.js.map +1 -1
- package/dist/workspace/media.d.ts +16 -13
- package/dist/workspace/media.js +43 -61
- package/dist/workspace/media.js.map +1 -1
- package/dist/workspace/rollback.d.ts +36 -22
- package/dist/workspace/rollback.js +178 -272
- package/dist/workspace/rollback.js.map +1 -1
- package/dist/workspace/unzip.js +4 -1
- package/dist/workspace/unzip.js.map +1 -1
- package/dist/workspace/upload.d.ts +7 -4
- package/dist/workspace/upload.js +5 -2
- package/dist/workspace/upload.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.d.ts +2 -1
- package/dist/workspace/worktrees.js +179 -42
- package/dist/workspace/worktrees.js.map +1 -1
- package/package.json +7 -3
- package/sidecar/agent_dependency.json +4 -4
- package/sidecar/agent_support.json +26 -0
- package/sidecar/scripts/record-fixtures.py +12 -3
- package/sidecar/scripts/replay_sidecar.py +32 -0
- package/sidecar/scripts/suite_runner.py +302 -0
- package/sidecar/scripts/test.sh +12 -4
- package/sidecar/talaria_sidecar/__init__.py +6 -1
- package/sidecar/talaria_sidecar/__main__.py +4 -2
- package/sidecar/talaria_sidecar/agent_mutation.py +975 -0
- package/sidecar/talaria_sidecar/agent_services.py +1053 -0
- package/sidecar/talaria_sidecar/dependency_sync.py +85 -0
- package/sidecar/talaria_sidecar/home.py +56 -3
- package/sidecar/talaria_sidecar/methods/__init__.py +2 -2
- package/sidecar/talaria_sidecar/methods/aux.py +166 -24
- package/sidecar/talaria_sidecar/methods/chat.py +852 -135
- package/sidecar/talaria_sidecar/methods/checkpoints.py +89 -0
- package/sidecar/talaria_sidecar/methods/commands.py +294 -4
- package/sidecar/talaria_sidecar/methods/config.py +123 -4
- package/sidecar/talaria_sidecar/methods/connectors.py +343 -0
- package/sidecar/talaria_sidecar/methods/cron.py +395 -36
- package/sidecar/talaria_sidecar/methods/cron_execution.py +284 -0
- package/sidecar/talaria_sidecar/methods/gateway.py +212 -55
- package/sidecar/talaria_sidecar/methods/gateway_sessions.py +234 -0
- package/sidecar/talaria_sidecar/methods/goals.py +81 -41
- package/sidecar/talaria_sidecar/methods/kanban.py +108 -34
- package/sidecar/talaria_sidecar/methods/mcp.py +1 -1
- package/sidecar/talaria_sidecar/methods/memory.py +84 -0
- package/sidecar/talaria_sidecar/methods/oauth.py +5 -2
- package/sidecar/talaria_sidecar/methods/process.py +218 -15
- package/sidecar/talaria_sidecar/methods/profiles.py +121 -13
- package/sidecar/talaria_sidecar/methods/providers.py +217 -28
- package/sidecar/talaria_sidecar/methods/runtime.py +69 -1
- package/sidecar/talaria_sidecar/methods/skills.py +67 -4
- package/sidecar/talaria_sidecar/methods/state_db.py +316 -75
- 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 +49 -0
- package/sidecar/talaria_sidecar/methods/usage.py +113 -14
- package/sidecar/talaria_sidecar/methods/worktree.py +26 -19
- package/sidecar/talaria_sidecar/methods/write_approval.py +181 -0
- package/sidecar/talaria_sidecar/rpc.py +45 -4
- package/sidecar/talaria_sidecar/runtime.py +98 -13
- package/sidecar/talaria_sidecar/speed.py +35 -0
- package/static/dist/FILES.txt +126 -126
- package/static/dist/assets/AppShell-cey33v9s.js +8 -0
- package/static/dist/assets/ChatPage-i8wnugr7.js +18 -0
- package/static/dist/assets/ConnectTargets-hg19553x.js +1 -0
- package/static/dist/assets/ExtensionRoute-cly4apm5.js +1 -0
- package/static/dist/assets/Field-j8uqoigz.js +9 -0
- package/static/dist/assets/HubRoute-e4bgz41j.js +2 -0
- package/static/dist/assets/Markdown-lahuichm.js +598 -0
- package/static/dist/assets/RightPanel-lbo4i0fn.js +1 -0
- package/static/dist/assets/Select-gqatm2e0.js +1 -0
- package/static/dist/assets/SessionListPanel-mfqayfjh.js +1 -0
- package/static/dist/assets/SettingsLayout-b8980u7k.js +1 -0
- package/static/dist/assets/States-e7dkgtxf.js +1 -0
- package/static/dist/assets/Toaster-bfqqy786.js +1 -0
- package/static/dist/assets/_app-n1n6pfx1.js +1 -0
- package/static/dist/assets/{_app.ext._extensionId-opyh9y0v.js → _app.ext._extensionId-buxjxav3.js} +1 -1
- package/static/dist/assets/_app.index-jt8zwiu2.js +1 -0
- package/static/dist/assets/_app.insights-cv76ml71.js +1 -0
- package/static/dist/assets/_app.kanban-h6ts53j7.js +1 -0
- package/static/dist/assets/_app.logs-dm873z90.js +1 -0
- package/static/dist/assets/_app.memory-glk5y6m8.js +1 -0
- package/static/dist/assets/_app.profiles-ka6zpstq.js +1 -0
- package/static/dist/assets/{_app.session._sessionId-bfd4h3id.js → _app.session._sessionId-g2vzghvc.js} +1 -1
- package/static/dist/assets/_app.settings-hgjdhzcd.js +1 -0
- package/static/dist/assets/_app.settings._section-jf2kmhae.js +3 -0
- package/static/dist/assets/_app.skills-cii852yq.js +1 -0
- package/static/dist/assets/_app.tasks-fp9q7atm.js +1 -0
- package/static/dist/assets/_app.todos-dw94qzue.js +1 -0
- package/static/dist/assets/_app.workspaces-inyygzze.js +1 -0
- package/static/dist/assets/{abnfDiagram-VCTEODGH-b2x1lqot.js → abnfDiagram-VCTEODGH-gjayq3ra.js} +1 -1
- package/static/dist/assets/architecture-7GRP2DOG-lp56972r.js +1 -0
- package/static/dist/assets/{architectureDiagram-5GKGNRK7-h38o5l7b.js → architectureDiagram-5GKGNRK7-nwb3xovn.js} +1 -1
- package/static/dist/assets/archive-b1j004vn.js +1 -0
- package/static/dist/assets/back-g74gkozu.js +1 -0
- package/static/dist/assets/{blockDiagram-I7D4REHJ-bqquxv2u.js → blockDiagram-I7D4REHJ-joedghi3.js} +1 -1
- package/static/dist/assets/{c4Diagram-7LVT6UL2-f3fb8w6z.js → c4Diagram-7LVT6UL2-hyrjrohe.js} +1 -1
- package/static/dist/assets/channel-es95o4y8.js +1 -0
- package/static/dist/assets/{chunk-4HAMMTFA-bzfyyzp3.js → chunk-4HAMMTFA-koouqbut.js} +1 -1
- package/static/dist/assets/{chunk-75Z2AOVW-ly99rfx5.js → chunk-75Z2AOVW-bl4bhdnt.js} +1 -1
- package/static/dist/assets/{chunk-DU6HZSFF-bg6ecfqf.js → chunk-DU6HZSFF-gpedttsp.js} +3 -3
- package/static/dist/assets/{chunk-F27PBJKO-e8k7mmqw.js → chunk-F27PBJKO-d8xxi0zi.js} +1 -1
- package/static/dist/assets/{chunk-GMAD6QVW-cmalnoaj.js → chunk-GMAD6QVW-jro0hl73.js} +1 -1
- package/static/dist/assets/{chunk-GVQU2GXP-gmif5o01.js → chunk-GVQU2GXP-djn6gbyu.js} +1 -1
- package/static/dist/assets/{chunk-IMKFNOWR-f1nwwh6u.js → chunk-IMKFNOWR-vw4p5p7o.js} +1 -1
- package/static/dist/assets/{chunk-L3NEJ4N5-oktfh5v7.js → chunk-L3NEJ4N5-n1hj77q8.js} +1 -1
- package/static/dist/assets/{chunk-OSK3NFVY-b1sdx96z.js → chunk-OSK3NFVY-oy0gwn2n.js} +1 -1
- package/static/dist/assets/{chunk-P2QGCYS3-fhu4nzxt.js → chunk-P2QGCYS3-onf1hz6c.js} +1 -1
- package/static/dist/assets/{chunk-POPQ4Y6H-em31rnef.js → chunk-POPQ4Y6H-m8sqn7cs.js} +1 -1
- package/static/dist/assets/{chunk-PWAF6VOD-bxhhyftw.js → chunk-PWAF6VOD-ek4smc8x.js} +1 -1
- package/static/dist/assets/{chunk-SHT3W25Y-fmrvwcav.js → chunk-SHT3W25Y-g9gfvefo.js} +3 -3
- package/static/dist/assets/{chunk-SVP7TREG-lymukl2j.js → chunk-SVP7TREG-f9nfv2cu.js} +1 -1
- package/static/dist/assets/{chunk-TICWLB2K-lmza6k23.js → chunk-TICWLB2K-bnk3m1mq.js} +1 -1
- package/static/dist/assets/classDiagram-ZZMXUADV-kmihoqxh.js +1 -0
- package/static/dist/assets/classDiagram-v2-VYDZK3BY-kmihoqxh.js +1 -0
- package/static/dist/assets/copied-bli9tbcx.js +1 -0
- package/static/dist/assets/{copy-fw5b1pc6.js → copy-jamtd1pf.js} +1 -1
- package/static/dist/assets/{cynefin-OW5HDTMX-czlhbyhs.js → cynefin-OW5HDTMX-f8xfdd3f.js} +1 -1
- package/static/dist/assets/{cynefinDiagram-5FMLGOSQ-gq7mvswb.js → cynefinDiagram-5FMLGOSQ-n9lb99h9.js} +1 -1
- package/static/dist/assets/{dagre-GXQ25YYZ-cqdbf7dr.js → dagre-GXQ25YYZ-dgailddi.js} +4 -4
- package/static/dist/assets/{diagram-S7CK7UJ4-o6arxa58.js → diagram-S7CK7UJ4-m6aeoe7c.js} +1 -1
- package/static/dist/assets/{diagram-UQ7AKVKN-nhnd68tz.js → diagram-UQ7AKVKN-jall3j0x.js} +1 -1
- package/static/dist/assets/{diagram-VSXAHHWV-dk2sclzn.js → diagram-VSXAHHWV-hbawi7hn.js} +1 -1
- package/static/dist/assets/{diagram-VX7I27RA-n3k5nyx3.js → diagram-VX7I27RA-hendl2tt.js} +1 -1
- package/static/dist/assets/{diagram-Z3DM3KII-m6q9cwdh.js → diagram-Z3DM3KII-igwc35p3.js} +1 -1
- package/static/dist/assets/{ebnfDiagram-PWID7BFC-lsa5641p.js → ebnfDiagram-PWID7BFC-c64knz08.js} +1 -1
- package/static/dist/assets/{erDiagram-RLTQ6QDP-fo2ckbe6.js → erDiagram-RLTQ6QDP-brdu9lcm.js} +1 -1
- package/static/dist/assets/eventmodeling-NTZA5JFV-njk1j8wl.js +1 -0
- package/static/dist/assets/flowDiagram-HODETNUW-nma6f0ga.js +1 -0
- package/static/dist/assets/folder-plus-lvt9kudb.js +1 -0
- package/static/dist/assets/{ganttDiagram-EL5Y4UJY-nzqz6x9g.js → ganttDiagram-EL5Y4UJY-ma6jxj5i.js} +1 -1
- package/static/dist/assets/{gitGraph-4MIJSDKK-gukvcxe6.js → gitGraph-4MIJSDKK-naa9w6xa.js} +1 -1
- package/static/dist/assets/{gitGraphDiagram-WWUBYQGX-lqhdp8f0.js → gitGraphDiagram-WWUBYQGX-hzltvsod.js} +1 -1
- package/static/dist/assets/{highlighted-body-KPVGNVTW-igw6cp39.js → highlighted-body-KPVGNVTW-ghoavj8d.js} +1 -1
- package/static/dist/assets/host-hzm8n85n.js +1 -0
- package/static/dist/assets/index-drdcaqeq.css +2 -0
- package/static/dist/assets/index-jzm844he.js +11 -0
- package/static/dist/assets/{info-A6RAGUB7-gvu7a93l.js → info-A6RAGUB7-mn2ut5ko.js} +1 -1
- package/static/dist/assets/{infoDiagram-27XIBGKW-m8t8g6w1.js → infoDiagram-27XIBGKW-h6kuqvsb.js} +1 -1
- package/static/dist/assets/{ishikawaDiagram-5VMMS53U-l07vkbgj.js → ishikawaDiagram-5VMMS53U-e7bnwq7h.js} +1 -1
- package/static/dist/assets/{journeyDiagram-3NMN7TZE-hybkgj8l.js → journeyDiagram-3NMN7TZE-etd1bi6p.js} +1 -1
- package/static/dist/assets/{kanban-definition-UXKFOSKX-by13uvtn.js → kanban-definition-UXKFOSKX-emb1g9dz.js} +4 -4
- package/static/dist/assets/lazyRouteComponent-o816ytzl.js +1 -0
- package/static/dist/assets/{line-osxq6fq7.js → line-h0ojzsvs.js} +1 -1
- package/static/dist/assets/link-k01ryaf9.js +1 -0
- package/static/dist/assets/login-bsae49ew.js +1 -0
- package/static/dist/assets/mermaid-HWGCJPDP-ihl34s74.js +1 -0
- package/static/dist/assets/{mermaid-parser.core-i91oxmou.js → mermaid-parser.core-bnre27u8.js} +3 -3
- package/static/dist/assets/{mindmap-definition-YA3MSWOX-m82mx8ww.js → mindmap-definition-YA3MSWOX-o1vathns.js} +1 -1
- package/static/dist/assets/onboarding-c65tysya.js +1 -0
- package/static/dist/assets/onboarding_model_label-gpn28uix.js +1 -0
- package/static/dist/assets/{packet-AYTQ26CC-nbtgge2o.js → packet-AYTQ26CC-hatq7m2e.js} +1 -1
- package/static/dist/assets/pcmTap.worklet-74EKjWAZ.js +1 -0
- package/static/dist/assets/{pegDiagram-XKGWAZYB-f1zxzga1.js → pegDiagram-XKGWAZYB-gwisz8jv.js} +1 -1
- package/static/dist/assets/{pie-WAS4IAKB-of8vuhxs.js → pie-WAS4IAKB-fpftf0mk.js} +1 -1
- package/static/dist/assets/{pieDiagram-E7YTZNPT-o7y8ftio.js → pieDiagram-E7YTZNPT-khm1o9a6.js} +1 -1
- package/static/dist/assets/{quadrantDiagram-AXDQQJYC-iqiwia1t.js → quadrantDiagram-AXDQQJYC-owqc4uqn.js} +1 -1
- package/static/dist/assets/{radar-RG4KPBEZ-delnsy2v.js → radar-RG4KPBEZ-cntfwjpq.js} +1 -1
- package/static/dist/assets/{railroad-74A4TZTK-nspnyq9u.js → railroad-74A4TZTK-a7t5eibp.js} +1 -1
- package/static/dist/assets/railroad-abnf-HS5TGJTU-ol8cdktf.js +1 -0
- package/static/dist/assets/railroad-ebnf-LZEXJU2U-i8vzd429.js +1 -0
- package/static/dist/assets/railroad-peg-WCYAUIDC-nw3ulewz.js +1 -0
- package/static/dist/assets/{railroadDiagram-O6MQD6OU-z41tqx5z.js → railroadDiagram-O6MQD6OU-etuh0qa0.js} +1 -1
- package/static/dist/assets/{refresh-cw-nt1dtsx4.js → refresh-cw-mqbkv2a3.js} +1 -1
- package/static/dist/assets/refresh-l29ljp76.js +1 -0
- package/static/dist/assets/{requirementDiagram-BXWQKSXE-bdvif194.js → requirementDiagram-BXWQKSXE-oq2ulk22.js} +1 -1
- package/static/dist/assets/{sankeyDiagram-P5KCCOFB-h73e0rol.js → sankeyDiagram-P5KCCOFB-iqc02emv.js} +1 -1
- package/static/dist/assets/saved-ndd4t2xb.js +1 -0
- package/static/dist/assets/{sequenceDiagram-WJ2MYXX4-iv95mb1z.js → sequenceDiagram-WJ2MYXX4-i0v116q0.js} +2 -2
- package/static/dist/assets/settings_section_extensions_title-jhfo6o8z.js +1 -0
- package/static/dist/assets/share._token-c1ri0hy1.js +2 -0
- package/static/dist/assets/sliders-horizontal-j3jjt9tv.js +1 -0
- package/static/dist/assets/{stateDiagram-D77RDMKH-k417ixmf.js → stateDiagram-D77RDMKH-dnpt1ato.js} +1 -1
- package/static/dist/assets/stateDiagram-v2-MP3YSRHH-bxjacpk6.js +1 -0
- package/static/dist/assets/{swimlanes-42K2YHIH-esola70w.js → swimlanes-42K2YHIH-loqbdazb.js} +1 -1
- package/static/dist/assets/swimlanesDiagram-VR7AAH4N-id62p9hz.js +8 -0
- package/static/dist/assets/{timeline-definition-24CTP7MA-getrz2y8.js → timeline-definition-24CTP7MA-ol2hnvma.js} +1 -1
- package/static/dist/assets/toast-i3h34v6o.js +64 -0
- package/static/dist/assets/{treeView-Q6P3EWNA-hc7ap1q7.js → treeView-Q6P3EWNA-idrj6iox.js} +1 -1
- package/static/dist/assets/{treemap-WGGIJYW6-b7k1syy5.js → treemap-WGGIJYW6-lzr49vv5.js} +1 -1
- package/static/dist/assets/untitled-oaoya4qj.js +1 -0
- package/static/dist/assets/useForm-nfaxgmsk.js +1 -0
- package/static/dist/assets/{useParams-lhg566ew.js → useParams-gjc70qru.js} +1 -1
- package/static/dist/assets/{useSearch-lbrh6ejn.js → useSearch-e6ae539u.js} +1 -1
- package/static/dist/assets/{vennDiagram-4TSXK5OY-n6pcy5qb.js → vennDiagram-4TSXK5OY-bvwr9o2z.js} +1 -1
- package/static/dist/assets/{wardley-WFR3VGLG-lpa18vz1.js → wardley-WFR3VGLG-31ui8tma.js} +1 -1
- package/static/dist/assets/{wardleyDiagram-VM6X3IG4-kpclwwg7.js → wardleyDiagram-VM6X3IG4-k5wqtx4b.js} +1 -1
- package/static/dist/assets/{xychartDiagram-S5SC5T6Z-paa2n8y0.js → xychartDiagram-S5SC5T6Z-aqbgvujg.js} +1 -1
- package/static/dist/index.html +1 -1
- package/static/dist/sw.js +1 -1
- package/static/dist/assets/AppShell-fb2td9zi.js +0 -1
- package/static/dist/assets/ChatPage-cj96kiy9.js +0 -25
- package/static/dist/assets/Dialog-kxcg7ard.js +0 -1
- package/static/dist/assets/ExtensionRoute-jf7h0754.js +0 -1
- package/static/dist/assets/HubRoute-gmanpd5y.js +0 -2
- package/static/dist/assets/Markdown-mdwlvj3w.js +0 -598
- package/static/dist/assets/RightPanel-ftvrjlcp.js +0 -1
- package/static/dist/assets/Select-bilaypej.js +0 -1
- package/static/dist/assets/SessionListPanel-og8n36qs.js +0 -1
- package/static/dist/assets/SettingsLayout-jonjefmj.js +0 -1
- package/static/dist/assets/States-nmejrwrm.js +0 -1
- package/static/dist/assets/Toaster-nnl8zkt9.js +0 -1
- package/static/dist/assets/_app-gdidzd94.js +0 -1
- package/static/dist/assets/_app.index-hbarzbjx.js +0 -1
- package/static/dist/assets/_app.insights-luywlarz.js +0 -1
- package/static/dist/assets/_app.kanban-kincnbr8.js +0 -1
- package/static/dist/assets/_app.logs-oi2gr3gs.js +0 -1
- package/static/dist/assets/_app.memory-b6jfivt6.js +0 -1
- package/static/dist/assets/_app.profiles-lpvixmqp.js +0 -1
- package/static/dist/assets/_app.settings-vowx3iq0.js +0 -1
- package/static/dist/assets/_app.settings._section-cnntg1tu.js +0 -3
- package/static/dist/assets/_app.skills-fb57lpau.js +0 -1
- package/static/dist/assets/_app.tasks-eszpx1q7.js +0 -2
- package/static/dist/assets/_app.todos-nr05ac6w.js +0 -1
- package/static/dist/assets/_app.workspaces-d2luomu6.js +0 -1
- package/static/dist/assets/architecture-7GRP2DOG-hd0o7bde.js +0 -1
- package/static/dist/assets/back-bemaer09.js +0 -1
- package/static/dist/assets/cancel-drd0g6d9.js +0 -1
- package/static/dist/assets/channel-cpdgf867.js +0 -1
- package/static/dist/assets/classDiagram-ZZMXUADV-ko09sguk.js +0 -1
- package/static/dist/assets/classDiagram-v2-VYDZK3BY-ko09sguk.js +0 -1
- package/static/dist/assets/copied-ima3pysb.js +0 -1
- package/static/dist/assets/endpoints-d33siokx.js +0 -64
- package/static/dist/assets/eventmodeling-NTZA5JFV-emctlo64.js +0 -1
- package/static/dist/assets/flowDiagram-HODETNUW-bfi3moqa.js +0 -1
- package/static/dist/assets/index-cxq58xb1.js +0 -11
- package/static/dist/assets/index-hgtx08n5.css +0 -2
- package/static/dist/assets/lazyRouteComponent-af0lvgjx.js +0 -1
- package/static/dist/assets/link-jyxicdhg.js +0 -1
- package/static/dist/assets/login-ec21t39x.js +0 -1
- package/static/dist/assets/mermaid-HWGCJPDP-gfl8z3ep.js +0 -1
- package/static/dist/assets/onboarding-btnltvyz.js +0 -1
- package/static/dist/assets/onboarding_model_label-dp7xffoh.js +0 -1
- package/static/dist/assets/railroad-abnf-HS5TGJTU-nst1qxyn.js +0 -1
- package/static/dist/assets/railroad-ebnf-LZEXJU2U-ci37x8qy.js +0 -1
- package/static/dist/assets/railroad-peg-WCYAUIDC-aimkk07z.js +0 -1
- package/static/dist/assets/refresh-b4uams1i.js +0 -1
- package/static/dist/assets/saved-kg52csy7.js +0 -1
- package/static/dist/assets/settings_section_extensions_title-ej0iapxe.js +0 -1
- package/static/dist/assets/share._token-f97e94r0.js +0 -2
- package/static/dist/assets/sliders-horizontal-fj18it47.js +0 -1
- package/static/dist/assets/sse-fwpqtzbg.js +0 -1
- package/static/dist/assets/stateDiagram-v2-MP3YSRHH-hwn4apct.js +0 -1
- package/static/dist/assets/swimlanesDiagram-VR7AAH4N-d1h97oyg.js +0 -8
- package/static/dist/assets/todoStore-eginf9h4.js +0 -1
- package/static/dist/assets/tts-lxdxnmjd.js +0 -1
- package/static/dist/assets/untitled-ovpfthg4.js +0 -1
- package/static/dist/assets/useForm-bcblv1rx.js +0 -1
- package/static/dist/assets/useLocale-fi5jb8ma.js +0 -1
package/dist/tools/commands.js
CHANGED
|
@@ -31,10 +31,15 @@ export const CLIENT_COMMANDS = [
|
|
|
31
31
|
client('skills', 'List skills'),
|
|
32
32
|
client('use', 'Use a skill', { args_hint: '<skill>', ...webOnly('Use `/skills [query]` to search skills.') }),
|
|
33
33
|
];
|
|
34
|
+
/** Agent commands `POST /api/commands/exec` runs on the chat's session itself rather than through the sidecar's `commands.exec` (TAL-902). */
|
|
35
|
+
export const SESSION_EXEC_COMMANDS = new Set(['refine']);
|
|
36
|
+
/** What a client shows for an Agent prompt built-in this Agent cannot expand (TAL-817); the turn path refuses it with the same text. */
|
|
37
|
+
export const unsupportedPromptMessage = (name) => `/${name} is not available in Talaria yet.`;
|
|
34
38
|
/**
|
|
35
39
|
* The client table followed by the Agent registry. An Agent command whose name is already a client name or alias is
|
|
36
40
|
* dropped, and client-claimed aliases are removed from the rest, so every typed name resolves to one entry.
|
|
37
|
-
* Gateway-only commands never reach a client; CLI-only ones
|
|
41
|
+
* Gateway-only commands never reach a client; CLI-only ones and prompt built-ins the sidecar cannot expand stay listed
|
|
42
|
+
* for no client. An expandable prompt built-in is `handler: 'prompt'`: chat start sends the Agent's expansion (TAL-817).
|
|
38
43
|
*/
|
|
39
44
|
export function commandCatalog(agent) {
|
|
40
45
|
const claimed = new Set(CLIENT_COMMANDS.flatMap((c) => [c.name, ...c.aliases]));
|
|
@@ -45,7 +50,8 @@ export function commandCatalog(agent) {
|
|
|
45
50
|
const aliases = c.aliases.filter((a) => !claimed.has(a));
|
|
46
51
|
for (const a of aliases)
|
|
47
52
|
claimed.add(a);
|
|
48
|
-
|
|
53
|
+
const unsupported = c.cli_only ? `/${c.name} runs only in the Hermes CLI.` : c.prompt === 'unsupported' ? unsupportedPromptMessage(c.name) : null;
|
|
54
|
+
return [{ ...c, aliases, exec: c.exec || SESSION_EXEC_COMMANDS.has(c.name), handler: c.prompt === 'expand' ? 'prompt' : 'agent', clients: unsupported === null ? ALL : [], ...(unsupported === null ? {} : { unsupported_message: unsupported }) }];
|
|
49
55
|
});
|
|
50
56
|
return [...CLIENT_COMMANDS, ...rows];
|
|
51
57
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/tools/commands.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/tools/commands.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TAL-818: the Connectors page and connect card, composed from the sidecar's raw `connectors.*` answers. The policy model
|
|
3
|
+
* follows the Agent desktop's (`apps/desktop/.../connectors/data/join.ts`): the member layer is the user's own rules and
|
|
4
|
+
* the one a change writes; organization and role layers lock an app or tool off.
|
|
5
|
+
*/
|
|
6
|
+
import type { ConnectorOperationView, ConnectorsPage, ConnectorToolsView, SidecarResult } from '@maudecode/talaria-web-contracts';
|
|
7
|
+
type Policy = SidecarResult<'connectors.policy.get'>;
|
|
8
|
+
type Catalog = SidecarResult<'connectors.catalog'>['connectors'];
|
|
9
|
+
type Accounts = SidecarResult<'connectors.accounts'>['accounts'];
|
|
10
|
+
type Tools = SidecarResult<'connectors.tools'>;
|
|
11
|
+
type Snapshot = SidecarResult<'connectors.operation'>;
|
|
12
|
+
export declare function rememberCatalogNames(home: string, catalog: Catalog): Record<string, string>;
|
|
13
|
+
export declare const catalogNames: (home: string) => Record<string, string> | undefined;
|
|
14
|
+
/**
|
|
15
|
+
* `available: false` hides the page. Rules that cannot be read (`policy` null) fail closed: every app reads off and
|
|
16
|
+
* read-only, and `rules_error` says why, instead of showing apps the rules may keep off as on.
|
|
17
|
+
*/
|
|
18
|
+
export declare function connectorsPage(catalog: Catalog, accounts: Accounts, policy: Policy | null, rulesError?: string | null): ConnectorsPage;
|
|
19
|
+
/**
|
|
20
|
+
* Each tool as Hermes gets it: on only when every layer allows the app, no layer turns the tool off by name or tag, and the
|
|
21
|
+
* member rules leave it on. Its switch writes the member's tool rule, so it is editable only where that rule decides.
|
|
22
|
+
* Unreadable rules fail closed: every tool reads off and read-only.
|
|
23
|
+
*/
|
|
24
|
+
export declare function connectorTools(listing: Tools, policy: Policy | null): ConnectorToolsView;
|
|
25
|
+
/** `google_calendar` → `Google Calendar`: the title of a target the catalog does not name (an MCP server, or before a catalog read). */
|
|
26
|
+
export declare const connectorTitle: (slug: string) => string;
|
|
27
|
+
/**
|
|
28
|
+
* The moves the user may make on each target now (the Agent's transition table, `tools/connectors/contract.py`): skip any
|
|
29
|
+
* unresolved target, retry a failed or expired one, approve an MCP install the card holds. A settled operation is frozen.
|
|
30
|
+
* Only a chat card continues: the model is waiting on it.
|
|
31
|
+
*/
|
|
32
|
+
export declare function connectorOperation(snapshot: Snapshot, names?: Record<string, string>): ConnectorOperationView;
|
|
33
|
+
export {};
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
function rulesOf(body, revision) {
|
|
2
|
+
const tools = Object.fromEntries(Object.entries(body.tools ?? {}).map(([slug, rule]) => [slug, rule.disable]));
|
|
3
|
+
const tags = { enable: body.tags?.enable ?? [], disable: body.tags?.disable ?? [] };
|
|
4
|
+
if (body.mode === 'unrestricted')
|
|
5
|
+
return { allowed: null, denied: new Set(), tools: {}, tags: { enable: [], disable: [] }, revision };
|
|
6
|
+
if (body.mode === 'deny-all')
|
|
7
|
+
return { allowed: new Set(), denied: new Set(), tools: {}, tags: { enable: [], disable: [] }, revision };
|
|
8
|
+
if (body.mode === 'allow')
|
|
9
|
+
return { allowed: new Set(body.connectors ?? []), denied: new Set(), tools, tags, revision };
|
|
10
|
+
return { allowed: null, denied: new Set(body.disabled_connectors ?? []), tools, tags, revision };
|
|
11
|
+
}
|
|
12
|
+
const PROBLEMS = new Set(['pending', 'failed', 'expired', 'revoked', 'inactive']);
|
|
13
|
+
/** An account's gateway status while it is not active; a status this server does not know reads as `inactive`. */
|
|
14
|
+
const accountProblem = (status) => status === 'active' ? null : PROBLEMS.has(status) ? status : 'inactive';
|
|
15
|
+
const FACETS = new Set(['read', 'write', 'destructive', 'unclassified']);
|
|
16
|
+
const facetOf = (facet) => FACETS.has(facet) ? facet : 'unclassified';
|
|
17
|
+
/** Catalog names by profile home, kept from the last catalog read so a connect card names `github` GitHub. */
|
|
18
|
+
const catalogNameCache = new Map();
|
|
19
|
+
export function rememberCatalogNames(home, catalog) {
|
|
20
|
+
const names = Object.fromEntries(catalog.map((row) => [row.slug, row.name]));
|
|
21
|
+
catalogNameCache.set(home, names);
|
|
22
|
+
return names;
|
|
23
|
+
}
|
|
24
|
+
export const catalogNames = (home) => catalogNameCache.get(home);
|
|
25
|
+
const allows = (rules, slug) => (rules.allowed === null || rules.allowed.has(slug)) && !rules.denied.has(slug);
|
|
26
|
+
/** The member layer (null: none, so the rules are read-only) and every other layer. */
|
|
27
|
+
function layers(policy) {
|
|
28
|
+
const member = policy?.layers.find((layer) => layer.kind === 'member');
|
|
29
|
+
return {
|
|
30
|
+
member: member ? rulesOf(member.body, member.revision) : null,
|
|
31
|
+
others: (policy?.layers ?? []).filter((layer) => layer.kind !== 'member').map((layer) => rulesOf(layer.body, layer.revision)),
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
/** A layer's tag rules keep a tool off: it carries a disabled tag, or the layer enables tags and it carries none of them. */
|
|
35
|
+
const tagBlocks = (rules, hints) => rules.tags.disable.some((tag) => hints.includes(tag)) || (rules.tags.enable.length > 0 && !rules.tags.enable.some((tag) => hints.includes(tag)));
|
|
36
|
+
/**
|
|
37
|
+
* `available: false` hides the page. Rules that cannot be read (`policy` null) fail closed: every app reads off and
|
|
38
|
+
* read-only, and `rules_error` says why, instead of showing apps the rules may keep off as on.
|
|
39
|
+
*/
|
|
40
|
+
export function connectorsPage(catalog, accounts, policy, rulesError = null) {
|
|
41
|
+
const { member, others } = layers(policy);
|
|
42
|
+
const slugs = [...new Set([...catalog.map((row) => row.slug), ...accounts.map((row) => row.connector)])];
|
|
43
|
+
const connectors = slugs.map((slug) => {
|
|
44
|
+
const entry = catalog.find((row) => row.slug === slug);
|
|
45
|
+
// Live accounts only (a reconnect retires the one it replaced), active first, then newest.
|
|
46
|
+
const mine = accounts.filter((row) => row.connector === slug && !row.disabled)
|
|
47
|
+
.sort((a, b) => Number(b.active) - Number(a.active) || b.created_at.localeCompare(a.created_at));
|
|
48
|
+
const orgLocked = others.some((rules) => !allows(rules, slug));
|
|
49
|
+
return {
|
|
50
|
+
slug, name: entry?.name || slug, description: entry?.description ?? '', category: entry?.category ?? '', logo_url: entry?.logo_url ?? null,
|
|
51
|
+
connected: mine.length > 0,
|
|
52
|
+
accounts: mine.map((row) => ({ connection_id: row.connection_id, name: row.alias?.trim() || row.label, problem: accountProblem(row.status), status_reason: row.status_reason?.trim() || null, active: row.active, created_at: row.created_at })),
|
|
53
|
+
// The switch shows what Hermes gets: an app another layer locks off reads off, whatever the member rule says.
|
|
54
|
+
enabled: policy !== null && (member === null || allows(member, slug)) && !orgLocked,
|
|
55
|
+
org_locked: orgLocked,
|
|
56
|
+
rules_editable: member !== null && !orgLocked,
|
|
57
|
+
tools_off: member?.tools[slug]?.length ?? 0,
|
|
58
|
+
};
|
|
59
|
+
});
|
|
60
|
+
return { available: true, connectors, policy_revision: member?.revision ?? null, rules_error: policy === null ? rulesError ?? 'Connector rules are unavailable.' : null };
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Each tool as Hermes gets it: on only when every layer allows the app, no layer turns the tool off by name or tag, and the
|
|
64
|
+
* member rules leave it on. Its switch writes the member's tool rule, so it is editable only where that rule decides.
|
|
65
|
+
* Unreadable rules fail closed: every tool reads off and read-only.
|
|
66
|
+
*/
|
|
67
|
+
export function connectorTools(listing, policy) {
|
|
68
|
+
const { member, others } = layers(policy);
|
|
69
|
+
const slug = listing.connector;
|
|
70
|
+
const off = new Set(member?.tools[slug] ?? []);
|
|
71
|
+
const appOn = policy !== null && (member === null || allows(member, slug)) && others.every((rules) => allows(rules, slug));
|
|
72
|
+
return {
|
|
73
|
+
connector: slug, policy_revision: member?.revision ?? null,
|
|
74
|
+
tools: listing.tools.map((tool) => {
|
|
75
|
+
// Another layer's name or tag rule locks the tool; the member's own tag rules keep it off without its switch deciding.
|
|
76
|
+
const locked = others.some((rules) => (rules.tools[slug] ?? []).includes(tool.slug) || tagBlocks(rules, tool.hints));
|
|
77
|
+
const memberTagOff = member !== null && tagBlocks(member, tool.hints);
|
|
78
|
+
return {
|
|
79
|
+
slug: tool.slug, name: tool.name, description: tool.description, facet: facetOf(tool.facet), deprecated: tool.deprecated,
|
|
80
|
+
enabled: appOn && !off.has(tool.slug) && !locked && !memberTagOff, locked,
|
|
81
|
+
// The Agent refuses a tool rule for an app the member rules keep off (`compose_tools_write`).
|
|
82
|
+
editable: member !== null && appOn && !locked && !memberTagOff,
|
|
83
|
+
};
|
|
84
|
+
}),
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
const SKIPPABLE = new Set(['pending', 'initiated', 'failed', 'expired']);
|
|
88
|
+
/** `google_calendar` → `Google Calendar`: the title of a target the catalog does not name (an MCP server, or before a catalog read). */
|
|
89
|
+
export const connectorTitle = (slug) => slug.split(/[_\s-]+/).filter(Boolean).map((word) => word[0].toUpperCase() + word.slice(1)).join(' ') || slug;
|
|
90
|
+
/**
|
|
91
|
+
* The moves the user may make on each target now (the Agent's transition table, `tools/connectors/contract.py`): skip any
|
|
92
|
+
* unresolved target, retry a failed or expired one, approve an MCP install the card holds. A settled operation is frozen.
|
|
93
|
+
* Only a chat card continues: the model is waiting on it.
|
|
94
|
+
*/
|
|
95
|
+
export function connectorOperation(snapshot, names = {}) {
|
|
96
|
+
const open = !snapshot.settled;
|
|
97
|
+
return {
|
|
98
|
+
op_id: snapshot.op_id, settled: snapshot.settled, tool_call_id: snapshot.tool_call_id,
|
|
99
|
+
outcome: open ? null : snapshot.targets.every((target) => target.state === 'connected') ? 'connected' : 'not_connected',
|
|
100
|
+
can_continue: open && snapshot.owner === 'session',
|
|
101
|
+
targets: snapshot.targets.map((target) => {
|
|
102
|
+
const local = target.kind !== 'connector';
|
|
103
|
+
const actions = [];
|
|
104
|
+
if (open && local && target.state === 'pending')
|
|
105
|
+
actions.push('approve');
|
|
106
|
+
if (open && (target.state === 'failed' || target.state === 'expired'))
|
|
107
|
+
actions.push('retry');
|
|
108
|
+
if (open && SKIPPABLE.has(target.state))
|
|
109
|
+
actions.push('skip');
|
|
110
|
+
return {
|
|
111
|
+
name: target.name, title: names[target.name] ?? connectorTitle(target.name), kind: target.kind, state: target.state, detail: target.detail,
|
|
112
|
+
// Only an https authorization link reaches a client; anything else is dropped rather than rendered as a link.
|
|
113
|
+
connect_url: open && target.state === 'initiated' && /^https:\/\//i.test(target.connect_url ?? '') ? target.connect_url : null,
|
|
114
|
+
actions,
|
|
115
|
+
// An approval (or a failed install's retry) sends the credentials the install still needs.
|
|
116
|
+
env_fields: open && local && (target.state === 'pending' || target.state === 'failed') ? target.required_env.map((field) => ({ name: field.name, label: field.prompt.trim() || field.name, required: field.required, secret: field.secret })) : [],
|
|
117
|
+
};
|
|
118
|
+
}),
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
//# sourceMappingURL=connectors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connectors.js","sourceRoot":"","sources":["../../src/tools/connectors.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/crons.d.ts
CHANGED
|
@@ -17,6 +17,7 @@ export interface CronDeps {
|
|
|
17
17
|
modelOptionFor?: (home: string, model: string | null, provider: string | null) => Promise<string | null>;
|
|
18
18
|
/** Python `_RUNNING_CRON_JOBS`: job id → start time, read by the session list's `cron_running` stamp. */
|
|
19
19
|
runningJobs?: Map<string, number>;
|
|
20
|
+
updateInProgress?: () => boolean;
|
|
20
21
|
}
|
|
21
22
|
/** Python `_cron_job_for_api`, plus the derived status every client renders (TAL-296). */
|
|
22
23
|
export declare function jobForApi(job: Dict, running?: boolean): Dict;
|
|
@@ -37,11 +38,47 @@ export declare class CronService {
|
|
|
37
38
|
private readonly deps;
|
|
38
39
|
constructor(deps: CronDeps);
|
|
39
40
|
private sidecar;
|
|
41
|
+
blueprints(home: string): Promise<{
|
|
42
|
+
blueprints: {
|
|
43
|
+
key: string;
|
|
44
|
+
title: string;
|
|
45
|
+
description: string;
|
|
46
|
+
category: string;
|
|
47
|
+
source: "plugin" | "builtin";
|
|
48
|
+
plugin: string | null;
|
|
49
|
+
schedule_label: string;
|
|
50
|
+
slots: {
|
|
51
|
+
name: string;
|
|
52
|
+
type: string;
|
|
53
|
+
label: string;
|
|
54
|
+
default: string | null;
|
|
55
|
+
options: string[];
|
|
56
|
+
optional: boolean;
|
|
57
|
+
strict: boolean;
|
|
58
|
+
help: string;
|
|
59
|
+
}[];
|
|
60
|
+
}[];
|
|
61
|
+
}>;
|
|
62
|
+
blueprintFill(home: string, input: {
|
|
63
|
+
key: string;
|
|
64
|
+
values: Record<string, string>;
|
|
65
|
+
}): Promise<{
|
|
66
|
+
draft: {
|
|
67
|
+
name: string;
|
|
68
|
+
prompt: string;
|
|
69
|
+
schedule: string;
|
|
70
|
+
deliver: string;
|
|
71
|
+
skills: string[];
|
|
72
|
+
};
|
|
73
|
+
}>;
|
|
40
74
|
private profileNames;
|
|
41
75
|
availableProfileNames(): Promise<Set<string>>;
|
|
42
76
|
normalizeProfile(value: unknown): Promise<string | null>;
|
|
43
77
|
private profileForHome;
|
|
44
|
-
/**
|
|
78
|
+
/**
|
|
79
|
+
* The physical store owns execution. Additive owner_profile metadata lets the creator manage a new job there.
|
|
80
|
+
* Passing `unwritable` probes each listed store's writes (TAL-810) and collects the ones that fail.
|
|
81
|
+
*/
|
|
45
82
|
private storedJobs;
|
|
46
83
|
/** `pickerHome` is the profile whose `/api/models` catalog the requesting client shows. */
|
|
47
84
|
private view;
|
package/dist/tools/crons.js
CHANGED
|
@@ -8,6 +8,7 @@ import { stripToolCallXml } from '../sessions/merge.js';
|
|
|
8
8
|
import { str } from '../util.js';
|
|
9
9
|
const JOB_ID_RE = /^[A-Za-z0-9_-][A-Za-z0-9_.-]{0,63}$/;
|
|
10
10
|
const PASSTHROUGH_FIELDS = ['script', 'no_agent', 'context_from', 'reasoning_effort'];
|
|
11
|
+
const isContextSource = (job) => job.recovery_only !== true;
|
|
11
12
|
/** TAL-301: a picked catalog id (`@provider:model`) names its own provider, exactly as a chat request does; a bare id keeps the explicit one. */
|
|
12
13
|
function modelSelection(model, provider) {
|
|
13
14
|
const raw = str(model).trim();
|
|
@@ -32,10 +33,66 @@ export function jobForApi(job, running = false) {
|
|
|
32
33
|
payload.derived_state = state;
|
|
33
34
|
payload.needs_attention = state === 'needs_attention' || state === 'schedule_error';
|
|
34
35
|
payload.resumable = payload.needs_attention || state === 'paused' || state === 'off';
|
|
35
|
-
|
|
36
|
+
// TAL-599: a stuck job whose error names croniter gets the "restart the Gateway with cron support" hint.
|
|
37
|
+
payload.attention_hint = payload.needs_attention && /croniter/i.test(str(job.last_error)) ? 'croniter_missing' : null;
|
|
38
|
+
// TAL-810: a run the gateway scheduler (or any other live process) owns reads as running too.
|
|
39
|
+
payload.running = running || job.running === true || job.running_elsewhere === true;
|
|
40
|
+
delete payload.running_elsewhere;
|
|
41
|
+
delete payload.recovery_only;
|
|
42
|
+
payload.last_failure = lastFailure(job.last_failure);
|
|
36
43
|
Object.assign(payload, scheduleText(job));
|
|
37
44
|
return payload;
|
|
38
45
|
}
|
|
46
|
+
/** TAL-810: the Agent's sticky `{at, detail}` stamp of the latest failed run, which survives later successes. */
|
|
47
|
+
function lastFailure(value) {
|
|
48
|
+
if (!value || typeof value !== 'object')
|
|
49
|
+
return null;
|
|
50
|
+
const failure = value;
|
|
51
|
+
return { at: completedAtSeconds(failure.at), detail: str(failure.detail).trim() || 'run failed' };
|
|
52
|
+
}
|
|
53
|
+
/** TAL-601: the canonical list order every client renders: running first, then soonest next run (none last), then name. */
|
|
54
|
+
function compareListedJobs(a, b) {
|
|
55
|
+
if (a.running !== b.running)
|
|
56
|
+
return a.running ? -1 : 1;
|
|
57
|
+
const [an, bn] = [completedAtSeconds(nextRunValue(a)), completedAtSeconds(nextRunValue(b))];
|
|
58
|
+
if (an !== bn)
|
|
59
|
+
return an === null ? 1 : bn === null ? -1 : an - bn;
|
|
60
|
+
return (str(a.name) || str(a.schedule_display)).localeCompare(str(b.name) || str(b.schedule_display), 'en', { sensitivity: 'accent' });
|
|
61
|
+
}
|
|
62
|
+
const PROMPT_HEADING = '## Prompt\n\n';
|
|
63
|
+
const PROMPT_FRAME = /^\*\*Prompt Characters:\*\* (\d+)\n## Prompt\n\n/m;
|
|
64
|
+
const RESPONSE_FRAME = /^\*\*Response Characters:\*\* (\d+)\n## Response\n\n/;
|
|
65
|
+
/**
|
|
66
|
+
* TAL-599, TAL-912: the agent's reply from a run file, read like the Agent's v0.21.6 `_archive_answer`. A framed run skips its
|
|
67
|
+
* prompt by the writer's length stamp and takes exactly the stamped answer (none when that frame is broken), so a prompt
|
|
68
|
+
* quoting `## Response` never leaks.
|
|
69
|
+
* Otherwise the last Response heading is the writer's own; a run without one (script mode) is the whole text.
|
|
70
|
+
*/
|
|
71
|
+
function runResponse(raw) {
|
|
72
|
+
const content = raw.replace(/\r\n?/g, '\n');
|
|
73
|
+
const prompt = PROMPT_FRAME.exec(content);
|
|
74
|
+
const promptStart = prompt ? prompt.index + prompt[0].length : -1;
|
|
75
|
+
if (prompt && content.indexOf(PROMPT_HEADING) === promptStart - PROMPT_HEADING.length) {
|
|
76
|
+
const frameAt = advanceCodePoints(content, promptStart, Number(prompt[1])) + 2;
|
|
77
|
+
const frame = RESPONSE_FRAME.exec(content.slice(frameAt));
|
|
78
|
+
const answerStart = frame ? frameAt + frame[0].length : -1;
|
|
79
|
+
const answerEnd = frame ? advanceCodePoints(content, answerStart, Number(frame[1])) : -1;
|
|
80
|
+
// A truncated or missing answer frame is unusable: any later heading belongs to the prompt.
|
|
81
|
+
return frame && content.slice(answerEnd) === '\n' ? content.slice(answerStart, answerEnd).trim() : '';
|
|
82
|
+
}
|
|
83
|
+
const idx = [...content.matchAll(/^#{1,2} Response\s*$/gm)].at(-1)?.index ?? -1;
|
|
84
|
+
if (idx < 0)
|
|
85
|
+
return content.trim();
|
|
86
|
+
const afterHeading = content.indexOf('\n', idx);
|
|
87
|
+
return afterHeading < 0 ? '' : content.slice(afterHeading + 1).trim();
|
|
88
|
+
}
|
|
89
|
+
/** The writer's frames count Python code points; JavaScript indexes UTF-16 units. */
|
|
90
|
+
function advanceCodePoints(text, from, count) {
|
|
91
|
+
let at = from;
|
|
92
|
+
for (let i = 0; i < count && at < text.length; i++)
|
|
93
|
+
at += text.codePointAt(at) > 0xffff ? 2 : 1;
|
|
94
|
+
return at;
|
|
95
|
+
}
|
|
39
96
|
/** TAL-298: the schedule's display text and the editor's prefill, in the scheduler's own vocabulary (not localized copy). */
|
|
40
97
|
function scheduleText(job) {
|
|
41
98
|
const schedule = job.schedule;
|
|
@@ -65,10 +122,14 @@ function isRecurring(job) {
|
|
|
65
122
|
// Legacy string schedules carry no kind; an unlimited repeat record marks the job recurring (a one-shot has times: 1).
|
|
66
123
|
return typeof schedule === 'string' && hasUnlimitedRepeat(job);
|
|
67
124
|
}
|
|
125
|
+
/** `next_run_at`, else an older agent's `next_run`. */
|
|
126
|
+
function nextRunValue(job) {
|
|
127
|
+
return job.next_run_at ?? (typeof job.next_run === 'number' || typeof job.next_run === 'string' ? job.next_run : null);
|
|
128
|
+
}
|
|
68
129
|
/** Older agents report `paused` / `status` / `next_run` instead of `state` / `last_status` / `next_run_at`; all stay supported. */
|
|
69
130
|
function cronDerivedState(job) {
|
|
70
131
|
const errored = job.state === 'error' || completionOutcome(job.last_status) === 'failed' || job.status === 'error';
|
|
71
|
-
const nextRun =
|
|
132
|
+
const nextRun = nextRunValue(job);
|
|
72
133
|
if (isRecurring(job) && hasUnlimitedRepeat(job) && job.enabled === false && job.state === 'completed' && !nextRun)
|
|
73
134
|
return 'needs_attention';
|
|
74
135
|
// A paused job keeps the last run's error and has no next run; that is not a schedule failure.
|
|
@@ -177,6 +238,19 @@ export class CronService {
|
|
|
177
238
|
throw new HttpFailure(503, 'Hermes Agent sidecar is not running; cron jobs are unavailable');
|
|
178
239
|
return s;
|
|
179
240
|
}
|
|
241
|
+
async blueprints(home) {
|
|
242
|
+
return this.sidecar().call('cron.blueprints', { profile_home: home });
|
|
243
|
+
}
|
|
244
|
+
async blueprintFill(home, input) {
|
|
245
|
+
try {
|
|
246
|
+
return await this.sidecar().call('cron.blueprint_fill', { ...input, profile_home: home });
|
|
247
|
+
}
|
|
248
|
+
catch (error) {
|
|
249
|
+
if (error instanceof SidecarError && error.code === -32602)
|
|
250
|
+
throw new HttpFailure(400, error.message);
|
|
251
|
+
throw error;
|
|
252
|
+
}
|
|
253
|
+
}
|
|
180
254
|
async profileNames(active) {
|
|
181
255
|
const names = [];
|
|
182
256
|
const seen = new Set();
|
|
@@ -214,25 +288,45 @@ export class CronService {
|
|
|
214
288
|
}
|
|
215
289
|
async profileForHome(home) {
|
|
216
290
|
const names = this.deps.isolatedProfileMode() ? (await this.deps.profileNames()).map((row) => row.name) : await this.availableProfileNames();
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
291
|
+
// A profile whose home escapes the profiles root (`profileHome` throws) owns no store.
|
|
292
|
+
for (const profile of names) {
|
|
293
|
+
try {
|
|
294
|
+
if (this.deps.profileHome(profile) === home)
|
|
295
|
+
return profile;
|
|
296
|
+
}
|
|
297
|
+
catch { /* skip */ }
|
|
298
|
+
}
|
|
220
299
|
throw new HttpFailure(403, 'Unknown cron profile home');
|
|
221
300
|
}
|
|
222
|
-
/**
|
|
223
|
-
|
|
301
|
+
/**
|
|
302
|
+
* The physical store owns execution. Additive owner_profile metadata lets the creator manage a new job there.
|
|
303
|
+
* Passing `unwritable` probes each listed store's writes (TAL-810) and collects the ones that fail.
|
|
304
|
+
*/
|
|
305
|
+
async storedJobs(active, unwritable) {
|
|
224
306
|
// ponytail: scan visible stores per request; add an index only if profile/job counts make this expensive.
|
|
225
307
|
const rows = [];
|
|
226
308
|
const seen = new Set();
|
|
227
309
|
for (const profile of await this.profileNames(active)) {
|
|
228
|
-
const
|
|
310
|
+
const local = this.deps.profilesMatch(profile, active);
|
|
311
|
+
let home;
|
|
312
|
+
try {
|
|
313
|
+
home = this.deps.profileHome(profile);
|
|
314
|
+
}
|
|
315
|
+
catch (error) {
|
|
316
|
+
if (local)
|
|
317
|
+
throw error;
|
|
318
|
+
continue;
|
|
319
|
+
}
|
|
229
320
|
if (seen.has(home))
|
|
230
321
|
continue;
|
|
231
322
|
seen.add(home);
|
|
232
|
-
const local = this.deps.profilesMatch(profile, active);
|
|
233
323
|
let jobs;
|
|
234
324
|
try {
|
|
235
|
-
|
|
325
|
+
const listed = await this.sidecar().call('cron.list', unwritable ? { profile_home: home, probe_store: true } : { profile_home: home });
|
|
326
|
+
jobs = listed.jobs;
|
|
327
|
+
const health = listed.store_health;
|
|
328
|
+
if (unwritable && health)
|
|
329
|
+
unwritable.push({ profile, store: health.store, error: health.error, fix: health.fix, since: completedAtSeconds(health.since) });
|
|
236
330
|
}
|
|
237
331
|
catch (error) {
|
|
238
332
|
if (local)
|
|
@@ -261,7 +355,7 @@ export class CronService {
|
|
|
261
355
|
const refs = continuityRefs(fields.context_from, false);
|
|
262
356
|
if (!refs.length)
|
|
263
357
|
return;
|
|
264
|
-
const ids = new Set((await this.sidecar().call('cron.list', { profile_home: home })).jobs.map((job) => job.id));
|
|
358
|
+
const ids = new Set((await this.sidecar().call('cron.list', { profile_home: home })).jobs.filter(isContextSource).map((job) => job.id));
|
|
265
359
|
if (refs.some((ref) => !ids.has(str(ref))))
|
|
266
360
|
throw new HttpFailure(400, 'Context jobs must belong to the execution profile');
|
|
267
361
|
}
|
|
@@ -297,7 +391,7 @@ export class CronService {
|
|
|
297
391
|
const included = new Set();
|
|
298
392
|
for (const row of inStore) {
|
|
299
393
|
const id = str(row.job.id).trim();
|
|
300
|
-
if (!row.managed || !id || id === excludeId || counts.get(id) !== 1)
|
|
394
|
+
if (!row.managed || !isContextSource(row.job) || !id || id === excludeId || counts.get(id) !== 1)
|
|
301
395
|
continue;
|
|
302
396
|
sources.push({ job_id: id, label: str(row.job.name).trim() || id, selectable: true });
|
|
303
397
|
included.add(id);
|
|
@@ -317,17 +411,23 @@ export class CronService {
|
|
|
317
411
|
const activeJobs = [];
|
|
318
412
|
const otherJobs = [];
|
|
319
413
|
const pickerHome = this.deps.profileHome(active);
|
|
414
|
+
const unwritable = [];
|
|
415
|
+
const all = allProfiles && !this.deps.isolatedProfileMode();
|
|
416
|
+
// TAL-810: a failing store is reported for the active profile and for every store whose jobs this list shows.
|
|
417
|
+
const shownStores = new Set([active]);
|
|
320
418
|
try {
|
|
321
|
-
for (const row of await this.storedJobs(active))
|
|
419
|
+
for (const row of await this.storedJobs(active, unwritable)) {
|
|
322
420
|
(row.managed ? activeJobs : otherJobs).push(await this.view(row, pickerHome));
|
|
421
|
+
if (row.managed || all)
|
|
422
|
+
shownStores.add(row.profile);
|
|
423
|
+
}
|
|
323
424
|
}
|
|
324
425
|
catch (error) {
|
|
325
426
|
if (error instanceof SidecarError && error.condition === 'cron_unavailable')
|
|
326
|
-
return { jobs: [], cron_unavailable: true };
|
|
427
|
+
return { jobs: [], cron_unavailable: true, unwritable_stores: [] };
|
|
327
428
|
throw error;
|
|
328
429
|
}
|
|
329
|
-
|
|
330
|
-
return { jobs: all ? [...activeJobs, ...otherJobs] : activeJobs, all_profiles: all, active_profile: active, other_profile_count: all ? 0 : otherJobs.length };
|
|
430
|
+
return { jobs: (all ? [...activeJobs, ...otherJobs] : activeJobs).sort(compareListedJobs), ordered: true, all_profiles: all, active_profile: active, other_profile_count: all ? 0 : otherJobs.length, unwritable_stores: unwritable.filter((store) => shownStores.has(store.profile)) };
|
|
331
431
|
}
|
|
332
432
|
/**
|
|
333
433
|
* Python `/api/crons/recent`: each active-profile job's latest completion after `since`, newest first (ties by
|
|
@@ -485,6 +585,8 @@ export class CronService {
|
|
|
485
585
|
async runNow(home, jobId) {
|
|
486
586
|
if (!jobId)
|
|
487
587
|
throw new HttpFailure(400, 'job_id required');
|
|
588
|
+
if (this.deps.updateInProgress?.())
|
|
589
|
+
throw new HttpFailure(503, 'Web is updating. Retry after it restarts.');
|
|
488
590
|
const running = this.deps.runningJobs;
|
|
489
591
|
const existing = running?.get(jobId);
|
|
490
592
|
if (existing !== undefined)
|
|
@@ -582,8 +684,10 @@ export class CronService {
|
|
|
582
684
|
home = (await this.resolveStore(home, jobId)).home;
|
|
583
685
|
try {
|
|
584
686
|
const detail = await this.sidecar().call('cron.run_detail', { profile_home: home, job_id: jobId, filename });
|
|
585
|
-
// Leaked tool-call XML is removed from the run's text, as from a transcript reply (TAL-302)
|
|
586
|
-
|
|
687
|
+
// Leaked tool-call XML is removed from the run's text, as from a transcript reply (TAL-302); the response is
|
|
688
|
+
// framed on the Agent's raw text (TAL-912), then stripped.
|
|
689
|
+
const content = stripToolCallXml(detail.content);
|
|
690
|
+
return { ...detail, content, snippet: stripToolCallXml(detail.snippet), response: stripToolCallXml(runResponse(detail.content)) };
|
|
587
691
|
}
|
|
588
692
|
catch (error) {
|
|
589
693
|
if (error instanceof SidecarError && error.condition === 'not_found')
|