@xenosystem/acp-agent 0.1.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/LICENSE +202 -0
- package/NOTICE +9 -0
- package/README.md +22 -0
- package/dist/acpAgentServer.d.ts +43 -0
- package/dist/acpAgentServer.d.ts.map +1 -0
- package/dist/acpAgentServer.js +450 -0
- package/dist/acpAgentServer.js.map +1 -0
- package/dist/adapters/adapterContractVersion.d.ts +24 -0
- package/dist/adapters/adapterContractVersion.d.ts.map +1 -0
- package/dist/adapters/adapterContractVersion.js +29 -0
- package/dist/adapters/adapterContractVersion.js.map +1 -0
- package/dist/adapters/adapterDiagnostics.d.ts +19 -0
- package/dist/adapters/adapterDiagnostics.d.ts.map +1 -0
- package/dist/adapters/adapterDiagnostics.js +18 -0
- package/dist/adapters/adapterDiagnostics.js.map +1 -0
- package/dist/adapters/adapterErrors.d.ts +19 -0
- package/dist/adapters/adapterErrors.d.ts.map +1 -0
- package/dist/adapters/adapterErrors.js +23 -0
- package/dist/adapters/adapterErrors.js.map +1 -0
- package/dist/adapters/adapterEventMapper.d.ts +22 -0
- package/dist/adapters/adapterEventMapper.d.ts.map +1 -0
- package/dist/adapters/adapterEventMapper.js +70 -0
- package/dist/adapters/adapterEventMapper.js.map +1 -0
- package/dist/adapters/adapterEventParser.d.ts +16 -0
- package/dist/adapters/adapterEventParser.d.ts.map +1 -0
- package/dist/adapters/adapterEventParser.js +95 -0
- package/dist/adapters/adapterEventParser.js.map +1 -0
- package/dist/adapters/adapterEventProtocol.d.ts +85 -0
- package/dist/adapters/adapterEventProtocol.d.ts.map +1 -0
- package/dist/adapters/adapterEventProtocol.js +74 -0
- package/dist/adapters/adapterEventProtocol.js.map +1 -0
- package/dist/adapters/adapterFailureTaxonomy.d.ts +19 -0
- package/dist/adapters/adapterFailureTaxonomy.d.ts.map +1 -0
- package/dist/adapters/adapterFailureTaxonomy.js +62 -0
- package/dist/adapters/adapterFailureTaxonomy.js.map +1 -0
- package/dist/adapters/adapterHarnessTypes.d.ts +103 -0
- package/dist/adapters/adapterHarnessTypes.d.ts.map +1 -0
- package/dist/adapters/adapterHarnessTypes.js +15 -0
- package/dist/adapters/adapterHarnessTypes.js.map +1 -0
- package/dist/adapters/adapterProcessHarness.d.ts +23 -0
- package/dist/adapters/adapterProcessHarness.d.ts.map +1 -0
- package/dist/adapters/adapterProcessHarness.js +235 -0
- package/dist/adapters/adapterProcessHarness.js.map +1 -0
- package/dist/adapters/providerContractTypes.d.ts +64 -0
- package/dist/adapters/providerContractTypes.d.ts.map +1 -0
- package/dist/adapters/providerContractTypes.js +79 -0
- package/dist/adapters/providerContractTypes.js.map +1 -0
- package/dist/adapters/testAdapterProvider.d.ts +19 -0
- package/dist/adapters/testAdapterProvider.d.ts.map +1 -0
- package/dist/adapters/testAdapterProvider.js +95 -0
- package/dist/adapters/testAdapterProvider.js.map +1 -0
- package/dist/cli.d.ts +16 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +1059 -0
- package/dist/cli.js.map +1 -0
- package/dist/config/providerApprovalStore.d.ts +39 -0
- package/dist/config/providerApprovalStore.d.ts.map +1 -0
- package/dist/config/providerApprovalStore.js +87 -0
- package/dist/config/providerApprovalStore.js.map +1 -0
- package/dist/config/providerApprovalTypes.d.ts +30 -0
- package/dist/config/providerApprovalTypes.d.ts.map +1 -0
- package/dist/config/providerApprovalTypes.js +11 -0
- package/dist/config/providerApprovalTypes.js.map +1 -0
- package/dist/config/providerPolicyConfig.d.ts +31 -0
- package/dist/config/providerPolicyConfig.d.ts.map +1 -0
- package/dist/config/providerPolicyConfig.js +111 -0
- package/dist/config/providerPolicyConfig.js.map +1 -0
- package/dist/config/providerPolicyDiagnostics.d.ts +49 -0
- package/dist/config/providerPolicyDiagnostics.d.ts.map +1 -0
- package/dist/config/providerPolicyDiagnostics.js +76 -0
- package/dist/config/providerPolicyDiagnostics.js.map +1 -0
- package/dist/config/providerPolicyHash.d.ts +14 -0
- package/dist/config/providerPolicyHash.d.ts.map +1 -0
- package/dist/config/providerPolicyHash.js +65 -0
- package/dist/config/providerPolicyHash.js.map +1 -0
- package/dist/config/providerPolicySchema.d.ts +32 -0
- package/dist/config/providerPolicySchema.d.ts.map +1 -0
- package/dist/config/providerPolicySchema.js +130 -0
- package/dist/config/providerPolicySchema.js.map +1 -0
- package/dist/config/providerRunnability.d.ts +36 -0
- package/dist/config/providerRunnability.d.ts.map +1 -0
- package/dist/config/providerRunnability.js +72 -0
- package/dist/config/providerRunnability.js.map +1 -0
- package/dist/errors.d.ts +31 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +45 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +79 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +83 -0
- package/dist/index.js.map +1 -0
- package/dist/process/providerProcessAudit.d.ts +14 -0
- package/dist/process/providerProcessAudit.d.ts.map +1 -0
- package/dist/process/providerProcessAudit.js +27 -0
- package/dist/process/providerProcessAudit.js.map +1 -0
- package/dist/process/providerProcessDiagnostics.d.ts +30 -0
- package/dist/process/providerProcessDiagnostics.d.ts.map +1 -0
- package/dist/process/providerProcessDiagnostics.js +51 -0
- package/dist/process/providerProcessDiagnostics.js.map +1 -0
- package/dist/process/providerProcessEnvironment.d.ts +29 -0
- package/dist/process/providerProcessEnvironment.d.ts.map +1 -0
- package/dist/process/providerProcessEnvironment.js +37 -0
- package/dist/process/providerProcessEnvironment.js.map +1 -0
- package/dist/process/providerProcessErrors.d.ts +21 -0
- package/dist/process/providerProcessErrors.d.ts.map +1 -0
- package/dist/process/providerProcessErrors.js +25 -0
- package/dist/process/providerProcessErrors.js.map +1 -0
- package/dist/process/providerProcessOutput.d.ts +24 -0
- package/dist/process/providerProcessOutput.d.ts.map +1 -0
- package/dist/process/providerProcessOutput.js +52 -0
- package/dist/process/providerProcessOutput.js.map +1 -0
- package/dist/process/providerProcessSupervisor.d.ts +40 -0
- package/dist/process/providerProcessSupervisor.d.ts.map +1 -0
- package/dist/process/providerProcessSupervisor.js +305 -0
- package/dist/process/providerProcessSupervisor.js.map +1 -0
- package/dist/process/providerProcessTypes.d.ts +114 -0
- package/dist/process/providerProcessTypes.d.ts.map +1 -0
- package/dist/process/providerProcessTypes.js +30 -0
- package/dist/process/providerProcessTypes.js.map +1 -0
- package/dist/process/providerProcessValidation.d.ts +26 -0
- package/dist/process/providerProcessValidation.d.ts.map +1 -0
- package/dist/process/providerProcessValidation.js +112 -0
- package/dist/process/providerProcessValidation.js.map +1 -0
- package/dist/process/providerProcessWorkspace.d.ts +38 -0
- package/dist/process/providerProcessWorkspace.d.ts.map +1 -0
- package/dist/process/providerProcessWorkspace.js +86 -0
- package/dist/process/providerProcessWorkspace.js.map +1 -0
- package/dist/providers/claudeLocalProvider.d.ts +68 -0
- package/dist/providers/claudeLocalProvider.d.ts.map +1 -0
- package/dist/providers/claudeLocalProvider.js +217 -0
- package/dist/providers/claudeLocalProvider.js.map +1 -0
- package/dist/providers/claudeStreamJsonParser.d.ts +39 -0
- package/dist/providers/claudeStreamJsonParser.d.ts.map +1 -0
- package/dist/providers/claudeStreamJsonParser.js +180 -0
- package/dist/providers/claudeStreamJsonParser.js.map +1 -0
- package/dist/providers/codexExecJsonParser.d.ts +38 -0
- package/dist/providers/codexExecJsonParser.d.ts.map +1 -0
- package/dist/providers/codexExecJsonParser.js +245 -0
- package/dist/providers/codexExecJsonParser.js.map +1 -0
- package/dist/providers/codexLocalProvider.d.ts +46 -0
- package/dist/providers/codexLocalProvider.d.ts.map +1 -0
- package/dist/providers/codexLocalProvider.js +430 -0
- package/dist/providers/codexLocalProvider.js.map +1 -0
- package/dist/providers/codexModelCatalog.d.ts +13 -0
- package/dist/providers/codexModelCatalog.d.ts.map +1 -0
- package/dist/providers/codexModelCatalog.js +133 -0
- package/dist/providers/codexModelCatalog.js.map +1 -0
- package/dist/providers/fixtureProvider.d.ts +14 -0
- package/dist/providers/fixtureProvider.d.ts.map +1 -0
- package/dist/providers/fixtureProvider.js +160 -0
- package/dist/providers/fixtureProvider.js.map +1 -0
- package/dist/providers/providerDiscovery.d.ts +24 -0
- package/dist/providers/providerDiscovery.d.ts.map +1 -0
- package/dist/providers/providerDiscovery.js +128 -0
- package/dist/providers/providerDiscovery.js.map +1 -0
- package/dist/providers/providerErrors.d.ts +64 -0
- package/dist/providers/providerErrors.d.ts.map +1 -0
- package/dist/providers/providerErrors.js +101 -0
- package/dist/providers/providerErrors.js.map +1 -0
- package/dist/providers/providerEvents.d.ts +63 -0
- package/dist/providers/providerEvents.d.ts.map +1 -0
- package/dist/providers/providerEvents.js +86 -0
- package/dist/providers/providerEvents.js.map +1 -0
- package/dist/providers/providerRegistry.d.ts +31 -0
- package/dist/providers/providerRegistry.d.ts.map +1 -0
- package/dist/providers/providerRegistry.js +234 -0
- package/dist/providers/providerRegistry.js.map +1 -0
- package/dist/providers/providerSafety.d.ts +17 -0
- package/dist/providers/providerSafety.d.ts.map +1 -0
- package/dist/providers/providerSafety.js +36 -0
- package/dist/providers/providerSafety.js.map +1 -0
- package/dist/providers/providerTypes.d.ts +212 -0
- package/dist/providers/providerTypes.d.ts.map +1 -0
- package/dist/providers/providerTypes.js +15 -0
- package/dist/providers/providerTypes.js.map +1 -0
- package/dist/providers/xenoLocalProvider.d.ts +35 -0
- package/dist/providers/xenoLocalProvider.d.ts.map +1 -0
- package/dist/providers/xenoLocalProvider.js +159 -0
- package/dist/providers/xenoLocalProvider.js.map +1 -0
- package/dist/sandbox/providerSandbox.d.ts +35 -0
- package/dist/sandbox/providerSandbox.d.ts.map +1 -0
- package/dist/sandbox/providerSandbox.js +93 -0
- package/dist/sandbox/providerSandbox.js.map +1 -0
- package/dist/sandbox/providerSandboxAudit.d.ts +12 -0
- package/dist/sandbox/providerSandboxAudit.d.ts.map +1 -0
- package/dist/sandbox/providerSandboxAudit.js +25 -0
- package/dist/sandbox/providerSandboxAudit.js.map +1 -0
- package/dist/sandbox/providerSandboxDiagnostics.d.ts +13 -0
- package/dist/sandbox/providerSandboxDiagnostics.d.ts.map +1 -0
- package/dist/sandbox/providerSandboxDiagnostics.js +28 -0
- package/dist/sandbox/providerSandboxDiagnostics.js.map +1 -0
- package/dist/sandbox/providerSandboxTypes.d.ts +138 -0
- package/dist/sandbox/providerSandboxTypes.d.ts.map +1 -0
- package/dist/sandbox/providerSandboxTypes.js +17 -0
- package/dist/sandbox/providerSandboxTypes.js.map +1 -0
- package/dist/sandbox/sandboxCancellation.d.ts +6 -0
- package/dist/sandbox/sandboxCancellation.d.ts.map +1 -0
- package/dist/sandbox/sandboxCancellation.js +24 -0
- package/dist/sandbox/sandboxCancellation.js.map +1 -0
- package/dist/sandbox/sandboxErrors.d.ts +17 -0
- package/dist/sandbox/sandboxErrors.d.ts.map +1 -0
- package/dist/sandbox/sandboxErrors.js +21 -0
- package/dist/sandbox/sandboxErrors.js.map +1 -0
- package/dist/sandbox/sandboxFilesystem.d.ts +14 -0
- package/dist/sandbox/sandboxFilesystem.d.ts.map +1 -0
- package/dist/sandbox/sandboxFilesystem.js +51 -0
- package/dist/sandbox/sandboxFilesystem.js.map +1 -0
- package/dist/sandbox/sandboxNetwork.d.ts +14 -0
- package/dist/sandbox/sandboxNetwork.d.ts.map +1 -0
- package/dist/sandbox/sandboxNetwork.js +60 -0
- package/dist/sandbox/sandboxNetwork.js.map +1 -0
- package/dist/sandbox/sandboxSecrets.d.ts +17 -0
- package/dist/sandbox/sandboxSecrets.d.ts.map +1 -0
- package/dist/sandbox/sandboxSecrets.js +61 -0
- package/dist/sandbox/sandboxSecrets.js.map +1 -0
- package/dist/sandbox/sandboxTerminal.d.ts +14 -0
- package/dist/sandbox/sandboxTerminal.d.ts.map +1 -0
- package/dist/sandbox/sandboxTerminal.js +32 -0
- package/dist/sandbox/sandboxTerminal.js.map +1 -0
- package/dist/security/authPolicy.d.ts +31 -0
- package/dist/security/authPolicy.d.ts.map +1 -0
- package/dist/security/authPolicy.js +72 -0
- package/dist/security/authPolicy.js.map +1 -0
- package/dist/security/capabilityGate.d.ts +16 -0
- package/dist/security/capabilityGate.d.ts.map +1 -0
- package/dist/security/capabilityGate.js +101 -0
- package/dist/security/capabilityGate.js.map +1 -0
- package/dist/security/egressPolicy.d.ts +31 -0
- package/dist/security/egressPolicy.d.ts.map +1 -0
- package/dist/security/egressPolicy.js +120 -0
- package/dist/security/egressPolicy.js.map +1 -0
- package/dist/security/redaction.d.ts +16 -0
- package/dist/security/redaction.d.ts.map +1 -0
- package/dist/security/redaction.js +65 -0
- package/dist/security/redaction.js.map +1 -0
- package/dist/security/secretBinding.d.ts +34 -0
- package/dist/security/secretBinding.d.ts.map +1 -0
- package/dist/security/secretBinding.js +66 -0
- package/dist/security/secretBinding.js.map +1 -0
- package/dist/security/secretStore.d.ts +37 -0
- package/dist/security/secretStore.d.ts.map +1 -0
- package/dist/security/secretStore.js +55 -0
- package/dist/security/secretStore.js.map +1 -0
- package/dist/security/securityDiagnostics.d.ts +39 -0
- package/dist/security/securityDiagnostics.d.ts.map +1 -0
- package/dist/security/securityDiagnostics.js +36 -0
- package/dist/security/securityDiagnostics.js.map +1 -0
- package/dist/security/securityTypes.d.ts +77 -0
- package/dist/security/securityTypes.d.ts.map +1 -0
- package/dist/security/securityTypes.js +17 -0
- package/dist/security/securityTypes.js.map +1 -0
- package/dist/sessionStore.d.ts +33 -0
- package/dist/sessionStore.d.ts.map +1 -0
- package/dist/sessionStore.js +42 -0
- package/dist/sessionStore.js.map +1 -0
- package/dist/stdioJsonRpc.d.ts +43 -0
- package/dist/stdioJsonRpc.d.ts.map +1 -0
- package/dist/stdioJsonRpc.js +219 -0
- package/dist/stdioJsonRpc.js.map +1 -0
- package/dist/types.d.ts +78 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +12 -0
- package/dist/types.js.map +1 -0
- package/dist/version.d.ts +7 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +7 -0
- package/dist/version.js.map +1 -0
- package/package.json +55 -0
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Provider sandbox execution types (XACP-008).
|
|
3
|
+
*
|
|
4
|
+
* The runtime ENFORCEMENT boundary future adapters run inside. A provider receives only a
|
|
5
|
+
* `ProviderSandboxContext` — never raw Node globals — and every capability is deny-by-default
|
|
6
|
+
* and policy-gated.
|
|
7
|
+
*
|
|
8
|
+
* HONEST SCOPE: this is an IN-PROCESS, dependency-injected provider sandbox. It enforces
|
|
9
|
+
* XENO-authored adapter behavior through guarded interfaces + audit + fail-closed defaults.
|
|
10
|
+
* It is NOT a hostile-code OS sandbox — true containment of untrusted native code would require
|
|
11
|
+
* a later process/OS-level isolation milestone.
|
|
12
|
+
*
|
|
13
|
+
* Leaf module: imports only from `../security/securityTypes.js` (avoids cycles with
|
|
14
|
+
* `../providers/providerTypes.js`, which references `ProviderSandboxContext`).
|
|
15
|
+
*/
|
|
16
|
+
export {};
|
|
17
|
+
//# sourceMappingURL=providerSandboxTypes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"providerSandboxTypes.js","sourceRoot":"","sources":["../../src/sandbox/providerSandboxTypes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cancellation surface for the sandbox, backed by the prompt's AbortSignal.
|
|
3
|
+
*/
|
|
4
|
+
import type { SandboxCancellation } from "./providerSandboxTypes.js";
|
|
5
|
+
export declare function createSandboxCancellation(signal: AbortSignal): SandboxCancellation;
|
|
6
|
+
//# sourceMappingURL=sandboxCancellation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sandboxCancellation.d.ts","sourceRoot":"","sources":["../../src/sandbox/sandboxCancellation.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAErE,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,WAAW,GAAG,mBAAmB,CAkBlF"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cancellation surface for the sandbox, backed by the prompt's AbortSignal.
|
|
3
|
+
*/
|
|
4
|
+
import { SandboxError } from "./sandboxErrors.js";
|
|
5
|
+
export function createSandboxCancellation(signal) {
|
|
6
|
+
return {
|
|
7
|
+
signal,
|
|
8
|
+
throwIfCancelled() {
|
|
9
|
+
if (signal.aborted) {
|
|
10
|
+
throw new SandboxError({ code: "SANDBOX_CANCELLED", safeMessage: "operation cancelled" });
|
|
11
|
+
}
|
|
12
|
+
},
|
|
13
|
+
onCancel(fn) {
|
|
14
|
+
if (signal.aborted) {
|
|
15
|
+
fn();
|
|
16
|
+
return () => { };
|
|
17
|
+
}
|
|
18
|
+
const handler = () => fn();
|
|
19
|
+
signal.addEventListener("abort", handler, { once: true });
|
|
20
|
+
return () => signal.removeEventListener("abort", handler);
|
|
21
|
+
},
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=sandboxCancellation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sandboxCancellation.js","sourceRoot":"","sources":["../../src/sandbox/sandboxCancellation.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGlD,MAAM,UAAU,yBAAyB,CAAC,MAAmB;IAC3D,OAAO;QACL,MAAM;QACN,gBAAgB;YACd,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBACnB,MAAM,IAAI,YAAY,CAAC,EAAE,IAAI,EAAE,mBAAmB,EAAE,WAAW,EAAE,qBAAqB,EAAE,CAAC,CAAC;YAC5F,CAAC;QACH,CAAC;QACD,QAAQ,CAAC,EAAc;YACrB,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBACnB,EAAE,EAAE,CAAC;gBACL,OAAO,GAAG,EAAE,GAAE,CAAC,CAAC;YAClB,CAAC;YACD,MAAM,OAAO,GAAG,GAAS,EAAE,CAAC,EAAE,EAAE,CAAC;YACjC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YAC1D,OAAO,GAAG,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC5D,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sandbox error taxonomy. Safe messages only (no stack traces / secrets on stdout).
|
|
3
|
+
*/
|
|
4
|
+
export type SandboxErrorCode = "SANDBOX_NOT_ALLOWED" | "SANDBOX_NETWORK_DENIED" | "SANDBOX_NO_TRANSPORT" | "SANDBOX_SECRET_DENIED" | "SANDBOX_SECRET_UNAVAILABLE" | "SANDBOX_FILESYSTEM_DENIED" | "SANDBOX_TERMINAL_DENIED" | "SANDBOX_CANCELLED" | "SANDBOX_INTERNAL";
|
|
5
|
+
export declare class SandboxError extends Error {
|
|
6
|
+
readonly code: SandboxErrorCode;
|
|
7
|
+
readonly providerId?: string;
|
|
8
|
+
readonly redactedDetails?: Record<string, unknown>;
|
|
9
|
+
constructor(init: {
|
|
10
|
+
code: SandboxErrorCode;
|
|
11
|
+
safeMessage: string;
|
|
12
|
+
providerId?: string;
|
|
13
|
+
redactedDetails?: Record<string, unknown>;
|
|
14
|
+
});
|
|
15
|
+
get safeMessage(): string;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=sandboxErrors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sandboxErrors.d.ts","sourceRoot":"","sources":["../../src/sandbox/sandboxErrors.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,MAAM,gBAAgB,GACxB,qBAAqB,GACrB,wBAAwB,GACxB,sBAAsB,GACtB,uBAAuB,GACvB,4BAA4B,GAC5B,2BAA2B,GAC3B,yBAAyB,GACzB,mBAAmB,GACnB,kBAAkB,CAAC;AAEvB,qBAAa,YAAa,SAAQ,KAAK;IACrC,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC;IAChC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;gBAEvC,IAAI,EAAE;QAChB,IAAI,EAAE,gBAAgB,CAAC;QACvB,WAAW,EAAE,MAAM,CAAC;QACpB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KAC3C;IAQD,IAAI,WAAW,IAAI,MAAM,CAExB;CACF"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sandbox error taxonomy. Safe messages only (no stack traces / secrets on stdout).
|
|
3
|
+
*/
|
|
4
|
+
export class SandboxError extends Error {
|
|
5
|
+
code;
|
|
6
|
+
providerId;
|
|
7
|
+
redactedDetails;
|
|
8
|
+
constructor(init) {
|
|
9
|
+
super(init.safeMessage);
|
|
10
|
+
this.name = "SandboxError";
|
|
11
|
+
this.code = init.code;
|
|
12
|
+
if (init.providerId !== undefined)
|
|
13
|
+
this.providerId = init.providerId;
|
|
14
|
+
if (init.redactedDetails !== undefined)
|
|
15
|
+
this.redactedDetails = init.redactedDetails;
|
|
16
|
+
}
|
|
17
|
+
get safeMessage() {
|
|
18
|
+
return this.message;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=sandboxErrors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sandboxErrors.js","sourceRoot":"","sources":["../../src/sandbox/sandboxErrors.ts"],"names":[],"mappings":"AAAA;;GAEG;AAaH,MAAM,OAAO,YAAa,SAAQ,KAAK;IAC5B,IAAI,CAAmB;IACvB,UAAU,CAAU;IACpB,eAAe,CAA2B;IAEnD,YAAY,IAKX;QACC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACxB,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;QAC3B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACtB,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS;YAAE,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QACrE,IAAI,IAAI,CAAC,eAAe,KAAK,SAAS;YAAE,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC;IACtF,CAAC;IAED,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;CACF"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Guarded filesystem capability. Deny-all by default (and whenever I/O authority is `none` or
|
|
3
|
+
* no backend is bound). Performs NO real filesystem I/O in source — a TEST-ONLY backend may be
|
|
4
|
+
* injected. Denied operations never touch disk. Audit records the operation, not the path.
|
|
5
|
+
*/
|
|
6
|
+
import type { FsBackend, SandboxAudit, SandboxFilesystem, SandboxIoLevel } from "./providerSandboxTypes.js";
|
|
7
|
+
export declare function createSandboxFilesystem(opts: {
|
|
8
|
+
providerId: string;
|
|
9
|
+
filesystem: SandboxIoLevel;
|
|
10
|
+
audit: SandboxAudit;
|
|
11
|
+
workspaceRoot?: string;
|
|
12
|
+
backend?: FsBackend;
|
|
13
|
+
}): SandboxFilesystem;
|
|
14
|
+
//# sourceMappingURL=sandboxFilesystem.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sandboxFilesystem.d.ts","sourceRoot":"","sources":["../../src/sandbox/sandboxFilesystem.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EACV,SAAS,EACT,YAAY,EACZ,iBAAiB,EACjB,cAAc,EACf,MAAM,2BAA2B,CAAC;AAWnC,wBAAgB,uBAAuB,CAAC,IAAI,EAAE;IAC5C,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,cAAc,CAAC;IAC3B,KAAK,EAAE,YAAY,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,SAAS,CAAC;CACrB,GAAG,iBAAiB,CAiCpB"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Guarded filesystem capability. Deny-all by default (and whenever I/O authority is `none` or
|
|
3
|
+
* no backend is bound). Performs NO real filesystem I/O in source — a TEST-ONLY backend may be
|
|
4
|
+
* injected. Denied operations never touch disk. Audit records the operation, not the path.
|
|
5
|
+
*/
|
|
6
|
+
import { isAbsolute, resolve, sep } from "node:path";
|
|
7
|
+
import { SandboxError } from "./sandboxErrors.js";
|
|
8
|
+
function containPath(root, requested) {
|
|
9
|
+
const absRoot = resolve(root);
|
|
10
|
+
const candidate = isAbsolute(requested) ? resolve(requested) : resolve(absRoot, requested);
|
|
11
|
+
if (candidate !== absRoot && !candidate.startsWith(absRoot + sep)) {
|
|
12
|
+
throw new Error("path escapes workspace");
|
|
13
|
+
}
|
|
14
|
+
return candidate;
|
|
15
|
+
}
|
|
16
|
+
export function createSandboxFilesystem(opts) {
|
|
17
|
+
let denied = 0;
|
|
18
|
+
const deny = (op, reason = "not_permitted") => {
|
|
19
|
+
denied += 1;
|
|
20
|
+
opts.audit.record("sandbox.filesystem.denied", `filesystem ${op} denied`, { op, reason });
|
|
21
|
+
throw new SandboxError({
|
|
22
|
+
code: "SANDBOX_FILESYSTEM_DENIED",
|
|
23
|
+
safeMessage: `filesystem ${op} is not permitted (filesystem authority: ${opts.filesystem})`,
|
|
24
|
+
providerId: opts.providerId,
|
|
25
|
+
});
|
|
26
|
+
};
|
|
27
|
+
const contained = (op, path) => {
|
|
28
|
+
if (opts.filesystem === "none" || opts.filesystem === "unknown" || !opts.backend)
|
|
29
|
+
return deny(op);
|
|
30
|
+
if (!opts.workspaceRoot || !isAbsolute(opts.workspaceRoot))
|
|
31
|
+
return deny(op, "workspace_root_unbound");
|
|
32
|
+
try {
|
|
33
|
+
return containPath(opts.workspaceRoot, path);
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
return deny(op, "outside_workspace");
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
return {
|
|
40
|
+
async readText(path) {
|
|
41
|
+
const safePath = contained("read", path);
|
|
42
|
+
return opts.backend.readText(safePath);
|
|
43
|
+
},
|
|
44
|
+
async writeText(path, content) {
|
|
45
|
+
const safePath = contained("write", path);
|
|
46
|
+
return opts.backend.writeText(safePath, content);
|
|
47
|
+
},
|
|
48
|
+
diagnostics: () => ({ filesystem: opts.filesystem, denied }),
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=sandboxFilesystem.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sandboxFilesystem.js","sourceRoot":"","sources":["../../src/sandbox/sandboxFilesystem.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAQlD,SAAS,WAAW,CAAC,IAAY,EAAE,SAAiB;IAClD,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9B,MAAM,SAAS,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IAC3F,IAAI,SAAS,KAAK,OAAO,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,OAAO,GAAG,GAAG,CAAC,EAAE,CAAC;QAClE,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAC5C,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,IAMvC;IACC,IAAI,MAAM,GAAG,CAAC,CAAC;IAEf,MAAM,IAAI,GAAG,CAAC,EAAoB,EAAE,MAAM,GAAG,eAAe,EAAS,EAAE;QACrE,MAAM,IAAI,CAAC,CAAC;QACZ,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,2BAA2B,EAAE,cAAc,EAAE,SAAS,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;QAC1F,MAAM,IAAI,YAAY,CAAC;YACrB,IAAI,EAAE,2BAA2B;YACjC,WAAW,EAAE,cAAc,EAAE,4CAA4C,IAAI,CAAC,UAAU,GAAG;YAC3F,UAAU,EAAE,IAAI,CAAC,UAAU;SAC5B,CAAC,CAAC;IACL,CAAC,CAAC;IACF,MAAM,SAAS,GAAG,CAAC,EAAoB,EAAE,IAAY,EAAU,EAAE;QAC/D,IAAI,IAAI,CAAC,UAAU,KAAK,MAAM,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAO,IAAI,CAAC,EAAE,CAAC,CAAC;QAClG,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC;YAAE,OAAO,IAAI,CAAC,EAAE,EAAE,wBAAwB,CAAC,CAAC;QACtG,IAAI,CAAC;YACH,OAAO,WAAW,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;QAC/C,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC,EAAE,EAAE,mBAAmB,CAAC,CAAC;QACvC,CAAC;IACH,CAAC,CAAC;IAEF,OAAO;QACL,KAAK,CAAC,QAAQ,CAAC,IAAY;YACzB,MAAM,QAAQ,GAAG,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YACzC,OAAO,IAAI,CAAC,OAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC1C,CAAC;QACD,KAAK,CAAC,SAAS,CAAC,IAAY,EAAE,OAAe;YAC3C,MAAM,QAAQ,GAAG,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YAC1C,OAAO,IAAI,CAAC,OAAQ,CAAC,SAAS,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACpD,CAAC;QACD,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,CAAC;KAC7D,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Guarded network capability. Deny-by-default, egress-policy-enforced, audited, header-redacted.
|
|
3
|
+
* Performs NO real network call: there is no default transport. A TEST-ONLY transport may be
|
|
4
|
+
* injected; denied requests never reach it.
|
|
5
|
+
*/
|
|
6
|
+
import type { ProviderEgressPolicy } from "../security/securityTypes.js";
|
|
7
|
+
import type { NetworkTransport, SandboxAudit, SandboxNetwork } from "./providerSandboxTypes.js";
|
|
8
|
+
export declare function createSandboxNetwork(opts: {
|
|
9
|
+
providerId: string;
|
|
10
|
+
egressPolicy?: ProviderEgressPolicy;
|
|
11
|
+
audit: SandboxAudit;
|
|
12
|
+
transport?: NetworkTransport;
|
|
13
|
+
}): SandboxNetwork;
|
|
14
|
+
//# sourceMappingURL=sandboxNetwork.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sandboxNetwork.d.ts","sourceRoot":"","sources":["../../src/sandbox/sandboxNetwork.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACzE,OAAO,KAAK,EACV,gBAAgB,EAChB,YAAY,EACZ,cAAc,EAEf,MAAM,2BAA2B,CAAC;AAUnC,wBAAgB,oBAAoB,CAAC,IAAI,EAAE;IACzC,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,oBAAoB,CAAC;IACpC,KAAK,EAAE,YAAY,CAAC;IACpB,SAAS,CAAC,EAAE,gBAAgB,CAAC;CAC9B,GAAG,cAAc,CA2CjB"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Guarded network capability. Deny-by-default, egress-policy-enforced, audited, header-redacted.
|
|
3
|
+
* Performs NO real network call: there is no default transport. A TEST-ONLY transport may be
|
|
4
|
+
* injected; denied requests never reach it.
|
|
5
|
+
*/
|
|
6
|
+
import { validateUrlAgainstEgressPolicy, NO_EGRESS_POLICY } from "../security/egressPolicy.js";
|
|
7
|
+
import { redactEnvRecord } from "../security/redaction.js";
|
|
8
|
+
import { SandboxError } from "./sandboxErrors.js";
|
|
9
|
+
function hostOf(url) {
|
|
10
|
+
try {
|
|
11
|
+
return new URL(url).host;
|
|
12
|
+
}
|
|
13
|
+
catch {
|
|
14
|
+
return "<invalid-url>";
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
export function createSandboxNetwork(opts) {
|
|
18
|
+
const policy = opts.egressPolicy ?? NO_EGRESS_POLICY;
|
|
19
|
+
let attempts = 0;
|
|
20
|
+
let denied = 0;
|
|
21
|
+
return {
|
|
22
|
+
validate(req) {
|
|
23
|
+
return validateUrlAgainstEgressPolicy(policy, req.url);
|
|
24
|
+
},
|
|
25
|
+
async request(req) {
|
|
26
|
+
attempts += 1;
|
|
27
|
+
const decision = validateUrlAgainstEgressPolicy(policy, req.url);
|
|
28
|
+
if (decision.status !== "allowed") {
|
|
29
|
+
denied += 1;
|
|
30
|
+
opts.audit.record("sandbox.network.denied", `network denied: ${decision.reasonCode}`, {
|
|
31
|
+
host: hostOf(req.url),
|
|
32
|
+
method: req.method ?? "GET",
|
|
33
|
+
});
|
|
34
|
+
throw new SandboxError({
|
|
35
|
+
code: "SANDBOX_NETWORK_DENIED",
|
|
36
|
+
safeMessage: decision.safeMessage,
|
|
37
|
+
providerId: opts.providerId,
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
// Allowed by policy — record with REDACTED headers.
|
|
41
|
+
opts.audit.record("sandbox.network.allowed", `network allowed: ${hostOf(req.url)}`, {
|
|
42
|
+
host: hostOf(req.url),
|
|
43
|
+
method: req.method ?? "GET",
|
|
44
|
+
headers: req.headers ? redactEnvRecord(req.headers) : {},
|
|
45
|
+
bodyBytes: req.bodyBytes ?? 0,
|
|
46
|
+
});
|
|
47
|
+
if (!opts.transport) {
|
|
48
|
+
denied += 1;
|
|
49
|
+
throw new SandboxError({
|
|
50
|
+
code: "SANDBOX_NO_TRANSPORT",
|
|
51
|
+
safeMessage: "no network transport bound (the sandbox performs no real network calls)",
|
|
52
|
+
providerId: opts.providerId,
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
return opts.transport(req);
|
|
56
|
+
},
|
|
57
|
+
diagnostics: () => ({ mode: policy.mode, allowedHosts: [...policy.allowedHosts], attempts, denied }),
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=sandboxNetwork.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sandboxNetwork.js","sourceRoot":"","sources":["../../src/sandbox/sandboxNetwork.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,8BAA8B,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/F,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AASlD,SAAS,MAAM,CAAC,GAAW;IACzB,IAAI,CAAC;QACH,OAAO,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,eAAe,CAAC;IACzB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,IAKpC;IACC,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,IAAI,gBAAgB,CAAC;IACrD,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,IAAI,MAAM,GAAG,CAAC,CAAC;IAEf,OAAO;QACL,QAAQ,CAAC,GAA0B;YACjC,OAAO,8BAA8B,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;QACzD,CAAC;QACD,KAAK,CAAC,OAAO,CAAC,GAA0B;YACtC,QAAQ,IAAI,CAAC,CAAC;YACd,MAAM,QAAQ,GAAG,8BAA8B,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;YACjE,IAAI,QAAQ,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBAClC,MAAM,IAAI,CAAC,CAAC;gBACZ,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,wBAAwB,EAAE,mBAAmB,QAAQ,CAAC,UAAU,EAAE,EAAE;oBACpF,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC;oBACrB,MAAM,EAAE,GAAG,CAAC,MAAM,IAAI,KAAK;iBAC5B,CAAC,CAAC;gBACH,MAAM,IAAI,YAAY,CAAC;oBACrB,IAAI,EAAE,wBAAwB;oBAC9B,WAAW,EAAE,QAAQ,CAAC,WAAW;oBACjC,UAAU,EAAE,IAAI,CAAC,UAAU;iBAC5B,CAAC,CAAC;YACL,CAAC;YACD,oDAAoD;YACpD,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,yBAAyB,EAAE,oBAAoB,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE;gBAClF,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC;gBACrB,MAAM,EAAE,GAAG,CAAC,MAAM,IAAI,KAAK;gBAC3B,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE;gBACxD,SAAS,EAAE,GAAG,CAAC,SAAS,IAAI,CAAC;aAC9B,CAAC,CAAC;YACH,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;gBACpB,MAAM,IAAI,CAAC,CAAC;gBACZ,MAAM,IAAI,YAAY,CAAC;oBACrB,IAAI,EAAE,sBAAsB;oBAC5B,WAAW,EAAE,yEAAyE;oBACtF,UAAU,EAAE,IAAI,CAAC,UAAU;iBAC5B,CAAC,CAAC;YACL,CAAC;YACD,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QAC7B,CAAC;QACD,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,YAAY,EAAE,CAAC,GAAG,MAAM,CAAC,YAAY,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;KACrG,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Guarded secrets capability. Metadata-only by default: it reads NO real secret — no
|
|
3
|
+
* process.env, no files, no keychain. A TEST-ONLY resolver may be injected. Resolving an
|
|
4
|
+
* unapproved reference is denied; the resolved value is opaque and never appears in audit or
|
|
5
|
+
* diagnostics.
|
|
6
|
+
*/
|
|
7
|
+
import type { ProviderAuthPolicy } from "../security/securityTypes.js";
|
|
8
|
+
import { type SecretStore } from "../security/secretStore.js";
|
|
9
|
+
import type { SandboxAudit, SandboxSecrets, SecretResolver } from "./providerSandboxTypes.js";
|
|
10
|
+
export declare function createSandboxSecrets(opts: {
|
|
11
|
+
providerId: string;
|
|
12
|
+
authPolicy?: ProviderAuthPolicy;
|
|
13
|
+
audit: SandboxAudit;
|
|
14
|
+
secretStore?: SecretStore;
|
|
15
|
+
resolver?: SecretResolver;
|
|
16
|
+
}): SandboxSecrets;
|
|
17
|
+
//# sourceMappingURL=sandboxSecrets.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sandboxSecrets.d.ts","sourceRoot":"","sources":["../../src/sandbox/sandboxSecrets.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAoB,KAAK,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAChF,OAAO,KAAK,EAEV,YAAY,EACZ,cAAc,EACd,cAAc,EACf,MAAM,2BAA2B,CAAC;AAEnC,wBAAgB,oBAAoB,CAAC,IAAI,EAAE;IACzC,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,kBAAkB,CAAC;IAChC,KAAK,EAAE,YAAY,CAAC;IACpB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,QAAQ,CAAC,EAAE,cAAc,CAAC;CAC3B,GAAG,cAAc,CAmDjB"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Guarded secrets capability. Metadata-only by default: it reads NO real secret — no
|
|
3
|
+
* process.env, no files, no keychain. A TEST-ONLY resolver may be injected. Resolving an
|
|
4
|
+
* unapproved reference is denied; the resolved value is opaque and never appears in audit or
|
|
5
|
+
* diagnostics.
|
|
6
|
+
*/
|
|
7
|
+
import { SandboxError } from "./sandboxErrors.js";
|
|
8
|
+
import { SecretStoreError } from "../security/secretStore.js";
|
|
9
|
+
export function createSandboxSecrets(opts) {
|
|
10
|
+
const refs = opts.authPolicy?.allowedSecretRefs ?? [];
|
|
11
|
+
let resolved = 0;
|
|
12
|
+
let denied = 0;
|
|
13
|
+
return {
|
|
14
|
+
listRefs: () => [...refs],
|
|
15
|
+
async resolve(refId) {
|
|
16
|
+
const ref = refs.find((r) => r.id === refId);
|
|
17
|
+
if (!ref) {
|
|
18
|
+
denied += 1;
|
|
19
|
+
opts.audit.record("sandbox.secret.denied", `secret reference not approved: ${refId}`, { refId });
|
|
20
|
+
throw new SandboxError({
|
|
21
|
+
code: "SANDBOX_SECRET_DENIED",
|
|
22
|
+
safeMessage: `secret reference '${refId}' is not approved`,
|
|
23
|
+
providerId: opts.providerId,
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
if (!opts.secretStore && !opts.resolver) {
|
|
27
|
+
denied += 1;
|
|
28
|
+
opts.audit.record("sandbox.secret.denied", `secret unavailable (no resolver bound): ${refId}`, { refId });
|
|
29
|
+
throw new SandboxError({
|
|
30
|
+
code: "SANDBOX_SECRET_UNAVAILABLE",
|
|
31
|
+
safeMessage: `secret '${refId}' is unavailable (no secret store or resolver bound; the sandbox loads no real secrets)`,
|
|
32
|
+
providerId: opts.providerId,
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
let value;
|
|
36
|
+
try {
|
|
37
|
+
value = opts.secretStore
|
|
38
|
+
? await opts.secretStore.resolve(ref)
|
|
39
|
+
: { kind: "opaque-secret", refId, value: await opts.resolver(refId) };
|
|
40
|
+
}
|
|
41
|
+
catch (err) {
|
|
42
|
+
denied += 1;
|
|
43
|
+
const safeMessage = err instanceof SecretStoreError
|
|
44
|
+
? err.safeMessage
|
|
45
|
+
: `secret '${refId}' is unavailable`;
|
|
46
|
+
opts.audit.record("sandbox.secret.denied", safeMessage, { refId });
|
|
47
|
+
throw new SandboxError({
|
|
48
|
+
code: "SANDBOX_SECRET_UNAVAILABLE",
|
|
49
|
+
safeMessage,
|
|
50
|
+
providerId: opts.providerId,
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
resolved += 1;
|
|
54
|
+
// Record the resolution WITHOUT the value.
|
|
55
|
+
opts.audit.record("sandbox.secret.resolved", `secret resolved: ${refId}`, { refId });
|
|
56
|
+
return value;
|
|
57
|
+
},
|
|
58
|
+
diagnostics: () => ({ refIds: refs.map((r) => r.id), resolved, denied }),
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=sandboxSecrets.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sandboxSecrets.js","sourceRoot":"","sources":["../../src/sandbox/sandboxSecrets.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Guarded terminal capability. Deny-all by default (and whenever terminal authority is `none`
|
|
3
|
+
* or no runner is bound). Performs NO process spawning in source (no `child_process`) — a
|
|
4
|
+
* TEST-ONLY runner may be injected. Denied runs never spawn. Audit records the command basename
|
|
5
|
+
* + arg count, never a full command line.
|
|
6
|
+
*/
|
|
7
|
+
import type { SandboxAudit, SandboxIoLevel, SandboxTerminal, TerminalRunner } from "./providerSandboxTypes.js";
|
|
8
|
+
export declare function createSandboxTerminal(opts: {
|
|
9
|
+
providerId: string;
|
|
10
|
+
terminal: SandboxIoLevel;
|
|
11
|
+
audit: SandboxAudit;
|
|
12
|
+
runner?: TerminalRunner;
|
|
13
|
+
}): SandboxTerminal;
|
|
14
|
+
//# sourceMappingURL=sandboxTerminal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sandboxTerminal.d.ts","sourceRoot":"","sources":["../../src/sandbox/sandboxTerminal.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EACV,YAAY,EACZ,cAAc,EACd,eAAe,EAGf,cAAc,EACf,MAAM,2BAA2B,CAAC;AAMnC,wBAAgB,qBAAqB,CAAC,IAAI,EAAE;IAC1C,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,cAAc,CAAC;IACzB,KAAK,EAAE,YAAY,CAAC;IACpB,MAAM,CAAC,EAAE,cAAc,CAAC;CACzB,GAAG,eAAe,CAqBlB"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Guarded terminal capability. Deny-all by default (and whenever terminal authority is `none`
|
|
3
|
+
* or no runner is bound). Performs NO process spawning in source (no `child_process`) — a
|
|
4
|
+
* TEST-ONLY runner may be injected. Denied runs never spawn. Audit records the command basename
|
|
5
|
+
* + arg count, never a full command line.
|
|
6
|
+
*/
|
|
7
|
+
import { SandboxError } from "./sandboxErrors.js";
|
|
8
|
+
function basename(p) {
|
|
9
|
+
return p.split(/[\\/]/).pop() ?? p;
|
|
10
|
+
}
|
|
11
|
+
export function createSandboxTerminal(opts) {
|
|
12
|
+
let denied = 0;
|
|
13
|
+
return {
|
|
14
|
+
async run(command, args, options) {
|
|
15
|
+
if (opts.terminal === "none" || opts.terminal === "unknown" || !opts.runner) {
|
|
16
|
+
denied += 1;
|
|
17
|
+
opts.audit.record("sandbox.terminal.denied", "terminal run denied", {
|
|
18
|
+
command: basename(command),
|
|
19
|
+
argCount: args.length,
|
|
20
|
+
});
|
|
21
|
+
throw new SandboxError({
|
|
22
|
+
code: "SANDBOX_TERMINAL_DENIED",
|
|
23
|
+
safeMessage: `terminal execution is not permitted (terminal authority: ${opts.terminal})`,
|
|
24
|
+
providerId: opts.providerId,
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
return opts.runner(command, args, options);
|
|
28
|
+
},
|
|
29
|
+
diagnostics: () => ({ terminal: opts.terminal, denied }),
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=sandboxTerminal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sandboxTerminal.js","sourceRoot":"","sources":["../../src/sandbox/sandboxTerminal.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAUlD,SAAS,QAAQ,CAAC,CAAS;IACzB,OAAO,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,IAKrC;IACC,IAAI,MAAM,GAAG,CAAC,CAAC;IAEf,OAAO;QACL,KAAK,CAAC,GAAG,CAAC,OAAe,EAAE,IAAc,EAAE,OAAgC;YACzE,IAAI,IAAI,CAAC,QAAQ,KAAK,MAAM,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;gBAC5E,MAAM,IAAI,CAAC,CAAC;gBACZ,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,yBAAyB,EAAE,qBAAqB,EAAE;oBAClE,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC;oBAC1B,QAAQ,EAAE,IAAI,CAAC,MAAM;iBACtB,CAAC,CAAC;gBACH,MAAM,IAAI,YAAY,CAAC;oBACrB,IAAI,EAAE,yBAAyB;oBAC/B,WAAW,EAAE,4DAA4D,IAAI,CAAC,QAAQ,GAAG;oBACzF,UAAU,EAAE,IAAI,CAAC,UAAU;iBAC5B,CAAC,CAAC;YACL,CAAC;YACD,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QAC7C,CAAC;QACD,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;KACzD,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Auth policy validation — METADATA ONLY.
|
|
3
|
+
*
|
|
4
|
+
* XACP-006 validates the SHAPE of an auth policy and its secret references. It never reads a
|
|
5
|
+
* secret: no process.env access for provider auth, no credential files, no keychain, no
|
|
6
|
+
* interactive login. Secret references describe *where* a secret would come from, never its
|
|
7
|
+
* value.
|
|
8
|
+
*/
|
|
9
|
+
import type { ProviderAuthPolicy, ProviderSecretReference, ProviderSafetyDecision } from "./securityTypes.js";
|
|
10
|
+
export interface AuthPolicySummary {
|
|
11
|
+
requirement: ProviderAuthPolicy["requirement"];
|
|
12
|
+
secretRefs: Array<{
|
|
13
|
+
id: string;
|
|
14
|
+
kind: string;
|
|
15
|
+
label: string;
|
|
16
|
+
required: boolean;
|
|
17
|
+
}>;
|
|
18
|
+
allowPlainEnv: boolean;
|
|
19
|
+
allowProcessEnv: boolean;
|
|
20
|
+
allowCredentialFiles: boolean;
|
|
21
|
+
allowInteractiveLogin: boolean;
|
|
22
|
+
}
|
|
23
|
+
/** Validate a single secret reference (metadata shape only). */
|
|
24
|
+
export declare function validateSecretReference(ref: ProviderSecretReference): ProviderSafetyDecision;
|
|
25
|
+
/** Validate an auth policy's internal consistency (still fail-closed at the gate). */
|
|
26
|
+
export declare function validateProviderAuthPolicy(policy: ProviderAuthPolicy): ProviderSafetyDecision;
|
|
27
|
+
/** A redacted, value-free summary of an auth policy (safe to print/diagnose). */
|
|
28
|
+
export declare function summarizeAuthPolicy(policy: ProviderAuthPolicy): AuthPolicySummary;
|
|
29
|
+
/** A safe, fully-blocked default auth policy. */
|
|
30
|
+
export declare const NO_AUTH_POLICY: ProviderAuthPolicy;
|
|
31
|
+
//# sourceMappingURL=authPolicy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authPolicy.d.ts","sourceRoot":"","sources":["../../src/security/authPolicy.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAE9G,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,kBAAkB,CAAC,aAAa,CAAC,CAAC;IAC/C,UAAU,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IAClF,aAAa,EAAE,OAAO,CAAC;IACvB,eAAe,EAAE,OAAO,CAAC;IACzB,oBAAoB,EAAE,OAAO,CAAC;IAC9B,qBAAqB,EAAE,OAAO,CAAC;CAChC;AAED,gEAAgE;AAChE,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,uBAAuB,GAAG,sBAAsB,CAW5F;AAED,sFAAsF;AACtF,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,kBAAkB,GAAG,sBAAsB,CAmB7F;AAED,iFAAiF;AACjF,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,kBAAkB,GAAG,iBAAiB,CAcjF;AAED,iDAAiD;AACjD,eAAO,MAAM,cAAc,EAAE,kBAO5B,CAAC"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Auth policy validation — METADATA ONLY.
|
|
3
|
+
*
|
|
4
|
+
* XACP-006 validates the SHAPE of an auth policy and its secret references. It never reads a
|
|
5
|
+
* secret: no process.env access for provider auth, no credential files, no keychain, no
|
|
6
|
+
* interactive login. Secret references describe *where* a secret would come from, never its
|
|
7
|
+
* value.
|
|
8
|
+
*/
|
|
9
|
+
/** Validate a single secret reference (metadata shape only). */
|
|
10
|
+
export function validateSecretReference(ref) {
|
|
11
|
+
if (!ref || typeof ref.id !== "string" || ref.id.trim() === "") {
|
|
12
|
+
return blocked("auth.secret_ref.invalid_id", "secret reference must have a non-empty id");
|
|
13
|
+
}
|
|
14
|
+
if (!["env", "file", "keychain", "manual"].includes(ref.kind)) {
|
|
15
|
+
return blocked("auth.secret_ref.invalid_kind", `unsupported secret reference kind: ${ref.kind}`);
|
|
16
|
+
}
|
|
17
|
+
if (typeof ref.label !== "string" || ref.label.trim() === "") {
|
|
18
|
+
return blocked("auth.secret_ref.invalid_label", "secret reference must have a label");
|
|
19
|
+
}
|
|
20
|
+
return { status: "not_applicable", reasonCode: "auth.secret_ref.ok", safeMessage: "secret reference is valid metadata" };
|
|
21
|
+
}
|
|
22
|
+
/** Validate an auth policy's internal consistency (still fail-closed at the gate). */
|
|
23
|
+
export function validateProviderAuthPolicy(policy) {
|
|
24
|
+
// XACP-006 hard rules: these unsafe mechanisms are never permitted yet.
|
|
25
|
+
if (policy.allowPlainEnv) {
|
|
26
|
+
return blocked("auth.plain_env_forbidden", "inline plaintext env values are not permitted");
|
|
27
|
+
}
|
|
28
|
+
if (policy.allowProcessEnv) {
|
|
29
|
+
return blocked("auth.process_env_forbidden", "reading process.env for provider auth is not permitted in XACP-006");
|
|
30
|
+
}
|
|
31
|
+
if (policy.allowCredentialFiles) {
|
|
32
|
+
return blocked("auth.credential_files_forbidden", "credential file reads are not permitted in XACP-006");
|
|
33
|
+
}
|
|
34
|
+
if (policy.allowInteractiveLogin) {
|
|
35
|
+
return blocked("auth.interactive_login_forbidden", "interactive login is not permitted in XACP-006");
|
|
36
|
+
}
|
|
37
|
+
for (const ref of policy.allowedSecretRefs ?? []) {
|
|
38
|
+
const refDecision = validateSecretReference(ref);
|
|
39
|
+
if (refDecision.status === "blocked")
|
|
40
|
+
return refDecision;
|
|
41
|
+
}
|
|
42
|
+
return { status: "not_applicable", reasonCode: "auth.policy.ok", safeMessage: "auth policy shape is valid (metadata only)" };
|
|
43
|
+
}
|
|
44
|
+
/** A redacted, value-free summary of an auth policy (safe to print/diagnose). */
|
|
45
|
+
export function summarizeAuthPolicy(policy) {
|
|
46
|
+
return {
|
|
47
|
+
requirement: policy.requirement,
|
|
48
|
+
secretRefs: (policy.allowedSecretRefs ?? []).map((r) => ({
|
|
49
|
+
id: r.id,
|
|
50
|
+
kind: r.kind,
|
|
51
|
+
label: r.label,
|
|
52
|
+
required: r.required,
|
|
53
|
+
})),
|
|
54
|
+
allowPlainEnv: policy.allowPlainEnv,
|
|
55
|
+
allowProcessEnv: policy.allowProcessEnv,
|
|
56
|
+
allowCredentialFiles: policy.allowCredentialFiles,
|
|
57
|
+
allowInteractiveLogin: policy.allowInteractiveLogin,
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
/** A safe, fully-blocked default auth policy. */
|
|
61
|
+
export const NO_AUTH_POLICY = {
|
|
62
|
+
requirement: "none",
|
|
63
|
+
allowedSecretRefs: [],
|
|
64
|
+
allowPlainEnv: false,
|
|
65
|
+
allowProcessEnv: false,
|
|
66
|
+
allowCredentialFiles: false,
|
|
67
|
+
allowInteractiveLogin: false,
|
|
68
|
+
};
|
|
69
|
+
function blocked(reasonCode, safeMessage) {
|
|
70
|
+
return { status: "blocked", reasonCode, safeMessage };
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=authPolicy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authPolicy.js","sourceRoot":"","sources":["../../src/security/authPolicy.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Capability gate — the controlled allow-path (XACP-006).
|
|
3
|
+
*
|
|
4
|
+
* `evaluateProviderSafety` combines a provider's declaration (capabilities, auth/network
|
|
5
|
+
* requirements, I/O authority, trust class, implementation status) with its declared auth +
|
|
6
|
+
* egress policies and returns a `ProviderCapabilityGate`. The stance is FAIL-CLOSED: a
|
|
7
|
+
* provider does NOT become runnable merely by declaring capabilities — it must pass every
|
|
8
|
+
* sub-decision. In XACP-006 only the fixture (which needs nothing) evaluates `allowed`; every
|
|
9
|
+
* real/placeholder provider is `blocked` (or `requires_approval`, which is not runnable).
|
|
10
|
+
*/
|
|
11
|
+
import type { ProviderCapabilityGate } from "./securityTypes.js";
|
|
12
|
+
import type { ProviderDefinition } from "../providers/providerTypes.js";
|
|
13
|
+
export declare function evaluateProviderSafety(def: ProviderDefinition): ProviderCapabilityGate;
|
|
14
|
+
/** Convenience: is the provider runnable under the gate (overall === allowed)? */
|
|
15
|
+
export declare function isGateAllowed(def: ProviderDefinition): boolean;
|
|
16
|
+
//# sourceMappingURL=capabilityGate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capabilityGate.d.ts","sourceRoot":"","sources":["../../src/security/capabilityGate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,KAAK,EAAE,sBAAsB,EAA0B,MAAM,oBAAoB,CAAC;AACzF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AA+DxE,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,kBAAkB,GAAG,sBAAsB,CA0BtF;AAED,kFAAkF;AAClF,wBAAgB,aAAa,CAAC,GAAG,EAAE,kBAAkB,GAAG,OAAO,CAE9D"}
|