agent-nuvira 2.7.3 โ 3.0.1
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 +278 -72
- 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 +242 -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 +92 -7
- package/dist/inference/tool-call-utils.d.ts.map +1 -1
- package/dist/inference/tool-call-utils.js +203 -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/loop-skill-hint.d.ts.map +1 -1
- package/dist/tools/loop-skill-hint.js +22 -1
- package/dist/tools/loop-skill-hint.js.map +1 -1
- 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
|
@@ -28,7 +28,21 @@ export interface CaptureResult {
|
|
|
28
28
|
setupSkipped: boolean;
|
|
29
29
|
/** Vars that were successfully stored. */
|
|
30
30
|
storedVars: string[];
|
|
31
|
+
/**
|
|
32
|
+
* Vars REFUSED because they are provider credentials (see
|
|
33
|
+
* `isProviderEnvBlocked`). Reported separately from `missingNames` so a
|
|
34
|
+
* caller can say *why* nothing was stored instead of silently looping.
|
|
35
|
+
*/
|
|
36
|
+
blockedNames?: string[];
|
|
31
37
|
}
|
|
38
|
+
/** Why a save/delete did not take effect (absent when it succeeded). */
|
|
39
|
+
export type SecretWriteReason =
|
|
40
|
+
/** The var is a provider credential โ configure it as a provider instead. */
|
|
41
|
+
'provider-credential'
|
|
42
|
+
/** The name is not a valid env var identifier. */
|
|
43
|
+
| 'invalid-name'
|
|
44
|
+
/** The write/read failed at the filesystem layer. */
|
|
45
|
+
| 'write-failed';
|
|
32
46
|
/**
|
|
33
47
|
* Load all env vars from the .env file.
|
|
34
48
|
*/
|
|
@@ -47,9 +61,39 @@ export declare function getEnvVarValue(varName: string): string;
|
|
|
47
61
|
* Save or update a value in ~/.nuvira/.env (or ~/.nuvira/.env).
|
|
48
62
|
* Preserves existing lines, adds new ones at the end.
|
|
49
63
|
*/
|
|
50
|
-
export declare function saveEnvValue(key: string, value: string
|
|
64
|
+
export declare function saveEnvValue(key: string, value: string, opts?: {
|
|
65
|
+
/**
|
|
66
|
+
* Permit storing a provider credential here. Defaults to FALSE: this is the
|
|
67
|
+
* SKILL-secret path, and a provider credential stored here would be
|
|
68
|
+
* advertised as available to skills while `skill-executor` deliberately
|
|
69
|
+
* blocks it from ever reaching them. Provider keys belong in provider
|
|
70
|
+
* setup (dashboard AdminPanel / `nuvira models`), where the router also
|
|
71
|
+
* learns the provider is credentialed.
|
|
72
|
+
*/
|
|
73
|
+
allowProviderCredential?: boolean;
|
|
74
|
+
}): {
|
|
51
75
|
success: boolean;
|
|
52
76
|
path: string;
|
|
77
|
+
reason?: SecretWriteReason;
|
|
78
|
+
};
|
|
79
|
+
/**
|
|
80
|
+
* Remove an env var from the .env file.
|
|
81
|
+
*
|
|
82
|
+
* Rewrites the file keeping every other line โ comments, blank lines and
|
|
83
|
+
* ordering โ byte-for-byte, so deleting one secret never reshuffles the file
|
|
84
|
+
* a user hand-edited. Removes `KEY=...` in both plain and `export KEY=` forms,
|
|
85
|
+
* and drops only the FIRST match (a duplicate later in the file is a different
|
|
86
|
+
* line, and removing it too would be surprising).
|
|
87
|
+
*
|
|
88
|
+
* A missing file, or a key that was never there, is a SUCCESS: the caller's
|
|
89
|
+
* intent ("this var should not be set") already holds, and reporting failure
|
|
90
|
+
* would make the dashboard surface a pointless error.
|
|
91
|
+
*/
|
|
92
|
+
export declare function deleteEnvValue(key: string): {
|
|
93
|
+
success: boolean;
|
|
94
|
+
path: string;
|
|
95
|
+
removed: boolean;
|
|
96
|
+
reason?: SecretWriteReason;
|
|
53
97
|
};
|
|
54
98
|
/**
|
|
55
99
|
* Capture missing env vars interactively.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"secret-capture.d.ts","sourceRoot":"","sources":["../../src/skills/secret-capture.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;
|
|
1
|
+
{"version":3,"file":"secret-capture.d.ts","sourceRoot":"","sources":["../../src/skills/secret-capture.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AASH,MAAM,WAAW,WAAW;IAC1B,8CAA8C;IAC9C,IAAI,EAAE,MAAM,CAAC;IACb,wEAAwE;IACxE,MAAM,EAAE,MAAM,CAAC;IACf,oDAAoD;IACpD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,uCAAuC;IACvC,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,qDAAqD;IACrD,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,iDAAiD;IACjD,YAAY,EAAE,OAAO,CAAC;IACtB,0CAA0C;IAC1C,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,wEAAwE;AACxE,MAAM,MAAM,iBAAiB;AAC3B,6EAA6E;AAC3E,qBAAqB;AACvB,kDAAkD;GAChD,cAAc;AAChB,qDAAqD;GACnD,cAAc,CAAC;AAwCnB;;GAEG;AACH,wBAAgB,WAAW,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAapD;AAoBD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAO1D;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAItD;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAC1B,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EACb,IAAI,GAAE;IACJ;;;;;;;OAOG;IACH,uBAAuB,CAAC,EAAE,OAAO,CAAC;CAC9B,GACL;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,iBAAiB,CAAA;CAAE,CA+DhE;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,iBAAiB,CAAA;CAAE,CAwC5H;AA4CD;;;;;;;GAOG;AACH,wBAAsB,cAAc,CAClC,SAAS,EAAE,MAAM,EACjB,cAAc,EAAE,WAAW,EAAE,EAC7B,OAAO,GAAE,KAAK,GAAG,WAAmB,GACnC,OAAO,CAAC,aAAa,CAAC,CA8ExB;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,eAAe,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,GACtG,WAAW,EAAE,CA2Bf;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,eAAe,EAAE,MAAM,EAAE,GACxB,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,OAAO,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAc7D"}
|
|
@@ -12,25 +12,20 @@
|
|
|
12
12
|
* Hermes reference: tools/skills_tool.py:_capture_required_environment_variables()
|
|
13
13
|
*/
|
|
14
14
|
import { existsSync, readFileSync } from 'fs';
|
|
15
|
-
import {
|
|
16
|
-
import {
|
|
17
|
-
import { homedir } from 'os';
|
|
15
|
+
import { resolveNuviraEnvFile } from '../config/paths.js';
|
|
16
|
+
import { isProviderEnvBlocked } from '../config/provider-env.js';
|
|
18
17
|
import { logger } from '../utils/logger.js';
|
|
19
18
|
// โโโ Env File Resolution โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
|
20
19
|
/**
|
|
21
20
|
* Resolve the path to the .env file.
|
|
22
|
-
* Priority: NUVIRA_ENV_FILE
|
|
21
|
+
* Priority: NUVIRA_ENV_FILE / BUFF_ENV_FILE > <active config dir>/.env
|
|
22
|
+
*
|
|
23
|
+
* Delegates to the shared resolver so secret capture agrees with loadEnv() and
|
|
24
|
+
* honours `NUVIRA_CONFIG_DIR` โ a hardcoded `~/.nuvira/.env` here meant an
|
|
25
|
+
* isolated process could read AND write the real profile's credentials.
|
|
23
26
|
*/
|
|
24
27
|
function envFilePath() {
|
|
25
|
-
|
|
26
|
-
return process.env.NUVIRA_ENV_FILE;
|
|
27
|
-
const override = envBuff('ENV_FILE');
|
|
28
|
-
if (override && override.trim().length > 0)
|
|
29
|
-
return override;
|
|
30
|
-
const nuviraEnv = join(homedir(), '.nuvira', '.env');
|
|
31
|
-
if (existsSync(nuviraEnv))
|
|
32
|
-
return nuviraEnv;
|
|
33
|
-
return join(resolveNuviraHome(), '.env');
|
|
28
|
+
return resolveNuviraEnvFile();
|
|
34
29
|
}
|
|
35
30
|
// โโโ Core Functions โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
|
36
31
|
/**
|
|
@@ -124,13 +119,21 @@ export function getEnvVarValue(varName) {
|
|
|
124
119
|
* Save or update a value in ~/.nuvira/.env (or ~/.nuvira/.env).
|
|
125
120
|
* Preserves existing lines, adds new ones at the end.
|
|
126
121
|
*/
|
|
127
|
-
export function saveEnvValue(key, value) {
|
|
122
|
+
export function saveEnvValue(key, value, opts = {}) {
|
|
128
123
|
const path = envFilePath();
|
|
129
124
|
const cleaned = value.replace(/[\r\n]/g, '');
|
|
130
125
|
// Validate env var name
|
|
131
126
|
if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(key)) {
|
|
132
127
|
logger.error(`Invalid environment variable name: ${key}`);
|
|
133
|
-
return { success: false, path };
|
|
128
|
+
return { success: false, path, reason: 'invalid-name' };
|
|
129
|
+
}
|
|
130
|
+
// Provider credentials are refused unless a caller explicitly opts in.
|
|
131
|
+
// Without this the dashboard's ๐ badge was decorative: the endpoint accepted
|
|
132
|
+
// the key and wrote it, so a "blocked" row could be saved through the API.
|
|
133
|
+
if (!opts.allowProviderCredential && isProviderEnvBlocked(key)) {
|
|
134
|
+
logger.warn(`Refusing to store ${key} as a skill secret โ it is a provider credential. ` +
|
|
135
|
+
'Configure it through provider setup instead.');
|
|
136
|
+
return { success: false, path, reason: 'provider-credential' };
|
|
134
137
|
}
|
|
135
138
|
const ENV_LINE_RE = /^(export\s+)?([A-Za-z_][A-Za-z0-9_]*)\s*=/;
|
|
136
139
|
const pending = new Map();
|
|
@@ -170,7 +173,57 @@ export function saveEnvValue(key, value) {
|
|
|
170
173
|
}
|
|
171
174
|
catch (err) {
|
|
172
175
|
logger.error(`Failed to write env file: ${err}`);
|
|
173
|
-
return { success: false, path };
|
|
176
|
+
return { success: false, path, reason: 'write-failed' };
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Remove an env var from the .env file.
|
|
181
|
+
*
|
|
182
|
+
* Rewrites the file keeping every other line โ comments, blank lines and
|
|
183
|
+
* ordering โ byte-for-byte, so deleting one secret never reshuffles the file
|
|
184
|
+
* a user hand-edited. Removes `KEY=...` in both plain and `export KEY=` forms,
|
|
185
|
+
* and drops only the FIRST match (a duplicate later in the file is a different
|
|
186
|
+
* line, and removing it too would be surprising).
|
|
187
|
+
*
|
|
188
|
+
* A missing file, or a key that was never there, is a SUCCESS: the caller's
|
|
189
|
+
* intent ("this var should not be set") already holds, and reporting failure
|
|
190
|
+
* would make the dashboard surface a pointless error.
|
|
191
|
+
*/
|
|
192
|
+
export function deleteEnvValue(key) {
|
|
193
|
+
const path = envFilePath();
|
|
194
|
+
if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(key)) {
|
|
195
|
+
return { success: false, path, removed: false, reason: 'invalid-name' };
|
|
196
|
+
}
|
|
197
|
+
if (!existsSync(path)) {
|
|
198
|
+
return { success: true, path, removed: false };
|
|
199
|
+
}
|
|
200
|
+
const ENV_LINE_RE = /^(export\s+)?([A-Za-z_][A-Za-z0-9_]*)\s*=/;
|
|
201
|
+
const lines = readFileSync(path, 'utf-8').split(/\r?\n/);
|
|
202
|
+
const kept = [];
|
|
203
|
+
let removed = false;
|
|
204
|
+
for (const rawLine of lines) {
|
|
205
|
+
const m = rawLine.match(ENV_LINE_RE);
|
|
206
|
+
if (!removed && m && m[2] === key) {
|
|
207
|
+
removed = true;
|
|
208
|
+
continue;
|
|
209
|
+
}
|
|
210
|
+
kept.push(rawLine);
|
|
211
|
+
}
|
|
212
|
+
if (!removed) {
|
|
213
|
+
return { success: true, path, removed: false };
|
|
214
|
+
}
|
|
215
|
+
try {
|
|
216
|
+
const { writeFileSync } = require('fs');
|
|
217
|
+
// Drop the trailing empty element left by the final newline, then re-add
|
|
218
|
+
// exactly one โ matching saveEnvValue's file shape.
|
|
219
|
+
const body = kept.filter((l, i) => !(i === kept.length - 1 && l === '')).join('\n');
|
|
220
|
+
writeFileSync(path, body.length > 0 ? `${body}\n` : '', 'utf-8');
|
|
221
|
+
logger.debug(`Removed ${key} from ${path}`);
|
|
222
|
+
return { success: true, path, removed: true };
|
|
223
|
+
}
|
|
224
|
+
catch (err) {
|
|
225
|
+
logger.error(`Failed to write env file: ${err}`);
|
|
226
|
+
return { success: false, path, removed: false, reason: 'write-failed' };
|
|
174
227
|
}
|
|
175
228
|
}
|
|
176
229
|
// โโโ Interactive Capture โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
|
@@ -218,10 +271,11 @@ async function promptCli(entries) {
|
|
|
218
271
|
*/
|
|
219
272
|
export async function captureSecrets(skillName, missingEntries, surface = 'cli') {
|
|
220
273
|
if (missingEntries.length === 0) {
|
|
221
|
-
return { missingNames: [], setupSkipped: false, storedVars: [] };
|
|
274
|
+
return { missingNames: [], setupSkipped: false, storedVars: [], blockedNames: [] };
|
|
222
275
|
}
|
|
223
276
|
const storedVars = [];
|
|
224
277
|
const missingNames = [];
|
|
278
|
+
const blockedNames = [];
|
|
225
279
|
let setupSkipped = false;
|
|
226
280
|
// Filter out optional vars that aren't set โ we'll prompt but allow skip
|
|
227
281
|
const requiredMissing = missingEntries.filter(e => !e.optional);
|
|
@@ -244,7 +298,16 @@ export async function captureSecrets(skillName, missingEntries, surface = 'cli')
|
|
|
244
298
|
for (const entry of missingEntries) {
|
|
245
299
|
const value = answers.get(entry.name);
|
|
246
300
|
if (value && value.length > 0) {
|
|
247
|
-
saveEnvValue(entry.name, value);
|
|
301
|
+
const saved = saveEnvValue(entry.name, value);
|
|
302
|
+
if (!saved.success) {
|
|
303
|
+
// Refused (provider credential / invalid name). Do not claim it was
|
|
304
|
+
// stored, and do not silently set it in-process either โ that would
|
|
305
|
+
// make the refusal meaningless for this run.
|
|
306
|
+
blockedNames.push(entry.name);
|
|
307
|
+
missingNames.push(entry.name);
|
|
308
|
+
logger.warn(`${entry.name} was not stored (${saved.reason ?? 'refused'})`);
|
|
309
|
+
continue;
|
|
310
|
+
}
|
|
248
311
|
process.env[entry.name] = value; // Also set in current process
|
|
249
312
|
storedVars.push(entry.name);
|
|
250
313
|
logger.success(`Saved ${entry.name}`);
|
|
@@ -278,7 +341,7 @@ export async function captureSecrets(skillName, missingEntries, surface = 'cli')
|
|
|
278
341
|
console.log('');
|
|
279
342
|
}
|
|
280
343
|
}
|
|
281
|
-
return { missingNames, setupSkipped, storedVars };
|
|
344
|
+
return { missingNames, setupSkipped, storedVars, blockedNames };
|
|
282
345
|
}
|
|
283
346
|
/**
|
|
284
347
|
* Check which required env vars are missing for a skill.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"secret-capture.js","sourceRoot":"","sources":["../../src/skills/secret-capture.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"secret-capture.js","sourceRoot":"","sources":["../../src/skills/secret-capture.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAC9C,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAuC5C,6EAA6E;AAE7E;;;;;;;GAOG;AACH,SAAS,WAAW;IAClB,OAAO,oBAAoB,EAAE,CAAC;AAChC,CAAC;AAED,6EAA6E;AAE7E;;GAEG;AACH,SAAS,YAAY,CAAC,IAAY;IAChC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAC5B,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IACrD,MAAM,IAAI,GAAG,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;IACpF,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC7B,IAAI,EAAE,KAAK,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAC3B,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACrC,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACtC,2BAA2B;IAC3B,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QAC9C,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;QACnD,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC7B,CAAC;IACD,uBAAuB;IACvB,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACjC,IAAI,IAAI,KAAK,CAAC,CAAC;QAAE,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;IACrD,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AACtB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW;IACzB,MAAM,IAAI,GAAG,WAAW,EAAE,CAAC;IAC3B,MAAM,IAAI,GAA2B,EAAE,CAAC;IACxC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACnC,IAAI,CAAC;QACH,KAAK,MAAM,OAAO,IAAI,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;YACjE,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;YACrC,IAAI,MAAM;gBAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,2CAA2C;IAC7C,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;GAGG;AACH,SAAS,gBAAgB,CAAC,OAAe;IACvC,MAAM,IAAI,GAAG,WAAW,EAAE,CAAC;IAC3B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACnC,IAAI,CAAC;QACH,KAAK,MAAM,OAAO,IAAI,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;YACjE,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;YACrC,IAAI,MAAM,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,OAAO;gBAAE,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;QACxD,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,SAAS;IACX,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,OAAe;IAC/C,+DAA+D;IAC/D,MAAM,SAAS,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAC5C,IAAI,SAAS,KAAK,IAAI,IAAI,SAAS,KAAK,EAAE;QAAE,OAAO,IAAI,CAAC;IACxD,2BAA2B;IAC3B,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACtC,OAAO,OAAO,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAClD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,OAAe;IAC5C,MAAM,SAAS,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAC5C,IAAI,SAAS,KAAK,IAAI,IAAI,SAAS,KAAK,EAAE;QAAE,OAAO,SAAS,CAAC;IAC7D,OAAO,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;AACpC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY,CAC1B,GAAW,EACX,KAAa,EACb,OAUI,EAAE;IAEN,MAAM,IAAI,GAAG,WAAW,EAAE,CAAC;IAC3B,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;IAE7C,wBAAwB;IACxB,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QAC1C,MAAM,CAAC,KAAK,CAAC,sCAAsC,GAAG,EAAE,CAAC,CAAC;QAC1D,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC;IAC1D,CAAC;IAED,uEAAuE;IACvE,8EAA8E;IAC9E,2EAA2E;IAC3E,IAAI,CAAC,IAAI,CAAC,uBAAuB,IAAI,oBAAoB,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/D,MAAM,CAAC,IAAI,CACT,qBAAqB,GAAG,oDAAoD;YAC5E,8CAA8C,CAC/C,CAAC;QACF,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,qBAAqB,EAAE,CAAC;IACjE,CAAC;IAED,MAAM,WAAW,GAAG,2CAA2C,CAAC;IAChE,MAAM,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC1C,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IAC1B,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACrB,KAAK,MAAM,OAAO,IAAI,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;YACjE,MAAM,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YACrC,IAAI,CAAC,EAAE,CAAC;gBACN,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBACf,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;oBACnB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;oBACrC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;oBAClB,SAAS;gBACX,CAAC;YACH,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACtB,CAAC;IACH,CAAC;IAED,8BAA8B;IAC9B,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,OAAO,EAAE,CAAC;QAC7B,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC1B,CAAC;IAED,0BAA0B;IAC1B,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnD,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACpC,IAAI,CAAC;QACH,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAChD,CAAC;IAAC,MAAM,CAAC;QACP,SAAS;IACX,CAAC;IAED,IAAI,CAAC;QACH,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC;QACtD,MAAM,CAAC,KAAK,CAAC,SAAS,GAAG,OAAO,IAAI,EAAE,CAAC,CAAC;QACxC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IACjC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,KAAK,CAAC,6BAA6B,GAAG,EAAE,CAAC,CAAC;QACjD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC;IAC1D,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,cAAc,CAAC,GAAW;IACxC,MAAM,IAAI,GAAG,WAAW,EAAE,CAAC;IAE3B,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QAC1C,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC;IAC1E,CAAC;IACD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACtB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IACjD,CAAC;IAED,MAAM,WAAW,GAAG,2CAA2C,CAAC;IAChE,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACzD,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,IAAI,OAAO,GAAG,KAAK,CAAC;IAEpB,KAAK,MAAM,OAAO,IAAI,KAAK,EAAE,CAAC;QAC5B,MAAM,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QACrC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;YAClC,OAAO,GAAG,IAAI,CAAC;YACf,SAAS;QACX,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACrB,CAAC;IAED,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IACjD,CAAC;IAED,IAAI,CAAC;QACH,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QACxC,yEAAyE;QACzE,oDAAoD;QACpD,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpF,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QACjE,MAAM,CAAC,KAAK,CAAC,WAAW,GAAG,SAAS,IAAI,EAAE,CAAC,CAAC;QAC5C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAChD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,KAAK,CAAC,6BAA6B,GAAG,EAAE,CAAC,CAAC;QACjD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC;IAC1E,CAAC;AACH,CAAC;AAED,6EAA6E;AAE7E;;;GAGG;AACH,KAAK,UAAU,SAAS,CACtB,OAAsB;IAEtB,MAAM,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;IAE1C,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC;QAE1C,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACxC,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU;YAC3C,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,OAAO,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9D,yCAAyC;YACzC,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAa,EAAE,EAAE;gBACxD,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACxC,OAAO,GAAG,KAAK,CAAC,IAAI,sDAAsD,CAAC;gBAC7E,CAAC;gBACD,OAAO,IAAI,CAAC;YACd,CAAC;SACF,CAAC,CAAC,CAAC;QAEJ,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACxD,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACjC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACzD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;YACxC,CAAC;QACH,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,gDAAgD;QAChD,MAAM,CAAC,KAAK,CAAC,sBAAsB,GAAG,EAAE,CAAC,CAAC;IAC5C,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,SAAiB,EACjB,cAA6B,EAC7B,UAA+B,KAAK;IAEpC,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAChC,OAAO,EAAE,YAAY,EAAE,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC;IACrF,CAAC;IAED,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,MAAM,YAAY,GAAa,EAAE,CAAC;IAClC,MAAM,YAAY,GAAa,EAAE,CAAC;IAClC,IAAI,YAAY,GAAG,KAAK,CAAC;IAEzB,yEAAyE;IACzE,MAAM,eAAe,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IAChE,MAAM,eAAe,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IAE/D,gCAAgC;IAChC,IAAI,OAAO,KAAK,KAAK,EAAE,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,MAAM,CAAC,IAAI,CAAC,aAAa,SAAS,mCAAmC,CAAC,CAAC;QACvE,KAAK,MAAM,KAAK,IAAI,cAAc,EAAE,CAAC;YACnC,MAAM,GAAG,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC;YACzD,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,CAAC,IAAI,IAAI,GAAG,EAAE,CAAC,CAAC;YACzC,IAAI,KAAK,CAAC,IAAI;gBAAE,OAAO,CAAC,GAAG,CAAC,UAAU,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;QACtD,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;IAED,oBAAoB;IACpB,IAAI,OAAO,KAAK,KAAK,EAAE,CAAC;QACtB,MAAM,OAAO,GAAG,MAAM,SAAS,CAAC,cAAc,CAAC,CAAC;QAEhD,KAAK,MAAM,KAAK,IAAI,cAAc,EAAE,CAAC;YACnC,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACtC,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC9B,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;gBAC9C,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;oBACnB,oEAAoE;oBACpE,oEAAoE;oBACpE,6CAA6C;oBAC7C,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;oBAC9B,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;oBAC9B,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,oBAAoB,KAAK,CAAC,MAAM,IAAI,SAAS,GAAG,CAAC,CAAC;oBAC3E,SAAS;gBACX,CAAC;gBACD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,8BAA8B;gBAC/D,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC5B,MAAM,CAAC,OAAO,CAAC,SAAS,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;YACxC,CAAC;iBAAM,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;gBAC1B,sCAAsC;gBACtC,MAAM,CAAC,IAAI,CAAC,wBAAwB,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;YACpD,CAAC;iBAAM,CAAC;gBACN,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAChC,CAAC;QACH,CAAC;IACH,CAAC;SAAM,CAAC;QACN,iEAAiE;QACjE,wDAAwD;QACxD,KAAK,MAAM,KAAK,IAAI,cAAc,EAAE,CAAC;YACnC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAChC,CAAC;IACH,CAAC;IAED,4DAA4D;IAC5D,MAAM,oBAAoB,GAAG,YAAY,CAAC,MAAM,CAC9C,IAAI,CAAC,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CACnD,CAAC;IACF,IAAI,oBAAoB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpC,YAAY,GAAG,IAAI,CAAC;QACpB,IAAI,OAAO,KAAK,KAAK,EAAE,CAAC;YACtB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChB,MAAM,CAAC,IAAI,CAAC,iDAAiD,SAAS,IAAI,CAAC,CAAC;YAC5E,KAAK,MAAM,IAAI,IAAI,oBAAoB,EAAE,CAAC;gBACxC,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,YAAY,CAAC,CAAC;YAC7C,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAED,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC;AAClE,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAChC,eAAuG;IAEvG,MAAM,OAAO,GAAkB,EAAE,CAAC;IAElC,KAAK,MAAM,KAAK,IAAI,eAAe,EAAE,CAAC;QACpC,IAAI,IAAY,CAAC;QACjB,IAAI,MAAc,CAAC;QACnB,IAAI,IAAwB,CAAC;QAC7B,IAAI,QAAiB,CAAC;QAEtB,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,IAAI,GAAG,KAAK,CAAC;YACb,MAAM,GAAG,mBAAmB,IAAI,GAAG,CAAC;YACpC,IAAI,GAAG,SAAS,CAAC;YACjB,QAAQ,GAAG,KAAK,CAAC;QACnB,CAAC;aAAM,CAAC;YACN,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;YAClB,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI,mBAAmB,IAAI,GAAG,CAAC;YACpD,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;YAClB,QAAQ,GAAG,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC;QACrC,CAAC;QAED,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7B,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;QACjD,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAC7B,eAAyB;IAEzB,OAAO,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;QAChC,MAAM,GAAG,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;QACpC,IAAI,WAA+B,CAAC;QACpC,IAAI,GAAG,EAAE,CAAC;YACR,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;YACnC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACrB,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5D,CAAC;iBAAM,CAAC;gBACN,WAAW,GAAG,KAAK,CAAC;YACtB,CAAC;QACH,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,WAAW,EAAE,CAAC;IACpC,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,79 @@
|
|
|
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
|
+
/** One row of the env-var editor. Structurally the component's `EnvVar`. */
|
|
31
|
+
export interface SkillEnvVarRow {
|
|
32
|
+
/** Variable name. */
|
|
33
|
+
name: string;
|
|
34
|
+
/** Masked value when set ('' when unset โ a real value never leaves here). */
|
|
35
|
+
value: string;
|
|
36
|
+
/** Whether a non-empty value is persisted or present in the environment. */
|
|
37
|
+
isSet: boolean;
|
|
38
|
+
/** Installed skill that declares this var (absent for a hand-set secret). */
|
|
39
|
+
requiredBy?: string;
|
|
40
|
+
/** Skill description, used as the row's help text. */
|
|
41
|
+
description?: string;
|
|
42
|
+
/** True for provider credentials โ shown ๐ and not editable in this editor. */
|
|
43
|
+
isProviderCredential?: boolean;
|
|
44
|
+
}
|
|
45
|
+
export interface SkillEnvInventoryOptions {
|
|
46
|
+
/** Project root to scan for `.agents/skills` (defaults to cwd). */
|
|
47
|
+
projectRoot?: string;
|
|
48
|
+
/** Home dir to scan for `~/.nuvira/skills` (defaults to the real home). */
|
|
49
|
+
home?: string;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Build the editor's row set:
|
|
53
|
+
*
|
|
54
|
+
* 1. Every var REQUIRED by an installed hub skill (set or not) โ these are
|
|
55
|
+
* the rows a user needs to act on, so an unset one must appear as โ.
|
|
56
|
+
* 2. Every persisted .env var that is not a provider credential and not
|
|
57
|
+
* platform-owned โ hand-set skill secrets, which would otherwise be
|
|
58
|
+
* invisible once written.
|
|
59
|
+
* 3. Provider credentials that are present in the file, flagged so the user
|
|
60
|
+
* sees the boundary instead of silently wondering where the key went.
|
|
61
|
+
*
|
|
62
|
+
* Never throws: a missing skills root or unreadable .env simply contributes
|
|
63
|
+
* nothing, because a broken inventory must not blank the page.
|
|
64
|
+
*/
|
|
65
|
+
export declare function readSkillEnvInventory(opts?: SkillEnvInventoryOptions): SkillEnvVarRow[];
|
|
66
|
+
/**
|
|
67
|
+
* Can a SKILL actually consume this variable right now?
|
|
68
|
+
*
|
|
69
|
+
* This is what the editor's "๐งช Test" button asks โ not "is this API key
|
|
70
|
+
* valid" (which would need a paid provider call per keystroke), but the
|
|
71
|
+
* question the panel can answer truthfully: *will a skill run see this value?*
|
|
72
|
+
* That is exactly the set of conditions `skill-tool` checks before executing,
|
|
73
|
+
* so the verdict matches what execution will really do.
|
|
74
|
+
*/
|
|
75
|
+
export declare function probeSkillEnvVar(name: string): {
|
|
76
|
+
usable: boolean;
|
|
77
|
+
detail: string;
|
|
78
|
+
};
|
|
79
|
+
//# sourceMappingURL=skill-env-inventory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-env-inventory.d.ts","sourceRoot":"","sources":["../../src/skills/skill-env-inventory.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAOH,4EAA4E;AAC5E,MAAM,WAAW,cAAc;IAC7B,qBAAqB;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,8EAA8E;IAC9E,KAAK,EAAE,MAAM,CAAC;IACd,4EAA4E;IAC5E,KAAK,EAAE,OAAO,CAAC;IACf,6EAA6E;IAC7E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,sDAAsD;IACtD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gFAAgF;IAChF,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAChC;AAsBD,MAAM,WAAW,wBAAwB;IACvC,mEAAmE;IACnE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,2EAA2E;IAC3E,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,GAAE,wBAA6B,GAClC,cAAc,EAAE,CAgElB;AAED;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAyBlF"}
|
|
@@ -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
|
/**
|