@agentdeck/bridge 1.0.18 → 1.0.19

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.
Files changed (40) hide show
  1. package/dist/adapters/claude-code.d.ts +4 -2
  2. package/dist/adapters/claude-code.d.ts.map +1 -1
  3. package/dist/adapters/claude-code.js +9 -10
  4. package/dist/adapters/claude-code.js.map +1 -1
  5. package/dist/adapters/codex-cli.d.ts +3 -4
  6. package/dist/adapters/codex-cli.d.ts.map +1 -1
  7. package/dist/adapters/codex-cli.js +8 -12
  8. package/dist/adapters/codex-cli.js.map +1 -1
  9. package/dist/adapters/pty-adapter.d.ts +2 -2
  10. package/dist/adapters/pty-adapter.js +2 -2
  11. package/dist/apme/adapters/codex-turn-manager.d.ts +13 -77
  12. package/dist/apme/adapters/codex-turn-manager.d.ts.map +1 -1
  13. package/dist/apme/adapters/codex-turn-manager.js +97 -403
  14. package/dist/apme/adapters/codex-turn-manager.js.map +1 -1
  15. package/dist/check-deps.d.ts.map +1 -1
  16. package/dist/check-deps.js +3 -1
  17. package/dist/check-deps.js.map +1 -1
  18. package/dist/cli.d.ts.map +1 -1
  19. package/dist/cli.js +19 -3
  20. package/dist/cli.js.map +1 -1
  21. package/dist/codex-rate-limits.d.ts +1 -1
  22. package/dist/codex-rate-limits.d.ts.map +1 -1
  23. package/dist/codex-rate-limits.js +27 -17
  24. package/dist/codex-rate-limits.js.map +1 -1
  25. package/dist/daemon.js +1 -1
  26. package/dist/index.d.ts.map +1 -1
  27. package/dist/index.js +27 -192
  28. package/dist/index.js.map +1 -1
  29. package/dist/state-machine.d.ts +5 -0
  30. package/dist/state-machine.d.ts.map +1 -1
  31. package/dist/state-machine.js +34 -4
  32. package/dist/state-machine.js.map +1 -1
  33. package/dist/types.d.ts +11 -1
  34. package/dist/types.d.ts.map +1 -1
  35. package/dist/types.js.map +1 -1
  36. package/package.json +4 -3
  37. package/dist/apme/adapters/claude-pty.d.ts +0 -28
  38. package/dist/apme/adapters/claude-pty.d.ts.map +0 -1
  39. package/dist/apme/adapters/claude-pty.js +0 -88
  40. package/dist/apme/adapters/claude-pty.js.map +0 -1
@@ -1,8 +1,10 @@
1
1
  import type { AgentCapabilities, PluginCommand } from '../types.js';
2
2
  import { PtyAdapter } from './pty-adapter.js';
3
3
  /**
4
- * Claude Code adapter — extends PtyAdapter with Claude-specific output parsing
5
- * and mode switching (Shift+Tab).
4
+ * Claude Code adapter — lifecycle correctness comes from hooks. The terminal
5
+ * observer is deliberately limited to UI affordances Claude's hooks do not
6
+ * expose yet (mode, diff, options, cursor, status telemetry), plus Shift+Tab
7
+ * mode switching.
6
8
  */
7
9
  export declare class ClaudeCodeAdapter extends PtyAdapter {
8
10
  readonly capabilities: AgentCapabilities;
@@ -1 +1 @@
1
- {"version":3,"file":"claude-code.d.ts","sourceRoot":"","sources":["../../src/adapters/claude-code.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEpE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C;;;GAGG;AACH,qBAAa,iBAAkB,SAAQ,UAAU;IAC/C,QAAQ,CAAC,YAAY,EAAE,iBAAiB,CAA4B;IAEpE,OAAO,CAAC,YAAY,CAAe;IACnC,2BAA2B;IAC3B,OAAO,CAAC,kBAAkB,CAAK;;IAU/B,SAAS,CAAC,iBAAiB,IAAI,MAAM;IAIrC,SAAS,CAAC,gBAAgB,IAAI,IAAI;IA4ClC,SAAS,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAIxC,SAAS,CAAC,kBAAkB,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO;IAgBzD;;;;OAIG;IACH,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAI1B,cAAc,IAAI,MAAM,GAAG,IAAI;IAI/B,oBAAoB,IAAI,IAAI;IAIrC,+EAA+E;IAC/E,mBAAmB;CAGpB"}
1
+ {"version":3,"file":"claude-code.d.ts","sourceRoot":"","sources":["../../src/adapters/claude-code.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEpE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C;;;;;GAKG;AACH,qBAAa,iBAAkB,SAAQ,UAAU;IAC/C,QAAQ,CAAC,YAAY,EAAE,iBAAiB,CAA4B;IAEpE,OAAO,CAAC,YAAY,CAAe;IACnC,2BAA2B;IAC3B,OAAO,CAAC,kBAAkB,CAAK;;IAU/B,SAAS,CAAC,iBAAiB,IAAI,MAAM;IAIrC,SAAS,CAAC,gBAAgB,IAAI,IAAI;IAyClC,SAAS,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAIxC,SAAS,CAAC,kBAAkB,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO;IAgBzD;;;;OAIG;IACH,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAI1B,cAAc,IAAI,MAAM,GAAG,IAAI;IAI/B,oBAAoB,IAAI,IAAI;IAIrC,+EAA+E;IAC/E,mBAAmB;CAGpB"}
@@ -3,8 +3,10 @@ import { debug } from '../logger.js';
3
3
  import { CLAUDE_CODE_CAPABILITIES } from '../types.js';
4
4
  import { PtyAdapter } from './pty-adapter.js';
5
5
  /**
6
- * Claude Code adapter — extends PtyAdapter with Claude-specific output parsing
7
- * and mode switching (Shift+Tab).
6
+ * Claude Code adapter — lifecycle correctness comes from hooks. The terminal
7
+ * observer is deliberately limited to UI affordances Claude's hooks do not
8
+ * expose yet (mode, diff, options, cursor, status telemetry), plus Shift+Tab
9
+ * mode switching.
8
10
  */
9
11
  export class ClaudeCodeAdapter extends PtyAdapter {
10
12
  capabilities = CLAUDE_CODE_CAPABILITIES;
@@ -22,25 +24,22 @@ export class ClaudeCodeAdapter extends PtyAdapter {
22
24
  return 'claude';
23
25
  }
24
26
  wireOutputParser() {
25
- // Parser events → AdapterEvents
26
- const parserEvents = [
27
- 'spinner_start',
28
- 'spinner_stop',
27
+ // Terminal UI observations → AdapterEvents. Never add turn lifecycle or
28
+ // tool events here: hooks own state, timeline, and APME correctness.
29
+ const terminalUiEvents = [
29
30
  'permission_prompt',
30
31
  'option_prompt',
31
32
  'diff_prompt',
32
- 'idle',
33
33
  'status_line',
34
- 'tool_action',
35
34
  'project_name',
36
35
  'model_info',
37
36
  'mode_change',
38
37
  'suggested_prompt',
39
38
  'remote_url',
40
39
  ];
41
- for (const eventName of parserEvents) {
40
+ for (const eventName of terminalUiEvents) {
42
41
  this.outputParser.on(eventName, (data) => {
43
- this.emitAdapterEvent({ source: 'parser', event: eventName, data });
42
+ this.emitAdapterEvent({ source: 'terminal_ui', event: eventName, data });
44
43
  });
45
44
  }
46
45
  // cursor_update → metadata
@@ -1 +1 @@
1
- {"version":3,"file":"claude-code.js","sourceRoot":"","sources":["../../src/adapters/claude-code.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"claude-code.js","sourceRoot":"","sources":["../../src/adapters/claude-code.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,9 @@
1
1
  import type { AgentCapabilities, PluginCommand } from '../types.js';
2
2
  import { PtyAdapter } from './pty-adapter.js';
3
3
  /**
4
- * Codex CLI adapter — extends PtyAdapter with Codex-specific output parsing.
5
- *
6
- * Codex CLI uses Ink (React-based TUI) for rendering. Unlike Claude Code,
7
- * it has no HTTP hook system — all state tracking comes from PTY output parsing.
4
+ * Codex CLI adapter — lifecycle correctness comes from Codex lifecycle hooks
5
+ * and its turn-complete notification. The terminal observer is limited to
6
+ * interaction affordances not yet present in those payloads.
8
7
  */
9
8
  export declare class CodexCliAdapter extends PtyAdapter {
10
9
  readonly capabilities: AgentCapabilities;
@@ -1 +1 @@
1
- {"version":3,"file":"codex-cli.d.ts","sourceRoot":"","sources":["../../src/adapters/codex-cli.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEpE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C;;;;;GAKG;AACH,qBAAa,eAAgB,SAAQ,UAAU;IAC7C,QAAQ,CAAC,YAAY,EAAE,iBAAiB,CAA0B;IAElE,OAAO,CAAC,YAAY,CAAoB;;IAOxC,SAAS,CAAC,iBAAiB,IAAI,MAAM;IAIrC,SAAS,CAAC,gBAAgB,IAAI,IAAI;IAkBlC,SAAS,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAIxC,SAAS,CAAC,kBAAkB,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO;IAMjD,cAAc,IAAI,MAAM,GAAG,IAAI;IAIxC,+EAA+E;IAC/E,kBAAkB;CAGnB"}
1
+ {"version":3,"file":"codex-cli.d.ts","sourceRoot":"","sources":["../../src/adapters/codex-cli.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEpE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C;;;;GAIG;AACH,qBAAa,eAAgB,SAAQ,UAAU;IAC7C,QAAQ,CAAC,YAAY,EAAE,iBAAiB,CAA0B;IAElE,OAAO,CAAC,YAAY,CAAoB;;IAOxC,SAAS,CAAC,iBAAiB,IAAI,MAAM;IAIrC,SAAS,CAAC,gBAAgB,IAAI,IAAI;IAelC,SAAS,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAIxC,SAAS,CAAC,kBAAkB,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO;IAMjD,cAAc,IAAI,MAAM,GAAG,IAAI;IAIxC,+EAA+E;IAC/E,kBAAkB;CAGnB"}
@@ -2,10 +2,9 @@ import { CodexOutputParser } from '../codex-output-parser.js';
2
2
  import { CODEX_CLI_CAPABILITIES } from '../types.js';
3
3
  import { PtyAdapter } from './pty-adapter.js';
4
4
  /**
5
- * Codex CLI adapter — extends PtyAdapter with Codex-specific output parsing.
6
- *
7
- * Codex CLI uses Ink (React-based TUI) for rendering. Unlike Claude Code,
8
- * it has no HTTP hook system — all state tracking comes from PTY output parsing.
5
+ * Codex CLI adapter — lifecycle correctness comes from Codex lifecycle hooks
6
+ * and its turn-complete notification. The terminal observer is limited to
7
+ * interaction affordances not yet present in those payloads.
9
8
  */
10
9
  export class CodexCliAdapter extends PtyAdapter {
11
10
  capabilities = CODEX_CLI_CAPABILITIES;
@@ -18,19 +17,16 @@ export class CodexCliAdapter extends PtyAdapter {
18
17
  return 'codex';
19
18
  }
20
19
  wireOutputParser() {
21
- // Parser events AdapterEvents
22
- const parserEvents = [
23
- 'spinner_start',
24
- 'spinner_stop',
20
+ // Never forward spinner/idle/tool actions from the terminal. Hooks own
21
+ // state, timeline, and APME; this observer supplies UI-only detail.
22
+ const terminalUiEvents = [
25
23
  'permission_prompt',
26
- 'idle',
27
- 'tool_action',
28
24
  'project_name',
29
25
  'model_info',
30
26
  ];
31
- for (const eventName of parserEvents) {
27
+ for (const eventName of terminalUiEvents) {
32
28
  this.outputParser.on(eventName, (data) => {
33
- this.emitAdapterEvent({ source: 'parser', event: eventName, data });
29
+ this.emitAdapterEvent({ source: 'terminal_ui', event: eventName, data });
34
30
  });
35
31
  }
36
32
  }
@@ -1 +1 @@
1
- {"version":3,"file":"codex-cli.js","sourceRoot":"","sources":["../../src/adapters/codex-cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAG9D,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C;;;;;GAKG;AACH,MAAM,OAAO,eAAgB,SAAQ,UAAU;IACpC,YAAY,GAAsB,sBAAsB,CAAC;IAE1D,YAAY,CAAoB;IAExC;QACE,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,YAAY,GAAG,IAAI,iBAAiB,EAAE,CAAC;IAC9C,CAAC;IAES,iBAAiB;QACzB,OAAO,OAAO,CAAC;IACjB,CAAC;IAES,gBAAgB;QACxB,gCAAgC;QAChC,MAAM,YAAY,GAAG;YACnB,eAAe;YACf,cAAc;YACd,mBAAmB;YACnB,MAAM;YACN,aAAa;YACb,cAAc;YACd,YAAY;SACb,CAAC;QACF,KAAK,MAAM,SAAS,IAAI,YAAY,EAAE,CAAC;YACrC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,IAA8B,EAAE,EAAE;gBACjE,IAAI,CAAC,gBAAgB,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YACtE,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAES,UAAU,CAAC,IAAY;QAC/B,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IAES,kBAAkB,CAAC,IAAmB;QAC9C,wCAAwC;QACxC,sEAAsE;QACtE,OAAO,KAAK,CAAC;IACf,CAAC;IAEQ,cAAc;QACrB,OAAO,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE,CAAC;IAC5C,CAAC;IAED,+EAA+E;IAC/E,kBAAkB;QAChB,OAAO,IAAI,CAAC,aAAa,EAAE,CAAC;IAC9B,CAAC;CACF"}
1
+ {"version":3,"file":"codex-cli.js","sourceRoot":"","sources":["../../src/adapters/codex-cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAE9D,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C;;;;GAIG;AACH,MAAM,OAAO,eAAgB,SAAQ,UAAU;IACpC,YAAY,GAAsB,sBAAsB,CAAC;IAE1D,YAAY,CAAoB;IAExC;QACE,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,YAAY,GAAG,IAAI,iBAAiB,EAAE,CAAC;IAC9C,CAAC;IAES,iBAAiB;QACzB,OAAO,OAAO,CAAC;IACjB,CAAC;IAES,gBAAgB;QACxB,uEAAuE;QACvE,oEAAoE;QACpE,MAAM,gBAAgB,GAAG;YACvB,mBAAmB;YACnB,cAAc;YACd,YAAY;SACb,CAAC;QACF,KAAK,MAAM,SAAS,IAAI,gBAAgB,EAAE,CAAC;YACzC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,IAA8B,EAAE,EAAE;gBACjE,IAAI,CAAC,gBAAgB,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC3E,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAES,UAAU,CAAC,IAAY;QAC/B,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IAES,kBAAkB,CAAC,IAAmB;QAC9C,wCAAwC;QACxC,sEAAsE;QACtE,OAAO,KAAK,CAAC;IACf,CAAC;IAEQ,cAAc;QACrB,OAAO,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE,CAAC;IAC5C,CAAC;IAED,+EAA+E;IAC/E,kBAAkB;QAChB,OAAO,IAAI,CAAC,aAAa,EAAE,CAAC;IAC9B,CAAC;CACF"}
@@ -12,8 +12,8 @@ import type { AgentAdapter, AgentCapabilities, AdapterStartOptions, AdapterEvent
12
12
  * Subclasses implement:
13
13
  * - capabilities — agent-specific feature flags
14
14
  * - getDefaultCommand() — CLI command to spawn (e.g. 'claude', 'codex')
15
- * - wireOutputParser() — connect output parser events → AdapterEvents
16
- * - feedParser(data) — feed PTY data to the output parser
15
+ * - wireOutputParser() — connect optional terminal UI observations
16
+ * - feedParser(data) — feed PTY data to that observer (or no-op)
17
17
  * - handleAgentCommand(cmd) — agent-specific commands (e.g. switch_mode)
18
18
  */
19
19
  export declare abstract class PtyAdapter extends EventEmitter implements AgentAdapter {
@@ -11,8 +11,8 @@ import { debug } from '../logger.js';
11
11
  * Subclasses implement:
12
12
  * - capabilities — agent-specific feature flags
13
13
  * - getDefaultCommand() — CLI command to spawn (e.g. 'claude', 'codex')
14
- * - wireOutputParser() — connect output parser events → AdapterEvents
15
- * - feedParser(data) — feed PTY data to the output parser
14
+ * - wireOutputParser() — connect optional terminal UI observations
15
+ * - feedParser(data) — feed PTY data to that observer (or no-op)
16
16
  * - handleAgentCommand(cmd) — agent-specific commands (e.g. switch_mode)
17
17
  */
18
18
  export class PtyAdapter extends EventEmitter {
@@ -1,99 +1,35 @@
1
1
  /**
2
- * CodexTurnManager — turn-boundary reconstruction for Codex CLI sessions.
2
+ * Hook-owned Codex turn timeline.
3
3
  *
4
- * Two signal sources are wired into one state machine:
5
- *
6
- * 1. **Hook mode** (primary) `~/.codex/config.toml` lifecycle hooks send
7
- * `codex_user_prompt_submit` / `codex_tool_start` / `codex_tool_end` /
8
- * `codex_stop` to the daemon. These are unambiguous turn boundaries.
9
- * APME span ingestion for hooks happens in `bridge/src/index.ts`'s
10
- * hook branch via `codexHookToSpans` — this manager only adds the
11
- * timeline-visible entries (chat_start / tool_request / chat_response /
12
- * chat_end) so the dashboard sees them.
13
- *
14
- * 2. **PTY-parser fallback** (legacy / hook-miss path) — when no codex_*
15
- * hook has fired in the last 30 s, the manager falls back to the
16
- * pre-hook PTY-only logic: spinner_start opens a turn, prompt-source
17
- * idle (with deferred close + status-line false-positive guard +
18
- * tool-silence latch + PTY tail snapshot) closes it.
19
- *
20
- * The 30 s "hook-fresh" window demotes parser signals to no-ops while
21
- * hooks are flowing, which eliminates the seven-state-variable race we
22
- * landed seven Codex review iterations on. If hooks stop firing (Codex
23
- * Ink-TUI repaint glitch), parser fallback re-engages automatically.
24
- *
25
- * One wedge that window can't fix on its own: a missed `codex_stop`
26
- * leaves the turn open, the parser is muted for 30 s, and the next
27
- * `codex_user_prompt_submit` used to be absorbed into the stale row —
28
- * spinner forever, new prompt invisible. A prompt-submit is therefore
29
- * treated as an authoritative boundary: finding an open turn that is
30
- * neither a hook echo nor a late text fill-in, it closes the stale turn
31
- * before opening the new row (see CODEX_PROMPT_* windows below).
32
- *
33
- * Extracted from `bridge/src/index.ts wireAgentApme` so the codex segment
34
- * can be unit-tested with fake collector / fake ringbuffer / fake adapter.
4
+ * Lifecycle hooks and the notify turn-complete fallback own boundaries. The
5
+ * response body comes from Codex's rollout JSONL (or an inline hook field),
6
+ * never from terminal output. This keeps managed and directly-run Codex on the
7
+ * same structured observation path.
35
8
  */
36
9
  import type { AgentType } from '@agentdeck/shared';
37
- import type { AdapterHookEvent, AdapterParserEvent } from '@agentdeck/shared';
10
+ import type { AdapterHookEvent } from '@agentdeck/shared';
38
11
  import type { BridgeCore } from '../../bridge-core.js';
39
12
  import type { ApmeModule } from '../index.js';
40
- import type { PtyRingBuffer } from '../../pty-ringbuffer.js';
13
+ import { type CodexTurnOutcome } from '../../codex-rollout-response.js';
14
+ type OutcomeReader = (sessionId: string) => CodexTurnOutcome;
41
15
  export declare class CodexTurnManager {
42
16
  private readonly core;
43
17
  private readonly apme;
44
- private readonly ptyRingBuffer;
45
18
  private readonly sessionId;
46
19
  private readonly agentType;
20
+ private readonly readOutcome;
47
21
  private chatStart;
48
22
  private lastPromptText;
49
- private idleCloseTimer;
50
- private inToolSilence;
51
- private toolActiveSinceLastSpinner;
52
- private toolSilenceTimer;
53
- private pendingPromptIdle;
54
- private pendingTailSnapshot;
55
- private hookActive;
56
- private lastHookTs;
57
- constructor(core: BridgeCore, apme: ApmeModule, ptyRingBuffer: PtyRingBuffer, sessionId: string, agentType: AgentType);
58
- /** Process a codex_* hook event. Hooks are authoritative — they own
59
- * the turn boundaries while fresh. APME span ingestion already happens
60
- * in `bridge/src/index.ts` via `codexHookToSpans`; this method only
61
- * adds the timeline-visible entries the dashboard renders. */
23
+ private codexSessionId;
24
+ constructor(core: BridgeCore, apme: ApmeModule, sessionId: string, agentType: AgentType, readOutcome?: OutcomeReader);
62
25
  onHookEvent(evt: AdapterHookEvent): void;
63
- /** Close whatever turn is open, right now, clearing all PTY-side timers
64
- * and pending state so a late parser idle can't double-fire. Used by
65
- * codex_stop (normal close) and by a prompt-submit that finds a stale
66
- * open turn (missed codex_stop). */
67
- private closeOpenTurnNow;
68
- /** Process a PTY parser event. While a hook is fresh, this is a no-op
69
- * for turn-boundary signals (hook owns them). Outside the freshness
70
- * window we run the legacy PTY-only state machine. */
71
- onParserEvent(evt: AdapterParserEvent): void;
72
- /** Clear timers so a session shutdown leaves no lingering work. */
73
26
  cleanup(): void;
74
- private hookFresh;
27
+ private closeOpenTurn;
75
28
  private makeCtx;
76
29
  private addTimelineEntry;
77
- /** Add a timeline entry AND feed it through APME ingestion. Use this
78
- * on the PTY-fallback path where no upstream hook adapter has done
79
- * the ingestion. */
80
30
  private addEntryAndIngest;
81
- /** Hook-path chat_start opener: timeline entry only. The APME turn
82
- * was opened upstream by codexHookToSpans → ingestSpan(turn_start)
83
- * in the index.ts hook branch. Re-ingesting here would close the
84
- * just-opened turn and immediately reopen another. */
85
31
  private openTimelineChatStart;
86
- /** PTY-path chat_start opener: timeline entry AND APME ingestion. */
87
- private ensureChatStart;
88
- /** Close the turn that started at `startedAt`: extract the response
89
- * tail (live ringbuffer or passed snapshot), emit chat_response +
90
- * chat_end timeline entries, and ingest the response span. The
91
- * snapshot path is used when closing in response to a delayed signal
92
- * (auto-clear timer or next spinner_start) — by that point the live
93
- * ringbuffer contains turn N+1 content that would contaminate N's
94
- * response. */
95
32
  private closeTurn;
96
- private scheduleClose;
97
- private exitToolSilence;
98
33
  }
34
+ export {};
99
35
  //# sourceMappingURL=codex-turn-manager.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"codex-turn-manager.d.ts","sourceRoot":"","sources":["../../../src/apme/adapters/codex-turn-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAEH,OAAO,KAAK,EAAkB,SAAS,EAAiB,MAAM,mBAAmB,CAAC;AAClF,OAAO,KAAK,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAC9E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAqC7D,qBAAa,gBAAgB;IAezB,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,SAAS;IAjB5B,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,cAAc,CAAuB;IAC7C,OAAO,CAAC,cAAc,CAA8C;IACpE,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,0BAA0B,CAAS;IAC3C,OAAO,CAAC,gBAAgB,CAA8C;IACtE,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,mBAAmB,CAAuB;IAElD,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,UAAU,CAAK;gBAGJ,IAAI,EAAE,UAAU,EAChB,IAAI,EAAE,UAAU,EAChB,aAAa,EAAE,aAAa,EAC5B,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,SAAS;IAKvC;;;mEAG+D;IAC/D,WAAW,CAAC,GAAG,EAAE,gBAAgB,GAAG,IAAI;IA0DxC;;;yCAGqC;IACrC,OAAO,CAAC,gBAAgB;IAWxB;;2DAEuD;IACvD,aAAa,CAAC,GAAG,EAAE,kBAAkB,GAAG,IAAI;IA2G5C,mEAAmE;IACnE,OAAO,IAAI,IAAI;IAOf,OAAO,CAAC,SAAS;IAIjB,OAAO,CAAC,OAAO;IAUf,OAAO,CAAC,gBAAgB;IAIxB;;yBAEqB;IACrB,OAAO,CAAC,iBAAiB;IAQzB;;;2DAGuD;IACvD,OAAO,CAAC,qBAAqB;IAwC7B,qEAAqE;IACrE,OAAO,CAAC,eAAe;IAuCvB;;;;;;oBAMgB;IAChB,OAAO,CAAC,SAAS;IA4EjB,OAAO,CAAC,aAAa;IAQrB,OAAO,CAAC,eAAe;CAOxB"}
1
+ {"version":3,"file":"codex-turn-manager.d.ts","sourceRoot":"","sources":["../../../src/apme/adapters/codex-turn-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAkB,SAAS,EAAiB,MAAM,mBAAmB,CAAC;AAClF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAO1D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAA+B,KAAK,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAOrG,KAAK,aAAa,GAAG,CAAC,SAAS,EAAE,MAAM,KAAK,gBAAgB,CAAC;AAE7D,qBAAa,gBAAgB;IAMzB,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,WAAW;IAT9B,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,cAAc,CAAuB;IAC7C,OAAO,CAAC,cAAc,CAAuB;gBAG1B,IAAI,EAAE,UAAU,EAChB,IAAI,EAAE,UAAU,EAChB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,SAAS,EACpB,WAAW,GAAE,aAA2C;IAG3E,WAAW,CAAC,GAAG,EAAE,gBAAgB,GAAG,IAAI;IAqCxC,OAAO,IAAI,IAAI;IAIf,OAAO,CAAC,aAAa;IAMrB,OAAO,CAAC,OAAO;IAUf,OAAO,CAAC,gBAAgB;IAIxB,OAAO,CAAC,iBAAiB;IAQzB,OAAO,CAAC,qBAAqB;IA8B7B,OAAO,CAAC,SAAS;CAoDlB"}