@agentdeck/bridge 1.0.18 → 1.0.20
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/adapters/claude-code.d.ts +4 -2
- package/dist/adapters/claude-code.d.ts.map +1 -1
- package/dist/adapters/claude-code.js +9 -10
- package/dist/adapters/claude-code.js.map +1 -1
- package/dist/adapters/codex-cli.d.ts +3 -4
- package/dist/adapters/codex-cli.d.ts.map +1 -1
- package/dist/adapters/codex-cli.js +8 -12
- package/dist/adapters/codex-cli.js.map +1 -1
- package/dist/adapters/pty-adapter.d.ts +2 -2
- package/dist/adapters/pty-adapter.js +2 -2
- package/dist/apme/adapters/codex-turn-manager.d.ts +13 -77
- package/dist/apme/adapters/codex-turn-manager.d.ts.map +1 -1
- package/dist/apme/adapters/codex-turn-manager.js +102 -403
- package/dist/apme/adapters/codex-turn-manager.js.map +1 -1
- package/dist/apme/claude-transcript-reader.d.ts +22 -0
- package/dist/apme/claude-transcript-reader.d.ts.map +1 -1
- package/dist/apme/claude-transcript-reader.js +75 -1
- package/dist/apme/claude-transcript-reader.js.map +1 -1
- package/dist/bridge-core.d.ts.map +1 -1
- package/dist/bridge-core.js +6 -1
- package/dist/bridge-core.js.map +1 -1
- package/dist/check-deps.d.ts.map +1 -1
- package/dist/check-deps.js +3 -1
- package/dist/check-deps.js.map +1 -1
- package/dist/claude-turn-watchdog.d.ts +70 -0
- package/dist/claude-turn-watchdog.d.ts.map +1 -0
- package/dist/claude-turn-watchdog.js +147 -0
- package/dist/claude-turn-watchdog.js.map +1 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +20 -3
- package/dist/cli.js.map +1 -1
- package/dist/codex-hook-silence.d.ts +52 -0
- package/dist/codex-hook-silence.d.ts.map +1 -0
- package/dist/codex-hook-silence.js +80 -0
- package/dist/codex-hook-silence.js.map +1 -0
- package/dist/codex-rate-limits.d.ts +1 -1
- package/dist/codex-rate-limits.d.ts.map +1 -1
- package/dist/codex-rate-limits.js +27 -17
- package/dist/codex-rate-limits.js.map +1 -1
- package/dist/daemon.js +1 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +86 -192
- package/dist/index.js.map +1 -1
- package/dist/state-machine.d.ts +43 -1
- package/dist/state-machine.d.ts.map +1 -1
- package/dist/state-machine.js +146 -12
- package/dist/state-machine.js.map +1 -1
- package/dist/types.d.ts +11 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/version-check.d.ts +8 -0
- package/dist/version-check.d.ts.map +1 -1
- package/dist/version-check.js +27 -0
- package/dist/version-check.js.map +1 -1
- package/package.json +4 -3
- package/dist/apme/adapters/claude-pty.d.ts +0 -28
- package/dist/apme/adapters/claude-pty.d.ts.map +0 -1
- package/dist/apme/adapters/claude-pty.js +0 -88
- 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 —
|
|
5
|
-
*
|
|
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
|
|
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 —
|
|
7
|
-
*
|
|
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
|
-
//
|
|
26
|
-
|
|
27
|
-
|
|
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
|
|
40
|
+
for (const eventName of terminalUiEvents) {
|
|
42
41
|
this.outputParser.on(eventName, (data) => {
|
|
43
|
-
this.emitAdapterEvent({ source: '
|
|
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":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAErC,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C
|
|
1
|
+
{"version":3,"file":"claude-code.js","sourceRoot":"","sources":["../../src/adapters/claude-code.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAErC,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C;;;;;GAKG;AACH,MAAM,OAAO,iBAAkB,SAAQ,UAAU;IACtC,YAAY,GAAsB,wBAAwB,CAAC;IAE5D,YAAY,CAAe;IACnC,2BAA2B;IACnB,kBAAkB,GAAG,CAAC,CAAC;IAE/B;QACE,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,YAAY,GAAG,IAAI,YAAY,EAAE,CAAC;QACvC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAY,EAAE,EAAE;YAC3C,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QAC1C,CAAC,CAAC,CAAC;IACL,CAAC;IAES,iBAAiB;QACzB,OAAO,QAAQ,CAAC;IAClB,CAAC;IAES,gBAAgB;QACxB,wEAAwE;QACxE,qEAAqE;QACrE,MAAM,gBAAgB,GAAG;YACvB,mBAAmB;YACnB,eAAe;YACf,aAAa;YACb,aAAa;YACb,cAAc;YACd,YAAY;YACZ,aAAa;YACb,kBAAkB;YAClB,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;QAED,2BAA2B;QAC3B,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,eAAe,EAAE,CAAC,IAA8B,EAAE,EAAE;YACvE,IAAI,CAAC,gBAAgB,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC,CAAC;QAC1F,CAAC,CAAC,CAAC;QAEH,wBAAwB;QACxB,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC,IAA8B,EAAE,EAAE;YACpE,IAAI,IAAI,EAAE,CAAC;gBACT,IAAI,CAAC,gBAAgB,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;YAC3E,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,yBAAyB;QACzB,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC,IAA8B,EAAE,EAAE;YACrE,MAAM,IAAI,GAAG,IAAI,EAAE,IAA0B,CAAC;YAC9C,IAAI,IAAI,EAAE,CAAC;gBACT,IAAI,CAAC,gBAAgB,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;YACtF,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAES,UAAU,CAAC,IAAY;QAC/B,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IAES,kBAAkB,CAAC,GAAkB;QAC7C,IAAI,GAAG,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;YAC/B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACvB,IAAI,GAAG,GAAG,IAAI,CAAC,kBAAkB,GAAG,GAAG,EAAE,CAAC;gBACxC,KAAK,CAAC,gBAAgB,EAAE,2BAA2B,GAAG,GAAG,IAAI,CAAC,kBAAkB,aAAa,CAAC,CAAC;gBAC/F,OAAO,IAAI,CAAC;YACd,CAAC;YACD,IAAI,CAAC,kBAAkB,GAAG,GAAG,CAAC;YAC9B,KAAK,CAAC,gBAAgB,EAAE,gCAAgC,CAAC,CAAC;YAC1D,IAAI,CAAC,YAAY,CAAC,oBAAoB,EAAE,CAAC;YACzC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YAChC,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;;OAIG;IACH,eAAe,CAAC,IAAY;QAC1B,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;IAC1C,CAAC;IAEQ,cAAc;QACrB,OAAO,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE,CAAC;IAC5C,CAAC;IAEQ,oBAAoB;QAC3B,IAAI,CAAC,YAAY,CAAC,wBAAwB,EAAE,CAAC;IAC/C,CAAC;IAED,+EAA+E;IAC/E,mBAAmB;QACjB,OAAO,IAAI,CAAC,aAAa,EAAE,CAAC;IAC9B,CAAC;CACF"}
|
|
@@ -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 —
|
|
5
|
-
*
|
|
6
|
-
*
|
|
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":"
|
|
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 —
|
|
6
|
-
*
|
|
7
|
-
*
|
|
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
|
-
//
|
|
22
|
-
|
|
23
|
-
|
|
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
|
|
27
|
+
for (const eventName of terminalUiEvents) {
|
|
32
28
|
this.outputParser.on(eventName, (data) => {
|
|
33
|
-
this.emitAdapterEvent({ source: '
|
|
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;
|
|
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
|
|
16
|
-
* - feedParser(data) — feed PTY data to
|
|
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
|
|
15
|
-
* - feedParser(data) — feed PTY data to
|
|
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
|
-
*
|
|
2
|
+
* Hook-owned Codex turn timeline.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
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
|
|
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
|
|
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
|
|
50
|
-
|
|
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
|
|
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
|
|
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"}
|