@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
|
@@ -0,0 +1,343 @@
|
|
|
1
|
+
"""``connectors.*``: Nous tool-gateway apps over the Agent's portal client (TAL-818).
|
|
2
|
+
|
|
3
|
+
The page's reads and writes (catalog, accounts, remove, tools, policy) call ``PortalConnectorClient``; a connect
|
|
4
|
+
runs the Agent's account-owned operation (``tools.connectors.account``), and a chat's ``manage_connections`` card
|
|
5
|
+
registers its session operation here through ``remember_chat_operation``. Every call runs under the profile's
|
|
6
|
+
``scoped_home``; the server composes what the page and card show.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from __future__ import annotations
|
|
10
|
+
|
|
11
|
+
import inspect
|
|
12
|
+
import json
|
|
13
|
+
import logging
|
|
14
|
+
import threading
|
|
15
|
+
from collections import OrderedDict
|
|
16
|
+
from pathlib import Path
|
|
17
|
+
from types import SimpleNamespace
|
|
18
|
+
|
|
19
|
+
from ..errors import InvalidParams, RpcError
|
|
20
|
+
from ..home import profile_home_param, scoped_home
|
|
21
|
+
from ..rpc import CallContext
|
|
22
|
+
|
|
23
|
+
log = logging.getLogger("talaria_sidecar.connectors")
|
|
24
|
+
|
|
25
|
+
# Operations the page or a chat card may still read, by (profile home, op_id). The Agent's ``live`` registry drops an
|
|
26
|
+
# operation once it settles, so its final state is kept here for the next poll. Only settled operations age out (oldest
|
|
27
|
+
# first, past 64): an open one is someone's card, and the Agent bounds those (one per session, settled by its deadline).
|
|
28
|
+
_OPS: OrderedDict[tuple[str, str], object] = OrderedDict()
|
|
29
|
+
_OPS_CAP = 64
|
|
30
|
+
_OPS_LOCK = threading.Lock()
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
def available() -> bool:
|
|
34
|
+
try:
|
|
35
|
+
from tools.connectors import connectors_available
|
|
36
|
+
except Exception: # noqa: BLE001 - an Agent without connectors
|
|
37
|
+
return False
|
|
38
|
+
return bool(connectors_available())
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
def _open() -> None:
|
|
42
|
+
"""The gate every page action passes: connectors available, and on an Agent with guest identities, one created
|
|
43
|
+
for a user who has none (the page asking for apps is the user asking, as on the Agent's desktop)."""
|
|
44
|
+
if not available():
|
|
45
|
+
raise RpcError("Connectors are not available.", condition="connectors_unavailable")
|
|
46
|
+
try:
|
|
47
|
+
from tools.connectors import ensure_guest_identity
|
|
48
|
+
except Exception: # noqa: BLE001 - an Agent before guest identities
|
|
49
|
+
return
|
|
50
|
+
if failure := ensure_guest_identity():
|
|
51
|
+
raise RpcError(failure, condition="connectors_failed")
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
def _portal():
|
|
55
|
+
from tools.connectors.portal.client import PortalConnectorClient
|
|
56
|
+
|
|
57
|
+
return PortalConnectorClient()
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
def _failure(exc: Exception) -> RpcError:
|
|
61
|
+
"""The Agent's connector errors as RPC conditions (its desktop RPC's reasons)."""
|
|
62
|
+
from tools.connectors.gateway.errors import GatewayAuthError
|
|
63
|
+
|
|
64
|
+
code = getattr(exc, "code", None)
|
|
65
|
+
if isinstance(exc, GatewayAuthError):
|
|
66
|
+
if code in {"no_access", "ORG_ACCESS_DENIED", "forbidden"}:
|
|
67
|
+
return RpcError("This account cannot manage connectors.", condition="connectors_forbidden")
|
|
68
|
+
return RpcError("Sign in to Nous Portal to use connectors.", condition="connectors_sign_in")
|
|
69
|
+
if code == "policy_changed":
|
|
70
|
+
return RpcError("Connector rules changed. Refresh and try again.", condition="policy_conflict")
|
|
71
|
+
if code == "org_required":
|
|
72
|
+
return RpcError("Select an organization to manage connector rules.", condition="connectors_org_required")
|
|
73
|
+
if code in {"forbidden", "no_access"}:
|
|
74
|
+
return RpcError("Connector rules cannot be changed for this account.", condition="connectors_forbidden")
|
|
75
|
+
if code == "invalid_connector_policy" or (code == "HTTP_400" and getattr(exc, "status", None) == 400):
|
|
76
|
+
return RpcError("Connector rule change is invalid.", condition="policy_invalid")
|
|
77
|
+
if code == "connection_not_found":
|
|
78
|
+
return RpcError("Connector account not found.", condition="connection_not_found")
|
|
79
|
+
log.warning("connector request failed: %s", exc)
|
|
80
|
+
return RpcError("Connector request failed.", condition="connectors_failed")
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
def _slug(params: dict, key: str = "connector") -> str:
|
|
84
|
+
raw = params.get(key)
|
|
85
|
+
from tools.connectors.portal.client import validate_slug
|
|
86
|
+
from tools.connectors.portal.errors import InvalidConnectorSlug
|
|
87
|
+
|
|
88
|
+
try:
|
|
89
|
+
validate_slug(raw if isinstance(raw, str) else "")
|
|
90
|
+
except InvalidConnectorSlug as exc:
|
|
91
|
+
raise InvalidParams(f"{key} must be a connector slug") from exc
|
|
92
|
+
return raw
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
def catalog() -> dict:
|
|
96
|
+
rows = _portal().catalog().connectors
|
|
97
|
+
return {"connectors": [row.model_dump(mode="json") for row in rows]}
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
def accounts() -> dict:
|
|
101
|
+
return {"accounts": [{
|
|
102
|
+
"connection_id": row["connectionId"], "connector": row["connector"], "status": row["status"],
|
|
103
|
+
"status_reason": row.get("statusReason"), "label": row["label"], "alias": row.get("alias"),
|
|
104
|
+
"active": bool(row["active"]), "disabled": bool(row.get("disabled")), "created_at": row["createdAt"],
|
|
105
|
+
} for row in _portal().list_accounts()]}
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
def remove(connection_id: str) -> dict:
|
|
109
|
+
removed = _portal().delete_account(connection_id)
|
|
110
|
+
return {"connection_id": removed["connectionId"], "connector": removed["connector"], "status": removed["status"]}
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
def tools(slug: str, *, refresh: bool) -> dict:
|
|
114
|
+
from tools.connectors.gateway.errors import GatewayUnavailable
|
|
115
|
+
from tools.connectors.portal.tools_cache import read_tools
|
|
116
|
+
|
|
117
|
+
client = _portal()
|
|
118
|
+
client.require_authentication()
|
|
119
|
+
try:
|
|
120
|
+
listing = read_tools(slug, client=client, refresh=refresh)
|
|
121
|
+
except GatewayUnavailable as exc:
|
|
122
|
+
raise RpcError("Connector not found.", condition="connector_not_found") from exc
|
|
123
|
+
keep = ("slug", "name", "description", "facet", "hints", "categories", "deprecated")
|
|
124
|
+
return {"connector": listing.connector, "tools": [{k: v for k, v in tool.model_dump(mode="json").items() if k in keep} for tool in listing.tools]}
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
def policy() -> dict:
|
|
128
|
+
client = _portal()
|
|
129
|
+
client.require_authentication()
|
|
130
|
+
current = client.policy()
|
|
131
|
+
return {
|
|
132
|
+
"layers": [{"kind": layer.kind, "revision": layer.revision, "body": layer.body.model_dump(mode="json", exclude_none=True)} for layer in current.layers],
|
|
133
|
+
"effective": current.effective.model_dump(mode="json", exclude_none=True, exclude={"version", "issued_at_ms"}),
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
|
|
137
|
+
def set_policy(connector: str, expected_revision: str, *, enabled: bool | None = None, tool: str | None = None, tool_enabled: bool | None = None) -> dict:
|
|
138
|
+
"""One member-layer change on top of the portal's current member rules: an app on or off, or one of its tools.
|
|
139
|
+
The portal refuses the write when ``expected_revision`` is no longer its member revision."""
|
|
140
|
+
from tools.connectors.portal.policy import InvalidMemberPolicy, compose_connector_write, compose_tools_write
|
|
141
|
+
|
|
142
|
+
client = _portal()
|
|
143
|
+
client.require_authentication()
|
|
144
|
+
member = next((layer.body for layer in client.policy().layers if layer.kind == "member"), None)
|
|
145
|
+
try:
|
|
146
|
+
if tool is None:
|
|
147
|
+
body = compose_connector_write(member, SimpleNamespace(connector=connector, enabled=bool(enabled)))
|
|
148
|
+
else:
|
|
149
|
+
rule = (getattr(member, "tools", None) or {}).get(connector)
|
|
150
|
+
disabled = [name for name in (rule.disable if rule else []) if name != tool] + ([] if tool_enabled else [tool])
|
|
151
|
+
body = compose_tools_write(member, SimpleNamespace(connector=connector, disabled_tools=disabled))
|
|
152
|
+
except InvalidMemberPolicy as exc:
|
|
153
|
+
raise RpcError("Connector rule change is invalid.", condition="policy_invalid") from exc
|
|
154
|
+
body["expectedRevision"] = expected_revision
|
|
155
|
+
return {"revision": client.set_policy(body).revision}
|
|
156
|
+
|
|
157
|
+
|
|
158
|
+
def _remember(home: Path, operation) -> None:
|
|
159
|
+
with _OPS_LOCK:
|
|
160
|
+
_OPS[(str(home), operation.op_id)] = operation
|
|
161
|
+
_OPS.move_to_end((str(home), operation.op_id))
|
|
162
|
+
settled = [key for key, op in _OPS.items() if op.settled]
|
|
163
|
+
for key in settled[:max(0, len(_OPS) - _OPS_CAP)]:
|
|
164
|
+
del _OPS[key]
|
|
165
|
+
|
|
166
|
+
|
|
167
|
+
def _operation(home: Path, op_id: str):
|
|
168
|
+
with _OPS_LOCK:
|
|
169
|
+
operation = _OPS.get((str(home), op_id))
|
|
170
|
+
if operation is None:
|
|
171
|
+
raise RpcError("No connection operation with that id.", condition="operation_not_found")
|
|
172
|
+
return operation
|
|
173
|
+
|
|
174
|
+
|
|
175
|
+
def operation_view(operation) -> dict:
|
|
176
|
+
"""The operation as the sidecar reports it: every target's state, the vendor's text, the authorization link while
|
|
177
|
+
the target waits on it (the Agent keeps a used link on a connected target), and the credentials an MCP install
|
|
178
|
+
still asks for."""
|
|
179
|
+
snapshot = operation.snapshot()
|
|
180
|
+
return {
|
|
181
|
+
"op_id": snapshot["op_id"],
|
|
182
|
+
"settled": snapshot.get("settled_at") is not None,
|
|
183
|
+
# The Connectors page's own operations are account-owned; a chat's carry the tool call that opened the card.
|
|
184
|
+
"owner": "account" if operation.session_key.startswith("account:") else "session",
|
|
185
|
+
"tool_call_id": operation.tool_call_id,
|
|
186
|
+
"targets": [{
|
|
187
|
+
"name": target["name"], "kind": target["kind"], "state": target["state"], "detail": target.get("detail") or "",
|
|
188
|
+
"connect_url": target.get("connect_url") if target["state"] == "initiated" else None,
|
|
189
|
+
"required_env": [{
|
|
190
|
+
"name": str(field.get("name") or ""), "prompt": str(field.get("prompt") or ""), "required": bool(field.get("required")),
|
|
191
|
+
"secret": bool(field.get("secret", True)),
|
|
192
|
+
} for field in target.get("required_env") or [] if isinstance(field, dict) and field.get("name")],
|
|
193
|
+
} for target in snapshot["targets"]],
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
|
|
197
|
+
def connect(home: Path, connector: str) -> dict:
|
|
198
|
+
"""Start (or rejoin) the account-owned connect for ``connector`` and wait for its authorization link."""
|
|
199
|
+
from tools.connectors import account
|
|
200
|
+
from tools.connectors.contract import TargetState
|
|
201
|
+
from tools.connectors.run import reissue
|
|
202
|
+
|
|
203
|
+
# The gateway attributes each link to who asked; the Agent names its Connectors page ``desktop_page`` (v0.22.0).
|
|
204
|
+
page = {"initiator": "desktop_page"} if "initiator" in inspect.signature(account.find_or_start_operation).parameters else {}
|
|
205
|
+
start = account.find_or_start_operation([connector], action="connect", profile_home=str(home), **page)
|
|
206
|
+
_remember(home, start.operation)
|
|
207
|
+
if not start.started:
|
|
208
|
+
target = start.operation.target(connector)
|
|
209
|
+
if target is not None and target.state in (TargetState.failed, TargetState.expired) and reissue(start.operation, [connector], **page):
|
|
210
|
+
raise RpcError("This connection cannot be started again.", condition="operation_refused")
|
|
211
|
+
return operation_view(start.operation)
|
|
212
|
+
if account.wait_for_prepare(start) and start.failed:
|
|
213
|
+
raise RpcError("Connector request failed.", condition="connectors_failed")
|
|
214
|
+
return operation_view(start.operation)
|
|
215
|
+
|
|
216
|
+
|
|
217
|
+
def respond(home: Path, op_id: str, action: str, target: str | None, env: dict) -> dict:
|
|
218
|
+
"""The card's move: Skip or Retry one target, Approve an MCP install with its credentials, or Continue."""
|
|
219
|
+
from tools.connectors.contract import SettleReason
|
|
220
|
+
from tools.connectors.operation import IllegalTransition
|
|
221
|
+
from tools.connectors.run import apply_answer, reissue
|
|
222
|
+
|
|
223
|
+
operation = _operation(home, op_id)
|
|
224
|
+
if operation.settled:
|
|
225
|
+
raise RpcError("The connection operation has settled.", condition="operation_settled")
|
|
226
|
+
row = operation.target(target) if target else None
|
|
227
|
+
if action != "continue" and row is None:
|
|
228
|
+
raise InvalidParams("target must name a target of the operation")
|
|
229
|
+
try:
|
|
230
|
+
if action == "continue":
|
|
231
|
+
apply_answer(operation, json.dumps({"settled_by": SettleReason.continue_.value}))
|
|
232
|
+
elif action == "retry" and row.kind == "connector":
|
|
233
|
+
if reissue(operation, [row.name]):
|
|
234
|
+
raise RpcError("This target cannot be run again.", condition="operation_refused")
|
|
235
|
+
else:
|
|
236
|
+
status = "skipped" if action == "skip" else "approved"
|
|
237
|
+
apply_answer(operation, json.dumps({"targets": [{"name": row.name, "status": status, "env": env}]}))
|
|
238
|
+
except IllegalTransition as exc:
|
|
239
|
+
# The operation moved between the server's check and this answer (the watcher connected the target meanwhile).
|
|
240
|
+
raise RpcError("That move is no longer open on this connection.", condition="operation_refused") from exc
|
|
241
|
+
operation.settle_if_all_resolved()
|
|
242
|
+
return operation_view(operation)
|
|
243
|
+
|
|
244
|
+
|
|
245
|
+
def remember_chat_operation(home: Path, payload: dict) -> dict | None:
|
|
246
|
+
"""A chat's ``manage_connections`` card opened: keep its operation for the card's reads and moves, and answer the
|
|
247
|
+
frame the turn streams. None when the Agent's registry no longer holds it."""
|
|
248
|
+
from tools.connectors import live
|
|
249
|
+
|
|
250
|
+
op_id = payload.get("op_id") if isinstance(payload, dict) else None
|
|
251
|
+
operation = live.get_by_op_id(op_id, profile_home=str(home)) if isinstance(op_id, str) else None
|
|
252
|
+
if operation is None:
|
|
253
|
+
return None
|
|
254
|
+
_remember(home, operation)
|
|
255
|
+
return operation_view(operation)
|
|
256
|
+
|
|
257
|
+
|
|
258
|
+
def register(registry_) -> None:
|
|
259
|
+
def page(params: dict, read):
|
|
260
|
+
with scoped_home(profile_home_param(params)):
|
|
261
|
+
_open()
|
|
262
|
+
try:
|
|
263
|
+
return read()
|
|
264
|
+
except RpcError:
|
|
265
|
+
raise
|
|
266
|
+
except Exception as exc: # noqa: BLE001 - the Agent's gateway errors become RPC conditions
|
|
267
|
+
raise _failure(exc) from exc
|
|
268
|
+
|
|
269
|
+
@registry_.method("connectors.available")
|
|
270
|
+
def available_(ctx: CallContext, params: dict) -> dict:
|
|
271
|
+
with scoped_home(profile_home_param(params)):
|
|
272
|
+
return {"available": available()}
|
|
273
|
+
|
|
274
|
+
@registry_.method("connectors.catalog")
|
|
275
|
+
def catalog_(ctx: CallContext, params: dict) -> dict:
|
|
276
|
+
return page(params, catalog)
|
|
277
|
+
|
|
278
|
+
@registry_.method("connectors.accounts")
|
|
279
|
+
def accounts_(ctx: CallContext, params: dict) -> dict:
|
|
280
|
+
return page(params, accounts)
|
|
281
|
+
|
|
282
|
+
@registry_.method("connectors.remove")
|
|
283
|
+
def remove_(ctx: CallContext, params: dict) -> dict:
|
|
284
|
+
connection_id = params.get("connection_id")
|
|
285
|
+
if not isinstance(connection_id, str) or not connection_id:
|
|
286
|
+
raise InvalidParams("connection_id is required")
|
|
287
|
+
return page(params, lambda: remove(connection_id))
|
|
288
|
+
|
|
289
|
+
@registry_.method("connectors.tools")
|
|
290
|
+
def tools_(ctx: CallContext, params: dict) -> dict:
|
|
291
|
+
slug = _slug(params)
|
|
292
|
+
return page(params, lambda: tools(slug, refresh=params.get("refresh") is True))
|
|
293
|
+
|
|
294
|
+
@registry_.method("connectors.policy.get")
|
|
295
|
+
def policy_(ctx: CallContext, params: dict) -> dict:
|
|
296
|
+
return page(params, policy)
|
|
297
|
+
|
|
298
|
+
@registry_.method("connectors.policy.set")
|
|
299
|
+
def set_policy_(ctx: CallContext, params: dict) -> dict:
|
|
300
|
+
slug = _slug(params)
|
|
301
|
+
revision = params.get("expected_revision")
|
|
302
|
+
if not isinstance(revision, str) or not revision:
|
|
303
|
+
raise InvalidParams("expected_revision is required")
|
|
304
|
+
tool = params.get("tool")
|
|
305
|
+
if tool is None:
|
|
306
|
+
if not isinstance(params.get("enabled"), bool):
|
|
307
|
+
raise InvalidParams("enabled is required")
|
|
308
|
+
return page(params, lambda: set_policy(slug, revision, enabled=params["enabled"]))
|
|
309
|
+
if not isinstance(tool, str) or not tool or not isinstance(params.get("tool_enabled"), bool):
|
|
310
|
+
raise InvalidParams("tool and tool_enabled are required together")
|
|
311
|
+
return page(params, lambda: set_policy(slug, revision, tool=tool, tool_enabled=params["tool_enabled"]))
|
|
312
|
+
|
|
313
|
+
@registry_.method("connectors.connect")
|
|
314
|
+
def connect_(ctx: CallContext, params: dict) -> dict:
|
|
315
|
+
slug = _slug(params)
|
|
316
|
+
home = profile_home_param(params)
|
|
317
|
+
return page(params, lambda: connect(home, slug))
|
|
318
|
+
|
|
319
|
+
def gated() -> None:
|
|
320
|
+
# Reads and moves on an operation pass the availability gate too, without creating an identity.
|
|
321
|
+
if not available():
|
|
322
|
+
raise RpcError("Connectors are not available.", condition="connectors_unavailable")
|
|
323
|
+
|
|
324
|
+
@registry_.method("connectors.operation")
|
|
325
|
+
def operation_(ctx: CallContext, params: dict) -> dict:
|
|
326
|
+
home = profile_home_param(params)
|
|
327
|
+
with scoped_home(home):
|
|
328
|
+
gated()
|
|
329
|
+
return operation_view(_operation(home, str(params.get("op_id") or "")))
|
|
330
|
+
|
|
331
|
+
@registry_.method("connectors.respond")
|
|
332
|
+
def respond_(ctx: CallContext, params: dict) -> dict:
|
|
333
|
+
home = profile_home_param(params)
|
|
334
|
+
action = params.get("action")
|
|
335
|
+
if action not in ("skip", "retry", "approve", "continue"):
|
|
336
|
+
raise InvalidParams("action must be skip, retry, approve or continue")
|
|
337
|
+
target = params.get("target")
|
|
338
|
+
env = params.get("env") or {}
|
|
339
|
+
if not isinstance(env, dict) or not all(isinstance(k, str) and isinstance(v, str) for k, v in env.items()):
|
|
340
|
+
raise InvalidParams("env must map names to strings")
|
|
341
|
+
with scoped_home(home):
|
|
342
|
+
gated()
|
|
343
|
+
return respond(home, str(params.get("op_id") or ""), action, target if isinstance(target, str) else None, env)
|