@agentdeck/bridge 0.2.2 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/fm-helper/agentdeck-fm-helper +0 -0
- 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 +133 -6
- package/dist/apme/collector.d.ts.map +1 -1
- package/dist/apme/collector.js +471 -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 +117 -11
- package/dist/apme/dashboard-html.js.map +1 -1
- package/dist/apme/http.d.ts.map +1 -1
- package/dist/apme/http.js +52 -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 +146 -9
- package/dist/apme/index.js.map +1 -1
- package/dist/apme/judge-detect.d.ts +26 -0
- package/dist/apme/judge-detect.d.ts.map +1 -0
- package/dist/apme/judge-detect.js +69 -0
- package/dist/apme/judge-detect.js.map +1 -0
- 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 +99 -4
- package/dist/apme/runner.d.ts.map +1 -1
- package/dist/apme/runner.js +743 -72
- 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 +17 -11
- package/dist/apme/settings.d.ts.map +1 -1
- package/dist/apme/settings.js +30 -9
- 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 +112 -0
- package/dist/awaiting-overlay.d.ts.map +1 -0
- package/dist/awaiting-overlay.js +179 -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 +34 -1
- package/dist/bridge-core.d.ts.map +1 -1
- package/dist/bridge-core.js +207 -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/claude-permission-rules.d.ts +55 -0
- package/dist/claude-permission-rules.d.ts.map +1 -0
- package/dist/claude-permission-rules.js +197 -0
- package/dist/claude-permission-rules.js.map +1 -0
- package/dist/cli.d.ts +15 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +1030 -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/d200h/image-renderer.d.ts +4 -16
- package/dist/d200h/image-renderer.d.ts.map +1 -1
- package/dist/d200h/image-renderer.js +46 -212
- package/dist/d200h/image-renderer.js.map +1 -1
- package/dist/daemon-server.d.ts +85 -0
- package/dist/daemon-server.d.ts.map +1 -1
- package/dist/daemon-server.js +1975 -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 +190 -1
- package/dist/esp32-serial.d.ts.map +1 -1
- package/dist/esp32-serial.js +1090 -156
- 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 +119 -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 +23 -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 +217 -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 +3 -1
- package/dist/logger.d.ts.map +1 -1
- package/dist/logger.js +18 -5
- 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/model-catalog.d.ts +1 -1
- package/dist/model-catalog.d.ts.map +1 -1
- package/dist/model-catalog.js +2 -4
- package/dist/model-catalog.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/d200h-module.d.ts +22 -0
- package/dist/modules/d200h-module.d.ts.map +1 -1
- package/dist/modules/d200h-module.js +200 -65
- package/dist/modules/d200h-module.js.map +1 -1
- 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/trmnl-module.d.ts +38 -0
- package/dist/modules/trmnl-module.d.ts.map +1 -0
- package/dist/modules/trmnl-module.js +111 -0
- package/dist/modules/trmnl-module.js.map +1 -0
- package/dist/modules/types.d.ts +4 -2
- package/dist/modules/types.d.ts.map +1 -1
- package/dist/observed-steering.d.ts +93 -0
- package/dist/observed-steering.d.ts.map +1 -0
- package/dist/observed-steering.js +247 -0
- package/dist/observed-steering.js.map +1 -0
- 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/opencode-steering.d.ts +36 -0
- package/dist/opencode-steering.d.ts.map +1 -0
- package/dist/opencode-steering.js +84 -0
- package/dist/opencode-steering.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 +172 -18
- package/dist/output-parser.js.map +1 -1
- package/dist/passive-observer.d.ts +32 -0
- package/dist/passive-observer.d.ts.map +1 -1
- package/dist/passive-observer.js +288 -49
- package/dist/passive-observer.js.map +1 -1
- package/dist/permission-resolver.d.ts +55 -0
- package/dist/permission-resolver.d.ts.map +1 -0
- package/dist/permission-resolver.js +112 -0
- package/dist/permission-resolver.js.map +1 -0
- package/dist/pixoo/micro-glyphs.d.ts +18 -0
- package/dist/pixoo/micro-glyphs.d.ts.map +1 -0
- package/dist/pixoo/micro-glyphs.js +143 -0
- package/dist/pixoo/micro-glyphs.js.map +1 -0
- package/dist/pixoo/official-dot-glyphs.generated.d.ts +8 -0
- package/dist/pixoo/official-dot-glyphs.generated.d.ts.map +1 -0
- package/dist/pixoo/official-dot-glyphs.generated.js +247 -0
- package/dist/pixoo/official-dot-glyphs.generated.js.map +1 -0
- package/dist/pixoo/pixoo-bridge.d.ts +16 -8
- package/dist/pixoo/pixoo-bridge.d.ts.map +1 -1
- package/dist/pixoo/pixoo-bridge.js +127 -35
- 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 +27 -3
- package/dist/pixoo/pixoo-renderer.d.ts.map +1 -1
- package/dist/pixoo/pixoo-renderer.js +533 -135
- 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 +84 -11
- package/dist/pixoo/pixoo-sprites.d.ts.map +1 -1
- package/dist/pixoo/pixoo-sprites.js +620 -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/review-runner.d.ts +113 -0
- package/dist/review-runner.d.ts.map +1 -0
- package/dist/review-runner.js +428 -0
- package/dist/review-runner.js.map +1 -0
- 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 +25 -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-focus-relay.d.ts.map +1 -1
- package/dist/session-focus-relay.js +7 -1
- package/dist/session-focus-relay.js.map +1 -1
- package/dist/session-registry.d.ts +74 -3
- package/dist/session-registry.d.ts.map +1 -1
- package/dist/session-registry.js +140 -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 +112 -3
- package/dist/timeline-store.d.ts.map +1 -1
- package/dist/timeline-store.js +460 -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/trmnl/byos-server.d.ts +39 -0
- package/dist/trmnl/byos-server.d.ts.map +1 -0
- package/dist/trmnl/byos-server.js +301 -0
- package/dist/trmnl/byos-server.js.map +1 -0
- package/dist/trmnl/frame-cache.d.ts +37 -0
- package/dist/trmnl/frame-cache.d.ts.map +1 -0
- package/dist/trmnl/frame-cache.js +157 -0
- package/dist/trmnl/frame-cache.js.map +1 -0
- package/dist/trmnl/image-renderer.d.ts +27 -0
- package/dist/trmnl/image-renderer.d.ts.map +1 -0
- package/dist/trmnl/image-renderer.js +235 -0
- package/dist/trmnl/image-renderer.js.map +1 -0
- package/dist/trmnl/trmnl-settings.d.ts +96 -0
- package/dist/trmnl/trmnl-settings.d.ts.map +1 -0
- package/dist/trmnl/trmnl-settings.js +177 -0
- package/dist/trmnl/trmnl-settings.js.map +1 -0
- package/dist/trmnl/trmnl-telemetry.d.ts +47 -0
- package/dist/trmnl/trmnl-telemetry.d.ts.map +1 -0
- package/dist/trmnl/trmnl-telemetry.js +56 -0
- package/dist/trmnl/trmnl-telemetry.js.map +1 -0
- 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 +38 -11
- 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 +355 -121
- package/dist/tui/renderer.js.map +1 -1
- package/dist/tui/terrarium.d.ts.map +1 -1
- package/dist/tui/terrarium.js +44 -51
- 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 +98 -13
- 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/version-check.d.ts.map +1 -1
- package/dist/version-check.js +1 -17
- package/dist/version-check.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 +17 -3
- package/dist/ws-server.d.ts.map +1 -1
- package/dist/ws-server.js +78 -8
- package/dist/ws-server.js.map +1 -1
- package/fm-helper/AgentDeckFMHelper.swift +112 -0
- package/package.json +10 -4
- 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
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import Foundation
|
|
2
|
+
#if canImport(FoundationModels)
|
|
3
|
+
import FoundationModels
|
|
4
|
+
#endif
|
|
5
|
+
|
|
6
|
+
struct HelperRequest: Decodable {
|
|
7
|
+
let id: Int
|
|
8
|
+
let type: String?
|
|
9
|
+
let prompt: String?
|
|
10
|
+
let instructions: String?
|
|
11
|
+
let temperature: Double?
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
@main
|
|
15
|
+
struct AgentDeckFMHelper {
|
|
16
|
+
static func main() async {
|
|
17
|
+
do {
|
|
18
|
+
for try await line in FileHandle.standardInput.bytes.lines {
|
|
19
|
+
await handle(line)
|
|
20
|
+
}
|
|
21
|
+
} catch {
|
|
22
|
+
write(["id": -1, "error": "stdin_error", "reason": String(describing: error)])
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
private static func handle(_ line: String) async {
|
|
27
|
+
guard let data = line.data(using: .utf8),
|
|
28
|
+
let request = try? JSONDecoder().decode(HelperRequest.self, from: data) else {
|
|
29
|
+
write(["id": -1, "error": "bad_request", "reason": "invalid JSON line"])
|
|
30
|
+
return
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
if request.type == "health" {
|
|
34
|
+
write(healthResponse(id: request.id))
|
|
35
|
+
return
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
guard let prompt = request.prompt, !prompt.isEmpty else {
|
|
39
|
+
write(["id": request.id, "error": "bad_request", "reason": "missing prompt"])
|
|
40
|
+
return
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
#if canImport(FoundationModels)
|
|
44
|
+
if #available(macOS 26.0, *) {
|
|
45
|
+
guard case .available = SystemLanguageModel.default.availability else {
|
|
46
|
+
write([
|
|
47
|
+
"id": request.id,
|
|
48
|
+
"error": "unavailable",
|
|
49
|
+
"reason": unavailableReason(),
|
|
50
|
+
])
|
|
51
|
+
return
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
do {
|
|
55
|
+
let session = LanguageModelSession(
|
|
56
|
+
instructions: request.instructions ?? "You are an exacting code evaluator. Reply with strict JSON only."
|
|
57
|
+
)
|
|
58
|
+
let options = GenerationOptions(temperature: request.temperature ?? 0)
|
|
59
|
+
let response = try await session.respond(to: prompt, options: options)
|
|
60
|
+
write(["id": request.id, "text": response.content])
|
|
61
|
+
} catch {
|
|
62
|
+
write(["id": request.id, "error": "session_error", "reason": String(describing: error)])
|
|
63
|
+
}
|
|
64
|
+
} else {
|
|
65
|
+
write(["id": request.id, "error": "unavailable", "reason": "macOS 26 or later required"])
|
|
66
|
+
}
|
|
67
|
+
#else
|
|
68
|
+
write(["id": request.id, "error": "unavailable", "reason": "FoundationModels framework not present"])
|
|
69
|
+
#endif
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
private static func healthResponse(id: Int) -> [String: Any] {
|
|
73
|
+
#if canImport(FoundationModels)
|
|
74
|
+
if #available(macOS 26.0, *) {
|
|
75
|
+
if case .available = SystemLanguageModel.default.availability {
|
|
76
|
+
return ["id": id, "status": "ready"]
|
|
77
|
+
}
|
|
78
|
+
return ["id": id, "status": "unavailable", "reason": unavailableReason()]
|
|
79
|
+
}
|
|
80
|
+
return ["id": id, "status": "unavailable", "reason": "macOS 26 or later required"]
|
|
81
|
+
#else
|
|
82
|
+
return ["id": id, "status": "unavailable", "reason": "FoundationModels framework not present"]
|
|
83
|
+
#endif
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
private static func unavailableReason() -> String {
|
|
87
|
+
#if canImport(FoundationModels)
|
|
88
|
+
if #available(macOS 26.0, *) {
|
|
89
|
+
switch SystemLanguageModel.default.availability {
|
|
90
|
+
case .available:
|
|
91
|
+
return "available"
|
|
92
|
+
case .unavailable(let reason):
|
|
93
|
+
return "unavailable: \(reason)"
|
|
94
|
+
@unknown default:
|
|
95
|
+
return "unavailable: unknown state"
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
return "macOS 26 or later required"
|
|
99
|
+
#else
|
|
100
|
+
return "FoundationModels framework not present"
|
|
101
|
+
#endif
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
private static func write(_ object: [String: Any]) {
|
|
105
|
+
guard JSONSerialization.isValidJSONObject(object),
|
|
106
|
+
let data = try? JSONSerialization.data(withJSONObject: object),
|
|
107
|
+
let text = String(data: data, encoding: .utf8) else {
|
|
108
|
+
return
|
|
109
|
+
}
|
|
110
|
+
FileHandle.standardOutput.write(Data((text + "\n").utf8))
|
|
111
|
+
}
|
|
112
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agentdeck/bridge",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "1.0.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -10,27 +10,32 @@
|
|
|
10
10
|
},
|
|
11
11
|
"files": [
|
|
12
12
|
"dist",
|
|
13
|
-
"!dist/__tests__"
|
|
13
|
+
"!dist/__tests__",
|
|
14
|
+
"assets/fonts",
|
|
15
|
+
"assets/fm-helper",
|
|
16
|
+
"fm-helper",
|
|
17
|
+
"scripts/build-fm-helper.mjs"
|
|
14
18
|
],
|
|
15
19
|
"main": "./dist/index.js",
|
|
16
20
|
"bin": {
|
|
17
21
|
"agentdeck": "./dist/cli.js"
|
|
18
22
|
},
|
|
19
23
|
"dependencies": {
|
|
24
|
+
"@anthropic-ai/sdk": "^0.111.0",
|
|
20
25
|
"bonjour-service": "^1.3.0",
|
|
21
26
|
"commander": "^14.0.3",
|
|
22
27
|
"express": "^5.2.1",
|
|
23
28
|
"qrcode": "^1.5.4",
|
|
24
29
|
"strip-ansi": "^7.2.0",
|
|
25
30
|
"ws": "^8.20.0",
|
|
26
|
-
"@agentdeck/
|
|
31
|
+
"@agentdeck/hooks": "1.0.0",
|
|
32
|
+
"@agentdeck/shared": "1.0.0"
|
|
27
33
|
},
|
|
28
34
|
"optionalDependencies": {
|
|
29
35
|
"@picovoice/porcupine-node": "^4.0.2",
|
|
30
36
|
"@picovoice/pvrecorder-node": "^1.2.8",
|
|
31
37
|
"@resvg/resvg-js": "^2.6.2",
|
|
32
38
|
"better-sqlite3": "^12.9.0",
|
|
33
|
-
"node-hid": "^3.3.0",
|
|
34
39
|
"node-pty": "^1.1.0"
|
|
35
40
|
},
|
|
36
41
|
"compatibleClaudeCode": ">=2.1.50",
|
|
@@ -43,6 +48,7 @@
|
|
|
43
48
|
},
|
|
44
49
|
"scripts": {
|
|
45
50
|
"build": "tsc",
|
|
51
|
+
"build:fm-helper": "node scripts/build-fm-helper.mjs",
|
|
46
52
|
"dev": "tsc --watch",
|
|
47
53
|
"clean": "rm -rf dist",
|
|
48
54
|
"typecheck": "tsc --noEmit",
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { execFileSync } from 'node:child_process';
|
|
3
|
+
import { chmodSync, mkdirSync } from 'node:fs';
|
|
4
|
+
import { dirname, join } from 'node:path';
|
|
5
|
+
import { fileURLToPath } from 'node:url';
|
|
6
|
+
|
|
7
|
+
const root = dirname(dirname(fileURLToPath(import.meta.url)));
|
|
8
|
+
const source = join(root, 'fm-helper', 'AgentDeckFMHelper.swift');
|
|
9
|
+
const out = join(root, 'assets', 'fm-helper', 'agentdeck-fm-helper');
|
|
10
|
+
const arch = process.arch === 'arm64' ? 'arm64' : 'x86_64';
|
|
11
|
+
const target = `${arch}-apple-macos26.0`;
|
|
12
|
+
|
|
13
|
+
if (process.platform !== 'darwin') {
|
|
14
|
+
console.log('[fm-helper] skipped: darwin only');
|
|
15
|
+
process.exit(0);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
mkdirSync(dirname(out), { recursive: true });
|
|
19
|
+
const swiftc = execFileSync('/usr/bin/xcrun', ['--find', 'swiftc'], { encoding: 'utf8' }).trim();
|
|
20
|
+
// swiftc is run directly (not via `xcrun swiftc`), so SDKROOT isn't set and the
|
|
21
|
+
// stdlib can't be found ("unable to load standard library for target ..."). Pass
|
|
22
|
+
// the SDK path explicitly so the build is reproducible from the npm lifecycle.
|
|
23
|
+
const sdk = execFileSync('/usr/bin/xcrun', ['--sdk', 'macosx', '--show-sdk-path'], { encoding: 'utf8' }).trim();
|
|
24
|
+
execFileSync(swiftc, ['-parse-as-library', '-sdk', sdk, '-target', target, source, '-o', out], { stdio: 'inherit' });
|
|
25
|
+
chmodSync(out, 0o755);
|
|
26
|
+
console.log(`[fm-helper] built ${out}`);
|
package/LICENSE
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
MIT License
|
|
2
|
-
|
|
3
|
-
Copyright (c) 2025 SerendipityBound
|
|
4
|
-
|
|
5
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
-
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
-
in the Software without restriction, including without limitation the rights
|
|
8
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
-
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
-
furnished to do so, subject to the following conditions:
|
|
11
|
-
|
|
12
|
-
The above copyright notice and this permission notice shall be included in all
|
|
13
|
-
copies or substantial portions of the Software.
|
|
14
|
-
|
|
15
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
-
SOFTWARE.
|
package/dist/apme/tuner.d.ts
DELETED
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* APME Rubric Auto-Tuner — Phase 3.
|
|
3
|
-
*
|
|
4
|
-
* Closes the improvement loop between deterministic results, the LLM judge,
|
|
5
|
-
* and the user's vibe check. Algorithm (OPRO-style, ACE-inspired):
|
|
6
|
-
*
|
|
7
|
-
* 1. Collect recent runs + their evals + vibe feedback.
|
|
8
|
-
* 2. Detect disagreement samples:
|
|
9
|
-
* - tests_pass=1 but llm_judge.overall<0.5 (false negative)
|
|
10
|
-
* - tests_pass=0 but llm_judge.overall>0.8 (false positive)
|
|
11
|
-
* - user vibe rejected but judge.overall>0.7
|
|
12
|
-
* - user vibe approved but judge.overall<0.5
|
|
13
|
-
* 3. Compute baseline correlation between llm_judge.overall and vibe.
|
|
14
|
-
* 4. Ask the same judge backend to propose a new rubric prompt + weights,
|
|
15
|
-
* conditioned on the disagreement samples (this is OPRO's meta-optimizer
|
|
16
|
-
* step — the model learns from its own mistakes).
|
|
17
|
-
* 5. Shadow-score the samples under the proposed rubric; keep it only if
|
|
18
|
-
* vibe-correlation improves. Never auto-accept a worse rubric.
|
|
19
|
-
* 6. On accept, append to `rubrics` with parentVer lineage; on reject, log
|
|
20
|
-
* the attempt so a human can inspect later.
|
|
21
|
-
*
|
|
22
|
-
* The tuner never silently falls back to a different backend per the
|
|
23
|
-
* cost-sensitive defaults contract.
|
|
24
|
-
*/
|
|
25
|
-
import type { ApmeStore } from './store.js';
|
|
26
|
-
import type { ApmeConfig, ApmeJudgeConfig } from './settings.js';
|
|
27
|
-
export interface DisagreementSample {
|
|
28
|
-
runId: string;
|
|
29
|
-
taskPrompt: string;
|
|
30
|
-
judgeOverall: number | null;
|
|
31
|
-
testsPass: number | null;
|
|
32
|
-
vibe: 'approve' | 'reject' | 'neutral' | null;
|
|
33
|
-
note: string;
|
|
34
|
-
}
|
|
35
|
-
export interface TuneOutcome {
|
|
36
|
-
accepted: boolean;
|
|
37
|
-
reason: string;
|
|
38
|
-
baselineCorrelation: number | null;
|
|
39
|
-
proposedCorrelation: number | null;
|
|
40
|
-
newVersion: number | null;
|
|
41
|
-
}
|
|
42
|
-
export declare class ApmeTuner {
|
|
43
|
-
private readonly store;
|
|
44
|
-
private configOverride;
|
|
45
|
-
private judgeOverride;
|
|
46
|
-
constructor(store: ApmeStore);
|
|
47
|
-
_setConfig(cfg: ApmeConfig): void;
|
|
48
|
-
_setJudgeFn(fn: ((prompt: string, cfg: ApmeJudgeConfig) => Promise<string>) | null): void;
|
|
49
|
-
/** Trigger a tuning pass. Returns the new rubric version if accepted. */
|
|
50
|
-
tune(): Promise<TuneOutcome>;
|
|
51
|
-
/** Check if the current rubric should be re-tuned. */
|
|
52
|
-
shouldRetune(): Promise<boolean>;
|
|
53
|
-
}
|
|
54
|
-
export declare function collectDisagreements(store: ApmeStore, limit: number): DisagreementSample[];
|
|
55
|
-
export declare function vibeCorrelation(samples: DisagreementSample[]): number | null;
|
|
56
|
-
export declare function correlation(xs: number[], ys: number[]): number | null;
|
|
57
|
-
export interface RubricProposal {
|
|
58
|
-
prompt: string;
|
|
59
|
-
weights: Record<string, number>;
|
|
60
|
-
notes?: string;
|
|
61
|
-
}
|
|
62
|
-
export declare function parseProposal(text: string): RubricProposal | null;
|
|
63
|
-
export declare function extractOverall(text: string): number | null;
|
|
64
|
-
//# sourceMappingURL=tuner.d.ts.map
|
package/dist/apme/tuner.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tuner.d.ts","sourceRoot":"","sources":["../../src/apme/tuner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAMjE,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,IAAI,EAAE,SAAS,GAAG,QAAQ,GAAG,SAAS,GAAG,IAAI,CAAC;IAC9C,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAID,qBAAa,SAAS;IAIR,OAAO,CAAC,QAAQ,CAAC,KAAK;IAHlC,OAAO,CAAC,cAAc,CAA2B;IACjD,OAAO,CAAC,aAAa,CAA4E;gBAEpE,KAAK,EAAE,SAAS;IAE7C,UAAU,CAAC,GAAG,EAAE,UAAU,GAAG,IAAI;IACjC,WAAW,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,eAAe,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,GAAG,IAAI;IAIzF,yEAAyE;IACnE,IAAI,IAAI,OAAO,CAAC,WAAW,CAAC;IAiGlC,sDAAsD;IAChD,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC;CAQvC;AAID,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG,kBAAkB,EAAE,CAqC1F;AAID,wBAAgB,eAAe,CAAC,OAAO,EAAE,kBAAkB,EAAE,GAAG,MAAM,GAAG,IAAI,CAM5E;AAED,wBAAgB,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,IAAI,CAgBrE;AAgDD,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAoBjE;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAa1D"}
|
package/dist/apme/tuner.js
DELETED
|
@@ -1,297 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* APME Rubric Auto-Tuner — Phase 3.
|
|
3
|
-
*
|
|
4
|
-
* Closes the improvement loop between deterministic results, the LLM judge,
|
|
5
|
-
* and the user's vibe check. Algorithm (OPRO-style, ACE-inspired):
|
|
6
|
-
*
|
|
7
|
-
* 1. Collect recent runs + their evals + vibe feedback.
|
|
8
|
-
* 2. Detect disagreement samples:
|
|
9
|
-
* - tests_pass=1 but llm_judge.overall<0.5 (false negative)
|
|
10
|
-
* - tests_pass=0 but llm_judge.overall>0.8 (false positive)
|
|
11
|
-
* - user vibe rejected but judge.overall>0.7
|
|
12
|
-
* - user vibe approved but judge.overall<0.5
|
|
13
|
-
* 3. Compute baseline correlation between llm_judge.overall and vibe.
|
|
14
|
-
* 4. Ask the same judge backend to propose a new rubric prompt + weights,
|
|
15
|
-
* conditioned on the disagreement samples (this is OPRO's meta-optimizer
|
|
16
|
-
* step — the model learns from its own mistakes).
|
|
17
|
-
* 5. Shadow-score the samples under the proposed rubric; keep it only if
|
|
18
|
-
* vibe-correlation improves. Never auto-accept a worse rubric.
|
|
19
|
-
* 6. On accept, append to `rubrics` with parentVer lineage; on reject, log
|
|
20
|
-
* the attempt so a human can inspect later.
|
|
21
|
-
*
|
|
22
|
-
* The tuner never silently falls back to a different backend per the
|
|
23
|
-
* cost-sensitive defaults contract.
|
|
24
|
-
*/
|
|
25
|
-
import { debug } from '../logger.js';
|
|
26
|
-
import { loadApmeConfig } from './settings.js';
|
|
27
|
-
import { callJudge } from './runner.js';
|
|
28
|
-
// ─── Tuner ─────────────────────────────────────────────────────────────────────
|
|
29
|
-
export class ApmeTuner {
|
|
30
|
-
store;
|
|
31
|
-
configOverride = null;
|
|
32
|
-
judgeOverride = null;
|
|
33
|
-
constructor(store) {
|
|
34
|
-
this.store = store;
|
|
35
|
-
}
|
|
36
|
-
_setConfig(cfg) { this.configOverride = cfg; }
|
|
37
|
-
_setJudgeFn(fn) {
|
|
38
|
-
this.judgeOverride = fn;
|
|
39
|
-
}
|
|
40
|
-
/** Trigger a tuning pass. Returns the new rubric version if accepted. */
|
|
41
|
-
async tune() {
|
|
42
|
-
if (!this.store.enabled) {
|
|
43
|
-
return { accepted: false, reason: 'store disabled', baselineCorrelation: null, proposedCorrelation: null, newVersion: null };
|
|
44
|
-
}
|
|
45
|
-
const cfg = this.configOverride ?? loadApmeConfig();
|
|
46
|
-
if (!cfg.autoTune) {
|
|
47
|
-
return { accepted: false, reason: 'autoTune disabled', baselineCorrelation: null, proposedCorrelation: null, newVersion: null };
|
|
48
|
-
}
|
|
49
|
-
const samples = collectDisagreements(this.store, 30);
|
|
50
|
-
if (samples.length < 3) {
|
|
51
|
-
return { accepted: false, reason: `insufficient samples (${samples.length}/3)`, baselineCorrelation: null, proposedCorrelation: null, newVersion: null };
|
|
52
|
-
}
|
|
53
|
-
const rubric = this.store.getCurrentRubric('general');
|
|
54
|
-
if (!rubric) {
|
|
55
|
-
return { accepted: false, reason: 'no base rubric', baselineCorrelation: null, proposedCorrelation: null, newVersion: null };
|
|
56
|
-
}
|
|
57
|
-
const baseline = vibeCorrelation(samples);
|
|
58
|
-
debug('APME', `tune baseline correlation=${baseline ?? 'n/a'} samples=${samples.length}`);
|
|
59
|
-
// Ask the judge to propose a new rubric.
|
|
60
|
-
const metaPrompt = buildMetaPrompt(rubric.prompt, rubric.weights, samples);
|
|
61
|
-
let judgeText;
|
|
62
|
-
try {
|
|
63
|
-
judgeText = this.judgeOverride
|
|
64
|
-
? await this.judgeOverride(metaPrompt, cfg.judge)
|
|
65
|
-
: await callJudge(metaPrompt, cfg.judge);
|
|
66
|
-
}
|
|
67
|
-
catch (err) {
|
|
68
|
-
debug('APME', `tune judge call failed: ${String(err)}`);
|
|
69
|
-
return { accepted: false, reason: `judge call failed: ${String(err)}`, baselineCorrelation: baseline, proposedCorrelation: null, newVersion: null };
|
|
70
|
-
}
|
|
71
|
-
const proposed = parseProposal(judgeText);
|
|
72
|
-
if (!proposed) {
|
|
73
|
-
return { accepted: false, reason: 'proposal unparseable', baselineCorrelation: baseline, proposedCorrelation: null, newVersion: null };
|
|
74
|
-
}
|
|
75
|
-
// Shadow-score: re-run the judge on each disagreement sample using the
|
|
76
|
-
// proposed rubric. Correlate the new overall scores against user vibe.
|
|
77
|
-
const shadowScores = [];
|
|
78
|
-
for (const sample of samples) {
|
|
79
|
-
if (!sample.vibe || sample.vibe === 'neutral')
|
|
80
|
-
continue;
|
|
81
|
-
const scorePrompt = buildShadowPrompt(proposed.prompt, sample);
|
|
82
|
-
let shadowText;
|
|
83
|
-
try {
|
|
84
|
-
shadowText = this.judgeOverride
|
|
85
|
-
? await this.judgeOverride(scorePrompt, cfg.judge)
|
|
86
|
-
: await callJudge(scorePrompt, cfg.judge);
|
|
87
|
-
}
|
|
88
|
-
catch (err) {
|
|
89
|
-
debug('APME', `tune shadow call failed: ${String(err)}`);
|
|
90
|
-
continue;
|
|
91
|
-
}
|
|
92
|
-
const overall = extractOverall(shadowText);
|
|
93
|
-
if (overall !== null) {
|
|
94
|
-
shadowScores.push({ judgeOverall: overall, vibe: sample.vibe });
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
const proposedCorr = shadowScores.length >= 3 ? correlation(shadowScores.map((s) => s.judgeOverall), shadowScores.map((s) => vibeToNumber(s.vibe))) : null;
|
|
98
|
-
debug('APME', `tune proposed correlation=${proposedCorr ?? 'n/a'} shadow=${shadowScores.length}`);
|
|
99
|
-
const improves = (baseline === null || proposedCorr !== null) &&
|
|
100
|
-
(proposedCorr ?? -Infinity) > (baseline ?? -Infinity) + 0.05;
|
|
101
|
-
if (!improves) {
|
|
102
|
-
return {
|
|
103
|
-
accepted: false,
|
|
104
|
-
reason: `proposed correlation did not improve (baseline=${baseline ?? 'n/a'}, proposed=${proposedCorr ?? 'n/a'})`,
|
|
105
|
-
baselineCorrelation: baseline,
|
|
106
|
-
proposedCorrelation: proposedCorr,
|
|
107
|
-
newVersion: null,
|
|
108
|
-
};
|
|
109
|
-
}
|
|
110
|
-
const newVersion = this.store.appendRubric({
|
|
111
|
-
purpose: rubric.purpose,
|
|
112
|
-
prompt: proposed.prompt,
|
|
113
|
-
weights: JSON.stringify(proposed.weights),
|
|
114
|
-
createdAt: Date.now(),
|
|
115
|
-
parentVer: rubric.version,
|
|
116
|
-
notes: `auto-tune: baseline=${baseline ?? 'n/a'} → proposed=${proposedCorr ?? 'n/a'} over ${shadowScores.length} samples`,
|
|
117
|
-
});
|
|
118
|
-
debug('APME', `tune accepted v${newVersion} (parent=${rubric.version})`);
|
|
119
|
-
return {
|
|
120
|
-
accepted: true,
|
|
121
|
-
reason: `correlation improved ${baseline ?? 'n/a'} → ${proposedCorr ?? 'n/a'}`,
|
|
122
|
-
baselineCorrelation: baseline,
|
|
123
|
-
proposedCorrelation: proposedCorr,
|
|
124
|
-
newVersion,
|
|
125
|
-
};
|
|
126
|
-
}
|
|
127
|
-
/** Check if the current rubric should be re-tuned. */
|
|
128
|
-
async shouldRetune() {
|
|
129
|
-
if (!this.store.enabled)
|
|
130
|
-
return false;
|
|
131
|
-
const samples = collectDisagreements(this.store, 30);
|
|
132
|
-
if (samples.length < 10)
|
|
133
|
-
return false;
|
|
134
|
-
const corr = vibeCorrelation(samples);
|
|
135
|
-
// Low correlation with user vibe ⇒ rubric drifted.
|
|
136
|
-
return corr !== null && corr < 0.4;
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
// ─── Disagreement detection ───────────────────────────────────────────────────
|
|
140
|
-
export function collectDisagreements(store, limit) {
|
|
141
|
-
const runs = store.listRuns({ limit: Math.max(limit * 3, 60) });
|
|
142
|
-
const out = [];
|
|
143
|
-
for (const run of runs) {
|
|
144
|
-
const evals = store.listEvalsForRun(run.id);
|
|
145
|
-
const tests = evals.find((e) => e.layer === 'deterministic' && e.metric === 'tests_pass');
|
|
146
|
-
const judge = evals.find((e) => e.layer === 'llm_judge' && e.metric === 'overall');
|
|
147
|
-
const vibeRow = store.latestVibeForRun(run.id);
|
|
148
|
-
const vibeVerdict = vibeRow ? vibeRow.verdict : null;
|
|
149
|
-
const judgeOverall = judge?.score ?? null;
|
|
150
|
-
const testsPass = tests?.score ?? null;
|
|
151
|
-
// Disagreement heuristics:
|
|
152
|
-
let note = '';
|
|
153
|
-
if (tests && judge && tests.score === 1 && judge.score < 0.5)
|
|
154
|
-
note = 'tests pass but judge fails';
|
|
155
|
-
else if (tests && judge && tests.score === 0 && judge.score > 0.8)
|
|
156
|
-
note = 'tests fail but judge passes';
|
|
157
|
-
else if (vibeVerdict === 'reject' && judge && judge.score > 0.7)
|
|
158
|
-
note = 'user rejected but judge approved';
|
|
159
|
-
else if (vibeVerdict === 'approve' && judge && judge.score < 0.5)
|
|
160
|
-
note = 'user approved but judge rejected';
|
|
161
|
-
else if (vibeVerdict && vibeVerdict !== 'neutral' && judge) {
|
|
162
|
-
// Even without explicit disagreement, vibe-labeled runs are valuable.
|
|
163
|
-
note = 'vibe labeled';
|
|
164
|
-
}
|
|
165
|
-
else {
|
|
166
|
-
continue;
|
|
167
|
-
}
|
|
168
|
-
out.push({
|
|
169
|
-
runId: run.id,
|
|
170
|
-
taskPrompt: (run.taskPrompt ?? '').slice(0, 400),
|
|
171
|
-
judgeOverall,
|
|
172
|
-
testsPass,
|
|
173
|
-
vibe: vibeVerdict,
|
|
174
|
-
note,
|
|
175
|
-
});
|
|
176
|
-
if (out.length >= limit)
|
|
177
|
-
break;
|
|
178
|
-
}
|
|
179
|
-
return out;
|
|
180
|
-
}
|
|
181
|
-
// ─── Correlation math ─────────────────────────────────────────────────────────
|
|
182
|
-
export function vibeCorrelation(samples) {
|
|
183
|
-
const pairs = samples
|
|
184
|
-
.filter((s) => s.vibe && s.vibe !== 'neutral' && s.judgeOverall !== null)
|
|
185
|
-
.map((s) => [s.judgeOverall, vibeToNumber(s.vibe)]);
|
|
186
|
-
if (pairs.length < 3)
|
|
187
|
-
return null;
|
|
188
|
-
return correlation(pairs.map((p) => p[0]), pairs.map((p) => p[1]));
|
|
189
|
-
}
|
|
190
|
-
export function correlation(xs, ys) {
|
|
191
|
-
if (xs.length !== ys.length || xs.length < 2)
|
|
192
|
-
return null;
|
|
193
|
-
const n = xs.length;
|
|
194
|
-
const mx = xs.reduce((a, b) => a + b, 0) / n;
|
|
195
|
-
const my = ys.reduce((a, b) => a + b, 0) / n;
|
|
196
|
-
let num = 0, dx = 0, dy = 0;
|
|
197
|
-
for (let i = 0; i < n; i++) {
|
|
198
|
-
const a = xs[i] - mx;
|
|
199
|
-
const b = ys[i] - my;
|
|
200
|
-
num += a * b;
|
|
201
|
-
dx += a * a;
|
|
202
|
-
dy += b * b;
|
|
203
|
-
}
|
|
204
|
-
const denom = Math.sqrt(dx * dy);
|
|
205
|
-
if (denom === 0)
|
|
206
|
-
return null;
|
|
207
|
-
return num / denom;
|
|
208
|
-
}
|
|
209
|
-
function vibeToNumber(v) {
|
|
210
|
-
if (v === 'approve')
|
|
211
|
-
return 1;
|
|
212
|
-
if (v === 'reject')
|
|
213
|
-
return 0;
|
|
214
|
-
return 0.5;
|
|
215
|
-
}
|
|
216
|
-
// ─── Meta-prompts ─────────────────────────────────────────────────────────────
|
|
217
|
-
function buildMetaPrompt(currentPrompt, currentWeights, samples) {
|
|
218
|
-
const lines = [];
|
|
219
|
-
lines.push('You are a rubric meta-optimizer. The current judge rubric disagrees with ground truth on the following samples.');
|
|
220
|
-
lines.push('Propose a *revised* rubric prompt and axis weights that would resolve these disagreements while staying concise (<800 chars).');
|
|
221
|
-
lines.push('');
|
|
222
|
-
lines.push('--- CURRENT RUBRIC PROMPT ---');
|
|
223
|
-
lines.push(currentPrompt);
|
|
224
|
-
lines.push('');
|
|
225
|
-
lines.push(`--- CURRENT WEIGHTS ---`);
|
|
226
|
-
lines.push(currentWeights);
|
|
227
|
-
lines.push('');
|
|
228
|
-
lines.push('--- DISAGREEMENT SAMPLES ---');
|
|
229
|
-
for (const s of samples) {
|
|
230
|
-
lines.push(`- runId=${s.runId} tests_pass=${s.testsPass ?? 'n/a'} judge_overall=${s.judgeOverall ?? 'n/a'} vibe=${s.vibe ?? 'n/a'} :: ${s.note}`);
|
|
231
|
-
if (s.taskPrompt)
|
|
232
|
-
lines.push(` task: ${s.taskPrompt}`);
|
|
233
|
-
}
|
|
234
|
-
lines.push('');
|
|
235
|
-
lines.push('Respond with strict JSON only:');
|
|
236
|
-
lines.push('{"prompt":"...","weights":{"intent":N,"correctness":N,"style":N,"convention":N},"notes":"..."}');
|
|
237
|
-
return lines.join('\n');
|
|
238
|
-
}
|
|
239
|
-
function buildShadowPrompt(newRubricPrompt, sample) {
|
|
240
|
-
return [
|
|
241
|
-
newRubricPrompt,
|
|
242
|
-
'',
|
|
243
|
-
'--- SAMPLE ---',
|
|
244
|
-
`task: ${sample.taskPrompt || '(not captured)'}`,
|
|
245
|
-
`tests_pass: ${sample.testsPass ?? 'n/a'}`,
|
|
246
|
-
`prior_judge_overall: ${sample.judgeOverall ?? 'n/a'}`,
|
|
247
|
-
`user_vibe: ${sample.vibe ?? 'n/a'}`,
|
|
248
|
-
'',
|
|
249
|
-
'Respond with strict JSON only: {"overall":N,"reasoning":"..."}',
|
|
250
|
-
].join('\n');
|
|
251
|
-
}
|
|
252
|
-
export function parseProposal(text) {
|
|
253
|
-
const match = text.match(/\{[\s\S]*\}/);
|
|
254
|
-
if (!match)
|
|
255
|
-
return null;
|
|
256
|
-
try {
|
|
257
|
-
const obj = JSON.parse(match[0]);
|
|
258
|
-
if (typeof obj.prompt !== 'string' || obj.prompt.length < 20)
|
|
259
|
-
return null;
|
|
260
|
-
if (!obj.weights || typeof obj.weights !== 'object')
|
|
261
|
-
return null;
|
|
262
|
-
const weights = {};
|
|
263
|
-
for (const [k, v] of Object.entries(obj.weights)) {
|
|
264
|
-
if (typeof v === 'number' && isFinite(v) && v >= 0)
|
|
265
|
-
weights[k] = v;
|
|
266
|
-
}
|
|
267
|
-
if (Object.keys(weights).length === 0)
|
|
268
|
-
return null;
|
|
269
|
-
return {
|
|
270
|
-
prompt: obj.prompt,
|
|
271
|
-
weights,
|
|
272
|
-
notes: typeof obj.notes === 'string' ? obj.notes : undefined,
|
|
273
|
-
};
|
|
274
|
-
}
|
|
275
|
-
catch {
|
|
276
|
-
return null;
|
|
277
|
-
}
|
|
278
|
-
}
|
|
279
|
-
export function extractOverall(text) {
|
|
280
|
-
const match = text.match(/\{[\s\S]*\}/);
|
|
281
|
-
if (!match)
|
|
282
|
-
return null;
|
|
283
|
-
try {
|
|
284
|
-
const obj = JSON.parse(match[0]);
|
|
285
|
-
const v = obj.overall;
|
|
286
|
-
if (typeof v !== 'number' || !isFinite(v))
|
|
287
|
-
return null;
|
|
288
|
-
let n = v;
|
|
289
|
-
if (n > 1 && n <= 10)
|
|
290
|
-
n = n / 10;
|
|
291
|
-
return Math.max(0, Math.min(1, n));
|
|
292
|
-
}
|
|
293
|
-
catch {
|
|
294
|
-
return null;
|
|
295
|
-
}
|
|
296
|
-
}
|
|
297
|
-
//# sourceMappingURL=tuner.js.map
|
package/dist/apme/tuner.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tuner.js","sourceRoot":"","sources":["../../src/apme/tuner.ts"],"names":[],"mappings":"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"}
|