@agntk/agent-harness 0.1.6 → 0.1.8
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/README.md +25 -0
- package/defaults/agents/summarizer.md +4 -0
- package/dist/{auto-processor-QIRUOGEI.js → auto-processor-KLEP2NMV.js} +3 -3
- package/dist/{chunk-UXCHAS3Z.js → chunk-2GPXPU6U.js} +4 -4
- package/dist/{chunk-PMFAYKBD.js → chunk-36W2VC3L.js} +2 -2
- package/dist/{chunk-EC42HQQH.js → chunk-44R2VV33.js} +2 -2
- package/dist/{chunk-AN6Y4MDD.js → chunk-5QME3GHF.js} +6 -6
- package/dist/{chunk-QMOIVORH.js → chunk-6DIHJF2A.js} +3 -3
- package/dist/{chunk-SEHAQTBO.js → chunk-CKLJTFMV.js} +6 -6
- package/dist/{chunk-5O5OGOOQ.js → chunk-CNOHSYI5.js} +2 -2
- package/dist/{chunk-D7AWV24Z.js → chunk-ESBLYOXU.js} +3 -3
- package/dist/{chunk-4TQQZILG.js → chunk-EXO47RET.js} +4 -2
- package/dist/chunk-EXO47RET.js.map +1 -0
- package/dist/{chunk-M6PDMK2O.js → chunk-MASZOYMQ.js} +4 -4
- package/dist/{chunk-UMXPOYZR.js → chunk-NGF7UZY5.js} +5 -5
- package/dist/{chunk-4P6TRFPZ.js → chunk-O2YV52TH.js} +4 -4
- package/dist/{chunk-7GZ4D6V6.js → chunk-P7EFJ7CN.js} +2 -2
- package/dist/{chunk-KLYMGWQJ.js → chunk-QILHQNSM.js} +5 -5
- package/dist/{chunk-IZ6UZ3ZL.js → chunk-WCYBFALM.js} +10 -3
- package/dist/chunk-WCYBFALM.js.map +1 -0
- package/dist/{chunk-NVC2WY4K.js → chunk-WHRYPI2T.js} +2 -2
- package/dist/{chunk-5CO5JTYT.js → chunk-X47HHTNV.js} +2 -2
- package/dist/{chunk-2UVWCTAY.js → chunk-XPEDVA35.js} +2 -2
- package/dist/{chunk-M62KLIEK.js → chunk-XTV7HH5M.js} +30 -6
- package/dist/chunk-XTV7HH5M.js.map +1 -0
- package/dist/cli/index.js +101 -101
- package/dist/{config-PYSS3QY6.js → config-KRGEWBPM.js} +3 -3
- package/dist/context-loader-GKLLIDVC.js +12 -0
- package/dist/{conversation-TBTFIJVU.js → conversation-EU47O5MU.js} +7 -7
- package/dist/{delegate-3KJAL4NZ.js → delegate-BPTJVYU3.js} +8 -8
- package/dist/{export-GYLWROMB.js → export-OPR3SVVJ.js} +3 -3
- package/dist/graph-VW5GH2FZ.js +13 -0
- package/dist/{harness-R5FKRICG.js → harness-FZR52COJ.js} +9 -9
- package/dist/{indexer-L5UC6J2V.js → indexer-SEALD6HO.js} +4 -4
- package/dist/instinct-learner-MNROY6L4.js +19 -0
- package/dist/{intake-SVJKFHTL.js → intake-BU2WHPWF.js} +5 -5
- package/dist/{intelligence-XPV3MC5U.js → intelligence-TUNH5ZMA.js} +11 -11
- package/dist/{journal-ITUMKT6U.js → journal-E2DJGCNS.js} +6 -6
- package/dist/{loader-27PLDCOJ.js → loader-NVVXVFBH.js} +3 -3
- package/dist/{mcp-installer-X2TJ2S2G.js → mcp-installer-4LOYB3PP.js} +3 -3
- package/dist/{primitive-registry-ZMGGXSO5.js → primitive-registry-KQOL7LNU.js} +3 -3
- package/dist/{provider-HQY6SPZI.js → provider-75AKTYGB.js} +2 -2
- package/dist/{rule-engine-DM26S77N.js → rule-engine-EPFMNBEG.js} +3 -3
- package/dist/{scaffold-2F36YVW6.js → scaffold-FBUNVFYQ.js} +5 -5
- package/dist/{scheduler-Q7GB2KCW.js → scheduler-UCFJU4BF.js} +12 -12
- package/dist/{search-6Y6NCOLQ.js → search-7RAQA6UV.js} +3 -3
- package/dist/{semantic-search-FN6FZIXI.js → semantic-search-OSRMCW2H.js} +3 -3
- package/dist/{serve-MXRTP2HE.js → serve-2QUR74CS.js} +10 -10
- package/dist/{telemetry-RS2JZUZP.js → telemetry-R34GXFVW.js} +4 -4
- package/dist/{tool-executor-6I5PHQDY.js → tool-executor-URY2ZB6G.js} +5 -5
- package/dist/{tools-NDFJNVHK.js → tools-2HWMJ5CJ.js} +4 -4
- package/dist/{types-NPJZAI72.js → types-KSGYUZZO.js} +2 -2
- package/dist/{universal-installer-LCAZHFZR.js → universal-installer-ZNA3HA2S.js} +6 -6
- package/dist/validator-JNIHKGWA.js +21 -0
- package/dist/{verification-gate-2O6DF2B7.js → verification-gate-FFKVJN5N.js} +3 -3
- package/dist/{watcher-GZWQSWZ6.js → watcher-L5SJGTZ2.js} +5 -5
- package/dist/{web-server-2Y4CHD2W.js → web-server-N3YIT47Z.js} +9 -9
- package/package.json +1 -1
- package/dist/chunk-4TQQZILG.js.map +0 -1
- package/dist/chunk-IZ6UZ3ZL.js.map +0 -1
- package/dist/chunk-M62KLIEK.js.map +0 -1
- package/dist/context-loader-RSXXFW5R.js +0 -12
- package/dist/graph-LEEO37L3.js +0 -13
- package/dist/instinct-learner-QGAMIS3X.js +0 -19
- package/dist/validator-LM7RZWSH.js +0 -21
- /package/dist/{auto-processor-QIRUOGEI.js.map → auto-processor-KLEP2NMV.js.map} +0 -0
- /package/dist/{chunk-UXCHAS3Z.js.map → chunk-2GPXPU6U.js.map} +0 -0
- /package/dist/{chunk-PMFAYKBD.js.map → chunk-36W2VC3L.js.map} +0 -0
- /package/dist/{chunk-EC42HQQH.js.map → chunk-44R2VV33.js.map} +0 -0
- /package/dist/{chunk-AN6Y4MDD.js.map → chunk-5QME3GHF.js.map} +0 -0
- /package/dist/{chunk-QMOIVORH.js.map → chunk-6DIHJF2A.js.map} +0 -0
- /package/dist/{chunk-SEHAQTBO.js.map → chunk-CKLJTFMV.js.map} +0 -0
- /package/dist/{chunk-5O5OGOOQ.js.map → chunk-CNOHSYI5.js.map} +0 -0
- /package/dist/{chunk-D7AWV24Z.js.map → chunk-ESBLYOXU.js.map} +0 -0
- /package/dist/{chunk-M6PDMK2O.js.map → chunk-MASZOYMQ.js.map} +0 -0
- /package/dist/{chunk-UMXPOYZR.js.map → chunk-NGF7UZY5.js.map} +0 -0
- /package/dist/{chunk-4P6TRFPZ.js.map → chunk-O2YV52TH.js.map} +0 -0
- /package/dist/{chunk-7GZ4D6V6.js.map → chunk-P7EFJ7CN.js.map} +0 -0
- /package/dist/{chunk-KLYMGWQJ.js.map → chunk-QILHQNSM.js.map} +0 -0
- /package/dist/{chunk-NVC2WY4K.js.map → chunk-WHRYPI2T.js.map} +0 -0
- /package/dist/{chunk-5CO5JTYT.js.map → chunk-X47HHTNV.js.map} +0 -0
- /package/dist/{chunk-2UVWCTAY.js.map → chunk-XPEDVA35.js.map} +0 -0
- /package/dist/{config-PYSS3QY6.js.map → config-KRGEWBPM.js.map} +0 -0
- /package/dist/{context-loader-RSXXFW5R.js.map → context-loader-GKLLIDVC.js.map} +0 -0
- /package/dist/{conversation-TBTFIJVU.js.map → conversation-EU47O5MU.js.map} +0 -0
- /package/dist/{delegate-3KJAL4NZ.js.map → delegate-BPTJVYU3.js.map} +0 -0
- /package/dist/{export-GYLWROMB.js.map → export-OPR3SVVJ.js.map} +0 -0
- /package/dist/{graph-LEEO37L3.js.map → graph-VW5GH2FZ.js.map} +0 -0
- /package/dist/{harness-R5FKRICG.js.map → harness-FZR52COJ.js.map} +0 -0
- /package/dist/{indexer-L5UC6J2V.js.map → indexer-SEALD6HO.js.map} +0 -0
- /package/dist/{instinct-learner-QGAMIS3X.js.map → instinct-learner-MNROY6L4.js.map} +0 -0
- /package/dist/{intake-SVJKFHTL.js.map → intake-BU2WHPWF.js.map} +0 -0
- /package/dist/{intelligence-XPV3MC5U.js.map → intelligence-TUNH5ZMA.js.map} +0 -0
- /package/dist/{journal-ITUMKT6U.js.map → journal-E2DJGCNS.js.map} +0 -0
- /package/dist/{loader-27PLDCOJ.js.map → loader-NVVXVFBH.js.map} +0 -0
- /package/dist/{mcp-installer-X2TJ2S2G.js.map → mcp-installer-4LOYB3PP.js.map} +0 -0
- /package/dist/{primitive-registry-ZMGGXSO5.js.map → primitive-registry-KQOL7LNU.js.map} +0 -0
- /package/dist/{provider-HQY6SPZI.js.map → provider-75AKTYGB.js.map} +0 -0
- /package/dist/{rule-engine-DM26S77N.js.map → rule-engine-EPFMNBEG.js.map} +0 -0
- /package/dist/{scaffold-2F36YVW6.js.map → scaffold-FBUNVFYQ.js.map} +0 -0
- /package/dist/{scheduler-Q7GB2KCW.js.map → scheduler-UCFJU4BF.js.map} +0 -0
- /package/dist/{search-6Y6NCOLQ.js.map → search-7RAQA6UV.js.map} +0 -0
- /package/dist/{semantic-search-FN6FZIXI.js.map → semantic-search-OSRMCW2H.js.map} +0 -0
- /package/dist/{serve-MXRTP2HE.js.map → serve-2QUR74CS.js.map} +0 -0
- /package/dist/{telemetry-RS2JZUZP.js.map → telemetry-R34GXFVW.js.map} +0 -0
- /package/dist/{tool-executor-6I5PHQDY.js.map → tool-executor-URY2ZB6G.js.map} +0 -0
- /package/dist/{tools-NDFJNVHK.js.map → tools-2HWMJ5CJ.js.map} +0 -0
- /package/dist/{types-NPJZAI72.js.map → types-KSGYUZZO.js.map} +0 -0
- /package/dist/{universal-installer-LCAZHFZR.js.map → universal-installer-ZNA3HA2S.js.map} +0 -0
- /package/dist/{validator-LM7RZWSH.js.map → validator-JNIHKGWA.js.map} +0 -0
- /package/dist/{verification-gate-2O6DF2B7.js.map → verification-gate-FFKVJN5N.js.map} +0 -0
- /package/dist/{watcher-GZWQSWZ6.js.map → watcher-L5SJGTZ2.js.map} +0 -0
- /package/dist/{web-server-2Y4CHD2W.js.map → web-server-N3YIT47Z.js.map} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/runtime/delegate.ts"],"sourcesContent":["import { existsSync, readFileSync } from 'fs';\nimport { join } from 'path';\nimport { loadDirectory, estimateTokens, getAtLevel } from '../primitives/loader.js';\nimport { loadConfig } from '../core/config.js';\nimport { log } from '../core/logger.js';\nimport {\n getModel,\n getSummaryModel,\n getFastModel,\n generate,\n streamGenerateWithDetails,\n} from '../llm/provider.js';\nimport { buildToolSet } from './tool-executor.js';\nimport { createSessionId, writeSession, type SessionRecord } from './sessions.js';\nimport type { HarnessDocument, HarnessConfig } from '../core/types.js';\n\n// --- Types ---\n\nexport interface DelegationResult {\n agentId: string;\n text: string;\n usage: { inputTokens: number; outputTokens: number; totalTokens: number };\n sessionId: string;\n}\n\nexport interface AgentInfo {\n id: string;\n l0: string;\n l1: string;\n path: string;\n tags: string[];\n status: string;\n}\n\n// --- Agent Discovery ---\n\n/**\n * Load all agent documents from the agents/ directory.\n */\nexport function loadAgentDocs(harnessDir: string): HarnessDocument[] {\n return loadDirectory(join(harnessDir, 'agents'));\n}\n\n/**\n * Find an agent document by its frontmatter id.\n * Falls back to filename match if id doesn't match.\n */\nexport function findAgent(harnessDir: string, agentId: string): HarnessDocument | undefined {\n const agents = loadAgentDocs(harnessDir);\n\n // Exact id match\n const byId = agents.find((a) => a.frontmatter.id === agentId);\n if (byId) return byId;\n\n // Try with \"agent-\" prefix\n const prefixed = agents.find((a) => a.frontmatter.id === `agent-${agentId}`);\n if (prefixed) return prefixed;\n\n // Filename match (e.g., \"evaluator\" matches \"evaluator.md\")\n const byFilename = agents.find((a) => {\n const filename = a.path.split('/').pop()?.replace('.md', '') || '';\n return filename === agentId || filename === `agent-${agentId}`;\n });\n\n return byFilename;\n}\n\n/**\n * List all available agents with summary info.\n */\nexport function listAgents(harnessDir: string): AgentInfo[] {\n return loadAgentDocs(harnessDir).map((doc) => ({\n id: doc.frontmatter.id,\n l0: doc.l0,\n l1: doc.l1,\n path: doc.path,\n tags: doc.frontmatter.tags,\n status: doc.frontmatter.status,\n }));\n}\n\n// --- System Prompt Assembly ---\n\n/**\n * Build a minimal system prompt for a delegated agent.\n * Sub-agents are stateless — they get:\n * 1. The agent's own body (L2) as primary instructions\n * 2. CORE.md identity (so they know who they serve)\n * 3. Active rules (at L1 level — compressed for efficiency)\n */\nexport function buildAgentPrompt(harnessDir: string, agentDoc: HarnessDocument, config: HarnessConfig): string {\n const sections: string[] = [];\n const maxTokens = config.model.max_tokens;\n const targetBudget = maxTokens * 0.10; // Sub-agents get 10% context budget\n let usedTokens = 0;\n\n // 1. Agent identity and instructions (always full L2)\n const agentBody = agentDoc.body;\n sections.push(`# AGENT: ${agentDoc.frontmatter.id}\\n\\n${agentBody}`);\n usedTokens += estimateTokens(agentBody);\n\n // 2. Primary agent identity from CORE.md (brief context)\n const corePath = join(harnessDir, 'CORE.md');\n if (existsSync(corePath)) {\n const core = readFileSync(corePath, 'utf-8');\n const coreTokens = estimateTokens(core);\n if (usedTokens + coreTokens <= targetBudget) {\n sections.push(`# PRIMARY AGENT CONTEXT\\n\\n${core}`);\n usedTokens += coreTokens;\n }\n }\n\n // 3. Rules (at appropriate disclosure level based on remaining budget)\n const rulesDir = join(harnessDir, 'rules');\n if (existsSync(rulesDir)) {\n const rules = loadDirectory(rulesDir);\n if (rules.length > 0) {\n const ruleDocs: string[] = [];\n for (const rule of rules) {\n // Estimate how much room is left\n const remaining = targetBudget - usedTokens;\n if (remaining < 50) break;\n\n // Try L1 first, fall back to L0\n let level: 0 | 1 | 2 = 1;\n let content = getAtLevel(rule, level);\n let tokens = estimateTokens(content);\n\n if (usedTokens + tokens > targetBudget) {\n level = 0;\n content = getAtLevel(rule, 0);\n tokens = estimateTokens(content);\n }\n\n if (usedTokens + tokens <= targetBudget) {\n ruleDocs.push(`### ${rule.frontmatter.id}\\n${content}`);\n usedTokens += tokens;\n }\n }\n if (ruleDocs.length > 0) {\n sections.push(`# RULES\\n\\n${ruleDocs.join('\\n\\n')}`);\n }\n }\n }\n\n return sections.join('\\n\\n---\\n\\n');\n}\n\n// --- Delegation ---\n\nexport interface DelegateOptions {\n harnessDir: string;\n agentId: string;\n prompt: string;\n apiKey?: string;\n modelOverride?: string;\n}\n\nfunction prepareDelegation(opts: DelegateOptions) {\n const { harnessDir, agentId, apiKey } = opts;\n\n if (!agentId || !agentId.trim()) {\n throw new Error('agentId is required');\n }\n if (!opts.prompt || !opts.prompt.trim()) {\n throw new Error('prompt cannot be empty');\n }\n\n const agentDoc = findAgent(harnessDir, agentId);\n if (!agentDoc) {\n const available = listAgents(harnessDir);\n const agentList = available.length > 0\n ? available.map((a) => ` - ${a.id}: ${a.l0}`).join('\\n')\n : ' (none)';\n throw new Error(\n `Agent \"${agentId}\" not found.\\n\\nAvailable agents:\\n${agentList}`\n );\n }\n\n const config = loadConfig(harnessDir, opts.modelOverride\n ? { model: { id: opts.modelOverride } }\n : undefined);\n\n const systemPrompt = buildAgentPrompt(harnessDir, agentDoc, config);\n\n // Sub-agent may declare `model: primary | summary | fast` in its\n // frontmatter to route the delegated LLM call to a different config\n // model than `harness run` uses. Defaults to 'primary' (same as\n // today's behavior). Resolves via the existing provider helpers:\n //\n // primary → config.model.id (always set)\n // summary → config.model.summary_model (falls back to primary)\n // fast → config.model.fast_model (falls back to summary → primary)\n //\n // Invalid values throw a clear error at delegation time.\n const modelTier = (agentDoc.frontmatter as { model?: string }).model ?? 'primary';\n let model;\n switch (modelTier) {\n case 'primary':\n model = getModel(config, apiKey);\n break;\n case 'summary':\n model = getSummaryModel(config, apiKey);\n log.debug(\n `[delegate] agent \"${agentDoc.frontmatter.id}\" using summary model tier`,\n );\n break;\n case 'fast':\n model = getFastModel(config, apiKey);\n log.debug(\n `[delegate] agent \"${agentDoc.frontmatter.id}\" using fast model tier`,\n );\n break;\n default:\n throw new Error(\n `Agent \"${agentDoc.frontmatter.id}\" declares model: \"${modelTier}\" ` +\n `which is not valid. Allowed values: primary, summary, fast.`,\n );\n }\n\n // Load tools from the harness so sub-agents can use them\n const toolSet = buildToolSet(harnessDir);\n const hasTools = Object.keys(toolSet).length > 0;\n\n return { agentDoc, config, systemPrompt, model, toolSet, hasTools };\n}\n\n/**\n * Delegate a prompt to a sub-agent.\n * Sub-agents are stateless single-turn executors. They:\n * - Receive their own body as system prompt + rules + CORE.md\n * - Execute a single prompt\n * - Record a session (tagged with the agent id)\n * - Return the result\n *\n * They do NOT have persistent state, memory, or learning.\n */\nexport async function delegateTo(opts: DelegateOptions): Promise<DelegationResult> {\n const { harnessDir, prompt } = opts;\n const { agentDoc, config, systemPrompt, model, toolSet, hasTools } = prepareDelegation(opts);\n\n const sessionId = createSessionId();\n const started = new Date().toISOString();\n\n const result = await generate({\n model,\n system: systemPrompt,\n prompt,\n maxRetries: config.model.max_retries,\n timeoutMs: config.model.timeout_ms,\n ...(hasTools ? { tools: toolSet, maxToolSteps: 5 } : {}),\n });\n\n const ended = new Date().toISOString();\n\n const session: SessionRecord = {\n id: sessionId,\n started,\n ended,\n prompt,\n summary: result.text.slice(0, 200),\n tokens_used: result.usage.totalTokens,\n model_id: config.model.id,\n delegated_to: agentDoc.frontmatter.id,\n steps: result.steps,\n tool_calls: result.toolCalls.length > 0 ? result.toolCalls : undefined,\n };\n\n try {\n writeSession(harnessDir, session);\n } catch (err) {\n log.warn(`Failed to write delegation session ${sessionId}: ${err instanceof Error ? err.message : String(err)}`);\n }\n\n return {\n agentId: agentDoc.frontmatter.id,\n text: result.text,\n usage: result.usage,\n sessionId,\n };\n}\n\nexport interface DelegateStreamResult {\n agentId: string;\n sessionId: string;\n textStream: AsyncIterable<string>;\n}\n\n/**\n * Stream-delegate a prompt to a sub-agent.\n * Returns an async iterable of text chunks. Session is recorded after\n * the stream is fully consumed.\n */\nexport function delegateStream(opts: DelegateOptions): DelegateStreamResult {\n const { harnessDir, prompt } = opts;\n\n // prepareDelegation() is called eagerly so callers get immediate errors\n // (e.g., agent not found) before consuming the stream.\n const { agentDoc, config, systemPrompt, model, toolSet, hasTools } = prepareDelegation(opts);\n\n const sessionId = createSessionId();\n const started = new Date().toISOString();\n\n const result = streamGenerateWithDetails({\n model,\n system: systemPrompt,\n prompt,\n maxRetries: config.model.max_retries,\n timeoutMs: config.model.timeout_ms,\n ...(hasTools ? { tools: toolSet, maxToolSteps: 5 } : {}),\n });\n\n async function* wrappedStream(): AsyncIterable<string> {\n let fullText = '';\n try {\n for await (const chunk of result.textStream) {\n fullText += chunk;\n yield chunk;\n }\n } catch (err) {\n const error = err instanceof Error ? err : new Error(String(err));\n log.warn(`Delegation stream error for agent \"${agentDoc.frontmatter.id}\": ${error.message}`);\n throw error;\n }\n\n // Await post-stream metadata — wrapped so failures don't crash the generator\n let usage = { inputTokens: 0, outputTokens: 0, totalTokens: 0 };\n let steps = 1;\n let toolCalls: Array<{ toolName: string; args: Record<string, unknown>; result: unknown }> = [];\n try {\n [usage, steps, toolCalls] = await Promise.all([\n result.usage,\n result.steps,\n result.toolCalls,\n ]);\n } catch (err) {\n log.warn(`Failed to resolve delegation post-stream metadata: ${err instanceof Error ? err.message : String(err)}`);\n }\n\n const ended = new Date().toISOString();\n\n const session: SessionRecord = {\n id: sessionId,\n started,\n ended,\n prompt,\n summary: fullText.slice(0, 200),\n tokens_used: usage.totalTokens,\n model_id: config.model.id,\n delegated_to: agentDoc.frontmatter.id,\n steps,\n tool_calls: toolCalls.length > 0 ? toolCalls : undefined,\n };\n\n try {\n writeSession(harnessDir, session);\n } catch (err) {\n log.warn(`Failed to write delegation session ${sessionId}: ${err instanceof Error ? err.message : String(err)}`);\n }\n }\n\n return {\n agentId: agentDoc.frontmatter.id,\n sessionId,\n textStream: wrappedStream(),\n };\n}\n"],"mappings":"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","names":[]}
|