@goondocks/myco 0.20.2 → 0.21.0
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/agent-eval-RJSQI5S2.js +355 -0
- package/dist/agent-eval-RJSQI5S2.js.map +1 -0
- package/dist/{agent-run-X25Q2A6T.js → agent-run-2JSYFOKU.js} +10 -8
- package/dist/{agent-run-X25Q2A6T.js.map → agent-run-2JSYFOKU.js.map} +1 -1
- package/dist/{agent-tasks-7B6OFERB.js → agent-tasks-APFJIM2T.js} +10 -8
- package/dist/{agent-tasks-7B6OFERB.js.map → agent-tasks-APFJIM2T.js.map} +1 -1
- package/dist/{chunk-OD4AA7PV.js → chunk-53RPGOEN.js} +56 -8
- package/dist/chunk-53RPGOEN.js.map +1 -0
- package/dist/chunk-54SXG5HF.js +26 -0
- package/dist/chunk-54SXG5HF.js.map +1 -0
- package/dist/{chunk-DCSGJ7W4.js → chunk-5ZG4RMUH.js} +2 -2
- package/dist/{chunk-FLLBJLHM.js → chunk-6C6QZ4PM.js} +9 -5
- package/dist/chunk-6C6QZ4PM.js.map +1 -0
- package/dist/chunk-6LB7XELY.js +406 -0
- package/dist/chunk-6LB7XELY.js.map +1 -0
- package/dist/{chunk-JZGN33AY.js → chunk-75Z7UKDY.js} +4 -4
- package/dist/{chunk-XG5RRUYF.js → chunk-BUTL6IFS.js} +2 -2
- package/dist/chunk-CESKJD44.js +586 -0
- package/dist/chunk-CESKJD44.js.map +1 -0
- package/dist/chunk-CISWUP5W.js +101 -0
- package/dist/chunk-CISWUP5W.js.map +1 -0
- package/dist/chunk-DJ3IHNYO.js +50 -0
- package/dist/chunk-DJ3IHNYO.js.map +1 -0
- package/dist/chunk-F3OEQYLS.js +847 -0
- package/dist/chunk-F3OEQYLS.js.map +1 -0
- package/dist/{chunk-6RFZWV4R.js → chunk-FCJ5JV54.js} +1 -1
- package/dist/{chunk-6RFZWV4R.js.map → chunk-FCJ5JV54.js.map} +1 -1
- package/dist/{chunk-2PDWCDKY.js → chunk-G6QIBNZM.js} +9 -6
- package/dist/{chunk-2PDWCDKY.js.map → chunk-G6QIBNZM.js.map} +1 -1
- package/dist/{chunk-6X2ERTQV.js → chunk-ILJPRYES.js} +6 -4
- package/dist/{chunk-6X2ERTQV.js.map → chunk-ILJPRYES.js.map} +1 -1
- package/dist/{chunk-US4LNCAT.js → chunk-IPPMYQ2Y.js} +5 -1
- package/dist/chunk-IPPMYQ2Y.js.map +1 -0
- package/dist/{chunk-KESLPBKV.js → chunk-JR54LTPP.js} +4 -4
- package/dist/{chunk-CCRGY3QW.js → chunk-JZS6GZ6T.js} +16 -94
- package/dist/chunk-JZS6GZ6T.js.map +1 -0
- package/dist/{chunk-5XIVBO25.js → chunk-LVIY7P35.js} +2 -2
- package/dist/chunk-NGH7U6A3.js +13844 -0
- package/dist/chunk-NGH7U6A3.js.map +1 -0
- package/dist/chunk-OUJSQSKE.js +113 -0
- package/dist/chunk-OUJSQSKE.js.map +1 -0
- package/dist/{chunk-VVNL26WX.js → chunk-P66DLD6G.js} +22 -10
- package/dist/chunk-P66DLD6G.js.map +1 -0
- package/dist/{chunk-XATDZX7U.js → chunk-R2JIJBCL.js} +18 -4
- package/dist/{chunk-XATDZX7U.js.map → chunk-R2JIJBCL.js.map} +1 -1
- package/dist/{chunk-MYOZLMB2.js → chunk-RL5R4CQU.js} +538 -19
- package/dist/chunk-RL5R4CQU.js.map +1 -0
- package/dist/{chunk-EVDQKYCG.js → chunk-RQSJLWP4.js} +13 -2
- package/dist/chunk-RQSJLWP4.js.map +1 -0
- package/dist/{chunk-BPRIYNLE.js → chunk-TKAJ3JVF.js} +3 -3
- package/dist/{chunk-Q36VMZST.js → chunk-VHNRMM4O.js} +3 -2
- package/dist/{chunk-FMRZ26U5.js → chunk-X3IGT5RV.js} +5 -2
- package/dist/{chunk-FMRZ26U5.js.map → chunk-X3IGT5RV.js.map} +1 -1
- package/dist/{chunk-KHT24OWC.js → chunk-YDUOSRGD.js} +8 -94
- package/dist/{chunk-KHT24OWC.js.map → chunk-YDUOSRGD.js.map} +1 -1
- package/dist/{cli-GGPWH4UO.js → cli-LNYSTDQM.js} +49 -42
- package/dist/cli-LNYSTDQM.js.map +1 -0
- package/dist/{client-YXQUTXVZ.js → client-NWE4TCNO.js} +4 -4
- package/dist/{config-OMCYHG2S.js → config-VC4ACP42.js} +6 -4
- package/dist/{config-OMCYHG2S.js.map → config-VC4ACP42.js.map} +1 -1
- package/dist/{detect-providers-5KOPZ7J2.js → detect-providers-ILLQZROY.js} +4 -4
- package/dist/{doctor-5JXJ36KA.js → doctor-TI7EZ3RW.js} +48 -15
- package/dist/doctor-TI7EZ3RW.js.map +1 -0
- package/dist/executor-F2YU7HXJ.js +44 -0
- package/dist/{init-LMYOVZAV.js → init-KG3TYVGE.js} +14 -12
- package/dist/{init-LMYOVZAV.js.map → init-KG3TYVGE.js.map} +1 -1
- package/dist/{installer-FS257JRZ.js → installer-UMH7OJ5A.js} +6 -4
- package/dist/{llm-TH4NLIRM.js → llm-AGVEF5XD.js} +5 -4
- package/dist/{loader-CQYTFHEW.js → loader-LX7TFRM6.js} +5 -3
- package/dist/{loader-NOMBJUPW.js → loader-NAVVZK63.js} +4 -3
- package/dist/{main-YTBVRTBI.js → main-5PRQNEEE.js} +2453 -650
- package/dist/main-5PRQNEEE.js.map +1 -0
- package/dist/{open-HG2DX6RN.js → open-5A27BCSB.js} +10 -8
- package/dist/{open-HG2DX6RN.js.map → open-5A27BCSB.js.map} +1 -1
- package/dist/{post-compact-JSECI44W.js → post-compact-USAODKPQ.js} +6 -6
- package/dist/{post-tool-use-POGPTJBA.js → post-tool-use-GMMSYBII.js} +9 -7
- package/dist/post-tool-use-GMMSYBII.js.map +1 -0
- package/dist/{post-tool-use-failure-OT7BFWQW.js → post-tool-use-failure-NZVSL2PO.js} +6 -6
- package/dist/{pre-compact-OXVODKH4.js → pre-compact-LZ57DLUS.js} +6 -6
- package/dist/{provider-check-43LAMSMH.js → provider-check-ZEV5P4KM.js} +4 -4
- package/dist/{registry-U4CHXK6R.js → registry-M2Z5QBWH.js} +5 -4
- package/dist/{remove-N7ZPELFU.js → remove-T3KE6C5N.js} +10 -8
- package/dist/{remove-N7ZPELFU.js.map → remove-T3KE6C5N.js.map} +1 -1
- package/dist/{restart-ADG5GBTB.js → restart-YWDEVZUJ.js} +11 -9
- package/dist/{restart-ADG5GBTB.js.map → restart-YWDEVZUJ.js.map} +1 -1
- package/dist/{search-AHZEUNRR.js → search-GKFDGELR.js} +11 -9
- package/dist/{search-AHZEUNRR.js.map → search-GKFDGELR.js.map} +1 -1
- package/dist/{server-AGVYZVP5.js → server-AHUR6CWF.js} +368 -269
- package/dist/server-AHUR6CWF.js.map +1 -0
- package/dist/{session-6IU4AXYP.js → session-2ZEPLWW6.js} +11 -9
- package/dist/{session-6IU4AXYP.js.map → session-2ZEPLWW6.js.map} +1 -1
- package/dist/{session-end-FT27DWYZ.js → session-end-LWJYQAXX.js} +5 -5
- package/dist/session-start-WTA6GCOQ.js +134 -0
- package/dist/session-start-WTA6GCOQ.js.map +1 -0
- package/dist/{setup-llm-77MP4I2G.js → setup-llm-E7UU5IO7.js} +11 -9
- package/dist/{setup-llm-77MP4I2G.js.map → setup-llm-E7UU5IO7.js.map} +1 -1
- package/dist/src/agent/definitions/agent.yaml +9 -5
- package/dist/src/agent/definitions/tasks/cortex-instructions.yaml +93 -0
- package/dist/src/agent/definitions/tasks/cortex-prompt-builder.yaml +67 -0
- package/dist/src/agent/definitions/tasks/digest-only.yaml +1 -1
- package/dist/src/agent/definitions/tasks/extract-only.yaml +1 -1
- package/dist/src/agent/definitions/tasks/review-session.yaml +10 -39
- package/dist/src/agent/definitions/tasks/skill-evolve.yaml +4 -4
- package/dist/src/agent/definitions/tasks/skill-generate.yaml +1 -1
- package/dist/src/agent/definitions/tasks/skill-survey.yaml +2 -6
- package/dist/src/agent/definitions/tasks/supersession-sweep.yaml +1 -1
- package/dist/src/agent/definitions/tasks/title-summary.yaml +12 -19
- package/dist/src/agent/definitions/tasks/{full-intelligence.yaml → vault-evolve.yaml} +17 -82
- package/dist/src/agent/definitions/tasks/vault-seed.yaml +370 -0
- package/dist/src/agent/prompts/agent.md +12 -38
- package/dist/src/cli.js +1 -1
- package/dist/src/daemon/main.js +1 -1
- package/dist/src/hooks/post-tool-use.js +1 -1
- package/dist/src/hooks/session-end.js +1 -1
- package/dist/src/hooks/session-start.js +1 -1
- package/dist/src/hooks/stop.js +1 -1
- package/dist/src/hooks/user-prompt-submit.js +1 -1
- package/dist/src/mcp/server.js +1 -1
- package/dist/src/symbionts/manifests/claude-code.yaml +4 -0
- package/dist/src/symbionts/manifests/pi.yaml +22 -0
- package/dist/src/symbionts/templates/pi/package.json +6 -0
- package/dist/src/symbionts/templates/pi/plugin.ts +559 -0
- package/dist/{stats-NVPWOYTE.js → stats-DFG6S23S.js} +11 -9
- package/dist/{stats-NVPWOYTE.js.map → stats-DFG6S23S.js.map} +1 -1
- package/dist/{stop-ZPIKVLH4.js → stop-WRBTXEVT.js} +5 -5
- package/dist/{stop-failure-2PX67YJC.js → stop-failure-32MGIG2Q.js} +6 -6
- package/dist/{subagent-start-UUE6EHQD.js → subagent-start-VFGHQFVL.js} +6 -6
- package/dist/{subagent-stop-KQWWWPE6.js → subagent-stop-663FXG3P.js} +6 -6
- package/dist/{task-completed-WMHOFQ7B.js → task-completed-ZCQYEFMZ.js} +6 -6
- package/dist/{team-LRZ6GTQK.js → team-JTI5CDUO.js} +7 -5
- package/dist/{turns-YFNI5CQC.js → turns-HU2CTZAP.js} +2 -2
- package/dist/ui/assets/index-DGf1h-Ha.js +842 -0
- package/dist/ui/assets/index-_OP4ifzH.css +1 -0
- package/dist/ui/index.html +2 -2
- package/dist/{update-O6V4RC4W.js → update-3NBQTG32.js} +10 -8
- package/dist/{update-O6V4RC4W.js.map → update-3NBQTG32.js.map} +1 -1
- package/dist/{user-prompt-submit-N36KUPHI.js → user-prompt-submit-ME2TBKOS.js} +8 -7
- package/dist/{user-prompt-submit-N36KUPHI.js.map → user-prompt-submit-ME2TBKOS.js.map} +1 -1
- package/dist/{verify-LXPV7NYG.js → verify-R76ZFJSZ.js} +8 -5
- package/dist/{verify-LXPV7NYG.js.map → verify-R76ZFJSZ.js.map} +1 -1
- package/dist/{version-XMPPJQHR.js → version-GQAFBBPX.js} +2 -2
- package/dist/version-GQAFBBPX.js.map +1 -0
- package/package.json +3 -1
- package/skills/myco/SKILL.md +16 -1
- package/skills/myco/references/cli-usage.md +1 -1
- package/skills/myco-curate/SKILL.md +1 -1
- package/dist/chunk-4YFKBL3F.js +0 -195
- package/dist/chunk-4YFKBL3F.js.map +0 -1
- package/dist/chunk-CCRGY3QW.js.map +0 -1
- package/dist/chunk-EVDQKYCG.js.map +0 -1
- package/dist/chunk-FLLBJLHM.js.map +0 -1
- package/dist/chunk-MYOZLMB2.js.map +0 -1
- package/dist/chunk-OD4AA7PV.js.map +0 -1
- package/dist/chunk-US4LNCAT.js.map +0 -1
- package/dist/chunk-UYMFCYBF.js +0 -2326
- package/dist/chunk-UYMFCYBF.js.map +0 -1
- package/dist/chunk-VVNL26WX.js.map +0 -1
- package/dist/cli-GGPWH4UO.js.map +0 -1
- package/dist/doctor-5JXJ36KA.js.map +0 -1
- package/dist/executor-HWW2QNZQ.js +0 -2472
- package/dist/executor-HWW2QNZQ.js.map +0 -1
- package/dist/main-YTBVRTBI.js.map +0 -1
- package/dist/post-tool-use-POGPTJBA.js.map +0 -1
- package/dist/server-AGVYZVP5.js.map +0 -1
- package/dist/session-start-LAFICHII.js +0 -189
- package/dist/session-start-LAFICHII.js.map +0 -1
- package/dist/src/agent/definitions/tasks/graph-maintenance.yaml +0 -93
- package/dist/ui/assets/index-C2JuNtRB.css +0 -1
- package/dist/ui/assets/index-JLVaQKV2.js +0 -832
- /package/dist/{chunk-DCSGJ7W4.js.map → chunk-5ZG4RMUH.js.map} +0 -0
- /package/dist/{chunk-JZGN33AY.js.map → chunk-75Z7UKDY.js.map} +0 -0
- /package/dist/{chunk-XG5RRUYF.js.map → chunk-BUTL6IFS.js.map} +0 -0
- /package/dist/{chunk-KESLPBKV.js.map → chunk-JR54LTPP.js.map} +0 -0
- /package/dist/{chunk-5XIVBO25.js.map → chunk-LVIY7P35.js.map} +0 -0
- /package/dist/{chunk-BPRIYNLE.js.map → chunk-TKAJ3JVF.js.map} +0 -0
- /package/dist/{chunk-Q36VMZST.js.map → chunk-VHNRMM4O.js.map} +0 -0
- /package/dist/{client-YXQUTXVZ.js.map → client-NWE4TCNO.js.map} +0 -0
- /package/dist/{detect-providers-5KOPZ7J2.js.map → detect-providers-ILLQZROY.js.map} +0 -0
- /package/dist/{installer-FS257JRZ.js.map → executor-F2YU7HXJ.js.map} +0 -0
- /package/dist/{llm-TH4NLIRM.js.map → installer-UMH7OJ5A.js.map} +0 -0
- /package/dist/{loader-CQYTFHEW.js.map → llm-AGVEF5XD.js.map} +0 -0
- /package/dist/{loader-NOMBJUPW.js.map → loader-LX7TFRM6.js.map} +0 -0
- /package/dist/{provider-check-43LAMSMH.js.map → loader-NAVVZK63.js.map} +0 -0
- /package/dist/{post-compact-JSECI44W.js.map → post-compact-USAODKPQ.js.map} +0 -0
- /package/dist/{post-tool-use-failure-OT7BFWQW.js.map → post-tool-use-failure-NZVSL2PO.js.map} +0 -0
- /package/dist/{pre-compact-OXVODKH4.js.map → pre-compact-LZ57DLUS.js.map} +0 -0
- /package/dist/{registry-U4CHXK6R.js.map → provider-check-ZEV5P4KM.js.map} +0 -0
- /package/dist/{team-LRZ6GTQK.js.map → registry-M2Z5QBWH.js.map} +0 -0
- /package/dist/{session-end-FT27DWYZ.js.map → session-end-LWJYQAXX.js.map} +0 -0
- /package/dist/{stop-ZPIKVLH4.js.map → stop-WRBTXEVT.js.map} +0 -0
- /package/dist/{stop-failure-2PX67YJC.js.map → stop-failure-32MGIG2Q.js.map} +0 -0
- /package/dist/{subagent-start-UUE6EHQD.js.map → subagent-start-VFGHQFVL.js.map} +0 -0
- /package/dist/{subagent-stop-KQWWWPE6.js.map → subagent-stop-663FXG3P.js.map} +0 -0
- /package/dist/{task-completed-WMHOFQ7B.js.map → task-completed-ZCQYEFMZ.js.map} +0 -0
- /package/dist/{turns-YFNI5CQC.js.map → team-JTI5CDUO.js.map} +0 -0
- /package/dist/{version-XMPPJQHR.js.map → turns-HU2CTZAP.js.map} +0 -0
|
@@ -0,0 +1,406 @@
|
|
|
1
|
+
import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
|
|
2
|
+
|
|
3
|
+
// src/utils/error-message.ts
|
|
4
|
+
function errorMessage(err) {
|
|
5
|
+
if (err instanceof Error) return err.message || err.constructor.name || "Error";
|
|
6
|
+
if (typeof err === "string") return err || "Empty string error";
|
|
7
|
+
try {
|
|
8
|
+
return JSON.stringify(err);
|
|
9
|
+
} catch {
|
|
10
|
+
return "Unserializable error";
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
// src/agent/executor-state.ts
|
|
15
|
+
var SESSION_RESUME_ERROR_PATTERNS = [
|
|
16
|
+
/session/,
|
|
17
|
+
/resume/,
|
|
18
|
+
/previous[_ ]response/,
|
|
19
|
+
/conversation/
|
|
20
|
+
];
|
|
21
|
+
function abortReasonMessage(abortController) {
|
|
22
|
+
if (!abortController?.signal.aborted) return null;
|
|
23
|
+
const reason = abortController.signal.reason;
|
|
24
|
+
if (reason instanceof Error) return reason.message;
|
|
25
|
+
if (typeof reason === "string" && reason.length > 0) return reason;
|
|
26
|
+
return "Agent run aborted";
|
|
27
|
+
}
|
|
28
|
+
function isSessionResumeFailure(error) {
|
|
29
|
+
const message = errorMessage(error).toLowerCase();
|
|
30
|
+
return SESSION_RESUME_ERROR_PATTERNS.some((pattern) => pattern.test(message));
|
|
31
|
+
}
|
|
32
|
+
function parseCheckpointState(raw) {
|
|
33
|
+
if (!raw) {
|
|
34
|
+
return { runtime: "claude-sdk", phases: {} };
|
|
35
|
+
}
|
|
36
|
+
try {
|
|
37
|
+
const parsed = JSON.parse(raw);
|
|
38
|
+
return {
|
|
39
|
+
runtime: parsed.runtime ?? "claude-sdk",
|
|
40
|
+
provider: parsed.provider,
|
|
41
|
+
providerConfig: parsed.providerConfig,
|
|
42
|
+
model: parsed.model,
|
|
43
|
+
sessionRef: parsed.sessionRef,
|
|
44
|
+
sessionData: parsed.sessionData,
|
|
45
|
+
phases: parsed.phases ?? {}
|
|
46
|
+
};
|
|
47
|
+
} catch {
|
|
48
|
+
return { runtime: "claude-sdk", phases: {} };
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
function checkpointResultsForResume(config, checkpointState) {
|
|
52
|
+
if (!config.phases) return [];
|
|
53
|
+
const order = new Map(config.phases.map((phase, index) => [phase.name, index]));
|
|
54
|
+
return Object.values(checkpointState.phases).filter((phase) => phase.status === "completed").sort((a, b) => (order.get(a.name) ?? 0) - (order.get(b.name) ?? 0)).map((phase) => buildPhaseResult({
|
|
55
|
+
name: phase.name,
|
|
56
|
+
status: "completed",
|
|
57
|
+
summary: phase.summary ?? "",
|
|
58
|
+
turnsUsed: phase.turnsUsed,
|
|
59
|
+
tokensUsed: phase.tokensUsed,
|
|
60
|
+
costUsd: phase.costUsd,
|
|
61
|
+
costSource: phase.costSource,
|
|
62
|
+
costData: phase.costData,
|
|
63
|
+
usage: phase.usage,
|
|
64
|
+
sessionRef: phase.sessionRef
|
|
65
|
+
}));
|
|
66
|
+
}
|
|
67
|
+
function buildPhaseResult(input) {
|
|
68
|
+
const {
|
|
69
|
+
name,
|
|
70
|
+
status,
|
|
71
|
+
summary,
|
|
72
|
+
usage,
|
|
73
|
+
costData,
|
|
74
|
+
turnsUsed,
|
|
75
|
+
tokensUsed,
|
|
76
|
+
costUsd,
|
|
77
|
+
costSource,
|
|
78
|
+
sessionRef,
|
|
79
|
+
sessionData
|
|
80
|
+
} = input;
|
|
81
|
+
return {
|
|
82
|
+
name,
|
|
83
|
+
status,
|
|
84
|
+
turnsUsed: turnsUsed ?? usage?.requests ?? 0,
|
|
85
|
+
tokensUsed: tokensUsed ?? usage?.totalTokens ?? 0,
|
|
86
|
+
costUsd: costUsd ?? costData?.costUsd ?? 0,
|
|
87
|
+
...costData ? { costSource: costData.source, costData } : costSource ? { costSource } : {},
|
|
88
|
+
...usage ? { usage } : {},
|
|
89
|
+
...sessionRef ? { sessionRef } : {},
|
|
90
|
+
...sessionData !== void 0 ? { sessionData } : {},
|
|
91
|
+
summary
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
function serializeCheckpointState(state) {
|
|
95
|
+
return JSON.stringify(state);
|
|
96
|
+
}
|
|
97
|
+
function aggregateUsage(usages) {
|
|
98
|
+
const aggregate = {
|
|
99
|
+
requests: 0,
|
|
100
|
+
inputTokens: 0,
|
|
101
|
+
outputTokens: 0,
|
|
102
|
+
totalTokens: 0,
|
|
103
|
+
reasoningTokens: 0,
|
|
104
|
+
cachedTokens: 0,
|
|
105
|
+
durationMs: 0
|
|
106
|
+
};
|
|
107
|
+
let sawCost = false;
|
|
108
|
+
for (const usage of usages) {
|
|
109
|
+
if (!usage) continue;
|
|
110
|
+
aggregate.requests = (aggregate.requests ?? 0) + (usage.requests ?? 0);
|
|
111
|
+
aggregate.inputTokens = (aggregate.inputTokens ?? 0) + (usage.inputTokens ?? 0);
|
|
112
|
+
aggregate.outputTokens = (aggregate.outputTokens ?? 0) + (usage.outputTokens ?? 0);
|
|
113
|
+
aggregate.totalTokens = (aggregate.totalTokens ?? 0) + (usage.totalTokens ?? 0);
|
|
114
|
+
aggregate.reasoningTokens = (aggregate.reasoningTokens ?? 0) + (usage.reasoningTokens ?? 0);
|
|
115
|
+
aggregate.cachedTokens = (aggregate.cachedTokens ?? 0) + (usage.cachedTokens ?? 0);
|
|
116
|
+
aggregate.durationMs = (aggregate.durationMs ?? 0) + (usage.durationMs ?? 0);
|
|
117
|
+
if (usage.costUsd !== void 0 && usage.costUsd !== null) {
|
|
118
|
+
aggregate.costUsd = (aggregate.costUsd ?? 0) + usage.costUsd;
|
|
119
|
+
sawCost = true;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
if (!sawCost) {
|
|
123
|
+
delete aggregate.costUsd;
|
|
124
|
+
}
|
|
125
|
+
return aggregate;
|
|
126
|
+
}
|
|
127
|
+
function buildUsageData(runUsage, runCost, phaseResults, runBudget) {
|
|
128
|
+
return JSON.stringify({
|
|
129
|
+
run: runUsage,
|
|
130
|
+
runCost: runCost ?? null,
|
|
131
|
+
runBudget: runBudget ?? null,
|
|
132
|
+
phases: phaseResults?.map((phase) => ({
|
|
133
|
+
name: phase.name,
|
|
134
|
+
usage: phase.usage ?? null,
|
|
135
|
+
turnsUsed: phase.turnsUsed,
|
|
136
|
+
tokensUsed: phase.tokensUsed,
|
|
137
|
+
costUsd: phase.costUsd,
|
|
138
|
+
costSource: phase.costSource ?? null,
|
|
139
|
+
costData: phase.costData ?? null
|
|
140
|
+
})) ?? []
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
function buildActionsTaken(runtime, provider, model, phaseResults) {
|
|
144
|
+
return JSON.stringify({
|
|
145
|
+
runtime,
|
|
146
|
+
model,
|
|
147
|
+
provider: provider?.type ?? "anthropic",
|
|
148
|
+
...provider?.baseUrl ? { baseUrl: provider.baseUrl } : {},
|
|
149
|
+
...phaseResults ? { phases: phaseResults } : {}
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
function resolveProviderForResume(currentProvider, resumedRun, checkpointState, runtime, model) {
|
|
153
|
+
const persistedType = resumedRun?.provider ?? checkpointState.provider;
|
|
154
|
+
const persistedProvider = checkpointState.providerConfig;
|
|
155
|
+
if (!persistedType && !persistedProvider) return currentProvider;
|
|
156
|
+
const matchingCurrentProvider = currentProvider?.type === persistedType ? currentProvider : void 0;
|
|
157
|
+
return {
|
|
158
|
+
...persistedProvider ?? {},
|
|
159
|
+
...matchingCurrentProvider ?? {},
|
|
160
|
+
runtime,
|
|
161
|
+
type: persistedType ?? persistedProvider?.type ?? currentProvider?.type ?? "anthropic",
|
|
162
|
+
model
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
// src/agent/context-windows.ts
|
|
167
|
+
var DEFAULT_LOCAL_AGENT_CONTEXT_WINDOW_TOKENS = 32768;
|
|
168
|
+
var DEFAULT_FRONTIER_CONTEXT_WINDOW_TOKENS = 2e5;
|
|
169
|
+
var DEFAULT_COMPATIBLE_CONTEXT_WINDOW_TOKENS = 128e3;
|
|
170
|
+
|
|
171
|
+
// src/agent/provider-runtime.ts
|
|
172
|
+
var PROVIDER_METADATA_BY_TYPE = {
|
|
173
|
+
anthropic: {
|
|
174
|
+
runtime: "claude-sdk",
|
|
175
|
+
defaultContextWindowTokens: DEFAULT_FRONTIER_CONTEXT_WINDOW_TOKENS
|
|
176
|
+
},
|
|
177
|
+
ollama: {
|
|
178
|
+
runtime: "claude-sdk",
|
|
179
|
+
defaultContextWindowTokens: DEFAULT_LOCAL_AGENT_CONTEXT_WINDOW_TOKENS
|
|
180
|
+
},
|
|
181
|
+
lmstudio: {
|
|
182
|
+
runtime: "claude-sdk",
|
|
183
|
+
defaultContextWindowTokens: DEFAULT_LOCAL_AGENT_CONTEXT_WINDOW_TOKENS
|
|
184
|
+
},
|
|
185
|
+
openai: {
|
|
186
|
+
runtime: "openai-agents",
|
|
187
|
+
defaultContextWindowTokens: DEFAULT_FRONTIER_CONTEXT_WINDOW_TOKENS
|
|
188
|
+
},
|
|
189
|
+
openrouter: {
|
|
190
|
+
runtime: "openai-agents",
|
|
191
|
+
defaultContextWindowTokens: DEFAULT_FRONTIER_CONTEXT_WINDOW_TOKENS
|
|
192
|
+
},
|
|
193
|
+
"openai-compatible": {
|
|
194
|
+
runtime: "openai-agents",
|
|
195
|
+
defaultContextWindowTokens: DEFAULT_COMPATIBLE_CONTEXT_WINDOW_TOKENS
|
|
196
|
+
}
|
|
197
|
+
};
|
|
198
|
+
function getProviderMetadata(providerType) {
|
|
199
|
+
if (!providerType) return void 0;
|
|
200
|
+
return PROVIDER_METADATA_BY_TYPE[providerType];
|
|
201
|
+
}
|
|
202
|
+
function inferRuntimeFromProviderType(providerType) {
|
|
203
|
+
return getProviderMetadata(providerType)?.runtime;
|
|
204
|
+
}
|
|
205
|
+
function inferDefaultContextWindowFromProviderType(providerType) {
|
|
206
|
+
return getProviderMetadata(providerType)?.defaultContextWindowTokens ?? null;
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
// src/agent/run-accounting.ts
|
|
210
|
+
var TOKEN_BUDGET_WARNING_PERCENT = 75;
|
|
211
|
+
var TOKEN_BUDGET_CRITICAL_PERCENT = 90;
|
|
212
|
+
function runDurationMs(run) {
|
|
213
|
+
if (run.started_at === null || run.completed_at === null) return null;
|
|
214
|
+
return (run.completed_at - run.started_at) * 1e3;
|
|
215
|
+
}
|
|
216
|
+
function toRequestTokenNumber(entry, key) {
|
|
217
|
+
const value = entry[key];
|
|
218
|
+
return typeof value === "number" ? value : 0;
|
|
219
|
+
}
|
|
220
|
+
function resolveContextWindow(provider, usage) {
|
|
221
|
+
if (provider?.contextLength) {
|
|
222
|
+
return { tokens: provider.contextLength, source: "provider-config" };
|
|
223
|
+
}
|
|
224
|
+
const providerData = usage.providerData;
|
|
225
|
+
if (providerData) {
|
|
226
|
+
const candidates = [
|
|
227
|
+
providerData.contextWindowTokens,
|
|
228
|
+
providerData.context_window,
|
|
229
|
+
providerData.maxContextTokens,
|
|
230
|
+
providerData.max_context_tokens
|
|
231
|
+
];
|
|
232
|
+
for (const candidate of candidates) {
|
|
233
|
+
if (typeof candidate === "number" && candidate > 0) {
|
|
234
|
+
return { tokens: candidate, source: "provider-metadata" };
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
const providerDefault = inferDefaultContextWindowFromProviderType(provider?.type);
|
|
239
|
+
if (providerDefault) {
|
|
240
|
+
return { tokens: providerDefault, source: "provider-default" };
|
|
241
|
+
}
|
|
242
|
+
return { tokens: null };
|
|
243
|
+
}
|
|
244
|
+
function analyzeRuntimeTokenBudget(usage, provider) {
|
|
245
|
+
const requestEntries = usage.requestUsageEntries && usage.requestUsageEntries.length > 0 ? usage.requestUsageEntries : [{
|
|
246
|
+
inputTokens: usage.inputTokens ?? 0,
|
|
247
|
+
outputTokens: usage.outputTokens ?? 0,
|
|
248
|
+
totalTokens: usage.totalTokens ?? (usage.inputTokens ?? 0) + (usage.outputTokens ?? 0)
|
|
249
|
+
}];
|
|
250
|
+
let peakRequestInputTokens = 0;
|
|
251
|
+
let peakRequestOutputTokens = 0;
|
|
252
|
+
let peakRequestTotalTokens = 0;
|
|
253
|
+
for (const entry of requestEntries) {
|
|
254
|
+
const input = toRequestTokenNumber(entry, "inputTokens");
|
|
255
|
+
const output = toRequestTokenNumber(entry, "outputTokens");
|
|
256
|
+
const total = toRequestTokenNumber(entry, "totalTokens");
|
|
257
|
+
if (input > peakRequestInputTokens) peakRequestInputTokens = input;
|
|
258
|
+
if (output > peakRequestOutputTokens) peakRequestOutputTokens = output;
|
|
259
|
+
if (total > peakRequestTotalTokens) peakRequestTotalTokens = total;
|
|
260
|
+
}
|
|
261
|
+
const { tokens: contextWindowTokens, source: contextWindowSource } = resolveContextWindow(provider, usage);
|
|
262
|
+
if (!contextWindowTokens) {
|
|
263
|
+
return {
|
|
264
|
+
contextWindowTokens: null,
|
|
265
|
+
peakRequestInputTokens: peakRequestInputTokens || null,
|
|
266
|
+
peakRequestOutputTokens: peakRequestOutputTokens || null,
|
|
267
|
+
peakRequestTotalTokens: peakRequestTotalTokens || null,
|
|
268
|
+
utilizationPercent: null,
|
|
269
|
+
headroomTokens: null,
|
|
270
|
+
status: "unknown",
|
|
271
|
+
message: "Context window unavailable for this provider/model."
|
|
272
|
+
};
|
|
273
|
+
}
|
|
274
|
+
const utilizationPercent = peakRequestTotalTokens > 0 ? Math.round(peakRequestTotalTokens / contextWindowTokens * 100) : 0;
|
|
275
|
+
const headroomTokens = Math.max(0, contextWindowTokens - peakRequestTotalTokens);
|
|
276
|
+
const status = utilizationPercent >= TOKEN_BUDGET_CRITICAL_PERCENT ? "post_run_pressure" : utilizationPercent >= TOKEN_BUDGET_WARNING_PERCENT ? "warning" : "ok";
|
|
277
|
+
const statusMessage = status === "post_run_pressure" ? "Run operated near the model context limit." : status === "warning" ? "Run used a large share of the model context window." : void 0;
|
|
278
|
+
const isInferredWindow = contextWindowSource === "provider-default";
|
|
279
|
+
const message = isInferredWindow ? statusMessage ? `${statusMessage} Using inferred provider default context window.` : "Using inferred provider default context window." : statusMessage;
|
|
280
|
+
return {
|
|
281
|
+
contextWindowTokens,
|
|
282
|
+
...contextWindowSource ? { contextWindowSource } : {},
|
|
283
|
+
peakRequestInputTokens: peakRequestInputTokens || null,
|
|
284
|
+
peakRequestOutputTokens: peakRequestOutputTokens || null,
|
|
285
|
+
peakRequestTotalTokens: peakRequestTotalTokens || null,
|
|
286
|
+
utilizationPercent,
|
|
287
|
+
headroomTokens,
|
|
288
|
+
status,
|
|
289
|
+
...message ? { message } : {}
|
|
290
|
+
};
|
|
291
|
+
}
|
|
292
|
+
function serializeCostData(cost) {
|
|
293
|
+
return cost ? JSON.stringify(cost) : null;
|
|
294
|
+
}
|
|
295
|
+
function summarizePhaseCosts(phaseResults) {
|
|
296
|
+
const costedPhases = phaseResults.filter(
|
|
297
|
+
(phase) => phase.costData !== void 0 && phase.costData !== null && phase.costData.costUsd !== null
|
|
298
|
+
);
|
|
299
|
+
if (costedPhases.length === 0) {
|
|
300
|
+
return {
|
|
301
|
+
source: "unavailable",
|
|
302
|
+
costUsd: null,
|
|
303
|
+
actualCostUsd: null,
|
|
304
|
+
estimatedCostUsd: null,
|
|
305
|
+
breakdown: {
|
|
306
|
+
inputTokens: 0,
|
|
307
|
+
cachedInputTokens: 0,
|
|
308
|
+
uncachedInputTokens: 0,
|
|
309
|
+
outputTokens: 0,
|
|
310
|
+
reasoningTokens: 0,
|
|
311
|
+
requestCount: 0
|
|
312
|
+
},
|
|
313
|
+
pricingVersion: null,
|
|
314
|
+
message: "No phase cost data available"
|
|
315
|
+
};
|
|
316
|
+
}
|
|
317
|
+
const firstCost = costedPhases[0].costData;
|
|
318
|
+
const aggregate = {
|
|
319
|
+
costUsd: 0,
|
|
320
|
+
actualCostUsd: 0,
|
|
321
|
+
estimatedCostUsd: 0,
|
|
322
|
+
breakdown: {
|
|
323
|
+
inputTokens: 0,
|
|
324
|
+
cachedInputTokens: 0,
|
|
325
|
+
uncachedInputTokens: 0,
|
|
326
|
+
outputTokens: 0,
|
|
327
|
+
reasoningTokens: 0,
|
|
328
|
+
requestCount: 0,
|
|
329
|
+
inputCostUsd: 0,
|
|
330
|
+
cachedInputCostUsd: 0,
|
|
331
|
+
outputCostUsd: 0,
|
|
332
|
+
reasoningCostUsd: 0,
|
|
333
|
+
requestCostUsd: 0,
|
|
334
|
+
cacheSavingsUsd: 0,
|
|
335
|
+
totalCostUsd: 0
|
|
336
|
+
}
|
|
337
|
+
};
|
|
338
|
+
for (const phase of costedPhases) {
|
|
339
|
+
const cost = phase.costData;
|
|
340
|
+
const breakdown = cost.breakdown;
|
|
341
|
+
aggregate.costUsd += cost.costUsd ?? 0;
|
|
342
|
+
aggregate.actualCostUsd += cost.actualCostUsd ?? 0;
|
|
343
|
+
aggregate.estimatedCostUsd += cost.estimatedCostUsd ?? 0;
|
|
344
|
+
aggregate.breakdown.inputTokens += breakdown.inputTokens;
|
|
345
|
+
aggregate.breakdown.cachedInputTokens += breakdown.cachedInputTokens;
|
|
346
|
+
aggregate.breakdown.uncachedInputTokens += breakdown.uncachedInputTokens;
|
|
347
|
+
aggregate.breakdown.outputTokens += breakdown.outputTokens;
|
|
348
|
+
aggregate.breakdown.reasoningTokens += breakdown.reasoningTokens;
|
|
349
|
+
aggregate.breakdown.requestCount += breakdown.requestCount;
|
|
350
|
+
aggregate.breakdown.inputCostUsd += breakdown.inputCostUsd ?? 0;
|
|
351
|
+
aggregate.breakdown.cachedInputCostUsd += breakdown.cachedInputCostUsd ?? 0;
|
|
352
|
+
aggregate.breakdown.outputCostUsd += breakdown.outputCostUsd ?? 0;
|
|
353
|
+
aggregate.breakdown.reasoningCostUsd += breakdown.reasoningCostUsd ?? 0;
|
|
354
|
+
aggregate.breakdown.requestCostUsd += breakdown.requestCostUsd ?? 0;
|
|
355
|
+
aggregate.breakdown.cacheSavingsUsd += breakdown.cacheSavingsUsd ?? 0;
|
|
356
|
+
}
|
|
357
|
+
aggregate.breakdown.totalCostUsd = aggregate.costUsd;
|
|
358
|
+
const allActual = phaseResults.every((phase) => phase.costData?.source === "actual");
|
|
359
|
+
const hasUnavailable = phaseResults.some((phase) => phase.costData?.source === "unavailable");
|
|
360
|
+
return {
|
|
361
|
+
source: allActual ? "actual" : "estimated",
|
|
362
|
+
costUsd: aggregate.costUsd,
|
|
363
|
+
actualCostUsd: allActual ? aggregate.actualCostUsd : null,
|
|
364
|
+
estimatedCostUsd: allActual ? null : aggregate.costUsd,
|
|
365
|
+
breakdown: aggregate.breakdown,
|
|
366
|
+
pricingVersion: costedPhases.every((phase) => phase.costData?.pricingVersion === firstCost.pricingVersion) ? firstCost.pricingVersion ?? null : null,
|
|
367
|
+
...hasUnavailable ? { message: "Some phase costs were unavailable; total reflects known phase costs only" } : {}
|
|
368
|
+
};
|
|
369
|
+
}
|
|
370
|
+
function buildRunAccountingUpdate(input) {
|
|
371
|
+
const tokenBudget = analyzeRuntimeTokenBudget(input.usage, input.provider);
|
|
372
|
+
return {
|
|
373
|
+
runtime: input.runtime,
|
|
374
|
+
provider: input.provider?.type ?? null,
|
|
375
|
+
model: input.model,
|
|
376
|
+
session_ref: input.sessionRef ?? input.checkpointState.sessionRef ?? null,
|
|
377
|
+
checkpoints: serializeCheckpointState(input.checkpointState),
|
|
378
|
+
usage_data: buildUsageData(input.usage, input.costData, input.phaseResults, tokenBudget),
|
|
379
|
+
cost_usd: input.costData.costUsd ?? null,
|
|
380
|
+
actual_cost_usd: input.costData.actualCostUsd,
|
|
381
|
+
estimated_cost_usd: input.costData.estimatedCostUsd,
|
|
382
|
+
cost_source: input.costData.source,
|
|
383
|
+
cost_data: serializeCostData(input.costData),
|
|
384
|
+
actions_taken: buildActionsTaken(input.runtime, input.provider, input.model, input.phaseResults)
|
|
385
|
+
};
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
export {
|
|
389
|
+
DEFAULT_LOCAL_AGENT_CONTEXT_WINDOW_TOKENS,
|
|
390
|
+
inferRuntimeFromProviderType,
|
|
391
|
+
errorMessage,
|
|
392
|
+
abortReasonMessage,
|
|
393
|
+
isSessionResumeFailure,
|
|
394
|
+
parseCheckpointState,
|
|
395
|
+
checkpointResultsForResume,
|
|
396
|
+
buildPhaseResult,
|
|
397
|
+
serializeCheckpointState,
|
|
398
|
+
aggregateUsage,
|
|
399
|
+
buildUsageData,
|
|
400
|
+
resolveProviderForResume,
|
|
401
|
+
runDurationMs,
|
|
402
|
+
analyzeRuntimeTokenBudget,
|
|
403
|
+
summarizePhaseCosts,
|
|
404
|
+
buildRunAccountingUpdate
|
|
405
|
+
};
|
|
406
|
+
//# sourceMappingURL=chunk-6LB7XELY.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/utils/error-message.ts","../src/agent/executor-state.ts","../src/agent/context-windows.ts","../src/agent/provider-runtime.ts","../src/agent/run-accounting.ts"],"sourcesContent":["/**\n * Extract a human-readable error message from an unknown thrown value.\n *\n * Handles Error instances, strings, and arbitrary objects. Never throws.\n */\nexport function errorMessage(err: unknown): string {\n if (err instanceof Error) return err.message || err.constructor.name || 'Error';\n if (typeof err === 'string') return err || 'Empty string error';\n try { return JSON.stringify(err); } catch { return 'Unserializable error'; }\n}\n","import { errorMessage as toErrorMessage } from '@myco/utils/error-message.js';\nimport type { CostResolution, CostSource } from './cost/types.js';\nimport type {\n EffectiveConfig,\n PhaseResult,\n ProviderConfig,\n ProviderType,\n RuntimeId,\n RuntimeTokenBudget,\n RuntimeUsage,\n} from './types.js';\n\n/** Error patterns that indicate an SDK/runtime session could not be resumed. */\nconst SESSION_RESUME_ERROR_PATTERNS = [\n /session/,\n /resume/,\n /previous[_ ]response/,\n /conversation/,\n];\n\nexport interface PhaseCheckpoint {\n name: string;\n status: 'pending' | 'running' | 'completed' | 'failed';\n summary?: string;\n turnsUsed?: number;\n tokensUsed?: number;\n costUsd?: number;\n costSource?: CostSource;\n costData?: CostResolution;\n sessionRef?: string;\n sessionData?: unknown;\n usage?: RuntimeUsage;\n updatedAt: number;\n}\n\nexport interface RunCheckpointState {\n runtime: RuntimeId;\n provider?: ProviderType;\n providerConfig?: ProviderConfig;\n model?: string;\n sessionRef?: string;\n sessionData?: unknown;\n phases: Record<string, PhaseCheckpoint>;\n}\n\nexport function abortReasonMessage(abortController?: AbortController): string | null {\n if (!abortController?.signal.aborted) return null;\n const reason = abortController.signal.reason;\n if (reason instanceof Error) return reason.message;\n if (typeof reason === 'string' && reason.length > 0) return reason;\n return 'Agent run aborted';\n}\n\nexport function isSessionResumeFailure(error: unknown): boolean {\n const message = toErrorMessage(error).toLowerCase();\n return SESSION_RESUME_ERROR_PATTERNS.some((pattern) => pattern.test(message));\n}\n\nexport function parseCheckpointState(raw: string | null | undefined): RunCheckpointState {\n if (!raw) {\n return { runtime: 'claude-sdk', phases: {} };\n }\n try {\n const parsed = JSON.parse(raw) as Partial<RunCheckpointState>;\n return {\n runtime: parsed.runtime ?? 'claude-sdk',\n provider: parsed.provider,\n providerConfig: parsed.providerConfig,\n model: parsed.model,\n sessionRef: parsed.sessionRef,\n sessionData: parsed.sessionData,\n phases: parsed.phases ?? {},\n };\n } catch {\n return { runtime: 'claude-sdk', phases: {} };\n }\n}\n\nexport function checkpointResultsForResume(\n config: EffectiveConfig,\n checkpointState: RunCheckpointState,\n): PhaseResult[] {\n if (!config.phases) return [];\n const order = new Map(config.phases.map((phase, index) => [phase.name, index]));\n return Object.values(checkpointState.phases)\n .filter((phase) => phase.status === 'completed')\n .sort((a, b) => (order.get(a.name) ?? 0) - (order.get(b.name) ?? 0))\n .map((phase) => buildPhaseResult({\n name: phase.name,\n status: 'completed',\n summary: phase.summary ?? '',\n turnsUsed: phase.turnsUsed,\n tokensUsed: phase.tokensUsed,\n costUsd: phase.costUsd,\n costSource: phase.costSource,\n costData: phase.costData,\n usage: phase.usage,\n sessionRef: phase.sessionRef,\n }));\n}\n\n/**\n * Construct a `PhaseResult` from whatever telemetry is available.\n *\n * Three callers hit this: (1) executePhase's success path has a full\n * `RuntimeUsage` + `CostResolution`; (2) executePhase's failure path has\n * partial telemetry attached to a `RuntimeExecutionError`; (3)\n * `checkpointResultsForResume` has pre-computed scalar fields from a\n * persisted checkpoint. Each caller passes what it has — the helper\n * derives `turnsUsed`/`tokensUsed`/`costUsd` from `usage` + `costData`\n * when available, and falls back to the direct scalar fields when not.\n */\nexport function buildPhaseResult(input: {\n name: string;\n status: PhaseResult['status'];\n summary: string;\n usage?: RuntimeUsage;\n costData?: CostResolution;\n turnsUsed?: number;\n tokensUsed?: number;\n costUsd?: number;\n costSource?: CostSource;\n sessionRef?: string;\n sessionData?: unknown;\n}): PhaseResult & { sessionData?: unknown } {\n const {\n name, status, summary, usage, costData,\n turnsUsed, tokensUsed, costUsd, costSource,\n sessionRef, sessionData,\n } = input;\n return {\n name,\n status,\n turnsUsed: turnsUsed ?? usage?.requests ?? 0,\n tokensUsed: tokensUsed ?? usage?.totalTokens ?? 0,\n costUsd: costUsd ?? costData?.costUsd ?? 0,\n ...(costData ? { costSource: costData.source, costData } : costSource ? { costSource } : {}),\n ...(usage ? { usage } : {}),\n ...(sessionRef ? { sessionRef } : {}),\n ...(sessionData !== undefined ? { sessionData } : {}),\n summary,\n };\n}\n\nexport function serializeCheckpointState(state: RunCheckpointState): string {\n return JSON.stringify(state);\n}\n\nexport function aggregateUsage(usages: Array<RuntimeUsage | undefined>): RuntimeUsage {\n const aggregate: RuntimeUsage = {\n requests: 0,\n inputTokens: 0,\n outputTokens: 0,\n totalTokens: 0,\n reasoningTokens: 0,\n cachedTokens: 0,\n durationMs: 0,\n };\n let sawCost = false;\n\n for (const usage of usages) {\n if (!usage) continue;\n aggregate.requests = (aggregate.requests ?? 0) + (usage.requests ?? 0);\n aggregate.inputTokens = (aggregate.inputTokens ?? 0) + (usage.inputTokens ?? 0);\n aggregate.outputTokens = (aggregate.outputTokens ?? 0) + (usage.outputTokens ?? 0);\n aggregate.totalTokens = (aggregate.totalTokens ?? 0) + (usage.totalTokens ?? 0);\n aggregate.reasoningTokens = (aggregate.reasoningTokens ?? 0) + (usage.reasoningTokens ?? 0);\n aggregate.cachedTokens = (aggregate.cachedTokens ?? 0) + (usage.cachedTokens ?? 0);\n aggregate.durationMs = (aggregate.durationMs ?? 0) + (usage.durationMs ?? 0);\n if (usage.costUsd !== undefined && usage.costUsd !== null) {\n aggregate.costUsd = (aggregate.costUsd ?? 0) + usage.costUsd;\n sawCost = true;\n }\n }\n\n if (!sawCost) {\n delete aggregate.costUsd;\n }\n\n return aggregate;\n}\n\nexport function buildUsageData(\n runUsage: RuntimeUsage,\n runCost?: CostResolution,\n phaseResults?: PhaseResult[],\n runBudget?: RuntimeTokenBudget,\n): string {\n return JSON.stringify({\n run: runUsage,\n runCost: runCost ?? null,\n runBudget: runBudget ?? null,\n phases: phaseResults?.map((phase) => ({\n name: phase.name,\n usage: phase.usage ?? null,\n turnsUsed: phase.turnsUsed,\n tokensUsed: phase.tokensUsed,\n costUsd: phase.costUsd,\n costSource: phase.costSource ?? null,\n costData: phase.costData ?? null,\n })) ?? [],\n });\n}\n\nexport function buildActionsTaken(\n runtime: RuntimeId,\n provider: ProviderConfig | undefined,\n model: string,\n phaseResults?: PhaseResult[],\n): string {\n return JSON.stringify({\n runtime,\n model,\n provider: provider?.type ?? 'anthropic',\n ...(provider?.baseUrl ? { baseUrl: provider.baseUrl } : {}),\n ...(phaseResults ? { phases: phaseResults } : {}),\n });\n}\n\nexport function resolveProviderForResume(\n currentProvider: ProviderConfig | undefined,\n resumedRun: {\n provider: ProviderType | null;\n } | null,\n checkpointState: RunCheckpointState,\n runtime: RuntimeId,\n model: string,\n): ProviderConfig | undefined {\n const persistedType = resumedRun?.provider ?? checkpointState.provider;\n const persistedProvider = checkpointState.providerConfig;\n if (!persistedType && !persistedProvider) return currentProvider;\n const matchingCurrentProvider = currentProvider?.type === persistedType ? currentProvider : undefined;\n\n return {\n ...(persistedProvider ?? {}),\n ...(matchingCurrentProvider ?? {}),\n runtime,\n type: persistedType ?? persistedProvider?.type ?? currentProvider?.type ?? 'anthropic',\n model,\n };\n}\n","/** Default context window Myco applies for local agent runs when no override is set. */\nexport const DEFAULT_LOCAL_AGENT_CONTEXT_WINDOW_TOKENS = 32_768;\n\n/** Inferred frontier-model context window when the provider does not expose one. */\nexport const DEFAULT_FRONTIER_CONTEXT_WINDOW_TOKENS = 200_000;\n\n/** Inferred OpenAI-compatible cloud context window when the provider does not expose one. */\nexport const DEFAULT_COMPATIBLE_CONTEXT_WINDOW_TOKENS = 128_000;\n","import type { ProviderType, RuntimeId } from './types.js';\nimport {\n DEFAULT_COMPATIBLE_CONTEXT_WINDOW_TOKENS,\n DEFAULT_FRONTIER_CONTEXT_WINDOW_TOKENS,\n DEFAULT_LOCAL_AGENT_CONTEXT_WINDOW_TOKENS,\n} from './context-windows.js';\n\ninterface ProviderMetadata {\n runtime: RuntimeId;\n defaultContextWindowTokens?: number;\n}\n\nconst PROVIDER_METADATA_BY_TYPE: Record<ProviderType, ProviderMetadata> = {\n anthropic: {\n runtime: 'claude-sdk',\n defaultContextWindowTokens: DEFAULT_FRONTIER_CONTEXT_WINDOW_TOKENS,\n },\n ollama: {\n runtime: 'claude-sdk',\n defaultContextWindowTokens: DEFAULT_LOCAL_AGENT_CONTEXT_WINDOW_TOKENS,\n },\n lmstudio: {\n runtime: 'claude-sdk',\n defaultContextWindowTokens: DEFAULT_LOCAL_AGENT_CONTEXT_WINDOW_TOKENS,\n },\n openai: {\n runtime: 'openai-agents',\n defaultContextWindowTokens: DEFAULT_FRONTIER_CONTEXT_WINDOW_TOKENS,\n },\n openrouter: {\n runtime: 'openai-agents',\n defaultContextWindowTokens: DEFAULT_FRONTIER_CONTEXT_WINDOW_TOKENS,\n },\n 'openai-compatible': {\n runtime: 'openai-agents',\n defaultContextWindowTokens: DEFAULT_COMPATIBLE_CONTEXT_WINDOW_TOKENS,\n },\n};\n\nexport function getProviderMetadata(providerType: ProviderType | undefined): ProviderMetadata | undefined {\n if (!providerType) return undefined;\n return PROVIDER_METADATA_BY_TYPE[providerType];\n}\n\nexport function inferRuntimeFromProviderType(providerType: ProviderType | undefined): RuntimeId | undefined {\n return getProviderMetadata(providerType)?.runtime;\n}\n\nexport function inferDefaultContextWindowFromProviderType(providerType: ProviderType | undefined): number | null {\n return getProviderMetadata(providerType)?.defaultContextWindowTokens ?? null;\n}\n","import type { RunUpdate } from '@myco/db/queries/runs.js';\nimport type { CostResolution } from './cost/types.js';\nimport {\n buildActionsTaken,\n buildUsageData,\n serializeCheckpointState,\n type RunCheckpointState,\n} from './executor-state.js';\nimport { inferDefaultContextWindowFromProviderType } from './provider-runtime.js';\nimport type { PhaseResult, ProviderConfig, RuntimeId, RuntimeTokenBudget, RuntimeUsage } from './types.js';\n\nconst TOKEN_BUDGET_WARNING_PERCENT = 75;\nconst TOKEN_BUDGET_CRITICAL_PERCENT = 90;\n\n/**\n * Compute the elapsed duration of a run in milliseconds. Returns `null`\n * unless both timestamps are populated. Started/completed timestamps on\n * `agent_runs` are stored in seconds; this helper converts to ms for UI\n * consumers that expect millisecond precision.\n */\nexport function runDurationMs(run: {\n started_at: number | null;\n completed_at: number | null;\n}): number | null {\n if (run.started_at === null || run.completed_at === null) return null;\n return (run.completed_at - run.started_at) * 1000;\n}\n\nfunction toRequestTokenNumber(\n entry: Record<string, unknown>,\n key: 'inputTokens' | 'outputTokens' | 'totalTokens',\n): number {\n const value = entry[key];\n return typeof value === 'number' ? value : 0;\n}\n\nfunction resolveContextWindow(\n provider: ProviderConfig | undefined,\n usage: RuntimeUsage,\n): { tokens: number | null; source?: RuntimeTokenBudget['contextWindowSource'] } {\n if (provider?.contextLength) {\n return { tokens: provider.contextLength, source: 'provider-config' };\n }\n const providerData = usage.providerData;\n if (providerData) {\n const candidates = [\n providerData.contextWindowTokens,\n providerData.context_window,\n providerData.maxContextTokens,\n providerData.max_context_tokens,\n ];\n for (const candidate of candidates) {\n if (typeof candidate === 'number' && candidate > 0) {\n return { tokens: candidate, source: 'provider-metadata' };\n }\n }\n }\n const providerDefault = inferDefaultContextWindowFromProviderType(provider?.type);\n if (providerDefault) {\n return { tokens: providerDefault, source: 'provider-default' };\n }\n return { tokens: null };\n}\n\nexport function analyzeRuntimeTokenBudget(\n usage: RuntimeUsage,\n provider?: ProviderConfig,\n): RuntimeTokenBudget {\n const requestEntries = usage.requestUsageEntries && usage.requestUsageEntries.length > 0\n ? usage.requestUsageEntries\n : [{\n inputTokens: usage.inputTokens ?? 0,\n outputTokens: usage.outputTokens ?? 0,\n totalTokens: usage.totalTokens ?? (\n (usage.inputTokens ?? 0) + (usage.outputTokens ?? 0)\n ),\n }];\n let peakRequestInputTokens = 0;\n let peakRequestOutputTokens = 0;\n let peakRequestTotalTokens = 0;\n for (const entry of requestEntries) {\n const input = toRequestTokenNumber(entry, 'inputTokens');\n const output = toRequestTokenNumber(entry, 'outputTokens');\n const total = toRequestTokenNumber(entry, 'totalTokens');\n if (input > peakRequestInputTokens) peakRequestInputTokens = input;\n if (output > peakRequestOutputTokens) peakRequestOutputTokens = output;\n if (total > peakRequestTotalTokens) peakRequestTotalTokens = total;\n }\n const { tokens: contextWindowTokens, source: contextWindowSource } = resolveContextWindow(provider, usage);\n\n if (!contextWindowTokens) {\n return {\n contextWindowTokens: null,\n peakRequestInputTokens: peakRequestInputTokens || null,\n peakRequestOutputTokens: peakRequestOutputTokens || null,\n peakRequestTotalTokens: peakRequestTotalTokens || null,\n utilizationPercent: null,\n headroomTokens: null,\n status: 'unknown',\n message: 'Context window unavailable for this provider/model.',\n };\n }\n\n const utilizationPercent = peakRequestTotalTokens > 0\n ? Math.round((peakRequestTotalTokens / contextWindowTokens) * 100)\n : 0;\n const headroomTokens = Math.max(0, contextWindowTokens - peakRequestTotalTokens);\n const status = utilizationPercent >= TOKEN_BUDGET_CRITICAL_PERCENT\n ? 'post_run_pressure'\n : utilizationPercent >= TOKEN_BUDGET_WARNING_PERCENT\n ? 'warning'\n : 'ok';\n const statusMessage = status === 'post_run_pressure'\n ? 'Run operated near the model context limit.'\n : status === 'warning'\n ? 'Run used a large share of the model context window.'\n : undefined;\n const isInferredWindow = contextWindowSource === 'provider-default';\n const message = isInferredWindow\n ? (statusMessage\n ? `${statusMessage} Using inferred provider default context window.`\n : 'Using inferred provider default context window.')\n : statusMessage;\n\n return {\n contextWindowTokens,\n ...(contextWindowSource ? { contextWindowSource } : {}),\n peakRequestInputTokens: peakRequestInputTokens || null,\n peakRequestOutputTokens: peakRequestOutputTokens || null,\n peakRequestTotalTokens: peakRequestTotalTokens || null,\n utilizationPercent,\n headroomTokens,\n status,\n ...(message ? { message } : {}),\n };\n}\n\nexport function serializeCostData(cost: CostResolution | undefined): string | null {\n return cost ? JSON.stringify(cost) : null;\n}\n\nexport function summarizePhaseCosts(phaseResults: PhaseResult[]): CostResolution {\n const costedPhases = phaseResults.filter(\n (phase): phase is PhaseResult & { costData: CostResolution } =>\n phase.costData !== undefined && phase.costData !== null && phase.costData.costUsd !== null,\n );\n if (costedPhases.length === 0) {\n return {\n source: 'unavailable',\n costUsd: null,\n actualCostUsd: null,\n estimatedCostUsd: null,\n breakdown: {\n inputTokens: 0,\n cachedInputTokens: 0,\n uncachedInputTokens: 0,\n outputTokens: 0,\n reasoningTokens: 0,\n requestCount: 0,\n },\n pricingVersion: null,\n message: 'No phase cost data available',\n };\n }\n\n const firstCost = costedPhases[0].costData;\n const aggregate = {\n costUsd: 0,\n actualCostUsd: 0,\n estimatedCostUsd: 0,\n breakdown: {\n inputTokens: 0,\n cachedInputTokens: 0,\n uncachedInputTokens: 0,\n outputTokens: 0,\n reasoningTokens: 0,\n requestCount: 0,\n inputCostUsd: 0,\n cachedInputCostUsd: 0,\n outputCostUsd: 0,\n reasoningCostUsd: 0,\n requestCostUsd: 0,\n cacheSavingsUsd: 0,\n totalCostUsd: 0,\n },\n };\n\n for (const phase of costedPhases) {\n const cost = phase.costData;\n const breakdown = cost.breakdown;\n aggregate.costUsd += cost.costUsd ?? 0;\n aggregate.actualCostUsd += cost.actualCostUsd ?? 0;\n aggregate.estimatedCostUsd += cost.estimatedCostUsd ?? 0;\n aggregate.breakdown.inputTokens += breakdown.inputTokens;\n aggregate.breakdown.cachedInputTokens += breakdown.cachedInputTokens;\n aggregate.breakdown.uncachedInputTokens += breakdown.uncachedInputTokens;\n aggregate.breakdown.outputTokens += breakdown.outputTokens;\n aggregate.breakdown.reasoningTokens += breakdown.reasoningTokens;\n aggregate.breakdown.requestCount += breakdown.requestCount;\n aggregate.breakdown.inputCostUsd += breakdown.inputCostUsd ?? 0;\n aggregate.breakdown.cachedInputCostUsd += breakdown.cachedInputCostUsd ?? 0;\n aggregate.breakdown.outputCostUsd += breakdown.outputCostUsd ?? 0;\n aggregate.breakdown.reasoningCostUsd += breakdown.reasoningCostUsd ?? 0;\n aggregate.breakdown.requestCostUsd += breakdown.requestCostUsd ?? 0;\n aggregate.breakdown.cacheSavingsUsd += breakdown.cacheSavingsUsd ?? 0;\n }\n aggregate.breakdown.totalCostUsd = aggregate.costUsd;\n\n const allActual = phaseResults.every((phase) => phase.costData?.source === 'actual');\n const hasUnavailable = phaseResults.some((phase) => phase.costData?.source === 'unavailable');\n return {\n source: allActual ? 'actual' : 'estimated',\n costUsd: aggregate.costUsd,\n actualCostUsd: allActual ? aggregate.actualCostUsd : null,\n estimatedCostUsd: allActual ? null : aggregate.costUsd,\n breakdown: aggregate.breakdown,\n pricingVersion: costedPhases.every((phase) => phase.costData?.pricingVersion === firstCost.pricingVersion)\n ? firstCost.pricingVersion ?? null\n : null,\n ...(hasUnavailable ? { message: 'Some phase costs were unavailable; total reflects known phase costs only' } : {}),\n };\n}\n\ninterface RunAccountingUpdateInput {\n runtime: RuntimeId;\n provider?: ProviderConfig;\n model: string;\n checkpointState: RunCheckpointState;\n usage: RuntimeUsage;\n costData: CostResolution;\n phaseResults?: PhaseResult[];\n sessionRef?: string | null;\n}\n\ninterface RunAccountingUpdateFields extends Pick<\n RunUpdate,\n | 'runtime'\n | 'provider'\n | 'model'\n | 'session_ref'\n | 'checkpoints'\n | 'usage_data'\n | 'cost_usd'\n | 'actual_cost_usd'\n | 'estimated_cost_usd'\n | 'cost_source'\n | 'cost_data'\n> {\n actions_taken: string;\n}\n\nexport function buildRunAccountingUpdate(input: RunAccountingUpdateInput): RunAccountingUpdateFields {\n const tokenBudget = analyzeRuntimeTokenBudget(input.usage, input.provider);\n return {\n runtime: input.runtime,\n provider: input.provider?.type ?? null,\n model: input.model,\n session_ref: input.sessionRef ?? input.checkpointState.sessionRef ?? null,\n checkpoints: serializeCheckpointState(input.checkpointState),\n usage_data: buildUsageData(input.usage, input.costData, input.phaseResults, tokenBudget),\n cost_usd: input.costData.costUsd ?? null,\n actual_cost_usd: input.costData.actualCostUsd,\n estimated_cost_usd: input.costData.estimatedCostUsd,\n cost_source: input.costData.source,\n cost_data: serializeCostData(input.costData),\n actions_taken: buildActionsTaken(input.runtime, input.provider, input.model, input.phaseResults),\n };\n}\n"],"mappings":"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","names":[]}
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
|
|
2
2
|
import {
|
|
3
3
|
isProcessAlive
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-JR54LTPP.js";
|
|
5
5
|
import {
|
|
6
6
|
loadMergedConfig
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-53RPGOEN.js";
|
|
8
8
|
import {
|
|
9
9
|
getDatabase
|
|
10
10
|
} from "./chunk-MYX5NCRH.js";
|
|
11
11
|
import {
|
|
12
12
|
DIGEST_TIERS
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-6C6QZ4PM.js";
|
|
14
14
|
|
|
15
15
|
// src/db/queries/embeddings.ts
|
|
16
16
|
var EMBEDDABLE_TABLES = ["sessions", "spores", "plans", "artifacts", "skill_records"];
|
|
@@ -187,4 +187,4 @@ export {
|
|
|
187
187
|
getEmbeddingQueueDepth,
|
|
188
188
|
gatherStats
|
|
189
189
|
};
|
|
190
|
-
//# sourceMappingURL=chunk-
|
|
190
|
+
//# sourceMappingURL=chunk-75Z7UKDY.js.map
|
|
@@ -11,7 +11,7 @@ var cached;
|
|
|
11
11
|
function getPluginVersion() {
|
|
12
12
|
if (cached) return cached;
|
|
13
13
|
if (true) {
|
|
14
|
-
cached = "0.
|
|
14
|
+
cached = "0.21.0";
|
|
15
15
|
return cached;
|
|
16
16
|
}
|
|
17
17
|
const root = findPackageRoot(path.dirname(fileURLToPath(import.meta.url)));
|
|
@@ -32,4 +32,4 @@ function getPluginVersion() {
|
|
|
32
32
|
export {
|
|
33
33
|
getPluginVersion
|
|
34
34
|
};
|
|
35
|
-
//# sourceMappingURL=chunk-
|
|
35
|
+
//# sourceMappingURL=chunk-BUTL6IFS.js.map
|