agent-nuvira 2.7.3 → 3.0.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/dist/agents/agents/writer-tool-calling.d.ts +14 -0
- package/dist/agents/agents/writer-tool-calling.d.ts.map +1 -1
- package/dist/agents/agents/writer-tool-calling.js +20 -0
- package/dist/agents/agents/writer-tool-calling.js.map +1 -1
- package/dist/agents/agents/writer.d.ts.map +1 -1
- package/dist/agents/agents/writer.js +15 -4
- package/dist/agents/agents/writer.js.map +1 -1
- package/dist/agents/edit-module.d.ts +7 -0
- package/dist/agents/edit-module.d.ts.map +1 -1
- package/dist/agents/edit-module.js +21 -6
- package/dist/agents/edit-module.js.map +1 -1
- package/dist/agents/orchestrator.d.ts +40 -0
- package/dist/agents/orchestrator.d.ts.map +1 -1
- package/dist/agents/orchestrator.js +116 -27
- package/dist/agents/orchestrator.js.map +1 -1
- package/dist/agents/tool-calling-agent.d.ts +19 -0
- package/dist/agents/tool-calling-agent.d.ts.map +1 -1
- package/dist/agents/tool-calling-agent.js +42 -2
- package/dist/agents/tool-calling-agent.js.map +1 -1
- package/dist/cli/chat.d.ts +55 -1
- package/dist/cli/chat.d.ts.map +1 -1
- package/dist/cli/chat.js +239 -63
- package/dist/cli/chat.js.map +1 -1
- package/dist/cli/cli-program.d.ts +6 -0
- package/dist/cli/cli-program.d.ts.map +1 -0
- package/dist/cli/cli-program.js +222 -0
- package/dist/cli/cli-program.js.map +1 -0
- package/dist/cli/edit.d.ts.map +1 -1
- package/dist/cli/edit.js +18 -3
- package/dist/cli/edit.js.map +1 -1
- package/dist/cli/execute.d.ts.map +1 -1
- package/dist/cli/execute.js +29 -5
- package/dist/cli/execute.js.map +1 -1
- package/dist/cli/failover-runner.d.ts +13 -0
- package/dist/cli/failover-runner.d.ts.map +1 -1
- package/dist/cli/failover-runner.js +11 -0
- package/dist/cli/failover-runner.js.map +1 -1
- package/dist/cli/gateway.d.ts +16 -0
- package/dist/cli/gateway.d.ts.map +1 -1
- package/dist/cli/gateway.js +108 -2
- package/dist/cli/gateway.js.map +1 -1
- package/dist/cli/loop-executor.d.ts.map +1 -1
- package/dist/cli/loop-executor.js +245 -12
- package/dist/cli/loop-executor.js.map +1 -1
- package/dist/cli/plan.d.ts.map +1 -1
- package/dist/cli/plan.js +20 -6
- package/dist/cli/plan.js.map +1 -1
- package/dist/cli/process-control.d.ts +10 -0
- package/dist/cli/process-control.d.ts.map +1 -1
- package/dist/cli/process-control.js +73 -7
- package/dist/cli/process-control.js.map +1 -1
- package/dist/cli/router.d.ts +16 -5
- package/dist/cli/router.d.ts.map +1 -1
- package/dist/cli/router.js +31 -206
- package/dist/cli/router.js.map +1 -1
- package/dist/config/paths.d.ts +23 -0
- package/dist/config/paths.d.ts.map +1 -1
- package/dist/config/paths.js +30 -0
- package/dist/config/paths.js.map +1 -1
- package/dist/config/provider-env.d.ts +37 -0
- package/dist/config/provider-env.d.ts.map +1 -0
- package/dist/config/provider-env.js +86 -0
- package/dist/config/provider-env.js.map +1 -0
- package/dist/context/history.d.ts.map +1 -1
- package/dist/context/history.js +24 -8
- package/dist/context/history.js.map +1 -1
- package/dist/context/session-recall.d.ts +30 -0
- package/dist/context/session-recall.d.ts.map +1 -1
- package/dist/context/session-recall.js +61 -0
- package/dist/context/session-recall.js.map +1 -1
- package/dist/file.js +0 -1
- package/dist/file.js.map +1 -1
- package/dist/gateway/adapters.d.ts +10 -0
- package/dist/gateway/adapters.d.ts.map +1 -1
- package/dist/gateway/adapters.js +4 -1
- package/dist/gateway/adapters.js.map +1 -1
- package/dist/gateway/dedup.d.ts +105 -0
- package/dist/gateway/dedup.d.ts.map +1 -0
- package/dist/gateway/dedup.js +160 -0
- package/dist/gateway/dedup.js.map +1 -0
- package/dist/gateway/heartbeat.d.ts +99 -0
- package/dist/gateway/heartbeat.d.ts.map +1 -0
- package/dist/gateway/heartbeat.js +122 -0
- package/dist/gateway/heartbeat.js.map +1 -0
- package/dist/gateway/inbox.d.ts +14 -1
- package/dist/gateway/inbox.d.ts.map +1 -1
- package/dist/gateway/inbox.js.map +1 -1
- package/dist/gateway/platform-config.d.ts +5 -0
- package/dist/gateway/platform-config.d.ts.map +1 -1
- package/dist/gateway/platform-config.js +8 -13
- package/dist/gateway/platform-config.js.map +1 -1
- package/dist/gateway/registry.d.ts +47 -0
- package/dist/gateway/registry.d.ts.map +1 -1
- package/dist/gateway/registry.js +227 -21
- package/dist/gateway/registry.js.map +1 -1
- package/dist/gateway/whatsapp/baileys-bridge.d.ts +11 -1
- package/dist/gateway/whatsapp/baileys-bridge.d.ts.map +1 -1
- package/dist/gateway/whatsapp/baileys-bridge.js +64 -1
- package/dist/gateway/whatsapp/baileys-bridge.js.map +1 -1
- package/dist/gateway/whatsapp/bridge.d.ts +4 -2
- package/dist/gateway/whatsapp/bridge.d.ts.map +1 -1
- package/dist/gateway/whatsapp/bridge.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/inference/factory.d.ts +16 -0
- package/dist/inference/factory.d.ts.map +1 -1
- package/dist/inference/factory.js +42 -0
- package/dist/inference/factory.js.map +1 -1
- package/dist/inference/gemini-adapter.d.ts.map +1 -1
- package/dist/inference/gemini-adapter.js +3 -0
- package/dist/inference/gemini-adapter.js.map +1 -1
- package/dist/inference/interface.d.ts +12 -0
- package/dist/inference/interface.d.ts.map +1 -1
- package/dist/inference/local-adapter.d.ts +2 -0
- package/dist/inference/local-adapter.d.ts.map +1 -1
- package/dist/inference/local-adapter.js +36 -5
- package/dist/inference/local-adapter.js.map +1 -1
- package/dist/inference/native-tools.d.ts +8 -0
- package/dist/inference/native-tools.d.ts.map +1 -1
- package/dist/inference/native-tools.js +14 -3
- package/dist/inference/native-tools.js.map +1 -1
- package/dist/inference/tool-call-utils.d.ts +66 -7
- package/dist/inference/tool-call-utils.d.ts.map +1 -1
- package/dist/inference/tool-call-utils.js +134 -13
- package/dist/inference/tool-call-utils.js.map +1 -1
- package/dist/learning/auto-router.d.ts.map +1 -1
- package/dist/learning/auto-router.js +90 -5
- package/dist/learning/auto-router.js.map +1 -1
- package/dist/learning/context-budget.d.ts +133 -0
- package/dist/learning/context-budget.d.ts.map +1 -0
- package/dist/learning/context-budget.js +196 -0
- package/dist/learning/context-budget.js.map +1 -0
- package/dist/learning/cost-tracker.d.ts.map +1 -1
- package/dist/learning/cost-tracker.js +20 -8
- package/dist/learning/cost-tracker.js.map +1 -1
- package/dist/learning/eval-framework.d.ts.map +1 -1
- package/dist/learning/eval-framework.js +6 -2
- package/dist/learning/eval-framework.js.map +1 -1
- package/dist/learning/failure-bookkeeping.d.ts +19 -0
- package/dist/learning/failure-bookkeeping.d.ts.map +1 -1
- package/dist/learning/failure-bookkeeping.js +67 -2
- package/dist/learning/failure-bookkeeping.js.map +1 -1
- package/dist/learning/feedback.d.ts.map +1 -1
- package/dist/learning/feedback.js +19 -8
- package/dist/learning/feedback.js.map +1 -1
- package/dist/learning/model-harness.d.ts +76 -0
- package/dist/learning/model-harness.d.ts.map +1 -0
- package/dist/learning/model-harness.js +119 -0
- package/dist/learning/model-harness.js.map +1 -0
- package/dist/learning/model-selection.d.ts +15 -0
- package/dist/learning/model-selection.d.ts.map +1 -1
- package/dist/learning/model-selection.js +27 -1
- package/dist/learning/model-selection.js.map +1 -1
- package/dist/learning/provider-fallback.d.ts +12 -0
- package/dist/learning/provider-fallback.d.ts.map +1 -1
- package/dist/learning/provider-fallback.js +74 -0
- package/dist/learning/provider-fallback.js.map +1 -1
- package/dist/learning/provider-revival.d.ts +106 -0
- package/dist/learning/provider-revival.d.ts.map +1 -0
- package/dist/learning/provider-revival.js +154 -0
- package/dist/learning/provider-revival.js.map +1 -0
- package/dist/learning/resilient-call.d.ts.map +1 -1
- package/dist/learning/resilient-call.js +48 -3
- package/dist/learning/resilient-call.js.map +1 -1
- package/dist/nlu/conversation-gate.d.ts +37 -0
- package/dist/nlu/conversation-gate.d.ts.map +1 -1
- package/dist/nlu/conversation-gate.js +49 -0
- package/dist/nlu/conversation-gate.js.map +1 -1
- package/dist/nlu/schema.d.ts +2 -2
- package/dist/observability/dag-bridge.d.ts +69 -0
- package/dist/observability/dag-bridge.d.ts.map +1 -0
- package/dist/observability/dag-bridge.js +56 -0
- package/dist/observability/dag-bridge.js.map +1 -0
- package/dist/observability/event-bus.d.ts +5 -10
- package/dist/observability/event-bus.d.ts.map +1 -1
- package/dist/observability/event-bus.js +10 -42
- package/dist/observability/event-bus.js.map +1 -1
- package/dist/skills/execution-audit.d.ts.map +1 -1
- package/dist/skills/execution-audit.js +17 -5
- package/dist/skills/execution-audit.js.map +1 -1
- package/dist/skills/sandbox-executor.d.ts +12 -1
- package/dist/skills/sandbox-executor.d.ts.map +1 -1
- package/dist/skills/sandbox-executor.js +28 -6
- package/dist/skills/sandbox-executor.js.map +1 -1
- package/dist/skills/secret-capture.d.ts +45 -1
- package/dist/skills/secret-capture.d.ts.map +1 -1
- package/dist/skills/secret-capture.js +82 -19
- package/dist/skills/secret-capture.js.map +1 -1
- package/dist/skills/skill-env-inventory.d.ts +79 -0
- package/dist/skills/skill-env-inventory.d.ts.map +1 -0
- package/dist/skills/skill-env-inventory.js +167 -0
- package/dist/skills/skill-env-inventory.js.map +1 -0
- package/dist/skills/skill-executor.d.ts +2 -0
- package/dist/skills/skill-executor.d.ts.map +1 -1
- package/dist/skills/skill-executor.js +19 -24
- package/dist/skills/skill-executor.js.map +1 -1
- package/dist/tools/ask-user.d.ts +14 -1
- package/dist/tools/ask-user.d.ts.map +1 -1
- package/dist/tools/ask-user.js +25 -1
- package/dist/tools/ask-user.js.map +1 -1
- package/dist/tools/followup-utils.d.ts +64 -0
- package/dist/tools/followup-utils.d.ts.map +1 -0
- package/dist/tools/followup-utils.js +158 -0
- package/dist/tools/followup-utils.js.map +1 -0
- package/dist/tools/memory-tools.d.ts +35 -0
- package/dist/tools/memory-tools.d.ts.map +1 -1
- package/dist/tools/memory-tools.js +76 -0
- package/dist/tools/memory-tools.js.map +1 -1
- package/dist/tools/pipeline-tool.d.ts.map +1 -1
- package/dist/tools/pipeline-tool.js +8 -3
- package/dist/tools/pipeline-tool.js.map +1 -1
- package/dist/tools/registry.d.ts +25 -12
- package/dist/tools/registry.d.ts.map +1 -1
- package/dist/tools/registry.js +31 -6
- package/dist/tools/registry.js.map +1 -1
- package/dist/tools/skill-tool.d.ts.map +1 -1
- package/dist/tools/skill-tool.js +52 -5
- package/dist/tools/skill-tool.js.map +1 -1
- package/dist/tools/tool-loop.d.ts +63 -1
- package/dist/tools/tool-loop.d.ts.map +1 -1
- package/dist/tools/tool-loop.js +305 -66
- package/dist/tools/tool-loop.js.map +1 -1
- package/dist/tools/toolsets.d.ts +19 -3
- package/dist/tools/toolsets.d.ts.map +1 -1
- package/dist/tools/toolsets.js +21 -5
- package/dist/tools/toolsets.js.map +1 -1
- package/dist/utils/env.d.ts.map +1 -1
- package/dist/utils/env.js +9 -13
- package/dist/utils/env.js.map +1 -1
- package/dist/web-dashboard/chat-console.d.ts +13 -1
- package/dist/web-dashboard/chat-console.d.ts.map +1 -1
- package/dist/web-dashboard/chat-console.js +16 -2
- package/dist/web-dashboard/chat-console.js.map +1 -1
- package/dist/web-dashboard/hub-data.d.ts +2 -0
- package/dist/web-dashboard/hub-data.d.ts.map +1 -1
- package/dist/web-dashboard/hub-data.js +4 -0
- package/dist/web-dashboard/hub-data.js.map +1 -1
- package/dist/web-dashboard/server.d.ts +6 -0
- package/dist/web-dashboard/server.d.ts.map +1 -1
- package/dist/web-dashboard/server.js +192 -3
- package/dist/web-dashboard/server.js.map +1 -1
- package/dist/web-dashboard/src/types.d.ts +31 -1
- package/dist/web-dashboard/src/types.d.ts.map +1 -1
- package/package.json +11 -1
- package/src/web-dashboard/public/assets/index-56yPnN_m.js +207 -0
- package/src/web-dashboard/public/assets/index-56yPnN_m.js.map +1 -0
- package/src/web-dashboard/public/assets/{index-C507EUWf.css → index-Cyd6tIew.css} +1 -1
- package/src/web-dashboard/public/index.html +2 -2
- package/dist/example.d.ts +0 -1
- package/dist/example.d.ts.map +0 -1
- package/dist/example.js +0 -3
- package/dist/example.js.map +0 -1
- package/dist/fresh.d.ts +0 -2
- package/dist/fresh.d.ts.map +0 -1
- package/dist/fresh.js +0 -2
- package/dist/fresh.js.map +0 -1
- package/dist/mcp/mcp-dashboard-oauth.d.ts +0 -94
- package/dist/mcp/mcp-dashboard-oauth.d.ts.map +0 -1
- package/dist/mcp/mcp-dashboard-oauth.js +0 -140
- package/dist/mcp/mcp-dashboard-oauth.js.map +0 -1
- package/dist/memory/background-sync.d.ts +0 -107
- package/dist/memory/background-sync.d.ts.map +0 -1
- package/dist/memory/background-sync.js +0 -242
- package/dist/memory/background-sync.js.map +0 -1
- package/dist/memory/cross-session.d.ts +0 -68
- package/dist/memory/cross-session.d.ts.map +0 -1
- package/dist/memory/cross-session.js +0 -153
- package/dist/memory/cross-session.js.map +0 -1
- package/dist/memory/drift-detector.d.ts +0 -76
- package/dist/memory/drift-detector.d.ts.map +0 -1
- package/dist/memory/drift-detector.js +0 -216
- package/dist/memory/drift-detector.js.map +0 -1
- package/dist/memory/enhanced-manager.d.ts +0 -105
- package/dist/memory/enhanced-manager.d.ts.map +0 -1
- package/dist/memory/enhanced-manager.js +0 -280
- package/dist/memory/enhanced-manager.js.map +0 -1
- package/dist/memory/session-extraction.d.ts +0 -93
- package/dist/memory/session-extraction.d.ts.map +0 -1
- package/dist/memory/session-extraction.js +0 -290
- package/dist/memory/session-extraction.js.map +0 -1
- package/dist/memory/sqlite-store.d.ts +0 -208
- package/dist/memory/sqlite-store.d.ts.map +0 -1
- package/dist/memory/sqlite-store.js +0 -556
- package/dist/memory/sqlite-store.js.map +0 -1
- package/dist/skills/daytona-executor.d.ts +0 -78
- package/dist/skills/daytona-executor.d.ts.map +0 -1
- package/dist/skills/daytona-executor.js +0 -256
- package/dist/skills/daytona-executor.js.map +0 -1
- package/dist/skills/modal-executor.d.ts +0 -81
- package/dist/skills/modal-executor.d.ts.map +0 -1
- package/dist/skills/modal-executor.js +0 -285
- package/dist/skills/modal-executor.js.map +0 -1
- package/dist/sync/inventory.d.ts +0 -1
- package/dist/sync/inventory.d.ts.map +0 -1
- package/dist/sync/inventory.js +0 -3
- package/dist/sync/inventory.js.map +0 -1
- package/dist/sync/validate.d.ts +0 -1
- package/dist/sync/validate.d.ts.map +0 -1
- package/dist/sync/validate.js +0 -3
- package/dist/sync/validate.js.map +0 -1
- package/dist/test.d.ts +0 -2
- package/dist/test.d.ts.map +0 -1
- package/dist/test.js +0 -3
- package/dist/test.js.map +0 -1
- package/dist/tools/browser-tool.d.ts +0 -206
- package/dist/tools/browser-tool.d.ts.map +0 -1
- package/dist/tools/browser-tool.js +0 -726
- package/dist/tools/browser-tool.js.map +0 -1
- package/dist/tools/delegate-tool.d.ts +0 -109
- package/dist/tools/delegate-tool.d.ts.map +0 -1
- package/dist/tools/delegate-tool.js +0 -185
- package/dist/tools/delegate-tool.js.map +0 -1
- package/dist/tools/delegation-state.d.ts +0 -87
- package/dist/tools/delegation-state.d.ts.map +0 -1
- package/dist/tools/delegation-state.js +0 -278
- package/dist/tools/delegation-state.js.map +0 -1
- package/dist/tools/desktop-ui.d.ts +0 -148
- package/dist/tools/desktop-ui.d.ts.map +0 -1
- package/dist/tools/desktop-ui.js +0 -486
- package/dist/tools/desktop-ui.js.map +0 -1
- package/dist/tools/image-video-tool.d.ts +0 -88
- package/dist/tools/image-video-tool.d.ts.map +0 -1
- package/dist/tools/image-video-tool.js +0 -276
- package/dist/tools/image-video-tool.js.map +0 -1
- package/dist/tools/kanban-cron-tools.d.ts +0 -92
- package/dist/tools/kanban-cron-tools.d.ts.map +0 -1
- package/dist/tools/kanban-cron-tools.js +0 -197
- package/dist/tools/kanban-cron-tools.js.map +0 -1
- package/dist/tools/messaging-tool.d.ts +0 -127
- package/dist/tools/messaging-tool.d.ts.map +0 -1
- package/dist/tools/messaging-tool.js +0 -314
- package/dist/tools/messaging-tool.js.map +0 -1
- package/dist/tools/modality/generic-caller.d.ts +0 -43
- package/dist/tools/modality/generic-caller.d.ts.map +0 -1
- package/dist/tools/modality/generic-caller.js +0 -254
- package/dist/tools/modality/generic-caller.js.map +0 -1
- package/dist/tools/modality/modality-catalog.d.ts +0 -134
- package/dist/tools/modality/modality-catalog.d.ts.map +0 -1
- package/dist/tools/modality/modality-catalog.js +0 -445
- package/dist/tools/modality/modality-catalog.js.map +0 -1
- package/dist/tools/modality/tool-router.d.ts +0 -81
- package/dist/tools/modality/tool-router.d.ts.map +0 -1
- package/dist/tools/modality/tool-router.js +0 -84
- package/dist/tools/modality/tool-router.js.map +0 -1
- package/dist/tools/security-tools.d.ts +0 -107
- package/dist/tools/security-tools.d.ts.map +0 -1
- package/dist/tools/security-tools.js +0 -264
- package/dist/tools/security-tools.js.map +0 -1
- package/dist/tools/ssh-tool.d.ts +0 -130
- package/dist/tools/ssh-tool.d.ts.map +0 -1
- package/dist/tools/ssh-tool.js +0 -328
- package/dist/tools/ssh-tool.js.map +0 -1
- package/dist/tools/tts-tool.d.ts +0 -91
- package/dist/tools/tts-tool.d.ts.map +0 -1
- package/dist/tools/tts-tool.js +0 -406
- package/dist/tools/tts-tool.js.map +0 -1
- package/dist/utils/shell-detection.d.ts +0 -124
- package/dist/utils/shell-detection.d.ts.map +0 -1
- package/dist/utils/shell-detection.js +0 -305
- package/dist/utils/shell-detection.js.map +0 -1
- package/dist/utils/windows-paths.d.ts +0 -185
- package/dist/utils/windows-paths.d.ts.map +0 -1
- package/dist/utils/windows-paths.js +0 -472
- package/dist/utils/windows-paths.js.map +0 -1
- package/src/web-dashboard/public/assets/index-C4frng1Q.js +0 -207
- package/src/web-dashboard/public/assets/index-C4frng1Q.js.map +0 -1
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Skill env-var inventory — the data behind the dashboard's environment
|
|
3
|
+
* variable editor.
|
|
4
|
+
*
|
|
5
|
+
* The editor (`web-dashboard/src/components/EnvVarEditor.tsx`) was written
|
|
6
|
+
* against exactly this shape (`name`, `value`, `isSet`, `requiredBy`,
|
|
7
|
+
* `description`, `isProviderCredential`) and had no producer: the write
|
|
8
|
+
* endpoint existed for skill secrets, but nothing ever reported which vars are
|
|
9
|
+
* wanted, which are set, or which rows are provider credentials. So the panel
|
|
10
|
+
* was unreachable and the credential boundary it draws was unenforced.
|
|
11
|
+
*
|
|
12
|
+
* ## The domain boundary (this is the supersede-or-extend decision)
|
|
13
|
+
*
|
|
14
|
+
* Three dashboard surfaces touch credentials and they do NOT overlap:
|
|
15
|
+
*
|
|
16
|
+
* - `AdminPanel` / provider setup → **provider** credentials
|
|
17
|
+
* (`OPENAI_API_KEY`, `ANTHROPIC_API_KEY`, …). Writing one there is what
|
|
18
|
+
* makes the router see the provider as credentialed.
|
|
19
|
+
* - `PlatformsPage` / `PlatformConfigSection` → **platform** credentials
|
|
20
|
+
* (Twilio/SMTP/…), sourced from `PLATFORM_ENV_VARS`.
|
|
21
|
+
* - **this module** → **skill** env vars: the vars a skill declares it needs,
|
|
22
|
+
* which are injected into a skill execution and nothing else.
|
|
23
|
+
*
|
|
24
|
+
* The boundary is enforced, not advisory: a provider credential is reported
|
|
25
|
+
* here with `isProviderCredential: true` (so the user understands why the row
|
|
26
|
+
* is locked) and `saveEnvValue` refuses to write it through the skill path.
|
|
27
|
+
* Platform-owned vars are excluded entirely — they are editable in the surface
|
|
28
|
+
* that owns their semantics.
|
|
29
|
+
*/
|
|
30
|
+
import { loadEnvFile, isEnvVarPersisted, getEnvVarValue } from './secret-capture.js';
|
|
31
|
+
import { readHubCatalog } from '../learning/hub-skill-catalog.js';
|
|
32
|
+
import { isProviderEnvBlocked } from '../config/provider-env.js';
|
|
33
|
+
import { PLATFORM_ENV_VARS } from '../gateway/channel-directory.js';
|
|
34
|
+
/** Every env var claimed by a messaging platform (owned by PlatformsPage). */
|
|
35
|
+
function platformOwnedVars() {
|
|
36
|
+
const out = new Set();
|
|
37
|
+
for (const vars of Object.values(PLATFORM_ENV_VARS)) {
|
|
38
|
+
for (const v of vars)
|
|
39
|
+
out.add(v);
|
|
40
|
+
}
|
|
41
|
+
return out;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Mask a secret for display. Mirrors `redactValue`'s intent (first/last 4) but
|
|
45
|
+
* is deliberately stricter here: the dashboard only ever needs to prove a value
|
|
46
|
+
* EXISTS, and a 4-char prefix of an API key is already meaningful.
|
|
47
|
+
*/
|
|
48
|
+
function maskValue(value) {
|
|
49
|
+
if (value.length === 0)
|
|
50
|
+
return '';
|
|
51
|
+
if (value.length <= 8)
|
|
52
|
+
return '••••••••';
|
|
53
|
+
return `${value.slice(0, 3)}••••${value.slice(-2)}`;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Build the editor's row set:
|
|
57
|
+
*
|
|
58
|
+
* 1. Every var REQUIRED by an installed hub skill (set or not) — these are
|
|
59
|
+
* the rows a user needs to act on, so an unset one must appear as ❌.
|
|
60
|
+
* 2. Every persisted .env var that is not a provider credential and not
|
|
61
|
+
* platform-owned — hand-set skill secrets, which would otherwise be
|
|
62
|
+
* invisible once written.
|
|
63
|
+
* 3. Provider credentials that are present in the file, flagged so the user
|
|
64
|
+
* sees the boundary instead of silently wondering where the key went.
|
|
65
|
+
*
|
|
66
|
+
* Never throws: a missing skills root or unreadable .env simply contributes
|
|
67
|
+
* nothing, because a broken inventory must not blank the page.
|
|
68
|
+
*/
|
|
69
|
+
export function readSkillEnvInventory(opts = {}) {
|
|
70
|
+
const rows = new Map();
|
|
71
|
+
const platformOwned = platformOwnedVars();
|
|
72
|
+
const put = (row) => {
|
|
73
|
+
// First writer wins so a provider-credential flag survives a later skill
|
|
74
|
+
// row for the same name (the skill row carries no flag).
|
|
75
|
+
if (rows.has(row.name)) {
|
|
76
|
+
const existing = rows.get(row.name);
|
|
77
|
+
existing.requiredBy ??= row.requiredBy;
|
|
78
|
+
existing.description ??= row.description;
|
|
79
|
+
existing.isProviderCredential ||= row.isProviderCredential;
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
rows.set(row.name, row);
|
|
83
|
+
};
|
|
84
|
+
// ── 1. Declared by installed skills ──────────────────────────────────────
|
|
85
|
+
try {
|
|
86
|
+
const catalog = readHubCatalog(opts.projectRoot ?? process.cwd(), opts.home);
|
|
87
|
+
for (const skill of catalog) {
|
|
88
|
+
for (const name of skill.requiredEnvVars ?? []) {
|
|
89
|
+
const isSet = isEnvVarPersisted(name);
|
|
90
|
+
put({
|
|
91
|
+
name,
|
|
92
|
+
value: isSet ? maskValue(getEnvVarValue(name)) : '',
|
|
93
|
+
isSet,
|
|
94
|
+
requiredBy: skill.name,
|
|
95
|
+
description: skill.description,
|
|
96
|
+
isProviderCredential: isProviderEnvBlocked(name) || undefined,
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
catch {
|
|
102
|
+
// Best-effort — an unreadable catalog contributes nothing.
|
|
103
|
+
}
|
|
104
|
+
// ── 2 + 3. What is actually in the env file ─────────────────────────────
|
|
105
|
+
try {
|
|
106
|
+
for (const [name, rawValue] of Object.entries(loadEnvFile())) {
|
|
107
|
+
if (platformOwned.has(name))
|
|
108
|
+
continue; // owned by PlatformsPage
|
|
109
|
+
if (isProviderEnvBlocked(name)) {
|
|
110
|
+
put({
|
|
111
|
+
name,
|
|
112
|
+
value: maskValue(rawValue),
|
|
113
|
+
isSet: rawValue.length > 0,
|
|
114
|
+
description: 'Provider credential — manage this in provider setup, not here.',
|
|
115
|
+
isProviderCredential: true,
|
|
116
|
+
});
|
|
117
|
+
continue;
|
|
118
|
+
}
|
|
119
|
+
// `put` (not an unconditional set) so a skill-declared row keeps its
|
|
120
|
+
// `requiredBy` attribution.
|
|
121
|
+
put({
|
|
122
|
+
name,
|
|
123
|
+
value: maskValue(rawValue),
|
|
124
|
+
isSet: rawValue.length > 0,
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
catch {
|
|
129
|
+
// Best-effort.
|
|
130
|
+
}
|
|
131
|
+
return [...rows.values()].sort((a, b) => a.name.localeCompare(b.name));
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Can a SKILL actually consume this variable right now?
|
|
135
|
+
*
|
|
136
|
+
* This is what the editor's "🧪 Test" button asks — not "is this API key
|
|
137
|
+
* valid" (which would need a paid provider call per keystroke), but the
|
|
138
|
+
* question the panel can answer truthfully: *will a skill run see this value?*
|
|
139
|
+
* That is exactly the set of conditions `skill-tool` checks before executing,
|
|
140
|
+
* so the verdict matches what execution will really do.
|
|
141
|
+
*/
|
|
142
|
+
export function probeSkillEnvVar(name) {
|
|
143
|
+
if (isProviderEnvBlocked(name)) {
|
|
144
|
+
return {
|
|
145
|
+
usable: false,
|
|
146
|
+
detail: `${name} is a provider credential and is blocked from skill execution by design. ` +
|
|
147
|
+
'Configure it in provider setup — skills never receive it.',
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
if (platformOwnedVars().has(name)) {
|
|
151
|
+
return {
|
|
152
|
+
usable: false,
|
|
153
|
+
detail: `${name} is a platform credential — configure it on the Platforms page.`,
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
if (!isEnvVarPersisted(name)) {
|
|
157
|
+
return {
|
|
158
|
+
usable: false,
|
|
159
|
+
detail: `${name} is not set. Add a value to make it available to skills.`,
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
return {
|
|
163
|
+
usable: true,
|
|
164
|
+
detail: `${name} is set and will be passed to skill executions that require it.`,
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
//# sourceMappingURL=skill-env-inventory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-env-inventory.js","sourceRoot":"","sources":["../../src/skills/skill-env-inventory.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,6 +11,8 @@
|
|
|
11
11
|
* 3. Spawns a sandboxed process with API keys injected
|
|
12
12
|
* 4. Captures output and returns it to the agent
|
|
13
13
|
*/
|
|
14
|
+
import { PROVIDER_ENV_BLOCKLIST } from '../config/provider-env.js';
|
|
15
|
+
export { PROVIDER_ENV_BLOCKLIST };
|
|
14
16
|
export type SkillRuntime = 'python' | 'node' | 'shell' | 'ruby' | 'go' | 'rust' | 'auto';
|
|
15
17
|
export interface SkillExecutionResult {
|
|
16
18
|
success: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skill-executor.d.ts","sourceRoot":"","sources":["../../src/skills/skill-executor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;
|
|
1
|
+
{"version":3,"file":"skill-executor.d.ts","sourceRoot":"","sources":["../../src/skills/skill-executor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAaH,OAAO,EAAE,sBAAsB,EAAqB,MAAM,2BAA2B,CAAC;AAEtF,OAAO,EAAE,sBAAsB,EAAE,CAAC;AAIlC,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,MAAM,CAAC;AAEzF,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,YAAY,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,qBAAqB;IACpC,0CAA0C;IAC1C,GAAG,EAAE,MAAM,CAAC;IACZ,uDAAuD;IACvD,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,sCAAsC;IACtC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,6CAA6C;IAC7C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kDAAkD;IAClD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,wDAAwD;IACxD,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAID;;GAEG;AACH,wBAAgB,aAAa,CAC3B,YAAY,EAAE,MAAM,EACpB,QAAQ,CAAC,EAAE,MAAM,GAChB,YAAY,CA2Dd;AAID;;;;;;;GAOG;AACH,wBAAsB,YAAY,CAChC,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE,qBAAqB,EAC9B,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,oBAAoB,CAAC,CAkH/B;AAgJD;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI,CAM/D;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CACvC,YAAY,EAAE,MAAM,EAAE,GACrB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAkBxB;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,IAAI,CAE1C;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE7D;AAID;;;;;;;;;;GAUG;AACH,wBAAsB,uBAAuB,CAC3C,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,qBAAqB,GAC7B,OAAO,CAAC,oBAAoB,CAAC,CAoB/B"}
|
|
@@ -17,6 +17,12 @@ import { existsSync } from 'node:fs';
|
|
|
17
17
|
import { join, extname } from 'node:path';
|
|
18
18
|
import { tmpdir } from 'node:os';
|
|
19
19
|
import { randomBytes } from 'node:crypto';
|
|
20
|
+
// The provider-credential blocklist lives in a shared leaf module so the SAME
|
|
21
|
+
// set also guards the skill-secret write path and the dashboard's env-var
|
|
22
|
+
// editor. Two copies meant the editor could mark a key "blocked" while the
|
|
23
|
+
// writer stored it anyway — a cosmetic invariant with no enforcement.
|
|
24
|
+
import { PROVIDER_ENV_BLOCKLIST, isSensitiveEnvVar } from '../config/provider-env.js';
|
|
25
|
+
export { PROVIDER_ENV_BLOCKLIST };
|
|
20
26
|
// ─── Runtime Detection ───────────────────────────────────────────────────
|
|
21
27
|
/**
|
|
22
28
|
* Detect the runtime for a skill based on its content or file extension.
|
|
@@ -98,12 +104,21 @@ export async function executeSkill(scriptContent, context, filePath) {
|
|
|
98
104
|
const runtime = detectRuntime(scriptContent, filePath);
|
|
99
105
|
const timeoutMs = context.timeoutMs ?? 30_000;
|
|
100
106
|
const maxOutputBytes = context.maxOutputBytes ?? 1_024 * 1024;
|
|
101
|
-
// Filter env vars: blocklist prevents automatic passthrough from
|
|
102
|
-
// but explicit caller-provided env vars are always allowed
|
|
107
|
+
// Filter env vars: the blocklist prevents automatic passthrough from
|
|
108
|
+
// process.env, but explicit caller-provided env vars are always allowed
|
|
109
|
+
// (caller knows what they're doing).
|
|
110
|
+
//
|
|
111
|
+
// The automatic passthrough uses `isSensitiveEnvVar`, not just the provider
|
|
112
|
+
// list, because the provider list only knows OUR providers: a platform
|
|
113
|
+
// password (BUFF_SMTP_PASSWORD) or a user's own cloud credential in this
|
|
114
|
+
// process's environment was previously handed to every skill with a shell.
|
|
115
|
+
// Benign vars (PATH, HOME, LANG, …) still flow — see the shape-rule rationale
|
|
116
|
+
// in config/provider-env.ts.
|
|
103
117
|
const filteredEnv = {};
|
|
104
|
-
// First, add process.env vars that are
|
|
118
|
+
// First, add process.env vars that are neither provider credentials nor
|
|
119
|
+
// credential-shaped.
|
|
105
120
|
for (const [key, value] of Object.entries(process.env)) {
|
|
106
|
-
if (value !== undefined && !
|
|
121
|
+
if (value !== undefined && !isSensitiveEnvVar(key)) {
|
|
107
122
|
filteredEnv[key] = value;
|
|
108
123
|
}
|
|
109
124
|
}
|
|
@@ -303,26 +318,6 @@ async function spawnProcess(command, args, options) {
|
|
|
303
318
|
* allowed to pass through to the sandbox, while provider credentials
|
|
304
319
|
* (ANTHROPIC_API_KEY, OPENAI_API_KEY, etc.) are blocked for security.
|
|
305
320
|
*/
|
|
306
|
-
/** Provider env vars that should NEVER be passed to skills */
|
|
307
|
-
const PROVIDER_ENV_BLOCKLIST = new Set([
|
|
308
|
-
'ANTHROPIC_API_KEY',
|
|
309
|
-
'ANTHROPIC_TOKEN',
|
|
310
|
-
'OPENAI_API_KEY',
|
|
311
|
-
'OPENAI_TOKEN',
|
|
312
|
-
'GROQ_API_KEY',
|
|
313
|
-
'GEMINI_API_KEY',
|
|
314
|
-
'GOOGLE_API_KEY',
|
|
315
|
-
'MISTRAL_API_KEY',
|
|
316
|
-
'COHERE_API_KEY',
|
|
317
|
-
'TOGETHER_API_KEY',
|
|
318
|
-
'DEEPINFRA_API_KEY',
|
|
319
|
-
'FIREWORKS_API_KEY',
|
|
320
|
-
'OPENROUTER_API_KEY',
|
|
321
|
-
'AZURE_OPENAI_API_KEY',
|
|
322
|
-
'BEDROCK_ACCESS_KEY',
|
|
323
|
-
'BEDROCK_SECRET_KEY',
|
|
324
|
-
'NUVIRA_API_KEY', // Don't pass the agent's own key
|
|
325
|
-
]);
|
|
326
321
|
/** Session-scoped allowlist of env vars that can pass through */
|
|
327
322
|
let sessionAllowlist = new Set();
|
|
328
323
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skill-executor.js","sourceRoot":"","sources":["../../src/skills/skill-executor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,KAAK,EAAgB,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACtE,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,IAAI,EAAW,OAAO,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AA8B1C,4EAA4E;AAE5E;;GAEG;AACH,MAAM,UAAU,aAAa,CAC3B,YAAoB,EACpB,QAAiB;IAEjB,wDAAwD;IACxD,MAAM,YAAY,GAAG,YAAY,CAAC,KAAK,CACrC,uCAAuC,CACxC,CAAC;IACF,IAAI,YAAY,EAAE,CAAC;QACjB,MAAM,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAiB,CAAC;QACjD,IAAI,QAAQ,KAAK,MAAM;YAAE,OAAO,QAAQ,CAAC;IAC3C,CAAC;IAED,0BAA0B;IAC1B,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;QAC5C,IAAI,GAAG,KAAK,KAAK;YAAE,OAAO,QAAQ,CAAC;QACnC,IAAI,GAAG,KAAK,KAAK,IAAI,GAAG,KAAK,MAAM,IAAI,GAAG,KAAK,MAAM;YAAE,OAAO,MAAM,CAAC;QACrE,IAAI,GAAG,KAAK,KAAK,IAAI,GAAG,KAAK,MAAM,IAAI,GAAG,KAAK,MAAM;YAAE,OAAO,MAAM,CAAC;QACrE,IAAI,GAAG,KAAK,KAAK;YAAE,OAAO,MAAM,CAAC;QACjC,IAAI,GAAG,KAAK,KAAK;YAAE,OAAO,IAAI,CAAC;QAC/B,IAAI,GAAG,KAAK,KAAK;YAAE,OAAO,MAAM,CAAC;QACjC,IAAI,GAAG,KAAK,KAAK,IAAI,GAAG,KAAK,OAAO;YAAE,OAAO,OAAO,CAAC;IACvD,CAAC;IAED,sDAAsD;IACtD,IAAI,YAAY,CAAC,QAAQ,CAAC,uBAAuB,CAAC,IAAI,YAAY,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC;QACjG,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,IAAI,YAAY,CAAC,QAAQ,CAAC,qBAAqB,CAAC,IAAI,YAAY,CAAC,QAAQ,CAAC,oBAAoB,CAAC,IAAI,YAAY,CAAC,QAAQ,CAAC,wBAAwB,CAAC,EAAE,CAAC;QACnJ,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,IAAI,YAAY,CAAC,QAAQ,CAAC,qBAAqB,CAAC,IAAI,YAAY,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC;QAC7F,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,IAAI,YAAY,CAAC,QAAQ,CAAC,mBAAmB,CAAC,IAAI,YAAY,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;QACxF,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,YAAY,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,YAAY,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;QAC7E,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,IAAI,YAAY,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,YAAY,CAAC,QAAQ,CAAC,qBAAqB,CAAC,EAAE,CAAC;QACzF,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,IAAI,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,YAAY,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QACpG,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,IAAI,YAAY,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,YAAY,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,YAAY,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,YAAY,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;QAC1J,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,IAAI,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACnE,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,IAAI,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,YAAY,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QACtE,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAClE,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,sCAAsC;IACtC,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,4EAA4E;AAE5E;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,aAAqB,EACrB,OAA8B,EAC9B,QAAiB;IAEjB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,MAAM,OAAO,GAAG,aAAa,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;IACvD,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,MAAM,CAAC;IAC9C,MAAM,cAAc,GAAG,OAAO,CAAC,cAAc,IAAI,KAAK,GAAG,IAAI,CAAC;IAE9D,8EAA8E;IAC9E,8FAA8F;IAC9F,MAAM,WAAW,GAA2B,EAAE,CAAC;IAE/C,4DAA4D;IAC5D,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACvD,IAAI,KAAK,KAAK,SAAS,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAC5D,WAAW,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,gFAAgF;IAChF,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QAChB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YACvD,WAAW,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,4CAA4C;IAC5C,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;QACtB,0CAA0C;QAC1C,MAAM,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAC;QAEzF,MAAM,YAAY,GAAG,MAAM,oBAAoB,EAAE,CAAC;QAClD,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,CAAC;YAC5B,0DAA0D;YAC1D,OAAO,CAAC,IAAI,CAAC,uDAAuD,CAAC,CAAC;QACxE,CAAC;aAAM,CAAC;YACN,4BAA4B;YAC5B,MAAM,MAAM,GAAG,MAAM,gBAAgB,CACnC,aAAa,EACb,QAAQ,IAAI,UAAU,EACtB,WAAW,EACX,OAAO,CAAC,IAAI,EACZ;gBACE,SAAS;gBACT,WAAW,EAAE,MAAM;aACpB,CACF,CAAC;YAEF,OAAO;gBACL,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,OAAO;gBACP,UAAU,EAAE,MAAM,CAAC,UAAU;aAC9B,CAAC;QACJ,CAAC;IACH,CAAC;IAED,4BAA4B;IAC5B,yCAAyC;IACzC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,YAAY,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;IAC5E,MAAM,KAAK,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAEzC,MAAM,MAAM,GAA2B;QACrC,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,KAAK;QACX,KAAK,EAAE,KAAK;QACZ,IAAI,EAAE,KAAK;QACX,EAAE,EAAE,KAAK;QACT,IAAI,EAAE,KAAK;KACZ,CAAC;IACF,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC;IACrC,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,EAAE,QAAQ,GAAG,EAAE,CAAC,CAAC;IAC/C,MAAM,SAAS,CAAC,UAAU,EAAE,aAAa,EAAE,OAAO,CAAC,CAAC;IAEpD,IAAI,CAAC;QACH,qCAAqC;QACrC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,iBAAiB,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QAE9E,iCAAiC;QACjC,MAAM,OAAO,GAAG,CAAC,GAAG,WAAW,EAAE,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC;QAE1D,oBAAoB;QACpB,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE;YAClD,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,GAAG,EAAE,WAAW;YAChB,SAAS;YACT,cAAc;SACf,CAAC,CAAC;QAEH,OAAO;YACL,OAAO,EAAE,MAAM,CAAC,QAAQ,KAAK,CAAC;YAC9B,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,OAAO;YACP,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;SACnC,CAAC;IACJ,CAAC;YAAS,CAAC;QACT,oBAAoB;QACpB,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC;QAC3B,CAAC;QAAC,MAAM,CAAC;YACP,wBAAwB;QAC1B,CAAC;IACH,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,iBAAiB,CACxB,OAAqB,EACrB,UAAkB;IAElB,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC;IAC3C,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,QAAQ;YACX,kCAAkC;YAClC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC;QACvE,KAAK,MAAM;YACT,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC;QACjD,KAAK,OAAO;YACV,4EAA4E;YAC5E,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,OAAO,GAAG,uCAAuC,CAAC;gBACxD,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;oBACxB,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC;gBAClD,CAAC;gBACD,iDAAiD;gBACjD,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC;YACjD,CAAC;YACD,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC;QACjD,KAAK,MAAM;YACT,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC;QACjD,KAAK,IAAI;YACP,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,EAAE,CAAC;QACtD,KAAK,MAAM,CAAC,CAAC,CAAC;YACZ,IAAI,KAAK,EAAE,CAAC;gBACV,4CAA4C;gBAC5C,MAAM,UAAU,GAAG,UAAU,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;gBACvD,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,UAAU,UAAU,SAAS,UAAU,SAAS,UAAU,GAAG,CAAC,EAAE,CAAC;YAC7G,CAAC;YACD,MAAM,UAAU,GAAG,UAAU,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YACnD,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,SAAS,UAAU,OAAO,UAAU,OAAO,UAAU,EAAE,CAAC,EAAE,CAAC;QACpG,CAAC;QACD;YACE,OAAO,KAAK;gBACV,CAAC,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,UAAU,CAAC,EAAE;gBAClD,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC;IAChD,CAAC;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,YAAY,CACzB,OAAe,EACf,IAAc,EACd,OAKC;IAED,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE;YACjC,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;SAChC,CAAC,CAAC;QAEH,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,IAAI,MAAM,GAAG,KAAK,CAAC;QAEnB,iBAAiB;QACjB,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,IAAY,EAAE,EAAE;YACxC,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC9B,IAAI,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;gBAC1D,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;gBACjE,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACxB,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,KAAK,CAAC;YAClB,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,iBAAiB;QACjB,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,IAAY,EAAE,EAAE;YACxC,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC9B,IAAI,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;gBAC1D,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;YACnE,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,KAAK,CAAC;YAClB,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,cAAc;QACd,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YAC5B,MAAM,GAAG,IAAI,CAAC;YACd,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACtB,6BAA6B;YAC7B,UAAU,CAAC,GAAG,EAAE;gBACd,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;oBAClB,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBACxB,CAAC;YACH,CAAC,EAAE,IAAI,CAAC,CAAC;QACX,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;QAEtB,oBAAoB;QACpB,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;YACzB,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,IAAI,MAAM,EAAE,CAAC;gBACX,OAAO,CAAC;oBACN,MAAM;oBACN,MAAM,EAAE,MAAM,GAAG,yBAAyB;oBAC1C,QAAQ,EAAE,IAAI,IAAI,GAAG;iBACtB,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC;oBACN,MAAM;oBACN,MAAM;oBACN,QAAQ,EAAE,IAAI,IAAI,CAAC;iBACpB,CAAC,CAAC;YACL,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,gBAAgB;QAChB,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YACxB,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,MAAM,CAAC,GAAG,CAAC,CAAC;QACd,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,4EAA4E;AAE5E;;;;;;GAMG;AAEH,8DAA8D;AAC9D,MAAM,sBAAsB,GAAG,IAAI,GAAG,CAAC;IACrC,mBAAmB;IACnB,iBAAiB;IACjB,gBAAgB;IAChB,cAAc;IACd,cAAc;IACd,gBAAgB;IAChB,gBAAgB;IAChB,iBAAiB;IACjB,gBAAgB;IAChB,kBAAkB;IAClB,mBAAmB;IACnB,mBAAmB;IACnB,oBAAoB;IACpB,sBAAsB;IACtB,oBAAoB;IACpB,oBAAoB;IACpB,gBAAgB,EAAE,iCAAiC;CACpD,CAAC,CAAC;AAEH,iEAAiE;AACjE,IAAI,gBAAgB,GAAgB,IAAI,GAAG,EAAE,CAAC;AAE9C;;GAEG;AACH,MAAM,UAAU,sBAAsB,CAAC,QAAkB;IACvD,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;QAC5B,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACtC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,yBAAyB,CACvC,YAAsB;IAEtB,MAAM,MAAM,GAA2B,EAAE,CAAC;IAE1C,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;QAChC,6BAA6B;QAC7B,IAAI,sBAAsB,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,SAAS;QAE/C,qDAAqD;QACrD,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,SAAS;QAE1C,6BAA6B;QAC7B,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAChC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;QACvB,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB;IACjC,gBAAgB,CAAC,KAAK,EAAE,CAAC;AAC3B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,uBAAuB,CAAC,IAAY;IAClD,OAAO,CAAC,sBAAsB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACzE,CAAC;AAED,4EAA4E;AAE5E;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,SAAiB,EACjB,OAA8B;IAE9B,sBAAsB;IACtB,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAEnD,wDAAwD;IACxD,MAAM,WAAW,GAAG,OAAO,CAAC,KAAK,CAC/B,kDAAkD,CACnD,CAAC;IACF,MAAM,eAAe,GAAG,WAAW;QACjC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QACrE,CAAC,CAAC,EAAE,CAAC;IAEP,sCAAsC;IACtC,MAAM,GAAG,GAAG;QACV,GAAG,OAAO,CAAC,GAAG;QACd,GAAG,yBAAyB,CAAC,eAAe,CAAC;KAC9C,CAAC;IAEF,oBAAoB;IACpB,OAAO,YAAY,CAAC,OAAO,EAAE,EAAE,GAAG,OAAO,EAAE,GAAG,EAAE,EAAE,SAAS,CAAC,CAAC;AAC/D,CAAC"}
|
|
1
|
+
{"version":3,"file":"skill-executor.js","sourceRoot":"","sources":["../../src/skills/skill-executor.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/ask-user.d.ts
CHANGED
|
@@ -7,6 +7,19 @@
|
|
|
7
7
|
* Injectable via ToolContext.askUser so tests never touch a real TTY.
|
|
8
8
|
*/
|
|
9
9
|
import type { AskUserAnswer, AskUserChoice } from './registry.js';
|
|
10
|
-
/**
|
|
10
|
+
/**
|
|
11
|
+
* Render an in-loop clarification.
|
|
12
|
+
*
|
|
13
|
+
* NON-INTERACTIVE SAFETY: with no TTY there is nobody to press a key, and
|
|
14
|
+
* inquirer renders its arrow-key list and then blocks on stdin forever. Verified
|
|
15
|
+
* live — a scripted run reached this tool on step 4 and hung until it was killed,
|
|
16
|
+
* which is indistinguishable from "the agent is stuck". Any piped/CI/headless
|
|
17
|
+
* run (and the dashboard, which injects its own renderer for the same reason)
|
|
18
|
+
* must resolve instead of block, so the model can act on an answer.
|
|
19
|
+
*
|
|
20
|
+
* Mirrors the gateway's rule in `GatewayRegistry.handleInbound`: pick the first
|
|
21
|
+
* choice as a best-effort default, and say plainly that no human was reached so
|
|
22
|
+
* the model proceeds rather than asking the same thing again.
|
|
23
|
+
*/
|
|
11
24
|
export declare function renderAskUser(question: string, choices: AskUserChoice[], multiSelect: boolean): Promise<AskUserAnswer>;
|
|
12
25
|
//# sourceMappingURL=ask-user.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ask-user.d.ts","sourceRoot":"","sources":["../../src/tools/ask-user.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAElE
|
|
1
|
+
{"version":3,"file":"ask-user.d.ts","sourceRoot":"","sources":["../../src/tools/ask-user.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAElE;;;;;;;;;;;;;GAaG;AACH,wBAAsB,aAAa,CACjC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,aAAa,EAAE,EACxB,WAAW,EAAE,OAAO,GACnB,OAAO,CAAC,aAAa,CAAC,CA+CxB"}
|
package/dist/tools/ask-user.js
CHANGED
|
@@ -8,10 +8,34 @@
|
|
|
8
8
|
*/
|
|
9
9
|
import inquirer from 'inquirer';
|
|
10
10
|
import { logger } from '../utils/logger.js';
|
|
11
|
-
/**
|
|
11
|
+
/**
|
|
12
|
+
* Render an in-loop clarification.
|
|
13
|
+
*
|
|
14
|
+
* NON-INTERACTIVE SAFETY: with no TTY there is nobody to press a key, and
|
|
15
|
+
* inquirer renders its arrow-key list and then blocks on stdin forever. Verified
|
|
16
|
+
* live — a scripted run reached this tool on step 4 and hung until it was killed,
|
|
17
|
+
* which is indistinguishable from "the agent is stuck". Any piped/CI/headless
|
|
18
|
+
* run (and the dashboard, which injects its own renderer for the same reason)
|
|
19
|
+
* must resolve instead of block, so the model can act on an answer.
|
|
20
|
+
*
|
|
21
|
+
* Mirrors the gateway's rule in `GatewayRegistry.handleInbound`: pick the first
|
|
22
|
+
* choice as a best-effort default, and say plainly that no human was reached so
|
|
23
|
+
* the model proceeds rather than asking the same thing again.
|
|
24
|
+
*/
|
|
12
25
|
export async function renderAskUser(question, choices, multiSelect) {
|
|
13
26
|
console.log('');
|
|
14
27
|
logger.highlight(`💬 ${question}`);
|
|
28
|
+
if (!process.stdin.isTTY) {
|
|
29
|
+
const fallback = choices[0]?.label ?? 'skip';
|
|
30
|
+
logger.info(`↩ no interactive user attached — defaulting to "${fallback}" and continuing`);
|
|
31
|
+
console.log('');
|
|
32
|
+
return {
|
|
33
|
+
answer: multiSelect ? [fallback] : fallback,
|
|
34
|
+
index: multiSelect ? [0] : 0,
|
|
35
|
+
custom: 'no interactive user is attached to this session (piped or headless run) — ' +
|
|
36
|
+
'do not ask again; proceed with your best judgement and state the assumption you made',
|
|
37
|
+
};
|
|
38
|
+
}
|
|
15
39
|
const prompt = multiSelect
|
|
16
40
|
? {
|
|
17
41
|
type: 'checkbox',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ask-user.js","sourceRoot":"","sources":["../../src/tools/ask-user.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAG5C
|
|
1
|
+
{"version":3,"file":"ask-user.js","sourceRoot":"","sources":["../../src/tools/ask-user.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAG5C;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,QAAgB,EAChB,OAAwB,EACxB,WAAoB;IAEpB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,MAAM,CAAC,SAAS,CAAC,MAAM,QAAQ,EAAE,CAAC,CAAC;IAEnC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACzB,MAAM,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,MAAM,CAAC;QAC7C,MAAM,CAAC,IAAI,CAAC,mDAAmD,QAAQ,kBAAkB,CAAC,CAAC;QAC3F,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO;YACL,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ;YAC3C,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5B,MAAM,EACJ,4EAA4E;gBAC5E,sFAAsF;SACzF,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,WAAW;QACxB,CAAC,CAAC;YACE,IAAI,EAAE,UAAmB;YACzB,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,4DAA4D;YACrE,MAAM,EAAE,IAAI;YACZ,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;YAChE,QAAQ,EAAE,CAAC;SACZ;QACH,CAAC,CAAC;YACE,IAAI,EAAE,MAAe;YACrB,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,aAAa;YACtB,MAAM,EAAE,IAAI;YACZ,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC3B,IAAI,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK;gBAC/D,KAAK,EAAE,CAAC,CAAC,KAAK;aACf,CAAC,CAAC;YACH,QAAQ,EAAE,CAAC;SACZ,CAAC;IAEN,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAgC,MAAM,CAAC,CAAC;IAEhF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IACzD,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC;IACnF,OAAO;QACL,MAAM;QACN,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;KAChD,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Followup hygiene + continuation helpers — a LEAF module on purpose.
|
|
3
|
+
*
|
|
4
|
+
* These helpers are needed by the LOW-LATENCY surfaces (gateway registry,
|
|
5
|
+
* dashboard chat console, CLI chat) as well as the tool registry. Putting them
|
|
6
|
+
* in `tools/registry.ts` dragged the entire 110-tool registry — and every
|
|
7
|
+
* module it registers — into the gateway/dashboard import graph, which measurably
|
|
8
|
+
* slowed those paths (the gateway e2e suite went from seconds to ~100s). This
|
|
9
|
+
* module imports NOTHING, so any surface can use it for free.
|
|
10
|
+
*
|
|
11
|
+
* `tools/registry.ts` re-exports everything here, so existing importers keep
|
|
12
|
+
* working unchanged.
|
|
13
|
+
*/
|
|
14
|
+
/** A follow-up recommendation. */
|
|
15
|
+
export interface FollowupSuggestion {
|
|
16
|
+
/** The full prompt sent as the next user message when clicked. */
|
|
17
|
+
prompt: string;
|
|
18
|
+
/** Optional short display label (defaults to the prompt). */
|
|
19
|
+
label?: string;
|
|
20
|
+
}
|
|
21
|
+
/** How many followups any surface renders (the contract aims for 3). */
|
|
22
|
+
export declare const MAX_FOLLOWUPS = 3;
|
|
23
|
+
/** Cap on a followup prompt length (chars) — keeps chips / WhatsApp lines readable. */
|
|
24
|
+
export declare const MAX_FOLLOWUP_PROMPT_CHARS = 300;
|
|
25
|
+
/** Cap on a followup label length (chars). */
|
|
26
|
+
export declare const MAX_FOLLOWUP_LABEL_CHARS = 60;
|
|
27
|
+
/**
|
|
28
|
+
* Clean + structure followups before ANY surface renders them. Deterministic
|
|
29
|
+
* (no LLM): the model's raw suggestions are trimmed, decoration stripped,
|
|
30
|
+
* leaked tool JSON dropped, the previous question excluded, duplicates
|
|
31
|
+
* removed, and prompt/label lengths capped — so every surface (CLI menu,
|
|
32
|
+
* dashboard chips, gateway "Try next" list) shows the same clean 1–3 items.
|
|
33
|
+
*
|
|
34
|
+
* Returns [] when nothing survives (callers fall back to their own defaults).
|
|
35
|
+
*/
|
|
36
|
+
export declare function normalizeFollowups(raw: readonly FollowupSuggestion[] | undefined | null, opts?: {
|
|
37
|
+
question?: string;
|
|
38
|
+
limit?: number;
|
|
39
|
+
}): FollowupSuggestion[];
|
|
40
|
+
/**
|
|
41
|
+
* The machine-readable continuation marker prepended to a message the user
|
|
42
|
+
* produced by CLICKING a previously suggested followup. Without it a clicked
|
|
43
|
+
* followup arrives as an unrelated one-liner ("add a day in Hanoi") and the
|
|
44
|
+
* model can treat it as a brand-new request; with it the previous turn's
|
|
45
|
+
* context, decisions and results are explicitly in scope.
|
|
46
|
+
*/
|
|
47
|
+
export declare const FOLLOWUP_CONTINUATION_MARKER: string;
|
|
48
|
+
/**
|
|
49
|
+
* Build the message actually sent when a suggested followup is chosen: the
|
|
50
|
+
* continuation marker + the followup prompt. Idempotent — a message that
|
|
51
|
+
* already carries the marker is returned unchanged.
|
|
52
|
+
*/
|
|
53
|
+
export declare function buildFollowupContinuationPrompt(prompt: string): string;
|
|
54
|
+
/** Whether a message is (or already carries) a marked continuation. */
|
|
55
|
+
export declare function isFollowupContinuation(prompt: string): boolean;
|
|
56
|
+
/**
|
|
57
|
+
* Whether an incoming user message is one of the followups the agent just
|
|
58
|
+
* suggested (optionally from a caller-held list, e.g. a dashboard session or a
|
|
59
|
+
* gateway contact). Used by the surfaces that cannot annotate at click time
|
|
60
|
+
* (dashboard chips, WhatsApp replies) to recognise a followup and wrap it with
|
|
61
|
+
* the continuation marker.
|
|
62
|
+
*/
|
|
63
|
+
export declare function isSuggestedFollowup(prompt: string, suggestions?: readonly FollowupSuggestion[] | undefined | null): boolean;
|
|
64
|
+
//# sourceMappingURL=followup-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"followup-utils.d.ts","sourceRoot":"","sources":["../../src/tools/followup-utils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,kCAAkC;AAClC,MAAM,WAAW,kBAAkB;IACjC,kEAAkE;IAClE,MAAM,EAAE,MAAM,CAAC;IACf,6DAA6D;IAC7D,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wEAAwE;AACxE,eAAO,MAAM,aAAa,IAAI,CAAC;AAC/B,uFAAuF;AACvF,eAAO,MAAM,yBAAyB,MAAM,CAAC;AAC7C,8CAA8C;AAC9C,eAAO,MAAM,wBAAwB,KAAK,CAAC;AAwC3C;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,SAAS,kBAAkB,EAAE,GAAG,SAAS,GAAG,IAAI,EACrD,IAAI,CAAC,EAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAC3C,kBAAkB,EAAE,CA6BtB;AAED;;;;;;GAMG;AACH,eAAO,MAAM,4BAA4B,QAIW,CAAC;AAErD;;;;GAIG;AACH,wBAAgB,+BAA+B,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAKtE;AAED,uEAAuE;AACvE,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAE9D;AAOD;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,MAAM,EACd,WAAW,CAAC,EAAE,SAAS,kBAAkB,EAAE,GAAG,SAAS,GAAG,IAAI,GAC7D,OAAO,CAaT"}
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Followup hygiene + continuation helpers — a LEAF module on purpose.
|
|
3
|
+
*
|
|
4
|
+
* These helpers are needed by the LOW-LATENCY surfaces (gateway registry,
|
|
5
|
+
* dashboard chat console, CLI chat) as well as the tool registry. Putting them
|
|
6
|
+
* in `tools/registry.ts` dragged the entire 110-tool registry — and every
|
|
7
|
+
* module it registers — into the gateway/dashboard import graph, which measurably
|
|
8
|
+
* slowed those paths (the gateway e2e suite went from seconds to ~100s). This
|
|
9
|
+
* module imports NOTHING, so any surface can use it for free.
|
|
10
|
+
*
|
|
11
|
+
* `tools/registry.ts` re-exports everything here, so existing importers keep
|
|
12
|
+
* working unchanged.
|
|
13
|
+
*/
|
|
14
|
+
/** How many followups any surface renders (the contract aims for 3). */
|
|
15
|
+
export const MAX_FOLLOWUPS = 3;
|
|
16
|
+
/** Cap on a followup prompt length (chars) — keeps chips / WhatsApp lines readable. */
|
|
17
|
+
export const MAX_FOLLOWUP_PROMPT_CHARS = 300;
|
|
18
|
+
/** Cap on a followup label length (chars). */
|
|
19
|
+
export const MAX_FOLLOWUP_LABEL_CHARS = 60;
|
|
20
|
+
/** Collapse whitespace/newlines and trim — followups render on one line. */
|
|
21
|
+
function tidyFollowupText(text) {
|
|
22
|
+
return text.replace(/\s+/g, ' ').trim();
|
|
23
|
+
}
|
|
24
|
+
/** Strip one layer of wrapping quotes/backticks and a leading bullet/number. */
|
|
25
|
+
function stripFollowupDecoration(text) {
|
|
26
|
+
let out = text.trim();
|
|
27
|
+
out = out.replace(/^(?:[-*•]|\d+[.)])\s+/, ''); // "- ", "1. ", "1) "
|
|
28
|
+
out = out.replace(/^[`"'“”]+/, '').replace(/[`"'“”]+$/, '');
|
|
29
|
+
return out.trim();
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Whether a followup string is leaked tool-call scaffolding rather than a real
|
|
33
|
+
* suggestion (a raw `{"tool":"suggest_followups",...}` block, or a stray
|
|
34
|
+
* `<function=…>` tag). Such entries were the cause of raw JSON chips/lines, so
|
|
35
|
+
* they are dropped instead of rendered.
|
|
36
|
+
*/
|
|
37
|
+
function looksLikeToolScaffolding(text) {
|
|
38
|
+
const t = text.trim();
|
|
39
|
+
if (!t)
|
|
40
|
+
return true;
|
|
41
|
+
if (t.startsWith('{') || t.startsWith('['))
|
|
42
|
+
return true;
|
|
43
|
+
if (/"tool"\s*:/.test(t))
|
|
44
|
+
return true;
|
|
45
|
+
if (/<function\s*=/.test(t))
|
|
46
|
+
return true;
|
|
47
|
+
if (/<\/?think>/.test(t))
|
|
48
|
+
return true;
|
|
49
|
+
return false;
|
|
50
|
+
}
|
|
51
|
+
/** Truncate at a word boundary (never mid-word when avoidable). */
|
|
52
|
+
function truncateAtWord(text, max) {
|
|
53
|
+
if (text.length <= max)
|
|
54
|
+
return text;
|
|
55
|
+
const cut = text.slice(0, max);
|
|
56
|
+
const lastSpace = cut.lastIndexOf(' ');
|
|
57
|
+
const base = lastSpace > max * 0.6 ? cut.slice(0, lastSpace) : cut;
|
|
58
|
+
return `${base.trimEnd()}…`;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Clean + structure followups before ANY surface renders them. Deterministic
|
|
62
|
+
* (no LLM): the model's raw suggestions are trimmed, decoration stripped,
|
|
63
|
+
* leaked tool JSON dropped, the previous question excluded, duplicates
|
|
64
|
+
* removed, and prompt/label lengths capped — so every surface (CLI menu,
|
|
65
|
+
* dashboard chips, gateway "Try next" list) shows the same clean 1–3 items.
|
|
66
|
+
*
|
|
67
|
+
* Returns [] when nothing survives (callers fall back to their own defaults).
|
|
68
|
+
*/
|
|
69
|
+
export function normalizeFollowups(raw, opts) {
|
|
70
|
+
if (!raw || raw.length === 0)
|
|
71
|
+
return [];
|
|
72
|
+
const limit = Math.max(1, opts?.limit ?? MAX_FOLLOWUPS);
|
|
73
|
+
const asked = opts?.question ? tidyFollowupText(opts.question).toLowerCase() : '';
|
|
74
|
+
const seen = new Set();
|
|
75
|
+
const out = [];
|
|
76
|
+
for (const item of raw) {
|
|
77
|
+
if (!item || typeof item.prompt !== 'string')
|
|
78
|
+
continue;
|
|
79
|
+
let prompt = tidyFollowupText(stripFollowupDecoration(item.prompt));
|
|
80
|
+
if (!prompt || looksLikeToolScaffolding(prompt))
|
|
81
|
+
continue;
|
|
82
|
+
const key = prompt.toLowerCase();
|
|
83
|
+
if (asked && key === asked)
|
|
84
|
+
continue;
|
|
85
|
+
if (seen.has(key))
|
|
86
|
+
continue;
|
|
87
|
+
seen.add(key);
|
|
88
|
+
prompt = truncateAtWord(prompt, MAX_FOLLOWUP_PROMPT_CHARS);
|
|
89
|
+
// Only keep a DISTINCT label — a label equal to the prompt is noise (every
|
|
90
|
+
// surface already falls back to the prompt), and inventing one would
|
|
91
|
+
// change the shape callers/tests rely on.
|
|
92
|
+
const rawLabel = typeof item.label === 'string' ? tidyFollowupText(stripFollowupDecoration(item.label)) : '';
|
|
93
|
+
const label = rawLabel && !looksLikeToolScaffolding(rawLabel) && rawLabel.toLowerCase() !== key
|
|
94
|
+
? truncateAtWord(rawLabel, MAX_FOLLOWUP_LABEL_CHARS)
|
|
95
|
+
: undefined;
|
|
96
|
+
out.push(label ? { prompt, label } : { prompt });
|
|
97
|
+
if (out.length >= limit)
|
|
98
|
+
break;
|
|
99
|
+
}
|
|
100
|
+
return out;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* The machine-readable continuation marker prepended to a message the user
|
|
104
|
+
* produced by CLICKING a previously suggested followup. Without it a clicked
|
|
105
|
+
* followup arrives as an unrelated one-liner ("add a day in Hanoi") and the
|
|
106
|
+
* model can treat it as a brand-new request; with it the previous turn's
|
|
107
|
+
* context, decisions and results are explicitly in scope.
|
|
108
|
+
*/
|
|
109
|
+
export const FOLLOWUP_CONTINUATION_MARKER = '[CONTINUATION — this message is a follow-up to your IMMEDIATELY PRECEDING answer in this same conversation. ' +
|
|
110
|
+
'Reuse the context, decisions, and results from that turn (and any earlier turns). ' +
|
|
111
|
+
'Resolve pronouns like "it", "that", "the plan", or "the same" against that prior answer. ' +
|
|
112
|
+
'Do NOT treat this as a new, standalone request.]';
|
|
113
|
+
/**
|
|
114
|
+
* Build the message actually sent when a suggested followup is chosen: the
|
|
115
|
+
* continuation marker + the followup prompt. Idempotent — a message that
|
|
116
|
+
* already carries the marker is returned unchanged.
|
|
117
|
+
*/
|
|
118
|
+
export function buildFollowupContinuationPrompt(prompt) {
|
|
119
|
+
const body = (prompt ?? '').toString().trim();
|
|
120
|
+
if (!body)
|
|
121
|
+
return body;
|
|
122
|
+
if (body.startsWith(FOLLOWUP_CONTINUATION_MARKER))
|
|
123
|
+
return body;
|
|
124
|
+
return `${FOLLOWUP_CONTINUATION_MARKER}\n\n${body}`;
|
|
125
|
+
}
|
|
126
|
+
/** Whether a message is (or already carries) a marked continuation. */
|
|
127
|
+
export function isFollowupContinuation(prompt) {
|
|
128
|
+
return (prompt ?? '').includes(FOLLOWUP_CONTINUATION_MARKER);
|
|
129
|
+
}
|
|
130
|
+
/** Normalized comparison key for a followup prompt. */
|
|
131
|
+
function followupKey(text) {
|
|
132
|
+
return tidyFollowupText(text).toLowerCase().replace(/[.!?…]+$/, '');
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Whether an incoming user message is one of the followups the agent just
|
|
136
|
+
* suggested (optionally from a caller-held list, e.g. a dashboard session or a
|
|
137
|
+
* gateway contact). Used by the surfaces that cannot annotate at click time
|
|
138
|
+
* (dashboard chips, WhatsApp replies) to recognise a followup and wrap it with
|
|
139
|
+
* the continuation marker.
|
|
140
|
+
*/
|
|
141
|
+
export function isSuggestedFollowup(prompt, suggestions) {
|
|
142
|
+
const body = prompt ?? '';
|
|
143
|
+
if (!body.trim() || isFollowupContinuation(body))
|
|
144
|
+
return false;
|
|
145
|
+
const key = followupKey(body);
|
|
146
|
+
if (!key)
|
|
147
|
+
return false;
|
|
148
|
+
for (const s of suggestions ?? []) {
|
|
149
|
+
if (!s || typeof s.prompt !== 'string')
|
|
150
|
+
continue;
|
|
151
|
+
const candidate = followupKey(s.prompt);
|
|
152
|
+
if (candidate && (candidate === key || key.startsWith(candidate) || candidate.startsWith(key))) {
|
|
153
|
+
return true;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
return false;
|
|
157
|
+
}
|
|
158
|
+
//# sourceMappingURL=followup-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"followup-utils.js","sourceRoot":"","sources":["../../src/tools/followup-utils.ts"],"names":[],"mappings":"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"}
|