mirror of
https://github.com/paperclipai/paperclip.git
synced 2026-10-28 20:21:50 +01:00
ci(runner): remove validation diagnostics
This commit is contained in:
1 parent
82d0ddff5f
commit
31b97c09eb
6 files changed
+45
-282
No files matched your search
@@ -277,13 +277,14 @@ impl AcpxSidecarTransport {
|
||||
));
|
||||
}
|
||||
let error = response.error.expect("failed response has validated error");
|
||||
return Ok(CommandOutcome::Rejected(LocalRunnerError::invalid(format!(
|
||||
"ACPX sidecar command {} was rejected (retryable={}, classification={}){}",
|
||||
command.as_str(),
|
||||
error.retryable,
|
||||
response_error_classification(&error),
|
||||
self.diagnostic_suffix(),
|
||||
))));
|
||||
return Ok(CommandOutcome::Rejected(LocalRunnerError::invalid(
|
||||
format!(
|
||||
"ACPX sidecar command {} was rejected (retryable={}, classification={})",
|
||||
command.as_str(),
|
||||
error.retryable,
|
||||
response_error_classification(&error),
|
||||
),
|
||||
)));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -590,13 +591,7 @@ fn nullable_identifier(
|
||||
}
|
||||
|
||||
fn redact_diagnostic(value: &str) -> String {
|
||||
if value.starts_with("[paperclip-acpx-launch] ")
|
||||
&& value
|
||||
.chars()
|
||||
.all(|character| character.is_ascii_alphanumeric() || "[]-_ ".contains(character))
|
||||
{
|
||||
value.to_owned()
|
||||
} else if value.is_empty() {
|
||||
if value.is_empty() {
|
||||
String::new()
|
||||
} else {
|
||||
"[REDACTED]".to_owned()
|
||||
@@ -644,15 +639,6 @@ fn response_error_classification(error: &ResponseError) -> &'static str {
|
||||
"ACPX_MODEL_STATUS_UNAVAILABLE" => return "model_status_unavailable",
|
||||
"ACPX_MODEL_SELECTION_UNAVAILABLE" => return "model_selection_unavailable",
|
||||
"ACPX_EFFECTIVE_MODEL_MISMATCH" => return "effective_model_mismatch",
|
||||
"PAPERCLIP_ACPX_ADMISSION_RECOVERY_BINDING" => return "admission_recovery_binding",
|
||||
"PAPERCLIP_ACPX_ADMISSION_INSTALLATION" => return "admission_installation",
|
||||
"PAPERCLIP_ACPX_ADMISSION_SANDBOX" => return "admission_sandbox",
|
||||
"PAPERCLIP_ACPX_ADMISSION_CREDENTIAL" => return "admission_credential",
|
||||
"PAPERCLIP_ACPX_ADMISSION_PROVIDER_LIFETIME" => return "admission_provider_lifetime",
|
||||
"PAPERCLIP_ACPX_ADMISSION_COMMAND" => return "admission_command",
|
||||
"PAPERCLIP_ACPX_ADMISSION_TOOL_BRIDGE" => return "admission_tool_bridge",
|
||||
"PAPERCLIP_ACPX_ADMISSION_RUNTIME" => return "admission_runtime",
|
||||
"PAPERCLIP_ACPX_ADMISSION_VERIFICATION" => return "admission_verification",
|
||||
_ => {}
|
||||
}
|
||||
match error.message.as_str() {
|
||||
|
||||
@@ -37,7 +37,6 @@ export function acpxBootstrapBlockedError(
|
||||
export function acpxSidecarErrorCode(error: Error): string {
|
||||
const pending: Error[] = [error];
|
||||
const observed = new Set<Error>();
|
||||
let admissionStageCode: string | null = null;
|
||||
while (pending.length > 0 && observed.size < 16) {
|
||||
const current = pending.shift()!;
|
||||
if (observed.has(current)) continue;
|
||||
@@ -46,9 +45,6 @@ export function acpxSidecarErrorCode(error: Error): string {
|
||||
if (code !== null) return code;
|
||||
|
||||
const details = current as Error & Record<string, unknown>;
|
||||
admissionStageCode ??= acpxAdmissionStageCode(
|
||||
details.paperclipAcpxAdmissionStage,
|
||||
);
|
||||
if (current instanceof AggregateError) {
|
||||
for (const nested of current.errors) {
|
||||
if (nested instanceof Error) pending.push(nested);
|
||||
@@ -56,14 +52,7 @@ export function acpxSidecarErrorCode(error: Error): string {
|
||||
}
|
||||
if (details.cause instanceof Error) pending.push(details.cause);
|
||||
}
|
||||
return admissionStageCode ?? "acpx_sidecar_command_failed";
|
||||
}
|
||||
|
||||
function acpxAdmissionStageCode(value: unknown): string | null {
|
||||
if (typeof value !== "string" || !ACPX_ADMISSION_STAGES.has(value)) {
|
||||
return null;
|
||||
}
|
||||
return `PAPERCLIP_ACPX_ADMISSION_${value.toUpperCase()}`;
|
||||
return "acpx_sidecar_command_failed";
|
||||
}
|
||||
|
||||
function directAcpxSidecarErrorCode(error: Error): string | null {
|
||||
@@ -140,18 +129,6 @@ const GENERIC_ACPX_OUTPUT_CODES = new Set([
|
||||
"USAGE",
|
||||
]);
|
||||
|
||||
const ACPX_ADMISSION_STAGES = new Set([
|
||||
"recovery_binding",
|
||||
"installation",
|
||||
"sandbox",
|
||||
"credential",
|
||||
"provider_lifetime",
|
||||
"command",
|
||||
"tool_bridge",
|
||||
"runtime",
|
||||
"verification",
|
||||
]);
|
||||
|
||||
const STABLE_ACPX_SIDECAR_CODES = new Set([
|
||||
"ACP_MODEL_UNSUPPORTED",
|
||||
"ACP_SESSION_INIT_FAILED",
|
||||
@@ -184,14 +161,5 @@ const STABLE_ACPX_SIDECAR_CODES = new Set([
|
||||
"ACPX_SESSION_ENSURE_TYPE_ERROR",
|
||||
"ACPX_SESSION_HANDSHAKE_TIMEOUT",
|
||||
"ACPX_SIDECAR_STATUS_READ_TIMEOUT",
|
||||
"PAPERCLIP_ACPX_ADMISSION_RECOVERY_BINDING",
|
||||
"PAPERCLIP_ACPX_ADMISSION_INSTALLATION",
|
||||
"PAPERCLIP_ACPX_ADMISSION_SANDBOX",
|
||||
"PAPERCLIP_ACPX_ADMISSION_CREDENTIAL",
|
||||
"PAPERCLIP_ACPX_ADMISSION_PROVIDER_LIFETIME",
|
||||
"PAPERCLIP_ACPX_ADMISSION_COMMAND",
|
||||
"PAPERCLIP_ACPX_ADMISSION_TOOL_BRIDGE",
|
||||
"PAPERCLIP_ACPX_ADMISSION_RUNTIME",
|
||||
"PAPERCLIP_ACPX_ADMISSION_VERIFICATION",
|
||||
...GENERIC_ACPX_OUTPUT_CODES,
|
||||
]);
|
||||
@@ -54,7 +54,7 @@ const activeCodexRuntimeCleanupOwners = new Set<Promise<unknown>>();
|
||||
// Provider initialization may include a cold native app-server start on a
|
||||
// minimally provisioned runner. Keep admission finite while allowing the
|
||||
// qualified runtime enough time to complete that local handshake.
|
||||
const SESSION_HANDSHAKE_TIMEOUT_MS = 12_000;
|
||||
const SESSION_HANDSHAKE_TIMEOUT_MS = 30_000;
|
||||
|
||||
class AcpxRuntimeCloseTimeoutError extends Error {
|
||||
constructor() {
|
||||
@@ -268,13 +268,6 @@ export async function openQualifiedAcpxRuntime(
|
||||
: {}),
|
||||
}),
|
||||
spawnCwd: options.cwd,
|
||||
onAgentStderr: (chunk) => {
|
||||
for (const line of chunk.split(/\r?\n/)) {
|
||||
if (line.startsWith("[paperclip-acpx-launch] ")) {
|
||||
process.stderr.write(`${line}\n`);
|
||||
}
|
||||
}
|
||||
},
|
||||
spawnAgent: (input) => {
|
||||
// ACPX can invoke this callback after its handshake caller has already
|
||||
// been cancelled. Check at the last host-owned boundary so a late
|
||||
|
||||
@@ -121,7 +121,6 @@ try {
|
||||
export const PROVIDER_LIFETIME_GUARDIAN_SOURCE = `
|
||||
const fs = require("node:fs");
|
||||
const { spawn } = require("node:child_process");
|
||||
const diagnose = (stage) => { try { fs.writeSync(2, "[paperclip-acpx-launch] " + stage + "\\n"); } catch {} };
|
||||
const WATCHDOG_SOURCE = ${JSON.stringify(PROVIDER_LIFETIME_WATCHDOG_SOURCE)};
|
||||
const runtimeExecutable = process.env.${VERIFIED_RUNTIME_EXECUTABLE_ENV} || process.execPath;
|
||||
const dependencyAncestorCount = Number.parseInt(process.argv[4], 10);
|
||||
@@ -134,7 +133,6 @@ const OWNERSHIP_FD = OWNER_FD + 1;
|
||||
const PROVIDER_EXIT_FD = OWNERSHIP_FD + 1;
|
||||
const CREDENTIAL_FENCE_FD_START = PROVIDER_EXIT_FD + 1;
|
||||
const dependencyAncestorFds = Array.from({ length: dependencyAncestorCount }, (_, index) => ${DEPENDENCY_ANCESTOR_FD_START} + index);
|
||||
diagnose("guardian_started");
|
||||
let provider;
|
||||
let watchdog;
|
||||
let reaped = false;
|
||||
@@ -170,7 +168,6 @@ process.on("SIGHUP", shutdown);
|
||||
const startProvider = () => {
|
||||
if (provider || reaped || shutdownStarted) return;
|
||||
try {
|
||||
diagnose("provider_spawn_requested");
|
||||
provider = spawn(
|
||||
runtimeExecutable,
|
||||
["--eval", process.argv[1], ...process.argv.slice(2)],
|
||||
@@ -186,11 +183,10 @@ const startProvider = () => {
|
||||
windowsHide: true,
|
||||
},
|
||||
);
|
||||
provider.once("error", () => { diagnose("provider_error"); reap(); });
|
||||
provider.once("exit", () => { diagnose("provider_exit"); reap(); });
|
||||
provider.once("error", reap);
|
||||
provider.once("exit", reap);
|
||||
provider.once("spawn", () => {
|
||||
try {
|
||||
diagnose("provider_spawned");
|
||||
if (reaped || shutdownStarted) {
|
||||
reap();
|
||||
return;
|
||||
@@ -221,7 +217,6 @@ try {
|
||||
stdio: ["ignore", "ignore", "ignore", "pipe", "pipe"],
|
||||
windowsHide: true,
|
||||
});
|
||||
diagnose("watchdog_spawned");
|
||||
const watchdogOwnerPipe = watchdog.stdio[3];
|
||||
const watchdogReady = watchdog.stdio[4];
|
||||
if (watchdogOwnerPipe == null) throw new Error("ACPX provider lifetime watchdog omitted its owner pipe");
|
||||
@@ -246,7 +241,6 @@ try {
|
||||
}
|
||||
if (!watchdogOutput.includes("armed\\n")) return;
|
||||
watchdogArmed = true;
|
||||
diagnose("watchdog_armed");
|
||||
clearTimeout(watchdogReadyTimeout);
|
||||
watchdogReady.removeAllListeners("data");
|
||||
startProvider();
|
||||
@@ -1595,8 +1589,6 @@ export function sanitizedNodeEnvironment(
|
||||
function snapshotBootstrap(format: AcpxCommandFormat, guarded = false): string {
|
||||
return [
|
||||
'const fs = require("node:fs");',
|
||||
'const diagnose = (stage) => { try { fs.writeSync(2, "[paperclip-acpx-launch] " + stage + "\\n"); } catch {} };',
|
||||
'diagnose("bootstrap_started");',
|
||||
'const { isBuiltin, registerHooks } = require("node:module");',
|
||||
'const { dirname, extname, join, normalize, relative, resolve } = require("node:path");',
|
||||
'const { fileURLToPath, pathToFileURL } = require("node:url");',
|
||||
@@ -1654,7 +1646,6 @@ function snapshotBootstrap(format: AcpxCommandFormat, guarded = false): string {
|
||||
'const canonicalizeDescriptorResolution = (url) => { if (typeof url !== "string" || !url.startsWith("file:") || snapshotDescriptorAncestorIndex(url, directoryUrl, dependencyDirectoryUrls) < 0) return url; try { return pathToFileURL(fs.realpathSync(fileURLToPath(url))).href; } catch { const error = new Error("ACPX provider module could not be canonicalized through its retained descriptor"); error.code = "ERR_ACPX_UNVERIFIED_MODULE"; throw error; } };',
|
||||
'const rememberDependencyAncestor = (specifier, resolution) => { const canonicalUrl = canonicalizeDescriptorResolution(resolution?.url); const pinned = snapshotDescriptorResolution(canonicalUrl, directoryUrl, dependencyDirectoryUrls, canonicalDirectoryUrl, canonicalDependencyDirectoryUrls); guardSnapshotModuleResolution(isBuiltin(specifier), resolution?.url, pinned !== null); if (pinned !== null && typeof resolution?.url === "string") { for (const rememberedUrl of [resolution.url, canonicalUrl, pinned.url]) { if (typeof rememberedUrl !== "string") continue; dependencyAncestorByUrl.set(rememberedUrl, pinned.ancestorIndex); if (typeof resolution.format === "string") descriptorFormatByUrl.set(rememberedUrl, resolution.format); } } return pinned === null || pinned.url === resolution?.url ? resolution : { ...resolution, url: pinned.url }; };',
|
||||
`const source = fs.readFileSync(${COMMAND_SOURCE_FD});`,
|
||||
'diagnose("source_loaded");',
|
||||
"let resolvingDescriptorBare = false;",
|
||||
"const resolveBareFromDescriptor = (specifier, dependencyDirectoryUrl) => { resolvingDescriptorBare = true; try { return require.resolve(specifier, { paths: [fileURLToPath(dependencyDirectoryUrl)] }); } finally { resolvingDescriptorBare = false; } };",
|
||||
"registerHooks({ resolve(specifier, context, nextResolve) {",
|
||||
@@ -1730,8 +1721,7 @@ function snapshotBootstrap(format: AcpxCommandFormat, guarded = false): string {
|
||||
"} finally { fs.closeSync(moduleFd); }",
|
||||
"});",
|
||||
"} });",
|
||||
'diagnose("import_started");',
|
||||
'import(target).then(() => diagnose("import_resolved"), (error) => { const code = String(error?.code || error?.name || "unknown").replace(/[^A-Za-z0-9_-]/g, "_").slice(0, 64); diagnose("import_rejected_" + code); console.error(error); process.exitCode = 1; });',
|
||||
"import(target).catch((error) => { console.error(error); process.exitCode = 1; });",
|
||||
].join("");
|
||||
}
|
||||
|
||||
|
||||
@@ -249,18 +249,15 @@ export class AcpxRuntimeHost {
|
||||
);
|
||||
}
|
||||
const profile = resolveQualifiedAcpxProfile(options.agent, options.model);
|
||||
const binding = await runAbortableAdmissionStage(
|
||||
options.signal,
|
||||
() =>
|
||||
createAcpxRecoveryBinding({
|
||||
runtimeDirectory: options.runtimeDirectory,
|
||||
normalizedSessionId: options.normalizedSessionId,
|
||||
workingDirectory: options.workingDirectory,
|
||||
profile,
|
||||
requestedModel: options.model,
|
||||
permissionMode: options.permissionMode,
|
||||
}),
|
||||
"recovery_binding",
|
||||
const binding = await runAbortableAdmissionStage(options.signal, () =>
|
||||
createAcpxRecoveryBinding({
|
||||
runtimeDirectory: options.runtimeDirectory,
|
||||
normalizedSessionId: options.normalizedSessionId,
|
||||
workingDirectory: options.workingDirectory,
|
||||
profile,
|
||||
requestedModel: options.model,
|
||||
permissionMode: options.permissionMode,
|
||||
}),
|
||||
);
|
||||
if (options.expectedIdentity) {
|
||||
verifyExpectedAcpxIdentity(options.expectedIdentity, binding, null);
|
||||
@@ -275,13 +272,10 @@ export class AcpxRuntimeHost {
|
||||
);
|
||||
}
|
||||
|
||||
const installation = await runAbortableAdmissionStage(
|
||||
options.signal,
|
||||
() =>
|
||||
(dependencies.verifyInstallation ?? verifyQualifiedAcpxInstallation)(
|
||||
profile,
|
||||
),
|
||||
"installation",
|
||||
const installation = await runAbortableAdmissionStage(options.signal, () =>
|
||||
(dependencies.verifyInstallation ?? verifyQualifiedAcpxInstallation)(
|
||||
profile,
|
||||
),
|
||||
);
|
||||
if (installation.commandDigest !== profile.commandDigest) {
|
||||
throw new Error("Verified ACPX installation does not match its profile");
|
||||
@@ -328,15 +322,12 @@ export class AcpxRuntimeHost {
|
||||
retainRuntimeHostCleanup(ownedCleanup);
|
||||
};
|
||||
try {
|
||||
const sandbox = await runAbortableAdmissionStage(
|
||||
options.signal,
|
||||
() =>
|
||||
prepareAcpxRuntimeSandbox({
|
||||
binding,
|
||||
agent: options.agent,
|
||||
environment: options.environment,
|
||||
}),
|
||||
"sandbox",
|
||||
const sandbox = await runAbortableAdmissionStage(options.signal, () =>
|
||||
prepareAcpxRuntimeSandbox({
|
||||
binding,
|
||||
agent: options.agent,
|
||||
environment: options.environment,
|
||||
}),
|
||||
);
|
||||
if (options.agent === "codex") {
|
||||
credential = await acquireAbortableAdmissionResource({
|
||||
@@ -452,7 +443,6 @@ export class AcpxRuntimeHost {
|
||||
profile,
|
||||
admissionVerificationTimeoutMs,
|
||||
),
|
||||
"verification",
|
||||
);
|
||||
const observedIdentity: AcpxExpectedSessionIdentity = {
|
||||
kind: "acpx",
|
||||
@@ -639,16 +629,11 @@ export class AcpxRuntimeHost {
|
||||
async function runAbortableAdmissionStage<T>(
|
||||
signal: AbortSignal | undefined,
|
||||
operation: () => Promise<T>,
|
||||
stage: string,
|
||||
): Promise<T> {
|
||||
try {
|
||||
if (signal === undefined) return await operation();
|
||||
signal.throwIfAborted();
|
||||
const pending = Promise.resolve().then(operation);
|
||||
return await raceAdmissionWithAbort(pending, signal);
|
||||
} catch (error) {
|
||||
throw attachAcpxAdmissionStage(error, stage);
|
||||
}
|
||||
if (signal === undefined) return await operation();
|
||||
signal.throwIfAborted();
|
||||
const pending = Promise.resolve().then(operation);
|
||||
return await raceAdmissionWithAbort(pending, signal);
|
||||
}
|
||||
|
||||
async function acquireAbortableAdmissionResource<T>(input: {
|
||||
@@ -659,13 +644,7 @@ async function acquireAbortableAdmissionResource<T>(input: {
|
||||
onAbortedPending?: (pending: Promise<T>) => void;
|
||||
reportFailure: (failure: AcpxRetainedCleanupFailure) => void;
|
||||
}): Promise<T> {
|
||||
if (input.signal === undefined) {
|
||||
try {
|
||||
return await input.acquire();
|
||||
} catch (error) {
|
||||
throw attachAcpxAdmissionStage(error, input.resource);
|
||||
}
|
||||
}
|
||||
if (input.signal === undefined) return await input.acquire();
|
||||
input.signal.throwIfAborted();
|
||||
const pending = Promise.resolve().then(input.acquire);
|
||||
try {
|
||||
@@ -687,29 +666,7 @@ async function acquireAbortableAdmissionResource<T>(input: {
|
||||
);
|
||||
}
|
||||
}
|
||||
throw attachAcpxAdmissionStage(error, input.resource);
|
||||
}
|
||||
}
|
||||
|
||||
function attachAcpxAdmissionStage(error: unknown, stage: string): Error {
|
||||
const normalized =
|
||||
error instanceof Error
|
||||
? error
|
||||
: new Error("ACPX admission rejected a non-error");
|
||||
try {
|
||||
Object.defineProperty(normalized, "paperclipAcpxAdmissionStage", {
|
||||
configurable: true,
|
||||
enumerable: false,
|
||||
value: stage,
|
||||
});
|
||||
return normalized;
|
||||
} catch {
|
||||
return Object.assign(
|
||||
new Error("ACPX admission stage failed", { cause: normalized }),
|
||||
{
|
||||
paperclipAcpxAdmissionStage: stage,
|
||||
},
|
||||
);
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Generated
+6
-137
@@ -13,11 +13,8 @@ patchedDependencies:
|
||||
'@agentclientprotocol/claude-agent-acp@0.70.0':
|
||||
hash: fymctidcjqjhi4cj72qtivlxry
|
||||
path: patches/@agentclientprotocol__claude-agent-acp@0.70.0.patch
|
||||
'@agentclientprotocol/claude-agent-acp@0.73.0':
|
||||
hash: axsvv3fhdlmmbmnhpi2cywic6q
|
||||
path: patches/@agentclientprotocol__claude-agent-acp@0.73.0.patch
|
||||
'@agentclientprotocol/codex-acp@1.6.2':
|
||||
hash: elxjibratyxkrkkxxyoqtz36pe
|
||||
hash: grbydorkxatbzksnwwfuawwtim
|
||||
path: patches/@agentclientprotocol__codex-acp@1.6.2.patch
|
||||
acpx@0.12.0:
|
||||
hash: b2ggqg6aj4hdob4whk6vq6jmc4
|
||||
@@ -28,9 +25,6 @@ patchedDependencies:
|
||||
embedded-postgres@18.1.0-beta.16:
|
||||
hash: 55uhvnotpqyiy37rn3pqpukhei
|
||||
path: patches/embedded-postgres@18.1.0-beta.16.patch
|
||||
node@24.11.0:
|
||||
hash: v5qkq5xhqy2tsyfb3ac3vqpw7e
|
||||
path: patches/node@24.11.0.patch
|
||||
|
||||
importers:
|
||||
|
||||
@@ -153,8 +147,8 @@ importers:
|
||||
packages/adapters/claude-local:
|
||||
dependencies:
|
||||
'@agentclientprotocol/claude-agent-acp':
|
||||
specifier: ^0.73.0
|
||||
version: 0.73.0(patch_hash=axsvv3fhdlmmbmnhpi2cywic6q)(@anthropic-ai/sdk@0.121.0(zod@4.4.3))(@modelcontextprotocol/sdk@1.30.0(zod@4.4.3))
|
||||
specifier: ^0.70.0
|
||||
version: 0.70.0(patch_hash=fymctidcjqjhi4cj72qtivlxry)(@anthropic-ai/sdk@0.121.0(zod@4.4.3))(@modelcontextprotocol/sdk@1.30.0(zod@4.4.3))
|
||||
'@anthropic-ai/sdk':
|
||||
specifier: 0.121.0
|
||||
version: 0.121.0(zod@4.4.3)
|
||||
@@ -179,7 +173,7 @@ importers:
|
||||
dependencies:
|
||||
'@agentclientprotocol/codex-acp':
|
||||
specifier: ^1.6.2
|
||||
version: 1.6.2(patch_hash=elxjibratyxkrkkxxyoqtz36pe)
|
||||
version: 1.6.2(patch_hash=grbydorkxatbzksnwwfuawwtim)
|
||||
'@paperclipai/adapter-utils':
|
||||
specifier: workspace:*
|
||||
version: link:../../adapter-utils
|
||||
@@ -482,10 +476,7 @@ importers:
|
||||
version: 0.70.0(patch_hash=fymctidcjqjhi4cj72qtivlxry)(@anthropic-ai/sdk@0.121.0(zod@4.4.3))(@modelcontextprotocol/sdk@1.30.0(zod@4.4.3))
|
||||
'@agentclientprotocol/codex-acp':
|
||||
specifier: 1.6.2
|
||||
version: 1.6.2(patch_hash=elxjibratyxkrkkxxyoqtz36pe)
|
||||
'@openai/codex':
|
||||
specifier: 0.148.0
|
||||
version: 0.148.0
|
||||
version: 1.6.2(patch_hash=grbydorkxatbzksnwwfuawwtim)
|
||||
acpx:
|
||||
specifier: 0.13.1
|
||||
version: 0.13.1(patch_hash=lzpwjtiaybzoijy455dfycwavu)
|
||||
@@ -495,9 +486,6 @@ importers:
|
||||
json-schema-to-ts:
|
||||
specifier: ^3.1.1
|
||||
version: 3.1.1
|
||||
node:
|
||||
specifier: 24.11.0
|
||||
version: 24.11.0(patch_hash=v5qkq5xhqy2tsyfb3ac3vqpw7e)
|
||||
opencode-ai:
|
||||
specifier: 1.18.17
|
||||
version: 1.18.17
|
||||
@@ -507,10 +495,6 @@ importers:
|
||||
remark-gfm:
|
||||
specifier: ^4.0.1
|
||||
version: 4.0.1
|
||||
optionalDependencies:
|
||||
'@openai/codex-linux-x64':
|
||||
specifier: npm:@openai/codex@0.148.0-linux-x64
|
||||
version: '@openai/codex@0.148.0-linux-x64'
|
||||
devDependencies:
|
||||
'@paperclipai/paperclip-eval-kernel':
|
||||
specifier: workspace:*
|
||||
@@ -1204,11 +1188,6 @@ packages:
|
||||
engines: {node: '>=22'}
|
||||
hasBin: true
|
||||
|
||||
'@agentclientprotocol/claude-agent-acp@0.73.0':
|
||||
resolution: {integrity: sha512-xKnGIntdBbr2dDS2NEsVGdjoLH62EaWjfYlp/U7TYdxUJzERlApe2gliYW3rVFTeWGjG0dUyPszhG9TWhsqGlA==}
|
||||
engines: {node: '>=22'}
|
||||
hasBin: true
|
||||
|
||||
'@agentclientprotocol/codex-acp@1.6.2':
|
||||
resolution: {integrity: sha512-2eF1mbs1gTqkZJSLYOun/pFDx37sYa7W63HOPezC37b/R8AYms5O1nfQu8lrqFSGDrwDZkASVORymLcqjCNqyA==}
|
||||
hasBin: true
|
||||
@@ -1236,81 +1215,41 @@ packages:
|
||||
cpu: [arm64]
|
||||
os: [darwin]
|
||||
|
||||
'@anthropic-ai/claude-agent-sdk-darwin-arm64@0.3.257':
|
||||
resolution: {integrity: sha512-ITjFPYB8riu9tbxbrWArokiZ/90w/NDrYbtEvyr3ScilVtu1iupkComxkhvbUxoyT4JRDpKsdw/ZOfwSl/pkpA==}
|
||||
cpu: [arm64]
|
||||
os: [darwin]
|
||||
|
||||
'@anthropic-ai/claude-agent-sdk-darwin-x64@0.3.232':
|
||||
resolution: {integrity: sha512-EHZ1Y3aGyZ2mFZ6QLR1bM3/HiIn2cLrPjU+k3/oCIW6omJFodfzf410aWjDPSnMj7CE4d6t7MSjBWekMUbcv0g==}
|
||||
cpu: [x64]
|
||||
os: [darwin]
|
||||
|
||||
'@anthropic-ai/claude-agent-sdk-darwin-x64@0.3.257':
|
||||
resolution: {integrity: sha512-0s7QoLRnopbMvCqVpgCnvBWg4UNxPUybMZTknkn3HLBMvUjUdHs1QXb77c/yrT1WAPqDTw1Ju+H0esXwWa8/Kg==}
|
||||
cpu: [x64]
|
||||
os: [darwin]
|
||||
|
||||
'@anthropic-ai/claude-agent-sdk-linux-arm64-musl@0.3.232':
|
||||
resolution: {integrity: sha512-XkLcb9UT/l42Rtw7KBApzgxUe/kwoWJ9KCPcVEnYojzIvVR+AwBCl/QReNU5+6c72w48dYBMmLebI64gQbN0tg==}
|
||||
cpu: [arm64]
|
||||
os: [linux]
|
||||
|
||||
'@anthropic-ai/claude-agent-sdk-linux-arm64-musl@0.3.257':
|
||||
resolution: {integrity: sha512-t2WHfKjY4Jjgzfk0lbBUt6EVPQe+wXvXvRmYnK7ICfzZ1jS8CrpDajwBQErKFSMiUqGAutZy3vwDwGziW32cpw==}
|
||||
cpu: [arm64]
|
||||
os: [linux]
|
||||
|
||||
'@anthropic-ai/claude-agent-sdk-linux-arm64@0.3.232':
|
||||
resolution: {integrity: sha512-wW2opwA5s7gLghjU6B2ADMAtoc7bAZMevUzi4g+1PXMJ8MGcPvbnx92EDYJrVDcZmAl1+fz19XyPsaShlisTzw==}
|
||||
cpu: [arm64]
|
||||
os: [linux]
|
||||
|
||||
'@anthropic-ai/claude-agent-sdk-linux-arm64@0.3.257':
|
||||
resolution: {integrity: sha512-38tv1s1CaIE6CyEBmJpfKtvwPzrasxPiRT079BEs5aaiLPQ+pmSGF0+Lwy7ot9i6xqr7v5/91TVo5JXHI8Pkpg==}
|
||||
cpu: [arm64]
|
||||
os: [linux]
|
||||
|
||||
'@anthropic-ai/claude-agent-sdk-linux-x64-musl@0.3.232':
|
||||
resolution: {integrity: sha512-L1x2ge9NpXMLTczmT44TKPQ88PHE+gsCakQMVEOa8rXFvfBoqvcpxM0DT8wrqYWUHhQEYR8NXxQTP9a1NVRj8Q==}
|
||||
cpu: [x64]
|
||||
os: [linux]
|
||||
|
||||
'@anthropic-ai/claude-agent-sdk-linux-x64-musl@0.3.257':
|
||||
resolution: {integrity: sha512-qSlgAUEpj2JAA+YqMD222iv2W3x8xBDSYwdoaOx20VbaJRjFq8feViI7kcr1C6wVN+ApX4Rxl7YX6gekiBkA2g==}
|
||||
cpu: [x64]
|
||||
os: [linux]
|
||||
|
||||
'@anthropic-ai/claude-agent-sdk-linux-x64@0.3.232':
|
||||
resolution: {integrity: sha512-6Px1xDiwQyLkSxwRQ34/kPA8WMXQ2rHYGkwockND7+9yMw+ShI3AfLkyi9G7JtJHObWFT6B82eSHjDS/Fy+9hQ==}
|
||||
cpu: [x64]
|
||||
os: [linux]
|
||||
|
||||
'@anthropic-ai/claude-agent-sdk-linux-x64@0.3.257':
|
||||
resolution: {integrity: sha512-0FRyIwV4jEJErdDDoYMC0v9lzuFNz5y0lK2340H5fP02eNXsP3U0htKW/bfRP8Ppei+xc4QUZgdCI6rVzkhXGg==}
|
||||
cpu: [x64]
|
||||
os: [linux]
|
||||
|
||||
'@anthropic-ai/claude-agent-sdk-win32-arm64@0.3.232':
|
||||
resolution: {integrity: sha512-fDiuwL5dm1elOy7fNp4Qmdor8so4R8npj2pUGQA1G/xKfJhaK236aTWezvZid3L/O7cRdFeN9IVofOAlWLQcsw==}
|
||||
cpu: [arm64]
|
||||
os: [win32]
|
||||
|
||||
'@anthropic-ai/claude-agent-sdk-win32-arm64@0.3.257':
|
||||
resolution: {integrity: sha512-7iEwy14lSqaAWvNR3KucBusQs5+hG6uoliYWZ2M2FyaCk5PHYymVf9mrRPtWhaYfNwum/YY13acYIIvnAbz0kA==}
|
||||
cpu: [arm64]
|
||||
os: [win32]
|
||||
|
||||
'@anthropic-ai/claude-agent-sdk-win32-x64@0.3.232':
|
||||
resolution: {integrity: sha512-Hc/9uy1BI9mqKVyB1b/zoUnm3MFgtVNzQY6p5zgaq9DaIjCKDpR4a4L1aDZM4lMqUcWFMZM+u7juOhh+m39NBQ==}
|
||||
cpu: [x64]
|
||||
os: [win32]
|
||||
|
||||
'@anthropic-ai/claude-agent-sdk-win32-x64@0.3.257':
|
||||
resolution: {integrity: sha512-NW0zMjHXFBdu2TcjT9Zo5o/1tJaDy6A7v4Gt/vLVJgaipV/RzAbyRGXZzH37hswyiKrSLGaSoYYP1vUfncbkUQ==}
|
||||
cpu: [x64]
|
||||
os: [win32]
|
||||
|
||||
'@anthropic-ai/claude-agent-sdk@0.3.232':
|
||||
resolution: {integrity: sha512-8od7hJk9fZnF1/oYYiR9PvroGbZRQrpmNgKirjHNGoj5ur5YcAZLohI70XVUAUe3KvjB1msLxtkvmlAT9sqFAg==}
|
||||
engines: {node: '>=18.0.0'}
|
||||
@@ -1319,14 +1258,6 @@ packages:
|
||||
'@modelcontextprotocol/sdk': ^1.29.0
|
||||
zod: ^4.0.0
|
||||
|
||||
'@anthropic-ai/claude-agent-sdk@0.3.257':
|
||||
resolution: {integrity: sha512-Se55zXv48IYLg/WzoXzpbPLcq86suwDSbRUoNb69l4dkovorqS/47Xuy7MUo/gPNwwcPB4a+aqbXbshU33dcdQ==}
|
||||
engines: {node: '>=18.0.0'}
|
||||
peerDependencies:
|
||||
'@anthropic-ai/sdk': '>=0.93.0'
|
||||
'@modelcontextprotocol/sdk': ^1.29.0
|
||||
zod: ^4.0.0
|
||||
|
||||
'@anthropic-ai/sdk@0.121.0':
|
||||
resolution: {integrity: sha512-WFzwcH8l49CZHv0vQ9QQT51VJ1/DLDQfNSs9awpGlnKBdaSnqtdZa+tw/3cxxosTPIgK8uw1GqsJ2dSbCBD1Lg==}
|
||||
hasBin: true
|
||||
@@ -7157,9 +7088,6 @@ packages:
|
||||
resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==}
|
||||
engines: {node: '>= 0.6'}
|
||||
|
||||
node-bin-setup@1.1.4:
|
||||
resolution: {integrity: sha512-vWNHOne0ZUavArqPP5LJta50+S8R261Fr5SvGul37HbEDcowvLjwdvd0ZeSr0r2lTSrPxl6okq9QUw8BFGiAxA==}
|
||||
|
||||
node-domexception@1.0.0:
|
||||
resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==}
|
||||
engines: {node: '>=10.5.0'}
|
||||
@@ -7173,11 +7101,6 @@ packages:
|
||||
resolution: {integrity: sha512-D9UOmYG3UH1V+ENW56t5QXBwJw1YEY18ruVeus89Rw+SyIgjPkCO84bRzO3uNIYosJbNwiabWVn48o3uJLjxFQ==}
|
||||
engines: {node: '>=18'}
|
||||
|
||||
node@24.11.0:
|
||||
resolution: {integrity: sha512-pGLc7hd4xh0doDpnHC5+PL09WLUDKFoBFsC28341AYhHjzTDbNSwY+2615tYY6YFO2WQUKit4yqTwzIHaaityg==}
|
||||
engines: {npm: '>=5.0.0'}
|
||||
hasBin: true
|
||||
|
||||
npm-run-path@4.0.1:
|
||||
resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==}
|
||||
engines: {node: '>=8'}
|
||||
@@ -8550,16 +8473,7 @@ snapshots:
|
||||
- '@anthropic-ai/sdk'
|
||||
- '@modelcontextprotocol/sdk'
|
||||
|
||||
'@agentclientprotocol/claude-agent-acp@0.73.0(patch_hash=axsvv3fhdlmmbmnhpi2cywic6q)(@anthropic-ai/sdk@0.121.0(zod@4.4.3))(@modelcontextprotocol/sdk@1.30.0(zod@4.4.3))':
|
||||
dependencies:
|
||||
'@agentclientprotocol/sdk': 1.4.0(zod@4.4.3)
|
||||
'@anthropic-ai/claude-agent-sdk': 0.3.257(@anthropic-ai/sdk@0.121.0(zod@4.4.3))(@modelcontextprotocol/sdk@1.30.0(zod@4.4.3))(zod@4.4.3)
|
||||
zod: 4.4.3
|
||||
transitivePeerDependencies:
|
||||
- '@anthropic-ai/sdk'
|
||||
- '@modelcontextprotocol/sdk'
|
||||
|
||||
'@agentclientprotocol/codex-acp@1.6.2(patch_hash=elxjibratyxkrkkxxyoqtz36pe)':
|
||||
'@agentclientprotocol/codex-acp@1.6.2(patch_hash=grbydorkxatbzksnwwfuawwtim)':
|
||||
dependencies:
|
||||
'@agentclientprotocol/sdk': 1.4.0(zod@4.4.3)
|
||||
'@openai/codex': 0.148.0
|
||||
@@ -8588,51 +8502,27 @@ snapshots:
|
||||
'@anthropic-ai/claude-agent-sdk-darwin-arm64@0.3.232':
|
||||
optional: true
|
||||
|
||||
'@anthropic-ai/claude-agent-sdk-darwin-arm64@0.3.257':
|
||||
optional: true
|
||||
|
||||
'@anthropic-ai/claude-agent-sdk-darwin-x64@0.3.232':
|
||||
optional: true
|
||||
|
||||
'@anthropic-ai/claude-agent-sdk-darwin-x64@0.3.257':
|
||||
optional: true
|
||||
|
||||
'@anthropic-ai/claude-agent-sdk-linux-arm64-musl@0.3.232':
|
||||
optional: true
|
||||
|
||||
'@anthropic-ai/claude-agent-sdk-linux-arm64-musl@0.3.257':
|
||||
optional: true
|
||||
|
||||
'@anthropic-ai/claude-agent-sdk-linux-arm64@0.3.232':
|
||||
optional: true
|
||||
|
||||
'@anthropic-ai/claude-agent-sdk-linux-arm64@0.3.257':
|
||||
optional: true
|
||||
|
||||
'@anthropic-ai/claude-agent-sdk-linux-x64-musl@0.3.232':
|
||||
optional: true
|
||||
|
||||
'@anthropic-ai/claude-agent-sdk-linux-x64-musl@0.3.257':
|
||||
optional: true
|
||||
|
||||
'@anthropic-ai/claude-agent-sdk-linux-x64@0.3.232':
|
||||
optional: true
|
||||
|
||||
'@anthropic-ai/claude-agent-sdk-linux-x64@0.3.257':
|
||||
optional: true
|
||||
|
||||
'@anthropic-ai/claude-agent-sdk-win32-arm64@0.3.232':
|
||||
optional: true
|
||||
|
||||
'@anthropic-ai/claude-agent-sdk-win32-arm64@0.3.257':
|
||||
optional: true
|
||||
|
||||
'@anthropic-ai/claude-agent-sdk-win32-x64@0.3.232':
|
||||
optional: true
|
||||
|
||||
'@anthropic-ai/claude-agent-sdk-win32-x64@0.3.257':
|
||||
optional: true
|
||||
|
||||
'@anthropic-ai/claude-agent-sdk@0.3.232(@anthropic-ai/sdk@0.121.0(zod@4.4.3))(@modelcontextprotocol/sdk@1.30.0(zod@4.4.3))(zod@4.4.3)':
|
||||
dependencies:
|
||||
'@anthropic-ai/sdk': 0.121.0(zod@4.4.3)
|
||||
@@ -8648,21 +8538,6 @@ snapshots:
|
||||
'@anthropic-ai/claude-agent-sdk-win32-arm64': 0.3.232
|
||||
'@anthropic-ai/claude-agent-sdk-win32-x64': 0.3.232
|
||||
|
||||
'@anthropic-ai/claude-agent-sdk@0.3.257(@anthropic-ai/sdk@0.121.0(zod@4.4.3))(@modelcontextprotocol/sdk@1.30.0(zod@4.4.3))(zod@4.4.3)':
|
||||
dependencies:
|
||||
'@anthropic-ai/sdk': 0.121.0(zod@4.4.3)
|
||||
'@modelcontextprotocol/sdk': 1.30.0(zod@4.4.3)
|
||||
zod: 4.4.3
|
||||
optionalDependencies:
|
||||
'@anthropic-ai/claude-agent-sdk-darwin-arm64': 0.3.257
|
||||
'@anthropic-ai/claude-agent-sdk-darwin-x64': 0.3.257
|
||||
'@anthropic-ai/claude-agent-sdk-linux-arm64': 0.3.257
|
||||
'@anthropic-ai/claude-agent-sdk-linux-arm64-musl': 0.3.257
|
||||
'@anthropic-ai/claude-agent-sdk-linux-x64': 0.3.257
|
||||
'@anthropic-ai/claude-agent-sdk-linux-x64-musl': 0.3.257
|
||||
'@anthropic-ai/claude-agent-sdk-win32-arm64': 0.3.257
|
||||
'@anthropic-ai/claude-agent-sdk-win32-x64': 0.3.257
|
||||
|
||||
'@anthropic-ai/sdk@0.121.0(zod@4.4.3)':
|
||||
dependencies:
|
||||
json-schema-to-ts: 3.1.1
|
||||
@@ -14702,8 +14577,6 @@ snapshots:
|
||||
|
||||
negotiator@1.0.0: {}
|
||||
|
||||
node-bin-setup@1.1.4: {}
|
||||
|
||||
node-domexception@1.0.0: {}
|
||||
|
||||
node-fetch@3.3.2:
|
||||
@@ -14714,10 +14587,6 @@ snapshots:
|
||||
|
||||
node-releases@2.0.53: {}
|
||||
|
||||
node@24.11.0(patch_hash=v5qkq5xhqy2tsyfb3ac3vqpw7e):
|
||||
dependencies:
|
||||
node-bin-setup: 1.1.4
|
||||
|
||||
npm-run-path@4.0.1:
|
||||
dependencies:
|
||||
path-key: 3.1.1
|
||||
|
||||
Reference in new issue
Block a user