@agentdeck/bridge 0.2.2 → 0.2.3
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/assets/fonts/IBMPlexSans-Bold.ttf +0 -0
- package/assets/fonts/IBMPlexSans-Regular.ttf +0 -0
- package/assets/fonts/JetBrainsMono-Bold.ttf +0 -0
- package/assets/fonts/JetBrainsMono-Regular.ttf +0 -0
- package/assets/fonts/LICENSES.md +22 -0
- package/dist/adapters/claude-code.d.ts +6 -0
- package/dist/adapters/claude-code.d.ts.map +1 -1
- package/dist/adapters/claude-code.js +8 -0
- package/dist/adapters/claude-code.js.map +1 -1
- package/dist/adapters/openclaw.d.ts +24 -0
- package/dist/adapters/openclaw.d.ts.map +1 -1
- package/dist/adapters/openclaw.js +291 -35
- package/dist/adapters/openclaw.js.map +1 -1
- package/dist/adapters/opencode-adapter.d.ts +59 -0
- package/dist/adapters/opencode-adapter.d.ts.map +1 -1
- package/dist/adapters/opencode-adapter.js +297 -35
- package/dist/adapters/opencode-adapter.js.map +1 -1
- package/dist/adb-reverse.d.ts +1 -1
- package/dist/adb-reverse.js +1 -1
- package/dist/antigravity-local.d.ts +1 -0
- package/dist/antigravity-local.d.ts.map +1 -1
- package/dist/antigravity-local.js +33 -0
- package/dist/antigravity-local.js.map +1 -1
- package/dist/apme/adapters/claude-hook.d.ts.map +1 -1
- package/dist/apme/adapters/claude-hook.js +5 -0
- package/dist/apme/adapters/claude-hook.js.map +1 -1
- package/dist/apme/adapters/codex-hook.d.ts +17 -0
- package/dist/apme/adapters/codex-hook.d.ts.map +1 -0
- package/dist/apme/adapters/codex-hook.js +95 -0
- package/dist/apme/adapters/codex-hook.js.map +1 -0
- package/dist/apme/adapters/codex-turn-manager.d.ts +86 -0
- package/dist/apme/adapters/codex-turn-manager.d.ts.map +1 -0
- package/dist/apme/adapters/codex-turn-manager.js +496 -0
- package/dist/apme/adapters/codex-turn-manager.js.map +1 -0
- package/dist/apme/adapters/openclaw-hook.d.ts +99 -0
- package/dist/apme/adapters/openclaw-hook.d.ts.map +1 -0
- package/dist/apme/adapters/openclaw-hook.js +234 -0
- package/dist/apme/adapters/openclaw-hook.js.map +1 -0
- package/dist/apme/adapters/opencode-hook.d.ts +56 -0
- package/dist/apme/adapters/opencode-hook.d.ts.map +1 -0
- package/dist/apme/adapters/opencode-hook.js +182 -0
- package/dist/apme/adapters/opencode-hook.js.map +1 -0
- package/dist/apme/adapters/timeline.d.ts.map +1 -1
- package/dist/apme/adapters/timeline.js +6 -1
- package/dist/apme/adapters/timeline.js.map +1 -1
- package/dist/apme/antigravity-transcript.d.ts +18 -0
- package/dist/apme/antigravity-transcript.d.ts.map +1 -0
- package/dist/apme/antigravity-transcript.js +94 -0
- package/dist/apme/antigravity-transcript.js.map +1 -0
- package/dist/apme/classify-turn.d.ts +13 -0
- package/dist/apme/classify-turn.d.ts.map +1 -0
- package/dist/apme/classify-turn.js +49 -0
- package/dist/apme/classify-turn.js.map +1 -0
- package/dist/apme/claude-transcript-reader.d.ts +10 -0
- package/dist/apme/claude-transcript-reader.d.ts.map +1 -1
- package/dist/apme/claude-transcript-reader.js +35 -0
- package/dist/apme/claude-transcript-reader.js.map +1 -1
- package/dist/apme/collector.d.ts +129 -6
- package/dist/apme/collector.d.ts.map +1 -1
- package/dist/apme/collector.js +470 -23
- package/dist/apme/collector.js.map +1 -1
- package/dist/apme/dashboard-html.d.ts.map +1 -1
- package/dist/apme/dashboard-html.js +87 -11
- package/dist/apme/dashboard-html.js.map +1 -1
- package/dist/apme/http.d.ts.map +1 -1
- package/dist/apme/http.js +43 -6
- package/dist/apme/http.js.map +1 -1
- package/dist/apme/index.d.ts +26 -5
- package/dist/apme/index.d.ts.map +1 -1
- package/dist/apme/index.js +135 -9
- package/dist/apme/index.js.map +1 -1
- package/dist/apme/pareto.d.ts +39 -0
- package/dist/apme/pareto.d.ts.map +1 -0
- package/dist/apme/pareto.js +59 -0
- package/dist/apme/pareto.js.map +1 -0
- package/dist/apme/recommend.d.ts +3 -0
- package/dist/apme/recommend.d.ts.map +1 -1
- package/dist/apme/recommend.js +43 -1
- package/dist/apme/recommend.js.map +1 -1
- package/dist/apme/runner.d.ts +92 -4
- package/dist/apme/runner.d.ts.map +1 -1
- package/dist/apme/runner.js +586 -70
- package/dist/apme/runner.js.map +1 -1
- package/dist/apme/sample-to-timeline.d.ts +26 -0
- package/dist/apme/sample-to-timeline.d.ts.map +1 -0
- package/dist/apme/sample-to-timeline.js +95 -0
- package/dist/apme/sample-to-timeline.js.map +1 -0
- package/dist/apme/scorers/index.d.ts +47 -0
- package/dist/apme/scorers/index.d.ts.map +1 -0
- package/dist/apme/scorers/index.js +96 -0
- package/dist/apme/scorers/index.js.map +1 -0
- package/dist/apme/settings.d.ts +14 -10
- package/dist/apme/settings.d.ts.map +1 -1
- package/dist/apme/settings.js +34 -8
- package/dist/apme/settings.js.map +1 -1
- package/dist/apme/store.d.ts +33 -1
- package/dist/apme/store.d.ts.map +1 -1
- package/dist/apme/store.js +334 -25
- package/dist/apme/store.js.map +1 -1
- package/dist/awaiting-overlay.d.ts +99 -0
- package/dist/awaiting-overlay.d.ts.map +1 -0
- package/dist/awaiting-overlay.js +148 -0
- package/dist/awaiting-overlay.js.map +1 -0
- package/dist/ble-sync-spawn.d.ts +63 -0
- package/dist/ble-sync-spawn.d.ts.map +1 -0
- package/dist/ble-sync-spawn.js +196 -0
- package/dist/ble-sync-spawn.js.map +1 -0
- package/dist/bridge-core.d.ts +24 -1
- package/dist/bridge-core.d.ts.map +1 -1
- package/dist/bridge-core.js +157 -24
- package/dist/bridge-core.js.map +1 -1
- package/dist/broadcast.d.ts +3 -0
- package/dist/broadcast.d.ts.map +1 -0
- package/dist/broadcast.js +122 -0
- package/dist/broadcast.js.map +1 -0
- package/dist/check-deps.d.ts.map +1 -1
- package/dist/check-deps.js +25 -9
- package/dist/check-deps.js.map +1 -1
- package/dist/cli.d.ts +15 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +1021 -93
- package/dist/cli.js.map +1 -1
- package/dist/codex-auth.d.ts +21 -0
- package/dist/codex-auth.d.ts.map +1 -1
- package/dist/codex-auth.js +52 -1
- package/dist/codex-auth.js.map +1 -1
- package/dist/codex-output-parser.d.ts +8 -0
- package/dist/codex-output-parser.d.ts.map +1 -1
- package/dist/codex-output-parser.js +110 -25
- package/dist/codex-output-parser.js.map +1 -1
- package/dist/codex-rate-limits.d.ts +16 -0
- package/dist/codex-rate-limits.d.ts.map +1 -0
- package/dist/codex-rate-limits.js +197 -0
- package/dist/codex-rate-limits.js.map +1 -0
- package/dist/codex-rollout-response.d.ts +31 -0
- package/dist/codex-rollout-response.d.ts.map +1 -0
- package/dist/codex-rollout-response.js +135 -0
- package/dist/codex-rollout-response.js.map +1 -0
- package/dist/daemon-server.d.ts +85 -0
- package/dist/daemon-server.d.ts.map +1 -1
- package/dist/daemon-server.js +1627 -159
- package/dist/daemon-server.js.map +1 -1
- package/dist/daemon.js +15 -6
- package/dist/daemon.js.map +1 -1
- package/dist/display-dim.d.ts +9 -0
- package/dist/display-dim.d.ts.map +1 -0
- package/dist/display-dim.js +53 -0
- package/dist/display-dim.js.map +1 -0
- package/dist/display-monitor.d.ts +15 -2
- package/dist/display-monitor.d.ts.map +1 -1
- package/dist/display-monitor.js +104 -26
- package/dist/display-monitor.js.map +1 -1
- package/dist/esp32-serial.d.ts +160 -1
- package/dist/esp32-serial.d.ts.map +1 -1
- package/dist/esp32-serial.js +950 -153
- package/dist/esp32-serial.js.map +1 -1
- package/dist/fallback-task-timeline.d.ts +42 -0
- package/dist/fallback-task-timeline.d.ts.map +1 -0
- package/dist/fallback-task-timeline.js +112 -0
- package/dist/fallback-task-timeline.js.map +1 -0
- package/dist/foundation-models-helper.d.ts +11 -0
- package/dist/foundation-models-helper.d.ts.map +1 -0
- package/dist/foundation-models-helper.js +241 -0
- package/dist/foundation-models-helper.js.map +1 -0
- package/dist/hook-migration.js +1 -1
- package/dist/hook-migration.js.map +1 -1
- package/dist/hook-server.d.ts +2 -3
- package/dist/hook-server.d.ts.map +1 -1
- package/dist/hook-server.js +22 -10
- package/dist/hook-server.js.map +1 -1
- package/dist/idotmatrix/idotmatrix-daemon-sync.d.ts +33 -0
- package/dist/idotmatrix/idotmatrix-daemon-sync.d.ts.map +1 -0
- package/dist/idotmatrix/idotmatrix-daemon-sync.js +164 -0
- package/dist/idotmatrix/idotmatrix-daemon-sync.js.map +1 -0
- package/dist/idotmatrix/idotmatrix-discover.d.ts +18 -0
- package/dist/idotmatrix/idotmatrix-discover.d.ts.map +1 -0
- package/dist/idotmatrix/idotmatrix-discover.js +85 -0
- package/dist/idotmatrix/idotmatrix-discover.js.map +1 -0
- package/dist/idotmatrix/idotmatrix-settings.d.ts +20 -0
- package/dist/idotmatrix/idotmatrix-settings.d.ts.map +1 -0
- package/dist/idotmatrix/idotmatrix-settings.js +57 -0
- package/dist/idotmatrix/idotmatrix-settings.js.map +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +215 -179
- package/dist/index.js.map +1 -1
- package/dist/log-stream.d.ts +15 -16
- package/dist/log-stream.d.ts.map +1 -1
- package/dist/log-stream.js +18 -96
- package/dist/log-stream.js.map +1 -1
- package/dist/logger.d.ts.map +1 -1
- package/dist/logger.js +12 -3
- package/dist/logger.js.map +1 -1
- package/dist/mdns.d.ts +17 -0
- package/dist/mdns.d.ts.map +1 -1
- package/dist/mdns.js +52 -18
- package/dist/mdns.js.map +1 -1
- package/dist/modules/adb-module.d.ts +1 -1
- package/dist/modules/adb-module.d.ts.map +1 -1
- package/dist/modules/adb-module.js +4 -3
- package/dist/modules/adb-module.js.map +1 -1
- package/dist/modules/broadcast-module.d.ts +17 -0
- package/dist/modules/broadcast-module.d.ts.map +1 -0
- package/dist/modules/broadcast-module.js +26 -0
- package/dist/modules/broadcast-module.js.map +1 -0
- package/dist/modules/idotmatrix-module.d.ts +9 -0
- package/dist/modules/idotmatrix-module.d.ts.map +1 -0
- package/dist/modules/idotmatrix-module.js +46 -0
- package/dist/modules/idotmatrix-module.js.map +1 -0
- package/dist/modules/index.d.ts +3 -1
- package/dist/modules/index.d.ts.map +1 -1
- package/dist/modules/index.js +9 -3
- package/dist/modules/index.js.map +1 -1
- package/dist/modules/pixoo-module.d.ts.map +1 -1
- package/dist/modules/pixoo-module.js +14 -4
- package/dist/modules/pixoo-module.js.map +1 -1
- package/dist/modules/serial-module.d.ts +4 -0
- package/dist/modules/serial-module.d.ts.map +1 -1
- package/dist/modules/serial-module.js +14 -12
- package/dist/modules/serial-module.js.map +1 -1
- package/dist/modules/timebox-module.d.ts +9 -0
- package/dist/modules/timebox-module.d.ts.map +1 -0
- package/dist/modules/timebox-module.js +46 -0
- package/dist/modules/timebox-module.js.map +1 -0
- package/dist/modules/types.d.ts +4 -2
- package/dist/modules/types.d.ts.map +1 -1
- package/dist/openclaw-session.d.ts +18 -0
- package/dist/openclaw-session.d.ts.map +1 -0
- package/dist/openclaw-session.js +34 -0
- package/dist/openclaw-session.js.map +1 -0
- package/dist/output-parser.d.ts +30 -0
- package/dist/output-parser.d.ts.map +1 -1
- package/dist/output-parser.js +125 -9
- package/dist/output-parser.js.map +1 -1
- package/dist/passive-observer.d.ts +26 -0
- package/dist/passive-observer.d.ts.map +1 -1
- package/dist/passive-observer.js +258 -49
- package/dist/passive-observer.js.map +1 -1
- package/dist/permission-resolver.d.ts +47 -0
- package/dist/permission-resolver.d.ts.map +1 -0
- package/dist/permission-resolver.js +103 -0
- package/dist/permission-resolver.js.map +1 -0
- package/dist/pixoo/micro-glyphs.d.ts +49 -0
- package/dist/pixoo/micro-glyphs.d.ts.map +1 -0
- package/dist/pixoo/micro-glyphs.js +276 -0
- package/dist/pixoo/micro-glyphs.js.map +1 -0
- package/dist/pixoo/pixoo-bridge.d.ts +2 -2
- package/dist/pixoo/pixoo-bridge.d.ts.map +1 -1
- package/dist/pixoo/pixoo-bridge.js +93 -25
- package/dist/pixoo/pixoo-bridge.js.map +1 -1
- package/dist/pixoo/pixoo-camera.d.ts +19 -3
- package/dist/pixoo/pixoo-camera.d.ts.map +1 -1
- package/dist/pixoo/pixoo-camera.js +62 -27
- package/dist/pixoo/pixoo-camera.js.map +1 -1
- package/dist/pixoo/pixoo-client.d.ts +13 -3
- package/dist/pixoo/pixoo-client.d.ts.map +1 -1
- package/dist/pixoo/pixoo-client.js +51 -22
- package/dist/pixoo/pixoo-client.js.map +1 -1
- package/dist/pixoo/pixoo-discover.d.ts +37 -0
- package/dist/pixoo/pixoo-discover.d.ts.map +1 -0
- package/dist/pixoo/pixoo-discover.js +105 -0
- package/dist/pixoo/pixoo-discover.js.map +1 -0
- package/dist/pixoo/pixoo-renderer.d.ts +8 -3
- package/dist/pixoo/pixoo-renderer.d.ts.map +1 -1
- package/dist/pixoo/pixoo-renderer.js +189 -60
- package/dist/pixoo/pixoo-renderer.js.map +1 -1
- package/dist/pixoo/pixoo-settings.d.ts +6 -0
- package/dist/pixoo/pixoo-settings.d.ts.map +1 -1
- package/dist/pixoo/pixoo-settings.js +9 -0
- package/dist/pixoo/pixoo-settings.js.map +1 -1
- package/dist/pixoo/pixoo-sprites.d.ts +60 -11
- package/dist/pixoo/pixoo-sprites.d.ts.map +1 -1
- package/dist/pixoo/pixoo-sprites.js +512 -209
- package/dist/pixoo/pixoo-sprites.js.map +1 -1
- package/dist/pty-manager.d.ts.map +1 -1
- package/dist/pty-manager.js +8 -2
- package/dist/pty-manager.js.map +1 -1
- package/dist/session-activity.d.ts +14 -0
- package/dist/session-activity.d.ts.map +1 -0
- package/dist/session-activity.js +160 -0
- package/dist/session-activity.js.map +1 -0
- package/dist/session-aggregator.d.ts +17 -0
- package/dist/session-aggregator.d.ts.map +1 -1
- package/dist/session-aggregator.js +48 -9
- package/dist/session-aggregator.js.map +1 -1
- package/dist/session-registry.d.ts +71 -3
- package/dist/session-registry.d.ts.map +1 -1
- package/dist/session-registry.js +137 -8
- package/dist/session-registry.js.map +1 -1
- package/dist/session-timeline-relay.d.ts.map +1 -1
- package/dist/session-timeline-relay.js +13 -4
- package/dist/session-timeline-relay.js.map +1 -1
- package/dist/session-transcript-timeline.d.ts +49 -0
- package/dist/session-transcript-timeline.d.ts.map +1 -0
- package/dist/session-transcript-timeline.js +276 -0
- package/dist/session-transcript-timeline.js.map +1 -0
- package/dist/state-machine.d.ts +6 -1
- package/dist/state-machine.d.ts.map +1 -1
- package/dist/state-machine.js +86 -28
- package/dist/state-machine.js.map +1 -1
- package/dist/timebox/timebox-daemon-sync.d.ts +19 -0
- package/dist/timebox/timebox-daemon-sync.d.ts.map +1 -0
- package/dist/timebox/timebox-daemon-sync.js +135 -0
- package/dist/timebox/timebox-daemon-sync.js.map +1 -0
- package/dist/timebox/timebox-discover.d.ts +19 -0
- package/dist/timebox/timebox-discover.d.ts.map +1 -0
- package/dist/timebox/timebox-discover.js +87 -0
- package/dist/timebox/timebox-discover.js.map +1 -0
- package/dist/timebox/timebox-settings.d.ts +32 -0
- package/dist/timebox/timebox-settings.d.ts.map +1 -0
- package/dist/timebox/timebox-settings.js +80 -0
- package/dist/timebox/timebox-settings.js.map +1 -0
- package/dist/timeline-store.d.ts +63 -3
- package/dist/timeline-store.d.ts.map +1 -1
- package/dist/timeline-store.js +292 -14
- package/dist/timeline-store.js.map +1 -1
- package/dist/timeline-summarizer.d.ts.map +1 -1
- package/dist/timeline-summarizer.js +29 -5
- package/dist/timeline-summarizer.js.map +1 -1
- package/dist/tui/ansi.d.ts +0 -4
- package/dist/tui/ansi.d.ts.map +1 -1
- package/dist/tui/ansi.js +14 -7
- package/dist/tui/ansi.js.map +1 -1
- package/dist/tui/dashboard.d.ts +1 -0
- package/dist/tui/dashboard.d.ts.map +1 -1
- package/dist/tui/dashboard.js +24 -7
- package/dist/tui/dashboard.js.map +1 -1
- package/dist/tui/renderer.d.ts +36 -0
- package/dist/tui/renderer.d.ts.map +1 -1
- package/dist/tui/renderer.js +303 -119
- package/dist/tui/renderer.js.map +1 -1
- package/dist/tui/terrarium.d.ts.map +1 -1
- package/dist/tui/terrarium.js +37 -49
- package/dist/tui/terrarium.js.map +1 -1
- package/dist/types.d.ts +2 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +2 -2
- package/dist/types.js.map +1 -1
- package/dist/usage-api.d.ts.map +1 -1
- package/dist/usage-api.js +7 -1
- package/dist/usage-api.js.map +1 -1
- package/dist/usage-event.d.ts +10 -3
- package/dist/usage-event.d.ts.map +1 -1
- package/dist/usage-event.js +74 -12
- package/dist/usage-event.js.map +1 -1
- package/dist/utility-proxy.d.ts.map +1 -1
- package/dist/utility-proxy.js +8 -0
- package/dist/utility-proxy.js.map +1 -1
- package/dist/utils/project-name.d.ts +3 -0
- package/dist/utils/project-name.d.ts.map +1 -1
- package/dist/utils/project-name.js +44 -2
- package/dist/utils/project-name.js.map +1 -1
- package/dist/windows-service.d.ts +26 -0
- package/dist/windows-service.d.ts.map +1 -0
- package/dist/windows-service.js +145 -0
- package/dist/windows-service.js.map +1 -0
- package/dist/ws-server.d.ts +22 -1
- package/dist/ws-server.d.ts.map +1 -1
- package/dist/ws-server.js +89 -4
- package/dist/ws-server.js.map +1 -1
- package/fm-helper/AgentDeckFMHelper.swift +112 -0
- package/package.json +9 -3
- package/scripts/build-fm-helper.mjs +26 -0
- package/LICENSE +0 -21
- package/dist/apme/tuner.d.ts +0 -64
- package/dist/apme/tuner.d.ts.map +0 -1
- package/dist/apme/tuner.js +0 -297
- package/dist/apme/tuner.js.map +0 -1
- package/dist/d200h/hid-protocol.d.ts +0 -62
- package/dist/d200h/hid-protocol.d.ts.map +0 -1
- package/dist/d200h/hid-protocol.js +0 -124
- package/dist/d200h/hid-protocol.js.map +0 -1
- package/dist/d200h/image-renderer.d.ts +0 -36
- package/dist/d200h/image-renderer.d.ts.map +0 -1
- package/dist/d200h/image-renderer.js +0 -487
- package/dist/d200h/image-renderer.js.map +0 -1
- package/dist/modules/d200h-module.d.ts +0 -43
- package/dist/modules/d200h-module.d.ts.map +0 -1
- package/dist/modules/d200h-module.js +0 -360
- package/dist/modules/d200h-module.js.map +0 -1
- package/dist/modules/d200h-renderer.d.ts +0 -7
- package/dist/modules/d200h-renderer.d.ts.map +0 -1
- package/dist/modules/d200h-renderer.js +0 -321
- package/dist/modules/d200h-renderer.js.map +0 -1
|
@@ -29,6 +29,8 @@ export function claudeHookToSpans(ctx, event, data) {
|
|
|
29
29
|
});
|
|
30
30
|
if (event === 'UserPromptSubmit') {
|
|
31
31
|
const prompt = extractPrompt(data);
|
|
32
|
+
if (isTaskNotificationPrompt(prompt))
|
|
33
|
+
return [];
|
|
32
34
|
if (/^\s*\/clear\s*$/i.test(prompt)) {
|
|
33
35
|
return [make('task_boundary', { 'agentdeck.boundary_signal': 'clear' })];
|
|
34
36
|
}
|
|
@@ -82,4 +84,7 @@ function extractPrompt(data) {
|
|
|
82
84
|
return fromMessage;
|
|
83
85
|
return typeof data.prompt === 'string' ? data.prompt : '';
|
|
84
86
|
}
|
|
87
|
+
function isTaskNotificationPrompt(prompt) {
|
|
88
|
+
return prompt.trim().toLowerCase().startsWith('<task-notification>');
|
|
89
|
+
}
|
|
85
90
|
//# sourceMappingURL=claude-hook.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude-hook.js","sourceRoot":"","sources":["../../../src/apme/adapters/claude-hook.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"claude-hook.js","sourceRoot":"","sources":["../../../src/apme/adapters/claude-hook.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Codex CLI hook → TelemetrySpan adapter.
|
|
3
|
+
*
|
|
4
|
+
* Mirror of `claude-hook.ts:claudeHookToSpans` for the codex_* event family
|
|
5
|
+
* installed by `hooks/src/codex-install.ts`. Codex hook payloads use the
|
|
6
|
+
* same shape as Claude (stdin JSON forwarded as the POST body) — only the
|
|
7
|
+
* event name prefix differs — so the span shapes are kept aligned with the
|
|
8
|
+
* Claude adapter so downstream APME ingestion handles both transparently.
|
|
9
|
+
*
|
|
10
|
+
* Schema source: Codex CLI command-hook stdin JSON; canonical reference is
|
|
11
|
+
* apple/AgentDeck/Daemon/Server/DaemonServer.swift:handleHookEvent (codex
|
|
12
|
+
* branches) and the `~/.codex/config.toml` body assembled by
|
|
13
|
+
* hooks/src/codex-install.ts:managedBlockBody.
|
|
14
|
+
*/
|
|
15
|
+
import type { AdapterContext, TelemetrySpan } from '@agentdeck/shared';
|
|
16
|
+
export declare function codexHookToSpans(ctx: AdapterContext, event: string, data: Record<string, unknown>): TelemetrySpan[];
|
|
17
|
+
//# sourceMappingURL=codex-hook.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex-hook.d.ts","sourceRoot":"","sources":["../../../src/apme/adapters/codex-hook.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,KAAK,EACV,cAAc,EACd,aAAa,EAEd,MAAM,mBAAmB,CAAC;AAG3B,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,cAAc,EACnB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,aAAa,EAAE,CA8DjB"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Codex CLI hook → TelemetrySpan adapter.
|
|
3
|
+
*
|
|
4
|
+
* Mirror of `claude-hook.ts:claudeHookToSpans` for the codex_* event family
|
|
5
|
+
* installed by `hooks/src/codex-install.ts`. Codex hook payloads use the
|
|
6
|
+
* same shape as Claude (stdin JSON forwarded as the POST body) — only the
|
|
7
|
+
* event name prefix differs — so the span shapes are kept aligned with the
|
|
8
|
+
* Claude adapter so downstream APME ingestion handles both transparently.
|
|
9
|
+
*
|
|
10
|
+
* Schema source: Codex CLI command-hook stdin JSON; canonical reference is
|
|
11
|
+
* apple/AgentDeck/Daemon/Server/DaemonServer.swift:handleHookEvent (codex
|
|
12
|
+
* branches) and the `~/.codex/config.toml` body assembled by
|
|
13
|
+
* hooks/src/codex-install.ts:managedBlockBody.
|
|
14
|
+
*/
|
|
15
|
+
import { randomUUID } from 'crypto';
|
|
16
|
+
import { spanNameForKind } from '@agentdeck/shared';
|
|
17
|
+
export function codexHookToSpans(ctx, event, data) {
|
|
18
|
+
const ts = Date.now();
|
|
19
|
+
const baseAttrs = {
|
|
20
|
+
'agentdeck.agent_type': ctx.agentType,
|
|
21
|
+
...(ctx.cwd ? { 'agentdeck.cwd': ctx.cwd } : {}),
|
|
22
|
+
};
|
|
23
|
+
const make = (kind, attributes) => ({
|
|
24
|
+
traceId: ctx.traceId,
|
|
25
|
+
spanId: randomUUID(),
|
|
26
|
+
parentSpanId: ctx.activeTurnId,
|
|
27
|
+
name: spanNameForKind(kind),
|
|
28
|
+
kind,
|
|
29
|
+
ts,
|
|
30
|
+
attributes: { ...baseAttrs, ...attributes },
|
|
31
|
+
});
|
|
32
|
+
if (event === 'codex_user_prompt_submit') {
|
|
33
|
+
const prompt = extractPrompt(data);
|
|
34
|
+
if (/^\s*\/clear\s*$/i.test(prompt)) {
|
|
35
|
+
return [make('task_boundary', { 'agentdeck.boundary_signal': 'clear' })];
|
|
36
|
+
}
|
|
37
|
+
return [
|
|
38
|
+
make('turn_start', {
|
|
39
|
+
'agentdeck.prompt_text': prompt,
|
|
40
|
+
'agentdeck.raw_payload': data,
|
|
41
|
+
}),
|
|
42
|
+
];
|
|
43
|
+
}
|
|
44
|
+
if (event === 'codex_tool_start') {
|
|
45
|
+
const toolName = typeof data.tool_name === 'string' ? data.tool_name : undefined;
|
|
46
|
+
return [
|
|
47
|
+
make('tool_call', {
|
|
48
|
+
...(toolName ? { 'gen_ai.tool.name': toolName, 'agentdeck.tool_name': toolName } : {}),
|
|
49
|
+
'agentdeck.raw_payload': data,
|
|
50
|
+
}),
|
|
51
|
+
];
|
|
52
|
+
}
|
|
53
|
+
if (event === 'codex_tool_end') {
|
|
54
|
+
const toolName = typeof data.tool_name === 'string' ? data.tool_name : undefined;
|
|
55
|
+
return [
|
|
56
|
+
make('tool_result', {
|
|
57
|
+
...(toolName ? { 'gen_ai.tool.name': toolName, 'agentdeck.tool_name': toolName } : {}),
|
|
58
|
+
'agentdeck.raw_payload': data,
|
|
59
|
+
}),
|
|
60
|
+
];
|
|
61
|
+
}
|
|
62
|
+
// codex_session_start, codex_stop, codex_turn_complete, etc. are recorded
|
|
63
|
+
// verbatim so the collector still writes a `steps` row for timeline /
|
|
64
|
+
// tuner queries. State transitions (IDLE / PROCESSING) live in
|
|
65
|
+
// state-machine.ts:handleHookEvent — APME doesn't need its own.
|
|
66
|
+
return [
|
|
67
|
+
make('raw_step', {
|
|
68
|
+
'agentdeck.raw_event': event,
|
|
69
|
+
'agentdeck.raw_payload': data,
|
|
70
|
+
}),
|
|
71
|
+
];
|
|
72
|
+
}
|
|
73
|
+
/** Codex hook payload uses Claude-compatible shapes when the upstream CLI
|
|
74
|
+
* forwards them (the stdin JSON is whatever Codex's lifecycle hook layer
|
|
75
|
+
* emits). Most variants nest the prompt under `message.content`; some
|
|
76
|
+
* embed a top-level `prompt`. Returns `''` if neither shape is present. */
|
|
77
|
+
function extractPrompt(data) {
|
|
78
|
+
const fromMessage = (() => {
|
|
79
|
+
const msg = data.message;
|
|
80
|
+
if (msg && typeof msg === 'object') {
|
|
81
|
+
const content = msg.content;
|
|
82
|
+
return typeof content === 'string' ? content : '';
|
|
83
|
+
}
|
|
84
|
+
return '';
|
|
85
|
+
})();
|
|
86
|
+
if (fromMessage)
|
|
87
|
+
return fromMessage;
|
|
88
|
+
if (typeof data.prompt === 'string')
|
|
89
|
+
return data.prompt;
|
|
90
|
+
// Codex sometimes sends `{ user_prompt: "..." }`; accept that shape too.
|
|
91
|
+
if (typeof data.user_prompt === 'string')
|
|
92
|
+
return data.user_prompt;
|
|
93
|
+
return '';
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=codex-hook.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex-hook.js","sourceRoot":"","sources":["../../../src/apme/adapters/codex-hook.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CodexTurnManager — turn-boundary reconstruction for Codex CLI sessions.
|
|
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
|
+
* Extracted from `bridge/src/index.ts wireAgentApme` so the codex segment
|
|
26
|
+
* can be unit-tested with fake collector / fake ringbuffer / fake adapter.
|
|
27
|
+
*/
|
|
28
|
+
import type { AgentType } from '@agentdeck/shared';
|
|
29
|
+
import type { AdapterHookEvent, AdapterParserEvent } from '@agentdeck/shared';
|
|
30
|
+
import type { BridgeCore } from '../../bridge-core.js';
|
|
31
|
+
import type { ApmeModule } from '../index.js';
|
|
32
|
+
import type { PtyRingBuffer } from '../../pty-ringbuffer.js';
|
|
33
|
+
export declare class CodexTurnManager {
|
|
34
|
+
private readonly core;
|
|
35
|
+
private readonly apme;
|
|
36
|
+
private readonly ptyRingBuffer;
|
|
37
|
+
private readonly sessionId;
|
|
38
|
+
private readonly agentType;
|
|
39
|
+
private chatStart;
|
|
40
|
+
private lastPromptText;
|
|
41
|
+
private idleCloseTimer;
|
|
42
|
+
private inToolSilence;
|
|
43
|
+
private toolActiveSinceLastSpinner;
|
|
44
|
+
private toolSilenceTimer;
|
|
45
|
+
private pendingPromptIdle;
|
|
46
|
+
private pendingTailSnapshot;
|
|
47
|
+
private hookActive;
|
|
48
|
+
private lastHookTs;
|
|
49
|
+
constructor(core: BridgeCore, apme: ApmeModule, ptyRingBuffer: PtyRingBuffer, sessionId: string, agentType: AgentType);
|
|
50
|
+
/** Process a codex_* hook event. Hooks are authoritative — they own
|
|
51
|
+
* the turn boundaries while fresh. APME span ingestion already happens
|
|
52
|
+
* in `bridge/src/index.ts` via `codexHookToSpans`; this method only
|
|
53
|
+
* adds the timeline-visible entries the dashboard renders. */
|
|
54
|
+
onHookEvent(evt: AdapterHookEvent): void;
|
|
55
|
+
/** Process a PTY parser event. While a hook is fresh, this is a no-op
|
|
56
|
+
* for turn-boundary signals (hook owns them). Outside the freshness
|
|
57
|
+
* window we run the legacy PTY-only state machine. */
|
|
58
|
+
onParserEvent(evt: AdapterParserEvent): void;
|
|
59
|
+
/** Clear timers so a session shutdown leaves no lingering work. */
|
|
60
|
+
cleanup(): void;
|
|
61
|
+
private hookFresh;
|
|
62
|
+
private makeCtx;
|
|
63
|
+
private addTimelineEntry;
|
|
64
|
+
/** Add a timeline entry AND feed it through APME ingestion. Use this
|
|
65
|
+
* on the PTY-fallback path where no upstream hook adapter has done
|
|
66
|
+
* the ingestion. */
|
|
67
|
+
private addEntryAndIngest;
|
|
68
|
+
/** Hook-path chat_start opener: timeline entry only. The APME turn
|
|
69
|
+
* was opened upstream by codexHookToSpans → ingestSpan(turn_start)
|
|
70
|
+
* in the index.ts hook branch. Re-ingesting here would close the
|
|
71
|
+
* just-opened turn and immediately reopen another. */
|
|
72
|
+
private openTimelineChatStart;
|
|
73
|
+
/** PTY-path chat_start opener: timeline entry AND APME ingestion. */
|
|
74
|
+
private ensureChatStart;
|
|
75
|
+
/** Close the turn that started at `startedAt`: extract the response
|
|
76
|
+
* tail (live ringbuffer or passed snapshot), emit chat_response +
|
|
77
|
+
* chat_end timeline entries, and ingest the response span. The
|
|
78
|
+
* snapshot path is used when closing in response to a delayed signal
|
|
79
|
+
* (auto-clear timer or next spinner_start) — by that point the live
|
|
80
|
+
* ringbuffer contains turn N+1 content that would contaminate N's
|
|
81
|
+
* response. */
|
|
82
|
+
private closeTurn;
|
|
83
|
+
private scheduleClose;
|
|
84
|
+
private exitToolSilence;
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=codex-turn-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex-turn-manager.d.ts","sourceRoot":"","sources":["../../../src/apme/adapters/codex-turn-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;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;AAwB7D,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;IAiDxC;;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;IA2EjB,OAAO,CAAC,aAAa;IAQrB,OAAO,CAAC,eAAe;CAOxB"}
|