@caupulican/pi-adaptative 0.85.8 → 0.86.2
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/CHANGELOG.md +42 -0
- package/dist/core/agent-paths.d.ts +6 -3
- package/dist/core/agent-paths.d.ts.map +1 -1
- package/dist/core/agent-paths.js +10 -3
- package/dist/core/agent-paths.js.map +1 -1
- package/dist/core/agent-session.d.ts +5 -2
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +7 -1
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/autonomy/bounded-completion.d.ts.map +1 -1
- package/dist/core/autonomy/bounded-completion.js +19 -8
- package/dist/core/autonomy/bounded-completion.js.map +1 -1
- package/dist/core/autonomy/lane-tool-surface.d.ts +11 -5
- package/dist/core/autonomy/lane-tool-surface.d.ts.map +1 -1
- package/dist/core/autonomy/lane-tool-surface.js +34 -8
- package/dist/core/autonomy/lane-tool-surface.js.map +1 -1
- package/dist/core/autonomy/subagent-prompt.d.ts +3 -3
- package/dist/core/autonomy/subagent-prompt.js +9 -9
- package/dist/core/autonomy/subagent-prompt.js.map +1 -1
- package/dist/core/background-lane-controller.d.ts +10 -8
- package/dist/core/background-lane-controller.d.ts.map +1 -1
- package/dist/core/background-lane-controller.js +23 -13
- package/dist/core/background-lane-controller.js.map +1 -1
- package/dist/core/bash-execution-controller.d.ts +4 -0
- package/dist/core/bash-execution-controller.d.ts.map +1 -1
- package/dist/core/bash-execution-controller.js +11 -4
- package/dist/core/bash-execution-controller.js.map +1 -1
- package/dist/core/bash-executor.d.ts +2 -0
- package/dist/core/bash-executor.d.ts.map +1 -1
- package/dist/core/bash-executor.js +2 -1
- package/dist/core/bash-executor.js.map +1 -1
- package/dist/core/capability-contract.d.ts +1 -1
- package/dist/core/capability-contract.d.ts.map +1 -1
- package/dist/core/capability-contract.js +0 -1
- package/dist/core/capability-contract.js.map +1 -1
- package/dist/core/default-tool-surface.d.ts +1 -0
- package/dist/core/default-tool-surface.d.ts.map +1 -1
- package/dist/core/default-tool-surface.js +3 -2
- package/dist/core/default-tool-surface.js.map +1 -1
- package/dist/core/delegation/worker-agent-control-coordinator.d.ts +27 -8
- package/dist/core/delegation/worker-agent-control-coordinator.d.ts.map +1 -1
- package/dist/core/delegation/worker-agent-control-coordinator.js +191 -33
- package/dist/core/delegation/worker-agent-control-coordinator.js.map +1 -1
- package/dist/core/delegation/worker-agent-control.d.ts +45 -6
- package/dist/core/delegation/worker-agent-control.d.ts.map +1 -1
- package/dist/core/delegation/worker-agent-control.js +110 -13
- package/dist/core/delegation/worker-agent-control.js.map +1 -1
- package/dist/core/delegation/worker-attempt-executor.d.ts.map +1 -1
- package/dist/core/delegation/worker-attempt-executor.js +177 -158
- package/dist/core/delegation/worker-attempt-executor.js.map +1 -1
- package/dist/core/delegation/worker-authority-resolver.d.ts +23 -0
- package/dist/core/delegation/worker-authority-resolver.d.ts.map +1 -0
- package/dist/core/delegation/worker-authority-resolver.js +128 -0
- package/dist/core/delegation/worker-authority-resolver.js.map +1 -0
- package/dist/core/delegation/worker-conversation-store.d.ts.map +1 -1
- package/dist/core/delegation/worker-conversation-store.js +1 -1
- package/dist/core/delegation/worker-conversation-store.js.map +1 -1
- package/dist/core/delegation/worker-delegation-controller.d.ts +7 -1
- package/dist/core/delegation/worker-delegation-controller.d.ts.map +1 -1
- package/dist/core/delegation/worker-delegation-controller.js +260 -87
- package/dist/core/delegation/worker-delegation-controller.js.map +1 -1
- package/dist/core/delegation/worker-delegation-request.d.ts +25 -4
- package/dist/core/delegation/worker-delegation-request.d.ts.map +1 -1
- package/dist/core/delegation/worker-delegation-request.js +90 -1
- package/dist/core/delegation/worker-delegation-request.js.map +1 -1
- package/dist/core/delegation/worker-execution-policy.d.ts +2 -0
- package/dist/core/delegation/worker-execution-policy.d.ts.map +1 -1
- package/dist/core/delegation/worker-execution-policy.js +22 -12
- package/dist/core/delegation/worker-execution-policy.js.map +1 -1
- package/dist/core/delegation/worker-lifecycle.d.ts +1 -0
- package/dist/core/delegation/worker-lifecycle.d.ts.map +1 -1
- package/dist/core/delegation/worker-lifecycle.js +4 -2
- package/dist/core/delegation/worker-lifecycle.js.map +1 -1
- package/dist/core/delegation/worker-profile-resolver.d.ts +0 -2
- package/dist/core/delegation/worker-profile-resolver.d.ts.map +1 -1
- package/dist/core/delegation/worker-profile-resolver.js +8 -35
- package/dist/core/delegation/worker-profile-resolver.js.map +1 -1
- package/dist/core/delegation/worker-recovery-coordinator.d.ts.map +1 -1
- package/dist/core/delegation/worker-recovery-coordinator.js +1 -0
- package/dist/core/delegation/worker-recovery-coordinator.js.map +1 -1
- package/dist/core/delegation/worker-runner.d.ts +6 -1
- package/dist/core/delegation/worker-runner.d.ts.map +1 -1
- package/dist/core/delegation/worker-runner.js +20 -6
- package/dist/core/delegation/worker-runner.js.map +1 -1
- package/dist/core/delegation/worker-tree-budget-coordinator.d.ts +47 -0
- package/dist/core/delegation/worker-tree-budget-coordinator.d.ts.map +1 -0
- package/dist/core/delegation/worker-tree-budget-coordinator.js +210 -0
- package/dist/core/delegation/worker-tree-budget-coordinator.js.map +1 -0
- package/dist/core/memory/providers/file-store.d.ts +2 -0
- package/dist/core/memory/providers/file-store.d.ts.map +1 -1
- package/dist/core/memory/providers/file-store.js +22 -20
- package/dist/core/memory/providers/file-store.js.map +1 -1
- package/dist/core/models/runtime-process.d.ts.map +1 -1
- package/dist/core/models/runtime-process.js +5 -18
- package/dist/core/models/runtime-process.js.map +1 -1
- package/dist/core/orchestration/bounded-string-array.d.ts +11 -0
- package/dist/core/orchestration/bounded-string-array.d.ts.map +1 -0
- package/dist/core/orchestration/bounded-string-array.js +17 -0
- package/dist/core/orchestration/bounded-string-array.js.map +1 -0
- package/dist/core/orchestration/capability-gateway.d.ts +16 -0
- package/dist/core/orchestration/capability-gateway.d.ts.map +1 -1
- package/dist/core/orchestration/capability-gateway.js +38 -0
- package/dist/core/orchestration/capability-gateway.js.map +1 -1
- package/dist/core/orchestration/contracts.d.ts +11 -3
- package/dist/core/orchestration/contracts.d.ts.map +1 -1
- package/dist/core/orchestration/contracts.js +0 -1
- package/dist/core/orchestration/contracts.js.map +1 -1
- package/dist/core/orchestration/delegation-ledger.d.ts +1 -0
- package/dist/core/orchestration/delegation-ledger.d.ts.map +1 -1
- package/dist/core/orchestration/delegation-ledger.js +3 -0
- package/dist/core/orchestration/delegation-ledger.js.map +1 -1
- package/dist/core/orchestration/event-store.d.ts +12 -10
- package/dist/core/orchestration/event-store.d.ts.map +1 -1
- package/dist/core/orchestration/event-store.js +94 -104
- package/dist/core/orchestration/event-store.js.map +1 -1
- package/dist/core/orchestration/lane-tool-manifests.d.ts +2 -2
- package/dist/core/orchestration/lane-tool-manifests.d.ts.map +1 -1
- package/dist/core/orchestration/lane-tool-manifests.js +4 -1
- package/dist/core/orchestration/lane-tool-manifests.js.map +1 -1
- package/dist/core/orchestration/policy-compiler.d.ts.map +1 -1
- package/dist/core/orchestration/policy-compiler.js +8 -9
- package/dist/core/orchestration/policy-compiler.js.map +1 -1
- package/dist/core/orchestration/profile-registry.d.ts.map +1 -1
- package/dist/core/orchestration/profile-registry.js +4 -10
- package/dist/core/orchestration/profile-registry.js.map +1 -1
- package/dist/core/orchestration/task-runtime.d.ts +1 -0
- package/dist/core/orchestration/task-runtime.d.ts.map +1 -1
- package/dist/core/orchestration/task-runtime.js +58 -3
- package/dist/core/orchestration/task-runtime.js.map +1 -1
- package/dist/core/orchestration/worker-execution-contract.d.ts.map +1 -1
- package/dist/core/orchestration/worker-execution-contract.js +10 -17
- package/dist/core/orchestration/worker-execution-contract.js.map +1 -1
- package/dist/core/risk-classifier.js +3 -3
- package/dist/core/risk-classifier.js.map +1 -1
- package/dist/core/runtime-builder.d.ts +4 -1
- package/dist/core/runtime-builder.d.ts.map +1 -1
- package/dist/core/runtime-builder.js +34 -15
- package/dist/core/runtime-builder.js.map +1 -1
- package/dist/core/secrets/bitwarden-credential-storage.d.ts +51 -0
- package/dist/core/secrets/bitwarden-credential-storage.d.ts.map +1 -0
- package/dist/core/secrets/bitwarden-credential-storage.js +345 -0
- package/dist/core/secrets/bitwarden-credential-storage.js.map +1 -0
- package/dist/core/secrets/credential-exposure-guard.d.ts +8 -4
- package/dist/core/secrets/credential-exposure-guard.d.ts.map +1 -1
- package/dist/core/secrets/credential-exposure-guard.js +30 -31
- package/dist/core/secrets/credential-exposure-guard.js.map +1 -1
- package/dist/core/secrets/credential-manager.d.ts +109 -0
- package/dist/core/secrets/credential-manager.d.ts.map +1 -0
- package/dist/core/secrets/credential-manager.js +384 -0
- package/dist/core/secrets/credential-manager.js.map +1 -0
- package/dist/core/secrets/credential-project.d.ts +4 -0
- package/dist/core/secrets/credential-project.d.ts.map +1 -0
- package/dist/core/secrets/credential-project.js +145 -0
- package/dist/core/secrets/credential-project.js.map +1 -0
- package/dist/core/secrets/secret-dotenv.d.ts +1 -1
- package/dist/core/secrets/secret-dotenv.js +1 -1
- package/dist/core/secrets/secret-dotenv.js.map +1 -1
- package/dist/core/settings-manager.d.ts +4 -2
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +9 -5
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/slash-commands.d.ts.map +1 -1
- package/dist/core/slash-commands.js +1 -0
- package/dist/core/slash-commands.js.map +1 -1
- package/dist/core/system-prompt.js +1 -1
- package/dist/core/system-prompt.js.map +1 -1
- package/dist/core/tool-capability-policy.js +2 -2
- package/dist/core/tool-capability-policy.js.map +1 -1
- package/dist/core/tools/delegate.d.ts +29 -1
- package/dist/core/tools/delegate.d.ts.map +1 -1
- package/dist/core/tools/delegate.js +179 -28
- package/dist/core/tools/delegate.js.map +1 -1
- package/dist/core/tools/git-filter.d.ts +1 -0
- package/dist/core/tools/git-filter.d.ts.map +1 -1
- package/dist/core/tools/git-filter.js +1 -1
- package/dist/core/tools/git-filter.js.map +1 -1
- package/dist/core/tools/profile-writer.js +3 -3
- package/dist/core/tools/profile-writer.js.map +1 -1
- package/dist/core/tools/python.d.ts +2 -0
- package/dist/core/tools/python.d.ts.map +1 -1
- package/dist/core/tools/python.js +17 -12
- package/dist/core/tools/python.js.map +1 -1
- package/dist/core/tools/run-process.d.ts +2 -0
- package/dist/core/tools/run-process.d.ts.map +1 -1
- package/dist/core/tools/run-process.js +7 -3
- package/dist/core/tools/run-process.js.map +1 -1
- package/dist/core/tools/secret-store.d.ts +8 -18
- package/dist/core/tools/secret-store.d.ts.map +1 -1
- package/dist/core/tools/secret-store.js +83 -348
- package/dist/core/tools/secret-store.js.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/migrations.d.ts.map +1 -1
- package/dist/migrations.js +38 -1
- package/dist/migrations.js.map +1 -1
- package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/settings-selector.js +35 -14
- package/dist/modes/interactive/components/settings-selector.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts +1 -0
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +26 -3
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/modes/interactive/secret-menu-controller.d.ts +21 -0
- package/dist/modes/interactive/secret-menu-controller.d.ts.map +1 -0
- package/dist/modes/interactive/secret-menu-controller.js +276 -0
- package/dist/modes/interactive/secret-menu-controller.js.map +1 -0
- package/dist/utils/tools-manager.d.ts +2 -1
- package/dist/utils/tools-manager.d.ts.map +1 -1
- package/dist/utils/tools-manager.js +43 -48
- package/dist/utils/tools-manager.js.map +1 -1
- package/dist/utils/zip-extractor.d.ts +8 -0
- package/dist/utils/zip-extractor.d.ts.map +1 -0
- package/dist/utils/zip-extractor.js +275 -0
- package/dist/utils/zip-extractor.js.map +1 -0
- package/docs/harness-architecture.md +34 -22
- package/docs/index.md +1 -1
- package/docs/resources.md +1 -1
- package/docs/settings.md +39 -103
- package/docs/usage.md +7 -5
- package/docs/worker-profiles.md +9 -7
- package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
- package/examples/extensions/custom-provider-anthropic/package.json +1 -1
- package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
- package/examples/extensions/sandbox/package-lock.json +2 -2
- package/examples/extensions/sandbox/package.json +1 -1
- package/examples/extensions/with-deps/package-lock.json +2 -2
- package/examples/extensions/with-deps/package.json +1 -1
- package/npm-shrinkwrap.json +12 -12
- package/package.json +4 -4
- package/dist/core/secrets/secret-vault-format.d.ts +0 -112
- package/dist/core/secrets/secret-vault-format.d.ts.map +0 -1
- package/dist/core/secrets/secret-vault-format.js +0 -396
- package/dist/core/secrets/secret-vault-format.js.map +0 -1
- package/dist/core/secrets/secret-vault.d.ts +0 -72
- package/dist/core/secrets/secret-vault.d.ts.map +0 -1
- package/dist/core/secrets/secret-vault.js +0 -663
- package/dist/core/secrets/secret-vault.js.map +0 -1
|
@@ -29,11 +29,14 @@ const SAFE_ENVIRONMENT_VARIABLES = [
|
|
|
29
29
|
"TMP",
|
|
30
30
|
"TEMP",
|
|
31
31
|
];
|
|
32
|
-
|
|
32
|
+
const OWNER_CONTROL_PLANE_ENVIRONMENT_VARIABLES = new Set(["BW_SESSION"]);
|
|
33
|
+
function scopedEnvironment(allowedNames, additional) {
|
|
33
34
|
const names = new Set([...SAFE_ENVIRONMENT_VARIABLES, ...allowedNames]);
|
|
34
35
|
const environment = {};
|
|
35
36
|
for (const name of names) {
|
|
36
|
-
|
|
37
|
+
if (OWNER_CONTROL_PLANE_ENVIRONMENT_VARIABLES.has(name))
|
|
38
|
+
continue;
|
|
39
|
+
const value = additional[name] ?? process.env[name];
|
|
37
40
|
if (value !== undefined)
|
|
38
41
|
environment[name] = value;
|
|
39
42
|
}
|
|
@@ -122,6 +125,7 @@ export function createRunProcessToolDefinition(cwd, options) {
|
|
|
122
125
|
promptSnippet: "Run an owner-allowed executable through a constrained direct-argv launcher (not OS isolation).",
|
|
123
126
|
promptGuidelines: [
|
|
124
127
|
"Use only an executable listed by the profile. Arguments are passed literally; shell operators and interpolation are unavailable.",
|
|
128
|
+
"Owner-authorized project credentials are injected only when their variable names are also allowed by the execution profile.",
|
|
125
129
|
"Treat a non-zero exit code, timeout, abort, or output-limit termination as failure.",
|
|
126
130
|
],
|
|
127
131
|
parameters: runProcessSchema,
|
|
@@ -135,7 +139,7 @@ export function createRunProcessToolDefinition(cwd, options) {
|
|
|
135
139
|
let outputLimitReached = false;
|
|
136
140
|
const child = (options.spawn ?? spawnProcess)(input.executable, [...args], {
|
|
137
141
|
cwd,
|
|
138
|
-
env: scopedEnvironment(options.policy.allowedEnvironmentVariables),
|
|
142
|
+
env: scopedEnvironment(options.policy.allowedEnvironmentVariables, options.environment?.(cwd) ?? {}),
|
|
139
143
|
stdio: ["ignore", "pipe", "pipe"],
|
|
140
144
|
windowsHide: true,
|
|
141
145
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-process.js","sourceRoot":"","sources":["../../../src/core/tools/run-process.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ChildProcess } from \"node:child_process\";\nimport type { AgentTool } from \"@caupulican/pi-agent-core\";\nimport { type Static, Type } from \"typebox\";\nimport { spawnProcess, waitForChildProcessWithTermination } from \"../../utils/child-process.ts\";\nimport type { ToolDefinition } from \"../extensions/types.ts\";\nimport {\n\tMAX_ORCHESTRATION_PROCESS_OUTPUT_BYTES,\n\ttype OrchestrationExecutionPolicy,\n} from \"../orchestration/contracts.ts\";\nimport { wrapToolDefinition } from \"./tool-definition-wrapper.ts\";\n\nconst MAX_RUN_PROCESS_EXECUTABLE_CHARS = 4_096;\nconst MAX_RUN_PROCESS_ARGUMENT_CHARS = 4_096;\nconst MAX_RUN_PROCESS_ARGUMENTS = 64;\nconst MAX_RUN_PROCESS_ARGV_BYTES = 32 * 1024;\nconst MAX_RUN_PROCESS_WALL_CLOCK_MS = 3_600_000;\nconst MAX_VISIBLE_EXECUTABLES = 16;\nconst MAX_VISIBLE_EXECUTABLE_CHARS = 64;\n\nconst runProcessSchema = Type.Object(\n\t{\n\t\texecutable: Type.String({\n\t\t\tmaxLength: MAX_RUN_PROCESS_EXECUTABLE_CHARS,\n\t\t\tdescription: \"Exact owner-allowed executable name or path.\",\n\t\t}),\n\t\targs: Type.Optional(\n\t\t\tType.Array(Type.String({ maxLength: MAX_RUN_PROCESS_ARGUMENT_CHARS }), {\n\t\t\t\tmaxItems: MAX_RUN_PROCESS_ARGUMENTS,\n\t\t\t\tdescription: \"Direct argv entries. No shell parsing occurs.\",\n\t\t\t}),\n\t\t),\n\t},\n\t{ additionalProperties: false },\n);\n\nexport type RunProcessInput = Static<typeof runProcessSchema>;\n\nexport interface RunProcessDetails {\n\toutcome: \"exited\" | \"failed\" | \"aborted\" | \"timeout\" | \"output_limit\";\n\texecutable: string;\n\texitCode: number | null;\n\tdurationMs: number;\n\ttruncated: boolean;\n}\n\nexport interface RunProcessToolOptions {\n\tpolicy: OrchestrationExecutionPolicy;\n\tmaxWallClockMs: number;\n\tspawn?: typeof spawnProcess;\n}\n\nconst SAFE_ENVIRONMENT_VARIABLES = [\n\t\"PATH\",\n\t\"PATHEXT\",\n\t\"SystemRoot\",\n\t\"WINDIR\",\n\t\"COMSPEC\",\n\t\"TMPDIR\",\n\t\"TMP\",\n\t\"TEMP\",\n] as const;\n\nfunction scopedEnvironment(allowedNames: readonly string[]): NodeJS.ProcessEnv {\n\tconst names = new Set<string>([...SAFE_ENVIRONMENT_VARIABLES, ...allowedNames]);\n\tconst environment: NodeJS.ProcessEnv = {};\n\tfor (const name of names) {\n\t\tconst value = process.env[name];\n\t\tif (value !== undefined) environment[name] = value;\n\t}\n\treturn environment;\n}\n\nfunction executableCatalogDescription(allowedExecutables: readonly string[]): string {\n\tconst visible = allowedExecutables\n\t\t.slice(0, MAX_VISIBLE_EXECUTABLES)\n\t\t.map((executable) => executable.slice(0, MAX_VISIBLE_EXECUTABLE_CHARS));\n\tconst omitted = allowedExecutables.length - visible.length;\n\treturn `${allowedExecutables.length} configured: ${visible.join(\", \")}${omitted > 0 ? `; ${omitted} omitted` : \"\"}`;\n}\n\nfunction resolveProcessPolicy(options: RunProcessToolOptions): { maxOutputBytes: number; timeoutMs: number } {\n\tif (\n\t\t!Number.isSafeInteger(options.policy.maxOutputBytes) ||\n\t\toptions.policy.maxOutputBytes <= 0 ||\n\t\t!Number.isSafeInteger(options.maxWallClockMs) ||\n\t\toptions.maxWallClockMs < 0\n\t) {\n\t\tthrow new TypeError(\"process_policy_invalid: output and wall-clock limits must be bounded integers.\");\n\t}\n\treturn {\n\t\tmaxOutputBytes: Math.min(options.policy.maxOutputBytes, MAX_ORCHESTRATION_PROCESS_OUTPUT_BYTES),\n\t\t// A zero lane-level budget disables that budget, not the execution-plane safety ceiling.\n\t\ttimeoutMs:\n\t\t\toptions.maxWallClockMs === 0\n\t\t\t\t? MAX_RUN_PROCESS_WALL_CLOCK_MS\n\t\t\t\t: Math.min(options.maxWallClockMs, MAX_RUN_PROCESS_WALL_CLOCK_MS),\n\t};\n}\n\nfunction validateProcessInput(input: RunProcessInput): string[] {\n\tif (\n\t\ttypeof input.executable !== \"string\" ||\n\t\tinput.executable.length === 0 ||\n\t\tinput.executable.length > MAX_RUN_PROCESS_EXECUTABLE_CHARS ||\n\t\tinput.executable.includes(\"\\0\")\n\t) {\n\t\tthrow new Error(\"process_argument_invalid: executable is empty, oversized, or contains a NUL byte.\");\n\t}\n\tif (\n\t\tinput.args !== undefined &&\n\t\t(!Array.isArray(input.args) ||\n\t\t\tinput.args.length > MAX_RUN_PROCESS_ARGUMENTS ||\n\t\t\tinput.args.some(\n\t\t\t\t(argument) =>\n\t\t\t\t\ttypeof argument !== \"string\" ||\n\t\t\t\t\targument.length > MAX_RUN_PROCESS_ARGUMENT_CHARS ||\n\t\t\t\t\targument.includes(\"\\0\"),\n\t\t\t))\n\t) {\n\t\tthrow new Error(\"process_argument_invalid: argv exceeds its count/size bound or contains a NUL byte.\");\n\t}\n\tconst args = input.args ?? [];\n\tlet argvBytes = Buffer.byteLength(input.executable, \"utf-8\");\n\tfor (const argument of args) {\n\t\targvBytes += 1 + Buffer.byteLength(argument, \"utf-8\");\n\t\tif (argvBytes > MAX_RUN_PROCESS_ARGV_BYTES) {\n\t\t\tthrow new Error(`process_argument_invalid: executable and argv exceed ${MAX_RUN_PROCESS_ARGV_BYTES} bytes.`);\n\t\t}\n\t}\n\treturn args;\n}\n\nfunction collectBoundedOutput(\n\tchild: ChildProcess,\n\tmaxBytes: number,\n\tabort: () => void,\n): {\n\tread(): { stdout: string; stderr: string; truncated: boolean };\n} {\n\tlet remaining = maxBytes;\n\tlet truncated = false;\n\tconst stdout: Buffer[] = [];\n\tconst stderr: Buffer[] = [];\n\tconst collect = (target: Buffer[]) => (chunk: Buffer) => {\n\t\tif (remaining <= 0) return;\n\t\tconst retained = chunk.subarray(0, remaining);\n\t\ttarget.push(retained);\n\t\tremaining -= retained.length;\n\t\tif (retained.length < chunk.length || remaining === 0) {\n\t\t\ttruncated = true;\n\t\t\tabort();\n\t\t}\n\t};\n\tchild.stdout?.on(\"data\", collect(stdout));\n\tchild.stderr?.on(\"data\", collect(stderr));\n\treturn {\n\t\tread: () => ({\n\t\t\tstdout: Buffer.concat(stdout).toString(\"utf-8\"),\n\t\t\tstderr: Buffer.concat(stderr).toString(\"utf-8\"),\n\t\t\ttruncated,\n\t\t}),\n\t};\n}\n\nexport function createRunProcessToolDefinition(cwd: string, options: RunProcessToolOptions): ToolDefinition {\n\tconst processPolicy = resolveProcessPolicy(options);\n\tconst allowedExecutables = new Set(options.policy.allowedExecutables);\n\treturn {\n\t\tname: \"run_process\",\n\t\tlabel: \"Run Process\",\n\t\tdescription: `Run one owner-allowed executable using direct argv without a shell. Allowed executables: ${executableCatalogDescription(options.policy.allowedExecutables)}.`,\n\t\tpromptSnippet: \"Run an owner-allowed executable through a constrained direct-argv launcher (not OS isolation).\",\n\t\tpromptGuidelines: [\n\t\t\t\"Use only an executable listed by the profile. Arguments are passed literally; shell operators and interpolation are unavailable.\",\n\t\t\t\"Treat a non-zero exit code, timeout, abort, or output-limit termination as failure.\",\n\t\t],\n\t\tparameters: runProcessSchema,\n\t\tasync execute(_toolCallId, input: RunProcessInput, signal) {\n\t\t\tconst args = validateProcessInput(input);\n\t\t\tif (!allowedExecutables.has(input.executable)) {\n\t\t\t\tthrow new Error(`process_executable_denied: '${input.executable}' is not owner-allowed.`);\n\t\t\t}\n\t\t\tconst startedAt = Date.now();\n\t\t\tconst outputLimitAbort = new AbortController();\n\t\t\tlet outputLimitReached = false;\n\t\t\tconst child = (options.spawn ?? spawnProcess)(input.executable, [...args], {\n\t\t\t\tcwd,\n\t\t\t\tenv: scopedEnvironment(options.policy.allowedEnvironmentVariables),\n\t\t\t\tstdio: [\"ignore\", \"pipe\", \"pipe\"],\n\t\t\t\twindowsHide: true,\n\t\t\t});\n\t\t\tconst output = collectBoundedOutput(child, processPolicy.maxOutputBytes, () => {\n\t\t\t\toutputLimitReached = true;\n\t\t\t\toutputLimitAbort.abort();\n\t\t\t});\n\t\t\tconst combinedAbort = new AbortController();\n\t\t\tconst abort = () => combinedAbort.abort();\n\t\t\tif (signal?.aborted || outputLimitAbort.signal.aborted) abort();\n\t\t\telse {\n\t\t\t\tsignal?.addEventListener(\"abort\", abort, { once: true });\n\t\t\t\toutputLimitAbort.signal.addEventListener(\"abort\", abort, { once: true });\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tconst terminal = await waitForChildProcessWithTermination(child, {\n\t\t\t\t\tsignal: combinedAbort.signal,\n\t\t\t\t\ttimeoutMs: processPolicy.timeoutMs,\n\t\t\t\t\tkillGraceMs: 2_000,\n\t\t\t\t});\n\t\t\t\tconst captured = output.read();\n\t\t\t\tconst outcome: RunProcessDetails[\"outcome\"] = outputLimitReached\n\t\t\t\t\t? \"output_limit\"\n\t\t\t\t\t: terminal.reason === \"timeout\"\n\t\t\t\t\t\t? \"timeout\"\n\t\t\t\t\t\t: terminal.reason === \"aborted\"\n\t\t\t\t\t\t\t? \"aborted\"\n\t\t\t\t\t\t\t: terminal.code === 0\n\t\t\t\t\t\t\t\t? \"exited\"\n\t\t\t\t\t\t\t\t: \"failed\";\n\t\t\t\tconst body = [\n\t\t\t\t\t`outcome: ${outcome}`,\n\t\t\t\t\t`exitCode: ${terminal.code ?? \"null\"}`,\n\t\t\t\t\tcaptured.stdout ? `stdout:\\n${captured.stdout}` : \"stdout: (empty)\",\n\t\t\t\t\tcaptured.stderr ? `stderr:\\n${captured.stderr}` : \"stderr: (empty)\",\n\t\t\t\t].join(\"\\n\");\n\t\t\t\treturn {\n\t\t\t\t\tcontent: [{ type: \"text\" as const, text: body }],\n\t\t\t\t\t...(outcome === \"exited\" ? {} : { isError: true }),\n\t\t\t\t\tdetails: {\n\t\t\t\t\t\toutcome,\n\t\t\t\t\t\texecutable: input.executable,\n\t\t\t\t\t\texitCode: terminal.code,\n\t\t\t\t\t\tdurationMs: Date.now() - startedAt,\n\t\t\t\t\t\ttruncated: captured.truncated,\n\t\t\t\t\t} satisfies RunProcessDetails,\n\t\t\t\t};\n\t\t\t} finally {\n\t\t\t\tsignal?.removeEventListener(\"abort\", abort);\n\t\t\t\toutputLimitAbort.signal.removeEventListener(\"abort\", abort);\n\t\t\t}\n\t\t},\n\t};\n}\n\nexport function createRunProcessTool(cwd: string, options: RunProcessToolOptions): AgentTool {\n\treturn wrapToolDefinition(createRunProcessToolDefinition(cwd, options));\n}\n"]}
|
|
1
|
+
{"version":3,"file":"run-process.js","sourceRoot":"","sources":["../../../src/core/tools/run-process.ts"],"names":[],"mappings":"AAEA,OAAO,EAAe,IAAI,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,kCAAkC,EAAE,MAAM,8BAA8B,CAAC;AAEhG,OAAO,EACN,sCAAsC,GAEtC,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAElE,MAAM,gCAAgC,GAAG,KAAK,CAAC;AAC/C,MAAM,8BAA8B,GAAG,KAAK,CAAC;AAC7C,MAAM,yBAAyB,GAAG,EAAE,CAAC;AACrC,MAAM,0BAA0B,GAAG,EAAE,GAAG,IAAI,CAAC;AAC7C,MAAM,6BAA6B,GAAG,SAAS,CAAC;AAChD,MAAM,uBAAuB,GAAG,EAAE,CAAC;AACnC,MAAM,4BAA4B,GAAG,EAAE,CAAC;AAExC,MAAM,gBAAgB,GAAG,IAAI,CAAC,MAAM,CACnC;IACC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC;QACvB,SAAS,EAAE,gCAAgC;QAC3C,WAAW,EAAE,8CAA8C;KAC3D,CAAC;IACF,IAAI,EAAE,IAAI,CAAC,QAAQ,CAClB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,8BAA8B,EAAE,CAAC,EAAE;QACtE,QAAQ,EAAE,yBAAyB;QACnC,WAAW,EAAE,+CAA+C;KAC5D,CAAC,CACF;CACD,EACD,EAAE,oBAAoB,EAAE,KAAK,EAAE,CAC/B,CAAC;AAoBF,MAAM,0BAA0B,GAAG;IAClC,MAAM;IACN,SAAS;IACT,YAAY;IACZ,QAAQ;IACR,SAAS;IACT,QAAQ;IACR,KAAK;IACL,MAAM;CACG,CAAC;AACX,MAAM,yCAAyC,GAAG,IAAI,GAAG,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC;AAE1E,SAAS,iBAAiB,CAAC,YAA+B,EAAE,UAA6B;IACxF,MAAM,KAAK,GAAG,IAAI,GAAG,CAAS,CAAC,GAAG,0BAA0B,EAAE,GAAG,YAAY,CAAC,CAAC,CAAC;IAChF,MAAM,WAAW,GAAsB,EAAE,CAAC;IAC1C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QAC1B,IAAI,yCAAyC,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,SAAS;QAClE,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACpD,IAAI,KAAK,KAAK,SAAS;YAAE,WAAW,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;IACpD,CAAC;IACD,OAAO,WAAW,CAAC;AACpB,CAAC;AAED,SAAS,4BAA4B,CAAC,kBAAqC;IAC1E,MAAM,OAAO,GAAG,kBAAkB;SAChC,KAAK,CAAC,CAAC,EAAE,uBAAuB,CAAC;SACjC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,4BAA4B,CAAC,CAAC,CAAC;IACzE,MAAM,OAAO,GAAG,kBAAkB,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAC3D,OAAO,GAAG,kBAAkB,CAAC,MAAM,gBAAgB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,OAAO,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AACrH,CAAC;AAED,SAAS,oBAAoB,CAAC,OAA8B;IAC3D,IACC,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC;QACpD,OAAO,CAAC,MAAM,CAAC,cAAc,IAAI,CAAC;QAClC,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,cAAc,CAAC;QAC7C,OAAO,CAAC,cAAc,GAAG,CAAC,EACzB,CAAC;QACF,MAAM,IAAI,SAAS,CAAC,gFAAgF,CAAC,CAAC;IACvG,CAAC;IACD,OAAO;QACN,cAAc,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,cAAc,EAAE,sCAAsC,CAAC;QAC/F,yFAAyF;QACzF,SAAS,EACR,OAAO,CAAC,cAAc,KAAK,CAAC;YAC3B,CAAC,CAAC,6BAA6B;YAC/B,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,cAAc,EAAE,6BAA6B,CAAC;KACnE,CAAC;AACH,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAsB;IACnD,IACC,OAAO,KAAK,CAAC,UAAU,KAAK,QAAQ;QACpC,KAAK,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC;QAC7B,KAAK,CAAC,UAAU,CAAC,MAAM,GAAG,gCAAgC;QAC1D,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,EAC9B,CAAC;QACF,MAAM,IAAI,KAAK,CAAC,mFAAmF,CAAC,CAAC;IACtG,CAAC;IACD,IACC,KAAK,CAAC,IAAI,KAAK,SAAS;QACxB,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC;YAC1B,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,yBAAyB;YAC7C,KAAK,CAAC,IAAI,CAAC,IAAI,CACd,CAAC,QAAQ,EAAE,EAAE,CACZ,OAAO,QAAQ,KAAK,QAAQ;gBAC5B,QAAQ,CAAC,MAAM,GAAG,8BAA8B;gBAChD,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CACxB,CAAC,EACF,CAAC;QACF,MAAM,IAAI,KAAK,CAAC,qFAAqF,CAAC,CAAC;IACxG,CAAC;IACD,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC;IAC9B,IAAI,SAAS,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAC7D,KAAK,MAAM,QAAQ,IAAI,IAAI,EAAE,CAAC;QAC7B,SAAS,IAAI,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACtD,IAAI,SAAS,GAAG,0BAA0B,EAAE,CAAC;YAC5C,MAAM,IAAI,KAAK,CAAC,wDAAwD,0BAA0B,SAAS,CAAC,CAAC;QAC9G,CAAC;IACF,CAAC;IACD,OAAO,IAAI,CAAC;AACb,CAAC;AAED,SAAS,oBAAoB,CAC5B,KAAmB,EACnB,QAAgB,EAChB,KAAiB;IAIjB,IAAI,SAAS,GAAG,QAAQ,CAAC;IACzB,IAAI,SAAS,GAAG,KAAK,CAAC;IACtB,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,OAAO,GAAG,CAAC,MAAgB,EAAE,EAAE,CAAC,CAAC,KAAa,EAAE,EAAE;QACvD,IAAI,SAAS,IAAI,CAAC;YAAE,OAAO;QAC3B,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;QAC9C,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACtB,SAAS,IAAI,QAAQ,CAAC,MAAM,CAAC;QAC7B,IAAI,QAAQ,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI,SAAS,KAAK,CAAC,EAAE,CAAC;YACvD,SAAS,GAAG,IAAI,CAAC;YACjB,KAAK,EAAE,CAAC;QACT,CAAC;IACF,CAAC,CAAC;IACF,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;IAC1C,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;IAC1C,OAAO;QACN,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;YACZ,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC;YAC/C,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC;YAC/C,SAAS;SACT,CAAC;KACF,CAAC;AACH,CAAC;AAED,MAAM,UAAU,8BAA8B,CAAC,GAAW,EAAE,OAA8B;IACzF,MAAM,aAAa,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;IACpD,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;IACtE,OAAO;QACN,IAAI,EAAE,aAAa;QACnB,KAAK,EAAE,aAAa;QACpB,WAAW,EAAE,4FAA4F,4BAA4B,CAAC,OAAO,CAAC,MAAM,CAAC,kBAAkB,CAAC,GAAG;QAC3K,aAAa,EAAE,gGAAgG;QAC/G,gBAAgB,EAAE;YACjB,kIAAkI;YAClI,6HAA6H;YAC7H,qFAAqF;SACrF;QACD,UAAU,EAAE,gBAAgB;QAC5B,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,KAAsB,EAAE,MAAM;YACxD,MAAM,IAAI,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;YACzC,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC/C,MAAM,IAAI,KAAK,CAAC,+BAA+B,KAAK,CAAC,UAAU,yBAAyB,CAAC,CAAC;YAC3F,CAAC;YACD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAC7B,MAAM,gBAAgB,GAAG,IAAI,eAAe,EAAE,CAAC;YAC/C,IAAI,kBAAkB,GAAG,KAAK,CAAC;YAC/B,MAAM,KAAK,GAAG,CAAC,OAAO,CAAC,KAAK,IAAI,YAAY,CAAC,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE;gBAC1E,GAAG;gBACH,GAAG,EAAE,iBAAiB,CAAC,OAAO,CAAC,MAAM,CAAC,2BAA2B,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;gBACpG,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;gBACjC,WAAW,EAAE,IAAI;aACjB,CAAC,CAAC;YACH,MAAM,MAAM,GAAG,oBAAoB,CAAC,KAAK,EAAE,aAAa,CAAC,cAAc,EAAE,GAAG,EAAE;gBAC7E,kBAAkB,GAAG,IAAI,CAAC;gBAC1B,gBAAgB,CAAC,KAAK,EAAE,CAAC;YAC1B,CAAC,CAAC,CAAC;YACH,MAAM,aAAa,GAAG,IAAI,eAAe,EAAE,CAAC;YAC5C,MAAM,KAAK,GAAG,GAAG,EAAE,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;YAC1C,IAAI,MAAM,EAAE,OAAO,IAAI,gBAAgB,CAAC,MAAM,CAAC,OAAO;gBAAE,KAAK,EAAE,CAAC;iBAC3D,CAAC;gBACL,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;gBACzD,gBAAgB,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YAC1E,CAAC;YACD,IAAI,CAAC;gBACJ,MAAM,QAAQ,GAAG,MAAM,kCAAkC,CAAC,KAAK,EAAE;oBAChE,MAAM,EAAE,aAAa,CAAC,MAAM;oBAC5B,SAAS,EAAE,aAAa,CAAC,SAAS;oBAClC,WAAW,EAAE,KAAK;iBAClB,CAAC,CAAC;gBACH,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;gBAC/B,MAAM,OAAO,GAAiC,kBAAkB;oBAC/D,CAAC,CAAC,cAAc;oBAChB,CAAC,CAAC,QAAQ,CAAC,MAAM,KAAK,SAAS;wBAC9B,CAAC,CAAC,SAAS;wBACX,CAAC,CAAC,QAAQ,CAAC,MAAM,KAAK,SAAS;4BAC9B,CAAC,CAAC,SAAS;4BACX,CAAC,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC;gCACpB,CAAC,CAAC,QAAQ;gCACV,CAAC,CAAC,QAAQ,CAAC;gBACf,MAAM,IAAI,GAAG;oBACZ,YAAY,OAAO,EAAE;oBACrB,aAAa,QAAQ,CAAC,IAAI,IAAI,MAAM,EAAE;oBACtC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,iBAAiB;oBACnE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,iBAAiB;iBACnE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACb,OAAO;oBACN,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;oBAChD,GAAG,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;oBAClD,OAAO,EAAE;wBACR,OAAO;wBACP,UAAU,EAAE,KAAK,CAAC,UAAU;wBAC5B,QAAQ,EAAE,QAAQ,CAAC,IAAI;wBACvB,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;wBAClC,SAAS,EAAE,QAAQ,CAAC,SAAS;qBACD;iBAC7B,CAAC;YACH,CAAC;oBAAS,CAAC;gBACV,MAAM,EAAE,mBAAmB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;gBAC5C,gBAAgB,CAAC,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YAC7D,CAAC;QACF,CAAC;KACD,CAAC;AACH,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,GAAW,EAAE,OAA8B;IAC/E,OAAO,kBAAkB,CAAC,8BAA8B,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC;AACzE,CAAC","sourcesContent":["import type { ChildProcess } from \"node:child_process\";\nimport type { AgentTool } from \"@caupulican/pi-agent-core\";\nimport { type Static, Type } from \"typebox\";\nimport { spawnProcess, waitForChildProcessWithTermination } from \"../../utils/child-process.ts\";\nimport type { ToolDefinition } from \"../extensions/types.ts\";\nimport {\n\tMAX_ORCHESTRATION_PROCESS_OUTPUT_BYTES,\n\ttype OrchestrationExecutionPolicy,\n} from \"../orchestration/contracts.ts\";\nimport { wrapToolDefinition } from \"./tool-definition-wrapper.ts\";\n\nconst MAX_RUN_PROCESS_EXECUTABLE_CHARS = 4_096;\nconst MAX_RUN_PROCESS_ARGUMENT_CHARS = 4_096;\nconst MAX_RUN_PROCESS_ARGUMENTS = 64;\nconst MAX_RUN_PROCESS_ARGV_BYTES = 32 * 1024;\nconst MAX_RUN_PROCESS_WALL_CLOCK_MS = 3_600_000;\nconst MAX_VISIBLE_EXECUTABLES = 16;\nconst MAX_VISIBLE_EXECUTABLE_CHARS = 64;\n\nconst runProcessSchema = Type.Object(\n\t{\n\t\texecutable: Type.String({\n\t\t\tmaxLength: MAX_RUN_PROCESS_EXECUTABLE_CHARS,\n\t\t\tdescription: \"Exact owner-allowed executable name or path.\",\n\t\t}),\n\t\targs: Type.Optional(\n\t\t\tType.Array(Type.String({ maxLength: MAX_RUN_PROCESS_ARGUMENT_CHARS }), {\n\t\t\t\tmaxItems: MAX_RUN_PROCESS_ARGUMENTS,\n\t\t\t\tdescription: \"Direct argv entries. No shell parsing occurs.\",\n\t\t\t}),\n\t\t),\n\t},\n\t{ additionalProperties: false },\n);\n\nexport type RunProcessInput = Static<typeof runProcessSchema>;\n\nexport interface RunProcessDetails {\n\toutcome: \"exited\" | \"failed\" | \"aborted\" | \"timeout\" | \"output_limit\";\n\texecutable: string;\n\texitCode: number | null;\n\tdurationMs: number;\n\ttruncated: boolean;\n}\n\nexport interface RunProcessToolOptions {\n\tpolicy: OrchestrationExecutionPolicy;\n\tmaxWallClockMs: number;\n\tspawn?: typeof spawnProcess;\n\t/** Additional environment resolved for the execution cwd; the policy allowlist still applies. */\n\tenvironment?: (cwd: string) => NodeJS.ProcessEnv;\n}\n\nconst SAFE_ENVIRONMENT_VARIABLES = [\n\t\"PATH\",\n\t\"PATHEXT\",\n\t\"SystemRoot\",\n\t\"WINDIR\",\n\t\"COMSPEC\",\n\t\"TMPDIR\",\n\t\"TMP\",\n\t\"TEMP\",\n] as const;\nconst OWNER_CONTROL_PLANE_ENVIRONMENT_VARIABLES = new Set([\"BW_SESSION\"]);\n\nfunction scopedEnvironment(allowedNames: readonly string[], additional: NodeJS.ProcessEnv): NodeJS.ProcessEnv {\n\tconst names = new Set<string>([...SAFE_ENVIRONMENT_VARIABLES, ...allowedNames]);\n\tconst environment: NodeJS.ProcessEnv = {};\n\tfor (const name of names) {\n\t\tif (OWNER_CONTROL_PLANE_ENVIRONMENT_VARIABLES.has(name)) continue;\n\t\tconst value = additional[name] ?? process.env[name];\n\t\tif (value !== undefined) environment[name] = value;\n\t}\n\treturn environment;\n}\n\nfunction executableCatalogDescription(allowedExecutables: readonly string[]): string {\n\tconst visible = allowedExecutables\n\t\t.slice(0, MAX_VISIBLE_EXECUTABLES)\n\t\t.map((executable) => executable.slice(0, MAX_VISIBLE_EXECUTABLE_CHARS));\n\tconst omitted = allowedExecutables.length - visible.length;\n\treturn `${allowedExecutables.length} configured: ${visible.join(\", \")}${omitted > 0 ? `; ${omitted} omitted` : \"\"}`;\n}\n\nfunction resolveProcessPolicy(options: RunProcessToolOptions): { maxOutputBytes: number; timeoutMs: number } {\n\tif (\n\t\t!Number.isSafeInteger(options.policy.maxOutputBytes) ||\n\t\toptions.policy.maxOutputBytes <= 0 ||\n\t\t!Number.isSafeInteger(options.maxWallClockMs) ||\n\t\toptions.maxWallClockMs < 0\n\t) {\n\t\tthrow new TypeError(\"process_policy_invalid: output and wall-clock limits must be bounded integers.\");\n\t}\n\treturn {\n\t\tmaxOutputBytes: Math.min(options.policy.maxOutputBytes, MAX_ORCHESTRATION_PROCESS_OUTPUT_BYTES),\n\t\t// A zero lane-level budget disables that budget, not the execution-plane safety ceiling.\n\t\ttimeoutMs:\n\t\t\toptions.maxWallClockMs === 0\n\t\t\t\t? MAX_RUN_PROCESS_WALL_CLOCK_MS\n\t\t\t\t: Math.min(options.maxWallClockMs, MAX_RUN_PROCESS_WALL_CLOCK_MS),\n\t};\n}\n\nfunction validateProcessInput(input: RunProcessInput): string[] {\n\tif (\n\t\ttypeof input.executable !== \"string\" ||\n\t\tinput.executable.length === 0 ||\n\t\tinput.executable.length > MAX_RUN_PROCESS_EXECUTABLE_CHARS ||\n\t\tinput.executable.includes(\"\\0\")\n\t) {\n\t\tthrow new Error(\"process_argument_invalid: executable is empty, oversized, or contains a NUL byte.\");\n\t}\n\tif (\n\t\tinput.args !== undefined &&\n\t\t(!Array.isArray(input.args) ||\n\t\t\tinput.args.length > MAX_RUN_PROCESS_ARGUMENTS ||\n\t\t\tinput.args.some(\n\t\t\t\t(argument) =>\n\t\t\t\t\ttypeof argument !== \"string\" ||\n\t\t\t\t\targument.length > MAX_RUN_PROCESS_ARGUMENT_CHARS ||\n\t\t\t\t\targument.includes(\"\\0\"),\n\t\t\t))\n\t) {\n\t\tthrow new Error(\"process_argument_invalid: argv exceeds its count/size bound or contains a NUL byte.\");\n\t}\n\tconst args = input.args ?? [];\n\tlet argvBytes = Buffer.byteLength(input.executable, \"utf-8\");\n\tfor (const argument of args) {\n\t\targvBytes += 1 + Buffer.byteLength(argument, \"utf-8\");\n\t\tif (argvBytes > MAX_RUN_PROCESS_ARGV_BYTES) {\n\t\t\tthrow new Error(`process_argument_invalid: executable and argv exceed ${MAX_RUN_PROCESS_ARGV_BYTES} bytes.`);\n\t\t}\n\t}\n\treturn args;\n}\n\nfunction collectBoundedOutput(\n\tchild: ChildProcess,\n\tmaxBytes: number,\n\tabort: () => void,\n): {\n\tread(): { stdout: string; stderr: string; truncated: boolean };\n} {\n\tlet remaining = maxBytes;\n\tlet truncated = false;\n\tconst stdout: Buffer[] = [];\n\tconst stderr: Buffer[] = [];\n\tconst collect = (target: Buffer[]) => (chunk: Buffer) => {\n\t\tif (remaining <= 0) return;\n\t\tconst retained = chunk.subarray(0, remaining);\n\t\ttarget.push(retained);\n\t\tremaining -= retained.length;\n\t\tif (retained.length < chunk.length || remaining === 0) {\n\t\t\ttruncated = true;\n\t\t\tabort();\n\t\t}\n\t};\n\tchild.stdout?.on(\"data\", collect(stdout));\n\tchild.stderr?.on(\"data\", collect(stderr));\n\treturn {\n\t\tread: () => ({\n\t\t\tstdout: Buffer.concat(stdout).toString(\"utf-8\"),\n\t\t\tstderr: Buffer.concat(stderr).toString(\"utf-8\"),\n\t\t\ttruncated,\n\t\t}),\n\t};\n}\n\nexport function createRunProcessToolDefinition(cwd: string, options: RunProcessToolOptions): ToolDefinition {\n\tconst processPolicy = resolveProcessPolicy(options);\n\tconst allowedExecutables = new Set(options.policy.allowedExecutables);\n\treturn {\n\t\tname: \"run_process\",\n\t\tlabel: \"Run Process\",\n\t\tdescription: `Run one owner-allowed executable using direct argv without a shell. Allowed executables: ${executableCatalogDescription(options.policy.allowedExecutables)}.`,\n\t\tpromptSnippet: \"Run an owner-allowed executable through a constrained direct-argv launcher (not OS isolation).\",\n\t\tpromptGuidelines: [\n\t\t\t\"Use only an executable listed by the profile. Arguments are passed literally; shell operators and interpolation are unavailable.\",\n\t\t\t\"Owner-authorized project credentials are injected only when their variable names are also allowed by the execution profile.\",\n\t\t\t\"Treat a non-zero exit code, timeout, abort, or output-limit termination as failure.\",\n\t\t],\n\t\tparameters: runProcessSchema,\n\t\tasync execute(_toolCallId, input: RunProcessInput, signal) {\n\t\t\tconst args = validateProcessInput(input);\n\t\t\tif (!allowedExecutables.has(input.executable)) {\n\t\t\t\tthrow new Error(`process_executable_denied: '${input.executable}' is not owner-allowed.`);\n\t\t\t}\n\t\t\tconst startedAt = Date.now();\n\t\t\tconst outputLimitAbort = new AbortController();\n\t\t\tlet outputLimitReached = false;\n\t\t\tconst child = (options.spawn ?? spawnProcess)(input.executable, [...args], {\n\t\t\t\tcwd,\n\t\t\t\tenv: scopedEnvironment(options.policy.allowedEnvironmentVariables, options.environment?.(cwd) ?? {}),\n\t\t\t\tstdio: [\"ignore\", \"pipe\", \"pipe\"],\n\t\t\t\twindowsHide: true,\n\t\t\t});\n\t\t\tconst output = collectBoundedOutput(child, processPolicy.maxOutputBytes, () => {\n\t\t\t\toutputLimitReached = true;\n\t\t\t\toutputLimitAbort.abort();\n\t\t\t});\n\t\t\tconst combinedAbort = new AbortController();\n\t\t\tconst abort = () => combinedAbort.abort();\n\t\t\tif (signal?.aborted || outputLimitAbort.signal.aborted) abort();\n\t\t\telse {\n\t\t\t\tsignal?.addEventListener(\"abort\", abort, { once: true });\n\t\t\t\toutputLimitAbort.signal.addEventListener(\"abort\", abort, { once: true });\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tconst terminal = await waitForChildProcessWithTermination(child, {\n\t\t\t\t\tsignal: combinedAbort.signal,\n\t\t\t\t\ttimeoutMs: processPolicy.timeoutMs,\n\t\t\t\t\tkillGraceMs: 2_000,\n\t\t\t\t});\n\t\t\t\tconst captured = output.read();\n\t\t\t\tconst outcome: RunProcessDetails[\"outcome\"] = outputLimitReached\n\t\t\t\t\t? \"output_limit\"\n\t\t\t\t\t: terminal.reason === \"timeout\"\n\t\t\t\t\t\t? \"timeout\"\n\t\t\t\t\t\t: terminal.reason === \"aborted\"\n\t\t\t\t\t\t\t? \"aborted\"\n\t\t\t\t\t\t\t: terminal.code === 0\n\t\t\t\t\t\t\t\t? \"exited\"\n\t\t\t\t\t\t\t\t: \"failed\";\n\t\t\t\tconst body = [\n\t\t\t\t\t`outcome: ${outcome}`,\n\t\t\t\t\t`exitCode: ${terminal.code ?? \"null\"}`,\n\t\t\t\t\tcaptured.stdout ? `stdout:\\n${captured.stdout}` : \"stdout: (empty)\",\n\t\t\t\t\tcaptured.stderr ? `stderr:\\n${captured.stderr}` : \"stderr: (empty)\",\n\t\t\t\t].join(\"\\n\");\n\t\t\t\treturn {\n\t\t\t\t\tcontent: [{ type: \"text\" as const, text: body }],\n\t\t\t\t\t...(outcome === \"exited\" ? {} : { isError: true }),\n\t\t\t\t\tdetails: {\n\t\t\t\t\t\toutcome,\n\t\t\t\t\t\texecutable: input.executable,\n\t\t\t\t\t\texitCode: terminal.code,\n\t\t\t\t\t\tdurationMs: Date.now() - startedAt,\n\t\t\t\t\t\ttruncated: captured.truncated,\n\t\t\t\t\t} satisfies RunProcessDetails,\n\t\t\t\t};\n\t\t\t} finally {\n\t\t\t\tsignal?.removeEventListener(\"abort\", abort);\n\t\t\t\toutputLimitAbort.signal.removeEventListener(\"abort\", abort);\n\t\t\t}\n\t\t},\n\t};\n}\n\nexport function createRunProcessTool(cwd: string, options: RunProcessToolOptions): AgentTool {\n\treturn wrapToolDefinition(createRunProcessToolDefinition(cwd, options));\n}\n"]}
|
|
@@ -1,38 +1,28 @@
|
|
|
1
1
|
import { type Static, Type } from "typebox";
|
|
2
|
-
import { type
|
|
2
|
+
import { type CredentialManager, type CredentialProfileSummary } from "../secrets/credential-manager.ts";
|
|
3
3
|
declare const secretStoreSchema: Type.TObject<{
|
|
4
|
-
action: Type.TUnion<[Type.TLiteral<"
|
|
4
|
+
action: Type.TUnion<[Type.TLiteral<"status">, Type.TLiteral<"list">, Type.TLiteral<"activate">]>;
|
|
5
5
|
profile: Type.TOptional<Type.TString>;
|
|
6
|
-
description: Type.TOptional<Type.TString>;
|
|
7
|
-
envFile: Type.TOptional<Type.TString>;
|
|
8
|
-
variableNames: Type.TOptional<Type.TArray<Type.TString>>;
|
|
9
|
-
scope: Type.TOptional<Type.TUnion<[Type.TLiteral<"managed">, Type.TLiteral<"workspace">]>>;
|
|
10
6
|
}>;
|
|
11
7
|
export type SecretStoreToolInput = Static<typeof secretStoreSchema>;
|
|
12
|
-
export type SecretStoreStatus = "
|
|
8
|
+
export type SecretStoreStatus = "activated" | "available" | "cancelled" | "error" | "listed" | "unavailable";
|
|
13
9
|
export interface SecretStoreToolDetails {
|
|
14
10
|
action: SecretStoreToolInput["action"];
|
|
15
11
|
status: SecretStoreStatus;
|
|
16
12
|
profile?: string;
|
|
17
13
|
variableNames?: string[];
|
|
18
|
-
profiles?:
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
materialized?: boolean;
|
|
14
|
+
profiles?: CredentialProfileSummary[];
|
|
15
|
+
project?: string;
|
|
16
|
+
connected?: boolean;
|
|
22
17
|
code?: string;
|
|
23
18
|
message?: string;
|
|
24
19
|
}
|
|
25
20
|
export interface SecretStoreToolOptions {
|
|
26
|
-
|
|
27
|
-
vault?: SecretVault;
|
|
21
|
+
manager: CredentialManager;
|
|
28
22
|
}
|
|
29
23
|
export declare function createSecretStoreToolDefinition(options: SecretStoreToolOptions): import("../extensions/types.ts").ToolDefinition<Type.TObject<{
|
|
30
|
-
action: Type.TUnion<[Type.TLiteral<"
|
|
24
|
+
action: Type.TUnion<[Type.TLiteral<"status">, Type.TLiteral<"list">, Type.TLiteral<"activate">]>;
|
|
31
25
|
profile: Type.TOptional<Type.TString>;
|
|
32
|
-
description: Type.TOptional<Type.TString>;
|
|
33
|
-
envFile: Type.TOptional<Type.TString>;
|
|
34
|
-
variableNames: Type.TOptional<Type.TArray<Type.TString>>;
|
|
35
|
-
scope: Type.TOptional<Type.TUnion<[Type.TLiteral<"managed">, Type.TLiteral<"workspace">]>>;
|
|
36
26
|
}>, SecretStoreToolDetails, any> & import("../extensions/types.ts").ToolDefinition<any, any, any>;
|
|
37
27
|
export {};
|
|
38
28
|
//# sourceMappingURL=secret-store.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"secret-store.d.ts","sourceRoot":"","sources":["../../../src/core/tools/secret-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"secret-store.d.ts","sourceRoot":"","sources":["../../../src/core/tools/secret-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAG5C,OAAO,EACN,KAAK,iBAAiB,EAEtB,KAAK,wBAAwB,EAE7B,MAAM,kCAAkC,CAAC;AAO1C,QAAA,MAAM,iBAAiB;;;EAetB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG,MAAM,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAEpE,MAAM,MAAM,iBAAiB,GAAG,WAAW,GAAG,WAAW,GAAG,WAAW,GAAG,OAAO,GAAG,QAAQ,GAAG,aAAa,CAAC;AAE7G,MAAM,WAAW,sBAAsB;IACtC,MAAM,EAAE,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IACvC,MAAM,EAAE,iBAAiB,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,QAAQ,CAAC,EAAE,wBAAwB,EAAE,CAAC;IACtC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,sBAAsB;IACtC,OAAO,EAAE,iBAAiB,CAAC;CAC3B;AA4ED,wBAAgB,+BAA+B,CAAC,OAAO,EAAE,sBAAsB;;;kGAsF9E"}
|