cli-jaw 2.2.15 → 2.2.17
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/README.md +23 -2
- package/dist/bin/cli-jaw.js +39 -0
- package/dist/bin/cli-jaw.js.map +1 -1
- package/dist/bin/commands/_shared/dashboard-client.js +42 -0
- package/dist/bin/commands/_shared/dashboard-client.js.map +1 -0
- package/dist/bin/commands/_shared/search-format.js +40 -0
- package/dist/bin/commands/_shared/search-format.js.map +1 -0
- package/dist/bin/commands/chat-search.js +5 -3
- package/dist/bin/commands/chat-search.js.map +1 -1
- package/dist/bin/commands/dashboard-chat.js +14 -31
- package/dist/bin/commands/dashboard-chat.js.map +1 -1
- package/dist/bin/commands/dashboard-memory.js +12 -49
- package/dist/bin/commands/dashboard-memory.js.map +1 -1
- package/dist/bin/commands/doctor.js +56 -11
- package/dist/bin/commands/doctor.js.map +1 -1
- package/dist/bin/commands/init.js +31 -1
- package/dist/bin/commands/init.js.map +1 -1
- package/dist/bin/commands/memory.js +5 -1
- package/dist/bin/commands/memory.js.map +1 -1
- package/dist/bin/commands/provider.js +23 -0
- package/dist/bin/commands/provider.js.map +1 -1
- package/dist/bin/commands/slack.js +57 -3
- package/dist/bin/commands/slack.js.map +1 -1
- package/dist/bin/commands/tui/input-handler.js +1 -1
- package/dist/bin/commands/tui/input-handler.js.map +1 -1
- package/dist/bin/commands/tui/slash-command-runner.js +4 -5
- package/dist/bin/commands/tui/slash-command-runner.js.map +1 -1
- package/dist/bin/postinstall.js +16 -18
- package/dist/bin/postinstall.js.map +1 -1
- package/dist/lib/media-kind.js +28 -0
- package/dist/lib/media-kind.js.map +1 -0
- package/dist/lib/upload.js +27 -10
- package/dist/lib/upload.js.map +1 -1
- package/dist/server.js +35 -51
- package/dist/server.js.map +1 -1
- package/dist/src/agent/args.js +34 -0
- package/dist/src/agent/args.js.map +1 -1
- package/dist/src/agent/codex-app-client.js +1016 -135
- package/dist/src/agent/codex-app-client.js.map +1 -1
- package/dist/src/agent/codex-app-events.js +72 -1
- package/dist/src/agent/codex-app-events.js.map +1 -1
- package/dist/src/agent/codex-host-pool.js +617 -0
- package/dist/src/agent/codex-host-pool.js.map +1 -0
- package/dist/src/agent/jwc-runtime.js +12 -4
- package/dist/src/agent/jwc-runtime.js.map +1 -1
- package/dist/src/agent/kiro-auth.js +10 -4
- package/dist/src/agent/kiro-auth.js.map +1 -1
- package/dist/src/agent/kiro-runtime.js +45 -8
- package/dist/src/agent/kiro-runtime.js.map +1 -1
- package/dist/src/agent/lifecycle-handler.js +75 -52
- package/dist/src/agent/lifecycle-handler.js.map +1 -1
- package/dist/src/agent/memory-flush-controller.js +241 -33
- package/dist/src/agent/memory-flush-controller.js.map +1 -1
- package/dist/src/agent/prompt-context.js +4 -0
- package/dist/src/agent/prompt-context.js.map +1 -1
- package/dist/src/agent/runtime-pool.js +64 -34
- package/dist/src/agent/runtime-pool.js.map +1 -1
- package/dist/src/agent/session-persistence.js +71 -15
- package/dist/src/agent/session-persistence.js.map +1 -1
- package/dist/src/agent/spawn/queue.js +319 -162
- package/dist/src/agent/spawn/queue.js.map +1 -1
- package/dist/src/agent/spawn.js +581 -268
- package/dist/src/agent/spawn.js.map +1 -1
- package/dist/src/bgtask/types.js +1 -1
- package/dist/src/bgtask/types.js.map +1 -1
- package/dist/src/browser/adaptive-fetch/safety.js +25 -0
- package/dist/src/browser/adaptive-fetch/safety.js.map +1 -1
- package/dist/src/browser/connection.js +2 -8
- package/dist/src/browser/connection.js.map +1 -1
- package/dist/src/cli/capability-probe-worker.js +172 -0
- package/dist/src/cli/capability-probe-worker.js.map +1 -0
- package/dist/src/cli/capability-probe.js +83 -0
- package/dist/src/cli/capability-probe.js.map +1 -0
- package/dist/src/cli/claude-models.js +2 -2
- package/dist/src/cli/claude-models.js.map +1 -1
- package/dist/src/cli/cli-status-worker.js +296 -0
- package/dist/src/cli/cli-status-worker.js.map +1 -0
- package/dist/src/cli/cli-status.js +81 -0
- package/dist/src/cli/cli-status.js.map +1 -0
- package/dist/src/cli/command-context.js +17 -5
- package/dist/src/cli/command-context.js.map +1 -1
- package/dist/src/cli/compact.js +56 -19
- package/dist/src/cli/compact.js.map +1 -1
- package/dist/src/cli/handlers-runtime.js +6 -4
- package/dist/src/cli/handlers-runtime.js.map +1 -1
- package/dist/src/cli/handlers.js +7 -2
- package/dist/src/cli/handlers.js.map +1 -1
- package/dist/src/cli/opencodex-models.js +5 -32
- package/dist/src/cli/opencodex-models.js.map +1 -1
- package/dist/src/cli/opencodex-runtime.js +82 -0
- package/dist/src/cli/opencodex-runtime.js.map +1 -0
- package/dist/src/cli/readiness.js +35 -18
- package/dist/src/cli/readiness.js.map +1 -1
- package/dist/src/cli/registry-live.js +8 -2
- package/dist/src/cli/registry-live.js.map +1 -1
- package/dist/src/cli/registry.js +1 -1
- package/dist/src/cli/registry.js.map +1 -1
- package/dist/src/core/browser-open-default.js +6 -4
- package/dist/src/core/browser-open-default.js.map +1 -1
- package/dist/src/core/browser-open.js +11 -15
- package/dist/src/core/browser-open.js.map +1 -1
- package/dist/src/core/bus.js +7 -1
- package/dist/src/core/bus.js.map +1 -1
- package/dist/src/core/chat-sessions.js +121 -12
- package/dist/src/core/chat-sessions.js.map +1 -1
- package/dist/src/core/cli-detect.js +148 -4
- package/dist/src/core/cli-detect.js.map +1 -1
- package/dist/src/core/codex-config.js +21 -0
- package/dist/src/core/codex-config.js.map +1 -1
- package/dist/src/core/compact.js +73 -21
- package/dist/src/core/compact.js.map +1 -1
- package/dist/src/core/config.js +449 -20
- package/dist/src/core/config.js.map +1 -1
- package/dist/src/core/db.js +225 -0
- package/dist/src/core/db.js.map +1 -1
- package/dist/src/core/event-bus.js +49 -4
- package/dist/src/core/event-bus.js.map +1 -1
- package/dist/src/core/event-scope.js +100 -0
- package/dist/src/core/event-scope.js.map +1 -0
- package/dist/src/core/install-integrity.js +176 -0
- package/dist/src/core/install-integrity.js.map +1 -0
- package/dist/src/core/main-session.js +64 -21
- package/dist/src/core/main-session.js.map +1 -1
- package/dist/src/core/message-summary.js +12 -2
- package/dist/src/core/message-summary.js.map +1 -1
- package/dist/src/core/platform-kind.js +139 -0
- package/dist/src/core/platform-kind.js.map +1 -0
- package/dist/src/core/rate-limit.js +156 -0
- package/dist/src/core/rate-limit.js.map +1 -0
- package/dist/src/core/runtime-settings.js +165 -17
- package/dist/src/core/runtime-settings.js.map +1 -1
- package/dist/src/core/session-context.js +7 -0
- package/dist/src/core/session-context.js.map +1 -0
- package/dist/src/core/session-ops.js +53 -9
- package/dist/src/core/session-ops.js.map +1 -1
- package/dist/src/core/settings-merge.js +105 -3
- package/dist/src/core/settings-merge.js.map +1 -1
- package/dist/src/core/settings-watch.js +29 -5
- package/dist/src/core/settings-watch.js.map +1 -1
- package/dist/src/core/widget-watcher.js +15 -2
- package/dist/src/core/widget-watcher.js.map +1 -1
- package/dist/src/discord/bot.js +5 -2
- package/dist/src/discord/bot.js.map +1 -1
- package/dist/src/discord/commands.js +4 -4
- package/dist/src/discord/commands.js.map +1 -1
- package/dist/src/goal/heartbeat.js +1 -1
- package/dist/src/goal/heartbeat.js.map +1 -1
- package/dist/src/goal/runtime.js +1 -1
- package/dist/src/goal/runtime.js.map +1 -1
- package/dist/src/goal-run/controller.js +2 -2
- package/dist/src/goal-run/controller.js.map +1 -1
- package/dist/src/manager/internal-fetch.js +15 -0
- package/dist/src/manager/internal-fetch.js.map +1 -0
- package/dist/src/manager/logs.js +2 -1
- package/dist/src/manager/logs.js.map +1 -1
- package/dist/src/manager/memory/chat-federation.js +104 -11
- package/dist/src/manager/memory/chat-federation.js.map +1 -1
- package/dist/src/manager/memory/federation.js +100 -0
- package/dist/src/manager/memory/federation.js.map +1 -1
- package/dist/src/manager/metadata.js +4 -1
- package/dist/src/manager/metadata.js.map +1 -1
- package/dist/src/manager/notes/assets.js +1 -1
- package/dist/src/manager/notes/assets.js.map +1 -1
- package/dist/src/manager/notes/frontmatter.js +5 -49
- package/dist/src/manager/notes/frontmatter.js.map +1 -1
- package/dist/src/manager/notes/link-resolver.js +2 -2
- package/dist/src/manager/notes/link-resolver.js.map +1 -1
- package/dist/src/manager/notes/remote-assets.js +1 -1
- package/dist/src/manager/notes/remote-assets.js.map +1 -1
- package/dist/src/manager/notes/routes.js +2 -2
- package/dist/src/manager/notes/routes.js.map +1 -1
- package/dist/src/manager/notes/store.js +2 -2
- package/dist/src/manager/notes/store.js.map +1 -1
- package/dist/src/manager/notes/trash.js +1 -1
- package/dist/src/manager/notes/trash.js.map +1 -1
- package/dist/src/manager/notes/vault-index.js +2 -2
- package/dist/src/manager/notes/vault-index.js.map +1 -1
- package/dist/src/manager/notes/wiki-links.js +1 -1
- package/dist/src/manager/notes/wiki-links.js.map +1 -1
- package/dist/src/manager/notes/wiki-routes.js +84 -0
- package/dist/src/manager/notes/wiki-routes.js.map +1 -0
- package/dist/src/manager/proxy.js +1 -0
- package/dist/src/manager/proxy.js.map +1 -1
- package/dist/src/manager/routes/dashboard-memory.js +24 -1
- package/dist/src/manager/routes/dashboard-memory.js.map +1 -1
- package/dist/src/manager/routes/runtime-monitor.js +1 -1
- package/dist/src/manager/routes/runtime-monitor.js.map +1 -1
- package/dist/src/manager/scan.js +5 -3
- package/dist/src/manager/scan.js.map +1 -1
- package/dist/src/manager/server.js +20 -6
- package/dist/src/manager/server.js.map +1 -1
- package/dist/src/manager/telegram-hub/hub-bot.js +4 -3
- package/dist/src/manager/telegram-hub/hub-bot.js.map +1 -1
- package/dist/src/manager/worker-events.js +2 -1
- package/dist/src/manager/worker-events.js.map +1 -1
- package/dist/src/memory/heartbeat.js +6 -5
- package/dist/src/memory/heartbeat.js.map +1 -1
- package/dist/src/memory/indexing.js +162 -45
- package/dist/src/memory/indexing.js.map +1 -1
- package/dist/src/messaging/channel-validate.js +14 -1
- package/dist/src/messaging/channel-validate.js.map +1 -1
- package/dist/src/messaging/redact.js +2 -1
- package/dist/src/messaging/redact.js.map +1 -1
- package/dist/src/messaging/session-key.js +21 -2
- package/dist/src/messaging/session-key.js.map +1 -1
- package/dist/src/notes/constants.js.map +1 -0
- package/dist/src/notes/frontmatter.js +59 -0
- package/dist/src/notes/frontmatter.js.map +1 -0
- package/dist/src/notes/path-guards.js.map +1 -0
- package/dist/src/notes/search.js.map +1 -0
- package/dist/src/orchestrator/attestation.js +1 -1
- package/dist/src/orchestrator/attestation.js.map +1 -1
- package/dist/src/orchestrator/gateway.js +135 -31
- package/dist/src/orchestrator/gateway.js.map +1 -1
- package/dist/src/orchestrator/pipeline.js +53 -21
- package/dist/src/orchestrator/pipeline.js.map +1 -1
- package/dist/src/orchestrator/scope.js +36 -2
- package/dist/src/orchestrator/scope.js.map +1 -1
- package/dist/src/orchestrator/session-lanes.js +87 -0
- package/dist/src/orchestrator/session-lanes.js.map +1 -0
- package/dist/src/orchestrator/session-work.js +25 -0
- package/dist/src/orchestrator/session-work.js.map +1 -0
- package/dist/src/orchestrator/state-machine.js +1 -5
- package/dist/src/orchestrator/state-machine.js.map +1 -1
- package/dist/src/orchestrator/worker-registry.js +20 -10
- package/dist/src/orchestrator/worker-registry.js.map +1 -1
- package/dist/src/prompt/builder.js +40 -2
- package/dist/src/prompt/builder.js.map +1 -1
- package/dist/src/prompt/templates/a1-system.md +8 -1
- package/dist/src/routes/agent-control.js +44 -8
- package/dist/src/routes/agent-control.js.map +1 -1
- package/dist/src/routes/chat-sessions.js +34 -6
- package/dist/src/routes/chat-sessions.js.map +1 -1
- package/dist/src/routes/command.js +63 -8
- package/dist/src/routes/command.js.map +1 -1
- package/dist/src/routes/events.js +11 -2
- package/dist/src/routes/events.js.map +1 -1
- package/dist/src/routes/link-preview.js +1 -27
- package/dist/src/routes/link-preview.js.map +1 -1
- package/dist/src/routes/messages.js +6 -5
- package/dist/src/routes/messages.js.map +1 -1
- package/dist/src/routes/messaging.js +45 -1
- package/dist/src/routes/messaging.js.map +1 -1
- package/dist/src/routes/orchestrate.js +53 -33
- package/dist/src/routes/orchestrate.js.map +1 -1
- package/dist/src/routes/search.js +84 -0
- package/dist/src/routes/search.js.map +1 -0
- package/dist/src/routes/session-request.js +29 -0
- package/dist/src/routes/session-request.js.map +1 -0
- package/dist/src/routes/settings.js +110 -3
- package/dist/src/routes/settings.js.map +1 -1
- package/dist/src/routes/static.js +30 -8
- package/dist/src/routes/static.js.map +1 -1
- package/dist/src/routes/system.js +1 -1
- package/dist/src/routes/system.js.map +1 -1
- package/dist/src/routes/wiki.js +122 -0
- package/dist/src/routes/wiki.js.map +1 -0
- package/dist/src/search/contract.js +2 -0
- package/dist/src/search/contract.js.map +1 -0
- package/dist/src/search/coordinator.js +153 -0
- package/dist/src/search/coordinator.js.map +1 -0
- package/dist/src/search/provider.js +40 -0
- package/dist/src/search/provider.js.map +1 -0
- package/dist/src/search/providers/chat.js +115 -0
- package/dist/src/search/providers/chat.js.map +1 -0
- package/dist/src/search/providers/memory.js +53 -0
- package/dist/src/search/providers/memory.js.map +1 -0
- package/dist/src/search/providers/wiki.js +80 -0
- package/dist/src/search/providers/wiki.js.map +1 -0
- package/dist/src/slack/api.js +10 -1
- package/dist/src/slack/api.js.map +1 -1
- package/dist/src/slack/attachment-recovery.js +42 -0
- package/dist/src/slack/attachment-recovery.js.map +1 -0
- package/dist/src/slack/bot.js +120 -41
- package/dist/src/slack/bot.js.map +1 -1
- package/dist/src/slack/commands.js +24 -8
- package/dist/src/slack/commands.js.map +1 -1
- package/dist/src/slack/events.js +12 -1
- package/dist/src/slack/events.js.map +1 -1
- package/dist/src/slack/history.js +108 -0
- package/dist/src/slack/history.js.map +1 -0
- package/dist/src/slack/inbound-file.js +242 -0
- package/dist/src/slack/inbound-file.js.map +1 -0
- package/dist/src/slack/inbound-url.js +39 -0
- package/dist/src/slack/inbound-url.js.map +1 -0
- package/dist/src/slack/ingress.js +140 -0
- package/dist/src/slack/ingress.js.map +1 -0
- package/dist/src/slack/manifest.js +3 -0
- package/dist/src/slack/manifest.js.map +1 -1
- package/dist/src/slack/socket.js +1 -1
- package/dist/src/slack/socket.js.map +1 -1
- package/dist/src/slack/thread-tracker.js +86 -0
- package/dist/src/slack/thread-tracker.js.map +1 -0
- package/dist/src/telegram/bot.js +21 -11
- package/dist/src/telegram/bot.js.map +1 -1
- package/dist/src/wiki/config.js +193 -0
- package/dist/src/wiki/config.js.map +1 -0
- package/dist/src/wiki/entities.js +61 -0
- package/dist/src/wiki/entities.js.map +1 -0
- package/dist/src/wiki/ontology.js +72 -0
- package/dist/src/wiki/ontology.js.map +1 -0
- package/dist/src/wiki/prompt.js +172 -0
- package/dist/src/wiki/prompt.js.map +1 -0
- package/dist/src/wiki/safe-traversal.js +198 -0
- package/dist/src/wiki/safe-traversal.js.map +1 -0
- package/dist/src/wiki/scaffold.js +77 -0
- package/dist/src/wiki/scaffold.js.map +1 -0
- package/package.json +6 -5
- package/public/css/session-hub.css +266 -0
- package/public/dist/assets/AdvancedExport-DYGcCAUq.js +1 -0
- package/public/dist/assets/Agent-CNNQ7KkJ.js +1 -0
- package/public/dist/assets/{DesignPanel-BGMPhZSx.js → DesignPanel-DcL369nB.js} +1 -1
- package/public/dist/assets/{DocPanel-Dz-J_l5M.js → DocPanel-K8A2pm_1.js} +1 -1
- package/public/dist/assets/{FolderPanel-DbPhzzvi.js → FolderPanel-CV52EzwG.js} +1 -1
- package/public/dist/assets/{MilkdownWysiwygEditor-Em7iC6y9.js → MilkdownWysiwygEditor-BKOCDI4Z.js} +1 -1
- package/public/dist/assets/api-B25zNNFJ.js +1 -0
- package/public/dist/assets/{app-DX4e6isX.css → app-DjgGeXhJ.css} +1 -1
- package/public/dist/assets/app-Dsgp4xpU.js +55 -0
- package/public/dist/assets/bgtask-badge-C6h5C-o4.js +1 -0
- package/public/dist/assets/{bgtask-badge-qMkKOZx0.js → bgtask-badge-CpavV0Jc.js} +4 -4
- package/public/dist/assets/{employees-BnobWM_2.js → employees-BJyEgim7.js} +4 -4
- package/public/dist/assets/idb-cache-B5PX63p7.js +1 -0
- package/public/dist/assets/{idb-cache-BzzftUET.js → idb-cache-lOntwU3S.js} +1 -1
- package/public/dist/assets/{iframe-renderer-C5vRbbl9.js → iframe-renderer-B8k3AvTv.js} +12 -12
- package/public/dist/assets/iframe-renderer-BO_GgCTR.js +1 -0
- package/public/dist/assets/manager-LkGs6qEJ.css +1 -0
- package/public/dist/assets/manager-kXYQyMhR.js +13 -0
- package/public/dist/assets/{memory-DF4kPwwC.js → memory-D2RbBVO-.js} +11 -11
- package/public/dist/assets/memory-amsvg4Ey.js +1 -0
- package/public/dist/assets/message-history-BGHZxvgV.js +1 -0
- package/public/dist/assets/message-history-Bw2E_b8L.js +1 -0
- package/public/dist/assets/pi-settings-5HVg1sXJ.js +1 -0
- package/public/dist/assets/render-BkGcpH7z.js +157 -0
- package/public/dist/assets/settings-B1FPORO2.js +56 -0
- package/public/dist/assets/settings-CMN-zN4Q.js +1 -0
- package/public/dist/assets/settings-core-B_OjGYVN.js +1 -0
- package/public/dist/assets/settings-core-CxRwqx86.js +144 -0
- package/public/dist/assets/sidebar-DW78DANx.js +49 -0
- package/public/dist/assets/skills-Dz-9Yrxr.js +1 -0
- package/public/dist/assets/{skills-IGquen_j.js → skills-lWi0ZFiV.js} +6 -6
- package/public/dist/assets/{slash-commands-ZRDOL99E.js → slash-commands-DYOI6nKj.js} +1 -1
- package/public/dist/assets/slash-commands-xJFCdTTM.js +1 -0
- package/public/dist/assets/{trace-drawer-D8To8fYt.js → trace-drawer-DBX9xzmt.js} +1 -1
- package/public/dist/assets/{ui-Hx_mNoDf.js → ui-Bx7eqnXt.js} +1 -1
- package/public/dist/assets/ui-JOcrYeG-.js +1 -0
- package/public/dist/assets/{wiki-link-suggestions-DZQc78gj.js → wiki-link-suggestions-Dp6kBQVu.js} +1 -1
- package/public/dist/index.html +4 -4
- package/public/dist/manager/index.html +2 -2
- package/public/index.html +3 -2
- package/public/js/event-channel.ts +25 -0
- package/public/js/features/channel-onboarding-flow.ts +16 -1
- package/public/js/features/channel-onboarding.ts +20 -2
- package/public/js/features/chat-messages.ts +3 -1
- package/public/js/features/chat-search.ts +2 -1
- package/public/js/features/chat.ts +56 -18
- package/public/js/features/elicitation.ts +15 -0
- package/public/js/features/idb-cache.ts +34 -0
- package/public/js/features/message-history.ts +2 -1
- package/public/js/features/session-hub.ts +334 -0
- package/public/js/features/settings-cli-status-render.ts +1 -1
- package/public/js/features/settings-cli-status.ts +25 -11
- package/public/js/features/settings-core.ts +72 -3
- package/public/js/features/settings-types.ts +32 -0
- package/public/js/features/ui-status.ts +2 -1
- package/public/js/main.ts +20 -0
- package/public/js/render/compose-block.ts +7 -0
- package/public/js/ws.ts +22 -2
- package/public/locales/en.json +46 -4
- package/public/locales/ja.json +46 -4
- package/public/locales/ko.json +46 -4
- package/public/locales/zh.json +46 -4
- package/public/manager/src/App.tsx +1 -1
- package/public/manager/src/InstancePreview.tsx +5 -1
- package/public/manager/src/api.ts +2 -1
- package/public/manager/src/components/InstanceGroups.tsx +10 -0
- package/public/manager/src/components/InstanceListContent.tsx +24 -1
- package/public/manager/src/components/InstanceRow.tsx +33 -3
- package/public/manager/src/components/InstanceSessionList.tsx +132 -0
- package/public/manager/src/hooks/useActiveSessionDisclosure.ts +45 -0
- package/public/manager/src/lib/resilient-fetch.ts +93 -0
- package/public/manager/src/lib/session-store.ts +216 -0
- package/public/manager/src/manager-components.css +97 -0
- package/public/manager/src/settings/pages/AdvancedExport.tsx +12 -2
- package/public/manager/src/settings/pages/Agent.tsx +113 -1
- package/public/manager/src/settings/pages/components/agent/agent-meta.ts +1 -1
- package/scripts/bundle-sidecar.sh +50 -2
- package/scripts/burst-scenario.mjs +72 -0
- package/scripts/check-redaction-sinks.mjs +1 -0
- package/scripts/check-strict-baseline.mjs +1 -1
- package/scripts/ensure-native-modules.cjs +50 -3
- package/scripts/install-risk-gate.mjs +8 -0
- package/scripts/install-wsl.sh +27 -2
- package/scripts/install.ps1 +121 -0
- package/scripts/install.sh +28 -2
- package/scripts/postinstall-guard.cjs +44 -2
- package/scripts/release-gates.mjs +12 -0
- package/dist/src/manager/notes/constants.js.map +0 -1
- package/dist/src/manager/notes/path-guards.js.map +0 -1
- package/dist/src/manager/notes/search.js.map +0 -1
- package/public/dist/assets/AdvancedExport-DsDpqXoH.js +0 -1
- package/public/dist/assets/Agent-BjbZVZ9p.js +0 -1
- package/public/dist/assets/api-C9dOxby7.js +0 -1
- package/public/dist/assets/app-BzD_ZLvt.js +0 -55
- package/public/dist/assets/bgtask-badge-Dqbp-Y4e.js +0 -1
- package/public/dist/assets/idb-cache-ZH6lOebk.js +0 -1
- package/public/dist/assets/iframe-renderer-Df4KIVyx.js +0 -1
- package/public/dist/assets/manager-C4eNDNFt.css +0 -1
- package/public/dist/assets/manager-DaN201mN.js +0 -13
- package/public/dist/assets/memory-D-bULTHl.js +0 -1
- package/public/dist/assets/message-history-C4WOisGx.js +0 -1
- package/public/dist/assets/message-history-ZBoza6ew.js +0 -1
- package/public/dist/assets/pi-settings-CBUGDAuT.js +0 -1
- package/public/dist/assets/render-DYX6GRQ0.js +0 -122
- package/public/dist/assets/settings-DbJpGoaX.js +0 -55
- package/public/dist/assets/settings-SreihUje.js +0 -1
- package/public/dist/assets/settings-core-B1Y5Nb4Z.js +0 -1
- package/public/dist/assets/settings-core-DobZWIZ7.js +0 -140
- package/public/dist/assets/sidebar-Cp22g0Gv.js +0 -49
- package/public/dist/assets/skills-DwPIP08e.js +0 -1
- package/public/dist/assets/slash-commands-BBVfwcnW.js +0 -1
- package/public/dist/assets/ui-CAicpUZc.js +0 -1
- /package/dist/src/{manager/notes → notes}/constants.js +0 -0
- /package/dist/src/{manager/notes → notes}/path-guards.js +0 -0
- /package/dist/src/{manager/notes → notes}/search.js +0 -0
- /package/public/dist/assets/{pi-settings-Dh5lgb87.js → pi-settings-DEuKgvIj.js} +0 -0
package/README.md
CHANGED
|
@@ -26,7 +26,16 @@ JAW_SAFE=1 npm install -g cli-jaw # skips optional tool/runtime setup
|
|
|
26
26
|
jaw init # interactive setup later when you're ready
|
|
27
27
|
```
|
|
28
28
|
|
|
29
|
-
Windows users should use the WSL install path below.
|
|
29
|
+
Windows users should use the WSL install path below. A native PowerShell installer exists as a **beta** surface:
|
|
30
|
+
|
|
31
|
+
```powershell
|
|
32
|
+
irm https://raw.githubusercontent.com/lidge-jun/cli-jaw/main/scripts/install.ps1 | iex
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
Either way cli-jaw now tells the two apart precisely: `jaw doctor --json` reports
|
|
36
|
+
`platform` as `windows-native` or `wsl`, and each gets its own diagnostics. Native
|
|
37
|
+
Windows no longer receives "reinstall inside WSL" advice just because WSL interop
|
|
38
|
+
is configured on the machine.
|
|
30
39
|
|
|
31
40
|
</details>
|
|
32
41
|
|
|
@@ -36,6 +45,12 @@ npm install -g cli-jaw
|
|
|
36
45
|
jaw dashboard
|
|
37
46
|
```
|
|
38
47
|
|
|
48
|
+
> **npm 12+?** npm now blocks dependency install scripts by default. If you see `npm warn allow-scripts`, install with the scripts approved:
|
|
49
|
+
>
|
|
50
|
+
> ```bash
|
|
51
|
+
> npm install -g cli-jaw --allow-scripts=cli-jaw
|
|
52
|
+
> ```
|
|
53
|
+
|
|
39
54
|
That's it. Open **http://localhost:24576** for the manager dashboard. Per-instance agent Web UIs still run from **http://localhost:3457** when you start `jaw serve`. Requires [Node.js 22.4+](https://nodejs.org).
|
|
40
55
|
|
|
41
56
|
> **First time?** The default npm install initializes CLI-JAW and attempts native Claude setup. Other AI CLIs are optional; install them all during npm setup with `CLI_JAW_INSTALL_CLI_TOOLS=1 npm install -g cli-jaw` on macOS/Linux. On Windows, use the WSL install path below.
|
|
@@ -384,7 +399,11 @@ No per-token API billing. Route through subscriptions you already pay for.
|
|
|
384
399
|
|
|
385
400
|
GPT 5.5 and Claude Opus 4.8 are enabled from Pro-tier subscriptions and higher. Starting in June, select `claude-e` when you want CLI-JAW to use the Claude allowance bundled with the subscription plan.
|
|
386
401
|
|
|
387
|
-
|
|
402
|
+
On a new install, CLI-JAW prefers **Codex App** when the local `app-server` entrypoint and Codex authentication are ready. Existing installations keep their saved runtime until the one-time Settings notice is explicitly accepted; choosing “keep” preserves the current runtime. Set `CLI_JAW_DEFAULT_CLI=claude` to override the clean-install policy.
|
|
403
|
+
|
|
404
|
+
OpenCodex routing remains owned by Codex's root `openai_base_url` setting. CLI-JAW only compares that read-only URL with the live OpenCodex runtime-port and `/healthz` fingerprint for diagnostics; it does not rewrite Codex config or inject an execution endpoint.
|
|
405
|
+
|
|
406
|
+
The quota/status panel keeps the same runtime keyset as the registry. Cold status requests return a neutral “checking” snapshot immediately while binary, authentication, and capability probes run in a bounded child process. Wrapper runtimes (`ai-e`, `claude-e`, `codex-app`) delegate to their underlying provider, while Pi/AGY/Cursor/OpenCode are shown as auth/status-only when their CLIs do not expose quota windows. Grok uses the current Grok CLI auth store for the SuperGrok weekly usage pool and falls back to legacy monthly credits when the weekly endpoint is unavailable.
|
|
388
407
|
|
|
389
408
|
**Fallback chain**: if one engine is rate-limited, the next picks up. Configure with `/fallback [cli1 cli2...]`.
|
|
390
409
|
|
|
@@ -644,6 +663,8 @@ Architecture details: [ARCHITECTURE.md](docs/ARCHITECTURE.md) · Pre-prompt cont
|
|
|
644
663
|
| Problem | Solution |
|
|
645
664
|
|---|---|
|
|
646
665
|
| `cli-jaw: command not found` | `npm install -g cli-jaw` again. macOS/Linux/WSL: check `~/.local/bin` or `npm prefix -g` + `/bin` is in `$PATH`. From Windows PowerShell, invoke WSL through a login shell: `wsl.exe -d Ubuntu -- bash -lc "jaw dashboard"`. |
|
|
666
|
+
| `npm warn allow-scripts ...` | npm >= 12 blocks dependency install scripts by default, so the install "succeeds" without running CLI-JAW's setup. Fix: `npm install -g cli-jaw --allow-scripts=cli-jaw` or persist with `npm config set allow-scripts=cli-jaw --location=user`. Do **not** copy npm's own printed hint — it omits the package argument and fails with `ENOENT package.json` ([npm/cli#9835](https://github.com/npm/cli/issues/9835)). Already installed? `jaw init` finishes setup without reinstalling. |
|
|
667
|
+
| pnpm/bun blocked build scripts | pnpm 11+: `pnpm add -g --allow-build=cli-jaw cli-jaw` (pnpm ≤ 10: `pnpm approve-builds -g`). bun: `bun add -g --trust cli-jaw`. |
|
|
647
668
|
| `cli-jaw: permission denied` | The global shim can see CLI-JAW, but its `dist/bin/cli-jaw.js` target is not executable. Re-run `npm install -g cli-jaw` or, in a checkout, run `npm run build && npm run check:cli-bin-links`. |
|
|
648
669
|
| Fresh install verifier fails | `scripts/verify-fresh-install.sh` checks both public aliases: `jaw` and `cli-jaw`. Fix the reported PATH or executable-bit issue, then rerun `bash "$(npm root -g)/cli-jaw/scripts/verify-fresh-install.sh"`. |
|
|
649
670
|
| `Error: node version` | Upgrade to Node.js 22.4+: `nvm install 22` |
|
package/dist/bin/cli-jaw.js
CHANGED
|
@@ -11,6 +11,7 @@ import { existsSync, readFileSync } from 'node:fs';
|
|
|
11
11
|
import { homedir } from 'node:os';
|
|
12
12
|
import { maybePromptGithubStar } from './star-prompt.js';
|
|
13
13
|
import { resolveHomePath } from '../src/core/path-expand.js';
|
|
14
|
+
import { inspectInstallIntegrity, formatIntegrityReport } from '../src/core/install-integrity.js';
|
|
14
15
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
15
16
|
function readPackageJson(pkgPath) {
|
|
16
17
|
const parsed = JSON.parse(readFileSync(pkgPath, 'utf8'));
|
|
@@ -93,9 +94,46 @@ function ensureNativeModulesReady(cmd) {
|
|
|
93
94
|
const message = error instanceof Error ? error.message : String(error);
|
|
94
95
|
console.error(`[jaw:native] native dependency check failed for Node ${process.version}.`);
|
|
95
96
|
console.error(`[jaw:native] ${message}`);
|
|
97
|
+
// A blocked postinstall is the likeliest cause on a fresh global
|
|
98
|
+
// install; say so instead of leaving a bare ABI error on screen.
|
|
99
|
+
try {
|
|
100
|
+
const integrity = inspectInstallIntegrity(packageRoot, resolveJawHomeDir());
|
|
101
|
+
if (integrity.installScriptState !== 'completed' || !integrity.nativeLoadable) {
|
|
102
|
+
console.error(formatIntegrityReport(integrity));
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
catch { /* diagnostics must never mask the original failure */ }
|
|
96
106
|
process.exit(1);
|
|
97
107
|
}
|
|
98
108
|
}
|
|
109
|
+
function resolveJawHomeDir() {
|
|
110
|
+
const custom = process.env["CLI_JAW_HOME"];
|
|
111
|
+
return custom ? resolveHomePath(custom, homedir()) : join(homedir(), '.cli-jaw');
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Blocked postinstall with the native prebuild still loading is the common
|
|
115
|
+
* npm-12 outcome after the better-sqlite3 13 migration: the CLI works, but
|
|
116
|
+
* ~/.cli-jaw and MCP config were never initialized. Do not die, do not stay
|
|
117
|
+
* silent — point at `jaw init`, which finishes setup without reinstalling.
|
|
118
|
+
*/
|
|
119
|
+
function warnOnceIfPostinstallSkipped(cmd) {
|
|
120
|
+
if (shouldSkipNativeGuard(cmd))
|
|
121
|
+
return;
|
|
122
|
+
// Dev checkouts (and test spawns inside them) are not installations: the
|
|
123
|
+
// published tarball never ships server.ts (files allowlist), so its
|
|
124
|
+
// presence means this tree came from git, where postinstall state is
|
|
125
|
+
// meaningless and the warning would pollute test output.
|
|
126
|
+
if (existsSync(join(packageRoot, 'server.ts')))
|
|
127
|
+
return;
|
|
128
|
+
try {
|
|
129
|
+
const integrity = inspectInstallIntegrity(packageRoot, resolveJawHomeDir());
|
|
130
|
+
if (integrity.installScriptState === 'completed' || integrity.userSetupDone)
|
|
131
|
+
return;
|
|
132
|
+
console.error(formatIntegrityReport(integrity));
|
|
133
|
+
console.error('[jaw:install] continuing — run `jaw init` to finish setup without reinstalling.');
|
|
134
|
+
}
|
|
135
|
+
catch { /* advisory only */ }
|
|
136
|
+
}
|
|
99
137
|
async function maybePromptForStarOnLaunch() {
|
|
100
138
|
try {
|
|
101
139
|
await maybePromptGithubStar();
|
|
@@ -175,6 +213,7 @@ ${c.cyan} 🦈 jaw${c.reset} — AI agent orchestration platform ${c.dim}v${pk
|
|
|
175
213
|
`);
|
|
176
214
|
}
|
|
177
215
|
ensureNativeModulesReady(command);
|
|
216
|
+
warnOnceIfPostinstallSkipped(command);
|
|
178
217
|
switch (command) {
|
|
179
218
|
case 'serve':
|
|
180
219
|
await maybePromptForStarOnLaunch();
|
package/dist/bin/cli-jaw.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-jaw.js","sourceRoot":"","sources":["../../bin/cli-jaw.ts"],"names":[],"mappings":";AACA;;;;GAIG;AACH,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"cli-jaw.js","sourceRoot":"","sources":["../../bin/cli-jaw.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
// One way to call the dashboard, shared by the commands that do (devlog 034).
|
|
2
|
+
//
|
|
3
|
+
// Two copies of this existed, identical down to the truncation of the error body, and
|
|
4
|
+
// each carried its own hardcoded base path. A caller now says which surface it wants and
|
|
5
|
+
// what to call itself in an error, so the two cannot drift apart again.
|
|
6
|
+
import { DASHBOARD_DEFAULT_PORT } from '../../../src/manager/constants.js';
|
|
7
|
+
// Re-exported so a command can name the default port in its help text without reaching
|
|
8
|
+
// past this module for it.
|
|
9
|
+
export { DASHBOARD_DEFAULT_PORT };
|
|
10
|
+
export function dashboardPort() {
|
|
11
|
+
const fromEnv = Number(process.env["DASHBOARD_PORT"]);
|
|
12
|
+
return Number.isFinite(fromEnv) && fromEnv > 0 ? fromEnv : Number(DASHBOARD_DEFAULT_PORT);
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Calls the dashboard and returns the parsed JSON, or throws with a message that names
|
|
16
|
+
* the command the user actually ran.
|
|
17
|
+
*/
|
|
18
|
+
export async function callDashboard(options) {
|
|
19
|
+
const port = dashboardPort();
|
|
20
|
+
const url = `http://127.0.0.1:${port}${options.basePath}${options.path}`;
|
|
21
|
+
const doFetch = options.fetchImpl ?? fetch;
|
|
22
|
+
const hasBody = options.body !== undefined;
|
|
23
|
+
let res;
|
|
24
|
+
try {
|
|
25
|
+
res = await doFetch(url, {
|
|
26
|
+
...(hasBody ? { method: 'POST', body: JSON.stringify(options.body) } : {}),
|
|
27
|
+
headers: {
|
|
28
|
+
host: `127.0.0.1:${port}`,
|
|
29
|
+
...(hasBody ? { 'Content-Type': 'application/json' } : {}),
|
|
30
|
+
},
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
catch (err) {
|
|
34
|
+
throw new Error(`${options.label} unreachable at :${port} — run \`jaw dashboard serve\` first. (${err.message})`);
|
|
35
|
+
}
|
|
36
|
+
if (!res.ok) {
|
|
37
|
+
const text = await res.text().catch(() => '');
|
|
38
|
+
throw new Error(`${options.label} ${options.path} → ${res.status}: ${text.slice(0, 200)}`);
|
|
39
|
+
}
|
|
40
|
+
return res.json();
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=dashboard-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dashboard-client.js","sourceRoot":"","sources":["../../../../bin/commands/_shared/dashboard-client.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,EAAE;AACF,sFAAsF;AACtF,yFAAyF;AACzF,wEAAwE;AAExE,OAAO,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAE3E,uFAAuF;AACvF,2BAA2B;AAC3B,OAAO,EAAE,sBAAsB,EAAE,CAAC;AAElC,MAAM,UAAU,aAAa;IACzB,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC;IACtD,OAAO,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC;AAC9F,CAAC;AAaD;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAI,OAAyB;IAC5D,MAAM,IAAI,GAAG,aAAa,EAAE,CAAC;IAC7B,MAAM,GAAG,GAAG,oBAAoB,IAAI,GAAG,OAAO,CAAC,QAAQ,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IACzE,MAAM,OAAO,GAAG,OAAO,CAAC,SAAS,IAAI,KAAK,CAAC;IAC3C,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,KAAK,SAAS,CAAC;IAE3C,IAAI,GAAa,CAAC;IAClB,IAAI,CAAC;QACD,GAAG,GAAG,MAAM,OAAO,CAAC,GAAG,EAAE;YACrB,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1E,OAAO,EAAE;gBACL,IAAI,EAAE,aAAa,IAAI,EAAE;gBACzB,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC7D;SACJ,CAAC,CAAC;IACP,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CACX,GAAG,OAAO,CAAC,KAAK,oBAAoB,IAAI,0CAA2C,GAAa,CAAC,OAAO,GAAG,CAC9G,CAAC;IACN,CAAC;IACD,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACV,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;QAC9C,MAAM,IAAI,KAAK,CAAC,GAAG,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,IAAI,MAAM,GAAG,CAAC,MAAM,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;IAC/F,CAAC;IACD,OAAO,GAAG,CAAC,IAAI,EAAgB,CAAC;AACpC,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
// Shared rendering for the search commands (devlog 034).
|
|
2
|
+
//
|
|
3
|
+
// Two shapes, deliberately kept apart. The dashboard commands search across instances, so
|
|
4
|
+
// they carry a hit count, an instance label and warnings; the local ones search one place
|
|
5
|
+
// and have none of those. Giving the local pair a header would mean inventing instances
|
|
6
|
+
// and warnings where neither exists, so what they share is one line of body text.
|
|
7
|
+
/** Body text ceiling. The two local commands used to disagree, at 200 and 300, for no reason. */
|
|
8
|
+
export const CHAT_BODY_LIMIT = 300;
|
|
9
|
+
/**
|
|
10
|
+
* Renders a cross-instance result.
|
|
11
|
+
*
|
|
12
|
+
* The per-hit renderer is supplied by the caller: a memory hit points at a file and line
|
|
13
|
+
* while a chat hit points at a moment in a conversation, and flattening the two would
|
|
14
|
+
* serve neither.
|
|
15
|
+
*/
|
|
16
|
+
export function formatFederatedResult(data, renderHit) {
|
|
17
|
+
const lines = [
|
|
18
|
+
`# ${data.hits.length} hits across ${data.instancesSucceeded}/${data.instancesQueried} instances`,
|
|
19
|
+
];
|
|
20
|
+
for (const hit of data.hits)
|
|
21
|
+
lines.push(...renderHit(hit));
|
|
22
|
+
if (data.warnings.length) {
|
|
23
|
+
lines.push('\n--- warnings ---');
|
|
24
|
+
for (const warning of data.warnings) {
|
|
25
|
+
lines.push(`[${warning.instanceId}] ${warning.code}: ${warning.message}`);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
return lines.join('\n');
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* One line of a local chat hit.
|
|
32
|
+
*
|
|
33
|
+
* Callers wrap this differently — one adds a context block and a separator, the other a
|
|
34
|
+
* heading and an indent — and those differences are theirs to keep.
|
|
35
|
+
*/
|
|
36
|
+
export function renderLocalChatHit(hit, limit = CHAT_BODY_LIMIT) {
|
|
37
|
+
const content = String(hit.content ?? '').slice(0, limit);
|
|
38
|
+
return `[${String(hit.created_at ?? '')}] (${String(hit.role ?? '')}) ${content}`;
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=search-format.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search-format.js","sourceRoot":"","sources":["../../../../bin/commands/_shared/search-format.ts"],"names":[],"mappings":"AAAA,yDAAyD;AACzD,EAAE;AACF,0FAA0F;AAC1F,0FAA0F;AAC1F,wFAAwF;AACxF,kFAAkF;AAElF,iGAAiG;AACjG,MAAM,CAAC,MAAM,eAAe,GAAG,GAAG,CAAC;AAWnC;;;;;;GAMG;AACH,MAAM,UAAU,qBAAqB,CACjC,IAA0B,EAC1B,SAAiC;IAEjC,MAAM,KAAK,GAAa;QACpB,KAAK,IAAI,CAAC,IAAI,CAAC,MAAM,gBAAgB,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,gBAAgB,YAAY;KACpG,CAAC;IACF,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI;QAAE,KAAK,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3D,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;QACvB,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QACjC,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClC,KAAK,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,UAAU,KAAK,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;QAC9E,CAAC;IACL,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC;AAQD;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAAC,GAAiB,EAAE,KAAK,GAAG,eAAe;IACzE,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IAC1D,OAAO,IAAI,MAAM,CAAC,GAAG,CAAC,UAAU,IAAI,EAAE,CAAC,MAAM,MAAM,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,KAAK,OAAO,EAAE,CAAC;AACtF,CAAC"}
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
import { parseArgs } from 'node:util';
|
|
6
6
|
import { getServerUrl, loadSettings } from '../../src/core/config.js';
|
|
7
7
|
import { getCliAuthToken, authHeaders } from '../../src/cli/api-auth.js';
|
|
8
|
+
import { renderLocalChatHit } from './_shared/search-format.js';
|
|
8
9
|
loadSettings();
|
|
9
10
|
const SERVER = getServerUrl();
|
|
10
11
|
await getCliAuthToken();
|
|
@@ -52,13 +53,14 @@ try {
|
|
|
52
53
|
process.exit(0);
|
|
53
54
|
}
|
|
54
55
|
for (const match of data) {
|
|
55
|
-
|
|
56
|
-
console.log(`[${match['created_at']}] (${match['role']}) ${content}`);
|
|
56
|
+
console.log(renderLocalChatHit(match));
|
|
57
57
|
const ctx = match['context'];
|
|
58
58
|
if (ctx && Array.isArray(ctx)) {
|
|
59
59
|
for (const c of ctx) {
|
|
60
60
|
const prefix = c['id'] === match['id'] ? '>> ' : ' ';
|
|
61
|
-
|
|
61
|
+
// Context lines stay tighter than the hit itself: they are there for
|
|
62
|
+
// orientation, not for reading.
|
|
63
|
+
console.log(`${prefix}${renderLocalChatHit(c, 200)}`);
|
|
62
64
|
}
|
|
63
65
|
}
|
|
64
66
|
console.log('---');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat-search.js","sourceRoot":"","sources":["../../../bin/commands/chat-search.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"chat-search.js","sourceRoot":"","sources":["../../../bin/commands/chat-search.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,40 +1,23 @@
|
|
|
1
1
|
import { parseArgs } from 'node:util';
|
|
2
|
-
import { DASHBOARD_DEFAULT_PORT } from '
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
2
|
+
import { callDashboard as callDashboardApi, DASHBOARD_DEFAULT_PORT } from './_shared/dashboard-client.js';
|
|
3
|
+
import { CHAT_BODY_LIMIT, formatFederatedResult } from './_shared/search-format.js';
|
|
4
|
+
// Chat federation is mounted under the memory router, so this surface is deliberately
|
|
5
|
+
// the memory base path with a /chat suffix rather than a route of its own. Exported so a
|
|
6
|
+
// test can hold it to that rather than reading this file for a substring.
|
|
7
|
+
export const CHAT_BASE_PATH = '/api/dashboard/memory';
|
|
8
|
+
const LABEL = 'dashboard chat';
|
|
7
9
|
async function callDashboard(path) {
|
|
8
|
-
|
|
9
|
-
const url = `http://127.0.0.1:${port}/api/dashboard/memory${path}`;
|
|
10
|
-
let res;
|
|
11
|
-
try {
|
|
12
|
-
res = await fetch(url, { headers: { host: `127.0.0.1:${port}` } });
|
|
13
|
-
}
|
|
14
|
-
catch (err) {
|
|
15
|
-
throw new Error(`dashboard unreachable at :${port} — run \`jaw dashboard serve\` first. (${err.message})`);
|
|
16
|
-
}
|
|
17
|
-
if (!res.ok) {
|
|
18
|
-
const body = await res.text().catch(() => '');
|
|
19
|
-
throw new Error(`dashboard chat ${path} → ${res.status}: ${body.slice(0, 200)}`);
|
|
20
|
-
}
|
|
21
|
-
return res.json();
|
|
10
|
+
return callDashboardApi({ basePath: CHAT_BASE_PATH, path, label: LABEL });
|
|
22
11
|
}
|
|
23
12
|
function formatChatResult(data) {
|
|
24
|
-
|
|
25
|
-
lines.push(`# ${data.hits.length} hits across ${data.instancesSucceeded}/${data.instancesQueried} instances`);
|
|
26
|
-
for (const hit of data.hits) {
|
|
13
|
+
return formatFederatedResult(data, hit => {
|
|
27
14
|
const label = hit.instanceLabel ? ` (${hit.instanceLabel})` : '';
|
|
28
15
|
const field = hit.match_field === 'tool_log' ? ' [tool_log]' : '';
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
for (const w of data.warnings)
|
|
35
|
-
lines.push(`[${w.instanceId}] ${w.code}: ${w.message}`);
|
|
36
|
-
}
|
|
37
|
-
return lines.join('\n');
|
|
16
|
+
return [
|
|
17
|
+
`\n[${hit.instanceId}${label}] ${hit.created_at} (${hit.role})${field}`,
|
|
18
|
+
hit.content.slice(0, CHAT_BODY_LIMIT),
|
|
19
|
+
];
|
|
20
|
+
});
|
|
38
21
|
}
|
|
39
22
|
function printHelp() {
|
|
40
23
|
console.log(`
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dashboard-chat.js","sourceRoot":"","sources":["../../../bin/commands/dashboard-chat.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"dashboard-chat.js","sourceRoot":"","sources":["../../../bin/commands/dashboard-chat.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,39 +1,19 @@
|
|
|
1
1
|
import { parseArgs } from 'node:util';
|
|
2
|
-
import { DASHBOARD_DEFAULT_PORT } from '
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
}
|
|
2
|
+
import { callDashboard as callDashboardApi, DASHBOARD_DEFAULT_PORT } from './_shared/dashboard-client.js';
|
|
3
|
+
import { formatFederatedResult } from './_shared/search-format.js';
|
|
4
|
+
const MEMORY_BASE_PATH = '/api/dashboard/memory';
|
|
5
|
+
const LABEL = 'dashboard memory';
|
|
7
6
|
async function callDashboard(path) {
|
|
8
|
-
|
|
9
|
-
const url = `http://127.0.0.1:${port}/api/dashboard/memory${path}`;
|
|
10
|
-
let res;
|
|
11
|
-
try {
|
|
12
|
-
res = await fetch(url, { headers: { host: `127.0.0.1:${port}` } });
|
|
13
|
-
}
|
|
14
|
-
catch (err) {
|
|
15
|
-
throw new Error(`dashboard memory unreachable at :${port} — run \`jaw dashboard serve\` first. (${err.message})`);
|
|
16
|
-
}
|
|
17
|
-
if (!res.ok) {
|
|
18
|
-
const body = await res.text().catch(() => '');
|
|
19
|
-
throw new Error(`dashboard memory ${path} → ${res.status}: ${body.slice(0, 200)}`);
|
|
20
|
-
}
|
|
21
|
-
return res.json();
|
|
7
|
+
return callDashboardApi({ basePath: MEMORY_BASE_PATH, path, label: LABEL });
|
|
22
8
|
}
|
|
23
9
|
function formatSearchResult(data) {
|
|
24
|
-
|
|
25
|
-
lines.push(`# ${data.hits.length} hits across ${data.instancesSucceeded}/${data.instancesQueried} instances`);
|
|
26
|
-
for (const hit of data.hits) {
|
|
10
|
+
return formatFederatedResult(data, hit => {
|
|
27
11
|
const label = hit.instanceLabel ? ` (${hit.instanceLabel})` : '';
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
for (const w of data.warnings)
|
|
34
|
-
lines.push(`[${w.instanceId}] ${w.code}: ${w.message}`);
|
|
35
|
-
}
|
|
36
|
-
return lines.join('\n');
|
|
12
|
+
return [
|
|
13
|
+
`\n[${hit.instanceId}${label}] ${hit.relpath}:${hit.source_start_line}`,
|
|
14
|
+
hit.snippet || (hit.content || '').slice(0, 200),
|
|
15
|
+
];
|
|
16
|
+
});
|
|
37
17
|
}
|
|
38
18
|
function printHelp() {
|
|
39
19
|
console.log(`
|
|
@@ -163,24 +143,7 @@ export async function handleMemory(argvFromSwitch) {
|
|
|
163
143
|
}
|
|
164
144
|
}
|
|
165
145
|
async function postDashboard(path, body) {
|
|
166
|
-
|
|
167
|
-
const url = `http://127.0.0.1:${port}/api/dashboard/memory${path}`;
|
|
168
|
-
let res;
|
|
169
|
-
try {
|
|
170
|
-
res = await fetch(url, {
|
|
171
|
-
method: 'POST',
|
|
172
|
-
headers: { host: `127.0.0.1:${port}`, 'Content-Type': 'application/json' },
|
|
173
|
-
body: JSON.stringify(body),
|
|
174
|
-
});
|
|
175
|
-
}
|
|
176
|
-
catch (err) {
|
|
177
|
-
throw new Error(`dashboard memory unreachable at :${port} — run \`jaw dashboard serve\` first. (${err.message})`);
|
|
178
|
-
}
|
|
179
|
-
if (!res.ok) {
|
|
180
|
-
const text = await res.text().catch(() => '');
|
|
181
|
-
throw new Error(`dashboard memory ${path} → ${res.status}: ${text.slice(0, 200)}`);
|
|
182
|
-
}
|
|
183
|
-
return res.json();
|
|
146
|
+
return callDashboardApi({ basePath: MEMORY_BASE_PATH, path, label: LABEL, body });
|
|
184
147
|
}
|
|
185
148
|
async function handleEmbedConfig(args) {
|
|
186
149
|
const sub = args[0];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dashboard-memory.js","sourceRoot":"","sources":["../../../bin/commands/dashboard-memory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"dashboard-memory.js","sourceRoot":"","sources":["../../../bin/commands/dashboard-memory.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,10 +7,13 @@ import { execFileSync, execSync } from 'node:child_process';
|
|
|
7
7
|
import fs from 'node:fs';
|
|
8
8
|
import os from 'node:os';
|
|
9
9
|
import path from 'node:path';
|
|
10
|
+
import { fileURLToPath } from 'node:url';
|
|
10
11
|
import { JAW_HOME, SETTINGS_PATH, DB_PATH, HEARTBEAT_JOBS_PATH, detectCli } from '../../src/core/config.js';
|
|
12
|
+
import { inspectInstallIntegrity, formatRecoveryCommands } from '../../src/core/install-integrity.js';
|
|
11
13
|
import { detectSharedPathContamination } from '../../lib/mcp-sync.js';
|
|
12
14
|
import { isDiscoverableSkillDirName } from '../../lib/mcp/skills-utils.js';
|
|
13
15
|
import { classifyClaudeInstall } from '../../src/core/claude-install.js';
|
|
16
|
+
import { isWsl, isWindowsNative, resolvePlatformKind } from '../../src/core/platform-kind.js';
|
|
14
17
|
import { readClaudeCreds } from '../../src/routes/quota.js';
|
|
15
18
|
import { CLI_KEYS } from '../../src/cli/registry.js';
|
|
16
19
|
import { shouldShowHelp, printAndExit } from '../helpers/help.js';
|
|
@@ -59,15 +62,7 @@ function rejectedCliDetail(name) {
|
|
|
59
62
|
return `; skipped non-spawnable candidate${rejected.length > 1 ? 's' : ''}: ${detail}`;
|
|
60
63
|
}
|
|
61
64
|
function isWSL() {
|
|
62
|
-
|
|
63
|
-
return true;
|
|
64
|
-
}
|
|
65
|
-
try {
|
|
66
|
-
return fs.readFileSync('/proc/version', 'utf8').toLowerCase().includes('microsoft');
|
|
67
|
-
}
|
|
68
|
-
catch {
|
|
69
|
-
return false;
|
|
70
|
-
}
|
|
65
|
+
return isWsl();
|
|
71
66
|
}
|
|
72
67
|
function hasWslWindowsChrome() {
|
|
73
68
|
const paths = [
|
|
@@ -133,7 +128,7 @@ function readBinaryVersion(candidate, args = ['--version']) {
|
|
|
133
128
|
function verifyClaudeInteractive() {
|
|
134
129
|
const helper = findBinaryPath('claude-e') || findBinaryPath('claude-exec') || findBinaryPath('jaw-claude-i');
|
|
135
130
|
if (!helper) {
|
|
136
|
-
throw new Error('WARN: runtime missing — install `claude-e`
|
|
131
|
+
throw new Error('WARN: runtime missing — install with `jaw provider install claude-e` (needs Rust cargo) or build with `npm run build:claude-exec`');
|
|
137
132
|
}
|
|
138
133
|
let helperVersion = 'unknown';
|
|
139
134
|
try {
|
|
@@ -217,6 +212,26 @@ check('Home directory', () => {
|
|
|
217
212
|
fs.accessSync(JAW_HOME, fs.constants.W_OK);
|
|
218
213
|
return JAW_HOME;
|
|
219
214
|
});
|
|
215
|
+
// 1b. Install scripts — npm >= 12 blocks unreviewed dependency lifecycle
|
|
216
|
+
// scripts, so a "successful" global install may have skipped our postinstall.
|
|
217
|
+
// The install-state receipt (or the jaw-init setup marker) tells them apart.
|
|
218
|
+
check('Install scripts', () => {
|
|
219
|
+
// Compiled location is dist/bin/commands/doctor.js, so walk up until the
|
|
220
|
+
// directory actually holding package.json (same fallback as bin/cli-jaw.ts).
|
|
221
|
+
let packageRoot = path.join(path.dirname(fileURLToPath(import.meta.url)), '..', '..');
|
|
222
|
+
if (!fs.existsSync(path.join(packageRoot, 'package.json'))) {
|
|
223
|
+
packageRoot = path.join(packageRoot, '..');
|
|
224
|
+
}
|
|
225
|
+
const integrity = inspectInstallIntegrity(packageRoot, JAW_HOME);
|
|
226
|
+
if (integrity.installScriptState === 'completed') {
|
|
227
|
+
return integrity.userSetupDone ? 'ran (setup complete)' : 'ran';
|
|
228
|
+
}
|
|
229
|
+
if (integrity.userSetupDone) {
|
|
230
|
+
return `install scripts ${integrity.installScriptState} — setup completed manually via jaw init`;
|
|
231
|
+
}
|
|
232
|
+
const commands = formatRecoveryCommands(integrity).join(' | ');
|
|
233
|
+
throw new Error(`WARN: install scripts ${integrity.installScriptState} — postinstall did not run. Fix: ${commands} (or run: jaw init)`);
|
|
234
|
+
});
|
|
220
235
|
// 2. settings.json
|
|
221
236
|
let settings = null;
|
|
222
237
|
function loadedSettings() {
|
|
@@ -447,7 +462,33 @@ check('uv (Python)', () => {
|
|
|
447
462
|
throw new Error(`WARN: not installed — run: ${installHint}`);
|
|
448
463
|
}
|
|
449
464
|
});
|
|
450
|
-
if (
|
|
465
|
+
if (isWindowsNative()) {
|
|
466
|
+
check('Windows (native)', () => {
|
|
467
|
+
return `platform=${resolvePlatformKind()}; npm prefix=${getNpmPrefix() || 'unknown'}`;
|
|
468
|
+
});
|
|
469
|
+
check('CLI tools (Windows-native)', () => {
|
|
470
|
+
// The interesting information is in `rejected`: paths found on PATH
|
|
471
|
+
// that cannot be launched (extensionless POSIX shim, .ps1, missing
|
|
472
|
+
// file). Re-testing an ACCEPTED path would just re-ask a question
|
|
473
|
+
// detectCli already answered yes.
|
|
474
|
+
const unusable = [];
|
|
475
|
+
for (const name of ['claude', 'codex', 'gemini', 'copilot', 'opencode', 'jaw']) {
|
|
476
|
+
const detected = detectCli(name);
|
|
477
|
+
for (const entry of detected.rejected ?? []) {
|
|
478
|
+
if (entry.reason === 'ENOENT')
|
|
479
|
+
continue;
|
|
480
|
+
unusable.push(`${name} → ${entry.path} (${entry.reason})`);
|
|
481
|
+
}
|
|
482
|
+
}
|
|
483
|
+
if (unusable.length > 0) {
|
|
484
|
+
throw new Error(`WARN: ${unusable.length} candidate(s) found on PATH but not launchable:\n`
|
|
485
|
+
+ unusable.map(t => ` ${t}`).join('\n')
|
|
486
|
+
+ '\n Reinstall with: npm i -g <package>');
|
|
487
|
+
}
|
|
488
|
+
return 'all detected CLI tools are Windows-executable';
|
|
489
|
+
});
|
|
490
|
+
}
|
|
491
|
+
else if (isWSL()) {
|
|
451
492
|
check('WSL sudo', () => {
|
|
452
493
|
const ready = canSudoNonInteractive();
|
|
453
494
|
if (ready === true)
|
|
@@ -705,6 +746,9 @@ function buildSlackStatus() {
|
|
|
705
746
|
channelIdsConfigured,
|
|
706
747
|
channelConsistent,
|
|
707
748
|
runtimeReady: status === 'ok' && channelConsistent,
|
|
749
|
+
// C/G/D conversations only — mpim:history is not in the manifest, so
|
|
750
|
+
// MPIM lookups surface missing_scope at call time (260806 unit).
|
|
751
|
+
historyLookup: botTokenPresent,
|
|
708
752
|
socketModeNote: 'app-level token (xapp-) is required for inbound events; a bot token alone is outbound-only',
|
|
709
753
|
degradedReasons,
|
|
710
754
|
};
|
|
@@ -767,6 +811,7 @@ if (values.json) {
|
|
|
767
811
|
activeChannel: loadedSettings().channel || 'telegram',
|
|
768
812
|
discord: buildDiscordStatus(),
|
|
769
813
|
slack: buildSlackStatus(),
|
|
814
|
+
platform: resolvePlatformKind(),
|
|
770
815
|
wsl: isWSL() ? {
|
|
771
816
|
sudoNonInteractive: canSudoNonInteractive(),
|
|
772
817
|
npmPrefix: getNpmPrefix(),
|