Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
*
* Usage:
* SENPI_LIVE_CLAUDE_SDK_OAUTH=1 SENPI_CODING_AGENT_DIR=<sandbox> \
* node .agents/skills/senpi-qa/scripts/claude-sdk-oauth-auth-spike.mjs
* node .agents/skills/senpi-qa/scripts/anthropic-subscription-auth-spike.mjs
*
* Outcomes (final line):
* exit 0 "ACCEPTED lane=oauth-slots" | exit 0 "ACCEPTED lane=config-dir" | exit 2 "REJECTED"
Expand Down Expand Up @@ -45,7 +45,7 @@ if (!credential || credential.type !== "oauth" || typeof credential.access !== "

const { query } = await import("@anthropic-ai/claude-agent-sdk");
const { resolveClaudeCodeExecutable, defaultExecutableDeps } = await import(
"../../../packages/coding-agent/src/core/extensions/builtin/claude-sdk-oauth/executable.ts"
"../../../packages/coding-agent/src/core/extensions/builtin/anthropic-subscription/executable.ts"
);

const executable = resolveClaudeCodeExecutable(defaultExecutableDeps());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
*
* Usage:
* SENPI_LIVE_CLAUDE_SDK_OAUTH=1 SENPI_CODING_AGENT_DIR=<sandbox> \
* node .agents/skills/senpi-qa/scripts/claude-sdk-oauth-autocompact-settings-probe.mjs
* node .agents/skills/senpi-qa/scripts/anthropic-subscription-autocompact-settings-probe.mjs
*
* The sandbox must contain an OAuth credential in auth.json using the same slots
* as the other claude-sdk-oauth spikes. Never prints token material.
Expand All @@ -18,7 +18,7 @@ import {
requireSandbox,
startGuardedQuery,
withTimeout,
} from "./lib/claude-sdk-oauth-spike-support.mjs";
} from "./lib/anthropic-subscription-spike-support.mjs";

requireLiveGate();
const sandbox = requireSandbox();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@
*
* Usage:
* SENPI_LIVE_CLAUDE_SDK_OAUTH=1 SENPI_CODING_AGENT_DIR=<sandbox> \
* node .agents/skills/senpi-qa/scripts/claude-sdk-oauth-autocompact-spike.mjs
* node .agents/skills/senpi-qa/scripts/anthropic-subscription-autocompact-spike.mjs
*
* Outcomes (final line):
* exit 0 "ACCEPTED autocompact=<default-on|settings:autoCompactEnabled|absent> boundary=<received|absent> manual_compact=<slash-ok|absent>"
Expand All @@ -47,7 +47,7 @@ import {
startGuardedQuery,
userMessage,
withTimeout,
} from "./lib/claude-sdk-oauth-spike-support.mjs";
} from "./lib/anthropic-subscription-spike-support.mjs";

requireLiveGate();
const sandbox = requireSandbox();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
/**
* Full-stack continuity probe for the claude-sdk-oauth lane.
*
* Unlike claude-sdk-oauth-registry-probe.mjs (which drives the registry APIs
* Unlike anthropic-subscription-registry-probe.mjs (which drives the registry APIs
* directly), this probe drives the REAL stack: createAgentSession() ->
* AgentSession.prompt() -> provider streamSimple -> resident session registry
* or the flattened <conversation_history> path. SDK query creation is
Expand All @@ -16,7 +16,7 @@
* network egress are involved.
*
* Run with:
* node .agents/skills/senpi-qa/scripts/claude-sdk-oauth-fullstack-probe.mjs --baseline
* node .agents/skills/senpi-qa/scripts/anthropic-subscription-fullstack-probe.mjs --baseline
*
* Modes:
* --baseline always exits 0 — the per-turn table IS the deliverable
Expand All @@ -37,9 +37,9 @@ import {
formatTurnTable,
seedProbeAgentDir,
withTimeout,
} from "./lib/claude-sdk-oauth-fullstack-support.mjs";
} from "./lib/anthropic-subscription-fullstack-support.mjs";
import { safeDetail } from "./lib/output-safety.mjs";
import { applyHermeticEnvironment, assertHermeticEnvironment } from "./lib/claude-sdk-oauth-hermetic-env.mjs";
import { applyHermeticEnvironment, assertHermeticEnvironment } from "./lib/anthropic-subscription-hermetic-env.mjs";

const ROOT = repoRoot();
const INNER_FLAG = "SENPI_CLAUDE_SDK_FULLSTACK_PROBE_INNER";
Expand Down Expand Up @@ -69,7 +69,7 @@ installCleanupHooks();
// --matrix runs the todo-16 scenario matrix and exits: the loopback server,
// the captured queries, and the per-turn payloads are the matrix's evidence.
if (MATRIX) {
const { runContinuityMatrix } = await import("./lib/claude-sdk-oauth-matrix.mjs");
const { runContinuityMatrix } = await import("./lib/anthropic-subscription-matrix.mjs");
process.exit(await runContinuityMatrix({ gate: !BASELINE }));
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import { fileURLToPath } from "node:url";
import {
bootHermeticStack,
SOURCE_ROOT,
} from "./lib/claude-sdk-oauth-fullstack-harness.mjs";
} from "./lib/anthropic-subscription-fullstack-harness.mjs";
import { safeDetail } from "./lib/output-safety.mjs";

const TURN_TIMEOUT_MS = 180_000;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
*
* Usage:
* SENPI_LIVE_CLAUDE_SDK_OAUTH=1 SENPI_CODING_AGENT_DIR=<sandbox> \
* node .agents/skills/senpi-qa/scripts/claude-sdk-oauth-native-inline-spike.mjs
* node .agents/skills/senpi-qa/scripts/anthropic-subscription-native-inline-spike.mjs
*
* Outcomes (final line):
* exit 0 "ACCEPTED setmodel=<ok|absent> interrupt_receipt=<v1|legacy> continue=coherent"
Expand All @@ -38,7 +38,7 @@ import {
startGuardedQuery,
userMessage,
withTimeout,
} from "./lib/claude-sdk-oauth-spike-support.mjs";
} from "./lib/anthropic-subscription-spike-support.mjs";

requireLiveGate();
const sandbox = requireSandbox();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
*
* Usage:
* SENPI_LIVE_CLAUDE_SDK_OAUTH=1 SENPI_CODING_AGENT_DIR=<sandbox> \
* node .agents/skills/senpi-qa/scripts/claude-sdk-oauth-persistent-query-spike.mjs
* node .agents/skills/senpi-qa/scripts/anthropic-subscription-persistent-query-spike.mjs
*
* Outcomes (final line):
* exit 0 "ACCEPTED denial=<ok|degraded> orphan=none replay=<uuid-match|absent>"
Expand Down Expand Up @@ -136,14 +136,14 @@ async function runWorker() {

const { query } = await import("@anthropic-ai/claude-agent-sdk");
const { resolveClaudeCodeExecutable, defaultExecutableDeps } = await import(
"../../../packages/coding-agent/src/core/extensions/builtin/claude-sdk-oauth/executable.ts"
"../../../packages/coding-agent/src/core/extensions/builtin/anthropic-subscription/executable.ts"
);
const {
BUILTIN_SDK_TOOLS,
HOST_CAPTURED_SDK_TOOL_MATCHER,
HOST_TOOL_DENIAL_HOOKS,
HOST_TOOL_EXECUTION_DENIED_MESSAGE,
} = await import("../../../packages/coding-agent/src/core/extensions/builtin/claude-sdk-oauth/tools.ts");
} = await import("../../../packages/coding-agent/src/core/extensions/builtin/anthropic-subscription/tools.ts");

if (!new RegExp(`^(?:${HOST_CAPTURED_SDK_TOOL_MATCHER})$`).test("Bash")) {
sendWorkerResult({ kind: "rejected", signal: "host_matcher_mismatch" });
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
*
* Usage:
* SENPI_LIVE_CLAUDE_SDK_OAUTH=1 SENPI_CODING_AGENT_DIR=<sandbox> \
* node .agents/skills/senpi-qa/scripts/claude-sdk-oauth-reattach-spike.mjs
* node .agents/skills/senpi-qa/scripts/anthropic-subscription-reattach-spike.mjs
*
* Outcomes (final line):
* exit 0 "ACCEPTED resume=<ok> cache_read_ratio=<r> cross_account=<ok|denied|incoherent|lineage_mismatch|unseeded> config_root=<env-honored|default-only>"
Expand All @@ -46,8 +46,8 @@ import {
requireSandbox,
safeSignal,
withTimeout,
} from "./lib/claude-sdk-oauth-spike-support.mjs";
import { runTurns, TOKEN_PROMPT } from "./lib/claude-sdk-oauth-reattach-worker.mjs";
} from "./lib/anthropic-subscription-spike-support.mjs";
import { runTurns, TOKEN_PROMPT } from "./lib/anthropic-subscription-reattach-worker.mjs";

const WORKER_FLAG = "--reattach-worker";
const SELF = fileURLToPath(import.meta.url);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
* Hermetic real-surface QA for the claude-sdk-oauth resident session registry.
*
* Run with:
* node .agents/skills/senpi-qa/scripts/claude-sdk-oauth-registry-probe.mjs
* node .agents/skills/senpi-qa/scripts/anthropic-subscription-registry-probe.mjs
*
* The outer process re-execs under tsx so this JavaScript probe can import the
* live TypeScript implementation. The inner process drives the registry APIs
Expand Down Expand Up @@ -56,7 +56,7 @@ const IMPLEMENTATION_DIR = join(
);
const importImplementation = (file) => import(pathToFileURL(join(IMPLEMENTATION_DIR, file)).href);

const [{ ClaudeSdkOauthSessionRegistry }, { submitSessionTurn }, sync] = await Promise.all([
const [{ AnthropicSubscriptionSessionRegistry }, { submitSessionTurn }, sync] = await Promise.all([
importImplementation("session-registry.ts"),
importImplementation("session-registry-pump.ts"),
importImplementation("session-sync.ts"),
Expand Down Expand Up @@ -165,7 +165,7 @@ function fact(label, pass, detail) {

const authGuard = guardRealAuth();
const box = makeSandbox("claude-sdk-registry-probe");
const registry = new ClaudeSdkOauthSessionRegistry();
const registry = new AnthropicSubscriptionSessionRegistry();
const providerRequests = [];
const localControlRequests = [];
const unexpectedRequests = [];
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@ import { spawn } from "node:child_process";
import { mkdirSync, writeFileSync } from "node:fs";
import { join } from "node:path";
import { fileURLToPath } from "node:url";
import { bootHermeticStack, SOURCE_ROOT } from "./lib/claude-sdk-oauth-fullstack-harness.mjs";
import { classifyPayload } from "./lib/claude-sdk-oauth-fullstack-support.mjs";
import { bootHermeticStack, SOURCE_ROOT } from "./lib/anthropic-subscription-fullstack-harness.mjs";
import { classifyPayload } from "./lib/anthropic-subscription-fullstack-support.mjs";
import { safeDetail } from "./lib/output-safety.mjs";

const TURN_TIMEOUT_MS = 120_000;
Expand Down Expand Up @@ -190,7 +190,7 @@ if (evidenceSlug) {
writeFileSync(join(directory, "probe-resume.json"), `${JSON.stringify(summary, null, 2)}\n`);
writeFileSync(
join(directory, "probe-resume.log"),
`command: node .agents/skills/senpi-qa/scripts/claude-sdk-oauth-stream-stall-retry-probe.mjs --evidence ${evidenceSlug}\n` +
`command: node .agents/skills/senpi-qa/scripts/anthropic-subscription-stream-stall-retry-probe.mjs --evidence ${evidenceSlug}\n` +
`cleanup: ${cleanup.join("; ")}\n\n${JSON.stringify(summary, null, 2)}\n`,
);
process.stdout.write(`EVIDENCE ${join(directory, "probe-resume.log")}\n`);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,16 +9,16 @@
* Anthropic server that HOLDS its response past the configured 2s guard. No
* credentials, no network egress.
*
* Usage: bun .agents/skills/senpi-qa/scripts/claude-sdk-oauth-stream-start-knob-probe.mjs [--evidence <dir>]
* Usage: bun .agents/skills/senpi-qa/scripts/anthropic-subscription-stream-start-knob-probe.mjs [--evidence <dir>]
*/

import { createServer } from "node:http";
import { mkdirSync, writeFileSync } from "node:fs";
import { join } from "node:path";
import { pathToFileURL } from "node:url";
import { guardRealAuth, installCleanupHooks, makeSandbox, repoRoot, track } from "./lib/common.mjs";
import { loopbackSseBody, seedProbeAgentDir } from "./lib/claude-sdk-oauth-fullstack-support.mjs";
import { applyHermeticEnvironment, assertHermeticEnvironment } from "./lib/claude-sdk-oauth-hermetic-env.mjs";
import { loopbackSseBody, seedProbeAgentDir } from "./lib/anthropic-subscription-fullstack-support.mjs";
import { applyHermeticEnvironment, assertHermeticEnvironment } from "./lib/anthropic-subscription-hermetic-env.mjs";
import { withTimeout } from "./lib/with-timeout.mjs";

const ROOT = repoRoot();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
*
* Usage:
* SENPI_LIVE_CLAUDE_SDK_OAUTH=1 SENPI_CODING_AGENT_DIR=<sandbox> \
* node .agents/skills/senpi-qa/scripts/claude-sdk-oauth-sysprompt-spike.mjs
* node .agents/skills/senpi-qa/scripts/anthropic-subscription-sysprompt-spike.mjs
*
* Outcomes (final line):
* exit 0 "ACCEPTED sysprompt=plain-string"
Expand Down Expand Up @@ -44,7 +44,7 @@ if (!credential || credential.type !== "oauth" || typeof credential.access !== "

const { query } = await import("@anthropic-ai/claude-agent-sdk");
const { resolveClaudeCodeExecutable, defaultExecutableDeps } = await import(
"../../../packages/coding-agent/src/core/extensions/builtin/claude-sdk-oauth/executable.ts"
"../../../packages/coding-agent/src/core/extensions/builtin/anthropic-subscription/executable.ts"
);

function managedEnvironment(access) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,16 +18,16 @@
* compaction still applied through the deterministic
* fallback (details.origin === "required-compaction-recovery").
*
* Usage: bun .agents/skills/senpi-qa/scripts/claude-sdk-oauth-toolless-compact-probe.mjs [--mode toolless|always-tool] [--evidence <dir>]
* Usage: bun .agents/skills/senpi-qa/scripts/anthropic-subscription-toolless-compact-probe.mjs [--mode toolless|always-tool] [--evidence <dir>]
*/

import { mkdirSync, writeFileSync } from "node:fs";
import { join } from "node:path";
import { pathToFileURL } from "node:url";
import { guardRealAuth, installCleanupHooks, makeSandbox, repoRoot, track } from "./lib/common.mjs";
import { seedProbeAgentDir } from "./lib/claude-sdk-oauth-fullstack-support.mjs";
import { startToollessCompactServer } from "./lib/claude-sdk-oauth-toolless-compact-server.mjs";
import { applyHermeticEnvironment, assertHermeticEnvironment } from "./lib/claude-sdk-oauth-hermetic-env.mjs";
import { seedProbeAgentDir } from "./lib/anthropic-subscription-fullstack-support.mjs";
import { startToollessCompactServer } from "./lib/anthropic-subscription-toolless-compact-server.mjs";
import { applyHermeticEnvironment, assertHermeticEnvironment } from "./lib/anthropic-subscription-hermetic-env.mjs";
import { withTimeout } from "./lib/with-timeout.mjs";

const ROOT = repoRoot();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,8 @@ import { mkdirSync, writeFileSync } from "node:fs";
import { join } from "node:path";
import { pathToFileURL } from "node:url";
import { guardRealAuth, makeSandbox, repoRoot, track } from "./common.mjs";
import { loopbackSseBody, seedProbeAgentDir } from "./claude-sdk-oauth-fullstack-support.mjs";
import { applyHermeticEnvironment, assertHermeticEnvironment } from "./claude-sdk-oauth-hermetic-env.mjs";
import { loopbackSseBody, seedProbeAgentDir } from "./anthropic-subscription-fullstack-support.mjs";
import { applyHermeticEnvironment, assertHermeticEnvironment } from "./anthropic-subscription-hermetic-env.mjs";

const ROOT = repoRoot();
export const SOURCE_ROOT = join(ROOT, "packages", "coding-agent", "src");
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/**
* Shared helpers for claude-sdk-oauth-fullstack-probe.mjs.
* Shared helpers for anthropic-subscription-fullstack-probe.mjs.
*
* Kept out of the probe so each script stays under the 250 pure-LOC ceiling.
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
* SDK boundary.
*/

import { SESSION_REGISTRY_IDLE_TTL_MS } from "./claude-sdk-oauth-matrix-constants.mjs";
import { SESSION_REGISTRY_IDLE_TTL_MS } from "./anthropic-subscription-matrix-constants.mjs";

/**
* Phase (a): a plain 6-turn conversation must cost EXACTLY ONE SDK query in
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@
* (injected clock, registry wipe, branch navigation, mid-turn abort).
*/

import { classifyPayload, withTimeout } from "./claude-sdk-oauth-fullstack-support.mjs";
import { MATRIX_TURN_TIMEOUT_MS } from "./claude-sdk-oauth-matrix-constants.mjs";
import { classifyPayload, withTimeout } from "./anthropic-subscription-fullstack-support.mjs";
import { MATRIX_TURN_TIMEOUT_MS } from "./anthropic-subscription-matrix-constants.mjs";

/** Yields until the macrotask queue is empty — a drain, never a timed wait. */
function drainMacrotasks(rounds = 3) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,11 @@
import { pathToFileURL } from "node:url";
import { join } from "node:path";
import { safeDetail } from "./output-safety.mjs";
import { bootHermeticStack, resolveMatrixModels, SOURCE_ROOT } from "./claude-sdk-oauth-fullstack-harness.mjs";
import { assertMatrix } from "./claude-sdk-oauth-matrix-assert.mjs";
import { VERDICT_LABEL } from "./claude-sdk-oauth-matrix-constants.mjs";
import { MATRIX_PHASES } from "./claude-sdk-oauth-matrix-phases.mjs";
import { MatrixRun } from "./claude-sdk-oauth-matrix-run.mjs";
import { bootHermeticStack, resolveMatrixModels, SOURCE_ROOT } from "./anthropic-subscription-fullstack-harness.mjs";
import { assertMatrix } from "./anthropic-subscription-matrix-assert.mjs";
import { VERDICT_LABEL } from "./anthropic-subscription-matrix-constants.mjs";
import { MATRIX_PHASES } from "./anthropic-subscription-matrix-phases.mjs";
import { MatrixRun } from "./anthropic-subscription-matrix-run.mjs";

const MODEL_ID = "claude-haiku-4-5";
/** Phase (g) is the only fork boundary that runs; (f)/(i) are skipped, so add none. */
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/**
* Worker half of claude-sdk-oauth-reattach-spike.mjs.
* Worker half of anthropic-subscription-reattach-spike.mjs.
*
* Runs one streaming-input query (optionally with `resume: <sessionId>` and/or
* an env-scoped CLAUDE_CONFIG_DIR), plays the requested prompts, and reports
Expand All @@ -18,7 +18,7 @@ import {
managedEnvironment,
userMessage,
withTimeout,
} from "./claude-sdk-oauth-spike-support.mjs";
} from "./anthropic-subscription-spike-support.mjs";

export const TOKEN_PROMPT = (token) => `Remember this token for later: ${token}. Reply with exactly: ACK`;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,10 +34,10 @@ export function requireSandbox() {
process.exit(2);
}

// Credential loading lives in claude-sdk-oauth-spike-credentials.mjs (split
// Credential loading lives in anthropic-subscription-spike-credentials.mjs (split
// out so this module stays under the 250 pure-LOC ceiling); re-exported so
// existing spike imports keep working.
export { loadCredential, loadCredentialStrict } from "./claude-sdk-oauth-spike-credentials.mjs";
export { loadCredential, loadCredentialStrict } from "./anthropic-subscription-spike-credentials.mjs";

/** Sanitize any signal/reason into the fixed terminal-line vocabulary shape. */
export function safeSignal(value) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
*/

import { createServer } from "node:http";
import { loopbackSseBody } from "./claude-sdk-oauth-fullstack-support.mjs";
import { loopbackSseBody } from "./anthropic-subscription-fullstack-support.mjs";
import { track } from "./common.mjs";

export function toolUseSseBody(toolName, sequence, modelId) {
Expand Down
4 changes: 2 additions & 2 deletions .agents/skills/senpi-qa/scripts/rpc-drive.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ async function selfTest() {
process.exit(passed ? 0 : 1);
}

async function driveScenarioClaudeSdkOauthAccounts() {
async function driveScenarioAnthropicSubscriptionAccounts() {
installCleanupHooks();
const guard = guardRealAuth();
const checks = createChecks("rpc-drive.mjs --scenario claude-sdk-oauth-accounts");
Expand Down Expand Up @@ -256,7 +256,7 @@ if (argv[0] === "--self-test") {
} else if (argv[0] === "--state") {
driveState();
} else if (argv[0] === "--scenario" && argv[1] === "claude-sdk-oauth-accounts") {
driveScenarioClaudeSdkOauthAccounts().catch((e) => {
driveScenarioAnthropicSubscriptionAccounts().catch((e) => {
process.stderr.write(`${e instanceof Error ? e.stack : String(e)}\n`);
process.exit(1);
});
Expand Down
Loading
Loading