@agntk/agent-harness 0.1.6 → 0.1.7
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/{chunk-UMXPOYZR.js → chunk-7MSZVP7A.js} +2 -2
- package/dist/{chunk-SEHAQTBO.js → chunk-IFVCU33I.js} +2 -2
- package/dist/{chunk-KLYMGWQJ.js → chunk-LACZLSC4.js} +2 -2
- package/dist/{chunk-M6PDMK2O.js → chunk-LBT43BZA.js} +2 -2
- package/dist/{chunk-M62KLIEK.js → chunk-QU566LZE.js} +2 -2
- package/dist/{chunk-IZ6UZ3ZL.js → chunk-WCYBFALM.js} +10 -3
- package/dist/chunk-WCYBFALM.js.map +1 -0
- package/dist/{chunk-4P6TRFPZ.js → chunk-Z4HEHWFM.js} +2 -2
- package/dist/cli/index.js +35 -35
- package/dist/{conversation-TBTFIJVU.js → conversation-OKBO4L66.js} +3 -3
- package/dist/{delegate-3KJAL4NZ.js → delegate-YOGVA3HB.js} +3 -3
- package/dist/{harness-R5FKRICG.js → harness-NU2UU6J4.js} +3 -3
- package/dist/{instinct-learner-QGAMIS3X.js → instinct-learner-EECG4L24.js} +3 -3
- package/dist/{intelligence-XPV3MC5U.js → intelligence-BANUEAI4.js} +3 -3
- package/dist/{journal-ITUMKT6U.js → journal-O4SEANIC.js} +3 -3
- package/dist/{provider-HQY6SPZI.js → provider-75AKTYGB.js} +2 -2
- package/dist/{scaffold-2F36YVW6.js → scaffold-LA54KYKJ.js} +2 -2
- package/dist/{scheduler-Q7GB2KCW.js → scheduler-MFBVGFZQ.js} +6 -6
- package/dist/{serve-MXRTP2HE.js → serve-TQLN4OTP.js} +5 -5
- package/dist/{web-server-2Y4CHD2W.js → web-server-SJ6NS5IX.js} +4 -4
- package/package.json +1 -1
- package/dist/chunk-IZ6UZ3ZL.js.map +0 -1
- /package/dist/{chunk-UMXPOYZR.js.map → chunk-7MSZVP7A.js.map} +0 -0
- /package/dist/{chunk-SEHAQTBO.js.map → chunk-IFVCU33I.js.map} +0 -0
- /package/dist/{chunk-KLYMGWQJ.js.map → chunk-LACZLSC4.js.map} +0 -0
- /package/dist/{chunk-M6PDMK2O.js.map → chunk-LBT43BZA.js.map} +0 -0
- /package/dist/{chunk-M62KLIEK.js.map → chunk-QU566LZE.js.map} +0 -0
- /package/dist/{chunk-4P6TRFPZ.js.map → chunk-Z4HEHWFM.js.map} +0 -0
- /package/dist/{conversation-TBTFIJVU.js.map → conversation-OKBO4L66.js.map} +0 -0
- /package/dist/{delegate-3KJAL4NZ.js.map → delegate-YOGVA3HB.js.map} +0 -0
- /package/dist/{harness-R5FKRICG.js.map → harness-NU2UU6J4.js.map} +0 -0
- /package/dist/{instinct-learner-QGAMIS3X.js.map → instinct-learner-EECG4L24.js.map} +0 -0
- /package/dist/{intelligence-XPV3MC5U.js.map → intelligence-BANUEAI4.js.map} +0 -0
- /package/dist/{journal-ITUMKT6U.js.map → journal-O4SEANIC.js.map} +0 -0
- /package/dist/{provider-HQY6SPZI.js.map → provider-75AKTYGB.js.map} +0 -0
- /package/dist/{scaffold-2F36YVW6.js.map → scaffold-LA54KYKJ.js.map} +0 -0
- /package/dist/{scheduler-Q7GB2KCW.js.map → scheduler-MFBVGFZQ.js.map} +0 -0
- /package/dist/{serve-MXRTP2HE.js.map → serve-TQLN4OTP.js.map} +0 -0
- /package/dist/{web-server-2Y4CHD2W.js.map → web-server-SJ6NS5IX.js.map} +0 -0
|
@@ -20,7 +20,7 @@ import {
|
|
|
20
20
|
generateWithMessages,
|
|
21
21
|
getModel,
|
|
22
22
|
streamWithMessages
|
|
23
|
-
} from "./chunk-
|
|
23
|
+
} from "./chunk-WCYBFALM.js";
|
|
24
24
|
import {
|
|
25
25
|
loadConfig
|
|
26
26
|
} from "./chunk-EC42HQQH.js";
|
|
@@ -371,4 +371,4 @@ export {
|
|
|
371
371
|
parseJsonlContext,
|
|
372
372
|
parseLegacyContext
|
|
373
373
|
};
|
|
374
|
-
//# sourceMappingURL=chunk-
|
|
374
|
+
//# sourceMappingURL=chunk-7MSZVP7A.js.map
|
|
@@ -8,7 +8,7 @@ import {
|
|
|
8
8
|
} from "./chunk-5H34JPMB.js";
|
|
9
9
|
import {
|
|
10
10
|
Conversation
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-7MSZVP7A.js";
|
|
12
12
|
import {
|
|
13
13
|
loadState,
|
|
14
14
|
saveState
|
|
@@ -3437,4 +3437,4 @@ export {
|
|
|
3437
3437
|
createWebApp,
|
|
3438
3438
|
startWebServer
|
|
3439
3439
|
};
|
|
3440
|
-
//# sourceMappingURL=chunk-
|
|
3440
|
+
//# sourceMappingURL=chunk-IFVCU33I.js.map
|
|
@@ -35,7 +35,7 @@ import {
|
|
|
35
35
|
generate,
|
|
36
36
|
getModel,
|
|
37
37
|
streamGenerateWithDetails
|
|
38
|
-
} from "./chunk-
|
|
38
|
+
} from "./chunk-WCYBFALM.js";
|
|
39
39
|
import {
|
|
40
40
|
loadConfig
|
|
41
41
|
} from "./chunk-EC42HQQH.js";
|
|
@@ -396,4 +396,4 @@ function createHarness(options) {
|
|
|
396
396
|
export {
|
|
397
397
|
createHarness
|
|
398
398
|
};
|
|
399
|
-
//# sourceMappingURL=chunk-
|
|
399
|
+
//# sourceMappingURL=chunk-LACZLSC4.js.map
|
|
@@ -6,7 +6,7 @@ import {
|
|
|
6
6
|
import {
|
|
7
7
|
generate,
|
|
8
8
|
getModel
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-WCYBFALM.js";
|
|
10
10
|
import {
|
|
11
11
|
loadConfig
|
|
12
12
|
} from "./chunk-EC42HQQH.js";
|
|
@@ -197,4 +197,4 @@ export {
|
|
|
197
197
|
learnFromSessions,
|
|
198
198
|
harvestInstincts
|
|
199
199
|
};
|
|
200
|
-
//# sourceMappingURL=chunk-
|
|
200
|
+
//# sourceMappingURL=chunk-LBT43BZA.js.map
|
|
@@ -19,7 +19,7 @@ import {
|
|
|
19
19
|
generate,
|
|
20
20
|
getModel,
|
|
21
21
|
streamGenerateWithDetails
|
|
22
|
-
} from "./chunk-
|
|
22
|
+
} from "./chunk-WCYBFALM.js";
|
|
23
23
|
import {
|
|
24
24
|
loadConfig
|
|
25
25
|
} from "./chunk-EC42HQQH.js";
|
|
@@ -239,4 +239,4 @@ export {
|
|
|
239
239
|
delegateTo,
|
|
240
240
|
delegateStream
|
|
241
241
|
};
|
|
242
|
-
//# sourceMappingURL=chunk-
|
|
242
|
+
//# sourceMappingURL=chunk-QU566LZE.js.map
|
|
@@ -11,13 +11,14 @@ var ENV_KEYS = {
|
|
|
11
11
|
anthropic: "ANTHROPIC_API_KEY",
|
|
12
12
|
openai: "OPENAI_API_KEY"
|
|
13
13
|
};
|
|
14
|
+
var OLLAMA_DEFAULT_BASE_URL = "http://localhost:11434/v1";
|
|
14
15
|
var _providers = /* @__PURE__ */ new Map();
|
|
15
16
|
function getOrCreateFactory(providerName, apiKey) {
|
|
16
17
|
const cacheKey = `${providerName}:${apiKey ?? "env"}`;
|
|
17
18
|
const cached = _providers.get(cacheKey);
|
|
18
19
|
if (cached) return cached;
|
|
19
20
|
const envKey = ENV_KEYS[providerName];
|
|
20
|
-
const key = apiKey ?? process.env[envKey];
|
|
21
|
+
const key = apiKey ?? (envKey ? process.env[envKey] : void 0);
|
|
21
22
|
let factory;
|
|
22
23
|
switch (providerName) {
|
|
23
24
|
case "openrouter": {
|
|
@@ -40,9 +41,15 @@ function getOrCreateFactory(providerName, apiKey) {
|
|
|
40
41
|
factory = (modelId) => provider(modelId);
|
|
41
42
|
break;
|
|
42
43
|
}
|
|
44
|
+
case "ollama": {
|
|
45
|
+
const baseURL = process.env.OLLAMA_BASE_URL ?? OLLAMA_DEFAULT_BASE_URL;
|
|
46
|
+
const provider = createOpenAI({ baseURL, apiKey: "ollama" });
|
|
47
|
+
factory = (modelId) => provider(modelId);
|
|
48
|
+
break;
|
|
49
|
+
}
|
|
43
50
|
default:
|
|
44
51
|
throw new Error(
|
|
45
|
-
`Unknown provider "${providerName}". Supported providers:
|
|
52
|
+
`Unknown provider "${providerName}". Supported providers: openrouter, anthropic, openai, ollama`
|
|
46
53
|
);
|
|
47
54
|
}
|
|
48
55
|
_providers.set(cacheKey, factory);
|
|
@@ -204,4 +211,4 @@ export {
|
|
|
204
211
|
streamWithMessages,
|
|
205
212
|
streamGenerateWithDetails
|
|
206
213
|
};
|
|
207
|
-
//# sourceMappingURL=chunk-
|
|
214
|
+
//# sourceMappingURL=chunk-WCYBFALM.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/llm/provider.ts"],"sourcesContent":["import { createOpenRouter } from '@openrouter/ai-sdk-provider';\nimport { createAnthropic } from '@ai-sdk/anthropic';\nimport { createOpenAI } from '@ai-sdk/openai';\nimport { generateText, streamText, stepCountIs, type LanguageModel } from 'ai';\nimport type { ModelMessage } from '@ai-sdk/provider-utils';\nimport type { HarnessConfig, ToolCallInfo } from '../core/types.js';\nimport type { AIToolSet } from '../runtime/tool-executor.js';\n\n/** Supported provider names for config.model.provider */\nexport type ProviderName = 'openrouter' | 'anthropic' | 'openai' | 'ollama';\n\n/** Provider factory — maps provider names to (apiKey) => LanguageModel functions */\ntype ProviderFactory = (modelId: string, apiKey?: string) => LanguageModel;\n\n/**\n * Environment variable each provider reads its API key from.\n * Ollama runs locally and needs no auth, so it has no env key.\n */\nconst ENV_KEYS: Partial<Record<ProviderName, string>> = {\n openrouter: 'OPENROUTER_API_KEY',\n anthropic: 'ANTHROPIC_API_KEY',\n openai: 'OPENAI_API_KEY',\n};\n\n/**\n * Default base URL for the local Ollama HTTP server. Ollama exposes an\n * OpenAI-compatible chat completions endpoint at /v1 on this port.\n * Override with the OLLAMA_BASE_URL env var when running on a non-default\n * host or port (e.g. in Docker, on a remote box, behind a proxy).\n */\nconst OLLAMA_DEFAULT_BASE_URL = 'http://localhost:11434/v1';\n\n/** Cached provider instances keyed by provider name */\nconst _providers: Map<string, ProviderFactory> = new Map();\n\nfunction getOrCreateFactory(providerName: ProviderName, apiKey?: string): ProviderFactory {\n const cacheKey = `${providerName}:${apiKey ?? 'env'}`;\n const cached = _providers.get(cacheKey);\n if (cached) return cached;\n\n const envKey = ENV_KEYS[providerName];\n const key = apiKey ?? (envKey ? process.env[envKey] : undefined);\n\n let factory: ProviderFactory;\n\n switch (providerName) {\n case 'openrouter': {\n if (!key) {\n throw new Error(\n `No API key found for provider \"${providerName}\". ` +\n `Set ${envKey} environment variable or pass apiKey option.`\n );\n }\n const provider = createOpenRouter({ apiKey: key });\n factory = (modelId) => provider(modelId);\n break;\n }\n case 'anthropic': {\n // createAnthropic reads ANTHROPIC_API_KEY from env by default\n const provider = createAnthropic(key ? { apiKey: key } : undefined);\n factory = (modelId) => provider(modelId);\n break;\n }\n case 'openai': {\n // createOpenAI reads OPENAI_API_KEY from env by default\n const provider = createOpenAI(key ? { apiKey: key } : undefined);\n factory = (modelId) => provider(modelId);\n break;\n }\n case 'ollama': {\n // Ollama exposes an OpenAI-compatible chat completions endpoint at\n // http://localhost:11434/v1 by default. Reuses @ai-sdk/openai with a\n // baseURL override and a dummy apiKey (Ollama doesn't authenticate but\n // the OpenAI SDK requires the field to be set to something).\n // Override the host with OLLAMA_BASE_URL env var when needed.\n const baseURL = process.env.OLLAMA_BASE_URL ?? OLLAMA_DEFAULT_BASE_URL;\n const provider = createOpenAI({ baseURL, apiKey: 'ollama' });\n factory = (modelId) => provider(modelId);\n break;\n }\n default:\n throw new Error(\n `Unknown provider \"${providerName}\". ` +\n `Supported providers: openrouter, anthropic, openai, ollama`\n );\n }\n\n _providers.set(cacheKey, factory);\n return factory;\n}\n\n/**\n * Get the OpenRouter provider (backward-compatible).\n * @deprecated Use getModel() with config.model.provider instead.\n */\nexport function getProvider(apiKey?: string): ReturnType<typeof createOpenRouter> {\n const key = apiKey ?? process.env.OPENROUTER_API_KEY;\n if (!key) {\n throw new Error(\n 'No OpenRouter API key found. Set OPENROUTER_API_KEY environment variable or pass apiKey option.'\n );\n }\n return createOpenRouter({ apiKey: key });\n}\n\nexport function resetProvider(): void {\n _providers.clear();\n}\n\n/**\n * Get a LanguageModel from config. Supports openrouter, anthropic, and openai providers.\n *\n * Provider is selected from config.model.provider (defaults to 'openrouter').\n * Model ID format depends on provider:\n * - openrouter: \"anthropic/claude-sonnet-4\" (vendor/model)\n * - anthropic: \"claude-sonnet-4-20250514\" (native model ID)\n * - openai: \"gpt-4o\" (native model ID)\n */\nexport function getModel(config: HarnessConfig, apiKey?: string): LanguageModel {\n const providerName = (config.model.provider ?? 'openrouter') as ProviderName;\n const factory = getOrCreateFactory(providerName, apiKey);\n return factory(config.model.id);\n}\n\n/**\n * Get the summary model for cheap auto-generation tasks (L0/L1 summaries, tags, frontmatter).\n * Falls back to the primary model if summary_model is not configured.\n *\n * Usage: set `model.summary_model` in config.yaml, e.g.:\n * summary_model: \"google/gemini-flash-1.5\"\n */\nexport function getSummaryModel(config: HarnessConfig, apiKey?: string): LanguageModel {\n const modelId = config.model.summary_model ?? config.model.id;\n const providerName = (config.model.provider ?? 'openrouter') as ProviderName;\n const factory = getOrCreateFactory(providerName, apiKey);\n return factory(modelId);\n}\n\n/**\n * Get the fast model for validation, checks, and quick decisions.\n * Falls back to summary_model, then primary model.\n *\n * Usage: set `model.fast_model` in config.yaml, e.g.:\n * fast_model: \"google/gemini-flash-1.5\"\n */\nexport function getFastModel(config: HarnessConfig, apiKey?: string): LanguageModel {\n const modelId = config.model.fast_model ?? config.model.summary_model ?? config.model.id;\n const providerName = (config.model.provider ?? 'openrouter') as ProviderName;\n const factory = getOrCreateFactory(providerName, apiKey);\n return factory(modelId);\n}\n\nexport interface CallOptions {\n maxRetries?: number;\n timeoutMs?: number;\n abortSignal?: AbortSignal;\n}\n\nexport interface GenerateOptions extends CallOptions {\n model: LanguageModel;\n system: string;\n prompt: string;\n maxOutputTokens?: number;\n /** AI SDK tools to make available for the LLM */\n tools?: AIToolSet;\n /** Max tool-use roundtrips (default: 1 if tools provided, 0 otherwise) */\n maxToolSteps?: number;\n}\n\nexport interface GenerateWithMessagesOptions extends CallOptions {\n model: LanguageModel;\n system: string;\n messages: ModelMessage[];\n maxOutputTokens?: number;\n /** AI SDK tools to make available for the LLM */\n tools?: AIToolSet;\n /** Max tool-use roundtrips (default: 1 if tools provided, 0 otherwise) */\n maxToolSteps?: number;\n}\n\nexport interface GenerateResult {\n text: string;\n usage: { inputTokens: number; outputTokens: number; totalTokens: number };\n /** Tool calls made during generation (empty if no tools used) */\n toolCalls: ToolCallInfo[];\n /** Number of steps taken (1 = no tool calls, >1 = tool roundtrips) */\n steps: number;\n}\n\nfunction extractUsage(usage: { inputTokens?: number; outputTokens?: number } | undefined) {\n return {\n inputTokens: usage?.inputTokens ?? 0,\n outputTokens: usage?.outputTokens ?? 0,\n totalTokens: (usage?.inputTokens ?? 0) + (usage?.outputTokens ?? 0),\n };\n}\n\nfunction buildCallSettings(opts: CallOptions & { tools?: AIToolSet; maxToolSteps?: number }) {\n const hasTools = opts.tools && Object.keys(opts.tools).length > 0;\n return {\n ...(opts.maxRetries !== undefined ? { maxRetries: opts.maxRetries } : {}),\n ...(opts.timeoutMs !== undefined ? { timeout: opts.timeoutMs } : {}),\n ...(opts.abortSignal ? { abortSignal: opts.abortSignal } : {}),\n ...(hasTools ? { tools: opts.tools } : {}),\n ...(hasTools ? { stopWhen: stepCountIs(opts.maxToolSteps ?? 5) } : {}),\n };\n}\n\n/** Extract tool call info from AI SDK step results */\nfunction extractToolCalls(result: { steps?: Array<{ toolCalls?: Array<{ toolName: string; input: unknown }>; toolResults?: Array<{ toolName: string; output: unknown }> }> }): ToolCallInfo[] {\n const calls: ToolCallInfo[] = [];\n if (!result.steps) return calls;\n\n for (const step of result.steps) {\n if (!step.toolCalls) continue;\n for (let i = 0; i < step.toolCalls.length; i++) {\n const tc = step.toolCalls[i];\n const tr = step.toolResults?.[i];\n calls.push({\n toolName: tc.toolName,\n args: (tc.input ?? {}) as Record<string, unknown>,\n result: tr?.output ?? null,\n });\n }\n }\n return calls;\n}\n\nexport async function generate(opts: GenerateOptions): Promise<GenerateResult> {\n const result = await generateText({\n model: opts.model,\n system: opts.system,\n prompt: opts.prompt,\n maxOutputTokens: opts.maxOutputTokens,\n ...buildCallSettings(opts),\n });\n\n // Use totalUsage when available (multi-step) otherwise fall back to usage\n const usage = result.totalUsage ?? result.usage;\n\n return {\n text: result.text,\n usage: extractUsage(usage),\n toolCalls: extractToolCalls(result),\n steps: result.steps?.length ?? 1,\n };\n}\n\nexport async function generateWithMessages(opts: GenerateWithMessagesOptions): Promise<GenerateResult> {\n const result = await generateText({\n model: opts.model,\n system: opts.system,\n messages: opts.messages,\n maxOutputTokens: opts.maxOutputTokens,\n ...buildCallSettings(opts),\n });\n\n const usage = result.totalUsage ?? result.usage;\n\n return {\n text: result.text,\n usage: extractUsage(usage),\n toolCalls: extractToolCalls(result),\n steps: result.steps?.length ?? 1,\n };\n}\n\n/**\n * @deprecated Use `streamGenerateWithDetails()` instead — returns metadata (usage, toolCalls, steps).\n */\nexport async function* streamGenerate(opts: GenerateOptions): AsyncIterable<string> {\n const result = streamText({\n model: opts.model,\n system: opts.system,\n prompt: opts.prompt,\n maxOutputTokens: opts.maxOutputTokens,\n ...buildCallSettings(opts),\n });\n\n for await (const chunk of result.textStream) {\n yield chunk;\n }\n}\n\nexport interface StreamWithMessagesResult {\n textStream: AsyncIterable<string>;\n usage: Promise<GenerateResult['usage']>;\n /** Tool calls made across all steps (resolves after stream completes) */\n toolCalls: Promise<ToolCallInfo[]>;\n /** Number of steps (resolves after stream completes) */\n steps: Promise<number>;\n}\n\nexport function streamWithMessages(opts: GenerateWithMessagesOptions): StreamWithMessagesResult {\n const result = streamText({\n model: opts.model,\n system: opts.system,\n messages: opts.messages,\n maxOutputTokens: opts.maxOutputTokens,\n ...buildCallSettings(opts),\n });\n\n const totalUsage = Promise.resolve(result.totalUsage ?? result.usage).then((u) => extractUsage(u));\n const toolCalls = Promise.resolve(result.steps).then((s) => extractToolCalls({ steps: s }));\n const steps = Promise.resolve(result.steps).then((s) => s?.length ?? 1);\n\n return {\n textStream: result.textStream,\n usage: totalUsage,\n toolCalls,\n steps,\n };\n}\n\nexport interface StreamGenerateResult {\n textStream: AsyncIterable<string>;\n usage: Promise<GenerateResult['usage']>;\n toolCalls: Promise<ToolCallInfo[]>;\n steps: Promise<number>;\n}\n\nexport function streamGenerateWithDetails(opts: GenerateOptions): StreamGenerateResult {\n const result = streamText({\n model: opts.model,\n system: opts.system,\n prompt: opts.prompt,\n maxOutputTokens: opts.maxOutputTokens,\n ...buildCallSettings(opts),\n });\n\n const totalUsage = Promise.resolve(result.totalUsage ?? result.usage).then((u) => extractUsage(u));\n const toolCalls = Promise.resolve(result.steps).then((s) => extractToolCalls({ steps: s }));\n const steps = Promise.resolve(result.steps).then((s) => s?.length ?? 1);\n\n return {\n textStream: result.textStream,\n usage: totalUsage,\n toolCalls,\n steps,\n };\n}\n"],"mappings":"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","names":[]}
|
|
@@ -6,7 +6,7 @@ import {
|
|
|
6
6
|
import {
|
|
7
7
|
generate,
|
|
8
8
|
getModel
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-WCYBFALM.js";
|
|
10
10
|
import {
|
|
11
11
|
loadConfig
|
|
12
12
|
} from "./chunk-EC42HQQH.js";
|
|
@@ -304,4 +304,4 @@ export {
|
|
|
304
304
|
listJournals,
|
|
305
305
|
compressJournals
|
|
306
306
|
};
|
|
307
|
-
//# sourceMappingURL=chunk-
|
|
307
|
+
//# sourceMappingURL=chunk-Z4HEHWFM.js.map
|
package/dist/cli/index.js
CHANGED
|
@@ -100,7 +100,7 @@ function askQuestion(rl, question, defaultValue) {
|
|
|
100
100
|
});
|
|
101
101
|
}
|
|
102
102
|
program.command("init [name]").description("Scaffold a new agent harness directory (interactive if no name given)").option("-d, --dir <path>", "Parent directory", ".").option("-t, --template <name>", "Config template (base, claude-opus, gpt4, local)", "base").option("-p, --purpose <description>", "Agent purpose description").option("-i, --interactive", "Force interactive mode", false).option("--generate", "Generate CORE.md using LLM (requires API key)", false).option("--no-discover-mcp", "Skip MCP server auto-discovery").option("--no-discover-env", "Skip environment variable scanning").option("--no-discover-project", "Skip project context detection").option("-y, --yes", "Accept defaults for all prompts (skip MCP confirmation)", false).action(async (name, opts) => {
|
|
103
|
-
const { scaffoldHarness, generateCoreMd, listTemplates } = await import("../scaffold-
|
|
103
|
+
const { scaffoldHarness, generateCoreMd, listTemplates } = await import("../scaffold-LA54KYKJ.js");
|
|
104
104
|
const isInteractive = !name || opts.interactive;
|
|
105
105
|
let agentName = name ?? "";
|
|
106
106
|
let purpose = opts.purpose ?? "";
|
|
@@ -249,7 +249,7 @@ The agent gets better the more you use it. See README.md inside`);
|
|
|
249
249
|
}
|
|
250
250
|
});
|
|
251
251
|
program.command("run <prompt>").description("Run a prompt through the agent").option("-d, --dir <path>", "Harness directory", ".").option("-s, --stream", "Stream output", false).option("-m, --model <model>", "Model override (or alias: gemma, qwen, glm, claude)").option("-p, --provider <provider>", "Provider override (openrouter, anthropic, openai)").option("-k, --api-key <key>", "API key override (default: from environment)").action(async (prompt, opts) => {
|
|
252
|
-
const { createHarness } = await import("../harness-
|
|
252
|
+
const { createHarness } = await import("../harness-NU2UU6J4.js");
|
|
253
253
|
const dir = resolve(opts.dir);
|
|
254
254
|
loadEnvFromDir(dir);
|
|
255
255
|
requireHarness(dir);
|
|
@@ -290,7 +290,7 @@ program.command("run <prompt>").description("Run a prompt through the agent").op
|
|
|
290
290
|
}
|
|
291
291
|
});
|
|
292
292
|
program.command("chat").description("Start an interactive chat session with conversation memory").option("-d, --dir <path>", "Harness directory", ".").option("-m, --model <model>", "Model override").option("-p, --provider <provider>", "Provider override (openrouter, anthropic, openai)").option("-k, --api-key <key>", "API key override (default: from environment)").option("--fresh", "Start fresh (clear conversation history)", false).action(async (opts) => {
|
|
293
|
-
const { Conversation } = await import("../conversation-
|
|
293
|
+
const { Conversation } = await import("../conversation-OKBO4L66.js");
|
|
294
294
|
const { loadConfig } = await import("../config-PYSS3QY6.js");
|
|
295
295
|
const { buildToolSet } = await import("../tool-executor-6I5PHQDY.js");
|
|
296
296
|
const { createMcpManager } = await import("../mcp-JSIUJJZV.js");
|
|
@@ -477,9 +477,9 @@ program.command("dev").description("Start dev mode \u2014 watches for file chang
|
|
|
477
477
|
const { loadConfig } = await import("../config-PYSS3QY6.js");
|
|
478
478
|
const { rebuildAllIndexes } = await import("../indexer-L5UC6J2V.js");
|
|
479
479
|
const { createWatcher } = await import("../watcher-GZWQSWZ6.js");
|
|
480
|
-
const { Scheduler } = await import("../scheduler-
|
|
480
|
+
const { Scheduler } = await import("../scheduler-MFBVGFZQ.js");
|
|
481
481
|
const { autoProcessAll } = await import("../auto-processor-QIRUOGEI.js");
|
|
482
|
-
const { generateSystemMd } = await import("../scaffold-
|
|
482
|
+
const { generateSystemMd } = await import("../scaffold-LA54KYKJ.js");
|
|
483
483
|
const { writeFileSync } = await import("fs");
|
|
484
484
|
const dir = resolve(opts.dir);
|
|
485
485
|
loadEnvFromDir(dir);
|
|
@@ -547,7 +547,7 @@ program.command("dev").description("Start dev mode \u2014 watches for file chang
|
|
|
547
547
|
}
|
|
548
548
|
let webServer = null;
|
|
549
549
|
if (opts.web) {
|
|
550
|
-
const { startWebServer } = await import("../web-server-
|
|
550
|
+
const { startWebServer } = await import("../web-server-SJ6NS5IX.js");
|
|
551
551
|
const port = parseInt(opts.port, 10) || 3e3;
|
|
552
552
|
webServer = await startWebServer({
|
|
553
553
|
harnessDir: dir,
|
|
@@ -649,7 +649,7 @@ Processed ${modified} file(s)${errors > 0 ? `, ${errors} error(s)` : ""}`);
|
|
|
649
649
|
});
|
|
650
650
|
program.command("system").description("Regenerate SYSTEM.md from current directory structure").option("-d, --dir <path>", "Harness directory", ".").action(async (opts) => {
|
|
651
651
|
const { loadConfig } = await import("../config-PYSS3QY6.js");
|
|
652
|
-
const { generateSystemMd } = await import("../scaffold-
|
|
652
|
+
const { generateSystemMd } = await import("../scaffold-LA54KYKJ.js");
|
|
653
653
|
const { writeFileSync } = await import("fs");
|
|
654
654
|
const dir = resolve(opts.dir);
|
|
655
655
|
requireHarness(dir);
|
|
@@ -664,7 +664,7 @@ program.command("journal").description("Synthesize sessions into journal entries
|
|
|
664
664
|
loadEnvFromDir(dir);
|
|
665
665
|
requireHarness(dir);
|
|
666
666
|
if (opts.pending) {
|
|
667
|
-
const { listUnjournaled } = await import("../journal-
|
|
667
|
+
const { listUnjournaled } = await import("../journal-O4SEANIC.js");
|
|
668
668
|
const dates = listUnjournaled(dir);
|
|
669
669
|
if (dates.length === 0) {
|
|
670
670
|
console.log("All sessions have been journaled.");
|
|
@@ -680,7 +680,7 @@ Run "harness journal --all" to synthesize them.
|
|
|
680
680
|
return;
|
|
681
681
|
}
|
|
682
682
|
if (opts.from || opts.all) {
|
|
683
|
-
const { synthesizeJournalRange } = await import("../journal-
|
|
683
|
+
const { synthesizeJournalRange } = await import("../journal-O4SEANIC.js");
|
|
684
684
|
try {
|
|
685
685
|
const label = opts.all ? "all dates" : `${opts.from}${opts.to ? ` to ${opts.to}` : " to today"}`;
|
|
686
686
|
console.log(`Synthesizing journals for ${label}${opts.force ? " (force)" : ""}...`);
|
|
@@ -704,7 +704,7 @@ Run "harness journal --all" to synthesize them.
|
|
|
704
704
|
}
|
|
705
705
|
console.log();
|
|
706
706
|
if (opts.autoHarvest) {
|
|
707
|
-
const { harvestInstincts } = await import("../instinct-learner-
|
|
707
|
+
const { harvestInstincts } = await import("../instinct-learner-EECG4L24.js");
|
|
708
708
|
const dates = entries.map((e) => e.date).sort();
|
|
709
709
|
const harvest = harvestInstincts(dir, {
|
|
710
710
|
from: dates[0],
|
|
@@ -723,7 +723,7 @@ Run "harness journal --all" to synthesize them.
|
|
|
723
723
|
}
|
|
724
724
|
return;
|
|
725
725
|
}
|
|
726
|
-
const { synthesizeJournal } = await import("../journal-
|
|
726
|
+
const { synthesizeJournal } = await import("../journal-O4SEANIC.js");
|
|
727
727
|
try {
|
|
728
728
|
console.log(`Synthesizing journal...`);
|
|
729
729
|
const entry = await synthesizeJournal(dir, opts.date);
|
|
@@ -735,7 +735,7 @@ Run "harness journal --all" to synthesize them.
|
|
|
735
735
|
console.log(` Instinct candidates:`);
|
|
736
736
|
entry.instinct_candidates.forEach((c) => console.log(` - ${c}`));
|
|
737
737
|
if (opts.autoHarvest) {
|
|
738
|
-
const { harvestInstincts } = await import("../instinct-learner-
|
|
738
|
+
const { harvestInstincts } = await import("../instinct-learner-EECG4L24.js");
|
|
739
739
|
const harvest = harvestInstincts(dir, {
|
|
740
740
|
from: entry.date,
|
|
741
741
|
to: entry.date,
|
|
@@ -755,7 +755,7 @@ ${entry.synthesis}`);
|
|
|
755
755
|
}
|
|
756
756
|
});
|
|
757
757
|
program.command("compress").description("Compress daily journals into weekly roll-up summaries").option("-d, --dir <path>", "Harness directory", ".").option("--force", "Overwrite existing weekly summaries", false).action(async (opts) => {
|
|
758
|
-
const { compressJournals } = await import("../journal-
|
|
758
|
+
const { compressJournals } = await import("../journal-O4SEANIC.js");
|
|
759
759
|
const dir = resolve(opts.dir);
|
|
760
760
|
requireHarness(dir);
|
|
761
761
|
const results = compressJournals(dir, { force: opts.force });
|
|
@@ -775,7 +775,7 @@ program.command("compress").description("Compress daily journals into weekly rol
|
|
|
775
775
|
console.log();
|
|
776
776
|
});
|
|
777
777
|
program.command("learn").description("Analyze sessions and propose new instincts").option("-d, --dir <path>", "Harness directory", ".").option("--install", "Auto-install proposed instincts", false).action(async (opts) => {
|
|
778
|
-
const { learnFromSessions } = await import("../instinct-learner-
|
|
778
|
+
const { learnFromSessions } = await import("../instinct-learner-EECG4L24.js");
|
|
779
779
|
const dir = resolve(opts.dir);
|
|
780
780
|
requireHarness(dir);
|
|
781
781
|
try {
|
|
@@ -801,7 +801,7 @@ ${result.candidates.length} instinct candidate(s):
|
|
|
801
801
|
}
|
|
802
802
|
});
|
|
803
803
|
program.command("harvest").description("Extract instinct candidates from journal entries and optionally install them").option("-d, --dir <path>", "Harness directory", ".").option("--from <date>", "Start date (YYYY-MM-DD)").option("--to <date>", "End date (YYYY-MM-DD)").option("--install", "Auto-install candidates as draft instincts", false).action(async (opts) => {
|
|
804
|
-
const { harvestInstincts } = await import("../instinct-learner-
|
|
804
|
+
const { harvestInstincts } = await import("../instinct-learner-EECG4L24.js");
|
|
805
805
|
const dir = resolve(opts.dir);
|
|
806
806
|
requireHarness(dir);
|
|
807
807
|
const result = harvestInstincts(dir, {
|
|
@@ -1144,7 +1144,7 @@ ${docs.length} workflow(s):
|
|
|
1144
1144
|
console.log();
|
|
1145
1145
|
});
|
|
1146
1146
|
workflowCmd.command("run <id>").description("Execute a workflow by ID (bypasses quiet hours)").option("-d, --dir <path>", "Harness directory", ".").action(async (workflowId, opts) => {
|
|
1147
|
-
const { Scheduler } = await import("../scheduler-
|
|
1147
|
+
const { Scheduler } = await import("../scheduler-MFBVGFZQ.js");
|
|
1148
1148
|
const dir = resolve(opts.dir);
|
|
1149
1149
|
loadEnvFromDir(dir);
|
|
1150
1150
|
requireHarness(dir);
|
|
@@ -1969,7 +1969,7 @@ Session Analytics
|
|
|
1969
1969
|
console.log();
|
|
1970
1970
|
});
|
|
1971
1971
|
program.command("auto-promote").description("Find instinct patterns appearing 3+ times across journals and optionally install them").option("-d, --dir <path>", "Harness directory", ".").option("--threshold <n>", "Minimum occurrences across different dates", "3").option("--install", "Auto-install promoted instincts", false).option("--json", "Output as JSON", false).action(async (opts) => {
|
|
1972
|
-
const { autoPromoteInstincts } = await import("../intelligence-
|
|
1972
|
+
const { autoPromoteInstincts } = await import("../intelligence-BANUEAI4.js");
|
|
1973
1973
|
const dir = resolve(opts.dir);
|
|
1974
1974
|
requireHarness(dir);
|
|
1975
1975
|
const result = autoPromoteInstincts(dir, {
|
|
@@ -2003,7 +2003,7 @@ function behaviorToCliId(behavior) {
|
|
|
2003
2003
|
return behavior.toLowerCase().replace(/[^a-z0-9\s-]/g, "").replace(/\s+/g, "-").slice(0, 50).replace(/-+$/, "");
|
|
2004
2004
|
}
|
|
2005
2005
|
program.command("dead-primitives").description("Detect orphaned primitives not modified in 30+ days").option("-d, --dir <path>", "Harness directory", ".").option("--days <n>", "Threshold days since last modification", "30").option("--json", "Output as JSON", false).action(async (opts) => {
|
|
2006
|
-
const { detectDeadPrimitives } = await import("../intelligence-
|
|
2006
|
+
const { detectDeadPrimitives } = await import("../intelligence-BANUEAI4.js");
|
|
2007
2007
|
const { loadConfig } = await import("../config-PYSS3QY6.js");
|
|
2008
2008
|
const dir = resolve(opts.dir);
|
|
2009
2009
|
requireHarness(dir);
|
|
@@ -2036,7 +2036,7 @@ Scanned ${result.totalScanned} primitive(s) (threshold: ${result.thresholdDays}
|
|
|
2036
2036
|
}
|
|
2037
2037
|
});
|
|
2038
2038
|
program.command("contradictions").description("Detect contradictions between rules and instincts").option("-d, --dir <path>", "Harness directory", ".").option("--json", "Output as JSON", false).action(async (opts) => {
|
|
2039
|
-
const { detectContradictions } = await import("../intelligence-
|
|
2039
|
+
const { detectContradictions } = await import("../intelligence-BANUEAI4.js");
|
|
2040
2040
|
const dir = resolve(opts.dir);
|
|
2041
2041
|
requireHarness(dir);
|
|
2042
2042
|
const result = detectContradictions(dir);
|
|
@@ -2061,7 +2061,7 @@ Checked ${result.rulesChecked} rule(s) and ${result.instinctsChecked} instinct(s
|
|
|
2061
2061
|
}
|
|
2062
2062
|
});
|
|
2063
2063
|
program.command("enrich").description("Enrich sessions with extracted topics, tools, and primitive references").option("-d, --dir <path>", "Harness directory", ".").option("--from <date>", "Start date (YYYY-MM-DD)").option("--to <date>", "End date (YYYY-MM-DD)").option("--json", "Output as JSON", false).action(async (opts) => {
|
|
2064
|
-
const { enrichSessions } = await import("../intelligence-
|
|
2064
|
+
const { enrichSessions } = await import("../intelligence-BANUEAI4.js");
|
|
2065
2065
|
const { loadConfig } = await import("../config-PYSS3QY6.js");
|
|
2066
2066
|
const dir = resolve(opts.dir);
|
|
2067
2067
|
requireHarness(dir);
|
|
@@ -2093,7 +2093,7 @@ Enriched ${result.sessionsScanned} session(s)
|
|
|
2093
2093
|
}
|
|
2094
2094
|
});
|
|
2095
2095
|
program.command("suggest").description("Suggest capabilities (skills/playbooks) for frequent uncovered session topics").option("-d, --dir <path>", "Harness directory", ".").option("--min-frequency <n>", "Minimum topic frequency", "3").option("--json", "Output as JSON", false).action(async (opts) => {
|
|
2096
|
-
const { suggestCapabilities } = await import("../intelligence-
|
|
2096
|
+
const { suggestCapabilities } = await import("../intelligence-BANUEAI4.js");
|
|
2097
2097
|
const { loadConfig } = await import("../config-PYSS3QY6.js");
|
|
2098
2098
|
const dir = resolve(opts.dir);
|
|
2099
2099
|
requireHarness(dir);
|
|
@@ -2126,7 +2126,7 @@ Analyzed ${result.topicsAnalyzed} topic(s) from ${result.sessionsScanned} sessio
|
|
|
2126
2126
|
}
|
|
2127
2127
|
});
|
|
2128
2128
|
program.command("agents").description("List available sub-agents").option("-d, --dir <path>", "Harness directory", ".").action(async (opts) => {
|
|
2129
|
-
const { listAgents } = await import("../delegate-
|
|
2129
|
+
const { listAgents } = await import("../delegate-YOGVA3HB.js");
|
|
2130
2130
|
const dir = resolve(opts.dir);
|
|
2131
2131
|
const agents = listAgents(dir);
|
|
2132
2132
|
if (agents.length === 0) {
|
|
@@ -2159,7 +2159,7 @@ program.command("delegate <agent-id> <prompt>").description("Delegate a prompt t
|
|
|
2159
2159
|
try {
|
|
2160
2160
|
console.error(`[delegate] Invoking agent "${agentId}"${opts.stream ? " (streaming)" : ""}...`);
|
|
2161
2161
|
if (opts.stream) {
|
|
2162
|
-
const { delegateStream } = await import("../delegate-
|
|
2162
|
+
const { delegateStream } = await import("../delegate-YOGVA3HB.js");
|
|
2163
2163
|
const result = delegateStream(delegateOpts);
|
|
2164
2164
|
process.stdout.write("\n");
|
|
2165
2165
|
for await (const chunk of result.textStream) {
|
|
@@ -2170,7 +2170,7 @@ program.command("delegate <agent-id> <prompt>").description("Delegate a prompt t
|
|
|
2170
2170
|
`[delegate] Agent: ${result.agentId} | session: ${result.sessionId}`
|
|
2171
2171
|
);
|
|
2172
2172
|
} else {
|
|
2173
|
-
const { delegateTo } = await import("../delegate-
|
|
2173
|
+
const { delegateTo } = await import("../delegate-YOGVA3HB.js");
|
|
2174
2174
|
const result = await delegateTo(delegateOpts);
|
|
2175
2175
|
console.log("\n" + result.text + "\n");
|
|
2176
2176
|
console.error(
|
|
@@ -2664,7 +2664,7 @@ Suggestions:
|
|
|
2664
2664
|
});
|
|
2665
2665
|
var generateCmd = program.command("generate").description("Auto-generate harness files");
|
|
2666
2666
|
generateCmd.command("system").description("Regenerate SYSTEM.md from actual directory structure").option("-d, --dir <path>", "Harness directory", ".").action(async (opts) => {
|
|
2667
|
-
const { generateSystemMd } = await import("../scaffold-
|
|
2667
|
+
const { generateSystemMd } = await import("../scaffold-LA54KYKJ.js");
|
|
2668
2668
|
const dir = resolve(opts.dir);
|
|
2669
2669
|
requireHarness(dir);
|
|
2670
2670
|
const { loadConfig } = await import("../config-PYSS3QY6.js");
|
|
@@ -2718,7 +2718,7 @@ var intelligenceCmd = program.command("intelligence").description("Intelligence
|
|
|
2718
2718
|
intelligenceCmd.command("promote").description("Auto-promote instinct candidates that appear 3+ times across journals").option("-d, --dir <dir>", "Harness directory", ".").option("--threshold <n>", "Minimum occurrences to promote", "3").option("--install", "Install promoted instincts as .md files").option("--json", "Output as JSON").action(async (opts) => {
|
|
2719
2719
|
const dir = resolve(opts.dir);
|
|
2720
2720
|
loadEnvFromDir(dir);
|
|
2721
|
-
const { autoPromoteInstincts } = await import("../intelligence-
|
|
2721
|
+
const { autoPromoteInstincts } = await import("../intelligence-BANUEAI4.js");
|
|
2722
2722
|
const result = autoPromoteInstincts(dir, {
|
|
2723
2723
|
threshold: parseInt(opts.threshold, 10),
|
|
2724
2724
|
install: opts.install ?? false
|
|
@@ -2749,7 +2749,7 @@ Promoted: ${result.promoted.join(", ")}`);
|
|
|
2749
2749
|
intelligenceCmd.command("dead").description("Detect dead primitives (unreferenced and old)").option("-d, --dir <dir>", "Harness directory", ".").option("--threshold <days>", "Days since modification to consider dead", "30").option("--json", "Output as JSON").action(async (opts) => {
|
|
2750
2750
|
const dir = resolve(opts.dir);
|
|
2751
2751
|
loadEnvFromDir(dir);
|
|
2752
|
-
const { detectDeadPrimitives } = await import("../intelligence-
|
|
2752
|
+
const { detectDeadPrimitives } = await import("../intelligence-BANUEAI4.js");
|
|
2753
2753
|
const { loadConfig } = await import("../config-PYSS3QY6.js");
|
|
2754
2754
|
let config;
|
|
2755
2755
|
try {
|
|
@@ -2779,7 +2779,7 @@ Dead primitives (${result.dead.length}):`);
|
|
|
2779
2779
|
intelligenceCmd.command("contradictions").description("Detect contradictions between rules and instincts").option("-d, --dir <dir>", "Harness directory", ".").option("--json", "Output as JSON").action(async (opts) => {
|
|
2780
2780
|
const dir = resolve(opts.dir);
|
|
2781
2781
|
loadEnvFromDir(dir);
|
|
2782
|
-
const { detectContradictions } = await import("../intelligence-
|
|
2782
|
+
const { detectContradictions } = await import("../intelligence-BANUEAI4.js");
|
|
2783
2783
|
const result = detectContradictions(dir);
|
|
2784
2784
|
if (opts.json) {
|
|
2785
2785
|
console.log(JSON.stringify(result, null, 2));
|
|
@@ -2800,7 +2800,7 @@ Contradictions (${result.contradictions.length}):`);
|
|
|
2800
2800
|
intelligenceCmd.command("enrich").description("Enrich sessions with topics, token counts, and related primitives").option("-d, --dir <dir>", "Harness directory", ".").option("--from <date>", "Start date (YYYY-MM-DD)").option("--to <date>", "End date (YYYY-MM-DD)").option("--json", "Output as JSON").action(async (opts) => {
|
|
2801
2801
|
const dir = resolve(opts.dir);
|
|
2802
2802
|
loadEnvFromDir(dir);
|
|
2803
|
-
const { enrichSessions } = await import("../intelligence-
|
|
2803
|
+
const { enrichSessions } = await import("../intelligence-BANUEAI4.js");
|
|
2804
2804
|
const { loadConfig } = await import("../config-PYSS3QY6.js");
|
|
2805
2805
|
let config;
|
|
2806
2806
|
try {
|
|
@@ -2827,7 +2827,7 @@ intelligenceCmd.command("enrich").description("Enrich sessions with topics, toke
|
|
|
2827
2827
|
intelligenceCmd.command("suggest").description("Suggest new skills/playbooks for frequent uncovered topics").option("-d, --dir <dir>", "Harness directory", ".").option("--min-frequency <n>", "Minimum topic frequency", "3").option("--json", "Output as JSON").action(async (opts) => {
|
|
2828
2828
|
const dir = resolve(opts.dir);
|
|
2829
2829
|
loadEnvFromDir(dir);
|
|
2830
|
-
const { suggestCapabilities } = await import("../intelligence-
|
|
2830
|
+
const { suggestCapabilities } = await import("../intelligence-BANUEAI4.js");
|
|
2831
2831
|
const { loadConfig } = await import("../config-PYSS3QY6.js");
|
|
2832
2832
|
let config;
|
|
2833
2833
|
try {
|
|
@@ -2857,7 +2857,7 @@ Suggestions (${result.suggestions.length}):`);
|
|
|
2857
2857
|
intelligenceCmd.command("failures").description("Analyze recent failure patterns and suggest recovery strategies").option("-d, --dir <dir>", "Harness directory", ".").option("--days <n>", "Days to look back", "7").option("--json", "Output as JSON").action(async (opts) => {
|
|
2858
2858
|
const dir = resolve(opts.dir);
|
|
2859
2859
|
loadEnvFromDir(dir);
|
|
2860
|
-
const { analyzeFailures } = await import("../intelligence-
|
|
2860
|
+
const { analyzeFailures } = await import("../intelligence-BANUEAI4.js");
|
|
2861
2861
|
const result = analyzeFailures(dir, { days: parseInt(opts.days, 10) });
|
|
2862
2862
|
if (opts.json) {
|
|
2863
2863
|
console.log(JSON.stringify(result, null, 2));
|
|
@@ -2882,7 +2882,7 @@ intelligenceCmd.command("failures").description("Analyze recent failure patterns
|
|
|
2882
2882
|
}
|
|
2883
2883
|
});
|
|
2884
2884
|
intelligenceCmd.command("classify <error>").description("Classify an error message into a failure mode").action(async (errorMsg) => {
|
|
2885
|
-
const { classifyFailure, getRecoveryStrategies, FAILURE_TAXONOMY } = await import("../intelligence-
|
|
2885
|
+
const { classifyFailure, getRecoveryStrategies, FAILURE_TAXONOMY } = await import("../intelligence-BANUEAI4.js");
|
|
2886
2886
|
const mode = classifyFailure(errorMsg);
|
|
2887
2887
|
const info = FAILURE_TAXONOMY.modes[mode];
|
|
2888
2888
|
const strategies = getRecoveryStrategies(mode);
|
|
@@ -2899,7 +2899,7 @@ var gateCmd = program.command("gate").description("Run verification gates");
|
|
|
2899
2899
|
gateCmd.command("run [name]").description("Run a verification gate (or all gates if no name)").option("-d, --dir <dir>", "Harness directory", ".").option("--json", "Output as JSON").action(async (name, opts) => {
|
|
2900
2900
|
const dir = resolve(opts.dir);
|
|
2901
2901
|
loadEnvFromDir(dir);
|
|
2902
|
-
const { runGate, runAllGates } = await import("../intelligence-
|
|
2902
|
+
const { runGate, runAllGates } = await import("../intelligence-BANUEAI4.js");
|
|
2903
2903
|
if (name) {
|
|
2904
2904
|
const result = runGate(name, dir);
|
|
2905
2905
|
if (opts.json) {
|
|
@@ -2929,7 +2929,7 @@ gateCmd.command("run [name]").description("Run a verification gate (or all gates
|
|
|
2929
2929
|
}
|
|
2930
2930
|
});
|
|
2931
2931
|
gateCmd.command("list").description("List available verification gates").action(async () => {
|
|
2932
|
-
const { listGates } = await import("../intelligence-
|
|
2932
|
+
const { listGates } = await import("../intelligence-BANUEAI4.js");
|
|
2933
2933
|
const gates = listGates();
|
|
2934
2934
|
for (const g of gates) {
|
|
2935
2935
|
console.log(` ${g.name}: ${g.description}`);
|
|
@@ -3122,7 +3122,7 @@ emoCmd.command("reset").description("Reset emotional state to defaults").option(
|
|
|
3122
3122
|
program.command("serve").description("Start the harness HTTP API server for webhooks and integrations").option("-d, --dir <dir>", "Harness directory", ".").option("-p, --port <port>", "Port to listen on", "8080").option("--api-key <key>", "API key for LLM provider").option("--webhook-secret <secret>", "Secret for authenticating webhook management API").option("--no-cors", "Disable CORS").action(async (opts) => {
|
|
3123
3123
|
const dir = resolve(opts.dir);
|
|
3124
3124
|
loadEnvFromDir(dir);
|
|
3125
|
-
const { startServe } = await import("../serve-
|
|
3125
|
+
const { startServe } = await import("../serve-TQLN4OTP.js");
|
|
3126
3126
|
const port = parseInt(opts.port, 10);
|
|
3127
3127
|
const result = startServe({
|
|
3128
3128
|
harnessDir: dir,
|
|
@@ -4,13 +4,13 @@ import {
|
|
|
4
4
|
Conversation,
|
|
5
5
|
parseJsonlContext,
|
|
6
6
|
parseLegacyContext
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-7MSZVP7A.js";
|
|
8
8
|
import "./chunk-7GZ4D6V6.js";
|
|
9
9
|
import "./chunk-DTTXPHFW.js";
|
|
10
10
|
import "./chunk-Z2PUCXTZ.js";
|
|
11
11
|
import "./chunk-2UVWCTAY.js";
|
|
12
12
|
import "./chunk-BSKDOFRT.js";
|
|
13
|
-
import "./chunk-
|
|
13
|
+
import "./chunk-WCYBFALM.js";
|
|
14
14
|
import "./chunk-EC42HQQH.js";
|
|
15
15
|
import "./chunk-4TQQZILG.js";
|
|
16
16
|
export {
|
|
@@ -18,4 +18,4 @@ export {
|
|
|
18
18
|
parseJsonlContext,
|
|
19
19
|
parseLegacyContext
|
|
20
20
|
};
|
|
21
|
-
//# sourceMappingURL=conversation-
|
|
21
|
+
//# sourceMappingURL=conversation-OKBO4L66.js.map
|
|
@@ -7,14 +7,14 @@ import {
|
|
|
7
7
|
findAgent,
|
|
8
8
|
listAgents,
|
|
9
9
|
loadAgentDocs
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-QU566LZE.js";
|
|
11
11
|
import "./chunk-5CO5JTYT.js";
|
|
12
12
|
import "./chunk-DTTXPHFW.js";
|
|
13
13
|
import "./chunk-Z2PUCXTZ.js";
|
|
14
14
|
import "./chunk-PMFAYKBD.js";
|
|
15
15
|
import "./chunk-2UVWCTAY.js";
|
|
16
16
|
import "./chunk-BSKDOFRT.js";
|
|
17
|
-
import "./chunk-
|
|
17
|
+
import "./chunk-WCYBFALM.js";
|
|
18
18
|
import "./chunk-EC42HQQH.js";
|
|
19
19
|
import "./chunk-4TQQZILG.js";
|
|
20
20
|
export {
|
|
@@ -25,4 +25,4 @@ export {
|
|
|
25
25
|
listAgents,
|
|
26
26
|
loadAgentDocs
|
|
27
27
|
};
|
|
28
|
-
//# sourceMappingURL=delegate-
|
|
28
|
+
//# sourceMappingURL=delegate-YOGVA3HB.js.map
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import {
|
|
4
4
|
createHarness
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-LACZLSC4.js";
|
|
6
6
|
import "./chunk-AGAAFJEO.js";
|
|
7
7
|
import "./chunk-5H34JPMB.js";
|
|
8
8
|
import "./chunk-5CO5JTYT.js";
|
|
@@ -16,10 +16,10 @@ import "./chunk-OC6YSTDX.js";
|
|
|
16
16
|
import "./chunk-PMFAYKBD.js";
|
|
17
17
|
import "./chunk-2UVWCTAY.js";
|
|
18
18
|
import "./chunk-BSKDOFRT.js";
|
|
19
|
-
import "./chunk-
|
|
19
|
+
import "./chunk-WCYBFALM.js";
|
|
20
20
|
import "./chunk-EC42HQQH.js";
|
|
21
21
|
import "./chunk-4TQQZILG.js";
|
|
22
22
|
export {
|
|
23
23
|
createHarness
|
|
24
24
|
};
|
|
25
|
-
//# sourceMappingURL=harness-
|
|
25
|
+
//# sourceMappingURL=harness-NU2UU6J4.js.map
|
|
@@ -5,9 +5,9 @@ import {
|
|
|
5
5
|
installInstinct,
|
|
6
6
|
learnFromSessions,
|
|
7
7
|
proposeInstincts
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-LBT43BZA.js";
|
|
9
9
|
import "./chunk-2UVWCTAY.js";
|
|
10
|
-
import "./chunk-
|
|
10
|
+
import "./chunk-WCYBFALM.js";
|
|
11
11
|
import "./chunk-EC42HQQH.js";
|
|
12
12
|
import "./chunk-4TQQZILG.js";
|
|
13
13
|
export {
|
|
@@ -16,4 +16,4 @@ export {
|
|
|
16
16
|
learnFromSessions,
|
|
17
17
|
proposeInstincts
|
|
18
18
|
};
|
|
19
|
-
//# sourceMappingURL=instinct-learner-
|
|
19
|
+
//# sourceMappingURL=instinct-learner-EECG4L24.js.map
|
|
@@ -8,7 +8,7 @@ import {
|
|
|
8
8
|
} from "./chunk-QMOIVORH.js";
|
|
9
9
|
import {
|
|
10
10
|
installInstinct
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-LBT43BZA.js";
|
|
12
12
|
import "./chunk-UXCHAS3Z.js";
|
|
13
13
|
import {
|
|
14
14
|
buildRateLimits
|
|
@@ -31,7 +31,7 @@ import {
|
|
|
31
31
|
import {
|
|
32
32
|
log
|
|
33
33
|
} from "./chunk-BSKDOFRT.js";
|
|
34
|
-
import "./chunk-
|
|
34
|
+
import "./chunk-WCYBFALM.js";
|
|
35
35
|
import {
|
|
36
36
|
loadConfig
|
|
37
37
|
} from "./chunk-EC42HQQH.js";
|
|
@@ -1075,4 +1075,4 @@ export {
|
|
|
1075
1075
|
runGate,
|
|
1076
1076
|
suggestCapabilities
|
|
1077
1077
|
};
|
|
1078
|
-
//# sourceMappingURL=intelligence-
|
|
1078
|
+
//# sourceMappingURL=intelligence-BANUEAI4.js.map
|
|
@@ -7,9 +7,9 @@ import {
|
|
|
7
7
|
parseJournalSynthesis,
|
|
8
8
|
synthesizeJournal,
|
|
9
9
|
synthesizeJournalRange
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-Z4HEHWFM.js";
|
|
11
11
|
import "./chunk-2UVWCTAY.js";
|
|
12
|
-
import "./chunk-
|
|
12
|
+
import "./chunk-WCYBFALM.js";
|
|
13
13
|
import "./chunk-EC42HQQH.js";
|
|
14
14
|
import "./chunk-4TQQZILG.js";
|
|
15
15
|
export {
|
|
@@ -20,4 +20,4 @@ export {
|
|
|
20
20
|
synthesizeJournal,
|
|
21
21
|
synthesizeJournalRange
|
|
22
22
|
};
|
|
23
|
-
//# sourceMappingURL=journal-
|
|
23
|
+
//# sourceMappingURL=journal-O4SEANIC.js.map
|
|
@@ -11,7 +11,7 @@ import {
|
|
|
11
11
|
streamGenerate,
|
|
12
12
|
streamGenerateWithDetails,
|
|
13
13
|
streamWithMessages
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-WCYBFALM.js";
|
|
15
15
|
export {
|
|
16
16
|
generate,
|
|
17
17
|
generateWithMessages,
|
|
@@ -24,4 +24,4 @@ export {
|
|
|
24
24
|
streamGenerateWithDetails,
|
|
25
25
|
streamWithMessages
|
|
26
26
|
};
|
|
27
|
-
//# sourceMappingURL=provider-
|
|
27
|
+
//# sourceMappingURL=provider-75AKTYGB.js.map
|
|
@@ -279,7 +279,7 @@ function generateSystemMd(harnessDir, agentName) {
|
|
|
279
279
|
}
|
|
280
280
|
async function generateCoreMd(agentName, purpose, options) {
|
|
281
281
|
try {
|
|
282
|
-
const { generate, getModel } = await import("./provider-
|
|
282
|
+
const { generate, getModel } = await import("./provider-75AKTYGB.js");
|
|
283
283
|
const { HarnessConfigSchema } = await import("./types-NPJZAI72.js");
|
|
284
284
|
const config = HarnessConfigSchema.parse({
|
|
285
285
|
agent: { name: agentName, version: "0.1.0" },
|
|
@@ -343,4 +343,4 @@ export {
|
|
|
343
343
|
listTemplates,
|
|
344
344
|
scaffoldHarness
|
|
345
345
|
};
|
|
346
|
-
//# sourceMappingURL=scaffold-
|
|
346
|
+
//# sourceMappingURL=scaffold-LA54KYKJ.js.map
|
|
@@ -3,21 +3,21 @@
|
|
|
3
3
|
import {
|
|
4
4
|
listUnjournaled,
|
|
5
5
|
synthesizeJournal
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-Z4HEHWFM.js";
|
|
7
7
|
import {
|
|
8
8
|
learnFromSessions
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-LBT43BZA.js";
|
|
10
10
|
import {
|
|
11
11
|
recordRun
|
|
12
12
|
} from "./chunk-6EMOEYGU.js";
|
|
13
13
|
import {
|
|
14
14
|
createHarness
|
|
15
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-LACZLSC4.js";
|
|
16
16
|
import "./chunk-AGAAFJEO.js";
|
|
17
17
|
import "./chunk-5H34JPMB.js";
|
|
18
18
|
import {
|
|
19
19
|
delegateTo
|
|
20
|
-
} from "./chunk-
|
|
20
|
+
} from "./chunk-QU566LZE.js";
|
|
21
21
|
import "./chunk-5CO5JTYT.js";
|
|
22
22
|
import "./chunk-7GZ4D6V6.js";
|
|
23
23
|
import "./chunk-UDZIS2AQ.js";
|
|
@@ -39,7 +39,7 @@ import {
|
|
|
39
39
|
import {
|
|
40
40
|
log
|
|
41
41
|
} from "./chunk-BSKDOFRT.js";
|
|
42
|
-
import "./chunk-
|
|
42
|
+
import "./chunk-WCYBFALM.js";
|
|
43
43
|
import {
|
|
44
44
|
loadConfig
|
|
45
45
|
} from "./chunk-EC42HQQH.js";
|
|
@@ -393,4 +393,4 @@ export {
|
|
|
393
393
|
Scheduler,
|
|
394
394
|
isQuietHours
|
|
395
395
|
};
|
|
396
|
-
//# sourceMappingURL=scheduler-
|
|
396
|
+
//# sourceMappingURL=scheduler-MFBVGFZQ.js.map
|
|
@@ -5,12 +5,12 @@ import {
|
|
|
5
5
|
cors,
|
|
6
6
|
createWebApp,
|
|
7
7
|
serve
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-IFVCU33I.js";
|
|
9
9
|
import "./chunk-5O5OGOOQ.js";
|
|
10
10
|
import "./chunk-6EMOEYGU.js";
|
|
11
11
|
import "./chunk-GNUSHD2Y.js";
|
|
12
12
|
import "./chunk-5H34JPMB.js";
|
|
13
|
-
import "./chunk-
|
|
13
|
+
import "./chunk-7MSZVP7A.js";
|
|
14
14
|
import "./chunk-7GZ4D6V6.js";
|
|
15
15
|
import "./chunk-UDZIS2AQ.js";
|
|
16
16
|
import "./chunk-DTTXPHFW.js";
|
|
@@ -23,7 +23,7 @@ import "./chunk-2UVWCTAY.js";
|
|
|
23
23
|
import {
|
|
24
24
|
log
|
|
25
25
|
} from "./chunk-BSKDOFRT.js";
|
|
26
|
-
import "./chunk-
|
|
26
|
+
import "./chunk-WCYBFALM.js";
|
|
27
27
|
import {
|
|
28
28
|
loadConfig
|
|
29
29
|
} from "./chunk-EC42HQQH.js";
|
|
@@ -140,7 +140,7 @@ function startServe(options) {
|
|
|
140
140
|
return c.json({ error: "prompt is required" }, 400);
|
|
141
141
|
}
|
|
142
142
|
try {
|
|
143
|
-
const { createHarness } = await import("./harness-
|
|
143
|
+
const { createHarness } = await import("./harness-NU2UU6J4.js");
|
|
144
144
|
const harness = createHarness({
|
|
145
145
|
dir: harnessDir,
|
|
146
146
|
model: body.model,
|
|
@@ -287,4 +287,4 @@ function startServe(options) {
|
|
|
287
287
|
export {
|
|
288
288
|
startServe
|
|
289
289
|
};
|
|
290
|
-
//# sourceMappingURL=serve-
|
|
290
|
+
//# sourceMappingURL=serve-TQLN4OTP.js.map
|
|
@@ -3,12 +3,12 @@
|
|
|
3
3
|
import {
|
|
4
4
|
createWebApp,
|
|
5
5
|
startWebServer
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-IFVCU33I.js";
|
|
7
7
|
import "./chunk-5O5OGOOQ.js";
|
|
8
8
|
import "./chunk-6EMOEYGU.js";
|
|
9
9
|
import "./chunk-GNUSHD2Y.js";
|
|
10
10
|
import "./chunk-5H34JPMB.js";
|
|
11
|
-
import "./chunk-
|
|
11
|
+
import "./chunk-7MSZVP7A.js";
|
|
12
12
|
import "./chunk-7GZ4D6V6.js";
|
|
13
13
|
import "./chunk-UDZIS2AQ.js";
|
|
14
14
|
import "./chunk-DTTXPHFW.js";
|
|
@@ -17,11 +17,11 @@ import "./chunk-TAT6JU3X.js";
|
|
|
17
17
|
import "./chunk-JKMGYWXB.js";
|
|
18
18
|
import "./chunk-2UVWCTAY.js";
|
|
19
19
|
import "./chunk-BSKDOFRT.js";
|
|
20
|
-
import "./chunk-
|
|
20
|
+
import "./chunk-WCYBFALM.js";
|
|
21
21
|
import "./chunk-EC42HQQH.js";
|
|
22
22
|
import "./chunk-4TQQZILG.js";
|
|
23
23
|
export {
|
|
24
24
|
createWebApp,
|
|
25
25
|
startWebServer
|
|
26
26
|
};
|
|
27
|
-
//# sourceMappingURL=web-server-
|
|
27
|
+
//# sourceMappingURL=web-server-SJ6NS5IX.js.map
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/llm/provider.ts"],"sourcesContent":["import { createOpenRouter } from '@openrouter/ai-sdk-provider';\nimport { createAnthropic } from '@ai-sdk/anthropic';\nimport { createOpenAI } from '@ai-sdk/openai';\nimport { generateText, streamText, stepCountIs, type LanguageModel } from 'ai';\nimport type { ModelMessage } from '@ai-sdk/provider-utils';\nimport type { HarnessConfig, ToolCallInfo } from '../core/types.js';\nimport type { AIToolSet } from '../runtime/tool-executor.js';\n\n/** Supported provider names for config.model.provider */\nexport type ProviderName = 'openrouter' | 'anthropic' | 'openai';\n\n/** Provider factory — maps provider names to (apiKey) => LanguageModel functions */\ntype ProviderFactory = (modelId: string, apiKey?: string) => LanguageModel;\n\nconst ENV_KEYS: Record<ProviderName, string> = {\n openrouter: 'OPENROUTER_API_KEY',\n anthropic: 'ANTHROPIC_API_KEY',\n openai: 'OPENAI_API_KEY',\n};\n\n/** Cached provider instances keyed by provider name */\nconst _providers: Map<string, ProviderFactory> = new Map();\n\nfunction getOrCreateFactory(providerName: ProviderName, apiKey?: string): ProviderFactory {\n const cacheKey = `${providerName}:${apiKey ?? 'env'}`;\n const cached = _providers.get(cacheKey);\n if (cached) return cached;\n\n const envKey = ENV_KEYS[providerName];\n const key = apiKey ?? process.env[envKey];\n\n let factory: ProviderFactory;\n\n switch (providerName) {\n case 'openrouter': {\n if (!key) {\n throw new Error(\n `No API key found for provider \"${providerName}\". ` +\n `Set ${envKey} environment variable or pass apiKey option.`\n );\n }\n const provider = createOpenRouter({ apiKey: key });\n factory = (modelId) => provider(modelId);\n break;\n }\n case 'anthropic': {\n // createAnthropic reads ANTHROPIC_API_KEY from env by default\n const provider = createAnthropic(key ? { apiKey: key } : undefined);\n factory = (modelId) => provider(modelId);\n break;\n }\n case 'openai': {\n // createOpenAI reads OPENAI_API_KEY from env by default\n const provider = createOpenAI(key ? { apiKey: key } : undefined);\n factory = (modelId) => provider(modelId);\n break;\n }\n default:\n throw new Error(\n `Unknown provider \"${providerName}\". ` +\n `Supported providers: ${Object.keys(ENV_KEYS).join(', ')}`\n );\n }\n\n _providers.set(cacheKey, factory);\n return factory;\n}\n\n/**\n * Get the OpenRouter provider (backward-compatible).\n * @deprecated Use getModel() with config.model.provider instead.\n */\nexport function getProvider(apiKey?: string): ReturnType<typeof createOpenRouter> {\n const key = apiKey ?? process.env.OPENROUTER_API_KEY;\n if (!key) {\n throw new Error(\n 'No OpenRouter API key found. Set OPENROUTER_API_KEY environment variable or pass apiKey option.'\n );\n }\n return createOpenRouter({ apiKey: key });\n}\n\nexport function resetProvider(): void {\n _providers.clear();\n}\n\n/**\n * Get a LanguageModel from config. Supports openrouter, anthropic, and openai providers.\n *\n * Provider is selected from config.model.provider (defaults to 'openrouter').\n * Model ID format depends on provider:\n * - openrouter: \"anthropic/claude-sonnet-4\" (vendor/model)\n * - anthropic: \"claude-sonnet-4-20250514\" (native model ID)\n * - openai: \"gpt-4o\" (native model ID)\n */\nexport function getModel(config: HarnessConfig, apiKey?: string): LanguageModel {\n const providerName = (config.model.provider ?? 'openrouter') as ProviderName;\n const factory = getOrCreateFactory(providerName, apiKey);\n return factory(config.model.id);\n}\n\n/**\n * Get the summary model for cheap auto-generation tasks (L0/L1 summaries, tags, frontmatter).\n * Falls back to the primary model if summary_model is not configured.\n *\n * Usage: set `model.summary_model` in config.yaml, e.g.:\n * summary_model: \"google/gemini-flash-1.5\"\n */\nexport function getSummaryModel(config: HarnessConfig, apiKey?: string): LanguageModel {\n const modelId = config.model.summary_model ?? config.model.id;\n const providerName = (config.model.provider ?? 'openrouter') as ProviderName;\n const factory = getOrCreateFactory(providerName, apiKey);\n return factory(modelId);\n}\n\n/**\n * Get the fast model for validation, checks, and quick decisions.\n * Falls back to summary_model, then primary model.\n *\n * Usage: set `model.fast_model` in config.yaml, e.g.:\n * fast_model: \"google/gemini-flash-1.5\"\n */\nexport function getFastModel(config: HarnessConfig, apiKey?: string): LanguageModel {\n const modelId = config.model.fast_model ?? config.model.summary_model ?? config.model.id;\n const providerName = (config.model.provider ?? 'openrouter') as ProviderName;\n const factory = getOrCreateFactory(providerName, apiKey);\n return factory(modelId);\n}\n\nexport interface CallOptions {\n maxRetries?: number;\n timeoutMs?: number;\n abortSignal?: AbortSignal;\n}\n\nexport interface GenerateOptions extends CallOptions {\n model: LanguageModel;\n system: string;\n prompt: string;\n maxOutputTokens?: number;\n /** AI SDK tools to make available for the LLM */\n tools?: AIToolSet;\n /** Max tool-use roundtrips (default: 1 if tools provided, 0 otherwise) */\n maxToolSteps?: number;\n}\n\nexport interface GenerateWithMessagesOptions extends CallOptions {\n model: LanguageModel;\n system: string;\n messages: ModelMessage[];\n maxOutputTokens?: number;\n /** AI SDK tools to make available for the LLM */\n tools?: AIToolSet;\n /** Max tool-use roundtrips (default: 1 if tools provided, 0 otherwise) */\n maxToolSteps?: number;\n}\n\nexport interface GenerateResult {\n text: string;\n usage: { inputTokens: number; outputTokens: number; totalTokens: number };\n /** Tool calls made during generation (empty if no tools used) */\n toolCalls: ToolCallInfo[];\n /** Number of steps taken (1 = no tool calls, >1 = tool roundtrips) */\n steps: number;\n}\n\nfunction extractUsage(usage: { inputTokens?: number; outputTokens?: number } | undefined) {\n return {\n inputTokens: usage?.inputTokens ?? 0,\n outputTokens: usage?.outputTokens ?? 0,\n totalTokens: (usage?.inputTokens ?? 0) + (usage?.outputTokens ?? 0),\n };\n}\n\nfunction buildCallSettings(opts: CallOptions & { tools?: AIToolSet; maxToolSteps?: number }) {\n const hasTools = opts.tools && Object.keys(opts.tools).length > 0;\n return {\n ...(opts.maxRetries !== undefined ? { maxRetries: opts.maxRetries } : {}),\n ...(opts.timeoutMs !== undefined ? { timeout: opts.timeoutMs } : {}),\n ...(opts.abortSignal ? { abortSignal: opts.abortSignal } : {}),\n ...(hasTools ? { tools: opts.tools } : {}),\n ...(hasTools ? { stopWhen: stepCountIs(opts.maxToolSteps ?? 5) } : {}),\n };\n}\n\n/** Extract tool call info from AI SDK step results */\nfunction extractToolCalls(result: { steps?: Array<{ toolCalls?: Array<{ toolName: string; input: unknown }>; toolResults?: Array<{ toolName: string; output: unknown }> }> }): ToolCallInfo[] {\n const calls: ToolCallInfo[] = [];\n if (!result.steps) return calls;\n\n for (const step of result.steps) {\n if (!step.toolCalls) continue;\n for (let i = 0; i < step.toolCalls.length; i++) {\n const tc = step.toolCalls[i];\n const tr = step.toolResults?.[i];\n calls.push({\n toolName: tc.toolName,\n args: (tc.input ?? {}) as Record<string, unknown>,\n result: tr?.output ?? null,\n });\n }\n }\n return calls;\n}\n\nexport async function generate(opts: GenerateOptions): Promise<GenerateResult> {\n const result = await generateText({\n model: opts.model,\n system: opts.system,\n prompt: opts.prompt,\n maxOutputTokens: opts.maxOutputTokens,\n ...buildCallSettings(opts),\n });\n\n // Use totalUsage when available (multi-step) otherwise fall back to usage\n const usage = result.totalUsage ?? result.usage;\n\n return {\n text: result.text,\n usage: extractUsage(usage),\n toolCalls: extractToolCalls(result),\n steps: result.steps?.length ?? 1,\n };\n}\n\nexport async function generateWithMessages(opts: GenerateWithMessagesOptions): Promise<GenerateResult> {\n const result = await generateText({\n model: opts.model,\n system: opts.system,\n messages: opts.messages,\n maxOutputTokens: opts.maxOutputTokens,\n ...buildCallSettings(opts),\n });\n\n const usage = result.totalUsage ?? result.usage;\n\n return {\n text: result.text,\n usage: extractUsage(usage),\n toolCalls: extractToolCalls(result),\n steps: result.steps?.length ?? 1,\n };\n}\n\n/**\n * @deprecated Use `streamGenerateWithDetails()` instead — returns metadata (usage, toolCalls, steps).\n */\nexport async function* streamGenerate(opts: GenerateOptions): AsyncIterable<string> {\n const result = streamText({\n model: opts.model,\n system: opts.system,\n prompt: opts.prompt,\n maxOutputTokens: opts.maxOutputTokens,\n ...buildCallSettings(opts),\n });\n\n for await (const chunk of result.textStream) {\n yield chunk;\n }\n}\n\nexport interface StreamWithMessagesResult {\n textStream: AsyncIterable<string>;\n usage: Promise<GenerateResult['usage']>;\n /** Tool calls made across all steps (resolves after stream completes) */\n toolCalls: Promise<ToolCallInfo[]>;\n /** Number of steps (resolves after stream completes) */\n steps: Promise<number>;\n}\n\nexport function streamWithMessages(opts: GenerateWithMessagesOptions): StreamWithMessagesResult {\n const result = streamText({\n model: opts.model,\n system: opts.system,\n messages: opts.messages,\n maxOutputTokens: opts.maxOutputTokens,\n ...buildCallSettings(opts),\n });\n\n const totalUsage = Promise.resolve(result.totalUsage ?? result.usage).then((u) => extractUsage(u));\n const toolCalls = Promise.resolve(result.steps).then((s) => extractToolCalls({ steps: s }));\n const steps = Promise.resolve(result.steps).then((s) => s?.length ?? 1);\n\n return {\n textStream: result.textStream,\n usage: totalUsage,\n toolCalls,\n steps,\n };\n}\n\nexport interface StreamGenerateResult {\n textStream: AsyncIterable<string>;\n usage: Promise<GenerateResult['usage']>;\n toolCalls: Promise<ToolCallInfo[]>;\n steps: Promise<number>;\n}\n\nexport function streamGenerateWithDetails(opts: GenerateOptions): StreamGenerateResult {\n const result = streamText({\n model: opts.model,\n system: opts.system,\n prompt: opts.prompt,\n maxOutputTokens: opts.maxOutputTokens,\n ...buildCallSettings(opts),\n });\n\n const totalUsage = Promise.resolve(result.totalUsage ?? result.usage).then((u) => extractUsage(u));\n const toolCalls = Promise.resolve(result.steps).then((s) => extractToolCalls({ steps: s }));\n const steps = Promise.resolve(result.steps).then((s) => s?.length ?? 1);\n\n return {\n textStream: result.textStream,\n usage: totalUsage,\n toolCalls,\n steps,\n };\n}\n"],"mappings":"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","names":[]}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|