@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,450 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The ACP v1 agent-side server.
|
|
3
|
+
*
|
|
4
|
+
* Wires the stdio JSON-RPC engine to the session store + a **provider runtime** (XACP-005).
|
|
5
|
+
* Implements the agent methods: `initialize`, `session/new`, `session/prompt`, and the
|
|
6
|
+
* `session/cancel` notification. The provider emits normalized `ProviderEvent`s; this server
|
|
7
|
+
* maps them to ACP `session/update` notifications (`providerEventToAcpUpdate`) and routes
|
|
8
|
+
* `diagnostic` events to stderr. Unknown methods → JSON-RPC method-not-found. Outbound
|
|
9
|
+
* `session/update` notifications come only from provider events.
|
|
10
|
+
*/
|
|
11
|
+
import { createStdioServer, logStderr } from "./stdioJsonRpc.js";
|
|
12
|
+
import { SessionStore } from "./sessionStore.js";
|
|
13
|
+
import { AcpError } from "./errors.js";
|
|
14
|
+
import { isAbsolute } from "node:path";
|
|
15
|
+
import { ACP_PROTOCOL_VERSION, AGENT_NAME, AGENT_TITLE, VERSION } from "./version.js";
|
|
16
|
+
import { providerEventToAcpUpdate } from "./providers/providerEvents.js";
|
|
17
|
+
import { validateProviderModelSelection } from "./providers/providerDiscovery.js";
|
|
18
|
+
import { createProviderSandboxContext } from "./sandbox/providerSandbox.js";
|
|
19
|
+
export const XENO_CONTEXT_META_KEY = "xeno.dev/context";
|
|
20
|
+
export const XENO_META_KEY = "xeno.dev";
|
|
21
|
+
export const XENO_CHOOSE_DIRECTORY_METHOD = "xeno.dev/choose_directory";
|
|
22
|
+
export const XENO_CHOOSE_WORKSPACE_PLACEMENT_METHOD = "xeno.dev/choose_workspace_placement";
|
|
23
|
+
const MAX_XENO_SYSTEM_PROMPT_CHARS = 200_000;
|
|
24
|
+
const HOST_CHOOSE_DIRECTORY_TIMEOUT_MS = 10 * 60_000;
|
|
25
|
+
const HOST_CHOOSE_WORKSPACE_PLACEMENT_TIMEOUT_MS = 10 * 60_000;
|
|
26
|
+
export function startAcpAgent(opts) {
|
|
27
|
+
const runtime = opts.runtime;
|
|
28
|
+
const now = opts.now ?? (() => new Date().toISOString());
|
|
29
|
+
const store = new SessionStore(runtime.definition.id);
|
|
30
|
+
let server;
|
|
31
|
+
let promptSeq = 0;
|
|
32
|
+
let clientSupportsChooseDirectory = false;
|
|
33
|
+
let clientSupportsChooseWorkspacePlacement = false;
|
|
34
|
+
// Provider runtime setup (fixture is synchronous).
|
|
35
|
+
void Promise.resolve(runtime.initialize());
|
|
36
|
+
function buildInitializeResult() {
|
|
37
|
+
return {
|
|
38
|
+
protocolVersion: ACP_PROTOCOL_VERSION,
|
|
39
|
+
agentCapabilities: {
|
|
40
|
+
loadSession: false,
|
|
41
|
+
promptCapabilities: { image: false, audio: false, embeddedContext: false },
|
|
42
|
+
_meta: {
|
|
43
|
+
[XENO_META_KEY]: {
|
|
44
|
+
context: true,
|
|
45
|
+
hostRequests: {
|
|
46
|
+
chooseDirectory: true,
|
|
47
|
+
chooseWorkspacePlacement: true,
|
|
48
|
+
},
|
|
49
|
+
},
|
|
50
|
+
},
|
|
51
|
+
},
|
|
52
|
+
agentInfo: { name: AGENT_NAME, title: AGENT_TITLE, version: VERSION },
|
|
53
|
+
authMethods: [],
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
function handleInitialize(params) {
|
|
57
|
+
const requested = params?.protocolVersion;
|
|
58
|
+
if (requested !== undefined && requested !== ACP_PROTOCOL_VERSION) {
|
|
59
|
+
throw AcpError.unsupportedProtocol(requested, ACP_PROTOCOL_VERSION);
|
|
60
|
+
}
|
|
61
|
+
clientSupportsChooseDirectory = hasXenoChooseDirectoryCapability(params);
|
|
62
|
+
clientSupportsChooseWorkspacePlacement = hasXenoHostRequestCapability(params, "chooseWorkspacePlacement");
|
|
63
|
+
return buildInitializeResult();
|
|
64
|
+
}
|
|
65
|
+
function handleNewSession(params) {
|
|
66
|
+
const session = store.create(now(), normalizeSessionParams(params));
|
|
67
|
+
// Let the provider set up any per-session state (fixture: trivial).
|
|
68
|
+
runtime.createSession();
|
|
69
|
+
return { sessionId: session.sessionId };
|
|
70
|
+
}
|
|
71
|
+
async function handlePrompt(params) {
|
|
72
|
+
const sessionId = params?.sessionId;
|
|
73
|
+
if (typeof sessionId !== "string")
|
|
74
|
+
throw AcpError.invalidParams("sessionId (string) is required");
|
|
75
|
+
const session = store.get(sessionId);
|
|
76
|
+
if (!session)
|
|
77
|
+
throw AcpError.invalidParams(`unknown sessionId: ${sessionId}`);
|
|
78
|
+
const promptObj = params?.prompt;
|
|
79
|
+
const prompt = normalizeAgentPromptBlocks(promptObj);
|
|
80
|
+
if (prompt.length === 0)
|
|
81
|
+
throw AcpError.invalidParams("prompt must contain at least one text block");
|
|
82
|
+
const systemPrompt = normalizeXenoSystemPrompt(params);
|
|
83
|
+
const rawModel = params?.model;
|
|
84
|
+
const model = cleanModel(rawModel);
|
|
85
|
+
if (rawModel !== undefined && typeof rawModel === "string" && rawModel.trim() && !model) {
|
|
86
|
+
throw AcpError.invalidParams("model contains unsupported characters");
|
|
87
|
+
}
|
|
88
|
+
const modelValidation = validateProviderModelSelection(runtime.definition, model);
|
|
89
|
+
if (!modelValidation.ok)
|
|
90
|
+
throw AcpError.invalidParams(modelValidation.safeMessage ?? "model is not supported by provider");
|
|
91
|
+
const requestId = `p-${++promptSeq}`;
|
|
92
|
+
const controller = new AbortController();
|
|
93
|
+
session.activePromptId = requestId;
|
|
94
|
+
session.controller = controller;
|
|
95
|
+
session.cancelled = false;
|
|
96
|
+
session.status = "active";
|
|
97
|
+
// Build the per-prompt sandbox enforcement context (fails closed for a non-runnable
|
|
98
|
+
// provider; the fixture receives an allowed context it doesn't use).
|
|
99
|
+
let sandbox;
|
|
100
|
+
try {
|
|
101
|
+
sandbox = createProviderSandboxContext({
|
|
102
|
+
def: runtime.definition,
|
|
103
|
+
sessionId,
|
|
104
|
+
requestId,
|
|
105
|
+
signal: controller.signal,
|
|
106
|
+
...(opts.sandboxInputs ?? {}),
|
|
107
|
+
...(opts.now ? { now: opts.now } : {}),
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
catch (err) {
|
|
111
|
+
session.status = "done";
|
|
112
|
+
throw AcpError.internal(err?.message ?? "sandbox context creation failed");
|
|
113
|
+
}
|
|
114
|
+
try {
|
|
115
|
+
const result = await runtime.prompt({
|
|
116
|
+
sessionId,
|
|
117
|
+
requestId,
|
|
118
|
+
...(model ? { model } : {}),
|
|
119
|
+
...(session.cwd ? { cwd: session.cwd } : {}),
|
|
120
|
+
...(session.additionalDirectories ? { additionalDirectories: session.additionalDirectories } : {}),
|
|
121
|
+
...(systemPrompt ? { systemPrompt } : {}),
|
|
122
|
+
prompt,
|
|
123
|
+
}, {
|
|
124
|
+
signal: controller.signal,
|
|
125
|
+
sandbox,
|
|
126
|
+
host: createHostContext(sessionId, requestId, controller.signal),
|
|
127
|
+
log: (m) => logStderr(`[${sessionId}] ${m}`),
|
|
128
|
+
emit: (event) => {
|
|
129
|
+
if (event.kind === "diagnostic") {
|
|
130
|
+
logStderr(`[${sessionId}] ${event.payload.message}`);
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
133
|
+
const update = providerEventToAcpUpdate(event);
|
|
134
|
+
if (update)
|
|
135
|
+
server.notify("session/update", { sessionId, update });
|
|
136
|
+
},
|
|
137
|
+
});
|
|
138
|
+
if (result.disposition === "failed") {
|
|
139
|
+
session.status = "done";
|
|
140
|
+
throw AcpError.internal(result.error?.safeMessage ?? "provider failed");
|
|
141
|
+
}
|
|
142
|
+
session.status = result.disposition === "cancelled" ? "cancelled" : "done";
|
|
143
|
+
const stopReason = result.disposition === "cancelled" ? "cancelled" : "end_turn";
|
|
144
|
+
return result.usage === undefined ? { stopReason } : { stopReason, usage: result.usage };
|
|
145
|
+
}
|
|
146
|
+
finally {
|
|
147
|
+
session.activePromptId = undefined;
|
|
148
|
+
session.controller = undefined;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
function handleCancel(params) {
|
|
152
|
+
const sessionId = params?.sessionId;
|
|
153
|
+
if (typeof sessionId !== "string") {
|
|
154
|
+
logStderr("session/cancel without a sessionId — ignoring");
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
157
|
+
const session = store.get(sessionId);
|
|
158
|
+
if (!session) {
|
|
159
|
+
logStderr("session/cancel for unknown session — ignoring", sessionId);
|
|
160
|
+
return;
|
|
161
|
+
}
|
|
162
|
+
session.cancelled = true;
|
|
163
|
+
session.status = "cancelled";
|
|
164
|
+
session.controller?.abort();
|
|
165
|
+
runtime.cancel(sessionId);
|
|
166
|
+
}
|
|
167
|
+
async function onRequest(method, params) {
|
|
168
|
+
switch (method) {
|
|
169
|
+
case "initialize":
|
|
170
|
+
return handleInitialize(params);
|
|
171
|
+
case "session/new":
|
|
172
|
+
return handleNewSession(params);
|
|
173
|
+
case "session/prompt":
|
|
174
|
+
return handlePrompt(params);
|
|
175
|
+
default:
|
|
176
|
+
throw AcpError.methodNotFound(method);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
function onNotification(method, params) {
|
|
180
|
+
if (method === "session/cancel") {
|
|
181
|
+
handleCancel(params);
|
|
182
|
+
return;
|
|
183
|
+
}
|
|
184
|
+
logStderr("ignoring unknown notification", method);
|
|
185
|
+
}
|
|
186
|
+
server = createStdioServer({ onRequest, onNotification }, {
|
|
187
|
+
...(opts.stdin ? { stdin: opts.stdin } : {}),
|
|
188
|
+
...(opts.stdout ? { stdout: opts.stdout } : {}),
|
|
189
|
+
...(opts.onClose ? { onClose: opts.onClose } : {}),
|
|
190
|
+
});
|
|
191
|
+
function createHostContext(sessionId, requestId, signal) {
|
|
192
|
+
return {
|
|
193
|
+
chooseDirectory: async (request) => {
|
|
194
|
+
if (!clientSupportsChooseDirectory) {
|
|
195
|
+
return {
|
|
196
|
+
cancelled: true,
|
|
197
|
+
error: "ACP client does not support xeno.dev choose-directory requests.",
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
try {
|
|
201
|
+
const result = await server.request(XENO_CHOOSE_DIRECTORY_METHOD, {
|
|
202
|
+
sessionId,
|
|
203
|
+
requestId,
|
|
204
|
+
title: cleanHostTitle(request?.title),
|
|
205
|
+
toolCallId: cleanHostToolCallId(request?.toolCallId),
|
|
206
|
+
}, {
|
|
207
|
+
timeoutMs: HOST_CHOOSE_DIRECTORY_TIMEOUT_MS,
|
|
208
|
+
signal,
|
|
209
|
+
});
|
|
210
|
+
return normalizeChooseDirectoryResult(result);
|
|
211
|
+
}
|
|
212
|
+
catch (err) {
|
|
213
|
+
return {
|
|
214
|
+
cancelled: true,
|
|
215
|
+
error: safeHostError(err),
|
|
216
|
+
};
|
|
217
|
+
}
|
|
218
|
+
},
|
|
219
|
+
chooseWorkspacePlacement: async (request) => {
|
|
220
|
+
if (!clientSupportsChooseWorkspacePlacement) {
|
|
221
|
+
return {
|
|
222
|
+
cancelled: true,
|
|
223
|
+
error: "ACP client does not support xeno.dev workspace-placement requests.",
|
|
224
|
+
};
|
|
225
|
+
}
|
|
226
|
+
const directory = cleanHostDirectory(request?.directory);
|
|
227
|
+
if (!directory) {
|
|
228
|
+
return {
|
|
229
|
+
cancelled: true,
|
|
230
|
+
error: "Workspace placement requires an absolute selected directory.",
|
|
231
|
+
};
|
|
232
|
+
}
|
|
233
|
+
try {
|
|
234
|
+
const result = await server.request(XENO_CHOOSE_WORKSPACE_PLACEMENT_METHOD, {
|
|
235
|
+
sessionId,
|
|
236
|
+
requestId,
|
|
237
|
+
directory,
|
|
238
|
+
title: cleanWorkspacePlacementTitle(request?.title),
|
|
239
|
+
toolCallId: cleanHostToolCallId(request?.toolCallId),
|
|
240
|
+
}, {
|
|
241
|
+
timeoutMs: HOST_CHOOSE_WORKSPACE_PLACEMENT_TIMEOUT_MS,
|
|
242
|
+
signal,
|
|
243
|
+
});
|
|
244
|
+
return normalizeChooseWorkspacePlacementResult(result, directory);
|
|
245
|
+
}
|
|
246
|
+
catch (err) {
|
|
247
|
+
return {
|
|
248
|
+
cancelled: true,
|
|
249
|
+
error: safeHostError(err, "workspace-placement request failed"),
|
|
250
|
+
};
|
|
251
|
+
}
|
|
252
|
+
},
|
|
253
|
+
};
|
|
254
|
+
}
|
|
255
|
+
return {
|
|
256
|
+
close: () => {
|
|
257
|
+
server.close();
|
|
258
|
+
void Promise.resolve(runtime.dispose());
|
|
259
|
+
},
|
|
260
|
+
store,
|
|
261
|
+
};
|
|
262
|
+
}
|
|
263
|
+
function hasXenoChooseDirectoryCapability(params) {
|
|
264
|
+
if (!params || typeof params !== "object" || Array.isArray(params))
|
|
265
|
+
return false;
|
|
266
|
+
const clientCapabilities = params.clientCapabilities;
|
|
267
|
+
if (!clientCapabilities || typeof clientCapabilities !== "object" || Array.isArray(clientCapabilities))
|
|
268
|
+
return false;
|
|
269
|
+
const meta = clientCapabilities._meta;
|
|
270
|
+
if (!meta || typeof meta !== "object" || Array.isArray(meta))
|
|
271
|
+
return false;
|
|
272
|
+
const xeno = meta[XENO_META_KEY];
|
|
273
|
+
if (!xeno || typeof xeno !== "object" || Array.isArray(xeno))
|
|
274
|
+
return false;
|
|
275
|
+
const record = xeno;
|
|
276
|
+
if (record.chooseDirectory === true)
|
|
277
|
+
return true;
|
|
278
|
+
const hostRequests = record.hostRequests;
|
|
279
|
+
return !!(hostRequests &&
|
|
280
|
+
typeof hostRequests === "object" &&
|
|
281
|
+
!Array.isArray(hostRequests) &&
|
|
282
|
+
hostRequests.chooseDirectory === true);
|
|
283
|
+
}
|
|
284
|
+
function hasXenoHostRequestCapability(params, capability) {
|
|
285
|
+
if (!params || typeof params !== "object" || Array.isArray(params))
|
|
286
|
+
return false;
|
|
287
|
+
const clientCapabilities = params.clientCapabilities;
|
|
288
|
+
if (!clientCapabilities || typeof clientCapabilities !== "object" || Array.isArray(clientCapabilities))
|
|
289
|
+
return false;
|
|
290
|
+
const meta = clientCapabilities._meta;
|
|
291
|
+
if (!meta || typeof meta !== "object" || Array.isArray(meta))
|
|
292
|
+
return false;
|
|
293
|
+
const xeno = meta[XENO_META_KEY];
|
|
294
|
+
if (!xeno || typeof xeno !== "object" || Array.isArray(xeno))
|
|
295
|
+
return false;
|
|
296
|
+
const hostRequests = xeno.hostRequests;
|
|
297
|
+
return !!(hostRequests
|
|
298
|
+
&& typeof hostRequests === "object"
|
|
299
|
+
&& !Array.isArray(hostRequests)
|
|
300
|
+
&& hostRequests[capability] === true);
|
|
301
|
+
}
|
|
302
|
+
function cleanHostTitle(value) {
|
|
303
|
+
return typeof value === "string" && value.trim()
|
|
304
|
+
? value.trim().slice(0, 160)
|
|
305
|
+
: "Choose workspace folder";
|
|
306
|
+
}
|
|
307
|
+
function cleanWorkspacePlacementTitle(value) {
|
|
308
|
+
return typeof value === "string" && value.trim()
|
|
309
|
+
? value.trim().slice(0, 160)
|
|
310
|
+
: "Choose where to keep this conversation";
|
|
311
|
+
}
|
|
312
|
+
function cleanHostDirectory(value) {
|
|
313
|
+
if (typeof value !== "string" || !value.trim())
|
|
314
|
+
return undefined;
|
|
315
|
+
const directory = value.trim().slice(0, 2000);
|
|
316
|
+
return isAbsolute(directory) ? directory : undefined;
|
|
317
|
+
}
|
|
318
|
+
function cleanHostToolCallId(value) {
|
|
319
|
+
return typeof value === "string" && value.trim()
|
|
320
|
+
? value.trim().slice(0, 256)
|
|
321
|
+
: undefined;
|
|
322
|
+
}
|
|
323
|
+
function normalizeChooseDirectoryResult(value) {
|
|
324
|
+
if (!value || typeof value !== "object" || Array.isArray(value)) {
|
|
325
|
+
return { cancelled: true, error: "Invalid choose-directory response from ACP client." };
|
|
326
|
+
}
|
|
327
|
+
const record = value;
|
|
328
|
+
const rawPath = typeof record.path === "string" && record.path.trim() ? record.path.trim() : undefined;
|
|
329
|
+
const path = cleanHostDirectory(rawPath);
|
|
330
|
+
const error = typeof record.error === "string" && record.error.trim() ? record.error.trim().slice(0, 1000) : undefined;
|
|
331
|
+
const cancelled = record.cancelled === true;
|
|
332
|
+
const timedOut = record.timedOut === true;
|
|
333
|
+
if (rawPath && !path && !cancelled && !timedOut && !error) {
|
|
334
|
+
return {
|
|
335
|
+
cancelled: true,
|
|
336
|
+
error: "Choose-directory response path must be absolute.",
|
|
337
|
+
};
|
|
338
|
+
}
|
|
339
|
+
return {
|
|
340
|
+
...(path && !cancelled && !timedOut && !error ? { path } : {}),
|
|
341
|
+
...(cancelled ? { cancelled: true } : {}),
|
|
342
|
+
...(timedOut ? { timedOut: true } : {}),
|
|
343
|
+
...(error ? { error } : {}),
|
|
344
|
+
};
|
|
345
|
+
}
|
|
346
|
+
function normalizeChooseWorkspacePlacementResult(value, requestedDirectory) {
|
|
347
|
+
if (!value || typeof value !== "object" || Array.isArray(value)) {
|
|
348
|
+
return { cancelled: true, error: "Invalid workspace-placement response from ACP client." };
|
|
349
|
+
}
|
|
350
|
+
const record = value;
|
|
351
|
+
const choice = record.choice === "inbox" || record.choice === "reuse" || record.choice === "create"
|
|
352
|
+
? record.choice
|
|
353
|
+
: undefined;
|
|
354
|
+
const returnedDirectory = typeof record.directory === "string" && record.directory.trim()
|
|
355
|
+
? record.directory.trim().slice(0, 2000)
|
|
356
|
+
: undefined;
|
|
357
|
+
if (returnedDirectory && returnedDirectory !== requestedDirectory) {
|
|
358
|
+
return {
|
|
359
|
+
directory: requestedDirectory,
|
|
360
|
+
error: "Workspace-placement response directory did not match the request.",
|
|
361
|
+
};
|
|
362
|
+
}
|
|
363
|
+
const directory = returnedDirectory ?? requestedDirectory;
|
|
364
|
+
const workspaceName = typeof record.workspaceName === "string" && record.workspaceName.trim()
|
|
365
|
+
? record.workspaceName.trim().slice(0, 200)
|
|
366
|
+
: undefined;
|
|
367
|
+
const result = typeof record.result === "string" && record.result.trim()
|
|
368
|
+
? record.result.trim().slice(0, 1000)
|
|
369
|
+
: undefined;
|
|
370
|
+
const error = typeof record.error === "string" && record.error.trim()
|
|
371
|
+
? record.error.trim().slice(0, 1000)
|
|
372
|
+
: undefined;
|
|
373
|
+
const cancelled = record.cancelled === true;
|
|
374
|
+
const timedOut = record.timedOut === true;
|
|
375
|
+
return {
|
|
376
|
+
...(choice && !cancelled && !timedOut && !error ? { choice } : {}),
|
|
377
|
+
directory,
|
|
378
|
+
...(workspaceName ? { workspaceName } : {}),
|
|
379
|
+
...(result ? { result } : {}),
|
|
380
|
+
...(cancelled ? { cancelled: true } : {}),
|
|
381
|
+
...(timedOut ? { timedOut: true } : {}),
|
|
382
|
+
...(error ? { error } : {}),
|
|
383
|
+
};
|
|
384
|
+
}
|
|
385
|
+
function safeHostError(error, fallback = "choose-directory request failed") {
|
|
386
|
+
const message = error instanceof Error ? error.message : String(error || fallback);
|
|
387
|
+
return message.trim().slice(0, 1000) || fallback;
|
|
388
|
+
}
|
|
389
|
+
function normalizeSessionParams(params) {
|
|
390
|
+
if (!params || typeof params !== "object" || Array.isArray(params))
|
|
391
|
+
return {};
|
|
392
|
+
const record = params;
|
|
393
|
+
const cwd = normalizeAbsolutePath(record.cwd, "cwd");
|
|
394
|
+
const additionalDirectories = Array.isArray(record.additionalDirectories)
|
|
395
|
+
? record.additionalDirectories
|
|
396
|
+
.map((entry, index) => normalizeAbsolutePath(entry, `additionalDirectories[${index}]`))
|
|
397
|
+
.filter((entry) => Boolean(entry))
|
|
398
|
+
: undefined;
|
|
399
|
+
return {
|
|
400
|
+
...(cwd ? { cwd } : {}),
|
|
401
|
+
...(additionalDirectories?.length ? { additionalDirectories } : {}),
|
|
402
|
+
};
|
|
403
|
+
}
|
|
404
|
+
function normalizeAbsolutePath(value, name) {
|
|
405
|
+
if (value === undefined || value === null || value === "")
|
|
406
|
+
return undefined;
|
|
407
|
+
if (typeof value !== "string" || !isAbsolute(value))
|
|
408
|
+
throw AcpError.invalidParams(`${name} must be an absolute path`);
|
|
409
|
+
return value;
|
|
410
|
+
}
|
|
411
|
+
export function normalizeAgentPromptBlocks(prompt) {
|
|
412
|
+
if (typeof prompt === "string" && prompt.trim())
|
|
413
|
+
return [{ type: "text", text: prompt }];
|
|
414
|
+
if (!Array.isArray(prompt))
|
|
415
|
+
return [];
|
|
416
|
+
return prompt
|
|
417
|
+
.map((block) => {
|
|
418
|
+
if (!block || typeof block !== "object")
|
|
419
|
+
return null;
|
|
420
|
+
const record = block;
|
|
421
|
+
if (record.type !== "text" || typeof record.text !== "string" || !record.text.trim())
|
|
422
|
+
return null;
|
|
423
|
+
return { type: "text", text: record.text };
|
|
424
|
+
})
|
|
425
|
+
.filter((block) => Boolean(block));
|
|
426
|
+
}
|
|
427
|
+
export function normalizeXenoSystemPrompt(params) {
|
|
428
|
+
if (!params || typeof params !== "object" || Array.isArray(params))
|
|
429
|
+
return undefined;
|
|
430
|
+
const meta = params._meta;
|
|
431
|
+
if (!meta || typeof meta !== "object" || Array.isArray(meta))
|
|
432
|
+
return undefined;
|
|
433
|
+
const context = meta[XENO_CONTEXT_META_KEY];
|
|
434
|
+
if (!context || typeof context !== "object" || Array.isArray(context))
|
|
435
|
+
return undefined;
|
|
436
|
+
const value = context.systemPrompt;
|
|
437
|
+
if (value === undefined || value === null)
|
|
438
|
+
return undefined;
|
|
439
|
+
if (typeof value !== "string")
|
|
440
|
+
throw AcpError.invalidParams(`${XENO_CONTEXT_META_KEY}.systemPrompt must be a string`);
|
|
441
|
+
const trimmed = value.trim();
|
|
442
|
+
return trimmed ? trimmed.slice(0, MAX_XENO_SYSTEM_PROMPT_CHARS) : undefined;
|
|
443
|
+
}
|
|
444
|
+
function cleanModel(value) {
|
|
445
|
+
if (typeof value !== "string")
|
|
446
|
+
return undefined;
|
|
447
|
+
const trimmed = value.trim();
|
|
448
|
+
return trimmed && /^[A-Za-z0-9._:/+-]{1,120}$/.test(trimmed) ? trimmed : undefined;
|
|
449
|
+
}
|
|
450
|
+
//# sourceMappingURL=acpAgentServer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"acpAgentServer.js","sourceRoot":"","sources":["../src/acpAgentServer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Provider adapter runtime contract version (XACP-012 — FROZEN v1).
|
|
3
|
+
*
|
|
4
|
+
* This constant pins the v1 contract: the provider runtime contract, the adapter stdout event
|
|
5
|
+
* protocol, the normalized `ProviderEvent` schema, the `ProviderEvent → ACP session/update`
|
|
6
|
+
* mapping, the failure taxonomy, and the diagnostics/audit shape. A real adapter declares the
|
|
7
|
+
* contract version it implements; an unknown/incompatible version FAILS SAFELY.
|
|
8
|
+
*
|
|
9
|
+
* Compatibility rule: any breaking change to the frozen surfaces above MUST increment this
|
|
10
|
+
* version. v1 is the baseline; nothing below it exists.
|
|
11
|
+
*/
|
|
12
|
+
export declare const ADAPTER_RUNTIME_CONTRACT_VERSION: 1;
|
|
13
|
+
export type AdapterRuntimeContractVersion = typeof ADAPTER_RUNTIME_CONTRACT_VERSION;
|
|
14
|
+
/** Versions this build can run. v1 only, for now. */
|
|
15
|
+
export declare const SUPPORTED_CONTRACT_VERSIONS: readonly number[];
|
|
16
|
+
/** True if a declared contract version is supported by this build. */
|
|
17
|
+
export declare function isSupportedContractVersion(version: unknown): version is AdapterRuntimeContractVersion;
|
|
18
|
+
/**
|
|
19
|
+
* Resolve an event's declared `version`. A MISSING version is treated as v1 — this leniency is
|
|
20
|
+
* intentional and scoped to INTERNAL test fixtures (which may omit it); a PRESENT but unsupported
|
|
21
|
+
* version is rejected (returns null) so the caller fails safely.
|
|
22
|
+
*/
|
|
23
|
+
export declare function resolveContractVersion(version: unknown): AdapterRuntimeContractVersion | null;
|
|
24
|
+
//# sourceMappingURL=adapterContractVersion.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapterContractVersion.d.ts","sourceRoot":"","sources":["../../src/adapters/adapterContractVersion.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,eAAO,MAAM,gCAAgC,EAAG,CAAU,CAAC;AAC3D,MAAM,MAAM,6BAA6B,GAAG,OAAO,gCAAgC,CAAC;AAEpF,qDAAqD;AACrD,eAAO,MAAM,2BAA2B,EAAE,SAAS,MAAM,EAAuC,CAAC;AAEjG,sEAAsE;AACtE,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,IAAI,6BAA6B,CAErG;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,6BAA6B,GAAG,IAAI,CAG7F"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Provider adapter runtime contract version (XACP-012 — FROZEN v1).
|
|
3
|
+
*
|
|
4
|
+
* This constant pins the v1 contract: the provider runtime contract, the adapter stdout event
|
|
5
|
+
* protocol, the normalized `ProviderEvent` schema, the `ProviderEvent → ACP session/update`
|
|
6
|
+
* mapping, the failure taxonomy, and the diagnostics/audit shape. A real adapter declares the
|
|
7
|
+
* contract version it implements; an unknown/incompatible version FAILS SAFELY.
|
|
8
|
+
*
|
|
9
|
+
* Compatibility rule: any breaking change to the frozen surfaces above MUST increment this
|
|
10
|
+
* version. v1 is the baseline; nothing below it exists.
|
|
11
|
+
*/
|
|
12
|
+
export const ADAPTER_RUNTIME_CONTRACT_VERSION = 1;
|
|
13
|
+
/** Versions this build can run. v1 only, for now. */
|
|
14
|
+
export const SUPPORTED_CONTRACT_VERSIONS = [ADAPTER_RUNTIME_CONTRACT_VERSION];
|
|
15
|
+
/** True if a declared contract version is supported by this build. */
|
|
16
|
+
export function isSupportedContractVersion(version) {
|
|
17
|
+
return typeof version === "number" && SUPPORTED_CONTRACT_VERSIONS.includes(version);
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Resolve an event's declared `version`. A MISSING version is treated as v1 — this leniency is
|
|
21
|
+
* intentional and scoped to INTERNAL test fixtures (which may omit it); a PRESENT but unsupported
|
|
22
|
+
* version is rejected (returns null) so the caller fails safely.
|
|
23
|
+
*/
|
|
24
|
+
export function resolveContractVersion(version) {
|
|
25
|
+
if (version === undefined || version === null)
|
|
26
|
+
return ADAPTER_RUNTIME_CONTRACT_VERSION; // internal-fixture leniency
|
|
27
|
+
return isSupportedContractVersion(version) ? version : null;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=adapterContractVersion.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapterContractVersion.js","sourceRoot":"","sources":["../../src/adapters/adapterContractVersion.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,MAAM,CAAC,MAAM,gCAAgC,GAAG,CAAU,CAAC;AAG3D,qDAAqD;AACrD,MAAM,CAAC,MAAM,2BAA2B,GAAsB,CAAC,gCAAgC,CAAC,CAAC;AAEjG,sEAAsE;AACtE,MAAM,UAAU,0BAA0B,CAAC,OAAgB;IACzD,OAAO,OAAO,OAAO,KAAK,QAAQ,IAAI,2BAA2B,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AACtF,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CAAC,OAAgB;IACrD,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,IAAI;QAAE,OAAO,gCAAgC,CAAC,CAAC,4BAA4B;IACpH,OAAO,0BAA0B,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;AAC9D,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Diagnostics builder for the adapter harness (XACP-011). Counts + redacted markers only; never
|
|
3
|
+
* secret values, raw adapter output, or full paths.
|
|
4
|
+
*/
|
|
5
|
+
import type { AdapterHarnessDiagnostics } from "./adapterHarnessTypes.js";
|
|
6
|
+
import type { ProviderAuthFailureDiagnostic } from "../providers/providerErrors.js";
|
|
7
|
+
export interface DiagnosticsInput {
|
|
8
|
+
providerId: string;
|
|
9
|
+
runnableStatus: string;
|
|
10
|
+
eventsEmitted: number;
|
|
11
|
+
parseDiagnostics: number;
|
|
12
|
+
acpUpdates: number;
|
|
13
|
+
supervisor?: Record<string, unknown>;
|
|
14
|
+
authFailure?: ProviderAuthFailureDiagnostic;
|
|
15
|
+
stdoutTruncated: boolean;
|
|
16
|
+
stderrTruncated: boolean;
|
|
17
|
+
}
|
|
18
|
+
export declare function buildAdapterHarnessDiagnostics(input: DiagnosticsInput): AdapterHarnessDiagnostics;
|
|
19
|
+
//# sourceMappingURL=adapterDiagnostics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapterDiagnostics.d.ts","sourceRoot":"","sources":["../../src/adapters/adapterDiagnostics.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AAC1E,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,gCAAgC,CAAC;AAEpF,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,WAAW,CAAC,EAAE,6BAA6B,CAAC;IAC5C,eAAe,EAAE,OAAO,CAAC;IACzB,eAAe,EAAE,OAAO,CAAC;CAC1B;AAED,wBAAgB,8BAA8B,CAAC,KAAK,EAAE,gBAAgB,GAAG,yBAAyB,CAYjG"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Diagnostics builder for the adapter harness (XACP-011). Counts + redacted markers only; never
|
|
3
|
+
* secret values, raw adapter output, or full paths.
|
|
4
|
+
*/
|
|
5
|
+
export function buildAdapterHarnessDiagnostics(input) {
|
|
6
|
+
return {
|
|
7
|
+
providerId: input.providerId,
|
|
8
|
+
runnableStatus: input.runnableStatus,
|
|
9
|
+
eventsEmitted: input.eventsEmitted,
|
|
10
|
+
parseDiagnostics: input.parseDiagnostics,
|
|
11
|
+
acpUpdates: input.acpUpdates,
|
|
12
|
+
...(input.supervisor ? { supervisor: input.supervisor } : {}),
|
|
13
|
+
...(input.authFailure ? { authFailure: input.authFailure } : {}),
|
|
14
|
+
stdoutTruncated: input.stdoutTruncated,
|
|
15
|
+
stderrTruncated: input.stderrTruncated,
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=adapterDiagnostics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapterDiagnostics.js","sourceRoot":"","sources":["../../src/adapters/adapterDiagnostics.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAiBH,MAAM,UAAU,8BAA8B,CAAC,KAAuB;IACpE,OAAO;QACL,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,cAAc,EAAE,KAAK,CAAC,cAAc;QACpC,aAAa,EAAE,KAAK,CAAC,aAAa;QAClC,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;QACxC,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7D,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAChE,eAAe,EAAE,KAAK,CAAC,eAAe;QACtC,eAAe,EAAE,KAAK,CAAC,eAAe;KACvC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Adapter-harness error taxonomy (XACP-011). Safe messages only — never stack traces, raw
|
|
3
|
+
* adapter output, or secrets. These describe failures of the TEST harness path; the harness runs
|
|
4
|
+
* only the harmless XENO-owned fixture adapter, never a real provider CLI.
|
|
5
|
+
*/
|
|
6
|
+
export type AdapterHarnessErrorCode = "ADAPTER_NOT_RUNNABLE" | "ADAPTER_SANDBOX_DENIED" | "ADAPTER_LAUNCH_FAILED" | "ADAPTER_MALFORMED_OUTPUT" | "ADAPTER_TIMEOUT" | "ADAPTER_CANCELLED" | "ADAPTER_PROTOCOL_FAILED" | "ADAPTER_INTERNAL";
|
|
7
|
+
export declare class AdapterHarnessError extends Error {
|
|
8
|
+
readonly code: AdapterHarnessErrorCode;
|
|
9
|
+
readonly providerId?: string;
|
|
10
|
+
readonly redactedDetails?: Record<string, unknown>;
|
|
11
|
+
constructor(init: {
|
|
12
|
+
code: AdapterHarnessErrorCode;
|
|
13
|
+
safeMessage: string;
|
|
14
|
+
providerId?: string;
|
|
15
|
+
redactedDetails?: Record<string, unknown>;
|
|
16
|
+
});
|
|
17
|
+
get safeMessage(): string;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=adapterErrors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapterErrors.d.ts","sourceRoot":"","sources":["../../src/adapters/adapterErrors.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,MAAM,uBAAuB,GAC/B,sBAAsB,GACtB,wBAAwB,GACxB,uBAAuB,GACvB,0BAA0B,GAC1B,iBAAiB,GACjB,mBAAmB,GACnB,yBAAyB,GACzB,kBAAkB,CAAC;AAEvB,qBAAa,mBAAoB,SAAQ,KAAK;IAC5C,QAAQ,CAAC,IAAI,EAAE,uBAAuB,CAAC;IACvC,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,uBAAuB,CAAC;QAC9B,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,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Adapter-harness error taxonomy (XACP-011). Safe messages only — never stack traces, raw
|
|
3
|
+
* adapter output, or secrets. These describe failures of the TEST harness path; the harness runs
|
|
4
|
+
* only the harmless XENO-owned fixture adapter, never a real provider CLI.
|
|
5
|
+
*/
|
|
6
|
+
export class AdapterHarnessError extends Error {
|
|
7
|
+
code;
|
|
8
|
+
providerId;
|
|
9
|
+
redactedDetails;
|
|
10
|
+
constructor(init) {
|
|
11
|
+
super(init.safeMessage);
|
|
12
|
+
this.name = "AdapterHarnessError";
|
|
13
|
+
this.code = init.code;
|
|
14
|
+
if (init.providerId !== undefined)
|
|
15
|
+
this.providerId = init.providerId;
|
|
16
|
+
if (init.redactedDetails !== undefined)
|
|
17
|
+
this.redactedDetails = init.redactedDetails;
|
|
18
|
+
}
|
|
19
|
+
get safeMessage() {
|
|
20
|
+
return this.message;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=adapterErrors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapterErrors.js","sourceRoot":"","sources":["../../src/adapters/adapterErrors.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAYH,MAAM,OAAO,mBAAoB,SAAQ,KAAK;IACnC,IAAI,CAA0B;IAC9B,UAAU,CAAU;IACpB,eAAe,CAA2B;IAEnD,YAAY,IAKX;QACC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACxB,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;QAClC,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"}
|