@pentoshi/clai 4.19.0 → 5.1.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 +119 -0
- package/PROVIDERS.md +15 -2
- package/REA.md +96 -0
- package/README.md +5 -1
- package/dist/agent/compaction/compaction-prompt.d.ts +49 -0
- package/dist/agent/compaction/compaction-prompt.js +164 -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 +45 -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-skills.d.ts +4 -0
- package/dist/agent/context/compaction-skills.js +136 -0
- package/dist/agent/context/compaction-skills.js.map +1 -0
- 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 +20 -8
- package/dist/agent/context-manager.js.map +1 -1
- package/dist/agent/events.d.ts +10 -0
- package/dist/agent/loop-guard.d.ts +1 -0
- package/dist/agent/loop-guard.js +29 -6
- package/dist/agent/loop-guard.js.map +1 -1
- package/dist/agent/outcomes.js +4 -0
- package/dist/agent/outcomes.js.map +1 -1
- package/dist/agent/parser/arg-formatting.js +8 -2
- package/dist/agent/parser/arg-formatting.js.map +1 -1
- 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 +2 -2
- package/dist/agent/plan-implement-compact.js.map +1 -1
- package/dist/agent/reliability-policy.d.ts +3 -1
- package/dist/agent/reliability-policy.js +21 -31
- 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/subagents/read-only-tools.js +7 -8
- package/dist/agent/subagents/read-only-tools.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/native-tool-calls.js +2 -2
- package/dist/agent/turn/loop/native-tool-calls.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/pending-tool-calls.d.ts +16 -0
- package/dist/agent/turn/loop/pending-tool-calls.js +53 -0
- package/dist/agent/turn/loop/pending-tool-calls.js.map +1 -0
- 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 +32 -18
- package/dist/agent/turn/loop/round-request.js.map +1 -1
- package/dist/agent/turn/loop/run-rounds.js +2 -2
- package/dist/agent/turn/loop/run-rounds.js.map +1 -1
- package/dist/agent/turn/loop/stream-session.d.ts +5 -7
- package/dist/agent/turn/loop/stream-session.js +43 -31
- package/dist/agent/turn/loop/stream-session.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/single-tool.js +4 -1
- package/dist/agent/turn/tool-execution/single-tool.js.map +1 -1
- package/dist/agent/turn/tool-result-recorder.js +1 -0
- package/dist/agent/turn/tool-result-recorder.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 +2 -0
- package/dist/app/adapters/agent-event-adapter.js +32 -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 +3 -0
- package/dist/app/adapters/current-store-adapter.js.map +1 -1
- package/dist/app/commands/catalog.js +10 -4
- package/dist/app/commands/catalog.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.js +34 -3
- package/dist/app/controllers/session-controller.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 +5 -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 +7 -0
- package/dist/app/ports/transcript-item.d.ts +2 -0
- package/dist/classic/app/app-wiring.d.ts +5 -2
- package/dist/classic/app/app-wiring.js +7 -3
- 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 +7 -9
- 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 +0 -3
- package/dist/classic/app/wiring-interactions.js +6 -28
- 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 +11 -1
- 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 +5 -2
- 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 +22 -7
- package/dist/classic/blocks/thinking-lines.js.map +1 -1
- package/dist/classic/blocks/tool-lines.js +9 -4
- 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/start-classic.js +4 -1
- 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/feed-blocks.js +6 -4
- 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/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/plan-panel.js +1 -1
- package/dist/classic/panels/plan-panel.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/doctor.js +2 -1
- package/dist/commands/doctor.js.map +1 -1
- package/dist/index.js +5 -4
- 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 +5 -5
- package/dist/llm/capabilities.js.map +1 -1
- package/dist/llm/capability/state.d.ts +1 -1
- package/dist/llm/capability/tool-dialect.js +1 -0
- package/dist/llm/capability/tool-dialect.js.map +1 -1
- package/dist/llm/capability/vision-patterns.js +1 -0
- package/dist/llm/capability/vision-patterns.js.map +1 -1
- package/dist/llm/capability/vision-registry.js +1 -1
- package/dist/llm/capability/vision-registry.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-models.js +11 -2
- package/dist/llm/freebuff-models.js.map +1 -1
- package/dist/llm/freebuff.js +2 -1
- 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/hinoki-models.d.ts +3 -0
- package/dist/llm/hinoki-models.js +52 -0
- package/dist/llm/hinoki-models.js.map +1 -0
- package/dist/llm/hinoki-profile.d.ts +4 -0
- package/dist/llm/hinoki-profile.js +58 -0
- package/dist/llm/hinoki-profile.js.map +1 -0
- package/dist/llm/hinoki.d.ts +3 -0
- package/dist/llm/hinoki.js +149 -0
- package/dist/llm/hinoki.js.map +1 -0
- 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/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.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-identity.js +5 -0
- package/dist/llm/provider-identity.js.map +1 -1
- package/dist/llm/provider-info-text.js +24 -1
- package/dist/llm/provider-info-text.js.map +1 -1
- package/dist/llm/provider-model-layers.js +7 -0
- package/dist/llm/provider-model-layers.js.map +1 -1
- package/dist/llm/provider-profile-layers.js +5 -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 +5 -1
- package/dist/llm/provider-profiles.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/reasoning-capability.js +1 -0
- package/dist/llm/reasoning-capability.js.map +1 -1
- package/dist/llm/request-plan.js +4 -2
- package/dist/llm/request-plan.js.map +1 -1
- package/dist/llm/river-models.d.ts +1 -0
- package/dist/llm/river-models.js +3 -0
- package/dist/llm/river-models.js.map +1 -1
- package/dist/llm/routing/provider-selection.js +3 -0
- package/dist/llm/routing/provider-selection.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 +9 -5
- package/dist/llm/wire/chat-body.js.map +1 -1
- package/dist/llm/wire/openai-stream.js +2 -1
- package/dist/llm/wire/openai-stream.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 +3 -0
- package/dist/noninteractive/stream-renderer.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/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 +6 -0
- package/dist/safety/tool-classification.js.map +1 -1
- package/dist/skills/bundled-catalog.generated.d.ts +2 -0
- package/dist/skills/bundled-catalog.generated.js +25 -0
- package/dist/skills/bundled-catalog.generated.js.map +1 -0
- package/dist/skills/bundled-content.generated.d.ts +1 -0
- package/dist/skills/bundled-content.generated.js +20 -0
- package/dist/skills/bundled-content.generated.js.map +1 -0
- package/dist/skills/bundled.d.ts +4 -0
- package/dist/skills/bundled.js +111 -0
- package/dist/skills/bundled.js.map +1 -0
- package/dist/skills/catalog.js +7 -4
- package/dist/skills/catalog.js.map +1 -1
- package/dist/skills/discover.js +1 -0
- package/dist/skills/discover.js.map +1 -1
- package/dist/skills/registry.js +24 -16
- package/dist/skills/registry.js.map +1 -1
- package/dist/skills/types.d.ts +9 -1
- package/dist/skills/types.js.map +1 -1
- package/dist/store/config/endpoints.js +1 -0
- package/dist/store/config/endpoints.js.map +1 -1
- package/dist/store/config.js +2 -0
- package/dist/store/config.js.map +1 -1
- package/dist/store/history/jsonl-backend.d.ts +0 -1
- package/dist/store/history/jsonl-backend.js +3 -136
- package/dist/store/history/jsonl-backend.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.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 -16
- 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-index.d.ts +0 -2
- package/dist/store/history-index.js +0 -16
- package/dist/store/history-index.js.map +1 -1
- package/dist/store/history.d.ts +2 -0
- package/dist/store/history.js +76 -56
- package/dist/store/history.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 +6 -0
- package/dist/store/session-workspace.js.map +1 -1
- package/dist/tools/definitions/aggregate.js +9 -1
- package/dist/tools/definitions/aggregate.js.map +1 -1
- package/dist/tools/definitions/files.js +4 -4
- package/dist/tools/definitions/files.js.map +1 -1
- package/dist/tools/definitions/fs-read.js +2 -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.js +2 -1
- package/dist/tools/definitions.js.map +1 -1
- package/dist/tools/fs/mutations.js +1 -1
- package/dist/tools/fs/mutations.js.map +1 -1
- package/dist/tools/fs/read-input.js +33 -20
- package/dist/tools/fs/read-input.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/registry.d.ts +1 -0
- package/dist/tools/registry.js +3 -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/skills.js +11 -1
- package/dist/tools/skills.js.map +1 -1
- package/dist/tui-v2/app/App.js +5 -9
- package/dist/tui-v2/app/App.js.map +1 -1
- package/dist/tui-v2/app/layout-widths.js +3 -2
- 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/patch-opentui-wheel.d.ts +9 -0
- package/dist/tui-v2/bootstrap/patch-opentui-wheel.js +23 -0
- package/dist/tui-v2/bootstrap/patch-opentui-wheel.js.map +1 -0
- package/dist/tui-v2/bootstrap/runtime-view.js +4 -0
- package/dist/tui-v2/bootstrap/runtime-view.js.map +1 -1
- package/dist/tui-v2/bootstrap/start-tui-v2.js +8 -1
- 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/pager/pager.js +2 -2
- package/dist/tui-v2/components/pager/pager.js.map +1 -1
- package/dist/tui-v2/components/plan/plan-view.js +24 -4
- 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/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/linkable-text.d.ts +2 -0
- package/dist/tui-v2/components/transcript/linkable-text.js +22 -2
- package/dist/tui-v2/components/transcript/linkable-text.js.map +1 -1
- package/dist/tui-v2/components/transcript/pending-arguments.d.ts +6 -0
- package/dist/tui-v2/components/transcript/pending-arguments.js +16 -0
- package/dist/tui-v2/components/transcript/pending-arguments.js.map +1 -0
- 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 +37 -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 +4 -3
- package/dist/tui-v2/components/transcript/tool-card.js.map +1 -1
- 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 +37 -0
- package/dist/tui-v2/components/transcript/transcript-scroll-port.js.map +1 -1
- package/dist/tui-v2/components/transcript/transcript-view.js +159 -109
- package/dist/tui-v2/components/transcript/transcript-view.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/types.d.ts +10 -7
- package/dist/types.js +1 -0
- 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/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 +4 -0
- package/dist/ui-core/bootstrap/lifecycle.js +27 -4
- package/dist/ui-core/bootstrap/lifecycle.js.map +1 -1
- package/dist/ui-core/commands/command-handlers.js +2 -0
- package/dist/ui-core/commands/command-handlers.js.map +1 -1
- package/dist/ui-core/commands/picker-commands.d.ts +6 -2
- package/dist/ui-core/commands/picker-commands.js +31 -17
- package/dist/ui-core/commands/picker-commands.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 +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 +2 -2
- package/dist/ui-core/layout/compute-layout.js +3 -3
- package/dist/ui-core/layout/compute-layout.js.map +1 -1
- package/dist/ui-core/motion/wheel-scroll.d.ts +9 -0
- package/dist/ui-core/motion/wheel-scroll.js +36 -0
- package/dist/ui-core/motion/wheel-scroll.js.map +1 -0
- 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 +146 -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/bold-lines.d.ts +1 -0
- package/dist/ui-core/rendering/markdown/bold-lines.js +79 -0
- package/dist/ui-core/rendering/markdown/bold-lines.js.map +1 -0
- package/dist/ui-core/rendering/markdown.d.ts +1 -0
- package/dist/ui-core/rendering/markdown.js +19 -13
- 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 +8 -0
- package/dist/ui-core/rendering/open-tool-output.js.map +1 -1
- package/dist/ui-core/rendering/pending-arguments.d.ts +2 -0
- package/dist/ui-core/rendering/pending-arguments.js +6 -0
- package/dist/ui-core/rendering/pending-arguments.js.map +1 -0
- package/dist/ui-core/rendering/plan-view.js +0 -4
- 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 +1 -0
- package/dist/ui-core/rendering/render-markdown-lines.js.map +1 -1
- package/dist/ui-core/rendering/streaming-markdown.js +1 -1
- package/dist/ui-core/rendering/streaming-markdown.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/text-width.d.ts +1 -0
- package/dist/ui-core/rendering/text-width.js +22 -2
- 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.js +47 -64
- 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/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.d.ts +2 -2
- package/dist/ui-core/state/transcript/apply-app-event.js +164 -384
- package/dist/ui-core/state/transcript/apply-app-event.js.map +1 -1
- package/dist/ui-core/state/transcript/tool-lifecycle.d.ts +19 -0
- package/dist/ui-core/state/transcript/tool-lifecycle.js +102 -0
- package/dist/ui-core/state/transcript/tool-lifecycle.js.map +1 -0
- package/dist/ui-core/state/transcript-hydrate.js +3 -0
- package/dist/ui-core/state/transcript-hydrate.js.map +1 -1
- package/dist/ui-core/state/transcript-types.d.ts +3 -0
- package/dist/ui-core/state/transcript-types.js.map +1 -1
- package/dist/ui-core/state/transcript-window.d.ts +9 -0
- package/dist/ui-core/state/transcript-window.js +9 -0
- 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/guides/security-skill.md +59 -0
- package/package.json +11 -3
- package/resources/skills/clai-superman-skill/SKILL.md +73 -0
- package/resources/skills/clai-superman-skill/references/ai-agents.md +51 -0
- package/resources/skills/clai-superman-skill/references/cloud-platform.md +48 -0
- package/resources/skills/clai-superman-skill/references/code-supply-chain.md +61 -0
- package/resources/skills/clai-superman-skill/references/crypto-contracts.md +46 -0
- package/resources/skills/clai-superman-skill/references/evidence-reporting.md +86 -0
- package/resources/skills/clai-superman-skill/references/identity-ad.md +51 -0
- package/resources/skills/clai-superman-skill/references/mobile-client.md +52 -0
- package/resources/skills/clai-superman-skill/references/novel-research.md +97 -0
- package/resources/skills/clai-superman-skill/references/operations.md +109 -0
- package/resources/skills/clai-superman-skill/references/security-operations.md +55 -0
- package/resources/skills/clai-superman-skill/references/sources.md +51 -0
- package/resources/skills/clai-superman-skill/references/systems-protocols.md +52 -0
- package/resources/skills/clai-superman-skill/references/web-api.md +65 -0
- package/resources/skills/clai-superman-skill/references/wireless-iot-ot.md +49 -0
- package/test/fixtures/security-skill-scenarios.json +191 -0
- 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/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
|
@@ -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>;
|
package/dist/rea/jdk.js
ADDED
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
import { execFile } from "node:child_process";
|
|
2
|
+
import { mkdir, readdir, rm, stat } from "node:fs/promises";
|
|
3
|
+
import { join } from "node:path";
|
|
4
|
+
import { promisify } from "node:util";
|
|
5
|
+
import { withMcpStorageLock } from "../mcp/storage-lock.js";
|
|
6
|
+
import { downloadFile, fetchJsonValue } from "./download.js";
|
|
7
|
+
import { clearStaging, discardTree, engineRoots, removeTree, stagingName, updateEngineSettings, windowsPathProblem } from "./engines.js";
|
|
8
|
+
import { currentHost } from "./ghidra.js";
|
|
9
|
+
import { publish, reaRoot } from "./install.js";
|
|
10
|
+
import { ensureFreeSpace, extractZip } from "./zip.js";
|
|
11
|
+
export const JDK_MAJOR = 21;
|
|
12
|
+
const ASSETS_HOST = ["api.adoptium.net"];
|
|
13
|
+
const DOWNLOAD_HOSTS = ["github.com", "*.githubusercontent.com"];
|
|
14
|
+
const RELEASE_PREFIX = `https://github.com/adoptium/temurin${JDK_MAJOR}-binaries/releases/download/`;
|
|
15
|
+
const MIN_ARCHIVE_BYTES = 50_000_000;
|
|
16
|
+
const MAX_ARCHIVE_BYTES = 800_000_000;
|
|
17
|
+
const MAX_EXTRACTED_BYTES = 1_500_000_000;
|
|
18
|
+
const MAX_ENTRIES = 20_000;
|
|
19
|
+
const EXTRACTED_BYTES = 450_000_000;
|
|
20
|
+
const JDK_DIRECTORY = /^jdk-\d/;
|
|
21
|
+
const DEEPEST_ENTRY_CHARS = 80;
|
|
22
|
+
const run = promisify(execFile);
|
|
23
|
+
function isRecord(value) {
|
|
24
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
25
|
+
}
|
|
26
|
+
export function temurinQuery(host, musl = false) {
|
|
27
|
+
const architecture = host.arch === "x64" ? "x64" : host.arch === "arm64" ? "aarch64" : undefined;
|
|
28
|
+
if (!architecture)
|
|
29
|
+
return undefined;
|
|
30
|
+
if (host.platform === "darwin")
|
|
31
|
+
return { os: "mac", architecture };
|
|
32
|
+
if (host.platform === "win32")
|
|
33
|
+
return architecture === "x64" ? { os: "windows", architecture } : undefined;
|
|
34
|
+
if (host.platform === "linux")
|
|
35
|
+
return musl ? undefined : { os: "linux", architecture };
|
|
36
|
+
return undefined;
|
|
37
|
+
}
|
|
38
|
+
export function selectTemurinRelease(assets) {
|
|
39
|
+
if (!Array.isArray(assets))
|
|
40
|
+
throw new Error("Unexpected JDK release listing");
|
|
41
|
+
for (const asset of assets) {
|
|
42
|
+
if (!isRecord(asset) || !isRecord(asset.binary) || !isRecord(asset.binary.package))
|
|
43
|
+
continue;
|
|
44
|
+
const { link, checksum, size, name } = asset.binary.package;
|
|
45
|
+
const release = typeof asset.release_name === "string" ? asset.release_name : "";
|
|
46
|
+
if (typeof link !== "string" || !link.startsWith(RELEASE_PREFIX) || typeof checksum !== "string" || !/^[0-9a-f]{64}$/.test(checksum))
|
|
47
|
+
continue;
|
|
48
|
+
if (typeof size !== "number" || !Number.isInteger(size) || size < MIN_ARCHIVE_BYTES || size > MAX_ARCHIVE_BYTES)
|
|
49
|
+
continue;
|
|
50
|
+
if (!new RegExp(`^jdk-${JDK_MAJOR}[0-9A-Za-z.+_-]*$`).test(release))
|
|
51
|
+
continue;
|
|
52
|
+
const format = typeof name === "string" && name.endsWith(".tar.gz") ? "tar.gz" : typeof name === "string" && name.endsWith(".zip") ? "zip" : undefined;
|
|
53
|
+
if (format)
|
|
54
|
+
return { name: release, url: link, bytes: size, sha256: checksum, format };
|
|
55
|
+
}
|
|
56
|
+
throw new Error(`No official Temurin ${JDK_MAJOR} JDK with a published checksum was found for this system`);
|
|
57
|
+
}
|
|
58
|
+
export async function resolveJdkRelease(host = currentHost(), options = {}) {
|
|
59
|
+
const query = temurinQuery(host, options.musl ?? host.musl ?? false);
|
|
60
|
+
if (!query) {
|
|
61
|
+
return { ok: false, reason: `No official portable JDK ${JDK_MAJOR} exists for ${host.platform}/${host.arch}${host.platform === "linux" ? " (musl libc is not covered)" : ""}. Install a 64-bit JDK ${JDK_MAJOR} or newer yourself and run /rea engines use java <JDK home>.` };
|
|
62
|
+
}
|
|
63
|
+
const url = `https://api.adoptium.net/v3/assets/latest/${JDK_MAJOR}/hotspot?architecture=${query.architecture}&image_type=jdk&os=${query.os}&vendor=eclipse`;
|
|
64
|
+
const assets = await fetchJsonValue(url, { hosts: ASSETS_HOST, maxBytes: 2 * 1024 * 1024, signal: options.signal, fetch: options.fetch });
|
|
65
|
+
return { ok: true, release: selectTemurinRelease(assets) };
|
|
66
|
+
}
|
|
67
|
+
export function jdkDiskBytes(release) {
|
|
68
|
+
return release.bytes + EXTRACTED_BYTES;
|
|
69
|
+
}
|
|
70
|
+
export function javaHomeIn(tree, platform) {
|
|
71
|
+
return platform === "darwin" ? join(tree, "Contents", "Home") : tree;
|
|
72
|
+
}
|
|
73
|
+
export function javaExecutable(home, platform = process.platform) {
|
|
74
|
+
return join(home, "bin", platform === "win32" ? "java.exe" : "java");
|
|
75
|
+
}
|
|
76
|
+
export async function javaVersion(home, platform = process.platform) {
|
|
77
|
+
try {
|
|
78
|
+
const { stderr, stdout } = await run(javaExecutable(home, platform), ["-version"], { timeout: 30_000, windowsHide: true, maxBuffer: 256 * 1024 });
|
|
79
|
+
return /version "([^"]+)"/.exec(`${stderr}\n${stdout}`)?.[1];
|
|
80
|
+
}
|
|
81
|
+
catch {
|
|
82
|
+
return undefined;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
async function extractTarball(archive, destination, signal) {
|
|
86
|
+
const { x } = await import("tar");
|
|
87
|
+
let total = 0;
|
|
88
|
+
let entries = 0;
|
|
89
|
+
await mkdir(destination, { recursive: true, mode: 0o700 });
|
|
90
|
+
await x({
|
|
91
|
+
file: archive, cwd: destination, strip: 1, strict: true, preservePaths: false, preserveOwner: false, noMtime: true,
|
|
92
|
+
maxDecompressionRatio: 200,
|
|
93
|
+
filter: (_path, entry) => {
|
|
94
|
+
entries += 1;
|
|
95
|
+
total += "size" in entry ? entry.size : 0;
|
|
96
|
+
if (entries > MAX_ENTRIES || total > MAX_EXTRACTED_BYTES)
|
|
97
|
+
throw new Error("The JDK archive exceeds extraction limits");
|
|
98
|
+
return true;
|
|
99
|
+
},
|
|
100
|
+
});
|
|
101
|
+
signal?.throwIfAborted();
|
|
102
|
+
}
|
|
103
|
+
const operations = new Map();
|
|
104
|
+
async function install(options, root) {
|
|
105
|
+
const { release, signal, onProgress } = options;
|
|
106
|
+
const host = options.host ?? currentHost();
|
|
107
|
+
const roots = engineRoots(root);
|
|
108
|
+
const target = join(roots.java, release.name);
|
|
109
|
+
const home = javaHomeIn(target, host.platform);
|
|
110
|
+
signal?.throwIfAborted();
|
|
111
|
+
const present = await stat(javaExecutable(home, host.platform)).then((info) => info.isFile(), () => false);
|
|
112
|
+
const probe = options.probe ?? javaVersion;
|
|
113
|
+
const known = present ? await probe(home, host.platform) : undefined;
|
|
114
|
+
if (known) {
|
|
115
|
+
await updateEngineSettings((current) => ({ ...current, java: { home, managed: true, version: release.name } }), root, signal);
|
|
116
|
+
return { ok: true, home, version: known, changed: false };
|
|
117
|
+
}
|
|
118
|
+
const tooDeep = windowsPathProblem(host.platform, roots.java, DEEPEST_ENTRY_CHARS);
|
|
119
|
+
if (tooDeep)
|
|
120
|
+
throw new Error(tooDeep);
|
|
121
|
+
await mkdir(roots.java, { recursive: true, mode: 0o700 });
|
|
122
|
+
await clearStaging(roots.java);
|
|
123
|
+
await ensureFreeSpace(roots.java, jdkDiskBytes(release));
|
|
124
|
+
const staging = join(roots.java, stagingName());
|
|
125
|
+
await mkdir(staging, { mode: 0o700 });
|
|
126
|
+
try {
|
|
127
|
+
const archive = join(staging, `jdk.${release.format}`);
|
|
128
|
+
onProgress?.({ phase: "downloading", message: `Downloading JDK ${release.name}`, totalBytes: release.bytes });
|
|
129
|
+
await downloadFile(release.url, archive, {
|
|
130
|
+
hosts: DOWNLOAD_HOSTS, maxBytes: MAX_ARCHIVE_BYTES, sha256: release.sha256, bytes: release.bytes, signal, fetch: options.fetch,
|
|
131
|
+
onProgress: (receivedBytes, totalBytes) => onProgress?.({ phase: "downloading", message: `Downloading JDK ${release.name}`, receivedBytes, totalBytes: totalBytes ?? release.bytes }),
|
|
132
|
+
});
|
|
133
|
+
const tree = join(staging, "t");
|
|
134
|
+
onProgress?.({ phase: "extracting", message: `Extracting JDK ${release.name}` });
|
|
135
|
+
if (release.format === "zip")
|
|
136
|
+
await extractZip(archive, tree, { strip: 1, signal, limits: { totalBytes: MAX_EXTRACTED_BYTES, entries: MAX_ENTRIES } });
|
|
137
|
+
else
|
|
138
|
+
await extractTarball(archive, tree, signal);
|
|
139
|
+
await rm(archive, { force: true });
|
|
140
|
+
onProgress?.({ phase: "verifying", message: `Checking the JDK runs on this machine` });
|
|
141
|
+
const version = await probe(javaHomeIn(tree, host.platform), host.platform);
|
|
142
|
+
if (!version)
|
|
143
|
+
throw new Error(`The downloaded JDK does not run on ${host.platform}/${host.arch}`);
|
|
144
|
+
signal?.throwIfAborted();
|
|
145
|
+
if (await discardTree(target) === "busy")
|
|
146
|
+
throw new Error(`${target} is in use by another program. Stop REA with /rea disable, then run the install again.`);
|
|
147
|
+
await publish(tree, target);
|
|
148
|
+
await updateEngineSettings((current) => ({ ...current, java: { home, managed: true, version: release.name } }), root, signal);
|
|
149
|
+
const siblings = await readdir(roots.java, { withFileTypes: true }).catch(() => []);
|
|
150
|
+
await Promise.all(siblings
|
|
151
|
+
.filter((entry) => entry.isDirectory() && entry.name !== release.name && JDK_DIRECTORY.test(entry.name))
|
|
152
|
+
.map((entry) => discardTree(join(roots.java, entry.name)).catch(() => undefined)));
|
|
153
|
+
return { ok: true, home, version, changed: true };
|
|
154
|
+
}
|
|
155
|
+
finally {
|
|
156
|
+
await removeTree(staging).catch(() => undefined);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
export function installJdk(options) {
|
|
160
|
+
const root = options.root ?? reaRoot();
|
|
161
|
+
const key = `jdk:${engineRoots(root).java}`;
|
|
162
|
+
const running = operations.get(key);
|
|
163
|
+
if (running)
|
|
164
|
+
return running;
|
|
165
|
+
const promise = withMcpStorageLock(`rea-engine:${key}`, () => install(options, root), options.signal)
|
|
166
|
+
.catch((error) => ({ ok: false, reason: error instanceof Error ? error.message : String(error) }))
|
|
167
|
+
.finally(() => { operations.delete(key); });
|
|
168
|
+
operations.set(key, promise);
|
|
169
|
+
return promise;
|
|
170
|
+
}
|
|
171
|
+
//# sourceMappingURL=jdk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jdk.js","sourceRoot":"","sources":["../../src/rea/jdk.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { ReaInstallOptions } from "./types.js";
|
|
2
|
+
export interface ReaNode {
|
|
3
|
+
readonly node: string;
|
|
4
|
+
readonly npm: string;
|
|
5
|
+
}
|
|
6
|
+
export declare function supportsReaNode(version: string): boolean;
|
|
7
|
+
export declare function reaEnvironment(node: string): NodeJS.ProcessEnv;
|
|
8
|
+
export declare function runReaNode(node: string, args: readonly string[], options?: {
|
|
9
|
+
cwd?: string;
|
|
10
|
+
signal?: AbortSignal;
|
|
11
|
+
timeout?: number;
|
|
12
|
+
env?: Readonly<Record<string, string>>;
|
|
13
|
+
maxBuffer?: number;
|
|
14
|
+
}): Promise<string>;
|
|
15
|
+
export declare function isNodeExecutable(path: string): boolean;
|
|
16
|
+
export declare function nodeTarget(platform: NodeJS.Platform, arch: string, musl?: boolean): string;
|
|
17
|
+
export declare function downloadReaNode(directory: string, host: {
|
|
18
|
+
readonly platform: NodeJS.Platform;
|
|
19
|
+
readonly arch: string;
|
|
20
|
+
readonly musl?: boolean;
|
|
21
|
+
}, options?: ReaInstallOptions): Promise<ReaNode>;
|
|
22
|
+
export declare function resolveReaNode(directory: string, options?: ReaInstallOptions): Promise<ReaNode>;
|