agent-eval-opencode 0.10.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/cli.d.ts +6 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +590 -0
- package/dist/cli.js.map +1 -0
- package/dist/index.d.ts +30 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +29 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/agents/claude-code.d.ts +12 -0
- package/dist/lib/agents/claude-code.d.ts.map +1 -0
- package/dist/lib/agents/claude-code.js +231 -0
- package/dist/lib/agents/claude-code.js.map +1 -0
- package/dist/lib/agents/codex.d.ts +12 -0
- package/dist/lib/agents/codex.d.ts.map +1 -0
- package/dist/lib/agents/codex.js +267 -0
- package/dist/lib/agents/codex.js.map +1 -0
- package/dist/lib/agents/cursor.d.ts +10 -0
- package/dist/lib/agents/cursor.d.ts.map +1 -0
- package/dist/lib/agents/cursor.js +204 -0
- package/dist/lib/agents/cursor.js.map +1 -0
- package/dist/lib/agents/gemini.d.ts +10 -0
- package/dist/lib/agents/gemini.d.ts.map +1 -0
- package/dist/lib/agents/gemini.js +207 -0
- package/dist/lib/agents/gemini.js.map +1 -0
- package/dist/lib/agents/index.d.ts +7 -0
- package/dist/lib/agents/index.d.ts.map +1 -0
- package/dist/lib/agents/index.js +20 -0
- package/dist/lib/agents/index.js.map +1 -0
- package/dist/lib/agents/opencode.d.ts +11 -0
- package/dist/lib/agents/opencode.d.ts.map +1 -0
- package/dist/lib/agents/opencode.js +245 -0
- package/dist/lib/agents/opencode.js.map +1 -0
- package/dist/lib/agents/registry.d.ts +23 -0
- package/dist/lib/agents/registry.d.ts.map +1 -0
- package/dist/lib/agents/registry.js +35 -0
- package/dist/lib/agents/registry.js.map +1 -0
- package/dist/lib/agents/shared.d.ts +83 -0
- package/dist/lib/agents/shared.d.ts.map +1 -0
- package/dist/lib/agents/shared.js +192 -0
- package/dist/lib/agents/shared.js.map +1 -0
- package/dist/lib/agents/types.d.ts +73 -0
- package/dist/lib/agents/types.d.ts.map +1 -0
- package/dist/lib/agents/types.js +5 -0
- package/dist/lib/agents/types.js.map +1 -0
- package/dist/lib/classifier.d.ts +89 -0
- package/dist/lib/classifier.d.ts.map +1 -0
- package/dist/lib/classifier.js +285 -0
- package/dist/lib/classifier.js.map +1 -0
- package/dist/lib/config.d.ts +37 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +187 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/dashboard.d.ts +65 -0
- package/dist/lib/dashboard.d.ts.map +1 -0
- package/dist/lib/dashboard.js +237 -0
- package/dist/lib/dashboard.js.map +1 -0
- package/dist/lib/docker-sandbox.d.ts +92 -0
- package/dist/lib/docker-sandbox.d.ts.map +1 -0
- package/dist/lib/docker-sandbox.js +375 -0
- package/dist/lib/docker-sandbox.js.map +1 -0
- package/dist/lib/fingerprint.d.ts +15 -0
- package/dist/lib/fingerprint.d.ts.map +1 -0
- package/dist/lib/fingerprint.js +59 -0
- package/dist/lib/fingerprint.js.map +1 -0
- package/dist/lib/fixture.d.ts +55 -0
- package/dist/lib/fixture.d.ts.map +1 -0
- package/dist/lib/fixture.js +215 -0
- package/dist/lib/fixture.js.map +1 -0
- package/dist/lib/housekeeping.d.ts +26 -0
- package/dist/lib/housekeeping.d.ts.map +1 -0
- package/dist/lib/housekeeping.js +170 -0
- package/dist/lib/housekeeping.js.map +1 -0
- package/dist/lib/init.d.ts +21 -0
- package/dist/lib/init.d.ts.map +1 -0
- package/dist/lib/init.js +275 -0
- package/dist/lib/init.js.map +1 -0
- package/dist/lib/o11y/index.d.ts +13 -0
- package/dist/lib/o11y/index.d.ts.map +1 -0
- package/dist/lib/o11y/index.js +13 -0
- package/dist/lib/o11y/index.js.map +1 -0
- package/dist/lib/o11y/parsers/claude-code.d.ts +18 -0
- package/dist/lib/o11y/parsers/claude-code.d.ts.map +1 -0
- package/dist/lib/o11y/parsers/claude-code.js +343 -0
- package/dist/lib/o11y/parsers/claude-code.js.map +1 -0
- package/dist/lib/o11y/parsers/codex.d.ts +17 -0
- package/dist/lib/o11y/parsers/codex.d.ts.map +1 -0
- package/dist/lib/o11y/parsers/codex.js +364 -0
- package/dist/lib/o11y/parsers/codex.js.map +1 -0
- package/dist/lib/o11y/parsers/cursor.d.ts +21 -0
- package/dist/lib/o11y/parsers/cursor.d.ts.map +1 -0
- package/dist/lib/o11y/parsers/cursor.js +226 -0
- package/dist/lib/o11y/parsers/cursor.js.map +1 -0
- package/dist/lib/o11y/parsers/gemini.d.ts +21 -0
- package/dist/lib/o11y/parsers/gemini.d.ts.map +1 -0
- package/dist/lib/o11y/parsers/gemini.js +241 -0
- package/dist/lib/o11y/parsers/gemini.js.map +1 -0
- package/dist/lib/o11y/parsers/index.d.ts +55 -0
- package/dist/lib/o11y/parsers/index.d.ts.map +1 -0
- package/dist/lib/o11y/parsers/index.js +284 -0
- package/dist/lib/o11y/parsers/index.js.map +1 -0
- package/dist/lib/o11y/parsers/opencode.d.ts +17 -0
- package/dist/lib/o11y/parsers/opencode.d.ts.map +1 -0
- package/dist/lib/o11y/parsers/opencode.js +320 -0
- package/dist/lib/o11y/parsers/opencode.js.map +1 -0
- package/dist/lib/o11y/types.d.ts +113 -0
- package/dist/lib/o11y/types.d.ts.map +1 -0
- package/dist/lib/o11y/types.js +6 -0
- package/dist/lib/o11y/types.js.map +1 -0
- package/dist/lib/results.d.ts +91 -0
- package/dist/lib/results.d.ts.map +1 -0
- package/dist/lib/results.js +361 -0
- package/dist/lib/results.js.map +1 -0
- package/dist/lib/runner.d.ts +71 -0
- package/dist/lib/runner.d.ts.map +1 -0
- package/dist/lib/runner.js +267 -0
- package/dist/lib/runner.js.map +1 -0
- package/dist/lib/sandbox.d.ts +173 -0
- package/dist/lib/sandbox.d.ts.map +1 -0
- package/dist/lib/sandbox.js +337 -0
- package/dist/lib/sandbox.js.map +1 -0
- package/dist/lib/types.d.ts +258 -0
- package/dist/lib/types.d.ts.map +1 -0
- package/dist/lib/types.js +15 -0
- package/dist/lib/types.js.map +1 -0
- package/dist/test-setup.d.ts +2 -0
- package/dist/test-setup.d.ts.map +1 -0
- package/dist/test-setup.js +6 -0
- package/dist/test-setup.js.map +1 -0
- package/package.json +72 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cursor.js","sourceRoot":"","sources":["../../../../src/lib/o11y/parsers/cursor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH;;GAEG;AACH,MAAM,eAAe,GAA6B;IAChD,YAAY,EAAE,WAAW;IACzB,YAAY,EAAE,WAAW;IACzB,cAAc,EAAE,YAAY;IAC5B,UAAU,EAAE,UAAU;IACtB,YAAY,EAAE,MAAM;IACpB,aAAa,EAAE,OAAO;IACtB,iBAAiB,EAAE,SAAS;IAC5B,mBAAmB,EAAE,YAAY;IACjC,aAAa,EAAE,YAAY;IAC3B,YAAY,EAAE,MAAM;IACpB,cAAc,EAAE,YAAY;IAC5B,aAAa,EAAE,WAAW;CAC3B,CAAC;AAEF;;GAEG;AACH,SAAS,KAAK,CAAC,EAAW;IACxB,IAAI,OAAO,EAAE,KAAK,QAAQ;QAAE,OAAO,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IAC9D,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;GAEG;AACH,SAAS,eAAe,CAAC,QAAiC;IAMxD,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;QACxC,IAAI,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;YAC7B,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAwC,CAAC;YACnE,IAAI,CAAC,KAAK;gBAAE,SAAS;YACrB,OAAO;gBACL,GAAG;gBACH,aAAa,EAAE,eAAe,CAAC,GAAG,CAAC,IAAI,SAAS;gBAChD,IAAI,EAAG,KAAK,CAAC,IAAgC,IAAI,EAAE;gBACnD,MAAM,EAAE,KAAK,CAAC,MAAM;aACrB,CAAC;QACJ,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,SAAS,eAAe,CAAC,IAA6B;IACpD,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAuB,CAAC;AACzE,CAAC;AAED;;GAEG;AACH,SAAS,cAAc,CAAC,IAA6B;IACnD,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC,OAAO,CAAC;IAC1D,IAAI,OAAO,IAAI,CAAC,GAAG,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC,GAAG,CAAC;IAClD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;GAEG;AACH,SAAS,kBAAkB,CACzB,OAAoE;IAEpE,IAAI,OAAO,OAAO,KAAK,QAAQ;QAAE,OAAO,OAAO,CAAC;IAChD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;QAAE,OAAO,SAAS,CAAC;IAC9C,OAAO,OAAO;SACX,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,CAAC,IAAI,CAAC;SAC1C,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAK,CAAC;SACnB,IAAI,CAAC,EAAE,CAAC,CAAC;AACd,CAAC;AAED;;GAEG;AACH,SAAS,eAAe,CAAC,IAAY;IACnC,MAAM,MAAM,GAAsB,EAAE,CAAC;IAErC,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC9B,MAAM,SAAS,GAAG,IAAI,CAAC,IAAc,CAAC;QACtC,MAAM,OAAO,GAAG,IAAI,CAAC,OAA6B,CAAC;QAEnD,QAAQ,SAAS,EAAE,CAAC;YAClB,KAAK,WAAW,CAAC,CAAC,CAAC;gBACjB,MAAM,WAAW,GAAG,IAAI,CAAC,SAAgD,CAAC;gBAC1E,IAAI,CAAC,WAAW;oBAAE,MAAM;gBAExB,MAAM,IAAI,GAAG,eAAe,CAAC,WAAW,CAAC,CAAC;gBAC1C,IAAI,CAAC,IAAI;oBAAE,MAAM;gBAEjB,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;oBAC1B,MAAM,CAAC,IAAI,CAAC;wBACV,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC;wBACnC,IAAI,EAAE,WAAW;wBACjB,IAAI,EAAE;4BACJ,IAAI,EAAE,IAAI,CAAC,aAAa;4BACxB,YAAY,EAAE,IAAI,CAAC,GAAG;4BACtB,IAAI,EAAE,IAAI,CAAC,IAAI;yBAChB;wBACD,GAAG,EAAE,IAAI;qBACV,CAAC,CAAC;gBACL,CAAC;qBAAM,IAAI,OAAO,KAAK,WAAW,EAAE,CAAC;oBACnC,MAAM,SAAS,GAAG,IAAI,CAAC,MAA6C,CAAC;oBACrE,MAAM,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC,SAAS,IAAI,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;oBAC/D,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,OAAO,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC;oBAEvD,MAAM,CAAC,IAAI,CAAC;wBACV,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC;wBACnC,IAAI,EAAE,aAAa;wBACnB,IAAI,EAAE;4BACJ,IAAI,EAAE,IAAI,CAAC,aAAa;4BACxB,YAAY,EAAE,IAAI,CAAC,GAAG;4BACtB,MAAM,EAAE,IAAI,CAAC,MAAM;4BACnB,OAAO,EAAE,OAAO,KAAK,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC;yBAC/D;wBACD,GAAG,EAAE,IAAI;qBACV,CAAC,CAAC;gBACL,CAAC;gBACD,MAAM;YACR,CAAC;YAED,KAAK,WAAW,CAAC,CAAC,CAAC;gBACjB,MAAM,GAAG,GAAG,IAAI,CAAC,OAA8C,CAAC;gBAChE,IAAI,CAAC,GAAG;oBAAE,MAAM;gBAChB,MAAM,IAAI,GAAG,kBAAkB,CAC7B,GAAG,CAAC,OAAsE,CAC3E,CAAC;gBACF,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;oBACxB,MAAM,CAAC,IAAI,CAAC;wBACV,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC;wBACnC,IAAI,EAAE,SAAS;wBACf,IAAI,EAAE,WAAW;wBACjB,OAAO,EAAE,IAAI;wBACb,GAAG,EAAE,IAAI;qBACV,CAAC,CAAC;gBACL,CAAC;gBACD,MAAM;YACR,CAAC;YAED,KAAK,MAAM,CAAC,CAAC,CAAC;gBACZ,MAAM,GAAG,GAAG,IAAI,CAAC,OAA8C,CAAC;gBAChE,IAAI,CAAC,GAAG;oBAAE,MAAM;gBAChB,MAAM,IAAI,GAAG,kBAAkB,CAC7B,GAAG,CAAC,OAAsE,CAC3E,CAAC;gBACF,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;oBACxB,MAAM,CAAC,IAAI,CAAC;wBACV,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC;wBACnC,IAAI,EAAE,SAAS;wBACf,IAAI,EAAE,MAAM;wBACZ,OAAO,EAAE,IAAI;wBACb,GAAG,EAAE,IAAI;qBACV,CAAC,CAAC;gBACL,CAAC;gBACD,MAAM;YACR,CAAC;YAED,KAAK,UAAU,CAAC,CAAC,CAAC;gBAChB,gDAAgD;gBAChD,IAAI,OAAO,KAAK,WAAW,EAAE,CAAC;oBAC5B,MAAM,CAAC,IAAI,CAAC;wBACV,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC;wBACnC,IAAI,EAAE,UAAU;wBAChB,OAAO,EAAE,IAAI,CAAC,IAAI,IAAI,EAAE;wBACxB,GAAG,EAAE,IAAI;qBACV,CAAC,CAAC;gBACL,CAAC;gBACD,MAAM;YACR,CAAC;YAED,KAAK,QAAQ,CAAC;YACd,KAAK,QAAQ;gBACX,yBAAyB;gBACzB,MAAM;YAER;gBACE,MAAM;QACV,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,yBAAyB;IAC3B,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,GAAW;IAI/C,MAAM,MAAM,GAAsB,EAAE,CAAC;IACrC,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IAE5D,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;YACzC,MAAM,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,CAAC;QAC7B,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,CAAC,IAAI,CAAC,yBAAyB,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACrF,CAAC;IACH,CAAC;IAED,gDAAgD;IAChD,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;YAC7C,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;YAEnC,IAAI,CAAC,WAAW,EAAE,YAAY,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBACvE,MAAM,IAAI,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;gBACnC,IAAI,IAAI,EAAE,CAAC;oBACT,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,EAAE,GAAG,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC;gBACtD,CAAC;YACH,CAAC;YAED,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;gBAChC,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;gBACrC,IAAI,OAAO,EAAE,CAAC;oBACZ,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,EAAE,GAAG,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,CAAC;gBAC5D,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;AAC5B,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parser for Gemini CLI transcript format.
|
|
3
|
+
* Supports two output formats:
|
|
4
|
+
*
|
|
5
|
+
* 1. CLI format (--output-format stream-json via OpenCode framework):
|
|
6
|
+
* - Events: step_start, tool_use (with part.tool/part.state), text, step_finish
|
|
7
|
+
* - Timestamps: epoch milliseconds
|
|
8
|
+
*
|
|
9
|
+
* 2. Direct-API format (custom agent runner):
|
|
10
|
+
* - Events: init, message (with delta), tool_use (with tool_name/parameters), tool_result
|
|
11
|
+
* - Timestamps: ISO strings
|
|
12
|
+
*/
|
|
13
|
+
import type { TranscriptEvent } from '../types.js';
|
|
14
|
+
/**
|
|
15
|
+
* Parse Gemini JSONL transcript into normalized events.
|
|
16
|
+
*/
|
|
17
|
+
export declare function parseGeminiTranscript(raw: string): {
|
|
18
|
+
events: TranscriptEvent[];
|
|
19
|
+
errors: string[];
|
|
20
|
+
};
|
|
21
|
+
//# sourceMappingURL=gemini.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gemini.d.ts","sourceRoot":"","sources":["../../../../src/lib/o11y/parsers/gemini.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAY,MAAM,aAAa,CAAC;AAmM7D;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG;IAClD,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB,CAyDA"}
|
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parser for Gemini CLI transcript format.
|
|
3
|
+
* Supports two output formats:
|
|
4
|
+
*
|
|
5
|
+
* 1. CLI format (--output-format stream-json via OpenCode framework):
|
|
6
|
+
* - Events: step_start, tool_use (with part.tool/part.state), text, step_finish
|
|
7
|
+
* - Timestamps: epoch milliseconds
|
|
8
|
+
*
|
|
9
|
+
* 2. Direct-API format (custom agent runner):
|
|
10
|
+
* - Events: init, message (with delta), tool_use (with tool_name/parameters), tool_result
|
|
11
|
+
* - Timestamps: ISO strings
|
|
12
|
+
*/
|
|
13
|
+
/**
|
|
14
|
+
* Map Gemini tool names to canonical names.
|
|
15
|
+
*/
|
|
16
|
+
function normalizeToolName(name) {
|
|
17
|
+
const toolMap = {
|
|
18
|
+
// CLI format tools
|
|
19
|
+
read: 'file_read',
|
|
20
|
+
write: 'file_write',
|
|
21
|
+
edit: 'file_edit',
|
|
22
|
+
bash: 'shell',
|
|
23
|
+
glob: 'glob',
|
|
24
|
+
// Direct-API format tools
|
|
25
|
+
read_file: 'file_read',
|
|
26
|
+
write_file: 'file_write',
|
|
27
|
+
list_directory: 'list_dir',
|
|
28
|
+
run_shell_command: 'shell',
|
|
29
|
+
// Common aliases
|
|
30
|
+
shell: 'shell',
|
|
31
|
+
grep: 'grep',
|
|
32
|
+
ls: 'list_dir',
|
|
33
|
+
search: 'web_search',
|
|
34
|
+
web_search: 'web_search',
|
|
35
|
+
fetch: 'web_fetch',
|
|
36
|
+
web_fetch: 'web_fetch',
|
|
37
|
+
};
|
|
38
|
+
return toolMap[name.toLowerCase()] || 'unknown';
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Convert a timestamp value to ISO string.
|
|
42
|
+
* Handles epoch milliseconds (number) and ISO strings.
|
|
43
|
+
*/
|
|
44
|
+
function toISO(ts) {
|
|
45
|
+
if (typeof ts === 'number')
|
|
46
|
+
return new Date(ts).toISOString();
|
|
47
|
+
if (typeof ts === 'string')
|
|
48
|
+
return ts;
|
|
49
|
+
return undefined;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Extract file path from tool arguments.
|
|
53
|
+
*/
|
|
54
|
+
function extractFilePath(args) {
|
|
55
|
+
return (args.path || args.file_path || args.filePath || args.file || args.filename);
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Extract command from tool arguments.
|
|
59
|
+
*/
|
|
60
|
+
function extractCommand(args) {
|
|
61
|
+
if (typeof args.command === 'string')
|
|
62
|
+
return args.command;
|
|
63
|
+
if (typeof args.cmd === 'string')
|
|
64
|
+
return args.cmd;
|
|
65
|
+
return undefined;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Parse a single JSONL line from a Gemini transcript.
|
|
69
|
+
* Handles both CLI and direct-API formats.
|
|
70
|
+
*/
|
|
71
|
+
function parseGeminiLine(line) {
|
|
72
|
+
const events = [];
|
|
73
|
+
try {
|
|
74
|
+
const data = JSON.parse(line);
|
|
75
|
+
const eventType = data.type;
|
|
76
|
+
// --- CLI format: tool_use with part.tool / part.state ---
|
|
77
|
+
if (eventType === 'tool_use' && data.part?.tool) {
|
|
78
|
+
const part = data.part;
|
|
79
|
+
const state = part.state;
|
|
80
|
+
const name = part.tool;
|
|
81
|
+
const args = state?.input || {};
|
|
82
|
+
const output = state?.output;
|
|
83
|
+
const status = state?.status;
|
|
84
|
+
events.push({
|
|
85
|
+
timestamp: toISO(data.timestamp),
|
|
86
|
+
type: 'tool_call',
|
|
87
|
+
tool: {
|
|
88
|
+
name: normalizeToolName(name),
|
|
89
|
+
originalName: name,
|
|
90
|
+
args,
|
|
91
|
+
},
|
|
92
|
+
raw: data,
|
|
93
|
+
});
|
|
94
|
+
if (status === 'completed' && output !== undefined) {
|
|
95
|
+
const metadata = state?.metadata;
|
|
96
|
+
const exitCode = metadata?.exit;
|
|
97
|
+
const isShell = normalizeToolName(name) === 'shell';
|
|
98
|
+
const success = isShell
|
|
99
|
+
? exitCode === 0 || exitCode === undefined
|
|
100
|
+
: status === 'completed' && !state?.error;
|
|
101
|
+
events.push({
|
|
102
|
+
timestamp: toISO(data.timestamp),
|
|
103
|
+
type: 'tool_result',
|
|
104
|
+
tool: {
|
|
105
|
+
name: normalizeToolName(name),
|
|
106
|
+
originalName: name,
|
|
107
|
+
result: output,
|
|
108
|
+
success,
|
|
109
|
+
},
|
|
110
|
+
raw: state,
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
return events;
|
|
114
|
+
}
|
|
115
|
+
// --- Direct-API format: tool_use with tool_name / parameters ---
|
|
116
|
+
if (eventType === 'tool_use' && data.tool_name) {
|
|
117
|
+
const name = data.tool_name;
|
|
118
|
+
const args = data.parameters || {};
|
|
119
|
+
events.push({
|
|
120
|
+
timestamp: toISO(data.timestamp),
|
|
121
|
+
type: 'tool_call',
|
|
122
|
+
tool: {
|
|
123
|
+
name: normalizeToolName(name),
|
|
124
|
+
originalName: name,
|
|
125
|
+
args,
|
|
126
|
+
},
|
|
127
|
+
raw: data,
|
|
128
|
+
});
|
|
129
|
+
return events;
|
|
130
|
+
}
|
|
131
|
+
// --- Direct-API format: separate tool_result event ---
|
|
132
|
+
if (eventType === 'tool_result') {
|
|
133
|
+
const toolId = data.tool_id;
|
|
134
|
+
// Infer original tool name from tool_id prefix (e.g. "read_file-1770...")
|
|
135
|
+
const originalName = toolId?.split('-')[0] || 'unknown';
|
|
136
|
+
const status = data.status;
|
|
137
|
+
const hasError = status === 'error' || !!data.error;
|
|
138
|
+
events.push({
|
|
139
|
+
timestamp: toISO(data.timestamp),
|
|
140
|
+
type: 'tool_result',
|
|
141
|
+
tool: {
|
|
142
|
+
name: normalizeToolName(originalName),
|
|
143
|
+
originalName,
|
|
144
|
+
result: data.output,
|
|
145
|
+
success: !hasError,
|
|
146
|
+
},
|
|
147
|
+
raw: data,
|
|
148
|
+
});
|
|
149
|
+
return events;
|
|
150
|
+
}
|
|
151
|
+
// --- CLI format: text with part.text ---
|
|
152
|
+
if (eventType === 'text' && data.part?.text) {
|
|
153
|
+
const text = data.part.text;
|
|
154
|
+
if (text.trim()) {
|
|
155
|
+
events.push({
|
|
156
|
+
timestamp: toISO(data.timestamp),
|
|
157
|
+
type: 'message',
|
|
158
|
+
role: 'assistant',
|
|
159
|
+
content: text,
|
|
160
|
+
raw: data,
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
return events;
|
|
164
|
+
}
|
|
165
|
+
// --- Direct-API format: message with role/content ---
|
|
166
|
+
if (eventType === 'message') {
|
|
167
|
+
const role = data.role;
|
|
168
|
+
const content = data.content;
|
|
169
|
+
if (role && content) {
|
|
170
|
+
events.push({
|
|
171
|
+
timestamp: toISO(data.timestamp),
|
|
172
|
+
type: 'message',
|
|
173
|
+
role: role,
|
|
174
|
+
content,
|
|
175
|
+
raw: { ...data, _delta: !!data.delta },
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
return events;
|
|
179
|
+
}
|
|
180
|
+
// --- Metadata events — skip ---
|
|
181
|
+
// init, step_start, step_finish
|
|
182
|
+
}
|
|
183
|
+
catch {
|
|
184
|
+
// Skip unparseable lines
|
|
185
|
+
}
|
|
186
|
+
return events;
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Parse Gemini JSONL transcript into normalized events.
|
|
190
|
+
*/
|
|
191
|
+
export function parseGeminiTranscript(raw) {
|
|
192
|
+
const events = [];
|
|
193
|
+
const errors = [];
|
|
194
|
+
const lines = raw.split('\n').filter((line) => line.trim());
|
|
195
|
+
for (const line of lines) {
|
|
196
|
+
try {
|
|
197
|
+
const lineEvents = parseGeminiLine(line);
|
|
198
|
+
events.push(...lineEvents);
|
|
199
|
+
}
|
|
200
|
+
catch (e) {
|
|
201
|
+
errors.push(`Failed to parse line: ${e instanceof Error ? e.message : String(e)}`);
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
// Post-process: aggregate contiguous assistant delta messages into single events.
|
|
205
|
+
// This avoids inflating turn counts while still counting actual turns.
|
|
206
|
+
const aggregated = [];
|
|
207
|
+
for (const event of events) {
|
|
208
|
+
const isDelta = event.raw?._delta === true;
|
|
209
|
+
if (event.type === 'message' && event.role === 'assistant' && isDelta) {
|
|
210
|
+
const prev = aggregated[aggregated.length - 1];
|
|
211
|
+
if (prev?.type === 'message' &&
|
|
212
|
+
prev.role === 'assistant' &&
|
|
213
|
+
prev.raw?._delta === true) {
|
|
214
|
+
// Merge into previous delta message
|
|
215
|
+
prev.content = (prev.content || '') + (event.content || '');
|
|
216
|
+
continue;
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
aggregated.push(event);
|
|
220
|
+
}
|
|
221
|
+
// Post-process: extract metadata into tool args
|
|
222
|
+
for (const event of aggregated) {
|
|
223
|
+
if (event.type === 'tool_call' && event.tool) {
|
|
224
|
+
const args = event.tool.args || {};
|
|
225
|
+
if (['file_read', 'file_write', 'file_edit'].includes(event.tool.name)) {
|
|
226
|
+
const path = extractFilePath(args);
|
|
227
|
+
if (path) {
|
|
228
|
+
event.tool.args = { ...args, _extractedPath: path };
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
if (event.tool.name === 'shell') {
|
|
232
|
+
const command = extractCommand(args);
|
|
233
|
+
if (command) {
|
|
234
|
+
event.tool.args = { ...args, _extractedCommand: command };
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
return { events: aggregated, errors };
|
|
240
|
+
}
|
|
241
|
+
//# sourceMappingURL=gemini.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gemini.js","sourceRoot":"","sources":["../../../../src/lib/o11y/parsers/gemini.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Main parser entry point.
|
|
3
|
+
* Routes to agent-specific parsers and generates summaries.
|
|
4
|
+
*/
|
|
5
|
+
import type { Transcript, TranscriptSummary } from '../types.js';
|
|
6
|
+
import { parseClaudeCodeTranscript } from './claude-code.js';
|
|
7
|
+
import { parseCodexTranscript } from './codex.js';
|
|
8
|
+
import { parseOpenCodeTranscript } from './opencode.js';
|
|
9
|
+
import { parseGeminiTranscript } from './gemini.js';
|
|
10
|
+
import { parseCursorTranscript } from './cursor.js';
|
|
11
|
+
/**
|
|
12
|
+
* Supported agent types for parsing.
|
|
13
|
+
*/
|
|
14
|
+
export type ParseableAgent = 'vercel-ai-gateway/claude-code' | 'claude-code' | 'vercel-ai-gateway/codex' | 'codex' | 'opencode' | 'gemini' | 'cursor';
|
|
15
|
+
/**
|
|
16
|
+
* Parser registry mapping agent key patterns to their parsers.
|
|
17
|
+
*/
|
|
18
|
+
declare const AGENT_PARSERS: {
|
|
19
|
+
readonly 'claude-code': typeof parseClaudeCodeTranscript;
|
|
20
|
+
readonly codex: typeof parseCodexTranscript;
|
|
21
|
+
readonly opencode: typeof parseOpenCodeTranscript;
|
|
22
|
+
readonly gemini: typeof parseGeminiTranscript;
|
|
23
|
+
readonly cursor: typeof parseCursorTranscript;
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* List of supported agent keys for error messages.
|
|
27
|
+
*/
|
|
28
|
+
export declare const SUPPORTED_AGENTS: Array<keyof typeof AGENT_PARSERS>;
|
|
29
|
+
/**
|
|
30
|
+
* Parse a raw transcript into a structured format.
|
|
31
|
+
*
|
|
32
|
+
* @param raw - The raw transcript string (JSONL format)
|
|
33
|
+
* @param agent - The agent type that produced this transcript
|
|
34
|
+
* @param model - Optional model name
|
|
35
|
+
* @returns Transcript with events and summary
|
|
36
|
+
*/
|
|
37
|
+
export declare function parseTranscript(raw: string, agent: string, model?: string): Transcript;
|
|
38
|
+
/**
|
|
39
|
+
* Parse transcript and return only the summary (lighter weight).
|
|
40
|
+
*/
|
|
41
|
+
export declare function parseTranscriptSummary(raw: string, agent: string): TranscriptSummary;
|
|
42
|
+
/**
|
|
43
|
+
* Load a transcript from a string, handling both raw and parsed formats.
|
|
44
|
+
*
|
|
45
|
+
* - If the input is already a parsed transcript (JSON), returns it directly
|
|
46
|
+
* - If the input is raw JSONL from an agent, parses it
|
|
47
|
+
*
|
|
48
|
+
* @param content - The transcript content (raw JSONL or parsed JSON)
|
|
49
|
+
* @param agent - The agent type (required for raw transcripts, optional for parsed)
|
|
50
|
+
* @param model - Optional model name
|
|
51
|
+
* @returns Transcript
|
|
52
|
+
*/
|
|
53
|
+
export declare function loadTranscript(content: string, agent?: string, model?: string): Transcript;
|
|
54
|
+
export {};
|
|
55
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/lib/o11y/parsers/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAEV,UAAU,EACV,iBAAiB,EAIlB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAEpD;;GAEG;AACH,MAAM,MAAM,cAAc,GACtB,+BAA+B,GAC/B,aAAa,GACb,yBAAyB,GACzB,OAAO,GACP,UAAU,GACV,QAAQ,GACR,QAAQ,CAAC;AAEb;;GAEG;AACH,QAAA,MAAM,aAAa;;;;;;CAMT,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,gBAAgB,EAAiC,KAAK,CAAC,MAAM,OAAO,aAAa,CAAC,CAAC;AA2IhG;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAC7B,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EACb,KAAK,CAAC,EAAE,MAAM,GACb,UAAU,CAiFZ;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,GACZ,iBAAiB,CAGnB;AAiBD;;;;;;;;;;GAUG;AACH,wBAAgB,cAAc,CAC5B,OAAO,EAAE,MAAM,EACf,KAAK,CAAC,EAAE,MAAM,EACd,KAAK,CAAC,EAAE,MAAM,GACb,UAAU,CAyBZ"}
|
|
@@ -0,0 +1,284 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Main parser entry point.
|
|
3
|
+
* Routes to agent-specific parsers and generates summaries.
|
|
4
|
+
*/
|
|
5
|
+
import { parseClaudeCodeTranscript } from './claude-code.js';
|
|
6
|
+
import { parseCodexTranscript } from './codex.js';
|
|
7
|
+
import { parseOpenCodeTranscript } from './opencode.js';
|
|
8
|
+
import { parseGeminiTranscript } from './gemini.js';
|
|
9
|
+
import { parseCursorTranscript } from './cursor.js';
|
|
10
|
+
/**
|
|
11
|
+
* Parser registry mapping agent key patterns to their parsers.
|
|
12
|
+
*/
|
|
13
|
+
const AGENT_PARSERS = {
|
|
14
|
+
'claude-code': parseClaudeCodeTranscript,
|
|
15
|
+
'codex': parseCodexTranscript,
|
|
16
|
+
'opencode': parseOpenCodeTranscript,
|
|
17
|
+
'gemini': parseGeminiTranscript,
|
|
18
|
+
'cursor': parseCursorTranscript,
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* List of supported agent keys for error messages.
|
|
22
|
+
*/
|
|
23
|
+
export const SUPPORTED_AGENTS = Object.keys(AGENT_PARSERS);
|
|
24
|
+
/**
|
|
25
|
+
* Get the parser function for an agent type.
|
|
26
|
+
* Returns null if no parser is available for the agent.
|
|
27
|
+
*/
|
|
28
|
+
function getParserForAgent(agent) {
|
|
29
|
+
for (const key of SUPPORTED_AGENTS) {
|
|
30
|
+
if (agent.includes(key)) {
|
|
31
|
+
return AGENT_PARSERS[key];
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
return null;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Generate summary statistics from transcript events.
|
|
38
|
+
*/
|
|
39
|
+
function generateSummary(events) {
|
|
40
|
+
const toolCalls = {
|
|
41
|
+
file_read: 0,
|
|
42
|
+
file_write: 0,
|
|
43
|
+
file_edit: 0,
|
|
44
|
+
shell: 0,
|
|
45
|
+
web_fetch: 0,
|
|
46
|
+
web_search: 0,
|
|
47
|
+
glob: 0,
|
|
48
|
+
grep: 0,
|
|
49
|
+
list_dir: 0,
|
|
50
|
+
agent_task: 0,
|
|
51
|
+
unknown: 0,
|
|
52
|
+
};
|
|
53
|
+
const webFetches = [];
|
|
54
|
+
const filesRead = new Set();
|
|
55
|
+
const filesModified = new Set();
|
|
56
|
+
const shellCommands = [];
|
|
57
|
+
const errors = [];
|
|
58
|
+
let thinkingBlocks = 0;
|
|
59
|
+
let totalTurns = 0;
|
|
60
|
+
for (const event of events) {
|
|
61
|
+
switch (event.type) {
|
|
62
|
+
case 'message':
|
|
63
|
+
if (event.role === 'assistant') {
|
|
64
|
+
totalTurns++;
|
|
65
|
+
}
|
|
66
|
+
break;
|
|
67
|
+
case 'tool_call':
|
|
68
|
+
if (event.tool) {
|
|
69
|
+
toolCalls[event.tool.name]++;
|
|
70
|
+
const args = event.tool.args || {};
|
|
71
|
+
// Track file operations
|
|
72
|
+
if (event.tool.name === 'file_read') {
|
|
73
|
+
const path = (args._extractedPath || args.path || args.file);
|
|
74
|
+
if (path)
|
|
75
|
+
filesRead.add(path);
|
|
76
|
+
}
|
|
77
|
+
if (event.tool.name === 'file_write' || event.tool.name === 'file_edit') {
|
|
78
|
+
const path = (args._extractedPath || args.path || args.file);
|
|
79
|
+
if (path)
|
|
80
|
+
filesModified.add(path);
|
|
81
|
+
}
|
|
82
|
+
// Track web fetches
|
|
83
|
+
if (event.tool.name === 'web_fetch') {
|
|
84
|
+
const url = (args._extractedUrl || args.url || args.uri);
|
|
85
|
+
if (url) {
|
|
86
|
+
webFetches.push({
|
|
87
|
+
url,
|
|
88
|
+
method: args.method,
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
// Track shell commands
|
|
93
|
+
if (event.tool.name === 'shell') {
|
|
94
|
+
const command = (args._extractedCommand || args.command || args.cmd);
|
|
95
|
+
if (command) {
|
|
96
|
+
shellCommands.push({ command });
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
break;
|
|
101
|
+
case 'tool_result':
|
|
102
|
+
if (event.tool) {
|
|
103
|
+
// Update web fetch with success status
|
|
104
|
+
if (event.tool.success !== undefined) {
|
|
105
|
+
const lastFetch = webFetches[webFetches.length - 1];
|
|
106
|
+
if (lastFetch && !lastFetch.success) {
|
|
107
|
+
lastFetch.success = event.tool.success;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
// Update shell command with exit code
|
|
111
|
+
const lastCmd = shellCommands[shellCommands.length - 1];
|
|
112
|
+
if (lastCmd && lastCmd.exitCode === undefined) {
|
|
113
|
+
lastCmd.success = event.tool.success;
|
|
114
|
+
// Try to extract exit code from result
|
|
115
|
+
const result = event.tool.result;
|
|
116
|
+
if (typeof result === 'object' && result !== null && 'exitCode' in result) {
|
|
117
|
+
lastCmd.exitCode = result.exitCode;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
break;
|
|
122
|
+
case 'thinking':
|
|
123
|
+
thinkingBlocks++;
|
|
124
|
+
break;
|
|
125
|
+
case 'error':
|
|
126
|
+
if (event.content) {
|
|
127
|
+
errors.push(event.content);
|
|
128
|
+
}
|
|
129
|
+
break;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
const totalToolCalls = Object.values(toolCalls).reduce((a, b) => a + b, 0);
|
|
133
|
+
return {
|
|
134
|
+
totalTurns,
|
|
135
|
+
toolCalls,
|
|
136
|
+
totalToolCalls,
|
|
137
|
+
webFetches,
|
|
138
|
+
filesRead: Array.from(filesRead),
|
|
139
|
+
filesModified: Array.from(filesModified),
|
|
140
|
+
shellCommands,
|
|
141
|
+
errors,
|
|
142
|
+
thinkingBlocks,
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Parse a raw transcript into a structured format.
|
|
147
|
+
*
|
|
148
|
+
* @param raw - The raw transcript string (JSONL format)
|
|
149
|
+
* @param agent - The agent type that produced this transcript
|
|
150
|
+
* @param model - Optional model name
|
|
151
|
+
* @returns Transcript with events and summary
|
|
152
|
+
*/
|
|
153
|
+
export function parseTranscript(raw, agent, model) {
|
|
154
|
+
if (!raw || !raw.trim()) {
|
|
155
|
+
return {
|
|
156
|
+
agent,
|
|
157
|
+
model,
|
|
158
|
+
events: [],
|
|
159
|
+
summary: {
|
|
160
|
+
totalTurns: 0,
|
|
161
|
+
toolCalls: {
|
|
162
|
+
file_read: 0,
|
|
163
|
+
file_write: 0,
|
|
164
|
+
file_edit: 0,
|
|
165
|
+
shell: 0,
|
|
166
|
+
web_fetch: 0,
|
|
167
|
+
web_search: 0,
|
|
168
|
+
glob: 0,
|
|
169
|
+
grep: 0,
|
|
170
|
+
list_dir: 0,
|
|
171
|
+
agent_task: 0,
|
|
172
|
+
unknown: 0,
|
|
173
|
+
},
|
|
174
|
+
totalToolCalls: 0,
|
|
175
|
+
webFetches: [],
|
|
176
|
+
filesRead: [],
|
|
177
|
+
filesModified: [],
|
|
178
|
+
shellCommands: [],
|
|
179
|
+
errors: [],
|
|
180
|
+
thinkingBlocks: 0,
|
|
181
|
+
},
|
|
182
|
+
parseSuccess: true,
|
|
183
|
+
parseErrors: [],
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
const parser = getParserForAgent(agent);
|
|
187
|
+
// No parser available for this agent
|
|
188
|
+
if (!parser) {
|
|
189
|
+
return {
|
|
190
|
+
agent,
|
|
191
|
+
model,
|
|
192
|
+
events: [],
|
|
193
|
+
summary: {
|
|
194
|
+
totalTurns: 0,
|
|
195
|
+
toolCalls: {
|
|
196
|
+
file_read: 0,
|
|
197
|
+
file_write: 0,
|
|
198
|
+
file_edit: 0,
|
|
199
|
+
shell: 0,
|
|
200
|
+
web_fetch: 0,
|
|
201
|
+
web_search: 0,
|
|
202
|
+
glob: 0,
|
|
203
|
+
grep: 0,
|
|
204
|
+
list_dir: 0,
|
|
205
|
+
agent_task: 0,
|
|
206
|
+
unknown: 0,
|
|
207
|
+
},
|
|
208
|
+
totalToolCalls: 0,
|
|
209
|
+
webFetches: [],
|
|
210
|
+
filesRead: [],
|
|
211
|
+
filesModified: [],
|
|
212
|
+
shellCommands: [],
|
|
213
|
+
errors: [],
|
|
214
|
+
thinkingBlocks: 0,
|
|
215
|
+
},
|
|
216
|
+
parseSuccess: false,
|
|
217
|
+
parseErrors: [`No parser available for agent: ${agent}. Supported agents: ${SUPPORTED_AGENTS.join(', ')}`],
|
|
218
|
+
};
|
|
219
|
+
}
|
|
220
|
+
const { events, errors } = parser(raw);
|
|
221
|
+
const summary = generateSummary(events);
|
|
222
|
+
return {
|
|
223
|
+
agent,
|
|
224
|
+
model,
|
|
225
|
+
events,
|
|
226
|
+
summary,
|
|
227
|
+
parseSuccess: errors.length === 0,
|
|
228
|
+
parseErrors: errors.length > 0 ? errors : undefined,
|
|
229
|
+
};
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* Parse transcript and return only the summary (lighter weight).
|
|
233
|
+
*/
|
|
234
|
+
export function parseTranscriptSummary(raw, agent) {
|
|
235
|
+
const { summary } = parseTranscript(raw, agent);
|
|
236
|
+
return summary;
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* Check if a parsed object looks like a Transcript.
|
|
240
|
+
*/
|
|
241
|
+
function isTranscript(obj) {
|
|
242
|
+
if (typeof obj !== 'object' || obj === null)
|
|
243
|
+
return false;
|
|
244
|
+
const t = obj;
|
|
245
|
+
return (typeof t.agent === 'string' &&
|
|
246
|
+
Array.isArray(t.events) &&
|
|
247
|
+
typeof t.summary === 'object' &&
|
|
248
|
+
t.summary !== null &&
|
|
249
|
+
typeof t.parseSuccess === 'boolean');
|
|
250
|
+
}
|
|
251
|
+
/**
|
|
252
|
+
* Load a transcript from a string, handling both raw and parsed formats.
|
|
253
|
+
*
|
|
254
|
+
* - If the input is already a parsed transcript (JSON), returns it directly
|
|
255
|
+
* - If the input is raw JSONL from an agent, parses it
|
|
256
|
+
*
|
|
257
|
+
* @param content - The transcript content (raw JSONL or parsed JSON)
|
|
258
|
+
* @param agent - The agent type (required for raw transcripts, optional for parsed)
|
|
259
|
+
* @param model - Optional model name
|
|
260
|
+
* @returns Transcript
|
|
261
|
+
*/
|
|
262
|
+
export function loadTranscript(content, agent, model) {
|
|
263
|
+
const trimmed = content.trim();
|
|
264
|
+
// Try to detect if it's already a parsed transcript (single JSON object)
|
|
265
|
+
// Parsed transcripts start with { and are valid JSON with our structure
|
|
266
|
+
if (trimmed.startsWith('{') && !trimmed.includes('\n{')) {
|
|
267
|
+
try {
|
|
268
|
+
const parsed = JSON.parse(trimmed);
|
|
269
|
+
if (isTranscript(parsed)) {
|
|
270
|
+
return parsed;
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
catch {
|
|
274
|
+
// Not valid JSON, treat as raw transcript
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
// It's a raw transcript - agent is required
|
|
278
|
+
if (!agent) {
|
|
279
|
+
throw new Error('Agent type is required when parsing raw transcripts. ' +
|
|
280
|
+
'Provide the agent parameter or use an already-parsed transcript.');
|
|
281
|
+
}
|
|
282
|
+
return parseTranscript(content, agent, model);
|
|
283
|
+
}
|
|
284
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/lib/o11y/parsers/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAUH,OAAO,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAcpD;;GAEG;AACH,MAAM,aAAa,GAAG;IACpB,aAAa,EAAE,yBAAyB;IACxC,OAAO,EAAE,oBAAoB;IAC7B,UAAU,EAAE,uBAAuB;IACnC,QAAQ,EAAE,qBAAqB;IAC/B,QAAQ,EAAE,qBAAqB;CACvB,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,CAAsC,CAAC;AAEhG;;;GAGG;AACH,SAAS,iBAAiB,CACxB,KAAa;IAEb,KAAK,MAAM,GAAG,IAAI,gBAAgB,EAAE,CAAC;QACnC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACxB,OAAO,aAAa,CAAC,GAAG,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,SAAS,eAAe,CAAC,MAAyB;IAChD,MAAM,SAAS,GAA6B;QAC1C,SAAS,EAAE,CAAC;QACZ,UAAU,EAAE,CAAC;QACb,SAAS,EAAE,CAAC;QACZ,KAAK,EAAE,CAAC;QACR,SAAS,EAAE,CAAC;QACZ,UAAU,EAAE,CAAC;QACb,IAAI,EAAE,CAAC;QACP,IAAI,EAAE,CAAC;QACP,QAAQ,EAAE,CAAC;QACX,UAAU,EAAE,CAAC;QACb,OAAO,EAAE,CAAC;KACX,CAAC;IAEF,MAAM,UAAU,GAAmB,EAAE,CAAC;IACtC,MAAM,SAAS,GAAgB,IAAI,GAAG,EAAE,CAAC;IACzC,MAAM,aAAa,GAAgB,IAAI,GAAG,EAAE,CAAC;IAC7C,MAAM,aAAa,GAAuB,EAAE,CAAC;IAC7C,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,cAAc,GAAG,CAAC,CAAC;IACvB,IAAI,UAAU,GAAG,CAAC,CAAC;IAEnB,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;YACnB,KAAK,SAAS;gBACZ,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;oBAC/B,UAAU,EAAE,CAAC;gBACf,CAAC;gBACD,MAAM;YAER,KAAK,WAAW;gBACd,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;oBACf,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;oBAE7B,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;oBAEnC,wBAAwB;oBACxB,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;wBACpC,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAW,CAAC;wBACvE,IAAI,IAAI;4BAAE,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;oBAChC,CAAC;oBAED,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,YAAY,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;wBACxE,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAW,CAAC;wBACvE,IAAI,IAAI;4BAAE,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;oBACpC,CAAC;oBAED,oBAAoB;oBACpB,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;wBACpC,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAW,CAAC;wBACnE,IAAI,GAAG,EAAE,CAAC;4BACR,UAAU,CAAC,IAAI,CAAC;gCACd,GAAG;gCACH,MAAM,EAAE,IAAI,CAAC,MAAgB;6BAC9B,CAAC,CAAC;wBACL,CAAC;oBACH,CAAC;oBAED,uBAAuB;oBACvB,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;wBAChC,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,GAAG,CAAW,CAAC;wBAC/E,IAAI,OAAO,EAAE,CAAC;4BACZ,aAAa,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;wBAClC,CAAC;oBACH,CAAC;gBACH,CAAC;gBACD,MAAM;YAER,KAAK,aAAa;gBAChB,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;oBACf,uCAAuC;oBACvC,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;wBACrC,MAAM,SAAS,GAAG,UAAU,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;wBACpD,IAAI,SAAS,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;4BACpC,SAAS,CAAC,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;wBACzC,CAAC;oBACH,CAAC;oBAED,sCAAsC;oBACtC,MAAM,OAAO,GAAG,aAAa,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;oBACxD,IAAI,OAAO,IAAI,OAAO,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;wBAC9C,OAAO,CAAC,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;wBACrC,uCAAuC;wBACvC,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;wBACjC,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,IAAI,UAAU,IAAI,MAAM,EAAE,CAAC;4BAC1E,OAAO,CAAC,QAAQ,GAAI,MAA+B,CAAC,QAAQ,CAAC;wBAC/D,CAAC;oBACH,CAAC;gBACH,CAAC;gBACD,MAAM;YAER,KAAK,UAAU;gBACb,cAAc,EAAE,CAAC;gBACjB,MAAM;YAER,KAAK,OAAO;gBACV,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;oBAClB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBAC7B,CAAC;gBACD,MAAM;QACV,CAAC;IACH,CAAC;IAED,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IAE3E,OAAO;QACL,UAAU;QACV,SAAS;QACT,cAAc;QACd,UAAU;QACV,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;QAChC,aAAa,EAAE,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC;QACxC,aAAa;QACb,MAAM;QACN,cAAc;KACf,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,eAAe,CAC7B,GAAW,EACX,KAAa,EACb,KAAc;IAEd,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC;QACxB,OAAO;YACL,KAAK;YACL,KAAK;YACL,MAAM,EAAE,EAAE;YACV,OAAO,EAAE;gBACP,UAAU,EAAE,CAAC;gBACb,SAAS,EAAE;oBACT,SAAS,EAAE,CAAC;oBACZ,UAAU,EAAE,CAAC;oBACb,SAAS,EAAE,CAAC;oBACZ,KAAK,EAAE,CAAC;oBACR,SAAS,EAAE,CAAC;oBACZ,UAAU,EAAE,CAAC;oBACb,IAAI,EAAE,CAAC;oBACP,IAAI,EAAE,CAAC;oBACP,QAAQ,EAAE,CAAC;oBACX,UAAU,EAAE,CAAC;oBACb,OAAO,EAAE,CAAC;iBACX;gBACD,cAAc,EAAE,CAAC;gBACjB,UAAU,EAAE,EAAE;gBACd,SAAS,EAAE,EAAE;gBACb,aAAa,EAAE,EAAE;gBACjB,aAAa,EAAE,EAAE;gBACjB,MAAM,EAAE,EAAE;gBACV,cAAc,EAAE,CAAC;aAClB;YACD,YAAY,EAAE,IAAI;YAClB,WAAW,EAAE,EAAE;SAChB,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;IAExC,qCAAqC;IACrC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO;YACL,KAAK;YACL,KAAK;YACL,MAAM,EAAE,EAAE;YACV,OAAO,EAAE;gBACP,UAAU,EAAE,CAAC;gBACb,SAAS,EAAE;oBACT,SAAS,EAAE,CAAC;oBACZ,UAAU,EAAE,CAAC;oBACb,SAAS,EAAE,CAAC;oBACZ,KAAK,EAAE,CAAC;oBACR,SAAS,EAAE,CAAC;oBACZ,UAAU,EAAE,CAAC;oBACb,IAAI,EAAE,CAAC;oBACP,IAAI,EAAE,CAAC;oBACP,QAAQ,EAAE,CAAC;oBACX,UAAU,EAAE,CAAC;oBACb,OAAO,EAAE,CAAC;iBACX;gBACD,cAAc,EAAE,CAAC;gBACjB,UAAU,EAAE,EAAE;gBACd,SAAS,EAAE,EAAE;gBACb,aAAa,EAAE,EAAE;gBACjB,aAAa,EAAE,EAAE;gBACjB,MAAM,EAAE,EAAE;gBACV,cAAc,EAAE,CAAC;aAClB;YACD,YAAY,EAAE,KAAK;YACnB,WAAW,EAAE,CAAC,kCAAkC,KAAK,uBAAuB,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;SAC3G,CAAC;IACJ,CAAC;IAED,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IACvC,MAAM,OAAO,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IAExC,OAAO;QACL,KAAK;QACL,KAAK;QACL,MAAM;QACN,OAAO;QACP,YAAY,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC;QACjC,WAAW,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;KACpD,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB,CACpC,GAAW,EACX,KAAa;IAEb,MAAM,EAAE,OAAO,EAAE,GAAG,eAAe,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAChD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,SAAS,YAAY,CAAC,GAAY;IAChC,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IAC1D,MAAM,CAAC,GAAG,GAA8B,CAAC;IACzC,OAAO,CACL,OAAO,CAAC,CAAC,KAAK,KAAK,QAAQ;QAC3B,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;QACvB,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ;QAC7B,CAAC,CAAC,OAAO,KAAK,IAAI;QAClB,OAAO,CAAC,CAAC,YAAY,KAAK,SAAS,CACpC,CAAC;AACJ,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,cAAc,CAC5B,OAAe,EACf,KAAc,EACd,KAAc;IAEd,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAE/B,yEAAyE;IACzE,wEAAwE;IACxE,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACxD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACnC,IAAI,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC;gBACzB,OAAO,MAAM,CAAC;YAChB,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,0CAA0C;QAC5C,CAAC;IACH,CAAC;IAED,4CAA4C;IAC5C,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CACb,uDAAuD;YACvD,kEAAkE,CACnE,CAAC;IACJ,CAAC;IAED,OAAO,eAAe,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;AAChD,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parser for OpenCode CLI transcript format.
|
|
3
|
+
* OpenCode outputs JSON events to stdout when run with --format json.
|
|
4
|
+
*
|
|
5
|
+
* Format reference (based on OpenCode CLI output):
|
|
6
|
+
* - Events have a "kind" field indicating the event type
|
|
7
|
+
* - Messages, tool calls, and results are separate events
|
|
8
|
+
*/
|
|
9
|
+
import type { TranscriptEvent } from '../types.js';
|
|
10
|
+
/**
|
|
11
|
+
* Parse OpenCode JSONL transcript into normalized events.
|
|
12
|
+
*/
|
|
13
|
+
export declare function parseOpenCodeTranscript(raw: string): {
|
|
14
|
+
events: TranscriptEvent[];
|
|
15
|
+
errors: string[];
|
|
16
|
+
};
|
|
17
|
+
//# sourceMappingURL=opencode.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"opencode.d.ts","sourceRoot":"","sources":["../../../../src/lib/o11y/parsers/opencode.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAY,MAAM,aAAa,CAAC;AAqS7D;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,MAAM,GAAG;IACpD,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB,CA+CA"}
|