@agentic-patterns/runtime 0.1.4 → 0.1.6
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/index.cjs +69 -29
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +62 -14
- package/dist/index.d.ts +62 -14
- package/dist/index.js +67 -27
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/dist/index.cjs
CHANGED
|
@@ -1152,7 +1152,7 @@ var AgentRunner = class {
|
|
|
1152
1152
|
const effectiveTraceId = options?.traceId ?? runId;
|
|
1153
1153
|
const maxIterations = options?.maxIterations ?? 10;
|
|
1154
1154
|
const toolExecutor = options?.toolExecutor;
|
|
1155
|
-
const modelName =
|
|
1155
|
+
const modelName = this._model.modelId;
|
|
1156
1156
|
const agentTools = agent.getTools();
|
|
1157
1157
|
const tools = this.convertTools(agent, toolExecutor);
|
|
1158
1158
|
const hasTools = agentTools.length > 0;
|
|
@@ -1434,7 +1434,7 @@ var AgentRunner = class {
|
|
|
1434
1434
|
const maxIterations = options?.maxIterations ?? 10;
|
|
1435
1435
|
const toolExecutor = options?.toolExecutor;
|
|
1436
1436
|
const conversationId = (0, import_ai.generateId)();
|
|
1437
|
-
const modelName =
|
|
1437
|
+
const modelName = this._model.modelId;
|
|
1438
1438
|
const agentTools = agent.getTools();
|
|
1439
1439
|
const tools = this.convertTools(agent, toolExecutor);
|
|
1440
1440
|
const hasTools = agentTools.length > 0;
|
|
@@ -2280,24 +2280,60 @@ var ClaudeCodeRunner = class {
|
|
|
2280
2280
|
};
|
|
2281
2281
|
|
|
2282
2282
|
// src/runner/claude-code-api-runner.ts
|
|
2283
|
-
var
|
|
2284
|
-
|
|
2285
|
-
|
|
2286
|
-
|
|
2287
|
-
|
|
2288
|
-
"
|
|
2289
|
-
|
|
2290
|
-
|
|
2291
|
-
|
|
2292
|
-
|
|
2293
|
-
|
|
2294
|
-
|
|
2295
|
-
|
|
2296
|
-
|
|
2283
|
+
var import_node_child_process = require("child_process");
|
|
2284
|
+
var import_node_fs = require("fs");
|
|
2285
|
+
var import_node_os = require("os");
|
|
2286
|
+
var import_node_path = require("path");
|
|
2287
|
+
function loadMaxSubOAuth() {
|
|
2288
|
+
if (process.platform !== "darwin") return null;
|
|
2289
|
+
const user = process.env.USER;
|
|
2290
|
+
if (!user) return null;
|
|
2291
|
+
try {
|
|
2292
|
+
const raw = (0, import_node_child_process.execSync)(
|
|
2293
|
+
`security find-generic-password -a "${user}" -s "Claude Code-credentials" -w`,
|
|
2294
|
+
{ encoding: "utf8", stdio: ["ignore", "pipe", "ignore"] }
|
|
2295
|
+
).trim();
|
|
2296
|
+
const parsed = JSON.parse(raw);
|
|
2297
|
+
const oauth = parsed.claudeAiOauth;
|
|
2298
|
+
if (!oauth?.accessToken) return null;
|
|
2299
|
+
return oauth;
|
|
2300
|
+
} catch {
|
|
2301
|
+
return null;
|
|
2302
|
+
}
|
|
2303
|
+
}
|
|
2297
2304
|
var ClaudeCodeAPIRunner = class extends ClaudeCodeRunner {
|
|
2305
|
+
_disableSandbox;
|
|
2306
|
+
_extraDisallowed;
|
|
2307
|
+
_isolatedConfigDir;
|
|
2308
|
+
constructor(opts) {
|
|
2309
|
+
super(opts);
|
|
2310
|
+
this._disableSandbox = opts?.disableSandbox ?? false;
|
|
2311
|
+
this._extraDisallowed = opts?.extraDisallowedTools ?? [];
|
|
2312
|
+
this._isolatedConfigDir = this._disableSandbox ? null : (0, import_node_fs.mkdtempSync)((0, import_node_path.join)((0, import_node_os.tmpdir)(), "ap-cc-api-"));
|
|
2313
|
+
}
|
|
2298
2314
|
_buildOptions(agent, options, context) {
|
|
2299
2315
|
const sdkOpts = super._buildOptions(agent, options, context);
|
|
2300
|
-
sdkOpts.
|
|
2316
|
+
sdkOpts.tools = [];
|
|
2317
|
+
if (this._extraDisallowed.length > 0) {
|
|
2318
|
+
sdkOpts.disallowedTools = [
|
|
2319
|
+
...sdkOpts.disallowedTools ?? [],
|
|
2320
|
+
...this._extraDisallowed
|
|
2321
|
+
];
|
|
2322
|
+
}
|
|
2323
|
+
if (!this._disableSandbox && this._isolatedConfigDir) {
|
|
2324
|
+
const oauth = loadMaxSubOAuth();
|
|
2325
|
+
if (oauth) {
|
|
2326
|
+
const baseEnv = Object.fromEntries(
|
|
2327
|
+
Object.entries(process.env).filter(([, v]) => typeof v === "string")
|
|
2328
|
+
);
|
|
2329
|
+
sdkOpts.env = {
|
|
2330
|
+
...baseEnv,
|
|
2331
|
+
...sdkOpts.env ?? {},
|
|
2332
|
+
CLAUDE_CONFIG_DIR: this._isolatedConfigDir,
|
|
2333
|
+
CLAUDE_CODE_OAUTH_TOKEN: oauth.accessToken
|
|
2334
|
+
};
|
|
2335
|
+
}
|
|
2336
|
+
}
|
|
2301
2337
|
return sdkOpts;
|
|
2302
2338
|
}
|
|
2303
2339
|
};
|
|
@@ -2488,15 +2524,13 @@ function createToolboxExecutor(agent) {
|
|
|
2488
2524
|
const actualName = name.includes("__") ? name.split("__").pop() : name;
|
|
2489
2525
|
return tb.execute(actualName, args);
|
|
2490
2526
|
}
|
|
2491
|
-
throw new Error(
|
|
2492
|
-
`Tool "${name}" not found. Available: ${[...lookup.keys()].join(", ")}`
|
|
2493
|
-
);
|
|
2527
|
+
throw new Error(`Tool "${name}" not found. Available: ${[...lookup.keys()].join(", ")}`);
|
|
2494
2528
|
}
|
|
2495
2529
|
};
|
|
2496
2530
|
}
|
|
2497
2531
|
|
|
2498
2532
|
// src/runner/create-runner.ts
|
|
2499
|
-
var
|
|
2533
|
+
var import_node_child_process2 = require("child_process");
|
|
2500
2534
|
|
|
2501
2535
|
// src/providers/types.ts
|
|
2502
2536
|
async function importProvider(pkg, provider) {
|
|
@@ -2962,7 +2996,7 @@ var ClaudeCodeLanguageModel = class {
|
|
|
2962
2996
|
const sdkOptions = {
|
|
2963
2997
|
...this._opts.defaults ?? {},
|
|
2964
2998
|
model: mapModel2(this.modelId) ?? this._opts.defaults?.model ?? this.modelId,
|
|
2965
|
-
maxTurns: this._opts.maxTurns ??
|
|
2999
|
+
maxTurns: this._opts.maxTurns ?? 10,
|
|
2966
3000
|
permissionMode: "default",
|
|
2967
3001
|
canUseTool
|
|
2968
3002
|
};
|
|
@@ -3031,6 +3065,8 @@ function resolveModelId(provider, explicitModelId, tier = "sonnet") {
|
|
|
3031
3065
|
// src/runner/create-runner.ts
|
|
3032
3066
|
async function createRunner(opts = {}) {
|
|
3033
3067
|
const verbose = opts.verbose ?? true;
|
|
3068
|
+
const tier = opts.tier ?? envTier();
|
|
3069
|
+
const modelId = opts.modelId ?? process.env.AGENT_MODEL;
|
|
3034
3070
|
if (opts.runner) {
|
|
3035
3071
|
return log(verbose, {
|
|
3036
3072
|
runner: opts.runner,
|
|
@@ -3047,11 +3083,11 @@ async function createRunner(opts = {}) {
|
|
|
3047
3083
|
}
|
|
3048
3084
|
if (opts.provider) {
|
|
3049
3085
|
const provider = PROVIDERS[opts.provider];
|
|
3050
|
-
const
|
|
3051
|
-
const model = await provider.load(
|
|
3086
|
+
const resolved = resolveModelId(provider, modelId, tier);
|
|
3087
|
+
const model = await provider.load(resolved);
|
|
3052
3088
|
return log(verbose, {
|
|
3053
3089
|
runner: new AgentRunner(model, opts.eventBus),
|
|
3054
|
-
reason: `using ${opts.provider} (explicit, model=${
|
|
3090
|
+
reason: `using ${opts.provider} (explicit, model=${resolved})`,
|
|
3055
3091
|
source: "explicit-provider"
|
|
3056
3092
|
});
|
|
3057
3093
|
}
|
|
@@ -3059,11 +3095,11 @@ async function createRunner(opts = {}) {
|
|
|
3059
3095
|
const provider = PROVIDERS[name];
|
|
3060
3096
|
const matchedEnv = provider.envVars.find((v) => process.env[v]);
|
|
3061
3097
|
if (matchedEnv) {
|
|
3062
|
-
const
|
|
3063
|
-
const model = await provider.load(
|
|
3098
|
+
const resolved = resolveModelId(provider, modelId, tier);
|
|
3099
|
+
const model = await provider.load(resolved);
|
|
3064
3100
|
return log(verbose, {
|
|
3065
3101
|
runner: new AgentRunner(model, opts.eventBus),
|
|
3066
|
-
reason: `using ${name} (env ${matchedEnv}, model=${
|
|
3102
|
+
reason: `using ${name} (env ${matchedEnv}, model=${resolved})`,
|
|
3067
3103
|
source: `env-${name}`
|
|
3068
3104
|
});
|
|
3069
3105
|
}
|
|
@@ -3101,6 +3137,10 @@ async function createRunner(opts = {}) {
|
|
|
3101
3137
|
].join("\n")
|
|
3102
3138
|
);
|
|
3103
3139
|
}
|
|
3140
|
+
function envTier() {
|
|
3141
|
+
const v = process.env.AGENT_TIER;
|
|
3142
|
+
return v === "opus" || v === "sonnet" || v === "haiku" ? v : void 0;
|
|
3143
|
+
}
|
|
3104
3144
|
function log(verbose, selection) {
|
|
3105
3145
|
if (verbose) {
|
|
3106
3146
|
process.stdout.write(`[runner] ${selection.reason}
|
|
@@ -3112,7 +3152,7 @@ var _claudeCliCache;
|
|
|
3112
3152
|
async function hasClaudeCli() {
|
|
3113
3153
|
if (_claudeCliCache !== void 0) return _claudeCliCache;
|
|
3114
3154
|
_claudeCliCache = await new Promise((resolve) => {
|
|
3115
|
-
const child = (0,
|
|
3155
|
+
const child = (0, import_node_child_process2.spawn)("claude", ["--version"], {
|
|
3116
3156
|
stdio: "ignore",
|
|
3117
3157
|
// shell: true handles Windows `.cmd` extension and generally behaves
|
|
3118
3158
|
// for "is this command on PATH" probes.
|