@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
package/dist/check-deps.js
CHANGED
|
@@ -13,6 +13,12 @@ const AGENT_DEPS = {
|
|
|
13
13
|
required: true,
|
|
14
14
|
installHint: 'npm install -g @openai/codex',
|
|
15
15
|
},
|
|
16
|
+
'opencode': {
|
|
17
|
+
name: 'opencode',
|
|
18
|
+
command: 'opencode --version',
|
|
19
|
+
required: true,
|
|
20
|
+
installHint: 'brew install sst/tap/opencode (or: npm i -g opencode-ai)',
|
|
21
|
+
},
|
|
16
22
|
};
|
|
17
23
|
/** Shared optional dependencies */
|
|
18
24
|
const SHARED_DEPS = [
|
|
@@ -39,9 +45,15 @@ export function checkDependencies(agentType) {
|
|
|
39
45
|
const warnings = [];
|
|
40
46
|
let ok = true;
|
|
41
47
|
let agentVersion;
|
|
42
|
-
//
|
|
48
|
+
// POSIX: invoke via login shell so profile-added PATHs (pnpm, nvm, etc.) are
|
|
49
|
+
// visible. Windows: PATH is system-managed (no shell profile), so a direct
|
|
50
|
+
// execSync is correct — the POSIX wrapper would try `/bin/zsh` which doesn't
|
|
51
|
+
// exist and every check would fail with "system cannot find the path".
|
|
52
|
+
const isWin = process.platform === 'win32';
|
|
43
53
|
const loginShell = process.env.SHELL || '/bin/zsh';
|
|
44
|
-
const shellExec = (cmd, opts) =>
|
|
54
|
+
const shellExec = (cmd, opts) => isWin
|
|
55
|
+
? execSync(cmd, opts)
|
|
56
|
+
: execSync(`${loginShell} -l -c '${cmd}'`, opts);
|
|
45
57
|
// Check agent-specific binary
|
|
46
58
|
const agentDep = agentType ? AGENT_DEPS[agentType] : AGENT_DEPS['claude-code'];
|
|
47
59
|
if (agentDep) {
|
|
@@ -54,13 +66,17 @@ export function checkDependencies(agentType) {
|
|
|
54
66
|
ok = false;
|
|
55
67
|
}
|
|
56
68
|
}
|
|
57
|
-
// Check shared optional deps
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
69
|
+
// Check shared optional deps. All current entries use `which` + brew install
|
|
70
|
+
// hints — they're macOS voice features. Skip on Windows so we don't emit
|
|
71
|
+
// bogus warnings.
|
|
72
|
+
if (!isWin) {
|
|
73
|
+
for (const dep of SHARED_DEPS) {
|
|
74
|
+
try {
|
|
75
|
+
shellExec(dep.command, { stdio: 'ignore' });
|
|
76
|
+
}
|
|
77
|
+
catch {
|
|
78
|
+
warnings.push(`${dep.name} not found — ${dep.installHint}`);
|
|
79
|
+
}
|
|
64
80
|
}
|
|
65
81
|
}
|
|
66
82
|
return { ok, warnings, agentVersion };
|
package/dist/check-deps.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check-deps.js","sourceRoot":"","sources":["../src/check-deps.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAUzC,yCAAyC;AACzC,MAAM,UAAU,GAAyC;IACvD,aAAa,EAAE;QACb,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,kBAAkB;QAC3B,QAAQ,EAAE,IAAI;QACd,WAAW,EAAE,0CAA0C;KACxD;IACD,WAAW,EAAE;QACX,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,iBAAiB;QAC1B,QAAQ,EAAE,IAAI;QACd,WAAW,EAAE,8BAA8B;KAC5C;CACF,CAAC;AAEF,mCAAmC;AACnC,MAAM,WAAW,GAAe;IAC9B;QACE,IAAI,EAAE,WAAW;QACjB,OAAO,EAAE,WAAW;QACpB,QAAQ,EAAE,KAAK;QACf,WAAW,EAAE,kBAAkB;KAChC;IACD;QACE,IAAI,EAAE,aAAa;QACnB,OAAO,EAAE,mBAAmB;QAC5B,QAAQ,EAAE,KAAK;QACf,WAAW,EAAE,yEAAyE;KACvF;IACD;QACE,IAAI,EAAE,gBAAgB;QACtB,OAAO,EAAE,sBAAsB;QAC/B,QAAQ,EAAE,KAAK;QACf,WAAW,EAAE,oDAAoD;KAClE;CACF,CAAC;AAEF,MAAM,UAAU,iBAAiB,CAAC,SAAqB;IACrD,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,IAAI,EAAE,GAAG,IAAI,CAAC;IACd,IAAI,YAAgC,CAAC;IAErC,
|
|
1
|
+
{"version":3,"file":"check-deps.js","sourceRoot":"","sources":["../src/check-deps.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAUzC,yCAAyC;AACzC,MAAM,UAAU,GAAyC;IACvD,aAAa,EAAE;QACb,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,kBAAkB;QAC3B,QAAQ,EAAE,IAAI;QACd,WAAW,EAAE,0CAA0C;KACxD;IACD,WAAW,EAAE;QACX,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,iBAAiB;QAC1B,QAAQ,EAAE,IAAI;QACd,WAAW,EAAE,8BAA8B;KAC5C;IACD,UAAU,EAAE;QACV,IAAI,EAAE,UAAU;QAChB,OAAO,EAAE,oBAAoB;QAC7B,QAAQ,EAAE,IAAI;QACd,WAAW,EAAE,2DAA2D;KACzE;CACF,CAAC;AAEF,mCAAmC;AACnC,MAAM,WAAW,GAAe;IAC9B;QACE,IAAI,EAAE,WAAW;QACjB,OAAO,EAAE,WAAW;QACpB,QAAQ,EAAE,KAAK;QACf,WAAW,EAAE,kBAAkB;KAChC;IACD;QACE,IAAI,EAAE,aAAa;QACnB,OAAO,EAAE,mBAAmB;QAC5B,QAAQ,EAAE,KAAK;QACf,WAAW,EAAE,yEAAyE;KACvF;IACD;QACE,IAAI,EAAE,gBAAgB;QACtB,OAAO,EAAE,sBAAsB;QAC/B,QAAQ,EAAE,KAAK;QACf,WAAW,EAAE,oDAAoD;KAClE;CACF,CAAC;AAEF,MAAM,UAAU,iBAAiB,CAAC,SAAqB;IACrD,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,IAAI,EAAE,GAAG,IAAI,CAAC;IACd,IAAI,YAAgC,CAAC;IAErC,6EAA6E;IAC7E,2EAA2E;IAC3E,6EAA6E;IAC7E,uEAAuE;IACvE,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC;IAC3C,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,UAAU,CAAC;IACnD,MAAM,SAAS,GAAG,CAAC,GAAW,EAAE,IAAqC,EAAE,EAAE,CACvE,KAAK;QACH,CAAC,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC;QACrB,CAAC,CAAC,QAAQ,CAAC,GAAG,UAAU,WAAW,GAAG,GAAG,EAAE,IAAI,CAAC,CAAC;IAErD,8BAA8B;IAC9B,MAAM,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;IAC/E,IAAI,QAAQ,EAAE,CAAC;QACb,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC;YACnG,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC;QAC7D,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,sBAAsB,QAAQ,CAAC,IAAI,wBAAwB,QAAQ,CAAC,WAAW,IAAI,CAAC,CAAC;YAC1G,EAAE,GAAG,KAAK,CAAC;QACb,CAAC;IACH,CAAC;IAED,6EAA6E;IAC7E,yEAAyE;IACzE,kBAAkB;IAClB,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;YAC9B,IAAI,CAAC;gBACH,SAAS,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;YAC9C,CAAC;YAAC,MAAM,CAAC;gBACP,QAAQ,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,IAAI,gBAAgB,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;YAC9D,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC;AACxC,CAAC"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Conservative predictor for "would Claude Code actually prompt the user for
|
|
3
|
+
* this tool call?" — the precision guard for the observed-session PreToolUse
|
|
4
|
+
* device-approval gate.
|
|
5
|
+
*
|
|
6
|
+
* HISTORY (why precision-first): the first PreToolUse gate held EVERY gated
|
|
7
|
+
* tool call, so tools Claude auto-approves (allowlist rules, acceptEdits,
|
|
8
|
+
* session "always allow") still popped Allow/Deny on devices — the reported
|
|
9
|
+
* false-attention bug that got the gate removed (DEVELOPMENT_LOG 2026-05).
|
|
10
|
+
* This module exists so the reinstated gate only ever holds calls we are
|
|
11
|
+
* CONFIDENT Claude will prompt for. Every uncertainty resolves to "don't
|
|
12
|
+
* hold": a missed hold just means the user answers in the terminal (the
|
|
13
|
+
* pre-gate status quo), while a false hold nags the user with a popup Claude
|
|
14
|
+
* never asked for.
|
|
15
|
+
*
|
|
16
|
+
* Rule semantics mirror Claude Code `permissions.allow/deny/ask` entries:
|
|
17
|
+
* "Bash" → every Bash call
|
|
18
|
+
* "Bash(git status)" → exact command
|
|
19
|
+
* "Bash(git status:*)" → command prefix
|
|
20
|
+
* "Read(...)"/"WebFetch(domain:x)"/"mcp__srv__tool" → tool + spec
|
|
21
|
+
* Matching is deliberately asymmetric:
|
|
22
|
+
* - allow/deny rules match LOOSELY (tool-name match with any spec counts)
|
|
23
|
+
* because a loose match only suppresses a hold (safe direction).
|
|
24
|
+
* - ask rules match STRICTLY (tool-only, or exact/prefix Bash) because an
|
|
25
|
+
* ask match *causes* a hold and must not fire on a spec we can't parse.
|
|
26
|
+
*/
|
|
27
|
+
export type RuleVerdict = 'allow' | 'deny' | 'ask' | 'none' | 'unknown';
|
|
28
|
+
interface MergedRules {
|
|
29
|
+
allow: string[];
|
|
30
|
+
deny: string[];
|
|
31
|
+
ask: string[];
|
|
32
|
+
}
|
|
33
|
+
export declare function isNeverPromptTool(tool: string): boolean;
|
|
34
|
+
export declare function isPromptProneTool(tool: string): boolean;
|
|
35
|
+
export declare function _setHomeOverrideForTests(path: string | null): void;
|
|
36
|
+
/**
|
|
37
|
+
* Load and merge permission rules from every settings file Claude Code reads
|
|
38
|
+
* for this cwd. Returns null ("unknown") when any EXISTING file fails to
|
|
39
|
+
* parse — we can no longer trust our picture of the allowlist, so the caller
|
|
40
|
+
* must not hold anything.
|
|
41
|
+
*/
|
|
42
|
+
export declare function loadMergedPermissionRules(cwd: string | undefined): MergedRules | null;
|
|
43
|
+
/** Test helper. */
|
|
44
|
+
export declare function _clearRulesCache(): void;
|
|
45
|
+
/**
|
|
46
|
+
* Predict Claude's permission-rule verdict for a tool call.
|
|
47
|
+
* 'deny' → a deny rule may match: Claude auto-denies (or prompts) — don't hold
|
|
48
|
+
* 'allow' → an allow rule may match: Claude may auto-approve — don't hold
|
|
49
|
+
* 'ask' → an ask rule definitely matches: Claude will prompt — hold-eligible
|
|
50
|
+
* 'none' → no rule matches: default behavior for the tool applies
|
|
51
|
+
* 'unknown' → settings unreadable: don't hold
|
|
52
|
+
*/
|
|
53
|
+
export declare function evaluatePermissionRules(tool: string, toolInput: Record<string, unknown> | undefined, cwd: string | undefined): RuleVerdict;
|
|
54
|
+
export {};
|
|
55
|
+
//# sourceMappingURL=claude-permission-rules.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-permission-rules.d.ts","sourceRoot":"","sources":["../src/claude-permission-rules.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAOH,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,SAAS,CAAC;AAExE,UAAU,WAAW;IACnB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,GAAG,EAAE,MAAM,EAAE,CAAC;CACf;AAkBD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEvD;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEvD;AAYD,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAGlE;AAiBD;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,WAAW,GAAG,IAAI,CA+BrF;AAED,mBAAmB;AACnB,wBAAgB,gBAAgB,IAAI,IAAI,CAEvC;AA6CD;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EAC9C,GAAG,EAAE,MAAM,GAAG,SAAS,GACtB,WAAW,CAkBb"}
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Conservative predictor for "would Claude Code actually prompt the user for
|
|
3
|
+
* this tool call?" — the precision guard for the observed-session PreToolUse
|
|
4
|
+
* device-approval gate.
|
|
5
|
+
*
|
|
6
|
+
* HISTORY (why precision-first): the first PreToolUse gate held EVERY gated
|
|
7
|
+
* tool call, so tools Claude auto-approves (allowlist rules, acceptEdits,
|
|
8
|
+
* session "always allow") still popped Allow/Deny on devices — the reported
|
|
9
|
+
* false-attention bug that got the gate removed (DEVELOPMENT_LOG 2026-05).
|
|
10
|
+
* This module exists so the reinstated gate only ever holds calls we are
|
|
11
|
+
* CONFIDENT Claude will prompt for. Every uncertainty resolves to "don't
|
|
12
|
+
* hold": a missed hold just means the user answers in the terminal (the
|
|
13
|
+
* pre-gate status quo), while a false hold nags the user with a popup Claude
|
|
14
|
+
* never asked for.
|
|
15
|
+
*
|
|
16
|
+
* Rule semantics mirror Claude Code `permissions.allow/deny/ask` entries:
|
|
17
|
+
* "Bash" → every Bash call
|
|
18
|
+
* "Bash(git status)" → exact command
|
|
19
|
+
* "Bash(git status:*)" → command prefix
|
|
20
|
+
* "Read(...)"/"WebFetch(domain:x)"/"mcp__srv__tool" → tool + spec
|
|
21
|
+
* Matching is deliberately asymmetric:
|
|
22
|
+
* - allow/deny rules match LOOSELY (tool-name match with any spec counts)
|
|
23
|
+
* because a loose match only suppresses a hold (safe direction).
|
|
24
|
+
* - ask rules match STRICTLY (tool-only, or exact/prefix Bash) because an
|
|
25
|
+
* ask match *causes* a hold and must not fire on a spec we can't parse.
|
|
26
|
+
*/
|
|
27
|
+
import { readFileSync, statSync } from 'fs';
|
|
28
|
+
import { join } from 'path';
|
|
29
|
+
import { homedir } from 'os';
|
|
30
|
+
import { debug } from './logger.js';
|
|
31
|
+
/** Tools that never trigger a permission prompt — holding them can only ever
|
|
32
|
+
* be a false positive. Kept intentionally tight (unknown tools are excluded
|
|
33
|
+
* by the prompt-prone check below, not this list). */
|
|
34
|
+
const NEVER_PROMPT_TOOLS = new Set([
|
|
35
|
+
'Read', 'Glob', 'Grep', 'LS',
|
|
36
|
+
'TodoWrite', 'TodoRead', 'NotebookRead',
|
|
37
|
+
'Task', 'TaskOutput', 'BashOutput',
|
|
38
|
+
]);
|
|
39
|
+
/** Tools that DO prompt in default/auto permission mode unless allowlisted.
|
|
40
|
+
* Anything outside this set (including every mcp__* tool, whose per-server
|
|
41
|
+
* trust state we cannot see) is never held. */
|
|
42
|
+
const PROMPT_PRONE_TOOLS = new Set([
|
|
43
|
+
'Bash', 'Write', 'Edit', 'MultiEdit', 'NotebookEdit', 'WebFetch', 'WebSearch',
|
|
44
|
+
]);
|
|
45
|
+
export function isNeverPromptTool(tool) {
|
|
46
|
+
return NEVER_PROMPT_TOOLS.has(tool);
|
|
47
|
+
}
|
|
48
|
+
export function isPromptProneTool(tool) {
|
|
49
|
+
return PROMPT_PRONE_TOOLS.has(tool);
|
|
50
|
+
}
|
|
51
|
+
const RULES_CACHE_TTL_MS = 10_000;
|
|
52
|
+
const rulesCache = new Map();
|
|
53
|
+
/** Test seam: isolates rule loading from the developer's real ~/.claude. */
|
|
54
|
+
let homeOverride = null;
|
|
55
|
+
export function _setHomeOverrideForTests(path) {
|
|
56
|
+
homeOverride = path;
|
|
57
|
+
rulesCache.clear();
|
|
58
|
+
}
|
|
59
|
+
function settingsCandidates(cwd) {
|
|
60
|
+
const home = homeOverride ?? homedir();
|
|
61
|
+
const files = [
|
|
62
|
+
// Enterprise managed policy (rare; parse failure here must also disable holds)
|
|
63
|
+
'/Library/Application Support/ClaudeCode/managed-settings.json',
|
|
64
|
+
join(home, '.claude', 'settings.json'),
|
|
65
|
+
join(home, '.claude', 'settings.local.json'),
|
|
66
|
+
];
|
|
67
|
+
if (cwd) {
|
|
68
|
+
files.push(join(cwd, '.claude', 'settings.json'));
|
|
69
|
+
files.push(join(cwd, '.claude', 'settings.local.json'));
|
|
70
|
+
}
|
|
71
|
+
return files;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Load and merge permission rules from every settings file Claude Code reads
|
|
75
|
+
* for this cwd. Returns null ("unknown") when any EXISTING file fails to
|
|
76
|
+
* parse — we can no longer trust our picture of the allowlist, so the caller
|
|
77
|
+
* must not hold anything.
|
|
78
|
+
*/
|
|
79
|
+
export function loadMergedPermissionRules(cwd) {
|
|
80
|
+
const key = cwd ?? '';
|
|
81
|
+
const cached = rulesCache.get(key);
|
|
82
|
+
if (cached && Date.now() - cached.loadedAt < RULES_CACHE_TTL_MS)
|
|
83
|
+
return cached.rules;
|
|
84
|
+
const merged = { allow: [], deny: [], ask: [] };
|
|
85
|
+
let unknown = false;
|
|
86
|
+
for (const file of settingsCandidates(cwd)) {
|
|
87
|
+
let exists = false;
|
|
88
|
+
try {
|
|
89
|
+
exists = statSync(file).isFile();
|
|
90
|
+
}
|
|
91
|
+
catch {
|
|
92
|
+
exists = false;
|
|
93
|
+
}
|
|
94
|
+
if (!exists)
|
|
95
|
+
continue;
|
|
96
|
+
try {
|
|
97
|
+
const parsed = JSON.parse(readFileSync(file, 'utf-8'));
|
|
98
|
+
const perms = parsed?.permissions;
|
|
99
|
+
if (perms && typeof perms === 'object') {
|
|
100
|
+
for (const bucket of ['allow', 'deny', 'ask']) {
|
|
101
|
+
const arr = perms[bucket];
|
|
102
|
+
if (Array.isArray(arr)) {
|
|
103
|
+
for (const r of arr)
|
|
104
|
+
if (typeof r === 'string')
|
|
105
|
+
merged[bucket].push(r);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
catch {
|
|
111
|
+
debug('permission', `settings parse failed: ${file} — disabling holds for cwd=${cwd ?? '?'}`);
|
|
112
|
+
unknown = true;
|
|
113
|
+
break;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
const rules = unknown ? null : merged;
|
|
117
|
+
rulesCache.set(key, { rules, loadedAt: Date.now() });
|
|
118
|
+
return rules;
|
|
119
|
+
}
|
|
120
|
+
/** Test helper. */
|
|
121
|
+
export function _clearRulesCache() {
|
|
122
|
+
rulesCache.clear();
|
|
123
|
+
}
|
|
124
|
+
function parseRule(rule) {
|
|
125
|
+
const m = /^([A-Za-z][A-Za-z0-9_]*)(?:\((.*)\))?$/.exec(rule.trim());
|
|
126
|
+
if (!m)
|
|
127
|
+
return null;
|
|
128
|
+
return { tool: m[1], spec: m[2] };
|
|
129
|
+
}
|
|
130
|
+
function bashSpecMatches(spec, command) {
|
|
131
|
+
if (spec === '*')
|
|
132
|
+
return true;
|
|
133
|
+
if (spec.endsWith(':*'))
|
|
134
|
+
return command.startsWith(spec.slice(0, -2));
|
|
135
|
+
return command === spec;
|
|
136
|
+
}
|
|
137
|
+
/** Loose match (allow/deny direction): a tool-name match with ANY spec counts,
|
|
138
|
+
* except Bash specs which we can compare precisely. */
|
|
139
|
+
function matchesLoose(rule, tool, command) {
|
|
140
|
+
if (rule.tool !== tool)
|
|
141
|
+
return false;
|
|
142
|
+
if (rule.spec === undefined)
|
|
143
|
+
return true;
|
|
144
|
+
if (tool === 'Bash') {
|
|
145
|
+
if (command === undefined)
|
|
146
|
+
return true; // malformed input — assume covered
|
|
147
|
+
return bashSpecMatches(rule.spec, command)
|
|
148
|
+
// Compound commands: Claude prompts unless every segment is allowed; we
|
|
149
|
+
// only need "might be auto-approved", so a prefix match on the first
|
|
150
|
+
// segment is enough to suppress the hold.
|
|
151
|
+
|| bashSpecMatches(rule.spec, command.split(/&&|\|\||;|\|/)[0]?.trim() ?? command);
|
|
152
|
+
}
|
|
153
|
+
// Non-Bash specs (paths, domains, globs): we don't replicate the matcher —
|
|
154
|
+
// any spec on the right tool MIGHT match, so treat it as covered.
|
|
155
|
+
return true;
|
|
156
|
+
}
|
|
157
|
+
/** Strict match (ask direction): only patterns we can evaluate exactly. */
|
|
158
|
+
function matchesStrict(rule, tool, command) {
|
|
159
|
+
if (rule.tool !== tool)
|
|
160
|
+
return false;
|
|
161
|
+
if (rule.spec === undefined)
|
|
162
|
+
return true;
|
|
163
|
+
if (tool === 'Bash' && command !== undefined)
|
|
164
|
+
return bashSpecMatches(rule.spec, command);
|
|
165
|
+
return false;
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Predict Claude's permission-rule verdict for a tool call.
|
|
169
|
+
* 'deny' → a deny rule may match: Claude auto-denies (or prompts) — don't hold
|
|
170
|
+
* 'allow' → an allow rule may match: Claude may auto-approve — don't hold
|
|
171
|
+
* 'ask' → an ask rule definitely matches: Claude will prompt — hold-eligible
|
|
172
|
+
* 'none' → no rule matches: default behavior for the tool applies
|
|
173
|
+
* 'unknown' → settings unreadable: don't hold
|
|
174
|
+
*/
|
|
175
|
+
export function evaluatePermissionRules(tool, toolInput, cwd) {
|
|
176
|
+
const rules = loadMergedPermissionRules(cwd);
|
|
177
|
+
if (rules === null)
|
|
178
|
+
return 'unknown';
|
|
179
|
+
const command = typeof toolInput?.command === 'string' ? toolInput.command : undefined;
|
|
180
|
+
for (const r of rules.deny) {
|
|
181
|
+
const parsed = parseRule(r);
|
|
182
|
+
if (parsed && matchesLoose(parsed, tool, command))
|
|
183
|
+
return 'deny';
|
|
184
|
+
}
|
|
185
|
+
for (const r of rules.allow) {
|
|
186
|
+
const parsed = parseRule(r);
|
|
187
|
+
if (parsed && matchesLoose(parsed, tool, command))
|
|
188
|
+
return 'allow';
|
|
189
|
+
}
|
|
190
|
+
for (const r of rules.ask) {
|
|
191
|
+
const parsed = parseRule(r);
|
|
192
|
+
if (parsed && matchesStrict(parsed, tool, command))
|
|
193
|
+
return 'ask';
|
|
194
|
+
}
|
|
195
|
+
return 'none';
|
|
196
|
+
}
|
|
197
|
+
//# sourceMappingURL=claude-permission-rules.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-permission-rules.js","sourceRoot":"","sources":["../src/claude-permission-rules.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.d.ts
CHANGED
|
@@ -1,3 +1,17 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
|
|
2
|
+
import { Command } from 'commander';
|
|
3
|
+
export declare const ESP32_OTA_BY_TARGET: Record<string, {
|
|
4
|
+
env: string;
|
|
5
|
+
board: string;
|
|
6
|
+
}>;
|
|
7
|
+
/**
|
|
8
|
+
* Resolve an esp32-ota `target` (alias, canonical board string, or an IP) to the
|
|
9
|
+
* canonical `device_info.board` string the daemon matches against. Unknown
|
|
10
|
+
* targets (e.g. a raw IP or one-off board) pass through unchanged so IP-based
|
|
11
|
+
* and future targeting still works. Exported for testing.
|
|
12
|
+
*/
|
|
13
|
+
export declare function resolveEsp32OtaDaemonTarget(target: string): string;
|
|
14
|
+
declare const program: Command;
|
|
15
|
+
export declare function runCli(argv?: string[]): Promise<void>;
|
|
16
|
+
export { program };
|
|
3
17
|
//# sourceMappingURL=cli.d.ts.map
|
package/dist/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAyLpC,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAM,CAAC;AAOtF;;;;;GAKG;AACH,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAElE;AAoBD,QAAA,MAAM,OAAO,SAAgB,CAAC;AAg6D9B,wBAAsB,MAAM,CAAC,IAAI,GAAE,MAAM,EAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAMzE;AAED,OAAO,EAAE,OAAO,EAAE,CAAC"}
|