@telora/daemon-core 0.2.25 → 0.2.28

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.
@@ -5,11 +5,11 @@
5
5
  * it via the provided callback. Uses dirty-checking (JSON.stringify comparison)
6
6
  * to avoid redundant calls.
7
7
  *
8
- * Designed to be attached to a StreamJsonParser for a single agent session.
9
- * Every flush is wrapped in try/catch -- a failed activity write must NEVER
10
- * crash the process.
8
+ * Designed to be attached to an engine-agnostic `AgentEventParser` for a single
9
+ * agent session. Every flush is wrapped in try/catch -- a failed activity write
10
+ * must NEVER crash the process.
11
11
  */
12
- import type { StreamJsonParser } from './stream-json.js';
12
+ import type { AgentEventParser } from './agent-event.js';
13
13
  export interface ActivitySnapshot {
14
14
  /** Name of the tool currently being invoked (e.g. "Edit", "Bash", "Read"). */
15
15
  currentTool: string | null;
@@ -39,16 +39,17 @@ export declare class ActivityTracker {
39
39
  */
40
40
  onNarration(callback: (text: string) => void): void;
41
41
  /**
42
- * Attach the tracker to a StreamJsonParser.
43
- * Listens for assistant messages and result events.
42
+ * Attach the tracker to an AgentEventParser.
43
+ * Listens for narration, tool-activity, and result events.
44
44
  */
45
- attach(parser: StreamJsonParser): void;
45
+ attach(parser: AgentEventParser): void;
46
46
  /**
47
- * Process an assistant message.
48
- * - tool_use blocks: update currentTool/currentFile and flush immediately.
49
- * - text blocks: update lastText (dirty, no immediate flush).
47
+ * Route a neutral agent event:
48
+ * - tool_activity: update currentTool/currentFile and flush immediately.
49
+ * - narration: update lastText (dirty, no immediate flush).
50
+ * - result: increment turn count, accumulate tokens/cost, flush.
50
51
  */
51
- private handleAssistantMessage;
52
+ private handleEvent;
52
53
  /**
53
54
  * Process a result event.
54
55
  * Increments turn count, updates token/cost totals, flushes.
@@ -1 +1 @@
1
- {"version":3,"file":"activity-tracker.d.ts","sourceRoot":"","sources":["../src/activity-tracker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAyE,MAAM,kBAAkB,CAAC;AAIhI,MAAM,WAAW,gBAAgB;IAC/B,8EAA8E;IAC9E,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,mDAAmD;IACnD,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,mEAAmE;IACnE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,iDAAiD;IACjD,SAAS,EAAE,MAAM,CAAC;IAClB,wCAAwC;IACxC,WAAW,EAAE,MAAM,CAAC;IACpB,8BAA8B;IAC9B,YAAY,EAAE,MAAM,CAAC;IACrB,uCAAuC;IACvC,SAAS,EAAE,MAAM,CAAC;CACnB;AA8BD,qBAAa,eAAe;IAC1B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,QAAQ,CAAmB;IACnC,OAAO,CAAC,eAAe,CAAM;IAC7B,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,mBAAmB,CAAyC;IACpE,OAAO,CAAC,aAAa,CAAgD;gBAGnE,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,CAAC,QAAQ,EAAE,gBAAgB,KAAK,OAAO,CAAC,IAAI,CAAC;IAe9D;;OAEG;IACH,WAAW,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI;IAInD;;;OAGG;IACH,MAAM,CAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI;IAUtC;;;;OAIG;IACH,OAAO,CAAC,sBAAsB;IAwB9B;;;OAGG;IACH,OAAO,CAAC,YAAY;IAiBpB;;;OAGG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAMjC;;;;OAIG;YACW,KAAK;CAwBpB"}
1
+ {"version":3,"file":"activity-tracker.d.ts","sourceRoot":"","sources":["../src/activity-tracker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAc,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAIrE,MAAM,WAAW,gBAAgB;IAC/B,8EAA8E;IAC9E,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,mDAAmD;IACnD,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,mEAAmE;IACnE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,iDAAiD;IACjD,SAAS,EAAE,MAAM,CAAC;IAClB,wCAAwC;IACxC,WAAW,EAAE,MAAM,CAAC;IACpB,8BAA8B;IAC9B,YAAY,EAAE,MAAM,CAAC;IACrB,uCAAuC;IACvC,SAAS,EAAE,MAAM,CAAC;CACnB;AAID,qBAAa,eAAe;IAC1B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,QAAQ,CAAmB;IACnC,OAAO,CAAC,eAAe,CAAM;IAC7B,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,mBAAmB,CAAyC;IACpE,OAAO,CAAC,aAAa,CAAgD;gBAGnE,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,CAAC,QAAQ,EAAE,gBAAgB,KAAK,OAAO,CAAC,IAAI,CAAC;IAe9D;;OAEG;IACH,WAAW,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI;IAInD;;;OAGG;IACH,MAAM,CAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI;IAMtC;;;;;OAKG;IACH,OAAO,CAAC,WAAW;IA0BnB;;;OAGG;IACH,OAAO,CAAC,YAAY;IAepB;;;OAGG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAMjC;;;;OAIG;YACW,KAAK;CAwBpB"}
@@ -5,33 +5,10 @@
5
5
  * it via the provided callback. Uses dirty-checking (JSON.stringify comparison)
6
6
  * to avoid redundant calls.
7
7
  *
8
- * Designed to be attached to a StreamJsonParser for a single agent session.
9
- * Every flush is wrapped in try/catch -- a failed activity write must NEVER
10
- * crash the process.
8
+ * Designed to be attached to an engine-agnostic `AgentEventParser` for a single
9
+ * agent session. Every flush is wrapped in try/catch -- a failed activity write
10
+ * must NEVER crash the process.
11
11
  */
12
- // -- File path extraction -----------------------------------------------------
13
- /** Keys in tool input that commonly contain file paths. */
14
- const FILE_PATH_KEYS = ['file_path', 'path', 'command', 'notebook_path'];
15
- /**
16
- * Extract a file path from tool input, if present.
17
- * Checks common keys first, then falls back to scanning string values
18
- * that look like absolute paths.
19
- */
20
- function extractFilePath(input) {
21
- // Check well-known keys first
22
- for (const key of FILE_PATH_KEYS) {
23
- const val = input[key];
24
- if (typeof val === 'string' && val.length > 0) {
25
- // For 'command' key, try to extract a path from the command string
26
- if (key === 'command') {
27
- const pathMatch = val.match(/(?:^|\s)(\/[^\s'"]+)/);
28
- return pathMatch ? pathMatch[1] : null;
29
- }
30
- return val;
31
- }
32
- }
33
- return null;
34
- }
35
12
  // -- Tracker class ------------------------------------------------------------
36
13
  export class ActivityTracker {
37
14
  sessionId;
@@ -60,55 +37,51 @@ export class ActivityTracker {
60
37
  this.onNarrationCallback = callback;
61
38
  }
62
39
  /**
63
- * Attach the tracker to a StreamJsonParser.
64
- * Listens for assistant messages and result events.
40
+ * Attach the tracker to an AgentEventParser.
41
+ * Listens for narration, tool-activity, and result events.
65
42
  */
66
43
  attach(parser) {
67
- parser.on('assistant', (msg) => {
68
- this.handleAssistantMessage(msg);
69
- });
70
- parser.on('result', (result) => {
71
- this.handleResult(result);
44
+ parser.on('agent_event', (event) => {
45
+ this.handleEvent(event);
72
46
  });
73
47
  }
74
48
  /**
75
- * Process an assistant message.
76
- * - tool_use blocks: update currentTool/currentFile and flush immediately.
77
- * - text blocks: update lastText (dirty, no immediate flush).
49
+ * Route a neutral agent event:
50
+ * - tool_activity: update currentTool/currentFile and flush immediately.
51
+ * - narration: update lastText (dirty, no immediate flush).
52
+ * - result: increment turn count, accumulate tokens/cost, flush.
78
53
  */
79
- handleAssistantMessage(msg) {
80
- let hasToolUse = false;
81
- for (const block of msg.message.content) {
82
- if (block.type === 'tool_use') {
83
- const toolBlock = block;
84
- this.snapshot.currentTool = toolBlock.name;
85
- this.snapshot.currentFile = extractFilePath(toolBlock.input);
86
- hasToolUse = true;
87
- }
88
- else if (block.type === 'text') {
89
- const textBlock = block;
90
- if (textBlock.text.length > 0) {
91
- this.snapshot.lastText = textBlock.text.slice(0, 200);
54
+ handleEvent(event) {
55
+ switch (event.kind) {
56
+ case 'tool_activity':
57
+ this.snapshot.currentTool = event.tool;
58
+ this.snapshot.currentFile = event.file;
59
+ // Flush immediately on tool use to show real-time activity
60
+ this.flush();
61
+ break;
62
+ case 'narration':
63
+ if (event.text.length > 0) {
64
+ this.snapshot.lastText = event.text.slice(0, 200);
92
65
  this.onNarrationCallback?.(this.snapshot.lastText);
93
66
  }
94
- }
95
- }
96
- // Flush immediately on tool_use to show real-time activity
97
- if (hasToolUse) {
98
- this.flush();
67
+ break;
68
+ case 'result':
69
+ this.handleResult(event);
70
+ break;
71
+ default:
72
+ // session_started / subagent_activity / error are not activity signals
73
+ break;
99
74
  }
100
75
  }
101
76
  /**
102
77
  * Process a result event.
103
78
  * Increments turn count, updates token/cost totals, flushes.
104
79
  */
105
- handleResult(result) {
80
+ handleResult(event) {
106
81
  this.snapshot.turnCount++;
107
- if (result.usage) {
108
- this.snapshot.totalTokens += (result.usage.input_tokens ?? 0) + (result.usage.output_tokens ?? 0);
109
- }
110
- if (result.total_cost_usd) {
111
- this.snapshot.totalCostUsd += result.total_cost_usd;
82
+ this.snapshot.totalTokens += (event.inputTokens ?? 0) + (event.outputTokens ?? 0);
83
+ if (event.totalCostUsd) {
84
+ this.snapshot.totalCostUsd += event.totalCostUsd;
112
85
  }
113
86
  // Clear current tool/file since the turn is complete
114
87
  this.snapshot.currentTool = null;
@@ -1 +1 @@
1
- {"version":3,"file":"activity-tracker.js","sourceRoot":"","sources":["../src/activity-tracker.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"activity-tracker.js","sourceRoot":"","sources":["../src/activity-tracker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,97 @@
1
+ /**
2
+ * Provider-neutral agent event model.
3
+ *
4
+ * This is the engine-agnostic event contract that downstream daemon consumers
5
+ * (completion detection, session-id capture, activity tracking, output logging)
6
+ * read instead of any one engine's wire format. Each coding-agent backend
7
+ * (Claude Code, Codex, ...) supplies an `AgentEventParser` that maps its own
8
+ * stream into this union.
9
+ *
10
+ * Design notes:
11
+ * - The union is small on purpose: it carries only what daemon control flow and
12
+ * observability need, not a faithful re-encoding of every engine event.
13
+ * - `raw` events (carrying the untouched engine payload plus an optional
14
+ * human-readable log line) are emitted alongside the neutral stream so log
15
+ * files keep byte-for-byte parity with each engine's native formatting.
16
+ *
17
+ * Lives in daemon-core (not the daemon package) because the shared
18
+ * `ActivityTracker` consumes it, and daemon-core must not depend on the daemon.
19
+ */
20
+ import type { Readable } from 'node:stream';
21
+ /** Session began; carries the engine's session id for resume + the model. */
22
+ export interface AgentSessionStartedEvent {
23
+ kind: 'session_started';
24
+ /** Engine session id, replayed on resume (stored per-lineage on the focus). */
25
+ sessionId: string;
26
+ /** Model the engine reported for the session, if known. */
27
+ model?: string;
28
+ }
29
+ /** The lead/agent emitted assistant prose (used for narration/heartbeat). */
30
+ export interface AgentNarrationEvent {
31
+ kind: 'narration';
32
+ /** Assistant text (already trimmed by the parser if needed). */
33
+ text: string;
34
+ }
35
+ /** The agent invoked a tool (used for live activity snapshots). */
36
+ export interface AgentToolActivityEvent {
37
+ kind: 'tool_activity';
38
+ /** Tool name (e.g. "Edit", "Bash", "Read"). */
39
+ tool: string;
40
+ /** File path extracted from the tool input, if any. */
41
+ file: string | null;
42
+ /** Raw tool input, when the engine provides it. */
43
+ input?: Record<string, unknown>;
44
+ }
45
+ /** A worker/subagent lifecycle transition (spawn/idle/complete). */
46
+ export interface AgentSubagentActivityEvent {
47
+ kind: 'subagent_activity';
48
+ phase: 'spawned' | 'idle' | 'completed';
49
+ /** Engine-local id for the subagent. */
50
+ agentId: string;
51
+ /** Human-friendly subagent name. */
52
+ agentName: string;
53
+ /** Whether a completed subagent finished with an error. */
54
+ isError?: boolean;
55
+ }
56
+ /** A turn completed (the lead finished a unit of work). Drives completion. */
57
+ export interface AgentResultEvent {
58
+ kind: 'result';
59
+ isError: boolean;
60
+ /** Number of turns the engine reported for this result. */
61
+ numTurns: number;
62
+ totalCostUsd?: number;
63
+ inputTokens?: number;
64
+ outputTokens?: number;
65
+ }
66
+ /** A parse/stream error surfaced by the engine adapter. */
67
+ export interface AgentErrorEvent {
68
+ kind: 'error';
69
+ message: string;
70
+ }
71
+ /** Provider-neutral event union consumed by all downstream daemon code. */
72
+ export type AgentEvent = AgentSessionStartedEvent | AgentNarrationEvent | AgentToolActivityEvent | AgentSubagentActivityEvent | AgentResultEvent | AgentErrorEvent;
73
+ /**
74
+ * Engine-agnostic parser interface. A backend's parser attaches to the spawned
75
+ * process stdout and emits the neutral `AgentEvent` stream plus a `raw` channel
76
+ * for verbatim/log output.
77
+ *
78
+ * Event channels:
79
+ * - `agent_event` -- one neutral `AgentEvent` per recognized engine event.
80
+ * - `raw` -- the untouched engine event object + an optional
81
+ * human-readable log line (null when the event is too
82
+ * granular to log). Consumers write the object to the JSONL
83
+ * log and the line to the stdout log.
84
+ * - `error` -- a parse failure (malformed line); never crashes the parser.
85
+ */
86
+ export interface AgentEventParser {
87
+ /** Attach to a readable stream (typically process.stdout). */
88
+ attach(stream: Readable): void;
89
+ /** Engine session id, captured from the first session-bearing event. */
90
+ readonly sessionId: string | null;
91
+ /** Timestamp of the most recent successfully parsed event. */
92
+ readonly lastEventTime: Date;
93
+ on(event: 'agent_event', listener: (e: AgentEvent) => void): this;
94
+ on(event: 'raw', listener: (raw: unknown, logLine: string | null) => void): this;
95
+ on(event: 'error', listener: (err: Error, line: string) => void): this;
96
+ }
97
+ //# sourceMappingURL=agent-event.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-event.d.ts","sourceRoot":"","sources":["../src/agent-event.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAI5C,6EAA6E;AAC7E,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,iBAAiB,CAAC;IACxB,+EAA+E;IAC/E,SAAS,EAAE,MAAM,CAAC;IAClB,2DAA2D;IAC3D,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,6EAA6E;AAC7E,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,WAAW,CAAC;IAClB,gEAAgE;IAChE,IAAI,EAAE,MAAM,CAAC;CACd;AAED,mEAAmE;AACnE,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,eAAe,CAAC;IACtB,+CAA+C;IAC/C,IAAI,EAAE,MAAM,CAAC;IACb,uDAAuD;IACvD,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,mDAAmD;IACnD,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC;AAED,oEAAoE;AACpE,MAAM,WAAW,0BAA0B;IACzC,IAAI,EAAE,mBAAmB,CAAC;IAC1B,KAAK,EAAE,SAAS,GAAG,MAAM,GAAG,WAAW,CAAC;IACxC,wCAAwC;IACxC,OAAO,EAAE,MAAM,CAAC;IAChB,oCAAoC;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,2DAA2D;IAC3D,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,8EAA8E;AAC9E,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,QAAQ,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,2DAA2D;IAC3D,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,2DAA2D;AAC3D,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,2EAA2E;AAC3E,MAAM,MAAM,UAAU,GAClB,wBAAwB,GACxB,mBAAmB,GACnB,sBAAsB,GACtB,0BAA0B,GAC1B,gBAAgB,GAChB,eAAe,CAAC;AAIpB;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,gBAAgB;IAC/B,8DAA8D;IAC9D,MAAM,CAAC,MAAM,EAAE,QAAQ,GAAG,IAAI,CAAC;IAC/B,wEAAwE;IACxE,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,8DAA8D;IAC9D,QAAQ,CAAC,aAAa,EAAE,IAAI,CAAC;IAE7B,EAAE,CAAC,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,IAAI,GAAG,IAAI,CAAC;IAClE,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,GAAG,IAAI,CAAC;IACjF,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI,CAAC;CACxE"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Provider-neutral agent event model.
3
+ *
4
+ * This is the engine-agnostic event contract that downstream daemon consumers
5
+ * (completion detection, session-id capture, activity tracking, output logging)
6
+ * read instead of any one engine's wire format. Each coding-agent backend
7
+ * (Claude Code, Codex, ...) supplies an `AgentEventParser` that maps its own
8
+ * stream into this union.
9
+ *
10
+ * Design notes:
11
+ * - The union is small on purpose: it carries only what daemon control flow and
12
+ * observability need, not a faithful re-encoding of every engine event.
13
+ * - `raw` events (carrying the untouched engine payload plus an optional
14
+ * human-readable log line) are emitted alongside the neutral stream so log
15
+ * files keep byte-for-byte parity with each engine's native formatting.
16
+ *
17
+ * Lives in daemon-core (not the daemon package) because the shared
18
+ * `ActivityTracker` consumes it, and daemon-core must not depend on the daemon.
19
+ */
20
+ export {};
21
+ //# sourceMappingURL=agent-event.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-event.js","sourceRoot":"","sources":["../src/agent-event.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Claude Code adapter: maps the Claude `stream-json` event stream onto the
3
+ * provider-neutral `AgentEvent` contract.
4
+ *
5
+ * This is the `AgentEventParser` implementation for the `claude` backend. It
6
+ * wraps the canonical `StreamJsonParser` (the Claude wire-format reader) and
7
+ * translates each recognized event into a neutral `AgentEvent`, while also
8
+ * re-emitting every raw event (plus a human-readable log line) on the `raw`
9
+ * channel so log files keep parity with Claude's native formatting.
10
+ *
11
+ * Mapping:
12
+ * init -> session_started { sessionId, model }
13
+ * teammate_* -> subagent_activity { phase, agentId, agentName, isError }
14
+ * assistant text -> narration { text } (non-empty blocks only)
15
+ * assistant tool_use -> tool_activity { tool, file, input }
16
+ * assistant thinking -> (dropped: neither narration nor tool activity)
17
+ * result -> result { isError, numTurns, totalCostUsd, tokens }
18
+ * parser error -> error { message }
19
+ */
20
+ import { EventEmitter } from 'node:events';
21
+ import type { Readable } from 'node:stream';
22
+ import type { AgentEventParser } from './agent-event.js';
23
+ /**
24
+ * Extract a file path from tool input, if present.
25
+ * Checks common keys first; for the `command` key, pulls the first absolute
26
+ * path out of the command string.
27
+ */
28
+ export declare function extractFilePath(input: Record<string, unknown>): string | null;
29
+ /**
30
+ * `AgentEventParser` for Claude Code. Owns an internal `StreamJsonParser` and
31
+ * forwards translated + raw events.
32
+ */
33
+ export declare class ClaudeAgentParser extends EventEmitter implements AgentEventParser {
34
+ private readonly inner;
35
+ get sessionId(): string | null;
36
+ get lastEventTime(): Date;
37
+ attach(stream: Readable): void;
38
+ /** Decompose an assistant message into narration + tool-activity events. */
39
+ private translateAssistant;
40
+ private emitAgentEvent;
41
+ }
42
+ //# sourceMappingURL=claude-agent-parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-agent-parser.d.ts","sourceRoot":"","sources":["../src/claude-agent-parser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,KAAK,EAEV,gBAAgB,EACjB,MAAM,kBAAkB,CAAC;AAgB1B;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,GAAG,IAAI,CAY7E;AAWD;;;GAGG;AACH,qBAAa,iBAAkB,SAAQ,YAAa,YAAW,gBAAgB;IAC7E,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA0B;IAEhD,IAAI,SAAS,IAAI,MAAM,GAAG,IAAI,CAAiC;IAC/D,IAAI,aAAa,IAAI,IAAI,CAAqC;IAE9D,MAAM,CAAC,MAAM,EAAE,QAAQ,GAAG,IAAI;IA0C9B,4EAA4E;IAC5E,OAAO,CAAC,kBAAkB;IAoB1B,OAAO,CAAC,cAAc;CAGvB"}
@@ -0,0 +1,119 @@
1
+ /**
2
+ * Claude Code adapter: maps the Claude `stream-json` event stream onto the
3
+ * provider-neutral `AgentEvent` contract.
4
+ *
5
+ * This is the `AgentEventParser` implementation for the `claude` backend. It
6
+ * wraps the canonical `StreamJsonParser` (the Claude wire-format reader) and
7
+ * translates each recognized event into a neutral `AgentEvent`, while also
8
+ * re-emitting every raw event (plus a human-readable log line) on the `raw`
9
+ * channel so log files keep parity with Claude's native formatting.
10
+ *
11
+ * Mapping:
12
+ * init -> session_started { sessionId, model }
13
+ * teammate_* -> subagent_activity { phase, agentId, agentName, isError }
14
+ * assistant text -> narration { text } (non-empty blocks only)
15
+ * assistant tool_use -> tool_activity { tool, file, input }
16
+ * assistant thinking -> (dropped: neither narration nor tool activity)
17
+ * result -> result { isError, numTurns, totalCostUsd, tokens }
18
+ * parser error -> error { message }
19
+ */
20
+ import { EventEmitter } from 'node:events';
21
+ import { StreamJsonParser, } from './stream-json.js';
22
+ import { formatEventForLog } from './event-logger.js';
23
+ /** Keys in tool input that commonly contain file paths. */
24
+ const FILE_PATH_KEYS = ['file_path', 'path', 'command', 'notebook_path'];
25
+ /**
26
+ * Extract a file path from tool input, if present.
27
+ * Checks common keys first; for the `command` key, pulls the first absolute
28
+ * path out of the command string.
29
+ */
30
+ export function extractFilePath(input) {
31
+ for (const key of FILE_PATH_KEYS) {
32
+ const val = input[key];
33
+ if (typeof val === 'string' && val.length > 0) {
34
+ if (key === 'command') {
35
+ const pathMatch = val.match(/(?:^|\s)(\/[^\s'"]+)/);
36
+ return pathMatch ? pathMatch[1] : null;
37
+ }
38
+ return val;
39
+ }
40
+ }
41
+ return null;
42
+ }
43
+ /** Map a teammate subtype to a neutral subagent phase. */
44
+ function teammatePhase(subtype) {
45
+ switch (subtype) {
46
+ case 'teammate_spawned': return 'spawned';
47
+ case 'teammate_idle': return 'idle';
48
+ case 'teammate_completed': return 'completed';
49
+ }
50
+ }
51
+ /**
52
+ * `AgentEventParser` for Claude Code. Owns an internal `StreamJsonParser` and
53
+ * forwards translated + raw events.
54
+ */
55
+ export class ClaudeAgentParser extends EventEmitter {
56
+ inner = new StreamJsonParser();
57
+ get sessionId() { return this.inner.sessionId; }
58
+ get lastEventTime() { return this.inner.lastEventTime; }
59
+ attach(stream) {
60
+ // Raw channel: every parsed event, with the Claude-specific log formatting.
61
+ this.inner.on('event', (event) => {
62
+ this.emit('raw', event, formatEventForLog(event));
63
+ });
64
+ this.inner.on('init', (event) => {
65
+ this.emitAgentEvent({ kind: 'session_started', sessionId: event.session_id, model: event.model });
66
+ });
67
+ this.inner.on('teammate', (event) => {
68
+ this.emitAgentEvent({
69
+ kind: 'subagent_activity',
70
+ phase: teammatePhase(event.subtype),
71
+ agentId: event.agent_id,
72
+ agentName: event.agent_name,
73
+ isError: event.is_error,
74
+ });
75
+ });
76
+ this.inner.on('assistant', (msg) => {
77
+ this.translateAssistant(msg);
78
+ });
79
+ this.inner.on('result', (result) => {
80
+ this.emitAgentEvent({
81
+ kind: 'result',
82
+ isError: result.is_error,
83
+ numTurns: result.num_turns,
84
+ totalCostUsd: result.total_cost_usd,
85
+ inputTokens: result.usage?.input_tokens,
86
+ outputTokens: result.usage?.output_tokens,
87
+ });
88
+ });
89
+ this.inner.on('error', (err) => {
90
+ this.emitAgentEvent({ kind: 'error', message: err.message });
91
+ });
92
+ this.inner.attach(stream);
93
+ }
94
+ /** Decompose an assistant message into narration + tool-activity events. */
95
+ translateAssistant(msg) {
96
+ for (const block of msg.message.content) {
97
+ if (block.type === 'tool_use') {
98
+ const tool = block;
99
+ this.emitAgentEvent({
100
+ kind: 'tool_activity',
101
+ tool: tool.name,
102
+ file: extractFilePath(tool.input),
103
+ input: tool.input,
104
+ });
105
+ }
106
+ else if (block.type === 'text') {
107
+ const text = block.text;
108
+ if (text.length > 0) {
109
+ this.emitAgentEvent({ kind: 'narration', text });
110
+ }
111
+ }
112
+ // thinking blocks are intentionally dropped.
113
+ }
114
+ }
115
+ emitAgentEvent(event) {
116
+ this.emit('agent_event', event);
117
+ }
118
+ }
119
+ //# sourceMappingURL=claude-agent-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-agent-parser.js","sourceRoot":"","sources":["../src/claude-agent-parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Codex CLI adapter: maps the `codex exec --json` JSONL stream onto the
3
+ * provider-neutral `AgentEvent` contract.
4
+ *
5
+ * This is the `AgentEventParser` implementation for the `codex` backend. Codex
6
+ * emits one JSON object per line (NDJSON). The event taxonomy below was
7
+ * validated against the 0.133.0 spike (`/tmp/codex-spike/run1.jsonl`):
8
+ *
9
+ * thread.started { thread_id } -> session_started { sessionId }
10
+ * turn.completed { usage } -> result { tokens }
11
+ * turn.failed | error -> error { message }
12
+ * item.started { item: collab_tool_call } -> subagent_activity (spawned)
13
+ * item.completed { item: collab_tool_call } -> subagent_activity (completed)
14
+ * item.completed { item: agent_message } -> narration { text }
15
+ * item.completed { item: mcp_tool_call } -> tool_activity { tool, file }
16
+ *
17
+ * Subagent spawn/complete are paired by the item id. Codex reports token usage
18
+ * but no USD cost, so `result.totalCostUsd` is left undefined.
19
+ *
20
+ * Unlike Claude's stream-json, Codex JSONL is not Zod-validated here -- lines
21
+ * are parsed defensively and malformed lines are surfaced on `error` and skipped.
22
+ */
23
+ import { EventEmitter } from 'node:events';
24
+ import type { Readable } from 'node:stream';
25
+ import type { AgentEventParser } from './agent-event.js';
26
+ /**
27
+ * `AgentEventParser` for Codex CLI. Line-buffers stdout, parses NDJSON, and
28
+ * emits neutral AgentEvents plus a `raw` channel for verbatim/log output.
29
+ */
30
+ export declare class CodexAgentParser extends EventEmitter implements AgentEventParser {
31
+ private buffer;
32
+ private _sessionId;
33
+ private _lastEventTime;
34
+ get sessionId(): string | null;
35
+ get lastEventTime(): Date;
36
+ attach(stream: Readable): void;
37
+ private processBuffer;
38
+ private route;
39
+ private routeItem;
40
+ private emitAgent;
41
+ }
42
+ //# sourceMappingURL=codex-agent-parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex-agent-parser.d.ts","sourceRoot":"","sources":["../src/codex-agent-parser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,KAAK,EAAc,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AA8DrE;;;GAGG;AACH,qBAAa,gBAAiB,SAAQ,YAAa,YAAW,gBAAgB;IAC5E,OAAO,CAAC,MAAM,CAAM;IACpB,OAAO,CAAC,UAAU,CAAuB;IACzC,OAAO,CAAC,cAAc,CAAc;IAEpC,IAAI,SAAS,IAAI,MAAM,GAAG,IAAI,CAA4B;IAC1D,IAAI,aAAa,IAAI,IAAI,CAAgC;IAEzD,MAAM,CAAC,MAAM,EAAE,QAAQ,GAAG,IAAI;IAU9B,OAAO,CAAC,aAAa;IAmBrB,OAAO,CAAC,KAAK;IAuCb,OAAO,CAAC,SAAS;IAuCjB,OAAO,CAAC,SAAS;CAGlB"}
@@ -0,0 +1,179 @@
1
+ /**
2
+ * Codex CLI adapter: maps the `codex exec --json` JSONL stream onto the
3
+ * provider-neutral `AgentEvent` contract.
4
+ *
5
+ * This is the `AgentEventParser` implementation for the `codex` backend. Codex
6
+ * emits one JSON object per line (NDJSON). The event taxonomy below was
7
+ * validated against the 0.133.0 spike (`/tmp/codex-spike/run1.jsonl`):
8
+ *
9
+ * thread.started { thread_id } -> session_started { sessionId }
10
+ * turn.completed { usage } -> result { tokens }
11
+ * turn.failed | error -> error { message }
12
+ * item.started { item: collab_tool_call } -> subagent_activity (spawned)
13
+ * item.completed { item: collab_tool_call } -> subagent_activity (completed)
14
+ * item.completed { item: agent_message } -> narration { text }
15
+ * item.completed { item: mcp_tool_call } -> tool_activity { tool, file }
16
+ *
17
+ * Subagent spawn/complete are paired by the item id. Codex reports token usage
18
+ * but no USD cost, so `result.totalCostUsd` is left undefined.
19
+ *
20
+ * Unlike Claude's stream-json, Codex JSONL is not Zod-validated here -- lines
21
+ * are parsed defensively and malformed lines are surfaced on `error` and skipped.
22
+ */
23
+ import { EventEmitter } from 'node:events';
24
+ import { extractFilePath } from './claude-agent-parser.js';
25
+ /** Format a Codex event as a concise human-readable log line (parity helper). */
26
+ function formatCodexEventForLog(line) {
27
+ switch (line.type) {
28
+ case 'thread.started':
29
+ return `[init] Codex thread started (${line.thread_id ?? '?'})`;
30
+ case 'turn.completed': {
31
+ const u = line.usage ?? {};
32
+ return `[result] turn completed (in: ${u.input_tokens ?? '?'}, out: ${u.output_tokens ?? '?'})`;
33
+ }
34
+ case 'turn.failed':
35
+ case 'error':
36
+ return `[error] ${codexErrorMessage(line)}`;
37
+ case 'item.started':
38
+ case 'item.completed': {
39
+ const it = line.item ?? {};
40
+ const verb = line.type === 'item.started' ? 'started' : 'completed';
41
+ if (it.type === 'agent_message')
42
+ return `[assistant] ${(it.text ?? '').slice(0, 200)}`;
43
+ if (it.type === 'collab_tool_call')
44
+ return `[team] subagent ${verb} (${it.tool ?? 'spawn'})`;
45
+ if (it.type === 'mcp_tool_call')
46
+ return `[tool] ${it.server ?? '?'}.${it.tool ?? '?'} ${verb}`;
47
+ return `[item] ${it.type ?? '?'} ${verb}`;
48
+ }
49
+ default:
50
+ return null;
51
+ }
52
+ }
53
+ /** Extract a human-readable error message from a Codex error/turn.failed line. */
54
+ function codexErrorMessage(line) {
55
+ if (typeof line.message === 'string')
56
+ return line.message;
57
+ const err = line.error;
58
+ if (typeof err === 'string')
59
+ return err;
60
+ if (err && typeof err === 'object' && 'message' in err && typeof err.message === 'string') {
61
+ return err.message;
62
+ }
63
+ return 'Codex run failed';
64
+ }
65
+ /**
66
+ * `AgentEventParser` for Codex CLI. Line-buffers stdout, parses NDJSON, and
67
+ * emits neutral AgentEvents plus a `raw` channel for verbatim/log output.
68
+ */
69
+ export class CodexAgentParser extends EventEmitter {
70
+ buffer = '';
71
+ _sessionId = null;
72
+ _lastEventTime = new Date();
73
+ get sessionId() { return this._sessionId; }
74
+ get lastEventTime() { return this._lastEventTime; }
75
+ attach(stream) {
76
+ stream.on('data', (chunk) => {
77
+ this.buffer += chunk.toString();
78
+ this.processBuffer();
79
+ });
80
+ stream.on('end', () => {
81
+ if (this.buffer.trim())
82
+ this.processBuffer();
83
+ });
84
+ }
85
+ processBuffer() {
86
+ const lines = this.buffer.split('\n');
87
+ this.buffer = lines.pop() ?? '';
88
+ for (const raw of lines) {
89
+ const trimmed = raw.trim();
90
+ if (!trimmed)
91
+ continue;
92
+ let parsed;
93
+ try {
94
+ parsed = JSON.parse(trimmed);
95
+ }
96
+ catch (err) {
97
+ this.emit('error', err instanceof Error ? err : new Error(String(err)), trimmed);
98
+ continue;
99
+ }
100
+ this._lastEventTime = new Date();
101
+ this.emit('raw', parsed, formatCodexEventForLog(parsed));
102
+ this.route(parsed);
103
+ }
104
+ }
105
+ route(line) {
106
+ switch (line.type) {
107
+ case 'thread.started':
108
+ if (line.thread_id) {
109
+ if (!this._sessionId)
110
+ this._sessionId = line.thread_id;
111
+ this.emitAgent({ kind: 'session_started', sessionId: line.thread_id });
112
+ }
113
+ break;
114
+ case 'turn.completed':
115
+ this.emitAgent({
116
+ kind: 'result',
117
+ isError: false,
118
+ numTurns: 1,
119
+ inputTokens: line.usage?.input_tokens,
120
+ outputTokens: line.usage?.output_tokens,
121
+ // Codex does not report a USD cost; left undefined.
122
+ });
123
+ break;
124
+ case 'turn.failed':
125
+ case 'error':
126
+ this.emitAgent({ kind: 'error', message: codexErrorMessage(line) });
127
+ break;
128
+ case 'item.started':
129
+ this.routeItem(line.item, 'started');
130
+ break;
131
+ case 'item.completed':
132
+ this.routeItem(line.item, 'completed');
133
+ break;
134
+ // turn.started and unknown types carry no neutral signal.
135
+ default:
136
+ break;
137
+ }
138
+ }
139
+ routeItem(item, phase) {
140
+ if (!item)
141
+ return;
142
+ switch (item.type) {
143
+ case 'collab_tool_call':
144
+ // Subagent delegation. Spawn/complete paired by item id.
145
+ this.emitAgent({
146
+ kind: 'subagent_activity',
147
+ phase: phase === 'started' ? 'spawned' : 'completed',
148
+ agentId: item.id ?? 'codex-subagent',
149
+ agentName: item.tool ?? 'subagent',
150
+ isError: item.status === 'failed',
151
+ });
152
+ break;
153
+ case 'agent_message':
154
+ // Assistant prose -- only the completed item carries text.
155
+ if (phase === 'completed' && item.text && item.text.length > 0) {
156
+ this.emitAgent({ kind: 'narration', text: item.text });
157
+ }
158
+ break;
159
+ case 'mcp_tool_call':
160
+ // Tool call -- surface on completion (carries args + result).
161
+ if (phase === 'completed') {
162
+ const toolName = item.server ? `${item.server}.${item.tool ?? '?'}` : (item.tool ?? 'mcp');
163
+ this.emitAgent({
164
+ kind: 'tool_activity',
165
+ tool: toolName,
166
+ file: item.arguments ? extractFilePath(item.arguments) : null,
167
+ input: item.arguments,
168
+ });
169
+ }
170
+ break;
171
+ default:
172
+ break;
173
+ }
174
+ }
175
+ emitAgent(event) {
176
+ this.emit('agent_event', event);
177
+ }
178
+ }
179
+ //# sourceMappingURL=codex-agent-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex-agent-parser.js","sourceRoot":"","sources":["../src/codex-agent-parser.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -3,6 +3,9 @@ export { createApiClient, isReadOnlyAction, setReadOnlyMode, isReadOnlyMode, typ
3
3
  export { createTransform, mapDefinedKeys, } from './transforms.js';
4
4
  export { TokenSniffingTransform, parseTokenUsageFromOutput, sumTokenUsage, type ParsedTokenUsage, } from './token-usage.js';
5
5
  export { OutputEventSchema, StreamJsonParser, sendMessage, type AssistantMessage, type GenericSystemEvent, type InputJsonDelta, type OutputEvent, type RateLimitEvent, type RawStreamEvent, type ResultError, type ResultSuccess, type StreamEvent, type StreamJsonParserEvents, type SystemInitEvent, type TeammateEvent, type TextBlock, type TextDelta, type ThinkingBlock, type TokenUsage, type ToolUseBlock, type UserMessage, type UserTextMessageEvent, type UserToolResultEvent, } from './stream-json.js';
6
+ export { type AgentEvent, type AgentEventParser, type AgentSessionStartedEvent, type AgentNarrationEvent, type AgentToolActivityEvent, type AgentSubagentActivityEvent, type AgentResultEvent, type AgentErrorEvent, } from './agent-event.js';
7
+ export { ClaudeAgentParser, extractFilePath, } from './claude-agent-parser.js';
8
+ export { CodexAgentParser, } from './codex-agent-parser.js';
6
9
  export { UUID_REGEX, loadConfigFile, productLabel, resolveBaseConfig, validateBaseConfig, type BaseConfig, type ProductEntry, } from './config.js';
7
10
  export { PidLockError, ShutdownController, acquirePidLock, isProcessRunning, releasePidLock, setupSignalHandlers, type ShutdownHandler, } from './lifecycle.js';
8
11
  export { DEFAULT_GIT_TIMEOUT_MS, branchExists, runGit, type GitResult, } from './git.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -9,6 +9,10 @@ export { createTransform, mapDefinedKeys, } from './transforms.js';
9
9
  export { TokenSniffingTransform, parseTokenUsageFromOutput, sumTokenUsage, } from './token-usage.js';
10
10
  // Stream-JSON protocol (NDJSON parser, schemas, writer for Claude Code sessions)
11
11
  export { OutputEventSchema, StreamJsonParser, sendMessage, } from './stream-json.js';
12
+ // Claude Code stream-json -> neutral AgentEvent adapter
13
+ export { ClaudeAgentParser, extractFilePath, } from './claude-agent-parser.js';
14
+ // Codex CLI exec --json (JSONL) -> neutral AgentEvent adapter
15
+ export { CodexAgentParser, } from './codex-agent-parser.js';
12
16
  // Shared config infrastructure (BaseConfig, loaders, validators)
13
17
  export { UUID_REGEX, loadConfigFile, productLabel, resolveBaseConfig, validateBaseConfig, } from './config.js';
14
18
  // Process lifecycle (PID locking, signal handling, shutdown coordination)
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,4EAA4E;AAE5E,OAAO,EACL,QAAQ,EACR,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,yBAAyB,EAIzB,kBAAkB,EAClB,4BAA4B,EAC5B,kBAAkB,EAClB,gBAAgB,EAChB,YAAY,EACZ,SAAS,GAEV,MAAM,iBAAiB,CAAC;AAEzB,2DAA2D;AAC3D,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,eAAe,EACf,cAAc,GAGf,MAAM,iBAAiB,CAAC;AAEzB,6DAA6D;AAC7D,OAAO,EACL,eAAe,EACf,cAAc,GACf,MAAM,iBAAiB,CAAC;AAEzB,qDAAqD;AACrD,OAAO,EACL,sBAAsB,EACtB,yBAAyB,EACzB,aAAa,GAEd,MAAM,kBAAkB,CAAC;AAE1B,iFAAiF;AACjF,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,WAAW,GAqBZ,MAAM,kBAAkB,CAAC;AAE1B,iEAAiE;AACjE,OAAO,EACL,UAAU,EACV,cAAc,EACd,YAAY,EACZ,iBAAiB,EACjB,kBAAkB,GAGnB,MAAM,aAAa,CAAC;AAErB,0EAA0E;AAC1E,OAAO,EACL,YAAY,EACZ,kBAAkB,EAClB,cAAc,EACd,gBAAgB,EAChB,cAAc,EACd,mBAAmB,GAEpB,MAAM,gBAAgB,CAAC;AAExB,yDAAyD;AACzD,OAAO,EACL,sBAAsB,EACtB,YAAY,EACZ,MAAM,GAEP,MAAM,UAAU,CAAC;AAElB,0DAA0D;AAC1D,OAAO,EACL,SAAS,EACT,kBAAkB,EAClB,cAAc,EACd,kBAAkB,EAClB,uBAAuB,GAExB,MAAM,eAAe,CAAC;AAEvB,gEAAgE;AAChE,OAAO,EACL,mBAAmB,EACnB,eAAe,EACf,sBAAsB,GAGvB,MAAM,YAAY,CAAC;AASpB,iEAAiE;AACjE,OAAO,EACL,iBAAiB,EACjB,iBAAiB,GAGlB,MAAM,qBAAqB,CAAC;AAE7B,2EAA2E;AAC3E,OAAO,EACL,gBAAgB,GAGjB,MAAM,wBAAwB,CAAC;AAEhC,0EAA0E;AAC1E,OAAO,EACL,iBAAiB,GAClB,MAAM,mBAAmB,CAAC;AAE3B,4DAA4D;AAC5D,OAAO,EACL,eAAe,GAEhB,MAAM,uBAAuB,CAAC;AAE/B,sFAAsF;AACtF,OAAO,EACL,YAAY,GAEb,MAAM,eAAe,CAAC;AAEvB,oFAAoF;AACpF,OAAO,EACL,kBAAkB,EAClB,gBAAgB,GAGjB,MAAM,uBAAuB,CAAC;AAE/B,yFAAyF;AACzF,OAAO,EACL,kBAAkB,EAClB,iBAAiB,GAElB,MAAM,uBAAuB,CAAC;AAE/B,wEAAwE;AACxE,OAAO,EACL,cAAc,EACd,aAAa,GAEd,MAAM,mBAAmB,CAAC;AAE3B,mEAAmE;AACnE,OAAO,EACL,gBAAgB,EAChB,eAAe,GAEhB,MAAM,qBAAqB,CAAC;AAE7B,iEAAiE;AACjE,OAAO,EACL,iBAAiB,EACjB,YAAY,EACZ,gBAAgB,GAKjB,MAAM,kBAAkB,CAAC;AAE1B,8CAA8C;AAC9C,OAAO,EACL,cAAc,EACd,sBAAsB,EACtB,oBAAoB,EACpB,kBAAkB,EAClB,oBAAoB,EACpB,gBAAgB,GAEjB,MAAM,qBAAqB,CAAC;AAE7B,oEAAoE;AACpE,OAAO,EACL,iBAAiB,EACjB,YAAY,GAGb,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,4EAA4E;AAE5E,OAAO,EACL,QAAQ,EACR,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,yBAAyB,EAIzB,kBAAkB,EAClB,4BAA4B,EAC5B,kBAAkB,EAClB,gBAAgB,EAChB,YAAY,EACZ,SAAS,GAEV,MAAM,iBAAiB,CAAC;AAEzB,2DAA2D;AAC3D,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,eAAe,EACf,cAAc,GAGf,MAAM,iBAAiB,CAAC;AAEzB,6DAA6D;AAC7D,OAAO,EACL,eAAe,EACf,cAAc,GACf,MAAM,iBAAiB,CAAC;AAEzB,qDAAqD;AACrD,OAAO,EACL,sBAAsB,EACtB,yBAAyB,EACzB,aAAa,GAEd,MAAM,kBAAkB,CAAC;AAE1B,iFAAiF;AACjF,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,WAAW,GAqBZ,MAAM,kBAAkB,CAAC;AAc1B,wDAAwD;AACxD,OAAO,EACL,iBAAiB,EACjB,eAAe,GAChB,MAAM,0BAA0B,CAAC;AAElC,8DAA8D;AAC9D,OAAO,EACL,gBAAgB,GACjB,MAAM,yBAAyB,CAAC;AAEjC,iEAAiE;AACjE,OAAO,EACL,UAAU,EACV,cAAc,EACd,YAAY,EACZ,iBAAiB,EACjB,kBAAkB,GAGnB,MAAM,aAAa,CAAC;AAErB,0EAA0E;AAC1E,OAAO,EACL,YAAY,EACZ,kBAAkB,EAClB,cAAc,EACd,gBAAgB,EAChB,cAAc,EACd,mBAAmB,GAEpB,MAAM,gBAAgB,CAAC;AAExB,yDAAyD;AACzD,OAAO,EACL,sBAAsB,EACtB,YAAY,EACZ,MAAM,GAEP,MAAM,UAAU,CAAC;AAElB,0DAA0D;AAC1D,OAAO,EACL,SAAS,EACT,kBAAkB,EAClB,cAAc,EACd,kBAAkB,EAClB,uBAAuB,GAExB,MAAM,eAAe,CAAC;AAEvB,gEAAgE;AAChE,OAAO,EACL,mBAAmB,EACnB,eAAe,EACf,sBAAsB,GAGvB,MAAM,YAAY,CAAC;AASpB,iEAAiE;AACjE,OAAO,EACL,iBAAiB,EACjB,iBAAiB,GAGlB,MAAM,qBAAqB,CAAC;AAE7B,2EAA2E;AAC3E,OAAO,EACL,gBAAgB,GAGjB,MAAM,wBAAwB,CAAC;AAEhC,0EAA0E;AAC1E,OAAO,EACL,iBAAiB,GAClB,MAAM,mBAAmB,CAAC;AAE3B,4DAA4D;AAC5D,OAAO,EACL,eAAe,GAEhB,MAAM,uBAAuB,CAAC;AAE/B,sFAAsF;AACtF,OAAO,EACL,YAAY,GAEb,MAAM,eAAe,CAAC;AAEvB,oFAAoF;AACpF,OAAO,EACL,kBAAkB,EAClB,gBAAgB,GAGjB,MAAM,uBAAuB,CAAC;AAE/B,yFAAyF;AACzF,OAAO,EACL,kBAAkB,EAClB,iBAAiB,GAElB,MAAM,uBAAuB,CAAC;AAE/B,wEAAwE;AACxE,OAAO,EACL,cAAc,EACd,aAAa,GAEd,MAAM,mBAAmB,CAAC;AAE3B,mEAAmE;AACnE,OAAO,EACL,gBAAgB,EAChB,eAAe,GAEhB,MAAM,qBAAqB,CAAC;AAE7B,iEAAiE;AACjE,OAAO,EACL,iBAAiB,EACjB,YAAY,EACZ,gBAAgB,GAKjB,MAAM,kBAAkB,CAAC;AAE1B,8CAA8C;AAC9C,OAAO,EACL,cAAc,EACd,sBAAsB,EACtB,oBAAoB,EACpB,kBAAkB,EAClB,oBAAoB,EACpB,gBAAgB,GAEjB,MAAM,qBAAqB,CAAC;AAE7B,oEAAoE;AACpE,OAAO,EACL,iBAAiB,EACjB,YAAY,GAGb,MAAM,oBAAoB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@telora/daemon-core",
3
- "version": "0.2.25",
3
+ "version": "0.2.28",
4
4
  "description": "Shared core infrastructure for Telora daemon and factory - resilience, API client, config, git operations",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",