@pentoshi/clai 4.18.0 → 5.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/CHANGELOG.md +73 -0
- package/CONTRIBUTING.md +3 -2
- package/PROVIDERS.md +3 -3
- package/REA.md +96 -0
- package/README.md +110 -267
- package/SECURITY.md +5 -1
- package/dist/agent/compaction/compaction-prompt.d.ts +49 -0
- package/dist/agent/compaction/compaction-prompt.js +163 -0
- package/dist/agent/compaction/compaction-prompt.js.map +1 -0
- package/dist/agent/compaction/memory-sections.d.ts +27 -0
- package/dist/agent/compaction/memory-sections.js +144 -0
- package/dist/agent/compaction/memory-sections.js.map +1 -0
- package/dist/agent/compaction-summary.d.ts +2 -33
- package/dist/agent/compaction-summary.js +3 -113
- package/dist/agent/compaction-summary.js.map +1 -1
- package/dist/agent/context/compact-with-summary.d.ts +2 -4
- package/dist/agent/context/compact-with-summary.js +42 -68
- package/dist/agent/context/compact-with-summary.js.map +1 -1
- package/dist/agent/context/compaction-recent-history.d.ts +4 -3
- package/dist/agent/context/compaction-recent-history.js +30 -52
- package/dist/agent/context/compaction-recent-history.js.map +1 -1
- package/dist/agent/context/compaction-user-instructions.d.ts +5 -6
- package/dist/agent/context/compaction-user-instructions.js +156 -231
- package/dist/agent/context/compaction-user-instructions.js.map +1 -1
- package/dist/agent/context-manager.js +17 -8
- package/dist/agent/context-manager.js.map +1 -1
- package/dist/agent/durable-envelope.js +1 -1
- package/dist/agent/durable-envelope.js.map +1 -1
- package/dist/agent/events.d.ts +6 -0
- package/dist/agent/parser/dsml.d.ts +30 -0
- package/dist/agent/parser/dsml.js +233 -0
- package/dist/agent/parser/dsml.js.map +1 -0
- package/dist/agent/parser/vendor-protocols.d.ts +2 -5
- package/dist/agent/parser/vendor-protocols.js +4 -93
- package/dist/agent/parser/vendor-protocols.js.map +1 -1
- package/dist/agent/plan-implement-compact.js +1 -2
- package/dist/agent/plan-implement-compact.js.map +1 -1
- package/dist/agent/reliability-policy.d.ts +1 -0
- package/dist/agent/reliability-policy.js +14 -15
- package/dist/agent/reliability-policy.js.map +1 -1
- package/dist/agent/runner.js +12 -1
- package/dist/agent/runner.js.map +1 -1
- package/dist/agent/tool-call-parser.js +6 -8
- package/dist/agent/tool-call-parser.js.map +1 -1
- package/dist/agent/turn/event-emitter.js +2 -0
- package/dist/agent/turn/event-emitter.js.map +1 -1
- package/dist/agent/turn/loop/answer-path.js +3 -1
- package/dist/agent/turn/loop/answer-path.js.map +1 -1
- package/dist/agent/turn/loop/canonicalize-turn-call.js +5 -3
- package/dist/agent/turn/loop/canonicalize-turn-call.js.map +1 -1
- package/dist/agent/turn/loop/output-budget.d.ts +0 -1
- package/dist/agent/turn/loop/output-budget.js +5 -13
- package/dist/agent/turn/loop/output-budget.js.map +1 -1
- package/dist/agent/turn/loop/request-assembly.js +39 -33
- package/dist/agent/turn/loop/request-assembly.js.map +1 -1
- package/dist/agent/turn/loop/round-request.js +31 -18
- package/dist/agent/turn/loop/round-request.js.map +1 -1
- package/dist/agent/turn/loop/run-rounds.js +0 -2
- package/dist/agent/turn/loop/run-rounds.js.map +1 -1
- package/dist/agent/turn/loop/tool-call-recovery.d.ts +2 -0
- package/dist/agent/turn/loop/tool-call-recovery.js +26 -11
- package/dist/agent/turn/loop/tool-call-recovery.js.map +1 -1
- package/dist/agent/turn/mcp-agent-tools.d.ts +3 -0
- package/dist/agent/turn/mcp-agent-tools.js +11 -2
- package/dist/agent/turn/mcp-agent-tools.js.map +1 -1
- package/dist/agent/turn/prompt-sections.js +1 -0
- package/dist/agent/turn/prompt-sections.js.map +1 -1
- package/dist/agent/turn/scaffold-preflight.d.ts +6 -1
- package/dist/agent/turn/scaffold-preflight.js +10 -2
- package/dist/agent/turn/scaffold-preflight.js.map +1 -1
- package/dist/agent/turn/setup/mcp-agent-ports.d.ts +5 -1
- package/dist/agent/turn/setup/mcp-agent-ports.js +2 -0
- package/dist/agent/turn/setup/mcp-agent-ports.js.map +1 -1
- package/dist/agent/turn/system-sections.d.ts +2 -0
- package/dist/agent/turn/system-sections.js +12 -8
- package/dist/agent/turn/system-sections.js.map +1 -1
- package/dist/agent/turn/tool-execution/deps.d.ts +2 -0
- package/dist/agent/turn/tool-execution/result-framing.js +8 -6
- package/dist/agent/turn/tool-execution/result-framing.js.map +1 -1
- package/dist/agent/turn/tool-execution/single-tool.js +4 -1
- package/dist/agent/turn/tool-execution/single-tool.js.map +1 -1
- package/dist/agent/turn/turn-counters.d.ts +1 -0
- package/dist/agent/turn/turn-counters.js +2 -0
- package/dist/agent/turn/turn-counters.js.map +1 -1
- package/dist/agent/turn/workspace-setup.d.ts +7 -2
- package/dist/agent/turn/workspace-setup.js +45 -30
- package/dist/agent/turn/workspace-setup.js.map +1 -1
- package/dist/agent/workspace-orient.d.ts +4 -0
- package/dist/agent/workspace-orient.js +83 -37
- package/dist/agent/workspace-orient.js.map +1 -1
- package/dist/app/adapters/agent-event-adapter.d.ts +1 -0
- package/dist/app/adapters/agent-event-adapter.js +17 -2
- package/dist/app/adapters/agent-event-adapter.js.map +1 -1
- package/dist/app/adapters/current-agent-adapter.js +1 -0
- package/dist/app/adapters/current-agent-adapter.js.map +1 -1
- package/dist/app/adapters/current-store-adapter.js +10 -3
- package/dist/app/adapters/current-store-adapter.js.map +1 -1
- package/dist/app/commands/catalog.js +13 -4
- package/dist/app/commands/catalog.js.map +1 -1
- package/dist/app/commands/registry.js +1 -1
- package/dist/app/commands/registry.js.map +1 -1
- package/dist/app/controllers/session-changes.d.ts +5 -0
- package/dist/app/controllers/session-changes.js +50 -20
- package/dist/app/controllers/session-changes.js.map +1 -1
- package/dist/app/controllers/session-compact-helper.js +2 -5
- package/dist/app/controllers/session-compact-helper.js.map +1 -1
- package/dist/app/controllers/session-controller.d.ts +8 -0
- package/dist/app/controllers/session-controller.js +97 -8
- package/dist/app/controllers/session-controller.js.map +1 -1
- package/dist/app/controllers/session-id.d.ts +1 -0
- package/dist/app/controllers/session-id.js +4 -0
- package/dist/app/controllers/session-id.js.map +1 -0
- package/dist/app/controllers/session-late-work.d.ts +27 -0
- package/dist/app/controllers/session-late-work.js +113 -0
- package/dist/app/controllers/session-late-work.js.map +1 -0
- package/dist/app/controllers/session-persistence.d.ts +5 -3
- package/dist/app/controllers/session-persistence.js +8 -5
- package/dist/app/controllers/session-persistence.js.map +1 -1
- package/dist/app/controllers/session-prompt-queue.d.ts +13 -1
- package/dist/app/controllers/session-prompt-queue.js +96 -24
- package/dist/app/controllers/session-prompt-queue.js.map +1 -1
- package/dist/app/controllers/turn-controller.d.ts +1 -0
- package/dist/app/controllers/turn-controller.js +14 -1
- package/dist/app/controllers/turn-controller.js.map +1 -1
- package/dist/app/events/app-event.d.ts +4 -0
- package/dist/app/events/app-event.js.map +1 -1
- package/dist/app/ports/agent-port.d.ts +1 -0
- package/dist/app/ports/persistence-port.d.ts +13 -1
- package/dist/app/ports/transcript-item.d.ts +2 -0
- package/dist/classic/app/app-wiring.d.ts +9 -4
- package/dist/classic/app/app-wiring.js +13 -5
- package/dist/classic/app/app-wiring.js.map +1 -1
- package/dist/classic/app/paint-pacing.js +2 -2
- package/dist/classic/app/paint-pacing.js.map +1 -1
- package/dist/classic/app/use-feed.js +16 -11
- package/dist/classic/app/use-feed.js.map +1 -1
- package/dist/classic/app/wiring-disclosure.js +1 -1
- package/dist/classic/app/wiring-disclosure.js.map +1 -1
- package/dist/classic/app/wiring-feed-scroll.d.ts +5 -0
- package/dist/classic/app/wiring-feed-scroll.js +39 -0
- package/dist/classic/app/wiring-feed-scroll.js.map +1 -0
- package/dist/classic/app/wiring-interactions.d.ts +3 -5
- package/dist/classic/app/wiring-interactions.js +18 -32
- package/dist/classic/app/wiring-interactions.js.map +1 -1
- package/dist/classic/app/wiring-lifecycle.d.ts +1 -0
- package/dist/classic/app/wiring-lifecycle.js +20 -2
- package/dist/classic/app/wiring-lifecycle.js.map +1 -1
- package/dist/classic/app/wiring-selection.js +46 -37
- package/dist/classic/app/wiring-selection.js.map +1 -1
- package/dist/classic/app/wiring-types.d.ts +9 -3
- package/dist/classic/blocks/intro-lines.js +1 -0
- package/dist/classic/blocks/intro-lines.js.map +1 -1
- package/dist/classic/blocks/thinking-lines.d.ts +6 -0
- package/dist/classic/blocks/thinking-lines.js +21 -7
- package/dist/classic/blocks/thinking-lines.js.map +1 -1
- package/dist/classic/blocks/tool-lines.js +1 -1
- package/dist/classic/blocks/tool-lines.js.map +1 -1
- package/dist/classic/blocks/turn-summary-lines.d.ts +1 -1
- package/dist/classic/blocks/turn-summary-lines.js +5 -3
- package/dist/classic/blocks/turn-summary-lines.js.map +1 -1
- package/dist/classic/bootstrap/renderer-handle.js +11 -3
- package/dist/classic/bootstrap/renderer-handle.js.map +1 -1
- package/dist/classic/bootstrap/start-classic.js +8 -18
- package/dist/classic/bootstrap/start-classic.js.map +1 -1
- package/dist/classic/chrome/composer-mentions.js +2 -1
- package/dist/classic/chrome/composer-mentions.js.map +1 -1
- package/dist/classic/chrome/directory-row.js +5 -5
- package/dist/classic/chrome/directory-row.js.map +1 -1
- package/dist/classic/chrome/status-rows.d.ts +2 -1
- package/dist/classic/chrome/status-rows.js +18 -8
- package/dist/classic/chrome/status-rows.js.map +1 -1
- package/dist/classic/feed/background-layout.d.ts +26 -0
- package/dist/classic/feed/background-layout.js +77 -0
- package/dist/classic/feed/background-layout.js.map +1 -0
- package/dist/classic/feed/estimated-height.d.ts +2 -0
- package/dist/classic/feed/estimated-height.js +24 -0
- package/dist/classic/feed/estimated-height.js.map +1 -0
- package/dist/classic/feed/feed-blocks.d.ts +4 -1
- package/dist/classic/feed/feed-blocks.js +32 -10
- package/dist/classic/feed/feed-blocks.js.map +1 -1
- package/dist/classic/feed/transcript-selection.d.ts +2 -1
- package/dist/classic/feed/transcript-selection.js +15 -10
- package/dist/classic/feed/transcript-selection.js.map +1 -1
- package/dist/classic/feed/transcript-window.d.ts +1 -0
- package/dist/classic/feed/transcript-window.js +41 -15
- package/dist/classic/feed/transcript-window.js.map +1 -1
- package/dist/classic/panels/confirm-panel.js +1 -0
- package/dist/classic/panels/confirm-panel.js.map +1 -1
- package/dist/classic/panels/jobs-panel.js +1 -1
- package/dist/classic/panels/jobs-panel.js.map +1 -1
- package/dist/classic/panels/pager-panel.d.ts +11 -8
- package/dist/classic/panels/pager-panel.js +42 -28
- package/dist/classic/panels/pager-panel.js.map +1 -1
- package/dist/classic/panels/pager-region-paint.d.ts +3 -0
- package/dist/classic/panels/pager-region-paint.js +43 -0
- package/dist/classic/panels/pager-region-paint.js.map +1 -0
- package/dist/classic/panels/pager-search-paint.d.ts +3 -0
- package/dist/classic/panels/pager-search-paint.js +59 -0
- package/dist/classic/panels/pager-search-paint.js.map +1 -0
- package/dist/classic/panels/pager-source-controller.js +2 -0
- package/dist/classic/panels/pager-source-controller.js.map +1 -1
- package/dist/classic/panels/panel-controller.js +5 -6
- package/dist/classic/panels/panel-controller.js.map +1 -1
- package/dist/classic/panels/panel-host.js +2 -2
- package/dist/classic/panels/panel-host.js.map +1 -1
- package/dist/classic/panels/panel-initial-states.d.ts +1 -0
- package/dist/classic/panels/panel-initial-states.js +1 -0
- package/dist/classic/panels/panel-initial-states.js.map +1 -1
- package/dist/classic/panels/panel-types.d.ts +1 -0
- package/dist/classic/panels/panel-wheel.js +2 -2
- package/dist/classic/panels/panel-wheel.js.map +1 -1
- package/dist/classic/panels/text-editor-panel.d.ts +2 -1
- package/dist/classic/panels/text-editor-panel.js +21 -12
- package/dist/classic/panels/text-editor-panel.js.map +1 -1
- package/dist/classic/render/ansi-text.js +49 -33
- package/dist/classic/render/ansi-text.js.map +1 -1
- package/dist/classic/render/ink-theme.js +1 -1
- package/dist/classic/render/ink-theme.js.map +1 -1
- package/dist/classic/render/measure.js +2 -3
- package/dist/classic/render/measure.js.map +1 -1
- package/dist/classic/render/shell-width.js +1 -1
- package/dist/classic/render/shell-width.js.map +1 -1
- package/dist/classic/render/widest-line.d.ts +1 -0
- package/dist/classic/render/widest-line.js +5 -0
- package/dist/classic/render/widest-line.js.map +1 -0
- package/dist/commands/current-version.d.ts +1 -0
- package/dist/commands/current-version.js +42 -0
- package/dist/commands/current-version.js.map +1 -0
- package/dist/commands/doctor.js +2 -1
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/update.d.ts +2 -1
- package/dist/commands/update.js +4 -41
- package/dist/commands/update.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +26 -16
- package/dist/index.js.map +1 -1
- package/dist/instructions/scaffold.js +2 -1
- package/dist/instructions/scaffold.js.map +1 -1
- package/dist/llm/agentrouter.js +6 -11
- package/dist/llm/agentrouter.js.map +1 -1
- package/dist/llm/anthropic.js +6 -8
- package/dist/llm/anthropic.js.map +1 -1
- package/dist/llm/bynara.js +6 -10
- package/dist/llm/bynara.js.map +1 -1
- package/dist/llm/capabilities.js +13 -6
- package/dist/llm/capabilities.js.map +1 -1
- package/dist/llm/capability/vision-patterns.js +1 -1
- package/dist/llm/capability/vision-patterns.js.map +1 -1
- package/dist/llm/cline.js +3 -2
- package/dist/llm/cline.js.map +1 -1
- package/dist/llm/codex-models.d.ts +1 -1
- package/dist/llm/codex-models.js +11 -6
- package/dist/llm/codex-models.js.map +1 -1
- package/dist/llm/codex.js +2 -1
- package/dist/llm/codex.js.map +1 -1
- package/dist/llm/constellation.js +5 -0
- package/dist/llm/constellation.js.map +1 -1
- package/dist/llm/context-windows.js +17 -13
- package/dist/llm/context-windows.js.map +1 -1
- package/dist/llm/copilot.js +19 -21
- package/dist/llm/copilot.js.map +1 -1
- package/dist/llm/custom-providers.d.ts +2 -1
- package/dist/llm/custom-providers.js +16 -10
- package/dist/llm/custom-providers.js.map +1 -1
- package/dist/llm/deepseek.js +6 -11
- package/dist/llm/deepseek.js.map +1 -1
- package/dist/llm/explabs.js +8 -9
- package/dist/llm/explabs.js.map +1 -1
- package/dist/llm/fireworks.js +9 -11
- package/dist/llm/fireworks.js.map +1 -1
- package/dist/llm/free-default-model.js +5 -3
- package/dist/llm/free-default-model.js.map +1 -1
- package/dist/llm/free-model-limits.js +2 -1
- package/dist/llm/free-model-limits.js.map +1 -1
- package/dist/llm/free.js +20 -23
- package/dist/llm/free.js.map +1 -1
- package/dist/llm/freebuff-agent-prompt.d.ts +1 -0
- package/dist/llm/freebuff-agent-prompt.js +46 -0
- package/dist/llm/freebuff-agent-prompt.js.map +1 -0
- package/dist/llm/freebuff-auth.js +15 -3
- package/dist/llm/freebuff-auth.js.map +1 -1
- package/dist/llm/freebuff-device-key.d.ts +39 -0
- package/dist/llm/freebuff-device-key.js +330 -0
- package/dist/llm/freebuff-device-key.js.map +1 -0
- package/dist/llm/freebuff-env-profile.d.ts +41 -0
- package/dist/llm/freebuff-env-profile.js +205 -0
- package/dist/llm/freebuff-env-profile.js.map +1 -0
- package/dist/llm/freebuff-fingerprint.d.ts +21 -0
- package/dist/llm/freebuff-fingerprint.js +137 -0
- package/dist/llm/freebuff-fingerprint.js.map +1 -0
- package/dist/llm/freebuff-models.d.ts +26 -5
- package/dist/llm/freebuff-models.js +146 -80
- package/dist/llm/freebuff-models.js.map +1 -1
- package/dist/llm/freebuff-run.d.ts +2 -0
- package/dist/llm/freebuff-run.js +77 -24
- package/dist/llm/freebuff-run.js.map +1 -1
- package/dist/llm/freebuff-session-api.d.ts +3 -1
- package/dist/llm/freebuff-session-api.js +26 -18
- package/dist/llm/freebuff-session-api.js.map +1 -1
- package/dist/llm/freebuff-session.d.ts +7 -1
- package/dist/llm/freebuff-session.js +81 -31
- package/dist/llm/freebuff-session.js.map +1 -1
- package/dist/llm/freebuff-wire.d.ts +8 -0
- package/dist/llm/freebuff-wire.js +42 -20
- package/dist/llm/freebuff-wire.js.map +1 -1
- package/dist/llm/freebuff.js +81 -10
- package/dist/llm/freebuff.js.map +1 -1
- package/dist/llm/generation-metrics.d.ts +11 -0
- package/dist/llm/generation-metrics.js +54 -0
- package/dist/llm/generation-metrics.js.map +1 -0
- package/dist/llm/generation-submission.d.ts +2 -0
- package/dist/llm/generation-submission.js +13 -0
- package/dist/llm/generation-submission.js.map +1 -0
- package/dist/llm/glm.js +6 -11
- package/dist/llm/glm.js.map +1 -1
- package/dist/llm/hetzner.js +9 -11
- package/dist/llm/hetzner.js.map +1 -1
- package/dist/llm/kimi.js +6 -11
- package/dist/llm/kimi.js.map +1 -1
- package/dist/llm/kiro.js +11 -10
- package/dist/llm/kiro.js.map +1 -1
- package/dist/llm/lightning.js +6 -10
- package/dist/llm/lightning.js.map +1 -1
- package/dist/llm/main-effort-discovery.d.ts +16 -0
- package/dist/llm/main-effort-discovery.js +71 -0
- package/dist/llm/main-effort-discovery.js.map +1 -0
- package/dist/llm/merge-gateway.js +9 -10
- package/dist/llm/merge-gateway.js.map +1 -1
- package/dist/llm/meta.js +6 -10
- package/dist/llm/meta.js.map +1 -1
- package/dist/llm/mimo.js +6 -11
- package/dist/llm/mimo.js.map +1 -1
- package/dist/llm/minimax.js +6 -11
- package/dist/llm/minimax.js.map +1 -1
- package/dist/llm/mistral.js +10 -5
- package/dist/llm/mistral.js.map +1 -1
- package/dist/llm/modal.js +6 -11
- package/dist/llm/modal.js.map +1 -1
- package/dist/llm/model-discovery.d.ts +4 -1
- package/dist/llm/model-discovery.js +5 -2
- package/dist/llm/model-discovery.js.map +1 -1
- package/dist/llm/model-limit-store.d.ts +2 -0
- package/dist/llm/model-limit-store.js +44 -12
- package/dist/llm/model-limit-store.js.map +1 -1
- package/dist/llm/model-list-cache.d.ts +15 -0
- package/dist/llm/model-list-cache.js +55 -0
- package/dist/llm/model-list-cache.js.map +1 -0
- package/dist/llm/nvidia.js +9 -10
- package/dist/llm/nvidia.js.map +1 -1
- package/dist/llm/ollama.js +4 -0
- package/dist/llm/ollama.js.map +1 -1
- package/dist/llm/omnirush-session-upload.d.ts +1 -0
- package/dist/llm/omnirush-session-upload.js +14 -1
- package/dist/llm/omnirush-session-upload.js.map +1 -1
- package/dist/llm/omnirush.js +10 -14
- package/dist/llm/omnirush.js.map +1 -1
- package/dist/llm/openrouter.js +6 -11
- package/dist/llm/openrouter.js.map +1 -1
- package/dist/llm/operation-usage.js +22 -5
- package/dist/llm/operation-usage.js.map +1 -1
- package/dist/llm/orcarouter.js +9 -13
- package/dist/llm/orcarouter.js.map +1 -1
- package/dist/llm/provider-info-text.js +2 -1
- package/dist/llm/provider-info-text.js.map +1 -1
- package/dist/llm/provider-model-layers.js +4 -0
- package/dist/llm/provider-model-layers.js.map +1 -1
- package/dist/llm/provider-profile-layers.js +2 -1
- package/dist/llm/provider-profile-layers.js.map +1 -1
- package/dist/llm/provider-profiles.d.ts +1 -0
- package/dist/llm/provider-profiles.js +32 -2
- package/dist/llm/provider-profiles.js.map +1 -1
- package/dist/llm/provider.js +2 -1
- package/dist/llm/provider.js.map +1 -1
- package/dist/llm/qoder/qoder.js +6 -10
- package/dist/llm/qoder/qoder.js.map +1 -1
- package/dist/llm/qwen-cloud.js +6 -9
- package/dist/llm/qwen-cloud.js.map +1 -1
- package/dist/llm/request-plan.js +17 -9
- package/dist/llm/request-plan.js.map +1 -1
- package/dist/llm/responses-request.js +8 -1
- package/dist/llm/responses-request.js.map +1 -1
- package/dist/llm/river-models.d.ts +1 -0
- package/dist/llm/river-models.js +6 -1
- package/dist/llm/river-models.js.map +1 -1
- package/dist/llm/routing/attempt-complete.js +6 -1
- package/dist/llm/routing/attempt-complete.js.map +1 -1
- package/dist/llm/routing/attempt-request.d.ts +3 -1
- package/dist/llm/routing/attempt-request.js +39 -5
- package/dist/llm/routing/attempt-request.js.map +1 -1
- package/dist/llm/routing/attempt-stream.js +8 -1
- package/dist/llm/routing/attempt-stream.js.map +1 -1
- package/dist/llm/routing/error-classification.d.ts +1 -0
- package/dist/llm/routing/error-classification.js +9 -1
- package/dist/llm/routing/error-classification.js.map +1 -1
- package/dist/llm/routing/request-option-fallback.d.ts +6 -0
- package/dist/llm/routing/request-option-fallback.js +63 -3
- package/dist/llm/routing/request-option-fallback.js.map +1 -1
- package/dist/llm/token-usage.js +7 -2
- package/dist/llm/token-usage.js.map +1 -1
- package/dist/llm/tokenharbor.js +10 -13
- package/dist/llm/tokenharbor.js.map +1 -1
- package/dist/llm/tokenrouter.js +10 -14
- package/dist/llm/tokenrouter.js.map +1 -1
- package/dist/llm/vercel.js +12 -12
- package/dist/llm/vercel.js.map +1 -1
- package/dist/llm/wire/chat-body.js +3 -1
- package/dist/llm/wire/chat-body.js.map +1 -1
- package/dist/llm/wire/effort-preflight.d.ts +4 -1
- package/dist/llm/wire/effort-preflight.js +49 -6
- package/dist/llm/wire/effort-preflight.js.map +1 -1
- package/dist/llm/wire/openai-complete.d.ts +1 -0
- package/dist/llm/wire/openai-complete.js +5 -1
- package/dist/llm/wire/openai-complete.js.map +1 -1
- package/dist/llm/wire/openai-stream.d.ts +1 -0
- package/dist/llm/wire/openai-stream.js +1 -0
- package/dist/llm/wire/openai-stream.js.map +1 -1
- package/dist/llm/wire/responses-first.js +3 -0
- package/dist/llm/wire/responses-first.js.map +1 -1
- package/dist/llm/zen-catalog.d.ts +3 -1
- package/dist/llm/zen-catalog.js +9 -3
- package/dist/llm/zen-catalog.js.map +1 -1
- package/dist/mcp/argument-hint.d.ts +9 -0
- package/dist/mcp/argument-hint.js +17 -0
- package/dist/mcp/argument-hint.js.map +1 -0
- package/dist/mcp/catalog.js +5 -5
- package/dist/mcp/catalog.js.map +1 -1
- package/dist/mcp/manager.d.ts +2 -0
- package/dist/mcp/manager.js +21 -1
- package/dist/mcp/manager.js.map +1 -1
- package/dist/mcp/runtime.d.ts +5 -1
- package/dist/mcp/runtime.js +33 -2
- package/dist/mcp/runtime.js.map +1 -1
- package/dist/noninteractive/stream-renderer.js +2 -0
- package/dist/noninteractive/stream-renderer.js.map +1 -1
- package/dist/os/ownership-repair.d.ts +5 -0
- package/dist/os/ownership-repair.js +62 -0
- package/dist/os/ownership-repair.js.map +1 -0
- package/dist/os/permissions.d.ts +7 -0
- package/dist/os/permissions.js +27 -22
- package/dist/os/permissions.js.map +1 -1
- package/dist/os/runtime-error.d.ts +2 -0
- package/dist/os/runtime-error.js +39 -0
- package/dist/os/runtime-error.js.map +1 -0
- package/dist/os/settle-within.d.ts +1 -0
- package/dist/os/settle-within.js +12 -0
- package/dist/os/settle-within.js.map +1 -0
- package/dist/os/user-environment.d.ts +1 -0
- package/dist/os/user-environment.js +3 -0
- package/dist/os/user-environment.js.map +1 -0
- package/dist/os/user-identity.d.ts +11 -0
- package/dist/os/user-identity.js +163 -0
- package/dist/os/user-identity.js.map +1 -0
- package/dist/prompts/embedded.js +1 -1
- package/dist/prompts/embedded.js.map +1 -1
- package/dist/prompts/index.js +21 -18
- package/dist/prompts/index.js.map +1 -1
- package/dist/prompts/system.agent.md +10 -9
- package/dist/rea/availability.d.ts +22 -0
- package/dist/rea/availability.js +82 -0
- package/dist/rea/availability.js.map +1 -0
- package/dist/rea/connection.d.ts +8 -0
- package/dist/rea/connection.js +12 -0
- package/dist/rea/connection.js.map +1 -0
- package/dist/rea/distribution.d.ts +13 -0
- package/dist/rea/distribution.js +140 -0
- package/dist/rea/distribution.js.map +1 -0
- package/dist/rea/download.d.ts +22 -0
- package/dist/rea/download.js +198 -0
- package/dist/rea/download.js.map +1 -0
- package/dist/rea/engine-report.d.ts +4 -0
- package/dist/rea/engine-report.js +77 -0
- package/dist/rea/engine-report.js.map +1 -0
- package/dist/rea/engine-status.d.ts +24 -0
- package/dist/rea/engine-status.js +103 -0
- package/dist/rea/engine-status.js.map +1 -0
- package/dist/rea/engines.d.ts +43 -0
- package/dist/rea/engines.js +160 -0
- package/dist/rea/engines.js.map +1 -0
- package/dist/rea/ghidra.d.ts +83 -0
- package/dist/rea/ghidra.js +316 -0
- package/dist/rea/ghidra.js.map +1 -0
- package/dist/rea/guide.d.ts +14 -0
- package/dist/rea/guide.js +178 -0
- package/dist/rea/guide.js.map +1 -0
- package/dist/rea/hints.d.ts +3 -0
- package/dist/rea/hints.js +99 -0
- package/dist/rea/hints.js.map +1 -0
- package/dist/rea/install.d.ts +10 -0
- package/dist/rea/install.js +173 -0
- package/dist/rea/install.js.map +1 -0
- package/dist/rea/jdk.d.ts +50 -0
- package/dist/rea/jdk.js +171 -0
- package/dist/rea/jdk.js.map +1 -0
- package/dist/rea/node.d.ts +22 -0
- package/dist/rea/node.js +150 -0
- package/dist/rea/node.js.map +1 -0
- package/dist/rea/runtime.d.ts +11 -0
- package/dist/rea/runtime.js +186 -0
- package/dist/rea/runtime.js.map +1 -0
- package/dist/rea/tool-index.d.ts +7 -0
- package/dist/rea/tool-index.js +105 -0
- package/dist/rea/tool-index.js.map +1 -0
- package/dist/rea/types.d.ts +36 -0
- package/dist/rea/types.js +2 -0
- package/dist/rea/types.js.map +1 -0
- package/dist/rea/workflow.d.ts +14 -0
- package/dist/rea/workflow.js +60 -0
- package/dist/rea/workflow.js.map +1 -0
- package/dist/rea/zip.d.ts +19 -0
- package/dist/rea/zip.js +257 -0
- package/dist/rea/zip.js.map +1 -0
- package/dist/safety/tool-classification.js +12 -0
- package/dist/safety/tool-classification.js.map +1 -1
- package/dist/security/known-secrets.d.ts +5 -0
- package/dist/security/known-secrets.js +50 -0
- package/dist/security/known-secrets.js.map +1 -0
- package/dist/session-runtime/client.d.ts +1 -1
- package/dist/session-runtime/client.js +6 -3
- package/dist/session-runtime/client.js.map +1 -1
- package/dist/session-runtime/host.js +2 -0
- package/dist/session-runtime/host.js.map +1 -1
- package/dist/session-runtime/paths.js +14 -6
- package/dist/session-runtime/paths.js.map +1 -1
- package/dist/session-runtime/start-runtime.js +5 -8
- package/dist/session-runtime/start-runtime.js.map +1 -1
- package/dist/session-runtime/store.js +4 -1
- package/dist/session-runtime/store.js.map +1 -1
- package/dist/store/config/endpoints.js +3 -1
- package/dist/store/config/endpoints.js.map +1 -1
- package/dist/store/credentials/crypto.d.ts +7 -0
- package/dist/store/credentials/crypto.js +118 -0
- package/dist/store/credentials/crypto.js.map +1 -0
- package/dist/store/credentials.d.ts +21 -0
- package/dist/store/credentials.js +150 -0
- package/dist/store/credentials.js.map +1 -0
- package/dist/store/history/freshness.d.ts +2 -0
- package/dist/store/history/freshness.js +3 -2
- package/dist/store/history/freshness.js.map +1 -1
- package/dist/store/history/jsonl-backend.d.ts +0 -1
- package/dist/store/history/jsonl-backend.js +3 -122
- package/dist/store/history/jsonl-backend.js.map +1 -1
- package/dist/store/history/jsonl-lock.d.ts +1 -0
- package/dist/store/history/jsonl-lock.js +94 -71
- package/dist/store/history/jsonl-lock.js.map +1 -1
- package/dist/store/history/legacy-migration.d.ts +6 -0
- package/dist/store/history/legacy-migration.js +127 -0
- package/dist/store/history/legacy-migration.js.map +1 -0
- package/dist/store/history/lifecycle.js +11 -2
- package/dist/store/history/lifecycle.js.map +1 -1
- package/dist/store/history/recovery.d.ts +2 -0
- package/dist/store/history/recovery.js +6 -1
- package/dist/store/history/recovery.js.map +1 -1
- package/dist/store/history/session-frames.d.ts +74 -0
- package/dist/store/history/session-frames.js +234 -0
- package/dist/store/history/session-frames.js.map +1 -0
- package/dist/store/history/session-index.d.ts +13 -0
- package/dist/store/history/session-index.js +135 -0
- package/dist/store/history/session-index.js.map +1 -0
- package/dist/store/history/session-log.d.ts +44 -0
- package/dist/store/history/session-log.js +386 -0
- package/dist/store/history/session-log.js.map +1 -0
- package/dist/store/history/session-paths.d.ts +11 -0
- package/dist/store/history/session-paths.js +35 -0
- package/dist/store/history/session-paths.js.map +1 -0
- package/dist/store/history/session-queries.js +34 -19
- package/dist/store/history/session-queries.js.map +1 -1
- package/dist/store/history/session-store.d.ts +11 -0
- package/dist/store/history/session-store.js +202 -0
- package/dist/store/history/session-store.js.map +1 -0
- package/dist/store/history/sqlite-backend.js +2 -0
- package/dist/store/history/sqlite-backend.js.map +1 -1
- package/dist/store/history/transcript-merge.d.ts +2 -0
- package/dist/store/history/transcript-merge.js +46 -0
- package/dist/store/history/transcript-merge.js.map +1 -0
- package/dist/store/history-index.d.ts +2 -2
- package/dist/store/history-index.js +3 -18
- package/dist/store/history-index.js.map +1 -1
- package/dist/store/history.d.ts +4 -1
- package/dist/store/history.js +113 -61
- package/dist/store/history.js.map +1 -1
- package/dist/store/keys/secret-store.js +5 -2
- package/dist/store/keys/secret-store.js.map +1 -1
- package/dist/store/legacy-location.d.ts +1 -0
- package/dist/store/legacy-location.js +37 -0
- package/dist/store/legacy-location.js.map +1 -0
- package/dist/store/ownership.d.ts +3 -0
- package/dist/store/ownership.js +23 -0
- package/dist/store/ownership.js.map +1 -0
- package/dist/store/paths.js +3 -2
- package/dist/store/paths.js.map +1 -1
- package/dist/store/redaction-cache.d.ts +0 -5
- package/dist/store/redaction-cache.js +6 -5
- package/dist/store/redaction-cache.js.map +1 -1
- package/dist/store/scope.js +7 -2
- package/dist/store/scope.js.map +1 -1
- package/dist/store/session-prompts.d.ts +1 -0
- package/dist/store/session-prompts.js +34 -13
- package/dist/store/session-prompts.js.map +1 -1
- package/dist/store/session-queue.d.ts +4 -0
- package/dist/store/session-queue.js +62 -0
- package/dist/store/session-queue.js.map +1 -0
- package/dist/store/session-workspace-activity.d.ts +4 -0
- package/dist/store/session-workspace-activity.js +69 -0
- package/dist/store/session-workspace-activity.js.map +1 -0
- package/dist/store/session-workspace-cleanup.d.ts +4 -0
- package/dist/store/session-workspace-cleanup.js +246 -0
- package/dist/store/session-workspace-cleanup.js.map +1 -0
- package/dist/store/session-workspace.js +9 -0
- package/dist/store/session-workspace.js.map +1 -1
- package/dist/tools/credentials.d.ts +2 -0
- package/dist/tools/credentials.js +27 -0
- package/dist/tools/credentials.js.map +1 -0
- package/dist/tools/definitions/aggregate.js +10 -0
- package/dist/tools/definitions/aggregate.js.map +1 -1
- package/dist/tools/definitions/credentials.d.ts +1 -0
- package/dist/tools/definitions/credentials.js +15 -0
- package/dist/tools/definitions/credentials.js.map +1 -0
- package/dist/tools/definitions/files.js +4 -4
- package/dist/tools/definitions/files.js.map +1 -1
- package/dist/tools/definitions/fs-read.js +3 -2
- package/dist/tools/definitions/fs-read.js.map +1 -1
- package/dist/tools/definitions/shell.js +2 -2
- package/dist/tools/definitions/shell.js.map +1 -1
- package/dist/tools/definitions/terminal.js +2 -1
- package/dist/tools/definitions/terminal.js.map +1 -1
- package/dist/tools/definitions.js +2 -1
- package/dist/tools/definitions.js.map +1 -1
- package/dist/tools/elevated-shell.js +11 -14
- package/dist/tools/elevated-shell.js.map +1 -1
- package/dist/tools/fs/mutations.js +1 -1
- package/dist/tools/fs/mutations.js.map +1 -1
- package/dist/tools/handlers/files-2.js +1 -1
- package/dist/tools/handlers/files-2.js.map +1 -1
- package/dist/tools/http/agents.d.ts +4 -5
- package/dist/tools/http/agents.js +4 -12
- package/dist/tools/http/agents.js.map +1 -1
- package/dist/tools/http/fetch.js +3 -10
- package/dist/tools/http/fetch.js.map +1 -1
- package/dist/tools/interactive-session-tools.js +20 -4
- package/dist/tools/interactive-session-tools.js.map +1 -1
- package/dist/tools/registry.d.ts +1 -0
- package/dist/tools/registry.js +5 -0
- package/dist/tools/registry.js.map +1 -1
- package/dist/tools/shell/artifact.d.ts +7 -0
- package/dist/tools/shell/artifact.js +85 -0
- package/dist/tools/shell/artifact.js.map +1 -0
- package/dist/tools/shell/capture.d.ts +1 -5
- package/dist/tools/shell/capture.js +1 -18
- package/dist/tools/shell/capture.js.map +1 -1
- package/dist/tools/shell/exec-attempt.js +9 -27
- package/dist/tools/shell/exec-attempt.js.map +1 -1
- package/dist/tools/shell/spawn-argv.js +7 -21
- package/dist/tools/shell/spawn-argv.js.map +1 -1
- package/dist/tools/sudo-session.d.ts +2 -1
- package/dist/tools/sudo-session.js +26 -9
- package/dist/tools/sudo-session.js.map +1 -1
- package/dist/tui-v2/app/App.js +11 -15
- package/dist/tui-v2/app/App.js.map +1 -1
- package/dist/tui-v2/app/layout-widths.js +6 -5
- package/dist/tui-v2/app/layout-widths.js.map +1 -1
- package/dist/tui-v2/bootstrap/patch-opentui-selection.d.ts +6 -0
- package/dist/tui-v2/bootstrap/patch-opentui-selection.js +27 -0
- package/dist/tui-v2/bootstrap/patch-opentui-selection.js.map +1 -0
- package/dist/tui-v2/bootstrap/renderer-handle.d.ts +2 -0
- package/dist/tui-v2/bootstrap/renderer-handle.js +21 -10
- package/dist/tui-v2/bootstrap/renderer-handle.js.map +1 -1
- package/dist/tui-v2/bootstrap/runtime-view.js +2 -0
- package/dist/tui-v2/bootstrap/runtime-view.js.map +1 -1
- package/dist/tui-v2/bootstrap/start-tui-v2.js +19 -29
- package/dist/tui-v2/bootstrap/start-tui-v2.js.map +1 -1
- package/dist/tui-v2/components/jobs/jobs-panel.js +1 -9
- package/dist/tui-v2/components/jobs/jobs-panel.js.map +1 -1
- package/dist/tui-v2/components/modal/confirm-modal.js +1 -0
- package/dist/tui-v2/components/modal/confirm-modal.js.map +1 -1
- package/dist/tui-v2/components/modal/text-editor-modal.js +4 -0
- package/dist/tui-v2/components/modal/text-editor-modal.js.map +1 -1
- package/dist/tui-v2/components/overlay/overlay-host.js +1 -2
- package/dist/tui-v2/components/overlay/overlay-host.js.map +1 -1
- package/dist/tui-v2/components/pager/pager-line.d.ts +1 -0
- package/dist/tui-v2/components/pager/pager-line.js +46 -27
- package/dist/tui-v2/components/pager/pager-line.js.map +1 -1
- package/dist/tui-v2/components/pager/pager-rows.d.ts +3 -0
- package/dist/tui-v2/components/pager/pager-rows.js +18 -1
- package/dist/tui-v2/components/pager/pager-rows.js.map +1 -1
- package/dist/tui-v2/components/pager/pager.d.ts +2 -0
- package/dist/tui-v2/components/pager/pager.js +12 -8
- package/dist/tui-v2/components/pager/pager.js.map +1 -1
- package/dist/tui-v2/components/plan/plan-view.js +28 -6
- package/dist/tui-v2/components/plan/plan-view.js.map +1 -1
- package/dist/tui-v2/components/status/context-limit-chip.js +2 -2
- package/dist/tui-v2/components/status/status-line.js +13 -12
- package/dist/tui-v2/components/status/status-line.js.map +1 -1
- package/dist/tui-v2/components/toast/toast-anim.d.ts +6 -0
- package/dist/tui-v2/components/toast/toast-anim.js +17 -0
- package/dist/tui-v2/components/toast/toast-anim.js.map +1 -1
- package/dist/tui-v2/components/toast/toast-host.js +15 -5
- package/dist/tui-v2/components/toast/toast-host.js.map +1 -1
- package/dist/tui-v2/components/transcript/compacted-row.js +3 -1
- package/dist/tui-v2/components/transcript/compacted-row.js.map +1 -1
- package/dist/tui-v2/components/transcript/intro-card.js +5 -8
- package/dist/tui-v2/components/transcript/intro-card.js.map +1 -1
- package/dist/tui-v2/components/transcript/selection-snap.d.ts +43 -0
- package/dist/tui-v2/components/transcript/selection-snap.js +68 -0
- package/dist/tui-v2/components/transcript/selection-snap.js.map +1 -0
- package/dist/tui-v2/components/transcript/thinking-block.d.ts +2 -0
- package/dist/tui-v2/components/transcript/thinking-block.js +36 -19
- package/dist/tui-v2/components/transcript/thinking-block.js.map +1 -1
- package/dist/tui-v2/components/transcript/thinking-presentation.d.ts +0 -2
- package/dist/tui-v2/components/transcript/thinking-presentation.js +0 -52
- package/dist/tui-v2/components/transcript/thinking-presentation.js.map +1 -1
- package/dist/tui-v2/components/transcript/tool-card.js +5 -2
- package/dist/tui-v2/components/transcript/tool-card.js.map +1 -1
- package/dist/tui-v2/components/transcript/transcript-anchor.d.ts +20 -0
- package/dist/tui-v2/components/transcript/transcript-anchor.js +43 -0
- package/dist/tui-v2/components/transcript/transcript-anchor.js.map +1 -0
- package/dist/tui-v2/components/transcript/transcript-row.js +20 -6
- package/dist/tui-v2/components/transcript/transcript-row.js.map +1 -1
- package/dist/tui-v2/components/transcript/transcript-scroll-port.d.ts +2 -0
- package/dist/tui-v2/components/transcript/transcript-scroll-port.js +35 -0
- package/dist/tui-v2/components/transcript/transcript-scroll-port.js.map +1 -1
- package/dist/tui-v2/components/transcript/transcript-view.js +184 -147
- package/dist/tui-v2/components/transcript/transcript-view.js.map +1 -1
- package/dist/tui-v2/components/transcript/user-message.js +31 -21
- package/dist/tui-v2/components/transcript/user-message.js.map +1 -1
- package/dist/tui-v2/composer/composer-editor.js +2 -4
- package/dist/tui-v2/composer/composer-editor.js.map +1 -1
- package/dist/tui-v2/composer/composer-highlight.js +2 -1
- package/dist/tui-v2/composer/composer-highlight.js.map +1 -1
- package/dist/tui-v2/composer/composer-wheel.d.ts +1 -1
- package/dist/tui-v2/composer/composer-wheel.js +4 -4
- package/dist/tui-v2/composer/composer-wheel.js.map +1 -1
- package/dist/tui-v2/rendering/ansi-to-styled.js +16 -20
- package/dist/tui-v2/rendering/ansi-to-styled.js.map +1 -1
- package/dist/tui-v2/rendering/pager-markdown.d.ts +3 -2
- package/dist/tui-v2/rendering/pager-markdown.js +15 -11
- package/dist/tui-v2/rendering/pager-markdown.js.map +1 -1
- package/dist/types.d.ts +5 -7
- package/dist/types.js.map +1 -1
- package/dist/ui/mentions/expand.js +4 -0
- package/dist/ui/mentions/expand.js.map +1 -1
- package/dist/ui-core/bootstrap/composition-root.js +23 -0
- package/dist/ui-core/bootstrap/composition-root.js.map +1 -1
- package/dist/ui-core/bootstrap/fatal-diagnostics.d.ts +1 -0
- package/dist/ui-core/bootstrap/fatal-diagnostics.js +9 -0
- package/dist/ui-core/bootstrap/fatal-diagnostics.js.map +1 -0
- package/dist/ui-core/bootstrap/lifecycle.d.ts +5 -0
- package/dist/ui-core/bootstrap/lifecycle.js +33 -4
- package/dist/ui-core/bootstrap/lifecycle.js.map +1 -1
- package/dist/ui-core/bootstrap/resume-option.d.ts +11 -0
- package/dist/ui-core/bootstrap/resume-option.js +9 -0
- package/dist/ui-core/bootstrap/resume-option.js.map +1 -0
- package/dist/ui-core/bootstrap/session-merge.d.ts +4 -0
- package/dist/ui-core/bootstrap/session-merge.js +19 -0
- package/dist/ui-core/bootstrap/session-merge.js.map +1 -0
- package/dist/ui-core/bootstrap/session-resume.d.ts +2 -11
- package/dist/ui-core/bootstrap/session-resume.js +2 -8
- package/dist/ui-core/bootstrap/session-resume.js.map +1 -1
- package/dist/ui-core/bootstrap/shutdown-services.d.ts +3 -0
- package/dist/ui-core/bootstrap/shutdown-services.js +24 -0
- package/dist/ui-core/bootstrap/shutdown-services.js.map +1 -0
- package/dist/ui-core/commands/change-commands.js +53 -15
- package/dist/ui-core/commands/change-commands.js.map +1 -1
- package/dist/ui-core/commands/command-handlers.js +4 -0
- package/dist/ui-core/commands/command-handlers.js.map +1 -1
- package/dist/ui-core/commands/credential-commands.d.ts +7 -0
- package/dist/ui-core/commands/credential-commands.js +114 -0
- package/dist/ui-core/commands/credential-commands.js.map +1 -0
- package/dist/ui-core/commands/picker-commands.d.ts +6 -2
- package/dist/ui-core/commands/picker-commands.js +30 -17
- package/dist/ui-core/commands/picker-commands.js.map +1 -1
- package/dist/ui-core/commands/pickers/search-reasoning.js +14 -4
- package/dist/ui-core/commands/pickers/search-reasoning.js.map +1 -1
- package/dist/ui-core/commands/rea-commands.d.ts +3 -0
- package/dist/ui-core/commands/rea-commands.js +176 -0
- package/dist/ui-core/commands/rea-commands.js.map +1 -0
- package/dist/ui-core/commands/rea-engines-commands.d.ts +37 -0
- package/dist/ui-core/commands/rea-engines-commands.js +433 -0
- package/dist/ui-core/commands/rea-engines-commands.js.map +1 -0
- package/dist/ui-core/composer/completion.js +3 -0
- package/dist/ui-core/composer/completion.js.map +1 -1
- package/dist/ui-core/controllers/overlay-controller.d.ts +5 -2
- package/dist/ui-core/controllers/overlay-controller.js +3 -2
- package/dist/ui-core/controllers/overlay-controller.js.map +1 -1
- package/dist/ui-core/controllers/selection-controller.d.ts +2 -1
- package/dist/ui-core/controllers/selection-controller.js +27 -0
- package/dist/ui-core/controllers/selection-controller.js.map +1 -1
- package/dist/ui-core/layout/compute-layout.d.ts +3 -1
- package/dist/ui-core/layout/compute-layout.js +4 -2
- package/dist/ui-core/layout/compute-layout.js.map +1 -1
- package/dist/ui-core/motion/wheel-scroll.d.ts +7 -0
- package/dist/ui-core/motion/wheel-scroll.js +24 -0
- package/dist/ui-core/motion/wheel-scroll.js.map +1 -0
- package/dist/{classic/render/palette.js → ui-core/rendering/ansi-palette.js} +1 -1
- package/dist/ui-core/rendering/ansi-palette.js.map +1 -0
- package/dist/ui-core/rendering/artifact-pager-source.d.ts +1 -0
- package/dist/ui-core/rendering/artifact-pager-source.js.map +1 -1
- package/dist/ui-core/rendering/compaction-pager-source.d.ts +4 -0
- package/dist/ui-core/rendering/compaction-pager-source.js +65 -0
- package/dist/ui-core/rendering/compaction-pager-source.js.map +1 -0
- package/dist/ui-core/rendering/duration.d.ts +3 -1
- package/dist/ui-core/rendering/duration.js +12 -3
- package/dist/ui-core/rendering/duration.js.map +1 -1
- package/dist/ui-core/rendering/incremental-strip.js +4 -1
- package/dist/ui-core/rendering/incremental-strip.js.map +1 -1
- package/dist/ui-core/rendering/intro-header.d.ts +3 -0
- package/dist/ui-core/rendering/intro-header.js +145 -161
- package/dist/ui-core/rendering/intro-header.js.map +1 -1
- package/dist/ui-core/rendering/job-tail-source.js +30 -2
- package/dist/ui-core/rendering/job-tail-source.js.map +1 -1
- package/dist/ui-core/rendering/markdown-diff-rows.d.ts +12 -0
- package/dist/ui-core/rendering/markdown-diff-rows.js +85 -0
- package/dist/ui-core/rendering/markdown-diff-rows.js.map +1 -0
- package/dist/ui-core/rendering/markdown.d.ts +1 -0
- package/dist/ui-core/rendering/markdown.js +12 -0
- package/dist/ui-core/rendering/markdown.js.map +1 -1
- package/dist/ui-core/rendering/open-tool-output.d.ts +1 -0
- package/dist/ui-core/rendering/open-tool-output.js +48 -14
- package/dist/ui-core/rendering/open-tool-output.js.map +1 -1
- package/dist/ui-core/rendering/pager-regions.d.ts +7 -0
- package/dist/ui-core/rendering/pager-regions.js +8 -0
- package/dist/ui-core/rendering/pager-regions.js.map +1 -0
- package/dist/ui-core/rendering/plan-view.js +5 -5
- package/dist/ui-core/rendering/plan-view.js.map +1 -1
- package/dist/ui-core/rendering/render-markdown-lines.d.ts +1 -0
- package/dist/ui-core/rendering/render-markdown-lines.js +5 -2
- package/dist/ui-core/rendering/render-markdown-lines.js.map +1 -1
- package/dist/ui-core/rendering/session-change-diff.d.ts +2 -0
- package/dist/ui-core/rendering/session-change-diff.js +85 -0
- package/dist/ui-core/rendering/session-change-diff.js.map +1 -0
- package/dist/ui-core/rendering/session-prompts-pager-source.js +1 -1
- package/dist/ui-core/rendering/session-prompts-pager-source.js.map +1 -1
- package/dist/ui-core/rendering/strip-tool-surfaces.js +7 -7
- package/dist/ui-core/rendering/strip-tool-surfaces.js.map +1 -1
- package/dist/ui-core/rendering/task-disclosure.js +3 -3
- package/dist/ui-core/rendering/task-disclosure.js.map +1 -1
- package/dist/ui-core/rendering/text-width.d.ts +2 -0
- package/dist/ui-core/rendering/text-width.js +100 -4
- package/dist/ui-core/rendering/text-width.js.map +1 -1
- package/dist/ui-core/rendering/thinking-tail.js +6 -2
- package/dist/ui-core/rendering/thinking-tail.js.map +1 -1
- package/dist/ui-core/rendering/tool-output-pager-source.d.ts +4 -0
- package/dist/ui-core/rendering/tool-output-pager-source.js +94 -0
- package/dist/ui-core/rendering/tool-output-pager-source.js.map +1 -0
- package/dist/ui-core/rendering/tool-presenter.d.ts +2 -0
- package/dist/ui-core/rendering/tool-presenter.js +53 -0
- package/dist/ui-core/rendering/tool-presenter.js.map +1 -1
- package/dist/ui-core/state/hydrate/classic-transcript.js +2 -0
- package/dist/ui-core/state/hydrate/classic-transcript.js.map +1 -1
- package/dist/ui-core/state/pager-search.d.ts +8 -0
- package/dist/ui-core/state/pager-search.js +20 -0
- package/dist/ui-core/state/pager-search.js.map +1 -1
- package/dist/ui-core/state/semantic-document.d.ts +4 -0
- package/dist/ui-core/state/semantic-document.js.map +1 -1
- package/dist/ui-core/state/transcript/apply-app-event.js +1 -0
- package/dist/ui-core/state/transcript/apply-app-event.js.map +1 -1
- package/dist/ui-core/state/transcript-hydrate.js +1 -0
- package/dist/ui-core/state/transcript-hydrate.js.map +1 -1
- package/dist/ui-core/state/transcript-store.d.ts +2 -1
- package/dist/ui-core/state/transcript-store.js +35 -0
- package/dist/ui-core/state/transcript-store.js.map +1 -1
- package/dist/ui-core/state/transcript-types.d.ts +2 -0
- package/dist/ui-core/state/transcript-types.js.map +1 -1
- package/dist/ui-core/state/transcript-window.d.ts +11 -2
- package/dist/ui-core/state/transcript-window.js +11 -2
- package/dist/ui-core/state/transcript-window.js.map +1 -1
- package/dist/version.generated.d.ts +2 -2
- package/dist/version.generated.js +2 -2
- package/dist/version.generated.js.map +1 -1
- package/package.json +5 -2
- package/dist/agent/context/compaction-work-history.d.ts +0 -13
- package/dist/agent/context/compaction-work-history.js +0 -150
- package/dist/agent/context/compaction-work-history.js.map +0 -1
- package/dist/classic/render/palette.js.map +0 -1
- package/dist/tui-v2/components/modal/prompt-actions-modal.d.ts +0 -10
- package/dist/tui-v2/components/modal/prompt-actions-modal.js +0 -101
- package/dist/tui-v2/components/modal/prompt-actions-modal.js.map +0 -1
- package/dist/tui-v2/components/transcript/transcript-scrollbar.d.ts +0 -29
- package/dist/tui-v2/components/transcript/transcript-scrollbar.js +0 -211
- package/dist/tui-v2/components/transcript/transcript-scrollbar.js.map +0 -1
- package/dist/ui-core/rendering/prompt-preview.d.ts +0 -5
- package/dist/ui-core/rendering/prompt-preview.js +0 -27
- package/dist/ui-core/rendering/prompt-preview.js.map +0 -1
- /package/dist/{classic/render/palette.d.ts → ui-core/rendering/ansi-palette.d.ts} +0 -0
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
import { join } from "node:path";
|
|
2
|
+
import { REA_SERVER } from "./workflow.js";
|
|
3
|
+
const REFERENCES = [
|
|
4
|
+
["javascript-applications.md", "JavaScript, Electron and ASAR workflows"],
|
|
5
|
+
["native-and-artifacts.md", "native binaries, archives, SQLite and firmware"],
|
|
6
|
+
["android-applications.md", "APK and device analysis"],
|
|
7
|
+
["evidence-workflows.md", "Evidence IDs, paging and comparisons"],
|
|
8
|
+
["runtime-observation.md", "browser, Electron and process observation"],
|
|
9
|
+
["connection-and-recovery.md", "connection problems and provider prerequisites"],
|
|
10
|
+
];
|
|
11
|
+
const SYSTEM_NOTES = {
|
|
12
|
+
darwin: [
|
|
13
|
+
"Native decompilation uses Ghidra, Hopper or IDA. `/rea engines install ghidra` sets up Ghidra for you (x64 and arm64) and builds its native decompiler once, which needs the Xcode Command Line Tools (`xcode-select --install`). Hopper is started on demand; complete its first-run demo or licence dialog once in your user session.",
|
|
14
|
+
"Ghidra opens one architecture at a time, so the agent thins a universal Mach-O with `lipo` first. Hopper opens universal files itself.",
|
|
15
|
+
"Process capture and runtime observation are available (native PTY).",
|
|
16
|
+
"Linux-only features are unavailable here: firmware extraction, offline ELF layout, recorded crashes, EVM bytecode, TShark field extraction and sigrok decoding.",
|
|
17
|
+
],
|
|
18
|
+
linux: [
|
|
19
|
+
"JavaScript/Electron analysis, Ghidra, JADX and firmware tools need a procps-compatible `ps` on PATH. Minimal containers often lack it: install `procps` (or `procps-ng`).",
|
|
20
|
+
"Native decompilation uses Ghidra, Hopper or IDA. `/rea engines install ghidra` sets up Ghidra: x64 ships a ready decompiler, arm64 builds it once and needs make, a C++ compiler and bison.",
|
|
21
|
+
"Linux supports the widest range of targets, including firmware, ELF layout, packet and signal tools.",
|
|
22
|
+
],
|
|
23
|
+
win32: [
|
|
24
|
+
"Static analysis needs no extra software for JavaScript/Electron, .NET, Go, Rust, Flutter and saved captures. Android packages also need JADX and a JDK.",
|
|
25
|
+
"Native decompilation uses Ghidra's experimental, read-only Windows support for PE files (x64). `/rea engines install ghidra` sets it up with its bundled decompiler. Hopper and Kuna are not available on Windows.",
|
|
26
|
+
"Linux-only features are unavailable here: firmware extraction, offline ELF layout, recorded crashes, EVM bytecode, TShark field extraction and sigrok decoding. Process capture needs a native PTY (Linux or macOS).",
|
|
27
|
+
],
|
|
28
|
+
};
|
|
29
|
+
function statusLine(view) {
|
|
30
|
+
const progress = view.maintenance ? ` · ${view.maintenance} in progress` : "";
|
|
31
|
+
if (view.status.state === "missing")
|
|
32
|
+
return `**Status:** not installed${progress}. Run \`/rea setup\` to install and connect it.`;
|
|
33
|
+
if (view.status.state === "broken")
|
|
34
|
+
return `**Status:** needs repair${progress}. ${view.status.reason}`;
|
|
35
|
+
const installed = `REA ${view.status.installation.version} installed`;
|
|
36
|
+
if (!view.server)
|
|
37
|
+
return `**Status:** ${installed} · not running (it starts only when enabled)${progress}`;
|
|
38
|
+
const detail = view.server.detail ? ` — ${view.server.detail}` : "";
|
|
39
|
+
const selected = view.selected ? "selected for this session" : "not selected";
|
|
40
|
+
return `**Status:** ${installed} · ${view.server.status} (${view.server.toolCount} tools) · ${selected}${detail}${progress}`;
|
|
41
|
+
}
|
|
42
|
+
function filesSection(view) {
|
|
43
|
+
const lines = [
|
|
44
|
+
"## Files and settings",
|
|
45
|
+
"",
|
|
46
|
+
`- Everything lives in \`${view.root}\`: \`current.json\` (the active release), \`versions/\`, \`npm-cache/\` and \`engines.json\` (the engines you set up). Engines that clai installs live beside it in \`ghidra/\` and \`jdk/\`. \`CLAI_DATA_DIR\` moves them all.`,
|
|
47
|
+
"- `CLAI_REA_NODE` selects the Node executable REA runs on. It must be set before installing; to switch an existing installation, delete `current.json` and run `/rea setup`.",
|
|
48
|
+
"- clai passes your environment to REA, so engine settings such as `GHIDRA_INSTALL_DIR`, `JAVA_HOME`, `HOPPER_LAUNCHER_PATH`, `REA_GHIDRA_STARTUP_TIMEOUT_MS`, `REA_TSHARK_COMMAND`, `REA_WABT_BIN_DIRECTORY`, `REA_KUNA_COMMAND` and `REA_JEB_MCP_URL` work when set before you start clai. An engine you choose with `/rea engines` takes precedence over the same variable in your environment (for REA only); `/rea engines remove` hands control back.",
|
|
49
|
+
];
|
|
50
|
+
if (view.status.state !== "ready")
|
|
51
|
+
return lines;
|
|
52
|
+
const skill = join(view.status.installation.directory, "node_modules", "rea-agents", "skills", "reverse-engineer-anything");
|
|
53
|
+
return [
|
|
54
|
+
...lines,
|
|
55
|
+
"",
|
|
56
|
+
"The installed version ships its own detailed references. Ask the agent to read the one you need, or open them yourself:",
|
|
57
|
+
"",
|
|
58
|
+
`- \`${join(skill, "SKILL.md")}\``,
|
|
59
|
+
...REFERENCES.map(([file, topic]) => `- \`${join(skill, "references", file)}\` — ${topic}`),
|
|
60
|
+
];
|
|
61
|
+
}
|
|
62
|
+
export function reaUserGuide(view) {
|
|
63
|
+
return [
|
|
64
|
+
"# REA · Reverse Engineer Anything",
|
|
65
|
+
"",
|
|
66
|
+
statusLine(view),
|
|
67
|
+
"",
|
|
68
|
+
"REA lets the agent inspect software that you only have in shipped form — binaries, packaged apps, Electron and JavaScript bundles, .NET assemblies, Android packages, firmware and saved network captures — and explain how it works, with the evidence behind each claim. clai installs and runs it privately. Nothing is added to other agents, skills or your project's MCP configuration.",
|
|
69
|
+
"",
|
|
70
|
+
"## Quick start",
|
|
71
|
+
"",
|
|
72
|
+
"1. `/rea setup` installs the latest official release if needed and connects it for this session. The first run can take a minute or more; press Esc to cancel.",
|
|
73
|
+
"2. Ask for the analysis and name the artifact: `@rea explain how the updater in /Applications/Foo.app works`.",
|
|
74
|
+
"3. `/rea off` stops its background process when you are done.",
|
|
75
|
+
"",
|
|
76
|
+
"You do not have to enable REA yourself. In agent mode the agent can choose it when a task needs it; your permission policy decides whether it asks first.",
|
|
77
|
+
"",
|
|
78
|
+
"## When to use it",
|
|
79
|
+
"",
|
|
80
|
+
"Use REA when the answer depends on a **shipped artifact** rather than source code:",
|
|
81
|
+
"",
|
|
82
|
+
"- native executables, libraries and firmware images",
|
|
83
|
+
"- Electron and JavaScript applications, ASAR archives, minified bundles",
|
|
84
|
+
"- .NET assemblies, Android APKs, Flutter apps, Unity IL2CPP metadata, Go and Rust binaries",
|
|
85
|
+
"- saved network captures (HAR, SAZ), packet captures and SQLite databases",
|
|
86
|
+
"- runtime behaviour of an application you are authorised to run",
|
|
87
|
+
"",
|
|
88
|
+
"Do not use it to read or change a source repository you already have. Normal file and search tools are faster and cheaper.",
|
|
89
|
+
"",
|
|
90
|
+
"## Commands",
|
|
91
|
+
"",
|
|
92
|
+
"- `/rea` opens a picker with the actions below. `/rea` is the command; `@rea` is the token that attaches REA to a prompt.",
|
|
93
|
+
"- `/rea setup` installs if needed and connects.",
|
|
94
|
+
"- `/rea install` installs or repairs without connecting.",
|
|
95
|
+
"- `/rea update` stages the newest release. A running analysis keeps its version.",
|
|
96
|
+
"- `/rea use` connects and inserts an editable `@rea` token in your draft.",
|
|
97
|
+
"- `/rea on` connects without touching the draft. `/rea off` disconnects.",
|
|
98
|
+
"- `/rea status` reports installation and connection state without starting anything.",
|
|
99
|
+
"- `/rea reconnect` restarts the connection to adopt an update or repair a fault. It discards the current analysis.",
|
|
100
|
+
"- `/rea engines` shows which analysis engines are ready and what to run for the rest. `/rea engines install ghidra` downloads and sets up Ghidra after you confirm, `/rea engines install java` adds a private JDK 21, `/rea engines use <ghidra|java|hopper|ida|kuna> <location>` adopts one you already have, and `/rea engines remove <engine>` forgets it. Only you can run these; the agent never installs or configures an engine.",
|
|
101
|
+
"- `/rea guide` shows this page.",
|
|
102
|
+
"- `/rea <task>` submits `@rea <task>`.",
|
|
103
|
+
"- Type `@rea` anywhere in a prompt to select it. It is highlighted like `@mcp:` and `skill:` mentions, and connects REA first if it is installed but not running. A file named `rea` is not affected: use `@./rea` to attach it.",
|
|
104
|
+
"",
|
|
105
|
+
"## How the agent uses it",
|
|
106
|
+
"",
|
|
107
|
+
"REA has about 200 tools. Sending all of them with every message would be slow and costly, so they stay out of the model's tool list. Three small steps replace that:",
|
|
108
|
+
"",
|
|
109
|
+
"1. `@rea` in your prompt, or `rea.manage` called by the agent, connects REA and hands the model a short workflow plus an index of every tool with its required arguments. It is sent once per conversation (roughly 3,500 tokens).",
|
|
110
|
+
`2. \`mcp.call\` runs a tool as \`mcp.${REA_SERVER}.<tool>\` straight from that index.`,
|
|
111
|
+
`3. \`mcp.tools server="${REA_SERVER}" query="<tool name>"\` reads one full schema when the agent needs optional fields or a structured argument, or after a call is rejected.`,
|
|
112
|
+
"",
|
|
113
|
+
"REA validates arguments strictly: a field a tool does not list is rejected, and clai then shows the agent the accepted names. Results carry **Evidence IDs**. The agent starts from a summary, then pages through the retained evidence with exact filters instead of repeating the analysis. Turning REA on or off never changes the system prompt or the native tool list, so the provider's prompt cache survives it. Compaction and switching models still reset that cache.",
|
|
114
|
+
"",
|
|
115
|
+
"## Example prompts",
|
|
116
|
+
"",
|
|
117
|
+
"- `@rea show how the Electron app at ~/Downloads/Foo.asar talks to its backend, with evidence`",
|
|
118
|
+
"- `@rea which Go modules and compiler version was ./agent built with?`",
|
|
119
|
+
"- `@rea compare the exports of old.asar and new.asar and summarise the behaviour changes`",
|
|
120
|
+
"- `@rea decompile the licence check in ./target.exe` (needs an engine: `/rea engines`)",
|
|
121
|
+
"- `@rea list the endpoints in session.har and where the bundle builds each request`",
|
|
122
|
+
"",
|
|
123
|
+
"## What REA can analyse",
|
|
124
|
+
"",
|
|
125
|
+
"| Target | Needs |",
|
|
126
|
+
"| --- | --- |",
|
|
127
|
+
"| Native binaries | Ghidra (`/rea engines install ghidra`), Hopper, IDA or Kuna |",
|
|
128
|
+
"| JavaScript / Electron | nothing extra (Linux: `ps` from procps) |",
|
|
129
|
+
"| .NET, Go, Rust, Flutter, IL2CPP | nothing extra (static) |",
|
|
130
|
+
"| Saved captures (HAR, SAZ) | nothing extra |",
|
|
131
|
+
"| SQLite databases | Node.js 24.15+ or 26+ |",
|
|
132
|
+
"| Android APKs | headless JADX and a full JDK |",
|
|
133
|
+
"| Android devices | adb |",
|
|
134
|
+
"| Websites | a Chrome-family browser |",
|
|
135
|
+
"| Packet captures | Wireshark tshark and capinfos |",
|
|
136
|
+
"| Firmware | Binwalk or Unblob (Linux) |",
|
|
137
|
+
"| ELF layout, crashes | pwntools (Linux x64) |",
|
|
138
|
+
"| Process behaviour | Linux or macOS |",
|
|
139
|
+
"",
|
|
140
|
+
"Android packages, ELF layout, recorded crashes and EVM bytecode are documented for x64 hosts. Without a native engine REA still inspects JavaScript, .NET, archives, Mach-O headers, plists and signatures. When a tool needs something missing, the agent says what and continues with what is supported; it never installs software itself. You install Ghidra from `/rea engines`, and the other tools are yours to provide.",
|
|
141
|
+
"",
|
|
142
|
+
`## On this system (${view.platform})`,
|
|
143
|
+
"",
|
|
144
|
+
...(SYSTEM_NOTES[view.platform] ?? ["REA runs wherever a compatible Node.js does. Engine support depends on the host."]).map((note) => `- ${note}`),
|
|
145
|
+
"",
|
|
146
|
+
"REA needs Node.js 22.19+, 24.15+ or 26+ with npm. clai reuses a compatible Node it finds (`CLAI_REA_NODE`, the Node running clai, then PATH) and otherwise downloads the official Node 24 LTS for itself. Linux builds for musl (Alpine) are not published, so install Node there with your package manager.",
|
|
147
|
+
"",
|
|
148
|
+
"## Permissions and safety",
|
|
149
|
+
"",
|
|
150
|
+
"- `/rea status` and `/rea guide` are read-only. Commands you type run immediately; when the agent installs or connects REA, your permission policy applies.",
|
|
151
|
+
"- `@rea` connects an installed REA in any mode, because you asked for it. In ask mode only the few tools REA marks read-only can run and the agent cannot install or reconnect it; in plan mode it cannot install or change REA's state. Switch to agent mode for analysis.",
|
|
152
|
+
"- Under `/permissions default` each REA tool call asks for approval, because almost none of its tools are marked read-only. `auto-allow` and `full-access` (the default for new setups) do not ask.",
|
|
153
|
+
"- Analysis is local, but the model provider you chose receives the tool results. Do not analyse material you cannot share with it.",
|
|
154
|
+
"- Static analysis never runs the target. Runtime tools (process capture, browser and Electron observation, Frida, debuggers, adb) execute or attach to software with your permissions. Use them only on targets you own or are authorised to test.",
|
|
155
|
+
"- Text inside an analysed artifact is untrusted data. The agent is told not to follow instructions found in it.",
|
|
156
|
+
"",
|
|
157
|
+
"## Disk, memory and network",
|
|
158
|
+
"",
|
|
159
|
+
"- Nothing runs until REA is enabled. Install, update, status and guide never start its server.",
|
|
160
|
+
"- An install uses about 250 MB with your own Node, or about 450 MB when clai also downloads Node. Releases older than the previous one are removed after 7 days. Ghidra adds about 900 MB (1.6 GB of free space is needed while it installs) and a private JDK about 350 MB, only if you install them. Installing streams to disk and keeps clai itself near 250 MB of memory; building the decompiler on macOS and arm64 Linux runs `make` with at most four jobs for about a minute.",
|
|
161
|
+
"- Installing needs HTTPS access to `registry.npmjs.org`, plus `nodejs.org` when clai downloads Node. `/rea engines install` uses `api.github.com`, `github.com` and its release CDN for Ghidra, and `api.adoptium.net` for the JDK. Downloads are checksum-verified and package install scripts are disabled.",
|
|
162
|
+
"- While connected, the REA process typically holds 400-650 MB (measured with REA 6.7.0), and native engines such as Ghidra add their own. `/rea off`, or ending the session, stops it and frees that memory.",
|
|
163
|
+
"",
|
|
164
|
+
...filesSection(view),
|
|
165
|
+
"",
|
|
166
|
+
"## Troubleshooting",
|
|
167
|
+
"",
|
|
168
|
+
"- **Not installed or needs repair:** run `/rea setup`.",
|
|
169
|
+
"- **Did not connect:** `/rea status` shows the launch error. `/rea reconnect` retries without reinstalling.",
|
|
170
|
+
"- **A tool reports a missing engine:** run `/rea engines`. It shows what is ready and the exact command for the rest, such as `/rea engines install ghidra`. Hopper, IDA and Kuna are yours to install; point REA at them with `/rea engines use`.",
|
|
171
|
+
"- **Ghidra cannot build its decompiler:** on macOS install the Command Line Tools (`xcode-select --install`); on Linux install `build-essential bison` or your distribution's equivalent. Then run the install again.",
|
|
172
|
+
"- **A call timed out:** the analysis may still be running. Ask the agent to check state and retained Evidence before retrying.",
|
|
173
|
+
"- **Another session is installing:** wait for it, then check `/rea status`.",
|
|
174
|
+
`- **Name clash:** a server you configured as \`${REA_SERVER}\` is never replaced. Rename yours to use the managed integration.`,
|
|
175
|
+
"- **Install stalls or fails:** clai downloads from the hosts above and does not configure a proxy for them, so make sure they are reachable from this machine. A compatible Node on PATH, or `CLAI_REA_NODE`, avoids the `nodejs.org` download.",
|
|
176
|
+
].join("\n");
|
|
177
|
+
}
|
|
178
|
+
//# sourceMappingURL=guide.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"guide.js","sourceRoot":"","sources":["../../src/rea/guide.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { argumentHint, isArgumentRejection } from "../mcp/argument-hint.js";
|
|
2
|
+
const PATH_KEYS = /^(?:path|file|file_path|filepath|binary|binary_path|app|app_path|executable|input|input_path|target|target_path)$/i;
|
|
3
|
+
const TARGET_CODES = new Set(["architecture_unsupported", "target_format_unsupported", "target_unsupported"]);
|
|
4
|
+
const OPEN_TOOL = "open_binary";
|
|
5
|
+
const PROVIDER_ID = /^[a-z][a-z0-9-]{0,31}$/;
|
|
6
|
+
const REJECTION_CODE = /^[a-z][a-z0-9_]{0,47}$/;
|
|
7
|
+
const MAX_SUMMARY_CHARS = 120;
|
|
8
|
+
function isRecord(value) {
|
|
9
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
10
|
+
}
|
|
11
|
+
function errorOf(output) {
|
|
12
|
+
const text = output.trimStart();
|
|
13
|
+
if (!text.startsWith("{"))
|
|
14
|
+
return undefined;
|
|
15
|
+
try {
|
|
16
|
+
const parsed = JSON.parse(text);
|
|
17
|
+
return isRecord(parsed) && isRecord(parsed.error) ? parsed.error : undefined;
|
|
18
|
+
}
|
|
19
|
+
catch {
|
|
20
|
+
return undefined;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
function rejections(details) {
|
|
24
|
+
if (!Array.isArray(details.rejections))
|
|
25
|
+
return [];
|
|
26
|
+
return details.rejections.flatMap((entry) => {
|
|
27
|
+
if (!isRecord(entry) || typeof entry.provider_id !== "string" || !PROVIDER_ID.test(entry.provider_id))
|
|
28
|
+
return [];
|
|
29
|
+
if (typeof entry.code !== "string" || !REJECTION_CODE.test(entry.code))
|
|
30
|
+
return [];
|
|
31
|
+
const diagnostics = isRecord(entry.diagnostics) ? entry.diagnostics : {};
|
|
32
|
+
const architectures = Array.isArray(diagnostics.available_architectures)
|
|
33
|
+
? diagnostics.available_architectures.filter((value) => typeof value === "string" && /^[A-Za-z0-9_]{1,16}$/.test(value))
|
|
34
|
+
: [];
|
|
35
|
+
return [{
|
|
36
|
+
provider: entry.provider_id,
|
|
37
|
+
code: entry.code,
|
|
38
|
+
architectures,
|
|
39
|
+
universal: diagnostics.target_format === "mach-o-universal",
|
|
40
|
+
}];
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
function describe(code) {
|
|
44
|
+
switch (code) {
|
|
45
|
+
case "not_configured": return "not configured";
|
|
46
|
+
case "executable_missing": return "launcher or runtime missing";
|
|
47
|
+
case "architecture_unsupported": return "cannot open a universal Mach-O";
|
|
48
|
+
case "target_format_unsupported": return "does not support this file format";
|
|
49
|
+
default: return code.replace(/_/g, " ").slice(0, MAX_SUMMARY_CHARS);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
function providerFailure(operation, error) {
|
|
53
|
+
const details = isRecord(error.details) ? error.details : undefined;
|
|
54
|
+
if (!details || !Array.isArray(details.candidate_ids) || details.candidate_ids.length === 0)
|
|
55
|
+
return undefined;
|
|
56
|
+
const found = rejections(details);
|
|
57
|
+
if (found.length === 0)
|
|
58
|
+
return undefined;
|
|
59
|
+
const tool = typeof details.operation === "string" && /^[A-Za-z0-9_]{1,64}$/.test(details.operation) ? details.operation : operation;
|
|
60
|
+
const byProvider = new Map();
|
|
61
|
+
for (const entry of found)
|
|
62
|
+
byProvider.set(entry.provider, [...(byProvider.get(entry.provider) ?? []), entry]);
|
|
63
|
+
const states = [...byProvider].map(([provider, entries]) => `${provider}: ${[...new Set(entries.map((entry) => describe(entry.code)))].join(" and ")}`);
|
|
64
|
+
const unusable = [...byProvider.values()].filter((entries) => entries.some((entry) => !TARGET_CODES.has(entry.code))).length;
|
|
65
|
+
const blockedByTarget = [...byProvider.values()].some((entries) => entries.every((entry) => TARGET_CODES.has(entry.code)));
|
|
66
|
+
const lines = [`REA ${tool} needs an analysis engine (tools marked ^) and none can serve this target now:`, ...states.map((state) => `- ${state}`)];
|
|
67
|
+
const universal = found.find((entry) => entry.universal);
|
|
68
|
+
if (universal && blockedByTarget) {
|
|
69
|
+
const architectures = [...new Set(found.flatMap((entry) => entry.architectures))];
|
|
70
|
+
lines.push(`This target is a universal Mach-O${architectures.length > 0 ? ` (${architectures.join(", ")})` : ""}. Thin one slice into the session scratch directory, for example lipo "<path>" -thin <arch> -output "<scratch>/<name>-<arch>", call ${OPEN_TOOL} on that file, then retry.`);
|
|
71
|
+
}
|
|
72
|
+
if (unusable === byProvider.size) {
|
|
73
|
+
lines.push("No engine is ready. Do not retry this or other ^ tools and do not install anything yourself: tell the user to run /rea engines (it can install Ghidra on request), and continue with # tools that lack ^ and other REA tools.");
|
|
74
|
+
}
|
|
75
|
+
return lines.join("\n");
|
|
76
|
+
}
|
|
77
|
+
function outsideSchema(context) {
|
|
78
|
+
const known = new Set(Object.keys(context.tool.inputSchema.properties));
|
|
79
|
+
return Object.keys(context.args).filter((key) => !known.has(key));
|
|
80
|
+
}
|
|
81
|
+
export function reaFailureHint(availability) {
|
|
82
|
+
return (context) => {
|
|
83
|
+
const { tool, output } = context;
|
|
84
|
+
const error = errorOf(output);
|
|
85
|
+
if (error?.code === "provider_unavailable")
|
|
86
|
+
return providerFailure(tool.toolName, error);
|
|
87
|
+
if (error?.code === "target_unavailable") {
|
|
88
|
+
return `${output}\nNo target is open. If the user already named a target, call mcp.clai-rea.${OPEN_TOOL} with its absolute path now, then retry this call.`;
|
|
89
|
+
}
|
|
90
|
+
if (!isArgumentRejection(output))
|
|
91
|
+
return undefined;
|
|
92
|
+
const stray = outsideSchema(context).filter((key) => PATH_KEYS.test(key));
|
|
93
|
+
const marks = availability();
|
|
94
|
+
if (stray.length === 0 || (marks && !marks.open.has(tool.toolName)))
|
|
95
|
+
return undefined;
|
|
96
|
+
return `${output}\n${argumentHint(tool)}\n${tool.toolName} acts on the binary opened by ${OPEN_TOOL} and takes no ${stray[0]} argument: call mcp.clai-rea.${OPEN_TOOL} once with {"path": <absolute path>}, then call ${tool.toolName} again without ${stray[0]}.`;
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=hints.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hints.js","sourceRoot":"","sources":["../../src/rea/hints.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { ReaInstallOptions, ReaMaintenanceAction, ReaMaintenanceResult, ReaProgress, ReaStatus } from "./types.js";
|
|
2
|
+
export declare const reaRoot: () => string;
|
|
3
|
+
export declare function reaMaintenance(root?: string): {
|
|
4
|
+
action: ReaMaintenanceAction;
|
|
5
|
+
progress?: ReaProgress;
|
|
6
|
+
} | undefined;
|
|
7
|
+
export declare function subscribeReaProgress(listener: (root: string, progress: ReaProgress) => void): () => void;
|
|
8
|
+
export declare function detectRea(root?: string, verify?: boolean): Promise<ReaStatus>;
|
|
9
|
+
export declare function publish(pointer: string, destination: string): Promise<void>;
|
|
10
|
+
export declare function runReaMaintenance(action: ReaMaintenanceAction, options?: ReaInstallOptions): Promise<ReaMaintenanceResult>;
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
import { randomUUID } from "node:crypto";
|
|
2
|
+
import { access, mkdir, mkdtemp, readdir, readFile, rename, rm, stat, writeFile } from "node:fs/promises";
|
|
3
|
+
import { isAbsolute, join, relative, resolve } from "node:path";
|
|
4
|
+
import { setTimeout as delay } from "node:timers/promises";
|
|
5
|
+
import { withMcpStorageLock } from "../mcp/storage-lock.js";
|
|
6
|
+
import { McpTransportError } from "../mcp/transport.js";
|
|
7
|
+
import { getDataDir } from "../store/paths.js";
|
|
8
|
+
import { fetchBytes, jsonObject, npmRelease, verifyIntegrity } from "./distribution.js";
|
|
9
|
+
import { resolveReaNode, runReaNode } from "./node.js";
|
|
10
|
+
const PRUNE_AFTER_MS = 7 * 24 * 60 * 60 * 1000;
|
|
11
|
+
const PUBLISH_ATTEMPTS = 8;
|
|
12
|
+
const operations = new Map();
|
|
13
|
+
const listeners = new Set();
|
|
14
|
+
const describe = (error) => error instanceof Error ? error.message : String(error);
|
|
15
|
+
const failure = (error) => error instanceof McpTransportError && error.kind === "timeout"
|
|
16
|
+
? "Another clai session is installing or updating REA. Wait for it to finish, then check /rea status."
|
|
17
|
+
: describe(error);
|
|
18
|
+
export const reaRoot = () => resolve(getDataDir(), "tools", "rea");
|
|
19
|
+
export function reaMaintenance(root = reaRoot()) {
|
|
20
|
+
const current = operations.get(root);
|
|
21
|
+
return current ? { action: current.action, ...(current.progress ? { progress: current.progress } : {}) } : undefined;
|
|
22
|
+
}
|
|
23
|
+
export function subscribeReaProgress(listener) {
|
|
24
|
+
listeners.add(listener);
|
|
25
|
+
return () => { listeners.delete(listener); };
|
|
26
|
+
}
|
|
27
|
+
function inside(parent, path) {
|
|
28
|
+
const local = relative(parent, path);
|
|
29
|
+
return local !== "" && !isAbsolute(local) && local !== ".." && !local.startsWith("../") && !local.startsWith("..\\");
|
|
30
|
+
}
|
|
31
|
+
export async function detectRea(root = reaRoot(), verify = false) {
|
|
32
|
+
let text;
|
|
33
|
+
try {
|
|
34
|
+
text = await readFile(join(root, "current.json"), "utf8");
|
|
35
|
+
}
|
|
36
|
+
catch (error) {
|
|
37
|
+
return error.code === "ENOENT"
|
|
38
|
+
? { state: "missing" }
|
|
39
|
+
: { state: "broken", reason: describe(error) };
|
|
40
|
+
}
|
|
41
|
+
try {
|
|
42
|
+
const data = jsonObject(JSON.parse(text));
|
|
43
|
+
const { version, node, entry, directory } = data;
|
|
44
|
+
if (typeof version !== "string" || !/^\d+\.\d+\.\d+$/.test(version) ||
|
|
45
|
+
typeof node !== "string" || !isAbsolute(node) || typeof entry !== "string" ||
|
|
46
|
+
typeof directory !== "string" || !inside(join(root, "versions"), directory) || !inside(directory, entry)) {
|
|
47
|
+
throw new Error("Invalid managed REA installation record");
|
|
48
|
+
}
|
|
49
|
+
const installation = { version, node, entry, directory };
|
|
50
|
+
await Promise.all([access(node), access(entry)]);
|
|
51
|
+
if (verify)
|
|
52
|
+
await verifyInstallation(installation);
|
|
53
|
+
return { state: "ready", installation };
|
|
54
|
+
}
|
|
55
|
+
catch (error) {
|
|
56
|
+
return { state: "broken", reason: `${describe(error)} · repair with /rea install` };
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
export async function publish(pointer, destination) {
|
|
60
|
+
for (let attempt = 0;; attempt += 1) {
|
|
61
|
+
try {
|
|
62
|
+
await rename(pointer, destination);
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
catch (error) {
|
|
66
|
+
const code = error.code;
|
|
67
|
+
const sharing = code === "EPERM" || code === "EACCES" || code === "EBUSY";
|
|
68
|
+
if (process.platform !== "win32" || !sharing || attempt >= PUBLISH_ATTEMPTS)
|
|
69
|
+
throw error;
|
|
70
|
+
await delay(Math.min(25 * 2 ** attempt, 200));
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
async function pruneVersions(root, keep) {
|
|
75
|
+
const versions = join(root, "versions");
|
|
76
|
+
const entries = await readdir(versions, { withFileTypes: true }).catch(() => []);
|
|
77
|
+
const cutoff = Date.now() - PRUNE_AFTER_MS;
|
|
78
|
+
await Promise.all(entries.map(async (entry) => {
|
|
79
|
+
const directory = join(versions, entry.name);
|
|
80
|
+
if (!entry.isDirectory() || keep.includes(directory))
|
|
81
|
+
return;
|
|
82
|
+
const info = await stat(directory).catch(() => undefined);
|
|
83
|
+
if (info && info.mtimeMs < cutoff)
|
|
84
|
+
await rm(directory, { force: true, recursive: true }).catch(() => undefined);
|
|
85
|
+
}));
|
|
86
|
+
}
|
|
87
|
+
async function verifyInstallation(installation, signal) {
|
|
88
|
+
const reported = await runReaNode(installation.node, [installation.entry, "--version"], {
|
|
89
|
+
...(signal ? { signal } : {}), timeout: 30_000,
|
|
90
|
+
});
|
|
91
|
+
if (!new RegExp(`(?:^|\\s)${installation.version.replace(/\./g, "\\.")}(?:$|\\s)`).test(reported)) {
|
|
92
|
+
throw new Error(`REA version verification failed: expected ${installation.version}, got ${reported.slice(0, 200)}`);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
async function install(action, root, options) {
|
|
96
|
+
const { signal, onProgress } = options;
|
|
97
|
+
signal?.throwIfAborted();
|
|
98
|
+
const before = await detectRea(root, true);
|
|
99
|
+
if (action === "install" && before.state === "ready")
|
|
100
|
+
return { ok: true, installation: before.installation, changed: false };
|
|
101
|
+
onProgress?.({ phase: "resolving", message: "Checking the latest official REA release" });
|
|
102
|
+
const release = await npmRelease("rea-agents", "latest", signal);
|
|
103
|
+
if (before.state === "ready" && before.installation.version === release.version) {
|
|
104
|
+
return { ok: true, installation: before.installation, changed: false };
|
|
105
|
+
}
|
|
106
|
+
const versions = join(root, "versions");
|
|
107
|
+
await mkdir(versions, { recursive: true, mode: 0o700 });
|
|
108
|
+
const directory = await mkdtemp(join(versions, `${release.version}-`));
|
|
109
|
+
const pointer = join(root, `current-${randomUUID()}.json`);
|
|
110
|
+
let published = false;
|
|
111
|
+
try {
|
|
112
|
+
const runtime = await resolveReaNode(join(directory, "runtime"), options);
|
|
113
|
+
signal?.throwIfAborted();
|
|
114
|
+
onProgress?.({ phase: "downloading", message: `Downloading REA ${release.version}` });
|
|
115
|
+
const bytes = await fetchBytes(release.tarball, 64 * 1024 * 1024, signal, (receivedBytes, totalBytes) => {
|
|
116
|
+
onProgress?.({ phase: "downloading", message: `Downloading REA ${release.version}`, receivedBytes, ...(totalBytes ? { totalBytes } : {}) });
|
|
117
|
+
});
|
|
118
|
+
verifyIntegrity(bytes, release.integrity);
|
|
119
|
+
const archive = join(directory, "rea.tgz");
|
|
120
|
+
const userConfig = join(directory, "user.npmrc");
|
|
121
|
+
const globalConfig = join(directory, "global.npmrc");
|
|
122
|
+
await Promise.all([
|
|
123
|
+
writeFile(archive, bytes, { mode: 0o600, flag: "wx" }),
|
|
124
|
+
writeFile(join(directory, "package.json"), JSON.stringify({ private: true }), { mode: 0o600, flag: "wx" }),
|
|
125
|
+
writeFile(userConfig, "", { mode: 0o600, flag: "wx" }),
|
|
126
|
+
writeFile(globalConfig, "", { mode: 0o600, flag: "wx" }),
|
|
127
|
+
]);
|
|
128
|
+
onProgress?.({ phase: "installing", message: `Installing REA ${release.version} and its dependencies privately` });
|
|
129
|
+
await runReaNode(runtime.node, [runtime.npm, "install", archive,
|
|
130
|
+
"--ignore-scripts", "--no-audit", "--no-fund", "--no-update-notifier", "--loglevel=error",
|
|
131
|
+
"--registry=https://registry.npmjs.org", `--userconfig=${userConfig}`, `--globalconfig=${globalConfig}`,
|
|
132
|
+
`--cache=${join(root, "npm-cache")}`, "--engine-strict", "--fetch-retries=2", "--fetch-timeout=120000",
|
|
133
|
+
], { cwd: directory, ...(signal ? { signal } : {}), timeout: 600_000 });
|
|
134
|
+
const installation = {
|
|
135
|
+
version: release.version, node: runtime.node, directory,
|
|
136
|
+
entry: join(directory, "node_modules", "rea-agents", "scripts", "rea.mjs"),
|
|
137
|
+
};
|
|
138
|
+
onProgress?.({ phase: "verifying", message: `Verifying REA ${release.version}` });
|
|
139
|
+
await verifyInstallation(installation, signal);
|
|
140
|
+
signal?.throwIfAborted();
|
|
141
|
+
await writeFile(pointer, JSON.stringify(installation), { mode: 0o600, flag: "wx" });
|
|
142
|
+
await publish(pointer, join(root, "current.json"));
|
|
143
|
+
published = true;
|
|
144
|
+
await rm(archive, { force: true }).catch(() => undefined);
|
|
145
|
+
await pruneVersions(root, [directory, ...(before.state === "ready" ? [before.installation.directory] : [])]);
|
|
146
|
+
return { ok: true, installation, changed: true };
|
|
147
|
+
}
|
|
148
|
+
finally {
|
|
149
|
+
await rm(pointer, { force: true }).catch(() => undefined);
|
|
150
|
+
if (!published)
|
|
151
|
+
await rm(directory, { force: true, recursive: true }).catch(() => undefined);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
export function runReaMaintenance(action, options = {}) {
|
|
155
|
+
const root = resolve(options.root ?? reaRoot());
|
|
156
|
+
const existing = operations.get(root);
|
|
157
|
+
if (existing)
|
|
158
|
+
return existing.promise;
|
|
159
|
+
const onProgress = (progress) => {
|
|
160
|
+
const operation = operations.get(root);
|
|
161
|
+
if (operation)
|
|
162
|
+
operation.progress = progress;
|
|
163
|
+
options.onProgress?.(progress);
|
|
164
|
+
for (const listener of listeners)
|
|
165
|
+
listener(root, progress);
|
|
166
|
+
};
|
|
167
|
+
const promise = withMcpStorageLock(`rea:${root}`, () => install(action, root, { ...options, onProgress }), options.signal)
|
|
168
|
+
.catch((error) => ({ ok: false, reason: failure(error) }))
|
|
169
|
+
.finally(() => { operations.delete(root); });
|
|
170
|
+
operations.set(root, { action, promise });
|
|
171
|
+
return promise;
|
|
172
|
+
}
|
|
173
|
+
//# sourceMappingURL=install.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/rea/install.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { type FetchFunction } from "./download.js";
|
|
2
|
+
import { type EngineHost, type EngineProgress } from "./ghidra.js";
|
|
3
|
+
export declare const JDK_MAJOR = 21;
|
|
4
|
+
export interface JdkRelease {
|
|
5
|
+
readonly name: string;
|
|
6
|
+
readonly url: string;
|
|
7
|
+
readonly bytes: number;
|
|
8
|
+
readonly sha256: string;
|
|
9
|
+
readonly format: "tar.gz" | "zip";
|
|
10
|
+
}
|
|
11
|
+
export type JdkResolution = {
|
|
12
|
+
readonly ok: true;
|
|
13
|
+
readonly release: JdkRelease;
|
|
14
|
+
} | {
|
|
15
|
+
readonly ok: false;
|
|
16
|
+
readonly reason: string;
|
|
17
|
+
};
|
|
18
|
+
export interface InstallJdkOptions {
|
|
19
|
+
readonly root?: string;
|
|
20
|
+
readonly release: JdkRelease;
|
|
21
|
+
readonly host?: EngineHost;
|
|
22
|
+
readonly signal?: AbortSignal | undefined;
|
|
23
|
+
readonly onProgress?: ((progress: EngineProgress) => void) | undefined;
|
|
24
|
+
readonly fetch?: FetchFunction | undefined;
|
|
25
|
+
readonly probe?: ((home: string, platform: NodeJS.Platform) => Promise<string | undefined>) | undefined;
|
|
26
|
+
}
|
|
27
|
+
export type InstallJdkResult = {
|
|
28
|
+
readonly ok: true;
|
|
29
|
+
readonly home: string;
|
|
30
|
+
readonly version: string;
|
|
31
|
+
readonly changed: boolean;
|
|
32
|
+
} | {
|
|
33
|
+
readonly ok: false;
|
|
34
|
+
readonly reason: string;
|
|
35
|
+
};
|
|
36
|
+
export declare function temurinQuery(host: EngineHost, musl?: boolean): {
|
|
37
|
+
os: string;
|
|
38
|
+
architecture: string;
|
|
39
|
+
} | undefined;
|
|
40
|
+
export declare function selectTemurinRelease(assets: unknown): JdkRelease;
|
|
41
|
+
export declare function resolveJdkRelease(host?: EngineHost, options?: {
|
|
42
|
+
signal?: AbortSignal | undefined;
|
|
43
|
+
fetch?: FetchFunction | undefined;
|
|
44
|
+
musl?: boolean;
|
|
45
|
+
}): Promise<JdkResolution>;
|
|
46
|
+
export declare function jdkDiskBytes(release: JdkRelease): number;
|
|
47
|
+
export declare function javaHomeIn(tree: string, platform: NodeJS.Platform): string;
|
|
48
|
+
export declare function javaExecutable(home: string, platform?: NodeJS.Platform): string;
|
|
49
|
+
export declare function javaVersion(home: string, platform?: NodeJS.Platform): Promise<string | undefined>;
|
|
50
|
+
export declare function installJdk(options: InstallJdkOptions): Promise<InstallJdkResult>;
|