@paperclipai/server 2026.830.0-canary.13 → 2026.830.0-canary.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/build-info.json +1 -1
- package/dist/vendor/paperclip-runner/drivers/acpx/environment.d.ts +20 -0
- package/dist/vendor/paperclip-runner/drivers/acpx/environment.d.ts.map +1 -0
- package/dist/vendor/paperclip-runner/drivers/acpx/environment.js +62 -0
- package/dist/vendor/paperclip-runner/drivers/acpx/environment.js.map +1 -0
- package/dist/vendor/paperclip-runner/drivers/acpx/qualified-profiles.d.ts +36 -0
- package/dist/vendor/paperclip-runner/drivers/acpx/qualified-profiles.d.ts.map +1 -0
- package/dist/vendor/paperclip-runner/drivers/acpx/qualified-profiles.js +71 -0
- package/dist/vendor/paperclip-runner/drivers/acpx/qualified-profiles.js.map +1 -0
- package/dist/vendor/paperclip-runner/drivers/acpx/sidecar-protocol.d.ts +67 -0
- package/dist/vendor/paperclip-runner/drivers/acpx/sidecar-protocol.d.ts.map +1 -0
- package/dist/vendor/paperclip-runner/drivers/acpx/sidecar-protocol.js +92 -0
- package/dist/vendor/paperclip-runner/drivers/acpx/sidecar-protocol.js.map +1 -0
- package/package.json +18 -18
package/dist/build-info.json
CHANGED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { QualifiedAcpxAgent } from "./qualified-profiles.js";
|
|
2
|
+
declare const sanitizedAcpxSpawnInputBrand: unique symbol;
|
|
3
|
+
/**
|
|
4
|
+
* Opaque child-process input produced only after the host environment crosses
|
|
5
|
+
* the ACPX credential allowlist. Future ACPX launchers accept this boundary
|
|
6
|
+
* object rather than an arbitrary `process.env`-shaped value.
|
|
7
|
+
*/
|
|
8
|
+
export interface SanitizedAcpxSpawnInput {
|
|
9
|
+
readonly env: Readonly<NodeJS.ProcessEnv>;
|
|
10
|
+
readonly [sanitizedAcpxSpawnInputBrand]: true;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Build the only host-environment input that may cross an ACPX child-process
|
|
14
|
+
* launch boundary. Agent-specific homes are added by the later runtime sandbox;
|
|
15
|
+
* Paperclip transport and native MCP credentials are never inherited from the
|
|
16
|
+
* host process.
|
|
17
|
+
*/
|
|
18
|
+
export declare function createSanitizedAcpxSpawnInput(environment: NodeJS.ProcessEnv | undefined, agent: QualifiedAcpxAgent): SanitizedAcpxSpawnInput;
|
|
19
|
+
export {};
|
|
20
|
+
//# sourceMappingURL=environment.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"environment.d.ts","sourceRoot":"","sources":["../../../src/drivers/acpx/environment.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAElE,OAAO,CAAC,MAAM,4BAA4B,EAAE,OAAO,MAAM,CAAC;AAE1D;;;;GAIG;AACH,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAC1C,QAAQ,CAAC,CAAC,4BAA4B,CAAC,EAAE,IAAI,CAAC;CAC/C;AAED;;;;;GAKG;AACH,wBAAgB,6BAA6B,CAC3C,WAAW,EAAE,MAAM,CAAC,UAAU,GAAG,SAAS,EAC1C,KAAK,EAAE,kBAAkB,GACxB,uBAAuB,CAqDzB"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Build the only host-environment input that may cross an ACPX child-process
|
|
3
|
+
* launch boundary. Agent-specific homes are added by the later runtime sandbox;
|
|
4
|
+
* Paperclip transport and native MCP credentials are never inherited from the
|
|
5
|
+
* host process.
|
|
6
|
+
*/
|
|
7
|
+
export function createSanitizedAcpxSpawnInput(environment, agent) {
|
|
8
|
+
const source = environment ?? process.env;
|
|
9
|
+
const result = {};
|
|
10
|
+
const credentialNames = agent === "pi"
|
|
11
|
+
? ["OPENROUTER_API_KEY"]
|
|
12
|
+
: agent === "claude"
|
|
13
|
+
? ["ANTHROPIC_API_KEY", "CLAUDE_CODE_OAUTH_TOKEN"]
|
|
14
|
+
: [
|
|
15
|
+
"OPENAI_API_KEY",
|
|
16
|
+
"CODEX_API_KEY",
|
|
17
|
+
];
|
|
18
|
+
const allowed = new Set([
|
|
19
|
+
"PATH",
|
|
20
|
+
"LANG",
|
|
21
|
+
"LANGUAGE",
|
|
22
|
+
"TZ",
|
|
23
|
+
"TMPDIR",
|
|
24
|
+
"TEMP",
|
|
25
|
+
"TMP",
|
|
26
|
+
"SSL_CERT_FILE",
|
|
27
|
+
"SSL_CERT_DIR",
|
|
28
|
+
"NODE_EXTRA_CA_CERTS",
|
|
29
|
+
"HTTP_PROXY",
|
|
30
|
+
"HTTPS_PROXY",
|
|
31
|
+
"NO_PROXY",
|
|
32
|
+
"ALL_PROXY",
|
|
33
|
+
"http_proxy",
|
|
34
|
+
"https_proxy",
|
|
35
|
+
"no_proxy",
|
|
36
|
+
"all_proxy",
|
|
37
|
+
"RUST_BACKTRACE",
|
|
38
|
+
"PAPERCLIP_NATIVE_MCP_NAME",
|
|
39
|
+
"PAPERCLIP_NATIVE_MCP_URL",
|
|
40
|
+
...credentialNames,
|
|
41
|
+
]);
|
|
42
|
+
let retainedBytes = 0;
|
|
43
|
+
for (const [key, value] of Object.entries(source)) {
|
|
44
|
+
if (typeof value !== "string")
|
|
45
|
+
continue;
|
|
46
|
+
if (!allowed.has(key) && !/^LC_[A-Z0-9_]{1,32}$/.test(key))
|
|
47
|
+
continue;
|
|
48
|
+
if (key.includes("\0") || value.includes("\0")) {
|
|
49
|
+
throw new Error("ACPX environment contains a null byte");
|
|
50
|
+
}
|
|
51
|
+
const entryBytes = Buffer.byteLength(key) + Buffer.byteLength(value);
|
|
52
|
+
if (entryBytes > 64 * 1024 || retainedBytes + entryBytes > 256 * 1024) {
|
|
53
|
+
throw new Error("ACPX environment exceeds its bounded launch size");
|
|
54
|
+
}
|
|
55
|
+
retainedBytes += entryBytes;
|
|
56
|
+
result[key] = value;
|
|
57
|
+
}
|
|
58
|
+
return Object.freeze({
|
|
59
|
+
env: Object.freeze(result),
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=environment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"environment.js","sourceRoot":"","sources":["../../../src/drivers/acpx/environment.ts"],"names":[],"mappings":"AAcA;;;;;GAKG;AACH,MAAM,UAAU,6BAA6B,CAC3C,WAA0C,EAC1C,KAAyB;IAEzB,MAAM,MAAM,GAAG,WAAW,IAAI,OAAO,CAAC,GAAG,CAAC;IAC1C,MAAM,MAAM,GAAsB,EAAE,CAAC;IACrC,MAAM,eAAe,GACnB,KAAK,KAAK,IAAI;QACZ,CAAC,CAAC,CAAC,oBAAoB,CAAC;QACxB,CAAC,CAAC,KAAK,KAAK,QAAQ;YAClB,CAAC,CAAC,CAAC,mBAAmB,EAAE,yBAAyB,CAAC;YAClD,CAAC,CAAC;gBACE,gBAAgB;gBAChB,eAAe;aAChB,CAAC;IACV,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC;QACtB,MAAM;QACN,MAAM;QACN,UAAU;QACV,IAAI;QACJ,QAAQ;QACR,MAAM;QACN,KAAK;QACL,eAAe;QACf,cAAc;QACd,qBAAqB;QACrB,YAAY;QACZ,aAAa;QACb,UAAU;QACV,WAAW;QACX,YAAY;QACZ,aAAa;QACb,UAAU;QACV,WAAW;QACX,gBAAgB;QAChB,2BAA2B;QAC3B,0BAA0B;QAC1B,GAAG,eAAe;KACnB,CAAC,CAAC;IACH,IAAI,aAAa,GAAG,CAAC,CAAC;IACtB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAClD,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,SAAS;QACxC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,GAAG,CAAC;YAAE,SAAS;QACrE,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAC/C,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;QAC3D,CAAC;QACD,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QACrE,IAAI,UAAU,GAAG,EAAE,GAAG,IAAI,IAAI,aAAa,GAAG,UAAU,GAAG,GAAG,GAAG,IAAI,EAAE,CAAC;YACtE,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;QACtE,CAAC;QACD,aAAa,IAAI,UAAU,CAAC;QAC5B,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IACtB,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;KAC3B,CAA4B,CAAC;AAChC,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
export declare const QUALIFIED_ACPX_VERSION: "0.13.1";
|
|
2
|
+
export declare const ACPX_DRIVER_KIND: "acpx_runtime";
|
|
3
|
+
export declare const ACPX_DRIVER_PROTOCOL_VERSION: 1;
|
|
4
|
+
import type { NativeAcpxAgent } from "../../contracts/native-execution.js";
|
|
5
|
+
export type QualifiedAcpxAgent = NativeAcpxAgent;
|
|
6
|
+
export interface QualifiedAcpxProfile {
|
|
7
|
+
readonly driverKind: typeof ACPX_DRIVER_KIND;
|
|
8
|
+
readonly protocolVersion: typeof ACPX_DRIVER_PROTOCOL_VERSION;
|
|
9
|
+
readonly acpxVersion: typeof QUALIFIED_ACPX_VERSION;
|
|
10
|
+
readonly agent: QualifiedAcpxAgent;
|
|
11
|
+
readonly agentProfileVersion: 1;
|
|
12
|
+
readonly agentServerPackage: string;
|
|
13
|
+
readonly agentServerVersion: string;
|
|
14
|
+
readonly agentRuntimePackage: string | null;
|
|
15
|
+
readonly agentRuntimeVersion: string | null;
|
|
16
|
+
readonly commandDigest: string;
|
|
17
|
+
readonly qualificationModel: string;
|
|
18
|
+
/**
|
|
19
|
+
* Model identifier the pinned ACP server reports after accepting the exact
|
|
20
|
+
* qualification model. Most agents echo the requested model. Claude's ACP
|
|
21
|
+
* server deliberately exposes its stable SDK selector (`sonnet`) while the
|
|
22
|
+
* SDK resolves that selector to the canonical wire model
|
|
23
|
+
* (`claude-sonnet-5`). Paperclip verifies the exact request was accepted
|
|
24
|
+
* before treating this identifier as the qualified effective model.
|
|
25
|
+
*/
|
|
26
|
+
readonly reportedModelId: string;
|
|
27
|
+
readonly permissionPolicy: "interactive";
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Digests bind the closed profile declaration (package, version, runtime and
|
|
31
|
+
* model), not a caller-controlled executable. The environment probe separately
|
|
32
|
+
* verifies the resolved package files before a billable prompt is admitted.
|
|
33
|
+
*/
|
|
34
|
+
export declare const QUALIFIED_ACPX_PROFILES: Readonly<Record<QualifiedAcpxAgent, QualifiedAcpxProfile>>;
|
|
35
|
+
export declare function resolveQualifiedAcpxProfile(agent: QualifiedAcpxAgent, requestedModel: string): QualifiedAcpxProfile;
|
|
36
|
+
//# sourceMappingURL=qualified-profiles.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"qualified-profiles.d.ts","sourceRoot":"","sources":["../../../src/drivers/acpx/qualified-profiles.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,sBAAsB,EAAG,QAAiB,CAAC;AACxD,eAAO,MAAM,gBAAgB,EAAG,cAAuB,CAAC;AACxD,eAAO,MAAM,4BAA4B,EAAG,CAAU,CAAC;AAEvD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAC;AAE3E,MAAM,MAAM,kBAAkB,GAAG,eAAe,CAAC;AAEjD,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,UAAU,EAAE,OAAO,gBAAgB,CAAC;IAC7C,QAAQ,CAAC,eAAe,EAAE,OAAO,4BAA4B,CAAC;IAC9D,QAAQ,CAAC,WAAW,EAAE,OAAO,sBAAsB,CAAC;IACpD,QAAQ,CAAC,KAAK,EAAE,kBAAkB,CAAC;IACnC,QAAQ,CAAC,mBAAmB,EAAE,CAAC,CAAC;IAChC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5C,QAAQ,CAAC,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5C,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACpC;;;;;;;OAOG;IACH,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,gBAAgB,EAAE,aAAa,CAAC;CAC1C;AAED;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,EAAE,QAAQ,CAC5C,MAAM,CAAC,kBAAkB,EAAE,oBAAoB,CAAC,CAkDhD,CAAC;AAEH,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,kBAAkB,EACzB,cAAc,EAAE,MAAM,GACrB,oBAAoB,CAQtB"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
export const QUALIFIED_ACPX_VERSION = "0.13.1";
|
|
2
|
+
export const ACPX_DRIVER_KIND = "acpx_runtime";
|
|
3
|
+
export const ACPX_DRIVER_PROTOCOL_VERSION = 1;
|
|
4
|
+
/**
|
|
5
|
+
* Digests bind the closed profile declaration (package, version, runtime and
|
|
6
|
+
* model), not a caller-controlled executable. The environment probe separately
|
|
7
|
+
* verifies the resolved package files before a billable prompt is admitted.
|
|
8
|
+
*/
|
|
9
|
+
export const QUALIFIED_ACPX_PROFILES = deepFreeze({
|
|
10
|
+
pi: {
|
|
11
|
+
driverKind: ACPX_DRIVER_KIND,
|
|
12
|
+
protocolVersion: ACPX_DRIVER_PROTOCOL_VERSION,
|
|
13
|
+
acpxVersion: QUALIFIED_ACPX_VERSION,
|
|
14
|
+
agent: "pi",
|
|
15
|
+
agentProfileVersion: 1,
|
|
16
|
+
agentServerPackage: "pi-acp",
|
|
17
|
+
agentServerVersion: "0.0.33",
|
|
18
|
+
agentRuntimePackage: "@earendil-works/pi-coding-agent",
|
|
19
|
+
agentRuntimeVersion: "0.84.2",
|
|
20
|
+
commandDigest: "sha256:8c696f38296d53d0061fa11534570c5ddd951b63532aed30e0f1fcc676dc169f",
|
|
21
|
+
qualificationModel: "openrouter/deepseek/deepseek-v4-flash-0731",
|
|
22
|
+
reportedModelId: "openrouter/deepseek/deepseek-v4-flash-0731",
|
|
23
|
+
permissionPolicy: "interactive",
|
|
24
|
+
},
|
|
25
|
+
claude: {
|
|
26
|
+
driverKind: ACPX_DRIVER_KIND,
|
|
27
|
+
protocolVersion: ACPX_DRIVER_PROTOCOL_VERSION,
|
|
28
|
+
acpxVersion: QUALIFIED_ACPX_VERSION,
|
|
29
|
+
agent: "claude",
|
|
30
|
+
agentProfileVersion: 1,
|
|
31
|
+
agentServerPackage: "@agentclientprotocol/claude-agent-acp",
|
|
32
|
+
agentServerVersion: "0.70.0",
|
|
33
|
+
agentRuntimePackage: null,
|
|
34
|
+
agentRuntimeVersion: null,
|
|
35
|
+
commandDigest: "sha256:9d73d1f0f121fb96cc8badb28c22d5bff02d8582eb2e40360a81c189e1b9422a",
|
|
36
|
+
qualificationModel: "claude-sonnet-5",
|
|
37
|
+
reportedModelId: "sonnet",
|
|
38
|
+
permissionPolicy: "interactive",
|
|
39
|
+
},
|
|
40
|
+
codex: {
|
|
41
|
+
driverKind: ACPX_DRIVER_KIND,
|
|
42
|
+
protocolVersion: ACPX_DRIVER_PROTOCOL_VERSION,
|
|
43
|
+
acpxVersion: QUALIFIED_ACPX_VERSION,
|
|
44
|
+
agent: "codex",
|
|
45
|
+
agentProfileVersion: 1,
|
|
46
|
+
agentServerPackage: "@agentclientprotocol/codex-acp",
|
|
47
|
+
agentServerVersion: "1.6.2",
|
|
48
|
+
agentRuntimePackage: null,
|
|
49
|
+
agentRuntimeVersion: null,
|
|
50
|
+
commandDigest: "sha256:94049b3e3c3aee87de62703786e4fa81d031d7bd979f99bdf516d84f28791a79",
|
|
51
|
+
qualificationModel: "gpt-5.6-sol",
|
|
52
|
+
reportedModelId: "gpt-5.6-sol",
|
|
53
|
+
permissionPolicy: "interactive",
|
|
54
|
+
},
|
|
55
|
+
});
|
|
56
|
+
export function resolveQualifiedAcpxProfile(agent, requestedModel) {
|
|
57
|
+
const profile = QUALIFIED_ACPX_PROFILES[agent];
|
|
58
|
+
if (requestedModel !== profile.qualificationModel) {
|
|
59
|
+
throw new Error(`ACPX ${agent} profile requires exact model ${profile.qualificationModel}; received ${requestedModel}`);
|
|
60
|
+
}
|
|
61
|
+
return structuredClone(profile);
|
|
62
|
+
}
|
|
63
|
+
function deepFreeze(value) {
|
|
64
|
+
if (typeof value !== "object" || value === null || Object.isFrozen(value))
|
|
65
|
+
return value;
|
|
66
|
+
Object.freeze(value);
|
|
67
|
+
for (const child of Object.values(value))
|
|
68
|
+
deepFreeze(child);
|
|
69
|
+
return value;
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=qualified-profiles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"qualified-profiles.js","sourceRoot":"","sources":["../../../src/drivers/acpx/qualified-profiles.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,sBAAsB,GAAG,QAAiB,CAAC;AACxD,MAAM,CAAC,MAAM,gBAAgB,GAAG,cAAuB,CAAC;AACxD,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAU,CAAC;AA8BvD;;;;GAIG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAEhC,UAAU,CAAC;IACb,EAAE,EAAE;QACF,UAAU,EAAE,gBAAgB;QAC5B,eAAe,EAAE,4BAA4B;QAC7C,WAAW,EAAE,sBAAsB;QACnC,KAAK,EAAE,IAAI;QACX,mBAAmB,EAAE,CAAC;QACtB,kBAAkB,EAAE,QAAQ;QAC5B,kBAAkB,EAAE,QAAQ;QAC5B,mBAAmB,EAAE,iCAAiC;QACtD,mBAAmB,EAAE,QAAQ;QAC7B,aAAa,EACX,yEAAyE;QAC3E,kBAAkB,EAAE,4CAA4C;QAChE,eAAe,EAAE,4CAA4C;QAC7D,gBAAgB,EAAE,aAAa;KAChC;IACD,MAAM,EAAE;QACN,UAAU,EAAE,gBAAgB;QAC5B,eAAe,EAAE,4BAA4B;QAC7C,WAAW,EAAE,sBAAsB;QACnC,KAAK,EAAE,QAAQ;QACf,mBAAmB,EAAE,CAAC;QACtB,kBAAkB,EAAE,uCAAuC;QAC3D,kBAAkB,EAAE,QAAQ;QAC5B,mBAAmB,EAAE,IAAI;QACzB,mBAAmB,EAAE,IAAI;QACzB,aAAa,EACX,yEAAyE;QAC3E,kBAAkB,EAAE,iBAAiB;QACrC,eAAe,EAAE,QAAQ;QACzB,gBAAgB,EAAE,aAAa;KAChC;IACD,KAAK,EAAE;QACL,UAAU,EAAE,gBAAgB;QAC5B,eAAe,EAAE,4BAA4B;QAC7C,WAAW,EAAE,sBAAsB;QACnC,KAAK,EAAE,OAAO;QACd,mBAAmB,EAAE,CAAC;QACtB,kBAAkB,EAAE,gCAAgC;QACpD,kBAAkB,EAAE,OAAO;QAC3B,mBAAmB,EAAE,IAAI;QACzB,mBAAmB,EAAE,IAAI;QACzB,aAAa,EACX,yEAAyE;QAC3E,kBAAkB,EAAE,aAAa;QACjC,eAAe,EAAE,aAAa;QAC9B,gBAAgB,EAAE,aAAa;KAChC;CACF,CAAC,CAAC;AAEH,MAAM,UAAU,2BAA2B,CACzC,KAAyB,EACzB,cAAsB;IAEtB,MAAM,OAAO,GAAG,uBAAuB,CAAC,KAAK,CAAC,CAAC;IAC/C,IAAI,cAAc,KAAK,OAAO,CAAC,kBAAkB,EAAE,CAAC;QAClD,MAAM,IAAI,KAAK,CACb,QAAQ,KAAK,iCAAiC,OAAO,CAAC,kBAAkB,cAAc,cAAc,EAAE,CACvG,CAAC;IACJ,CAAC;IACD,OAAO,eAAe,CAAC,OAAO,CAAC,CAAC;AAClC,CAAC;AAED,SAAS,UAAU,CAAI,KAAQ;IAC7B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;QACvE,OAAO,KAAK,CAAC;IACf,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACrB,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;QAAE,UAAU,CAAC,KAAK,CAAC,CAAC;IAC5D,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import type { QualifiedAcpxAgent } from "./qualified-profiles.js";
|
|
2
|
+
import type { NativeRuntimeContextSnapshot } from "../../contracts/runtime-context.js";
|
|
3
|
+
import type { NativeAcpxPermissionMode } from "../../contracts/native-execution.js";
|
|
4
|
+
import { type GeneratedAcpxSidecarCommand, type GeneratedAcpxSidecarEventType } from "./generated-sidecar-contract.js";
|
|
5
|
+
export declare const ACPX_SIDECAR_PROTOCOL_VERSION: 2;
|
|
6
|
+
export declare const ACPX_SIDECAR_MAX_FRAME_BYTES: number;
|
|
7
|
+
export interface AcpxSidecarRequest {
|
|
8
|
+
protocolVersion: typeof ACPX_SIDECAR_PROTOCOL_VERSION;
|
|
9
|
+
id: number;
|
|
10
|
+
command: GeneratedAcpxSidecarCommand;
|
|
11
|
+
params: Record<string, unknown>;
|
|
12
|
+
}
|
|
13
|
+
export interface AcpxSidecarResponse {
|
|
14
|
+
protocolVersion: typeof ACPX_SIDECAR_PROTOCOL_VERSION;
|
|
15
|
+
id: number;
|
|
16
|
+
ok: boolean;
|
|
17
|
+
result?: Record<string, unknown>;
|
|
18
|
+
error?: {
|
|
19
|
+
code: string;
|
|
20
|
+
message: string;
|
|
21
|
+
retryable: boolean;
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
export interface AcpxSidecarEvent {
|
|
25
|
+
protocolVersion: typeof ACPX_SIDECAR_PROTOCOL_VERSION;
|
|
26
|
+
sequence: number;
|
|
27
|
+
eventType: GeneratedAcpxSidecarEventType;
|
|
28
|
+
runId: string | null;
|
|
29
|
+
turnId: string | null;
|
|
30
|
+
payload: Record<string, unknown>;
|
|
31
|
+
}
|
|
32
|
+
export interface AcpxSidecarOpenParams {
|
|
33
|
+
runtimeDirectory: string;
|
|
34
|
+
normalizedSessionId: string;
|
|
35
|
+
workingDirectory: string;
|
|
36
|
+
agent: QualifiedAcpxAgent;
|
|
37
|
+
model: string;
|
|
38
|
+
permissionMode: NativeAcpxPermissionMode;
|
|
39
|
+
permissionModePinned: boolean;
|
|
40
|
+
systemInstructions: string;
|
|
41
|
+
runtimeContext: NativeRuntimeContextSnapshot | null;
|
|
42
|
+
tools: readonly Readonly<Record<string, unknown>>[];
|
|
43
|
+
providerSessionKey?: string;
|
|
44
|
+
expectedIdentity?: AcpxExpectedSessionIdentity;
|
|
45
|
+
}
|
|
46
|
+
export interface AcpxExpectedSessionIdentity {
|
|
47
|
+
kind: "acpx";
|
|
48
|
+
normalizedSessionId: string;
|
|
49
|
+
acpxRecordId: string;
|
|
50
|
+
backendSessionId: string;
|
|
51
|
+
agentSessionId: string;
|
|
52
|
+
profileDigest: string;
|
|
53
|
+
workspaceDigest: string;
|
|
54
|
+
requestedModel: string;
|
|
55
|
+
effectiveModel: string;
|
|
56
|
+
permissionMode?: NativeAcpxPermissionMode;
|
|
57
|
+
}
|
|
58
|
+
export declare function parseAcpxSidecarRequest(value: unknown): AcpxSidecarRequest;
|
|
59
|
+
export declare function boundedSidecarValue(value: unknown, maxBytes?: number): Record<string, unknown>;
|
|
60
|
+
export declare function sanitizeAcpxPlanEntries(value: unknown): Array<{
|
|
61
|
+
content: string;
|
|
62
|
+
status: "pending" | "in_progress" | "completed";
|
|
63
|
+
priority: string | null;
|
|
64
|
+
}>;
|
|
65
|
+
export declare function record(value: unknown): Record<string, unknown>;
|
|
66
|
+
export declare function text(value: unknown, fallback?: string): string;
|
|
67
|
+
//# sourceMappingURL=sidecar-protocol.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sidecar-protocol.d.ts","sourceRoot":"","sources":["../../../src/drivers/acpx/sidecar-protocol.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { GENERATED_ACPX_SIDECAR_COMMANDS, GENERATED_ACPX_SIDECAR_PROTOCOL_VERSION, } from "./generated-sidecar-contract.js";
|
|
2
|
+
export const ACPX_SIDECAR_PROTOCOL_VERSION = GENERATED_ACPX_SIDECAR_PROTOCOL_VERSION;
|
|
3
|
+
export const ACPX_SIDECAR_MAX_FRAME_BYTES = 1024 * 1024;
|
|
4
|
+
export function parseAcpxSidecarRequest(value) {
|
|
5
|
+
let serialized;
|
|
6
|
+
try {
|
|
7
|
+
serialized = JSON.stringify(value);
|
|
8
|
+
}
|
|
9
|
+
catch {
|
|
10
|
+
throw new Error("ACPX sidecar request is not JSON serializable");
|
|
11
|
+
}
|
|
12
|
+
if (!serialized ||
|
|
13
|
+
Buffer.byteLength(serialized) > ACPX_SIDECAR_MAX_FRAME_BYTES) {
|
|
14
|
+
throw new Error("ACPX sidecar request exceeds the frame limit");
|
|
15
|
+
}
|
|
16
|
+
if (typeof value !== "object" || value === null || Array.isArray(value)) {
|
|
17
|
+
throw new Error("ACPX sidecar request must be an object");
|
|
18
|
+
}
|
|
19
|
+
const request = value;
|
|
20
|
+
if (Object.keys(request).some((key) => !["protocolVersion", "id", "command", "params"].includes(key))) {
|
|
21
|
+
throw new Error("ACPX sidecar request contains an unknown field");
|
|
22
|
+
}
|
|
23
|
+
if (request.protocolVersion !== ACPX_SIDECAR_PROTOCOL_VERSION) {
|
|
24
|
+
throw new Error("unsupported ACPX sidecar protocol version");
|
|
25
|
+
}
|
|
26
|
+
if (!Number.isSafeInteger(request.id) || Number(request.id) < 1)
|
|
27
|
+
throw new Error("sidecar request id must be a positive integer");
|
|
28
|
+
const command = text(request.command);
|
|
29
|
+
if (!GENERATED_ACPX_SIDECAR_COMMANDS.includes(command))
|
|
30
|
+
throw new Error("unsupported ACPX sidecar command");
|
|
31
|
+
if (typeof request.params !== "object" ||
|
|
32
|
+
request.params === null ||
|
|
33
|
+
Array.isArray(request.params)) {
|
|
34
|
+
throw new Error("ACPX sidecar request params must be an object");
|
|
35
|
+
}
|
|
36
|
+
return {
|
|
37
|
+
protocolVersion: ACPX_SIDECAR_PROTOCOL_VERSION,
|
|
38
|
+
id: Number(request.id),
|
|
39
|
+
command: command,
|
|
40
|
+
params: structuredClone(request.params),
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
export function boundedSidecarValue(value, maxBytes = 64 * 1024) {
|
|
44
|
+
if (!Number.isSafeInteger(maxBytes) || maxBytes < 1) {
|
|
45
|
+
throw new Error("ACPX sidecar value limit must be a positive integer");
|
|
46
|
+
}
|
|
47
|
+
try {
|
|
48
|
+
const serialized = JSON.stringify(value);
|
|
49
|
+
if (!serialized || Buffer.byteLength(serialized) > maxBytes) {
|
|
50
|
+
return { omitted: true, reason: "payload_limit" };
|
|
51
|
+
}
|
|
52
|
+
const parsed = JSON.parse(serialized);
|
|
53
|
+
return typeof parsed === "object" &&
|
|
54
|
+
parsed !== null &&
|
|
55
|
+
!Array.isArray(parsed)
|
|
56
|
+
? parsed
|
|
57
|
+
: { omitted: true, reason: "object_required" };
|
|
58
|
+
}
|
|
59
|
+
catch {
|
|
60
|
+
return { omitted: true, reason: "serialization_failed" };
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
export function sanitizeAcpxPlanEntries(value) {
|
|
64
|
+
if (!Array.isArray(value))
|
|
65
|
+
return [];
|
|
66
|
+
return value.slice(0, 256).flatMap((candidate) => {
|
|
67
|
+
const entry = record(candidate);
|
|
68
|
+
const content = text(entry.content).trim().slice(0, 4_000);
|
|
69
|
+
const status = text(entry.status);
|
|
70
|
+
if (!content ||
|
|
71
|
+
(status !== "pending" &&
|
|
72
|
+
status !== "in_progress" &&
|
|
73
|
+
status !== "completed"))
|
|
74
|
+
return [];
|
|
75
|
+
return [
|
|
76
|
+
{
|
|
77
|
+
content,
|
|
78
|
+
status,
|
|
79
|
+
priority: text(entry.priority).slice(0, 80) || null,
|
|
80
|
+
},
|
|
81
|
+
];
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
export function record(value) {
|
|
85
|
+
return typeof value === "object" && value !== null && !Array.isArray(value)
|
|
86
|
+
? value
|
|
87
|
+
: {};
|
|
88
|
+
}
|
|
89
|
+
export function text(value, fallback = "") {
|
|
90
|
+
return typeof value === "string" ? value : fallback;
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=sidecar-protocol.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sidecar-protocol.js","sourceRoot":"","sources":["../../../src/drivers/acpx/sidecar-protocol.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@paperclipai/server",
|
|
3
|
-
"version": "2026.830.0-canary.
|
|
3
|
+
"version": "2026.830.0-canary.14",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"homepage": "https://github.com/paperclipai/paperclip",
|
|
6
6
|
"bugs": {
|
|
@@ -29,22 +29,22 @@
|
|
|
29
29
|
"dependencies": {
|
|
30
30
|
"@aws-sdk/client-s3": "^3.1115.0",
|
|
31
31
|
"@opentelemetry/api": "^1.9.0",
|
|
32
|
-
"@paperclipai/adapter-claude-local": "2026.830.0-canary.
|
|
33
|
-
"@paperclipai/adapter-codex-local": "2026.830.0-canary.
|
|
34
|
-
"@paperclipai/adapter-cursor-cloud": "2026.830.0-canary.
|
|
35
|
-
"@paperclipai/adapter-cursor-local": "2026.830.0-canary.
|
|
36
|
-
"@paperclipai/adapter-gemini-local": "2026.830.0-canary.
|
|
37
|
-
"@paperclipai/adapter-grok-local": "2026.830.0-canary.
|
|
38
|
-
"@paperclipai/adapter-kimi-local": "2026.830.0-canary.
|
|
39
|
-
"@paperclipai/adapter-openclaw-gateway": "2026.830.0-canary.
|
|
40
|
-
"@paperclipai/adapter-opencode-local": "2026.830.0-canary.
|
|
41
|
-
"@paperclipai/adapter-pi-local": "2026.830.0-canary.
|
|
42
|
-
"@paperclipai/adapter-utils": "2026.830.0-canary.
|
|
43
|
-
"@paperclipai/db": "2026.830.0-canary.
|
|
44
|
-
"@paperclipai/hermes-paperclip-adapter": "2026.830.0-canary.
|
|
45
|
-
"@paperclipai/plugin-sdk": "2026.830.0-canary.
|
|
46
|
-
"@paperclipai/shared": "2026.830.0-canary.
|
|
47
|
-
"@paperclipai/skills-catalog": "2026.830.0-canary.
|
|
32
|
+
"@paperclipai/adapter-claude-local": "2026.830.0-canary.14",
|
|
33
|
+
"@paperclipai/adapter-codex-local": "2026.830.0-canary.14",
|
|
34
|
+
"@paperclipai/adapter-cursor-cloud": "2026.830.0-canary.14",
|
|
35
|
+
"@paperclipai/adapter-cursor-local": "2026.830.0-canary.14",
|
|
36
|
+
"@paperclipai/adapter-gemini-local": "2026.830.0-canary.14",
|
|
37
|
+
"@paperclipai/adapter-grok-local": "2026.830.0-canary.14",
|
|
38
|
+
"@paperclipai/adapter-kimi-local": "2026.830.0-canary.14",
|
|
39
|
+
"@paperclipai/adapter-openclaw-gateway": "2026.830.0-canary.14",
|
|
40
|
+
"@paperclipai/adapter-opencode-local": "2026.830.0-canary.14",
|
|
41
|
+
"@paperclipai/adapter-pi-local": "2026.830.0-canary.14",
|
|
42
|
+
"@paperclipai/adapter-utils": "2026.830.0-canary.14",
|
|
43
|
+
"@paperclipai/db": "2026.830.0-canary.14",
|
|
44
|
+
"@paperclipai/hermes-paperclip-adapter": "2026.830.0-canary.14",
|
|
45
|
+
"@paperclipai/plugin-sdk": "2026.830.0-canary.14",
|
|
46
|
+
"@paperclipai/shared": "2026.830.0-canary.14",
|
|
47
|
+
"@paperclipai/skills-catalog": "2026.830.0-canary.14",
|
|
48
48
|
"@vercel/connect": "0.6.1",
|
|
49
49
|
"ajv": "^8.20.0",
|
|
50
50
|
"ajv-formats": "^3.0.1",
|
|
@@ -68,7 +68,7 @@
|
|
|
68
68
|
"zod": "^4.4.3"
|
|
69
69
|
},
|
|
70
70
|
"devDependencies": {
|
|
71
|
-
"@paperclipai/paperclip-runner": "2026.830.0-canary.
|
|
71
|
+
"@paperclipai/paperclip-runner": "2026.830.0-canary.14",
|
|
72
72
|
"@types/express": "^5.0.0",
|
|
73
73
|
"@types/express-serve-static-core": "^5.1.3",
|
|
74
74
|
"@types/jsdom": "^30.0.0",
|