@agntk/agent-harness 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/README.md +104 -43
- package/dist/{analytics-RPT73WNM.js → analytics-L24W3B7U.js} +1 -2
- package/dist/auto-processor-QIRUOGEI.js +12 -0
- package/dist/{chunk-UPLBF4RZ.js → chunk-2UVWCTAY.js} +2 -2
- package/dist/{chunk-CSL3ERUI.js → chunk-4P6TRFPZ.js} +3 -3
- package/dist/chunk-4P6TRFPZ.js.map +1 -0
- package/dist/{chunk-4CWAGBNS.js → chunk-4TQQZILG.js} +73 -3
- package/dist/chunk-4TQQZILG.js.map +1 -0
- package/dist/{chunk-DA7IKHC4.js → chunk-5CO5JTYT.js} +2 -2
- package/dist/chunk-5CO5JTYT.js.map +1 -0
- package/dist/{chunk-A7BJPQQ6.js → chunk-5O5OGOOQ.js} +2 -2
- package/dist/{chunk-UWQTZMNI.js → chunk-7GZ4D6V6.js} +2 -2
- package/dist/{chunk-FLZU44SV.js → chunk-AN6Y4MDD.js} +6 -6
- package/dist/{chunk-4FDUOGSZ.js → chunk-D7AWV24Z.js} +3 -3
- package/dist/{chunk-CHJ5GNZC.js → chunk-EC42HQQH.js} +2 -2
- package/dist/{chunk-YIJY5DBV.js → chunk-KLYMGWQJ.js} +4 -4
- package/dist/chunk-KLYMGWQJ.js.map +1 -0
- package/dist/{chunk-YUFNYN2H.js → chunk-M62KLIEK.js} +4 -4
- package/dist/chunk-M62KLIEK.js.map +1 -0
- package/dist/{chunk-GJNNR2RA.js → chunk-M6PDMK2O.js} +3 -3
- package/dist/{chunk-M7NXUK55.js → chunk-NVC2WY4K.js} +2 -2
- package/dist/{chunk-XTBKL5BI.js → chunk-PMFAYKBD.js} +2 -2
- package/dist/chunk-PMFAYKBD.js.map +1 -0
- package/dist/{chunk-274RV3YO.js → chunk-QMOIVORH.js} +3 -3
- package/dist/chunk-QMOIVORH.js.map +1 -0
- package/dist/{chunk-RY3ZFII7.js → chunk-SEHAQTBO.js} +6 -6
- package/dist/{chunk-MPZ3BPUI.js → chunk-UMXPOYZR.js} +4 -4
- package/dist/{chunk-W4T7PGI2.js → chunk-UXCHAS3Z.js} +4 -4
- package/dist/cli/index.js +153 -167
- package/dist/cli/index.js.map +1 -1
- package/dist/config-PYSS3QY6.js +12 -0
- package/dist/context-loader-RSXXFW5R.js +12 -0
- package/dist/{conversation-QDEIDQPH.js → conversation-TBTFIJVU.js} +6 -7
- package/dist/{cost-tracker-RS3W7SVY.js → cost-tracker-NZRZEHVA.js} +1 -2
- package/dist/{delegate-VJCJLYEK.js → delegate-3KJAL4NZ.js} +7 -8
- package/dist/{emotional-state-VQVRA6ED.js → emotional-state-IN4ZUL2Q.js} +1 -2
- package/dist/{emotional-state-VQVRA6ED.js.map → emotional-state-IN4ZUL2Q.js.map} +1 -1
- package/dist/{env-discovery-2BLVMAIM.js → env-discovery-PXBRE5FX.js} +1 -2
- package/dist/{env-discovery-2BLVMAIM.js.map → env-discovery-PXBRE5FX.js.map} +1 -1
- package/dist/{export-6GCYHEHQ.js → export-GYLWROMB.js} +3 -4
- package/dist/{export-6GCYHEHQ.js.map → export-GYLWROMB.js.map} +1 -1
- package/dist/graph-LEEO37L3.js +13 -0
- package/dist/{harness-WE4SLCML.js → harness-R5FKRICG.js} +8 -9
- package/dist/{health-NZ6WNIMV.js → health-HL2JYHIY.js} +1 -2
- package/dist/indexer-L5UC6J2V.js +15 -0
- package/dist/{instinct-learner-SRM72DHF.js → instinct-learner-QGAMIS3X.js} +5 -6
- package/dist/{intake-4M3HNU43.js → intake-SVJKFHTL.js} +5 -6
- package/dist/{intelligence-HJOCA4SJ.js → intelligence-XPV3MC5U.js} +10 -13
- package/dist/intelligence-XPV3MC5U.js.map +1 -0
- package/dist/{journal-WANJL3MI.js → journal-ITUMKT6U.js} +5 -6
- package/dist/{loader-C3TKIKZR.js → loader-27PLDCOJ.js} +3 -4
- package/dist/{mcp-WTQJJZAO.js → mcp-JSIUJJZV.js} +1 -2
- package/dist/{mcp-discovery-WPAQFL6S.js → mcp-discovery-DG3RQYLM.js} +1 -2
- package/dist/{mcp-discovery-WPAQFL6S.js.map → mcp-discovery-DG3RQYLM.js.map} +1 -1
- package/dist/{mcp-installer-6O2XXD3V.js → mcp-installer-X2TJ2S2G.js} +3 -4
- package/dist/{mcp-installer-6O2XXD3V.js.map → mcp-installer-X2TJ2S2G.js.map} +1 -1
- package/dist/{metrics-KXGNFAAB.js → metrics-2MNINXNQ.js} +1 -2
- package/dist/{primitive-registry-I6VTIR4W.js → primitive-registry-ZMGGXSO5.js} +3 -4
- package/dist/{primitive-registry-I6VTIR4W.js.map → primitive-registry-ZMGGXSO5.js.map} +1 -1
- package/dist/{project-discovery-C4UMD7JI.js → project-discovery-FQLAZKEM.js} +1 -2
- package/dist/project-discovery-FQLAZKEM.js.map +1 -0
- package/dist/{provider-SXPQZ74H.js → provider-HQY6SPZI.js} +1 -2
- package/dist/{rate-limiter-RLRVM325.js → rate-limiter-PH5DCVU4.js} +1 -2
- package/dist/{rule-engine-YGQ3RYZM.js → rule-engine-DM26S77N.js} +3 -4
- package/dist/{rule-engine-YGQ3RYZM.js.map → rule-engine-DM26S77N.js.map} +1 -1
- package/dist/{scaffold-A3VRRCBV.js → scaffold-2F36YVW6.js} +5 -6
- package/dist/{scaffold-A3VRRCBV.js.map → scaffold-2F36YVW6.js.map} +1 -1
- package/dist/{scheduler-XHHIVHRI.js → scheduler-Q7GB2KCW.js} +11 -12
- package/dist/{scheduler-XHHIVHRI.js.map → scheduler-Q7GB2KCW.js.map} +1 -1
- package/dist/{search-V3W5JMJG.js → search-6Y6NCOLQ.js} +3 -4
- package/dist/search-6Y6NCOLQ.js.map +1 -0
- package/dist/{semantic-search-2DTOO5UX.js → semantic-search-FN6FZIXI.js} +3 -4
- package/dist/semantic-search-FN6FZIXI.js.map +1 -0
- package/dist/{serve-DTQ3HENY.js → serve-MXRTP2HE.js} +10 -11
- package/dist/serve-MXRTP2HE.js.map +1 -0
- package/dist/{sessions-CZGVXKQE.js → sessions-G6SZZXWS.js} +1 -2
- package/dist/{sources-RW5DT56F.js → sources-7LDYO5GK.js} +1 -2
- package/dist/{starter-packs-76YUVHEU.js → starter-packs-OR7NI5NA.js} +1 -2
- package/dist/{starter-packs-76YUVHEU.js.map → starter-packs-OR7NI5NA.js.map} +1 -1
- package/dist/{state-GMXILIHW.js → state-25IQEC5C.js} +1 -2
- package/dist/{state-merge-NKO5FRBA.js → state-merge-E333OEIQ.js} +1 -2
- package/dist/{state-merge-NKO5FRBA.js.map → state-merge-E333OEIQ.js.map} +1 -1
- package/dist/{telemetry-UC6PBXC7.js → telemetry-RS2JZUZP.js} +4 -5
- package/dist/{tool-executor-MJ7IG7PQ.js → tool-executor-6I5PHQDY.js} +5 -6
- package/dist/{tools-DZ4KETET.js → tools-NDFJNVHK.js} +4 -5
- package/dist/{types-EW7AIB3R.js → types-NPJZAI72.js} +2 -3
- package/dist/{universal-installer-AAXXYM5A.js → universal-installer-LCAZHFZR.js} +91 -7
- package/dist/universal-installer-LCAZHFZR.js.map +1 -0
- package/dist/validator-LM7RZWSH.js +21 -0
- package/dist/{verification-gate-FYXUX6LH.js → verification-gate-2O6DF2B7.js} +3 -4
- package/dist/verification-gate-2O6DF2B7.js.map +1 -0
- package/dist/{versioning-Z3XNE2Q2.js → versioning-WEGF6KJG.js} +1 -2
- package/dist/versioning-WEGF6KJG.js.map +1 -0
- package/dist/{watcher-ISJC7YKL.js → watcher-GZWQSWZ6.js} +5 -6
- package/dist/{watcher-ISJC7YKL.js.map → watcher-GZWQSWZ6.js.map} +1 -1
- package/dist/{web-server-DD7ZOP46.js → web-server-2Y4CHD2W.js} +8 -9
- package/package.json +1 -9
- package/dist/agent-framework-K4GUIICH.js +0 -344
- package/dist/agent-framework-K4GUIICH.js.map +0 -1
- package/dist/auto-processor-OLE45UI3.js +0 -13
- package/dist/chunk-274RV3YO.js.map +0 -1
- package/dist/chunk-4CWAGBNS.js.map +0 -1
- package/dist/chunk-CSL3ERUI.js.map +0 -1
- package/dist/chunk-DA7IKHC4.js.map +0 -1
- package/dist/chunk-DGUM43GV.js +0 -11
- package/dist/chunk-FD55B3IO.js +0 -204
- package/dist/chunk-FD55B3IO.js.map +0 -1
- package/dist/chunk-GUJTBGVS.js +0 -2212
- package/dist/chunk-GUJTBGVS.js.map +0 -1
- package/dist/chunk-KFX54TQM.js +0 -165
- package/dist/chunk-KFX54TQM.js.map +0 -1
- package/dist/chunk-XTBKL5BI.js.map +0 -1
- package/dist/chunk-YIJY5DBV.js.map +0 -1
- package/dist/chunk-YUFNYN2H.js.map +0 -1
- package/dist/chunk-ZZJOFKAT.js +0 -13
- package/dist/config-WVMRUOCA.js +0 -13
- package/dist/context-loader-3ORBPMHJ.js +0 -13
- package/dist/graph-YUIPOSOO.js +0 -14
- package/dist/harness-LCHA3DWP.js +0 -10
- package/dist/index.d.ts +0 -3612
- package/dist/index.js +0 -13713
- package/dist/index.js.map +0 -1
- package/dist/indexer-LONANRRM.js +0 -16
- package/dist/intelligence-HJOCA4SJ.js.map +0 -1
- package/dist/project-discovery-C4UMD7JI.js.map +0 -1
- package/dist/provider-LQHQX7Z7.js +0 -26
- package/dist/search-V3W5JMJG.js.map +0 -1
- package/dist/semantic-search-2DTOO5UX.js.map +0 -1
- package/dist/serve-DTQ3HENY.js.map +0 -1
- package/dist/tools-DZ4KETET.js.map +0 -1
- package/dist/types-EW7AIB3R.js.map +0 -1
- package/dist/types-WGDLSPO6.js +0 -16
- package/dist/types-WGDLSPO6.js.map +0 -1
- package/dist/universal-installer-AAXXYM5A.js.map +0 -1
- package/dist/validator-7WXMDIHH.js +0 -22
- package/dist/validator-7WXMDIHH.js.map +0 -1
- package/dist/verification-gate-FYXUX6LH.js.map +0 -1
- package/dist/versioning-Z3XNE2Q2.js.map +0 -1
- package/dist/web-server-DD7ZOP46.js.map +0 -1
- /package/dist/{analytics-RPT73WNM.js.map → analytics-L24W3B7U.js.map} +0 -0
- /package/dist/{auto-processor-OLE45UI3.js.map → auto-processor-QIRUOGEI.js.map} +0 -0
- /package/dist/{chunk-UPLBF4RZ.js.map → chunk-2UVWCTAY.js.map} +0 -0
- /package/dist/{chunk-A7BJPQQ6.js.map → chunk-5O5OGOOQ.js.map} +0 -0
- /package/dist/{chunk-UWQTZMNI.js.map → chunk-7GZ4D6V6.js.map} +0 -0
- /package/dist/{chunk-FLZU44SV.js.map → chunk-AN6Y4MDD.js.map} +0 -0
- /package/dist/{chunk-4FDUOGSZ.js.map → chunk-D7AWV24Z.js.map} +0 -0
- /package/dist/{chunk-CHJ5GNZC.js.map → chunk-EC42HQQH.js.map} +0 -0
- /package/dist/{chunk-GJNNR2RA.js.map → chunk-M6PDMK2O.js.map} +0 -0
- /package/dist/{chunk-M7NXUK55.js.map → chunk-NVC2WY4K.js.map} +0 -0
- /package/dist/{chunk-RY3ZFII7.js.map → chunk-SEHAQTBO.js.map} +0 -0
- /package/dist/{chunk-MPZ3BPUI.js.map → chunk-UMXPOYZR.js.map} +0 -0
- /package/dist/{chunk-W4T7PGI2.js.map → chunk-UXCHAS3Z.js.map} +0 -0
- /package/dist/{chunk-DGUM43GV.js.map → config-PYSS3QY6.js.map} +0 -0
- /package/dist/{chunk-ZZJOFKAT.js.map → context-loader-RSXXFW5R.js.map} +0 -0
- /package/dist/{config-WVMRUOCA.js.map → conversation-TBTFIJVU.js.map} +0 -0
- /package/dist/{context-loader-3ORBPMHJ.js.map → cost-tracker-NZRZEHVA.js.map} +0 -0
- /package/dist/{conversation-QDEIDQPH.js.map → delegate-3KJAL4NZ.js.map} +0 -0
- /package/dist/{cost-tracker-RS3W7SVY.js.map → graph-LEEO37L3.js.map} +0 -0
- /package/dist/{delegate-VJCJLYEK.js.map → harness-R5FKRICG.js.map} +0 -0
- /package/dist/{graph-YUIPOSOO.js.map → health-HL2JYHIY.js.map} +0 -0
- /package/dist/{harness-LCHA3DWP.js.map → indexer-L5UC6J2V.js.map} +0 -0
- /package/dist/{harness-WE4SLCML.js.map → instinct-learner-QGAMIS3X.js.map} +0 -0
- /package/dist/{health-NZ6WNIMV.js.map → intake-SVJKFHTL.js.map} +0 -0
- /package/dist/{indexer-LONANRRM.js.map → journal-ITUMKT6U.js.map} +0 -0
- /package/dist/{instinct-learner-SRM72DHF.js.map → loader-27PLDCOJ.js.map} +0 -0
- /package/dist/{intake-4M3HNU43.js.map → mcp-JSIUJJZV.js.map} +0 -0
- /package/dist/{journal-WANJL3MI.js.map → metrics-2MNINXNQ.js.map} +0 -0
- /package/dist/{loader-C3TKIKZR.js.map → provider-HQY6SPZI.js.map} +0 -0
- /package/dist/{mcp-WTQJJZAO.js.map → rate-limiter-PH5DCVU4.js.map} +0 -0
- /package/dist/{metrics-KXGNFAAB.js.map → sessions-G6SZZXWS.js.map} +0 -0
- /package/dist/{provider-LQHQX7Z7.js.map → sources-7LDYO5GK.js.map} +0 -0
- /package/dist/{provider-SXPQZ74H.js.map → state-25IQEC5C.js.map} +0 -0
- /package/dist/{rate-limiter-RLRVM325.js.map → telemetry-RS2JZUZP.js.map} +0 -0
- /package/dist/{sessions-CZGVXKQE.js.map → tool-executor-6I5PHQDY.js.map} +0 -0
- /package/dist/{sources-RW5DT56F.js.map → tools-NDFJNVHK.js.map} +0 -0
- /package/dist/{state-GMXILIHW.js.map → types-NPJZAI72.js.map} +0 -0
- /package/dist/{telemetry-UC6PBXC7.js.map → validator-LM7RZWSH.js.map} +0 -0
- /package/dist/{tool-executor-MJ7IG7PQ.js.map → web-server-2Y4CHD2W.js.map} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/core/harness.ts"],"sourcesContent":["import { existsSync } from 'fs';\nimport { resolve } from 'path';\nimport { loadConfig } from './config.js';\nimport { log } from './logger.js';\nimport type {\n CreateHarnessOptions,\n HarnessAgent,\n HarnessHooks,\n AgentRunResult,\n AgentStreamResult,\n AgentState,\n} from './types.js';\nimport { getModel, generate, streamGenerateWithDetails } from '../llm/provider.js';\nimport { buildSystemPrompt } from '../runtime/context-loader.js';\nimport { loadState, saveState } from '../runtime/state.js';\nimport { createSessionId, writeSession, type SessionRecord } from '../runtime/sessions.js';\nimport { recordCost } from '../runtime/cost-tracker.js';\nimport { recordSuccess, recordFailure, recordBoot } from '../runtime/health.js';\nimport { checkGuardrails } from '../runtime/guardrails.js';\nimport { buildToolSet, type AIToolSet } from '../runtime/tool-executor.js';\nimport { createMcpManager, type McpManager } from '../runtime/mcp.js';\n\nexport function createHarness(options: CreateHarnessOptions): HarnessAgent {\n const dir = resolve(options.dir);\n\n if (!existsSync(dir)) {\n throw new Error(`Harness directory not found: ${dir}`);\n }\n\n const config = loadConfig(dir, options.config);\n\n // Apply model and provider overrides from options\n if (options.model) {\n config.model = { ...config.model, id: options.model };\n }\n if (options.provider) {\n config.model = { ...config.model, provider: options.provider };\n }\n\n const model = getModel(config, options.apiKey);\n const hooks: HarnessHooks = options.hooks ?? {};\n\n let state: AgentState;\n let systemPrompt: string;\n let booted = false;\n let toolSet: AIToolSet = {};\n let mcpManager: McpManager | undefined;\n\n const agent: HarnessAgent = {\n name: config.agent.name,\n config,\n\n async boot() {\n // Load state\n state = loadState(dir);\n const previousMode = state.mode;\n state.mode = 'active';\n state.last_interaction = new Date().toISOString();\n\n // Build system prompt from harness files\n const ctx = buildSystemPrompt(dir, config);\n systemPrompt = ctx.systemPrompt;\n\n // Connect to MCP servers and load their tools\n let mcpTools: AIToolSet = {};\n mcpManager = createMcpManager(config);\n if (mcpManager.hasServers()) {\n try {\n await mcpManager.connect();\n mcpTools = mcpManager.getTools();\n } catch (err) {\n log.warn(`MCP connection failed during boot: ${err instanceof Error ? err.message : String(err)}. Continuing without MCP tools.`);\n }\n }\n\n // Load tools and convert to AI SDK format (includes markdown + programmatic + MCP)\n toolSet = buildToolSet(dir, options.toolExecutor, mcpTools);\n const toolCount = Object.keys(toolSet).length;\n\n booted = true;\n\n log.info(\n `Booted \"${config.agent.name}\" | ` +\n `${ctx.budget.loaded_files.length} files loaded | ` +\n `~${ctx.budget.used_tokens} tokens used | ` +\n `${ctx.budget.remaining} remaining` +\n (toolCount > 0 ? ` | ${toolCount} tools` : ''),\n );\n\n for (const warning of ctx.warnings) {\n log.warn(warning);\n }\n\n // Lifecycle: onStateChange\n if (previousMode !== 'active' && hooks.onStateChange) {\n await hooks.onStateChange({ agent, previous: previousMode, current: 'active' });\n }\n\n // Record boot in health metrics\n try { recordBoot(dir); } catch { /* best-effort */ }\n\n // Lifecycle: onBoot\n if (hooks.onBoot) {\n await hooks.onBoot({ agent, config, state });\n }\n },\n\n async run(prompt: string): Promise<AgentRunResult> {\n if (!booted) await agent.boot();\n\n // Check guardrails (rate limits + budget) before LLM call\n const guard = checkGuardrails(dir, config);\n if (!guard.allowed) {\n const error = new Error(`Guardrail blocked: ${guard.reason}`);\n try { recordFailure(dir, error.message); } catch { /* best-effort */ }\n if (hooks.onError) {\n try { await hooks.onError({ agent, error, prompt }); } catch { /* best-effort */ }\n }\n throw error;\n }\n\n const sessionId = createSessionId();\n const started = new Date().toISOString();\n\n const hasTools = Object.keys(toolSet).length > 0;\n let result;\n try {\n 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: options.toolExecutor?.maxToolCalls ?? 5 } : {}),\n });\n } catch (err) {\n const error = err instanceof Error ? err : new Error(String(err));\n try { recordFailure(dir, error.message); } catch { /* best-effort */ }\n if (hooks.onError) {\n try { await hooks.onError({ agent, error, prompt }); } catch { /* best-effort */ }\n }\n throw error;\n }\n\n const ended = new Date().toISOString();\n\n // Write session record\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 steps: result.steps,\n model_id: config.model.id,\n tool_calls: result.toolCalls.length > 0 ? result.toolCalls : undefined,\n };\n\n // Post-LLM recording — wrapped in try-catch so telemetry failures\n // never mask a successful LLM result\n try {\n writeSession(dir, session);\n } catch (err) {\n log.warn(`Failed to write session ${sessionId}: ${err instanceof Error ? err.message : String(err)}`);\n }\n\n try {\n recordCost(dir, {\n model_id: config.model.id,\n provider: config.model.provider ?? 'openrouter',\n input_tokens: result.usage.inputTokens,\n output_tokens: result.usage.outputTokens,\n source: `run:${sessionId}`,\n });\n } catch (err) {\n log.warn(`Failed to record cost: ${err instanceof Error ? err.message : String(err)}`);\n }\n\n try {\n recordSuccess(dir);\n } catch (err) {\n log.warn(`Failed to record health: ${err instanceof Error ? err.message : String(err)}`);\n }\n\n try {\n state.last_interaction = ended;\n saveState(dir, state);\n } catch (err) {\n log.warn(`Failed to save state: ${err instanceof Error ? err.message : String(err)}`);\n }\n\n const runResult: AgentRunResult = {\n text: result.text,\n usage: result.usage,\n session_id: sessionId,\n steps: result.steps,\n toolCalls: result.toolCalls,\n };\n\n // Lifecycle: onSessionEnd — wrapped so hook errors don't lose the result\n if (hooks.onSessionEnd) {\n try {\n await hooks.onSessionEnd({ agent, sessionId, prompt, result: runResult });\n } catch (err) {\n log.warn(`onSessionEnd hook error: ${err instanceof Error ? err.message : String(err)}`);\n }\n }\n\n return runResult;\n },\n\n stream(prompt: string): AgentStreamResult {\n const sessionId = createSessionId();\n\n // Deferred result — resolves after stream is fully consumed and recording completes\n let resolveResult: (r: AgentRunResult) => void;\n let rejectResult: (e: Error) => void;\n const resultPromise = new Promise<AgentRunResult>((res, rej) => {\n resolveResult = res;\n rejectResult = rej;\n });\n // Prevent unhandled rejection when error propagates via the generator throw path\n // and consumer doesn't explicitly await .result\n resultPromise.catch(() => {});\n\n async function* generateStream(): AsyncIterable<string> {\n if (!booted) await agent.boot();\n\n // Check guardrails (rate limits + budget) before LLM call\n const guard = checkGuardrails(dir, config);\n if (!guard.allowed) {\n const error = new Error(`Guardrail blocked: ${guard.reason}`);\n try { recordFailure(dir, error.message); } catch { /* best-effort */ }\n if (hooks.onError) {\n try { await hooks.onError({ agent, error, prompt }); } catch { /* best-effort */ }\n }\n rejectResult(error);\n throw error;\n }\n\n const started = new Date().toISOString();\n let fullText = '';\n\n const hasTools = Object.keys(toolSet).length > 0;\n\n let streamResult;\n try {\n streamResult = 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: options.toolExecutor?.maxToolCalls ?? 5 } : {}),\n });\n } catch (err) {\n const error = err instanceof Error ? err : new Error(String(err));\n try { recordFailure(dir, error.message); } catch { /* best-effort */ }\n if (hooks.onError) {\n try { await hooks.onError({ agent, error, prompt }); } catch { /* best-effort */ }\n }\n rejectResult(error);\n throw error;\n }\n\n try {\n for await (const chunk of streamResult.textStream) {\n fullText += chunk;\n yield chunk;\n }\n } catch (err) {\n const error = err instanceof Error ? err : new Error(String(err));\n try { recordFailure(dir, error.message); } catch { /* best-effort */ }\n if (hooks.onError) {\n try { await hooks.onError({ agent, error, prompt }); } catch { /* best-effort */ }\n }\n rejectResult(error);\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 streamResult.usage,\n streamResult.steps,\n streamResult.toolCalls,\n ]);\n } catch (err) {\n log.warn(`Failed to resolve 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 steps,\n model_id: config.model.id,\n tool_calls: toolCalls.length > 0 ? toolCalls : undefined,\n };\n\n // Post-stream recording — wrapped so telemetry failures don't break the caller\n try {\n writeSession(dir, session);\n } catch (err) {\n log.warn(`Failed to write session ${sessionId}: ${err instanceof Error ? err.message : String(err)}`);\n }\n\n try {\n recordCost(dir, {\n model_id: config.model.id,\n provider: config.model.provider ?? 'openrouter',\n input_tokens: usage.inputTokens,\n output_tokens: usage.outputTokens,\n source: `stream:${sessionId}`,\n });\n } catch (err) {\n log.warn(`Failed to record cost: ${err instanceof Error ? err.message : String(err)}`);\n }\n\n try {\n recordSuccess(dir);\n } catch (err) {\n log.warn(`Failed to record health: ${err instanceof Error ? err.message : String(err)}`);\n }\n\n try {\n state.last_interaction = ended;\n saveState(dir, state);\n } catch (err) {\n log.warn(`Failed to save state: ${err instanceof Error ? err.message : String(err)}`);\n }\n\n const runResult: AgentRunResult = {\n text: fullText,\n usage,\n session_id: sessionId,\n steps,\n toolCalls,\n };\n\n // Lifecycle: onSessionEnd\n if (hooks.onSessionEnd) {\n try {\n await hooks.onSessionEnd({ agent, sessionId, prompt, result: runResult });\n } catch (err) {\n log.warn(`onSessionEnd hook error: ${err instanceof Error ? err.message : String(err)}`);\n }\n }\n\n resolveResult(runResult);\n }\n\n return {\n textStream: generateStream(),\n result: resultPromise,\n };\n },\n\n async shutdown() {\n if (!booted) return;\n\n // Lifecycle: onShutdown — wrapped so hook errors don't prevent cleanup\n if (hooks.onShutdown) {\n try {\n await hooks.onShutdown({ agent, state });\n } catch (err) {\n log.warn(`onShutdown hook error: ${err instanceof Error ? err.message : String(err)}`);\n }\n }\n\n // Close MCP server connections\n if (mcpManager) {\n try {\n await mcpManager.close();\n } catch (err) {\n log.warn(`MCP shutdown error: ${err instanceof Error ? err.message : String(err)}`);\n }\n mcpManager = undefined;\n }\n\n const previousMode = state.mode;\n state.mode = 'idle';\n try {\n saveState(dir, state);\n } catch (err) {\n log.warn(`Failed to save state during shutdown: ${err instanceof Error ? err.message : String(err)}`);\n }\n booted = false;\n\n // Lifecycle: onStateChange\n if (previousMode !== 'idle' && hooks.onStateChange) {\n try {\n await hooks.onStateChange({ agent, previous: previousMode, current: 'idle' });\n } catch (err) {\n log.warn(`onStateChange hook error: ${err instanceof Error ? err.message : String(err)}`);\n }\n }\n\n log.info(`Shutdown \"${config.agent.name}\"`);\n },\n\n getSystemPrompt() {\n return systemPrompt || '';\n },\n\n getState() {\n return state || loadState(dir);\n },\n };\n\n return agent;\n}\n"],"mappings":"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","names":[]}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import {
|
|
4
4
|
buildToolSet
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-5CO5JTYT.js";
|
|
6
6
|
import {
|
|
7
7
|
createSessionId,
|
|
8
8
|
writeSession
|
|
@@ -11,7 +11,7 @@ import {
|
|
|
11
11
|
estimateTokens,
|
|
12
12
|
getAtLevel,
|
|
13
13
|
loadDirectory
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-2UVWCTAY.js";
|
|
15
15
|
import {
|
|
16
16
|
log
|
|
17
17
|
} from "./chunk-BSKDOFRT.js";
|
|
@@ -22,7 +22,7 @@ import {
|
|
|
22
22
|
} from "./chunk-IZ6UZ3ZL.js";
|
|
23
23
|
import {
|
|
24
24
|
loadConfig
|
|
25
|
-
} from "./chunk-
|
|
25
|
+
} from "./chunk-EC42HQQH.js";
|
|
26
26
|
|
|
27
27
|
// src/runtime/delegate.ts
|
|
28
28
|
import { existsSync, readFileSync } from "fs";
|
|
@@ -239,4 +239,4 @@ export {
|
|
|
239
239
|
delegateTo,
|
|
240
240
|
delegateStream
|
|
241
241
|
};
|
|
242
|
-
//# sourceMappingURL=chunk-
|
|
242
|
+
//# sourceMappingURL=chunk-M62KLIEK.js.map
|
|
@@ -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 { getModel, generate, streamGenerateWithDetails } 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 const model = getModel(config, apiKey);\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":[]}
|
|
@@ -2,14 +2,14 @@
|
|
|
2
2
|
|
|
3
3
|
import {
|
|
4
4
|
loadDirectory
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-2UVWCTAY.js";
|
|
6
6
|
import {
|
|
7
7
|
generate,
|
|
8
8
|
getModel
|
|
9
9
|
} from "./chunk-IZ6UZ3ZL.js";
|
|
10
10
|
import {
|
|
11
11
|
loadConfig
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-EC42HQQH.js";
|
|
13
13
|
|
|
14
14
|
// src/runtime/instinct-learner.ts
|
|
15
15
|
import { writeFileSync, readdirSync, readFileSync, existsSync, mkdirSync } from "fs";
|
|
@@ -197,4 +197,4 @@ export {
|
|
|
197
197
|
learnFromSessions,
|
|
198
198
|
harvestInstincts
|
|
199
199
|
};
|
|
200
|
-
//# sourceMappingURL=chunk-
|
|
200
|
+
//# sourceMappingURL=chunk-M6PDMK2O.js.map
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import {
|
|
4
4
|
getPrimitiveDirs
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-4TQQZILG.js";
|
|
6
6
|
|
|
7
7
|
// src/runtime/auto-processor.ts
|
|
8
8
|
import { readFileSync, writeFileSync, existsSync, readdirSync } from "fs";
|
|
@@ -196,4 +196,4 @@ export {
|
|
|
196
196
|
autoProcessFile,
|
|
197
197
|
autoProcessAll
|
|
198
198
|
};
|
|
199
|
-
//# sourceMappingURL=chunk-
|
|
199
|
+
//# sourceMappingURL=chunk-NVC2WY4K.js.map
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import {
|
|
4
4
|
loadDirectory
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-2UVWCTAY.js";
|
|
6
6
|
|
|
7
7
|
// src/runtime/tools.ts
|
|
8
8
|
import { existsSync } from "fs";
|
|
@@ -108,4 +108,4 @@ export {
|
|
|
108
108
|
listToolSummaries,
|
|
109
109
|
checkToolAuth
|
|
110
110
|
};
|
|
111
|
-
//# sourceMappingURL=chunk-
|
|
111
|
+
//# sourceMappingURL=chunk-PMFAYKBD.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/runtime/tools.ts"],"sourcesContent":["import { existsSync } from 'fs';\nimport { join } from 'path';\nimport { loadDirectory } from '../primitives/loader.js';\nimport type { HarnessDocument } from '../core/types.js';\n\nexport interface ToolAuth {\n envVar: string;\n present: boolean;\n}\n\nexport interface ToolOperation {\n name: string;\n method: string;\n endpoint: string;\n}\n\nexport interface ToolDefinition {\n id: string;\n doc: HarnessDocument;\n tags: string[];\n status: string;\n auth: ToolAuth[];\n operations: ToolOperation[];\n rateLimits: string[];\n gotchas: string[];\n}\n\nexport interface ToolSummary {\n id: string;\n l0: string;\n tags: string[];\n status: string;\n authReady: boolean;\n operationCount: number;\n}\n\n/**\n * Extract environment variable names from authentication section.\n * Looks for `ENV_VAR_NAME` patterns (all-caps with underscores) in the auth section.\n */\nfunction extractAuth(body: string): ToolAuth[] {\n const authSection = body.match(/## Authentication\\s*\\n([\\s\\S]*?)(?=\\n## |\\n$|$)/i);\n if (!authSection) return [];\n\n const envVarPattern = /`([A-Z][A-Z0-9_]+)`/g;\n const vars: ToolAuth[] = [];\n const seen = new Set<string>();\n let match: RegExpExecArray | null;\n\n while ((match = envVarPattern.exec(authSection[1])) !== null) {\n const envVar = match[1];\n if (!seen.has(envVar)) {\n seen.add(envVar);\n vars.push({\n envVar,\n present: process.env[envVar] !== undefined && process.env[envVar] !== '',\n });\n }\n }\n\n return vars;\n}\n\n/**\n * Extract operations from Common Operations / Operations sections.\n * Looks for lines with HTTP method + endpoint patterns.\n */\nfunction extractOperations(body: string): ToolOperation[] {\n const opsSection = body.match(/## (?:Common )?Operations\\s*\\n([\\s\\S]*?)(?=\\n## |\\n$|$)/i);\n if (!opsSection) return [];\n\n const ops: ToolOperation[] = [];\n const lines = opsSection[1].split('\\n');\n let currentSection = '';\n\n for (const line of lines) {\n const headingMatch = line.match(/^### (.+)/);\n if (headingMatch) {\n currentSection = headingMatch[1].trim();\n continue;\n }\n\n // Match patterns like: `GET /repos/{owner}/{repo}/pulls`\n // or: POST /sendMessage\n const opMatch = line.match(/`?(GET|POST|PUT|DELETE|PATCH)\\s+(\\S+?)`?(?:\\s|$)/);\n if (opMatch) {\n const name = currentSection\n ? `${currentSection}: ${opMatch[2].split('/').pop() || opMatch[2]}`\n : opMatch[2].split('/').pop() || opMatch[2];\n ops.push({\n name,\n method: opMatch[1],\n endpoint: opMatch[2],\n });\n }\n }\n\n return ops;\n}\n\n/**\n * Extract rate limit lines from Rate Limits section.\n */\nfunction extractRateLimits(body: string): string[] {\n const section = body.match(/## Rate Limits\\s*\\n([\\s\\S]*?)(?=\\n## |\\n$|$)/i);\n if (!section) return [];\n\n return section[1]\n .split('\\n')\n .filter((l) => l.startsWith('- '))\n .map((l) => l.replace(/^- /, '').trim());\n}\n\n/**\n * Extract gotchas/caveats from Gotchas section.\n */\nfunction extractGotchas(body: string): string[] {\n const section = body.match(/## Gotchas\\s*\\n([\\s\\S]*?)(?=\\n## |\\n$|$)/i);\n if (!section) return [];\n\n return section[1]\n .split('\\n')\n .filter((l) => l.startsWith('- '))\n .map((l) => l.replace(/^- /, '').trim());\n}\n\n/**\n * Parse a tool document into a structured ToolDefinition.\n */\nexport function parseToolDefinition(doc: HarnessDocument): ToolDefinition {\n return {\n id: doc.frontmatter.id,\n doc,\n tags: doc.frontmatter.tags,\n status: doc.frontmatter.status,\n auth: extractAuth(doc.body),\n operations: extractOperations(doc.body),\n rateLimits: extractRateLimits(doc.body),\n gotchas: extractGotchas(doc.body),\n };\n}\n\n/**\n * Load all tool definitions from the tools/ directory.\n */\nexport function loadTools(harnessDir: string): ToolDefinition[] {\n const toolsDir = join(harnessDir, 'tools');\n if (!existsSync(toolsDir)) return [];\n\n const docs = loadDirectory(toolsDir);\n return docs.map(parseToolDefinition);\n}\n\n/**\n * Get a specific tool definition by ID.\n */\nexport function getToolById(harnessDir: string, toolId: string): ToolDefinition | null {\n const tools = loadTools(harnessDir);\n return tools.find((t) => t.id === toolId) ?? null;\n}\n\n/**\n * List tools with summary info (without full document content).\n */\nexport function listToolSummaries(harnessDir: string): ToolSummary[] {\n const tools = loadTools(harnessDir);\n return tools.map((t) => ({\n id: t.id,\n l0: t.doc.l0,\n tags: t.tags,\n status: t.status,\n authReady: t.auth.length === 0 || t.auth.every((a) => a.present),\n operationCount: t.operations.length,\n }));\n}\n\n/**\n * Check auth status for a specific tool or all tools.\n */\nexport function checkToolAuth(harnessDir: string, toolId?: string): Array<{ tool: string; auth: ToolAuth[] }> {\n const tools = toolId\n ? [getToolById(harnessDir, toolId)].filter((t): t is ToolDefinition => t !== null)\n : loadTools(harnessDir);\n\n return tools.map((t) => ({\n tool: t.id,\n auth: t.auth,\n }));\n}\n"],"mappings":"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","names":[]}
|
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
import {
|
|
4
4
|
loadDirectoryWithErrors
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-2UVWCTAY.js";
|
|
6
6
|
import {
|
|
7
7
|
getPrimitiveDirs
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-4TQQZILG.js";
|
|
9
9
|
|
|
10
10
|
// src/runtime/graph.ts
|
|
11
11
|
import { existsSync } from "fs";
|
|
@@ -159,4 +159,4 @@ export {
|
|
|
159
159
|
buildDependencyGraph,
|
|
160
160
|
getGraphStats
|
|
161
161
|
};
|
|
162
|
-
//# sourceMappingURL=chunk-
|
|
162
|
+
//# sourceMappingURL=chunk-QMOIVORH.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/runtime/graph.ts"],"sourcesContent":["import { existsSync } from 'fs';\nimport { join, relative } from 'path';\nimport { loadDirectoryWithErrors } from '../primitives/loader.js';\nimport { getPrimitiveDirs } from '../core/types.js';\nimport type { HarnessConfig } from '../core/types.js';\n\nexport interface GraphNode {\n id: string;\n directory: string;\n path: string;\n tags: string[];\n status: string;\n l0: string;\n}\n\nexport interface GraphEdge {\n from: string;\n to: string;\n type: 'related' | 'with';\n}\n\nexport interface DependencyGraph {\n nodes: GraphNode[];\n edges: GraphEdge[];\n orphans: string[];\n clusters: string[][];\n}\n\nexport interface GraphStats {\n totalNodes: number;\n totalEdges: number;\n orphanCount: number;\n clusterCount: number;\n mostConnected: Array<{ id: string; connections: number }>;\n brokenRefs: Array<{ from: string; ref: string }>;\n}\n\n/**\n * Build a dependency graph from all primitives in the harness.\n * Analyzes `related:` and `with:` frontmatter fields to create edges.\n */\nexport function buildDependencyGraph(harnessDir: string, config?: HarnessConfig): DependencyGraph {\n const dirs = getPrimitiveDirs(config);\n const nodes: GraphNode[] = [];\n const edges: GraphEdge[] = [];\n const nodeIds = new Set<string>();\n\n // Load all primitives\n for (const dir of dirs) {\n const fullPath = join(harnessDir, dir);\n if (!existsSync(fullPath)) continue;\n\n const { docs } = loadDirectoryWithErrors(fullPath);\n for (const doc of docs) {\n const id = doc.frontmatter.id;\n nodeIds.add(id);\n nodes.push({\n id,\n directory: dir,\n path: relative(harnessDir, doc.path),\n tags: doc.frontmatter.tags,\n status: doc.frontmatter.status,\n l0: doc.l0,\n });\n }\n }\n\n // Build edges from related: and with: fields\n for (const dir of dirs) {\n const fullPath = join(harnessDir, dir);\n if (!existsSync(fullPath)) continue;\n\n const { docs } = loadDirectoryWithErrors(fullPath);\n for (const doc of docs) {\n const fromId = doc.frontmatter.id;\n\n // related: field edges\n for (const ref of doc.frontmatter.related) {\n const targetId = resolveRef(ref, nodeIds, harnessDir);\n if (targetId) {\n edges.push({ from: fromId, to: targetId, type: 'related' });\n }\n }\n\n // with: field edges (agent delegation reference)\n if (doc.frontmatter.with) {\n const withRef = doc.frontmatter.with;\n const targetId = resolveRef(withRef, nodeIds, harnessDir);\n if (targetId) {\n edges.push({ from: fromId, to: targetId, type: 'with' });\n }\n }\n }\n }\n\n // Find orphans (nodes with no edges in or out)\n const connected = new Set<string>();\n for (const edge of edges) {\n connected.add(edge.from);\n connected.add(edge.to);\n }\n const orphans = nodes\n .filter((n) => !connected.has(n.id))\n .map((n) => n.id);\n\n // Find clusters (connected components)\n const clusters = findClusters(nodes, edges);\n\n return { nodes, edges, orphans, clusters };\n}\n\n/**\n * Resolve a reference to a node ID. Handles:\n * - Direct ID match (e.g., \"tool-github\")\n * - Path-style refs (e.g., \"skills/code-review\" or \"agents/reviewer\")\n */\nfunction resolveRef(ref: string, knownIds: Set<string>, harnessDir: string): string | null {\n // Direct ID match\n if (knownIds.has(ref)) return ref;\n\n // Path-style ref: extract the filename part as potential ID\n if (ref.includes('/')) {\n const parts = ref.split('/');\n const filename = parts[parts.length - 1].replace(/\\.md$/, '');\n if (knownIds.has(filename)) return filename;\n\n // Try with directory prefix as part of ID\n const withDir = parts.join('-');\n if (knownIds.has(withDir)) return withDir;\n }\n\n return null;\n}\n\n/**\n * Find connected components using union-find.\n */\nfunction findClusters(nodes: GraphNode[], edges: GraphEdge[]): string[][] {\n const parent = new Map<string, string>();\n\n for (const node of nodes) {\n parent.set(node.id, node.id);\n }\n\n function find(id: string): string {\n let root = id;\n while (parent.get(root) !== root) {\n root = parent.get(root)!;\n }\n // Path compression\n let current = id;\n while (current !== root) {\n const next = parent.get(current)!;\n parent.set(current, root);\n current = next;\n }\n return root;\n }\n\n function union(a: string, b: string): void {\n const rootA = find(a);\n const rootB = find(b);\n if (rootA !== rootB) {\n parent.set(rootA, rootB);\n }\n }\n\n for (const edge of edges) {\n if (parent.has(edge.from) && parent.has(edge.to)) {\n union(edge.from, edge.to);\n }\n }\n\n // Group by root\n const groups = new Map<string, string[]>();\n for (const node of nodes) {\n const root = find(node.id);\n if (!groups.has(root)) {\n groups.set(root, []);\n }\n groups.get(root)!.push(node.id);\n }\n\n // Return only clusters with more than 1 member (singletons are orphans)\n return Array.from(groups.values())\n .filter((g) => g.length > 1)\n .sort((a, b) => b.length - a.length);\n}\n\n/**\n * Get statistics about the dependency graph.\n */\nexport function getGraphStats(harnessDir: string, config?: HarnessConfig): GraphStats {\n const graph = buildDependencyGraph(harnessDir, config);\n\n // Count connections per node\n const connectionCount = new Map<string, number>();\n for (const node of graph.nodes) {\n connectionCount.set(node.id, 0);\n }\n for (const edge of graph.edges) {\n connectionCount.set(edge.from, (connectionCount.get(edge.from) ?? 0) + 1);\n connectionCount.set(edge.to, (connectionCount.get(edge.to) ?? 0) + 1);\n }\n\n const mostConnected = Array.from(connectionCount.entries())\n .filter(([, count]) => count > 0)\n .sort((a, b) => b[1] - a[1])\n .slice(0, 5)\n .map(([id, connections]) => ({ id, connections }));\n\n // Find broken references (references that didn't resolve to known IDs)\n const brokenRefs: Array<{ from: string; ref: string }> = [];\n const nodeIds = new Set(graph.nodes.map((n) => n.id));\n\n for (const dir of getPrimitiveDirs(config)) {\n const fullPath = join(harnessDir, dir);\n if (!existsSync(fullPath)) continue;\n\n const { docs } = loadDirectoryWithErrors(fullPath);\n for (const doc of docs) {\n for (const ref of doc.frontmatter.related) {\n const resolved = resolveRef(ref, nodeIds, harnessDir);\n if (!resolved) {\n brokenRefs.push({ from: doc.frontmatter.id, ref });\n }\n }\n if (doc.frontmatter.with) {\n const resolved = resolveRef(doc.frontmatter.with, nodeIds, harnessDir);\n if (!resolved) {\n brokenRefs.push({ from: doc.frontmatter.id, ref: doc.frontmatter.with });\n }\n }\n }\n }\n\n return {\n totalNodes: graph.nodes.length,\n totalEdges: graph.edges.length,\n orphanCount: graph.orphans.length,\n clusterCount: graph.clusters.length,\n mostConnected,\n brokenRefs,\n };\n}\n"],"mappings":"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","names":[]}
|
|
@@ -2,13 +2,13 @@
|
|
|
2
2
|
|
|
3
3
|
import {
|
|
4
4
|
collectSnapshot
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-5O5OGOOQ.js";
|
|
6
6
|
import {
|
|
7
7
|
validateMcpConfig
|
|
8
8
|
} from "./chunk-5H34JPMB.js";
|
|
9
9
|
import {
|
|
10
10
|
Conversation
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-UMXPOYZR.js";
|
|
12
12
|
import {
|
|
13
13
|
loadState,
|
|
14
14
|
saveState
|
|
@@ -20,16 +20,16 @@ import {
|
|
|
20
20
|
loadAllPrimitives,
|
|
21
21
|
loadDirectory,
|
|
22
22
|
parseHarnessDocument
|
|
23
|
-
} from "./chunk-
|
|
23
|
+
} from "./chunk-2UVWCTAY.js";
|
|
24
24
|
import {
|
|
25
25
|
log
|
|
26
26
|
} from "./chunk-BSKDOFRT.js";
|
|
27
27
|
import {
|
|
28
28
|
loadConfig
|
|
29
|
-
} from "./chunk-
|
|
29
|
+
} from "./chunk-EC42HQQH.js";
|
|
30
30
|
import {
|
|
31
31
|
CORE_PRIMITIVE_DIRS
|
|
32
|
-
} from "./chunk-
|
|
32
|
+
} from "./chunk-4TQQZILG.js";
|
|
33
33
|
|
|
34
34
|
// node_modules/hono/dist/compose.js
|
|
35
35
|
var compose = (middleware, onError, onNotFound) => {
|
|
@@ -3437,4 +3437,4 @@ export {
|
|
|
3437
3437
|
createWebApp,
|
|
3438
3438
|
startWebServer
|
|
3439
3439
|
};
|
|
3440
|
-
//# sourceMappingURL=chunk-
|
|
3440
|
+
//# sourceMappingURL=chunk-SEHAQTBO.js.map
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import {
|
|
4
4
|
buildSystemPrompt
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-7GZ4D6V6.js";
|
|
6
6
|
import {
|
|
7
7
|
createSessionId,
|
|
8
8
|
writeSession
|
|
@@ -12,7 +12,7 @@ import {
|
|
|
12
12
|
} from "./chunk-Z2PUCXTZ.js";
|
|
13
13
|
import {
|
|
14
14
|
estimateTokens
|
|
15
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-2UVWCTAY.js";
|
|
16
16
|
import {
|
|
17
17
|
log
|
|
18
18
|
} from "./chunk-BSKDOFRT.js";
|
|
@@ -23,7 +23,7 @@ import {
|
|
|
23
23
|
} from "./chunk-IZ6UZ3ZL.js";
|
|
24
24
|
import {
|
|
25
25
|
loadConfig
|
|
26
|
-
} from "./chunk-
|
|
26
|
+
} from "./chunk-EC42HQQH.js";
|
|
27
27
|
|
|
28
28
|
// src/runtime/conversation.ts
|
|
29
29
|
import { readFileSync, writeFileSync, existsSync, mkdirSync } from "fs";
|
|
@@ -371,4 +371,4 @@ export {
|
|
|
371
371
|
parseJsonlContext,
|
|
372
372
|
parseLegacyContext
|
|
373
373
|
};
|
|
374
|
-
//# sourceMappingURL=chunk-
|
|
374
|
+
//# sourceMappingURL=chunk-UMXPOYZR.js.map
|
|
@@ -2,14 +2,14 @@
|
|
|
2
2
|
|
|
3
3
|
import {
|
|
4
4
|
writeIndexFile
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-D7AWV24Z.js";
|
|
6
6
|
import {
|
|
7
7
|
loadDirectory,
|
|
8
8
|
parseHarnessDocument
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-2UVWCTAY.js";
|
|
10
10
|
import {
|
|
11
11
|
getPrimitiveDirs
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-4TQQZILG.js";
|
|
13
13
|
|
|
14
14
|
// src/runtime/intake.ts
|
|
15
15
|
import { readFileSync, writeFileSync, unlinkSync, existsSync, mkdirSync, readdirSync, copyFileSync } from "fs";
|
|
@@ -343,4 +343,4 @@ export {
|
|
|
343
343
|
processIntake,
|
|
344
344
|
downloadCapability
|
|
345
345
|
};
|
|
346
|
-
//# sourceMappingURL=chunk-
|
|
346
|
+
//# sourceMappingURL=chunk-UXCHAS3Z.js.map
|