@weavecode/weave 0.1.8 → 0.1.9
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/node_modules/@modelcontextprotocol/sdk/node_modules/@hono/node-server/dist/index.cjs +31 -6
- package/node_modules/@modelcontextprotocol/sdk/node_modules/@hono/node-server/dist/index.mjs +31 -6
- package/node_modules/@modelcontextprotocol/sdk/node_modules/@hono/node-server/package.json +1 -1
- package/node_modules/@modelcontextprotocol/sdk/node_modules/express-rate-limit/dist/index.cjs +1 -1
- package/node_modules/@modelcontextprotocol/sdk/node_modules/express-rate-limit/dist/index.mjs +1 -1
- package/node_modules/@modelcontextprotocol/sdk/node_modules/express-rate-limit/node_modules/ip-address/README.md +39 -39
- package/node_modules/@modelcontextprotocol/sdk/node_modules/express-rate-limit/node_modules/ip-address/dist/ipv6.js +1 -1
- package/node_modules/@modelcontextprotocol/sdk/node_modules/express-rate-limit/node_modules/ip-address/package.json +1 -1
- package/node_modules/@modelcontextprotocol/sdk/node_modules/express-rate-limit/package.json +1 -1
- package/node_modules/@weavecode/cli/dist/cli.js +4 -4
- package/node_modules/@weavecode/cli/dist/commands/chpass.js +1 -1
- package/node_modules/@weavecode/cli/dist/commands/daemon-auth.js +1 -1
- package/node_modules/@weavecode/cli/dist/commands/daemon.js +2 -2
- package/node_modules/@weavecode/cli/dist/commands/dashboard.js +2 -2
- package/node_modules/@weavecode/cli/dist/commands/doctor.js +1 -1
- package/node_modules/@weavecode/cli/dist/commands/init.js +1 -1
- package/node_modules/@weavecode/cli/dist/commands/msg.js +2 -2
- package/node_modules/@weavecode/cli/dist/commands/scan.js +1 -1
- package/node_modules/@weavecode/cli/dist/commands/status.js +2 -2
- package/node_modules/@weavecode/cli/dist/commands/uninstall.js +1 -1
- package/node_modules/@weavecode/cli/dist/i18n/dict/en.js +2 -2
- package/node_modules/@weavecode/cli/dist/i18n/dict/zh.d.ts +7 -0
- package/node_modules/@weavecode/cli/dist/i18n/dict/zh.js +3 -3
- package/node_modules/@weavecode/cli/dist/i18n/index.js +1 -1
- package/node_modules/@weavecode/cli/dist/i18n/t.js +1 -1
- package/node_modules/@weavecode/cli/dist/init/claudemd-gen.js +5 -5
- package/node_modules/@weavecode/cli/dist/init/executor.js +3 -3
- package/node_modules/@weavecode/cli/dist/init/git-commit.js +2 -2
- package/node_modules/@weavecode/cli/dist/init/git-exclude.d.ts +20 -0
- package/node_modules/@weavecode/cli/dist/init/git-exclude.js +7 -0
- package/node_modules/@weavecode/cli/dist/init/harnesses/claude.js +7 -7
- package/node_modules/@weavecode/cli/dist/init/harnesses/codex.js +1 -1
- package/node_modules/@weavecode/cli/dist/init/instruction-files.d.ts +14 -0
- package/node_modules/@weavecode/cli/dist/init/instruction-files.js +1 -0
- package/node_modules/@weavecode/cli/dist/init/instruction-link.js +1 -1
- package/node_modules/@weavecode/cli/dist/init/plugin-templates.js +1 -1
- package/node_modules/@weavecode/cli/dist/init/prompt.js +4 -4
- package/node_modules/@weavecode/cli/dist/init/provision.js +1 -1
- package/node_modules/@weavecode/cli/dist/init/uninstall.js +6 -6
- package/node_modules/@weavecode/cli/dist/init/wiring.js +1 -1
- package/node_modules/@weavecode/cli/dist/parser.js +1 -1
- package/node_modules/@weavecode/cli/dist/statusline/ansi.js +1 -1
- package/node_modules/@weavecode/cli/dist/statusline/mock-input.js +1 -1
- package/node_modules/@weavecode/cli/dist/statusline/preview.js +2 -2
- package/node_modules/@weavecode/cli/package.json +5 -5
- package/node_modules/@weavecode/core/dist/harness-checks.js +1 -1
- package/node_modules/@weavecode/core/dist/harness.d.ts +37 -0
- package/node_modules/@weavecode/core/dist/harness.js +1 -1
- package/node_modules/@weavecode/core/dist/index.d.ts +1 -1
- package/node_modules/@weavecode/core/dist/index.js +1 -1
- package/node_modules/@weavecode/core/dist/platform.js +1 -1
- package/node_modules/@weavecode/core/dist/types.d.ts +4 -4
- package/node_modules/@weavecode/core/dist/types.js +1 -1
- package/node_modules/@weavecode/core/dist/utils/fs.js +1 -1
- package/node_modules/@weavecode/core/package.json +1 -1
- package/node_modules/@weavecode/harness/dist/claude/assets.js +3 -3
- package/node_modules/@weavecode/harness/dist/claude/capture.js +9 -9
- package/node_modules/@weavecode/harness/dist/claude/commands.js +3 -3
- package/node_modules/@weavecode/harness/dist/claude/config.js +2 -2
- package/node_modules/@weavecode/harness/dist/claude/detect.js +1 -1
- package/node_modules/@weavecode/harness/dist/claude/edits.js +1 -1
- package/node_modules/@weavecode/harness/dist/claude/event-source.js +1 -1
- package/node_modules/@weavecode/harness/dist/claude/images.js +2 -2
- package/node_modules/@weavecode/harness/dist/claude/index.js +1 -1
- package/node_modules/@weavecode/harness/dist/claude/liveness.js +1 -1
- package/node_modules/@weavecode/harness/dist/claude/mcp-gen.js +1 -1
- package/node_modules/@weavecode/harness/dist/claude/messaging.js +2 -2
- package/node_modules/@weavecode/harness/dist/claude/model-aliases.js +1 -1
- package/node_modules/@weavecode/harness/dist/claude/narration.js +1 -1
- package/node_modules/@weavecode/harness/dist/claude/peers.js +1 -1
- package/node_modules/@weavecode/harness/dist/claude/plan.js +1 -1
- package/node_modules/@weavecode/harness/dist/claude/plugins.js +4 -4
- package/node_modules/@weavecode/harness/dist/claude/prompt-inbox.js +1 -1
- package/node_modules/@weavecode/harness/dist/claude/prompt.js +3 -3
- package/node_modules/@weavecode/harness/dist/claude/questions.js +2 -2
- package/node_modules/@weavecode/harness/dist/claude/resume.js +1 -1
- package/node_modules/@weavecode/harness/dist/claude/rewind.js +1 -1
- package/node_modules/@weavecode/harness/dist/claude/settings-gen.js +1 -1
- package/node_modules/@weavecode/harness/dist/claude/side-question.js +2 -2
- package/node_modules/@weavecode/harness/dist/claude/statusline/generator.d.ts +6 -0
- package/node_modules/@weavecode/harness/dist/claude/statusline/generator.js +21 -14
- package/node_modules/@weavecode/harness/dist/claude/statusline/git-cache.js +1 -1
- package/node_modules/@weavecode/harness/dist/claude/statusline/surface.js +2 -2
- package/node_modules/@weavecode/harness/dist/claude/transcript-cursor.js +2 -2
- package/node_modules/@weavecode/harness/dist/claude/transcript.js +7 -7
- package/node_modules/@weavecode/harness/dist/codex/assets.js +1 -1
- package/node_modules/@weavecode/harness/dist/codex/capture.js +2 -2
- package/node_modules/@weavecode/harness/dist/codex/commands.js +4 -4
- package/node_modules/@weavecode/harness/dist/codex/config.js +2 -2
- package/node_modules/@weavecode/harness/dist/codex/detect.js +1 -1
- package/node_modules/@weavecode/harness/dist/codex/event-source.js +2 -2
- package/node_modules/@weavecode/harness/dist/codex/images.js +1 -1
- package/node_modules/@weavecode/harness/dist/codex/index.js +1 -1
- package/node_modules/@weavecode/harness/dist/codex/liveness.js +1 -1
- package/node_modules/@weavecode/harness/dist/codex/mcp.js +1 -1
- package/node_modules/@weavecode/harness/dist/codex/messaging.js +2 -2
- package/node_modules/@weavecode/harness/dist/codex/narration.js +1 -1
- package/node_modules/@weavecode/harness/dist/codex/plugin-state.js +1 -1
- package/node_modules/@weavecode/harness/dist/codex/plugins.js +3 -3
- package/node_modules/@weavecode/harness/dist/codex/provision.js +1 -1
- package/node_modules/@weavecode/harness/dist/codex/questions.js +2 -2
- package/node_modules/@weavecode/harness/dist/codex/rollout.js +5 -5
- package/node_modules/@weavecode/harness/dist/codex/side-question.js +4 -4
- package/node_modules/@weavecode/harness/dist/codex/titles.js +4 -4
- package/node_modules/@weavecode/harness/dist/codex/toml.js +13 -13
- package/node_modules/@weavecode/harness/dist/codex/transcript.js +2 -2
- package/node_modules/@weavecode/harness/dist/driver.js +1 -1
- package/node_modules/@weavecode/harness/dist/init/generated.js +2 -2
- package/node_modules/@weavecode/harness/dist/init/pipeline.js +1 -1
- package/node_modules/@weavecode/harness/dist/registry-wiring.js +1 -1
- package/node_modules/@weavecode/harness/dist/shared/install-link.js +1 -1
- package/node_modules/@weavecode/harness/dist/shared/json-cap.js +1 -1
- package/node_modules/@weavecode/harness/dist/zcode/assets.js +1 -1
- package/node_modules/@weavecode/harness/dist/zcode/capture.js +3 -3
- package/node_modules/@weavecode/harness/dist/zcode/mcp.js +2 -2
- package/node_modules/@weavecode/harness/package.json +2 -2
- package/node_modules/@weavecode/server/dist/config/dotted.js +1 -1
- package/node_modules/@weavecode/server/dist/config/profiles.js +2 -2
- package/node_modules/@weavecode/server/dist/daemon/ai-config.js +2 -2
- package/node_modules/@weavecode/server/dist/daemon/ai-context.js +6 -6
- package/node_modules/@weavecode/server/dist/daemon/ai-routes.js +4 -4
- package/node_modules/@weavecode/server/dist/daemon/api-log.js +3 -3
- package/node_modules/@weavecode/server/dist/daemon/auth-routes.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/auto-start.js +3 -3
- package/node_modules/@weavecode/server/dist/daemon/capture-routes.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/config-routes.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/cron.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/dashboard-auth.js +2 -2
- package/node_modules/@weavecode/server/dist/daemon/dashboard-pusher.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/decision-config.js +2 -2
- package/node_modules/@weavecode/server/dist/daemon/dev-entry.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/entry.js +2 -2
- package/node_modules/@weavecode/server/dist/daemon/fs-browser.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/hook-pipeline.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/hooks-routes.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/http.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/liveness.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/mcp-orchestration.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/narration-watcher.js +2 -2
- package/node_modules/@weavecode/server/dist/daemon/opener/backend-ghostty.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/opener/backend-iterm.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/opener/backend-konsole.js +2 -2
- package/node_modules/@weavecode/server/dist/daemon/opener/backend-terminal-app.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/opener/backend-wezterm.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/opener/backend-wt.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/opener/backend.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/opener/launch.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/opener/pty-terminals.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/opener/shared.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/opener/wezterm-mux.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/opener/wt.js +3 -3
- package/node_modules/@weavecode/server/dist/daemon/opener.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/pet-seed.d.ts +4 -6
- package/node_modules/@weavecode/server/dist/daemon/pet-seed.js +2 -1
- package/node_modules/@weavecode/server/dist/daemon/pet-window.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/port.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/project-files.js +2 -2
- package/node_modules/@weavecode/server/dist/daemon/project-harnesses.js +2 -2
- package/node_modules/@weavecode/server/dist/daemon/project-updates-refresher.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/prompt-images.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/routes/hooks-admin.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/routes/installations.d.ts +29 -0
- package/node_modules/@weavecode/server/dist/daemon/routes/installations.js +1 -0
- package/node_modules/@weavecode/server/dist/daemon/routes/market.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/routes/orchestration.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/routes/path-refs.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/routes/pets.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/routes/project-files.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/routes/projects.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/routes/search.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/routes/session-control.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/routes/session-insights.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/routes/settings-statusline.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/routes/uploads.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/routes/visualizations.js +2 -2
- package/node_modules/@weavecode/server/dist/daemon/routes/watches.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/server.d.ts +2 -0
- package/node_modules/@weavecode/server/dist/daemon/server.js +8 -8
- package/node_modules/@weavecode/server/dist/daemon/session-open.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/session-probe.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/settings.js +2 -2
- package/node_modules/@weavecode/server/dist/daemon/snapshot-refresher.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/sse-hub.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/start.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/state.js +2 -2
- package/node_modules/@weavecode/server/dist/daemon/static.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/terminal-topology-refresher.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/tls.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/toolkit-routes.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/upload-sessions.js +1 -1
- package/node_modules/@weavecode/server/dist/db/db.js +2 -2
- package/node_modules/@weavecode/server/dist/db/layout.d.ts +5 -0
- package/node_modules/@weavecode/server/dist/db/layout.js +2 -1
- package/node_modules/@weavecode/server/dist/db/paths.d.ts +5 -0
- package/node_modules/@weavecode/server/dist/db/paths.js +1 -1
- package/node_modules/@weavecode/server/dist/hooks/answer-keys.js +1 -1
- package/node_modules/@weavecode/server/dist/hooks/dashboard-rate.js +1 -1
- package/node_modules/@weavecode/server/dist/hooks/decision-judge.js +1 -1
- package/node_modules/@weavecode/server/dist/hooks/delivery/ack-gate.js +1 -1
- package/node_modules/@weavecode/server/dist/hooks/delivery/channels.js +1 -1
- package/node_modules/@weavecode/server/dist/hooks/delivery/keys.js +1 -1
- package/node_modules/@weavecode/server/dist/hooks/delivery/queue.js +1 -1
- package/node_modules/@weavecode/server/dist/hooks/delivery/relay.js +1 -1
- package/node_modules/@weavecode/server/dist/hooks/delivery/send.js +2 -2
- package/node_modules/@weavecode/server/dist/hooks/delivery/views.js +1 -1
- package/node_modules/@weavecode/server/dist/hooks/dispatcher.js +6 -6
- package/node_modules/@weavecode/server/dist/hooks/edge-extract.js +1 -1
- package/node_modules/@weavecode/server/dist/hooks/handlers/webhook.js +1 -1
- package/node_modules/@weavecode/server/dist/hooks/headless-runner.js +2 -2
- package/node_modules/@weavecode/server/dist/hooks/inbox-socket.js +2 -2
- package/node_modules/@weavecode/server/dist/hooks/inbox-worker.js +3 -3
- package/node_modules/@weavecode/server/dist/hooks/match.js +1 -1
- package/node_modules/@weavecode/server/dist/hooks/message-deliverer.js +5 -5
- package/node_modules/@weavecode/server/dist/hooks/mirror.js +4 -4
- package/node_modules/@weavecode/server/dist/hooks/orchestration-engine.js +7 -7
- package/node_modules/@weavecode/server/dist/hooks/orchestration-graph.js +1 -1
- package/node_modules/@weavecode/server/dist/hooks/plugin-installer.js +3 -3
- package/node_modules/@weavecode/server/dist/hooks/plugin-loader.js +1 -1
- package/node_modules/@weavecode/server/dist/hooks/plugin-project-state.js +1 -1
- package/node_modules/@weavecode/server/dist/hooks/prompt-flusher.js +1 -1
- package/node_modules/@weavecode/server/dist/hooks/promptbox.js +8 -8
- package/node_modules/@weavecode/server/dist/hooks/push-notify.js +2 -2
- package/node_modules/@weavecode/server/dist/hooks/question-tracker.js +1 -1
- package/node_modules/@weavecode/server/dist/hooks/registry.js +1 -1
- package/node_modules/@weavecode/server/dist/hooks/resume-runner.js +1 -1
- package/node_modules/@weavecode/server/dist/hooks/session-purge.js +1 -1
- package/node_modules/@weavecode/server/dist/hooks/side-questions.js +1 -1
- package/node_modules/@weavecode/server/dist/hooks/synthetic-sessions.js +1 -1
- package/node_modules/@weavecode/server/dist/hooks/toolkit-scan.js +1 -1
- package/node_modules/@weavecode/server/dist/hooks/toolkit.js +5 -5
- package/node_modules/@weavecode/server/dist/hooks/watch-engine.js +1 -1
- package/node_modules/@weavecode/server/dist/install/apply-update.js +1 -1
- package/node_modules/@weavecode/server/dist/install/capabilities.js +1 -1
- package/node_modules/@weavecode/server/dist/install/codex-toml.js +1 -1
- package/node_modules/@weavecode/server/dist/install/file-assets.js +1 -1
- package/node_modules/@weavecode/server/dist/install/fingerprint.js +1 -1
- package/node_modules/@weavecode/server/dist/install/global-config.js +1 -1
- package/node_modules/@weavecode/server/dist/install/global-file-assets.js +1 -1
- package/node_modules/@weavecode/server/dist/install/init-files.d.ts +0 -9
- package/node_modules/@weavecode/server/dist/install/init-files.js +2 -2
- package/node_modules/@weavecode/server/dist/install/install-ledger.js +1 -1
- package/node_modules/@weavecode/server/dist/install/installer.js +1 -1
- package/node_modules/@weavecode/server/dist/install/library-index.js +1 -1
- package/node_modules/@weavecode/server/dist/install/mcp-rows.js +1 -1
- package/node_modules/@weavecode/server/dist/install/plugin-install.js +1 -1
- package/node_modules/@weavecode/server/dist/install/plugin-rows.js +1 -1
- package/node_modules/@weavecode/server/dist/install/plugin-templates.js +1 -1
- package/node_modules/@weavecode/server/dist/install/project-config.js +1 -1
- package/node_modules/@weavecode/server/dist/install/reader.js +1 -1
- package/node_modules/@weavecode/server/dist/install/scan-cache.js +1 -1
- package/node_modules/@weavecode/server/dist/install/scanner.js +1 -1
- package/node_modules/@weavecode/server/dist/install/settings-mcp.js +2 -2
- package/node_modules/@weavecode/server/dist/install/updates.js +1 -1
- package/node_modules/@weavecode/server/dist/market/builtin.js +1 -1
- package/node_modules/@weavecode/server/dist/market/identity.js +1 -1
- package/node_modules/@weavecode/server/dist/market/import.js +2 -2
- package/node_modules/@weavecode/server/dist/market/refresh.js +1 -1
- package/node_modules/@weavecode/server/dist/market/resolve.js +1 -1
- package/node_modules/@weavecode/server/dist/market/updates.js +1 -1
- package/node_modules/@weavecode/server/dist/registry.js +2 -2
- package/node_modules/@weavecode/server/dist/repositories/hook-dispatches.js +4 -4
- package/node_modules/@weavecode/server/dist/repositories/hook-events.js +6 -6
- package/node_modules/@weavecode/server/dist/repositories/hook-rules.js +4 -4
- package/node_modules/@weavecode/server/dist/repositories/libraries.js +1 -1
- package/node_modules/@weavecode/server/dist/repositories/orchestrations.js +7 -7
- package/node_modules/@weavecode/server/dist/repositories/plugin-states.js +1 -1
- package/node_modules/@weavecode/server/dist/repositories/projects.js +1 -1
- package/node_modules/@weavecode/server/dist/repositories/push-subscriptions.js +2 -2
- package/node_modules/@weavecode/server/dist/repositories/session-watches.js +4 -4
- package/node_modules/@weavecode/server/dist/repositories/sessions.js +2 -2
- package/node_modules/@weavecode/server/dist/repositories/uploads.js +11 -11
- package/node_modules/@weavecode/server/dist/statusline/cache-sweeper.js +1 -1
- package/node_modules/@weavecode/server/dist/statusline/generator.js +1 -1
- package/node_modules/@weavecode/server/dist/statusline/manager.js +3 -3
- package/node_modules/@weavecode/server/dist/surfaces.js +1 -1
- package/node_modules/@weavecode/server/dist/watch/cache.js +1 -1
- package/node_modules/@weavecode/server/dist/watch/classifier.js +1 -1
- package/node_modules/@weavecode/server/dist/watch/plugin-mods.js +1 -1
- package/node_modules/@weavecode/server/dist/watch/sync-scheduler.js +1 -1
- package/node_modules/@weavecode/server/dist/watch/watch-service.js +1 -1
- package/node_modules/@weavecode/server/package.json +4 -4
- package/node_modules/@weavecode/server/web/dist/assets/{abnfDiagram-WEYOIA3C-t5OQjhuS.js → abnfDiagram-WEYOIA3C-S1lL1V_n.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{arc-De-uH_Q9.js → arc-CoTNHyHV.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{architectureDiagram-ZHVYKT53-ImPclD43.js → architectureDiagram-ZHVYKT53-C6ttfnzW.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{blockDiagram-RJAE7QA3-B5xEQs6X.js → blockDiagram-RJAE7QA3-CYr3Cpu9.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{c4Diagram-XDPPPE54-DP8MjIgJ.js → c4Diagram-XDPPPE54-BFS7PhLD.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/channel-DxQHp3Yc.js +1 -0
- package/node_modules/@weavecode/server/web/dist/assets/{chunk-2E7WHVMD-C3UFIDyj.js → chunk-2E7WHVMD-DJ7X_Shu.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{chunk-2Q5K7J3B-Bgw-3YfG.js → chunk-2Q5K7J3B-B8nr2rdz.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{chunk-4EMNKR2T-Dy_Wq9qn.js → chunk-4EMNKR2T-DmnZmUMU.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{chunk-55XCU76K-D32C0DXX.js → chunk-55XCU76K-Xz9a8dmp.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{chunk-5VM5RSS4-Dpmi-9Gi.js → chunk-5VM5RSS4-Dg9mg7pf.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{chunk-JWPE2WC7-CEYXaZDX.js → chunk-JWPE2WC7-CmjTZO8o.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{chunk-VQ5W62QI-A616Pgzo.js → chunk-VQ5W62QI-D3YDdJ3E.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{chunk-XXDRQBXY-CnxFMLWV.js → chunk-XXDRQBXY-s1OG9sqW.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{chunk-ZCHMQSOR-BhjCTig8.js → chunk-ZCHMQSOR-C3hINQU3.js} +2 -2
- package/node_modules/@weavecode/server/web/dist/assets/{classDiagram-v2-4MYWR3UA-rzlq5tPv.js → classDiagram-v2-4MYWR3UA-BTsbYrVl.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{cose-bilkent-JH36ORCC-CxWQXzj8.js → cose-bilkent-JH36ORCC-C0W8Y-jI.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{cynefin-EF2NZ3EQ-AFHjx2wU.js → cynefin-EF2NZ3EQ-stAu4Rh-.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{cynefinDiagram-WF24UDRP-Bp_Oaf9U.js → cynefinDiagram-WF24UDRP-CqYibiiv.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{dagre-NK4GIZVX-7oUPIU35.js → dagre-NK4GIZVX-qqcoJAqB.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{diagram-CBK3MWTC-D_rS_rSY.js → diagram-CBK3MWTC-D0YTopb7.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{diagram-I5XIIV2D-Duc_cKMb.js → diagram-I5XIIV2D-Csvw6aYr.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{diagram-ODIL2UCW-DA0XFVXm.js → diagram-ODIL2UCW-Dl0tYLkF.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{diagram-PFBEJUXE-D1U0Xhtt.js → diagram-PFBEJUXE-BCPSWZPe.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{diagram-RJA3I4VV-CbDFY871.js → diagram-RJA3I4VV-ETg-BrAJ.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{diagram-TYUNFSNR-jPg9AxQv.js → diagram-TYUNFSNR-_M6ZxBG7.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{ebnfDiagram-V4P3TTPT-ZHfGTB0N.js → ebnfDiagram-V4P3TTPT-C-e_W7qx.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{elk-QONTBCTQ-C-ESJrUi.js → elk-QONTBCTQ-B5TBharB.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{erDiagram-KYQIGQAA-DGK7TeHj.js → erDiagram-KYQIGQAA-D08rj2pv.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{flowDiagram-IUGLLWBU-CVV4rL8v.js → flowDiagram-IUGLLWBU-BALTxsKh.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{ganttDiagram-R7GPNTJY-CuAwNvbm.js → ganttDiagram-R7GPNTJY-Cts193jT.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{gitGraphDiagram-PDYL7XHY-D_15Wtf-.js → gitGraphDiagram-PDYL7XHY-L9qYUX0v.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{infoDiagram-MVDRKAX5-ClqhbrCa.js → infoDiagram-MVDRKAX5-Bv47rgU0.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{ishikawaDiagram-HPEHV2GE-CUJ891JX.js → ishikawaDiagram-HPEHV2GE-Da8_s6cs.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{journeyDiagram-BOSHW7O7-B4skiMu-.js → journeyDiagram-BOSHW7O7-Bj3CjZOf.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{kanban-definition-FNSA4HC5-UNGJR_y_.js → kanban-definition-FNSA4HC5-D1hicmMu.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{linear-BEB-UwbR.js → linear-CWQg2iA1.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/main-XLn3EZFh.css +11 -0
- package/node_modules/@weavecode/server/web/dist/assets/main-bsb0lQoL.js +1096 -0
- package/node_modules/@weavecode/server/web/dist/assets/{mermaid.core-knGXJfjz.js → mermaid.core-C-wP0Zg2.js} +4 -4
- package/node_modules/@weavecode/server/web/dist/assets/{mindmap-definition-6OY57UG3-CEldbr3a.js → mindmap-definition-6OY57UG3-Dk0VKqre.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{pegDiagram-ECIUJNBX-cNCkGLx3.js → pegDiagram-ECIUJNBX-Bp1K_F9z.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/pet-J6izA90s.js +1 -0
- package/node_modules/@weavecode/server/web/dist/assets/{pieDiagram-GNMPY74T-CfMEFiQD.js → pieDiagram-GNMPY74T-BZ4rGy3t.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{quadrantDiagram-D57K4MC3-knmi2rwP.js → quadrantDiagram-D57K4MC3-B4N5KRsR.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{railroadDiagram-Y72NRBL7-BJ7AzhEo.js → railroadDiagram-Y72NRBL7-C8nx8oHf.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{requirementDiagram-EQYSW5RA-Dte2LGQM.js → requirementDiagram-EQYSW5RA-VSH57d0d.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{sankeyDiagram-SY24JHO5-3noLaWgd.js → sankeyDiagram-SY24JHO5-jUb1hcya.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{sequenceDiagram-BLEHNHQU-CclOWTTc.js → sequenceDiagram-BLEHNHQU-E2BioCNi.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{sizeCapture-INFHLROL-B82sbLhA.js → sizeCapture-INFHLROL-BdKrbRmI.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{stateDiagram-v2-A6IESKWZ-BXfVDwSN.js → stateDiagram-v2-A6IESKWZ-tFz7uNM7.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{swimlanes-B3ENRKFQ-D4lKZaeV.js → swimlanes-B3ENRKFQ-B9BAPDWw.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/swimlanesDiagram-AYQRV4AK-DQ2NPLl9.js +8 -0
- package/node_modules/@weavecode/server/web/dist/assets/{timeline-definition-JXYKGLGB-D6H6zP5b.js → timeline-definition-JXYKGLGB-CofNnFTK.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{usecaseDiagram-WPOLBNNX-D2J2bKo_.js → usecaseDiagram-WPOLBNNX-DOvjhJjJ.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{vennDiagram-Q3Y3IDCW-pdRbIkpB.js → vennDiagram-Q3Y3IDCW-BcFHWnhS.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{wardleyDiagram-IVAIDKWA-Cyd2QPMf.js → wardleyDiagram-IVAIDKWA-Bz2aqRAs.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{xychartDiagram-4URNHDU4-Bd4BkwVM.js → xychartDiagram-4URNHDU4-DpNF6Vsq.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/index.html +2 -2
- package/node_modules/@weavecode/server/web/dist/pet.html +80 -10
- package/node_modules/@weavecode/templates/dist/resources/pets/weave-spider/pet.json +1 -1
- package/node_modules/@weavecode/templates/dist/resources/pets/weave-spider/spritesheet.png +0 -0
- package/node_modules/@weavecode/templates/package.json +2 -2
- package/package.json +6 -6
- package/scripts/preinstall.mjs +60 -22
- package/node_modules/@weavecode/server/web/dist/assets/channel-C0RGiobt.js +0 -1
- package/node_modules/@weavecode/server/web/dist/assets/main-B_0jS_Gz.js +0 -1096
- package/node_modules/@weavecode/server/web/dist/assets/main-Czzlavi4.css +0 -11
- package/node_modules/@weavecode/server/web/dist/assets/pet-DJCpIDM5.js +0 -1
- package/node_modules/@weavecode/server/web/dist/assets/swimlanesDiagram-AYQRV4AK-DbdFh_d6.js +0 -8
|
@@ -1 +1 @@
|
|
|
1
|
-
import{createReadStream as
|
|
1
|
+
import{createReadStream as _}from"node:fs";import{createInterface as g}from"node:readline";const E=new Set(["Edit","Write","MultiEdit"]),n=t=>typeof t=="string"?t:null,p=t=>t&&typeof t=="object"?t:{};function w(t,e){if(t==="Write"){const r=n(e.content);return r===null?[]:[{before:"",after:r}]}if(t==="MultiEdit")return(Array.isArray(e.edits)?e.edits:[]).flatMap(r=>{const o=p(r),c=n(o.old_string),a=n(o.new_string);return c===null||a===null?[]:[{before:c,after:a}]});const i=n(e.old_string),s=n(e.new_string);return i===null||s===null?[]:[{before:i,after:s}]}export const CLAUDE_EDITS={async sessionEdits({transcriptPath:t}){if(!t)return null;const e=[],i=new Set,s=g({input:_(t,{encoding:"utf8"}),crlfDelay:1/0});try{for await(const r of s){if(!r.includes('"tool_use"'))continue;let o;try{o=JSON.parse(r)}catch{continue}const c=o.message?.content;if(Array.isArray(c))for(const a of c){const f=p(a);if(f.type!=="tool_use")continue;const u=n(f.name);if(!u||!E.has(u))continue;const l=n(f.id);if(l){if(i.has(l))continue;i.add(l)}const d=p(f.input),y=n(d.file_path);if(!y)continue;const h=n(o.timestamp);for(const m of w(u,d))e.push({path:y,hunk:m,at:h})}}}catch{return null}finally{s.close()}return e}};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{HARNESS_EVENTS as d}from"@weavecode/core";import{capFields as
|
|
1
|
+
import{HARNESS_EVENTS as d}from"@weavecode/core";import{capFields as l}from"../shared/json-cap.js";import{CLAUDE_PLAN as y}from"./plan.js";function _(o){try{const t=JSON.parse(o);return t&&typeof t=="object"&&!Array.isArray(t)?t:{}}catch{return{}}}function c(o,...t){for(const e of t)if(o[e]!=null)return o[e];return null}const g=[["toolName",["tool_name","toolName"]],["toolInput",["tool_input","toolInput"]],["toolResponse",["tool_response","toolResponse"]],["cwd",["cwd"]],["transcriptPath",["transcript_path","transcriptPath"]]],m=/^<\$\.([A-Za-z0-9_]+(?:\.[A-Za-z0-9_]+)*)>$/;function A(o,t,e){return typeof o!="string"?null:y.draftOf(o,t,e)?.text?{input:t,response:e}:null}function w(o){const t={...o};for(const[e,n]of g)for(const r of n)r in t&&(t[r]=`<$.${e}>`);return t}export function expandPayloadRefs(o){const t=o.raw;if(!t||typeof t!="object"||Array.isArray(t))return o;const e={...t};for(const[n,r]of Object.entries(e)){const a=typeof r=="string"?m.exec(r):null;a&&(e[n]=I(o,a[1]))}return{...o,raw:e}}function I(o,t){let e=o;for(const n of t.split(".")){if(!e||typeof e!="object")return null;e=e[n]}return e??null}export class ClaudeEventSource{source="claude";events=d.claude;normalize(t,e){const n=_(t.payload),r=t.eventType||String(n.hook_event_name??"unknown"),a=t.sessionId??c(n,"session_id","sessionId"),i=c(n,"tool_name","toolName"),s=c(n,"tool_input","toolInput"),p=c(n,"tool_response","toolResponse"),u=A(i,s,p),f={eventType:r,toolName:i,toolInput:u?.input??l(s),toolResponse:u?.response??l(p),cwd:t.cwd??c(n,"cwd"),transcriptPath:c(n,"transcript_path","transcriptPath"),raw:w(n)};return{projectId:e,source:"claude",eventType:r,sessionId:a??void 0,payload:JSON.stringify(f)}}}export const CLAUDE_EVENT_SOURCE=new ClaudeEventSource;export function frameFacts(o){const t=o?.raw,e=t&&typeof t=="object"&&typeof t.agent_id=="string"?t.agent_id:void 0;let n;if(o?.eventType==="PostToolUse"&&o.toolName==="Agent"){const s=o.toolResponse;s?.isAsync&&typeof s.agentId=="string"&&(n=s.agentId)}let r;Array.isArray(t&&typeof t=="object"?t.background_tasks:void 0)&&(r=t.background_tasks.filter(s=>s&&typeof s.id=="string"&&typeof s.status=="string").map(s=>({id:s.id,status:s.status})));const a={};e&&(a.agentId=e),n&&(a.spawnAgentId=n),r&&(a.backgroundTasks=r);const i=t&&typeof t=="object"&&typeof t.source=="string"?t.source:void 0;return i&&(a.rawSource=i),a}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{createReadStream as f}from"node:fs";import{createInterface as
|
|
2
|
-
`):""}export const CLAUDE_IMAGES={async sessionImages({transcriptPath:t}){if(!t)return null;const e=[],s=
|
|
1
|
+
import{createReadStream as f}from"node:fs";import{createInterface as p}from"node:readline";const u=new Set(["image/png","image/jpeg","image/gif","image/webp"]),l=10*1024*1024,o=t=>t&&typeof t=="object"?t:{};function m(t){if(!Array.isArray(t))return[];const e=[];for(const s of t){const a=o(s);if(a.type!=="image")continue;const n=o(a.source),r=typeof n.media_type=="string"?n.media_type:null,i=typeof n.data=="string"?n.data:null;if(!r||!i||!u.has(r))continue;const c=Buffer.from(i,"base64");c.length===0||c.length>l||e.push({mediaType:r,bytes:c})}return e}function y(t){return Array.isArray(t)?t.map(o).filter(e=>e.type==="text"&&typeof e.text=="string").map(e=>e.text).join(`
|
|
2
|
+
`):""}export const CLAUDE_IMAGES={async sessionImages({transcriptPath:t}){if(!t)return null;const e=[],s=p({input:f(t,{encoding:"utf8"}),crlfDelay:1/0});try{for await(const a of s){if(!a.includes('"type":"image"'))continue;const n=JSON.parse(a);if(n.type!=="user"||n.toolUseResult!=null)continue;const r=o(n.message).content,i=m(r);i.length!==0&&e.push({text:y(r),at:typeof n.timestamp=="string"?n.timestamp:null,images:i})}}catch{return null}finally{s.close()}return e}};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{CLAUDE_ASSETS as e}from"./assets.js";import{CLAUDE_CAPTURE as r}from"./capture.js";import{CLAUDE_EVENT_SOURCE as o}from"./event-source.js";import{CLAUDE_MESSAGING as t}from"./messaging.js";import{CLAUDE_PLUGINS as
|
|
1
|
+
import{CLAUDE_ASSETS as e}from"./assets.js";import{CLAUDE_CAPTURE as r}from"./capture.js";import{CLAUDE_EVENT_SOURCE as o}from"./event-source.js";import{CLAUDE_MESSAGING as t}from"./messaging.js";import{CLAUDE_PLUGINS as s}from"./plugins.js";import{CLAUDE_PLUGIN_STATE as a}from"./plugin-state.js";import{CLAUDE_BLOCKING_PROMPT as E}from"./questions.js";import{CLAUDE_RESUME as m}from"./resume.js";import{CLAUDE_DETECTOR as p}from"./detect.js";import{CLAUDE_STATUSLINE as A}from"./statusline/surface.js";import{CLAUDE_CONFIG as i}from"./config.js";import{CLAUDE_EDITS as C}from"./edits.js";import{CLAUDE_IMAGES as n}from"./images.js";import{CLAUDE_NARRATION as f}from"./narration.js";import{CLAUDE_COMMANDS as L}from"./commands.js";import{CLAUDE_LIVENESS as U}from"./liveness.js";import{CLAUDE_REWIND as _}from"./rewind.js";export{ClaudeEventSource,CLAUDE_EVENT_SOURCE,frameFacts,expandPayloadRefs}from"./event-source.js";export{CLAUDE_ASSETS,ClaudeJsonCorruptError,readClaudeJson}from"./assets.js";export{CLAUDE_PLUGINS,createClaudePluginSurface,WEAVE_MARKETPLACE}from"./plugins.js";export{CLAUDE_PLUGIN_STATE}from"./plugin-state.js";export{CLAUDE_RESUME}from"./resume.js";export{CLAUDE_DETECTOR}from"./detect.js";export{CLAUDE_MESSAGING}from"./messaging.js";export{CLAUDE_BLOCKING_PROMPT}from"./questions.js";export{CLAUDE_PROMPT_RELAY}from"./prompt.js";export{CLAUDE_PROMPT_INBOX}from"./prompt-inbox.js";export{CLAUDE_SIDE_QUESTION}from"./side-question.js";export{interruptMarkerAt,currentModelAt,currentModeAt,currentEffortAt,currentContextTokensAt,preQuestionTextAt}from"./transcript.js";export{CLAUDE_EDITS}from"./edits.js";export{CLAUDE_IMAGES}from"./images.js";export{CLAUDE_NARRATION}from"./narration.js";export{CLAUDE_REWIND,parseRewindLine}from"./rewind.js";export{CLAUDE_COMMANDS,commandExecutions}from"./commands.js";export{CLAUDE_LIVENESS,claudeLivenessById,parseClaudeSessionReg,pidAlive,pidAliveOf,shellDiscardedByClaude,CLAUDE_REG_GRACE_MS}from"./liveness.js";export{modelAliasTargets,aliasOfModel,bareModelName,defaultModelOf,startedModelOf,switchedModelOf,effortLevelOf,permissionModeOf}from"./model-aliases.js";export{resolveClaudePeer}from"./peers.js";export{CLAUDE_CAPTURE,generateHookHandler,captureHookGroup,sweepWeaveHookEvents,groupIsWeave,captureGroupsPresent,readUserCapture,installUserCapture,uninstallUserCapture,stripProjectCapture,HOOK_HANDLER_MARKER}from"./capture.js";export{generateSettingsJson,mergeSettingsJson,stripWeaveSettings}from"./settings-gen.js";export{generateMcpJson,mergeMcpJson,stripWeaveMcp}from"./mcp-gen.js";export{generateAutoMemoryHook}from"./helpers-gen.js";export{CLAUDE_STATUSLINE}from"./statusline/surface.js";export{CLAUDE_CONFIG,ensureTrustAccepted as ensureClaudeTrustAccepted}from"./config.js";export{generateStatuslineScript}from"./statusline/generator.js";export*from"./statusline/config.js";export const CLAUDE_DRIVER={id:"claude",displayName:"Claude Code",capabilities:["assets","events","resume","detect","plugins","pluginState","messaging","questions","capture","statusline","config","edits","images","narration","commands","liveness","rewind"],assets:e,events:o,resume:m,detect:p,plugins:s,pluginState:a,messaging:t,questions:E,capture:r,statusline:A,config:i,edits:C,images:n,narration:f,commands:L,liveness:U,rewind:_};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{readdirSync as
|
|
1
|
+
import{readdirSync as u,readFileSync as a}from"node:fs";import{join as c}from"node:path";export function parseClaudeSessionReg(e){let t;try{t=JSON.parse(e)}catch{return null}const n=t;return typeof n?.pid!="number"||!Number.isInteger(n.pid)||n.pid<0||typeof n.sessionId!="string"||!n.sessionId?null:{pid:n.pid,sessionId:n.sessionId}}export function pidAlive(e){try{return process.kill(e,0),!0}catch(t){return t.code!=="ESRCH"}}export const CLAUDE_REG_GRACE_MS=9e4;export function pidAliveOf(e,t,n=Date.now()){const s=t.get(e.sessionId);if(s!==void 0)return s;if(e.harness!=="claude"||e.lastEventType==="SessionStart"&&(e.eventCount??0)<=1)return null;const r=Date.parse(e.lastSeenAt);return!Number.isFinite(r)||n-r<CLAUDE_REG_GRACE_MS?null:!1}export function shellDiscardedByClaude(e,t,n=Date.now()){if(e.harness!=="claude"||e.lastEventType!=="SessionStart"||(e.eventCount??0)>1||t.has(e.sessionId))return!1;const s=Date.parse(e.lastSeenAt);return Number.isFinite(s)&&n-s>=CLAUDE_REG_GRACE_MS}export function claudeLivenessById(e=null){const t=e??l(),n=new Map;if(!t)return n;let s;try{s=u(t)}catch{return n}for(const r of s){if(!/^\d+\.json$/.test(r))continue;let i;try{i=a(c(t,r),"utf8")}catch{continue}const o=parseClaudeSessionReg(i);o&&n.set(o.sessionId,pidAlive(o.pid))}return n}function l(){const e=process.platform==="win32"?process.env.USERPROFILE:process.env.HOME;return e?c(e,".claude","sessions"):null}export const CLAUDE_LIVENESS={harness:"claude",async alive(e){const t=claudeLivenessById();if(!e)return t;const n=new Map;for(const s of e){const r=t.get(s);r!==void 0&&n.set(s,r)}return n}};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export function generateMcpJson(e){const r={};if(e.includeWeaveServer){const
|
|
1
|
+
export function generateMcpJson(e){const r={};if(e.includeWeaveServer){const t=e.platform.os==="windows"?"cmd":"npx",c=e.platform.os==="windows"?["/c","npx","weave","mcp","start"]:["weave","mcp","start"];r.weave={command:t,args:c,env:{WEAVE_MCP:"true"}}}return{mcpServers:r}}export function mergeMcpJson(e,r){const t={...e},c=o(r.mcpServers)?r.mcpServers:{},n=o(t.mcpServers)?{...t.mcpServers}:{};for(const[s,p]of Object.entries(c))(s==="weave"||n[s]===void 0)&&(n[s]=p);return t.mcpServers=n,t}function o(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}export function stripWeaveMcp(e){const r={...e};if(o(r.mcpServers)){const t={...r.mcpServers};delete t.weave,Object.keys(t).length>0?r.mcpServers=t:delete r.mcpServers}return r}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{HARNESS_LIFECYCLE as
|
|
1
|
+
import{HARNESS_LIFECYCLE as m,INJECTABLE_EVENTS as E}from"@weavecode/core";import{CLAUDE_PROMPT_INBOX as f}from"./prompt-inbox.js";import{CLAUDE_PROMPT_RELAY as A}from"./prompt.js";import{CLAUDE_RESUME as L}from"./resume.js";import{CLAUDE_SIDE_QUESTION as g}from"./side-question.js";export const CLAUDE_ATTACH={kinds:["image","file"],composePrompt(e,l){const s=l.filter(n=>!e.includes(n.path));if(s.length===0)return e;const t=s.map(n=>n.path).join(`
|
|
2
2
|
`);return e?`${e}
|
|
3
3
|
|
|
4
|
-
${
|
|
4
|
+
${t}`:t}};const _={kinds:["file","dir"],lines:!0,expression:({path:e,kind:l,lines:s})=>{const t=/\s/.test(e)?`"${e}"`:e;return l==="dir"?`@${t}/`:s?s.start===s.end?`@${t}#L${s.start}`:`@${t}#L${s.start}-${s.end}`:`@${t}`},recognize:e=>{const l=[];for(const s of e.matchAll(/(?:^|\s)@"([^"@,。;:!?、()【】「」『』《》…]+)"/g)){const t=s[1],n=s.index+s[0].length-t.length-3;let i=n+t.length+3;const r=/#L(\d+)(?:-(\d+))?/.exec(e.slice(i,i+16));r&&r.index===0&&(i+=r[0].length);const o=e[i];o!==void 0&&!/\s/.test(o)||!t||t.startsWith("/")||t.includes(":")||t.includes("#")||l.push({start:n,end:i,ref:e.slice(n,i),path:t,kind:"file",...r?{lines:{start:Number(r[1]),end:Number(r[2]??r[1])}}:{}})}for(const s of e.matchAll(/(?:^|\s)@([^\s@,。;:!?、()【】「」『』《》“”‘’…]+)/g)){const t=s[1],n=s.index+s[0].length-t.length-1,i=n+1+t.length,r=e[i];if(r!==void 0&&!/\s/.test(r))continue;const o=/#L(\d+)(?:-(\d+))?$/.exec(t),d=o?t.slice(0,o.index):t,u=d.endsWith("/"),c=u?d.slice(0,-1):d;if(!c||c.startsWith("/")||c.includes(":")||c.includes("#")||c.startsWith('"')||l.some(p=>n>=p.start&&i<=p.end))continue;const a=o?Number(o[1]):null,h=o?.[2]?Number(o[2]):a;l.push({start:n,end:i,ref:e.slice(n,i),path:c,kind:u?"dir":"file",...a!=null?{lines:{start:a,end:h}}:{}})}return l.sort((s,t)=>s.start-t.start)}};export const CLAUDE_MESSAGING={harness:"claude",discovery:!0,prompt:A,promptInbox:f,queuedPrompt:null,inject:{rideEvents:E.claude},headless:L,idleSignals:[...m.claude.close,"SessionEnd"],paneEnvSource:"hook",attach:CLAUDE_ATTACH,pathRefs:_,sideQuestion:g};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import
|
|
1
|
+
import c from"node:fs";import i from"node:os";import{CLAUDE_ASSETS as p}from"./assets.js";export function modelAliasTargets(t,e=process.env,r=i.homedir()){const o=f(r);return t.map(n=>{const s=`ANTHROPIC_DEFAULT_${n.toUpperCase()}_MODEL`,l=o[s]??o[`${s}_NAME`]??e[s]??e[`${s}_NAME`]??n;return{alias:n,actual:l}})}export function switchedModelOf(t,e){if(t!=="PostModelSwitch")return null;const r=e,o=r?.to_model;if(typeof o!="string"||!o)return null;const n=r?.from_model;return{from:typeof n=="string"&&n?n:null,to:o}}export function defaultModelOf(t=i.homedir(),e=process.env){const r=f(t).ANTHROPIC_MODEL??e.ANTHROPIC_MODEL;if(r)return r;const o=u(t)?.model;return modelAliasTargets([typeof o=="string"&&o?o:"sonnet"],e,t)[0].actual}export function startedModelOf(t,e,r=i.homedir(),o=process.env){if(t!=="SessionStart")return null;const n=e??{},s=n.model;if(typeof s=="string"&&s)return{model:s};const l=typeof n.source=="string"?n.source:null;return l!=null&&!a.has(l)?null:{model:defaultModelOf(r,o)}}const a=new Set(["startup","resume","compact","clear"]);export function effortLevelOf(t){const e=t?.effort?.level;return typeof e=="string"&&e?e:null}export function permissionModeOf(t){const e=t?.permission_mode;return typeof e=="string"&&e?e:null}export function bareModelName(t){return t.slice(t.lastIndexOf("/")+1).replace(/\[1m\]$/i,"")}export function aliasOfModel(t,e){if(!e)return null;const r=bareModelName(e);return t.find(o=>bareModelName(o.actual)===r)?.alias??null}export function defaultPermissionModeOf(t=i.homedir()){const e=u(t)?.permissions?.defaultMode;return typeof e=="string"&&e!==""?e:null}function u(t){try{return JSON.parse(c.readFileSync(p.userConfigFile(t),"utf8"))}catch{return null}}function f(t){const e=u(t),r={};for(const[o,n]of Object.entries(e?.env??{}))typeof n=="string"&&(r[o]=n);return r}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{readNewLines as
|
|
1
|
+
import{readNewLines as a,transcriptSize as c}from"./transcript-cursor.js";const r=new Map,f=64;export const CLAUDE_NARRATION={async sessionNarration({transcriptPath:t}){if(!t)return null;const e=c(t);if(e===null)return r.delete(t),null;const i=r.get(t);r.delete(t);const n=i??{cur:{offset:0},segs:[]};e<n.cur.offset&&(n.cur.offset=0,n.segs=[]);const s=a(t,n.cur,e);if(s===null)return null;for(const l of s){const o=u(l);o&&n.segs.push(o)}if(r.size>=f){const l=r.keys().next().value;l!==void 0&&r.delete(l)}return r.set(t,n),n.segs},lineParser:u};function u(t){if(!t.includes('"type":"assistant"'))return null;let e;try{e=JSON.parse(t)}catch{return null}if(e.type!=="assistant"||e.isSidechain===!0)return null;const i=e.message?.content;if(!Array.isArray(i))return null;const n=i.filter(s=>!!s&&typeof s=="object"&&s.type==="text"&&typeof s.text=="string").map(s=>s.text).join("").trim();return n?{at:typeof e.timestamp=="string"?e.timestamp:null,text:n}:null}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{readdirSync as a,readFileSync as c}from"node:fs";import{homedir as m}from"node:os";import{join as
|
|
1
|
+
import{readdirSync as a,readFileSync as c}from"node:fs";import{homedir as m}from"node:os";import{join as s}from"node:path";export function resolveClaudePeer(i,n=s(m(),".claude","sessions")){let t;try{t=a(n)}catch{return null}for(const r of t){if(!/^\d+\.json$/.test(r))continue;let o;try{o=JSON.parse(c(s(n,r),"utf8"))}catch{continue}const e=o;if(e?.sessionId===i&&typeof e.name=="string"&&e.name)return{name:e.name}}return null}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
const
|
|
1
|
+
const r=/[\\/]plans[\\/][^\\/]+\.md$/i,l=t=>typeof t=="string"&&t.trim()?t:null,o=t=>t&&typeof t=="object"?t:{};export const CLAUDE_PLAN={tool:"ExitPlanMode",writeTools:["Write","Edit","MultiEdit"],fileHint:"plans",draftOf(t,a,f){const e=o(a),n=o(f);if(t==="ExitPlanMode")return{text:l(e.plan)??l(n.plan),filePath:l(e.planFilePath)??l(n.filePath)};if(t==null||!CLAUDE_PLAN.writeTools.includes(t))return null;const i=l(e.file_path)??l(n.filePath);return!i||!r.test(i)?null:{text:l(e.content),filePath:i}}};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{spawn as
|
|
2
|
-
`).trim()||`exit ${
|
|
3
|
-
`,"utf8")},
|
|
4
|
-
`,"utf8")}const f=
|
|
1
|
+
import{spawn as _}from"node:child_process";import{homedir as P}from"node:os";import{cp as F,lstat as U,mkdir as x,readFile as M,readdir as H,writeFile as N}from"node:fs/promises";import s from"node:path";import{linkOrCopy as V,removeInstalled as q}from"../shared/install-link.js";import{CLAUDE_ASSETS as B}from"./assets.js";export const WEAVE_MARKETPLACE="weave";const R="weave-marketplace",W=6e4,T=2e3,G=64*1024;export function claudeCommandLine(o){return["claude",...o.map(p=>`"${p.replace(/"/g,'\\"')}"`)].join(" ")}function z(o){if(!(o.exitCode!==null||o.signalCode!==null)){if(process.platform==="win32"&&o.pid!==void 0){_("taskkill",["/pid",String(o.pid),"/t","/f"],{windowsHide:!0,stdio:"ignore"}).unref();return}o.kill("SIGKILL")}}function S(o){return o.length>T?`${o.slice(0,T)}\u2026`:o}function J(o){try{const p=JSON.parse(o);return p&&typeof p=="object"&&!Array.isArray(p)?p:null}catch{return null}}export const execCli=(o,p)=>new Promise((b,v)=>{const $=process.platform==="win32",w=_($?process.env.ComSpec||"cmd.exe":"claude",$?["/d","/s","/c",claudeCommandLine(o)]:o,{windowsHide:!0,windowsVerbatimArguments:$,stdio:["ignore","pipe","pipe"]}),g=`claude ${o.join(" ")}`;let h="",m="",l=!1;const y=u=>{l||(l=!0,clearTimeout(j),v(new Error(S(u))))},j=setTimeout(()=>{z(w),y(`${g}: timed out after ${p.timeoutMs}ms`)},p.timeoutMs);w.stdout?.setEncoding("utf8"),w.stdout?.on("data",u=>{h.length<G&&(h+=u)}),w.stderr?.setEncoding("utf8"),w.stderr?.on("data",u=>{m.length<G&&(m+=u)}),w.on("error",u=>y(`${g}: ${u.message}`)),w.on("close",u=>{if(l)return;if(l=!0,clearTimeout(j),u===0){b({stdout:h,stderr:m});return}const A=[m,h].filter(Boolean).join(`
|
|
2
|
+
`).trim()||`exit ${u}`;v(new Error(S(`${g}: ${A}`)))})});export function createClaudePluginSurface(o={}){const p=o.exec??execCli,b=e=>p(e,{timeoutMs:W}),v=()=>B.userConfigFile(P()),$=()=>s.join(P(),".claude","plugins","installed_plugins.json"),w=()=>s.join(P(),".claude",R),g=e=>s.join(e,".claude","settings.json"),h=e=>s.join(e,".claude","settings.local.json"),m=(e,n)=>`${e}@${n??WEAVE_MARKETPLACE}`,l=async e=>{try{const n=JSON.parse(await M(e,"utf8"));return n&&typeof n=="object"&&!Array.isArray(n)?n:{}}catch{return{}}},y=async(e,n)=>{await x(s.dirname(e),{recursive:!0}),await N(e,`${JSON.stringify(n,null,2)}
|
|
3
|
+
`,"utf8")},j=e=>{const n=e.enabledPlugins;return!n||typeof n!="object"||Array.isArray(n)?{}:Object.fromEntries(Object.entries(n).filter(([,a])=>typeof a=="boolean"))},u=e=>{const n=e.enabledPlugins;return n&&typeof n=="object"&&!Array.isArray(n)?{...n}:{}},A=async()=>{const e=(await l($())).plugins;if(!e||typeof e!="object"||Array.isArray(e))return{};const n={};for(const[a,t]of Object.entries(e))Array.isArray(t)&&(n[a]=t);return n},O=(e,n,a)=>{const t=n?.[n.length-1];return{key:e,alreadyInstalled:a,...t?.scope?{scope:t.scope}:{},...t?.installPath?{installPath:t.installPath}:{},...t?.version?{version:t.version}:{}}},K=async(e,n,a={})=>{const t=w(),i=s.join(t,"plugins",n);await q(i),await x(s.dirname(i),{recursive:!0});const r=await M(s.join(e,".claude-plugin","plugin.json"),"utf8").then(()=>!0,()=>!1),d=await H(e).catch(()=>[]);if(r&&!d.includes("node_modules")&&!d.includes(".git"))await V(e,i);else if(await F(e,i,{recursive:!0,filter:k=>{const L=s.basename(k);return L!=="node_modules"&&L!==".git"}}),!r){const k=s.join(i,".claude-plugin","plugin.json");await x(s.dirname(k),{recursive:!0}),await N(k,JSON.stringify({name:n,version:a.version??"0.0.0",...a.description?{description:a.description}:{}},null,2)+`
|
|
4
|
+
`,"utf8")}const f=s.join(t,".claude-plugin","marketplace.json"),c=await l(f),E=Array.isArray(c.plugins)?[...c.plugins]:[],C={name:n,source:`./plugins/${n}`},I=E.findIndex(k=>k?.name===n);return I>=0?E[I]=C:E.push(C),c.name=WEAVE_MARKETPLACE,c.owner||(c.owner={name:"weave"}),c.plugins=E,await y(f,c),t},D=async(e,n,a)=>{if(!e.dir)throw new Error(`marketplace dir required for ${n}@${e.name}`);if((await U(e.dir)).isSymbolicLink())return;const t=s.join(e.dir,".claude-plugin","marketplace.json"),i=await l(t),r=Array.isArray(i.plugins)?[...i.plugins]:[],d=`./${s.relative(e.dir,a).split(s.sep).join("/")}`,f={name:n,source:d},c=r.findIndex(E=>E?.name===n);c>=0?r[c]=f:r.push(f),i.name=e.name,i.owner||(i.owner={name:"weave"}),i.plugins=r,await y(t,i)};return{projectPluginDir:e=>s.join(e,".claude","plugins"),pluginKey:m,parsePluginKey(e){const n=e.lastIndexOf("@");return n>0?{name:e.slice(0,n),market:e.slice(n+1)}:{name:e,market:WEAVE_MARKETPLACE}},async globalInstall(e,n={}){let a=n.name;if(!a){const c=await l(s.join(e,".claude-plugin","plugin.json"));a=typeof c.name=="string"?c.name:void 0}if(!a)throw new Error(`plugin manifest missing name: ${e}`);const t=n.marketplace,i=m(a,t?.name),r=(await A())[i];if(r&&r.length>0)return O(i,r,!0);if(t)await D(t,a,e),await b(["plugin","marketplace","add",t.dir??""]);else{const c=await K(e,a,n);await b(["plugin","marketplace","add",c])}const{stdout:d}=await b(["plugin","install",i,"--scope","user","--json"]),f=J(d);if(f?.outcome==="failed")throw new Error(S(String(f.message??"plugin install failed")));return O(i,(await A())[i],!1)},readInstalled:A,async isInstalled(e,n){const a=(await A())[m(e,n)];return!!a&&a.length>0},async uninstall(e,n){const a=m(e,n),t=(await A())[a];if(!t||t.length===0)return;const i=[...new Set(t.map(r=>r.scope??"user"))];for(const r of i){const{stdout:d}=await b(["plugin","uninstall",a,"--scope",r,"--json"]),f=J(d);if(f?.outcome==="failed")throw new Error(S(String(f.message??"plugin uninstall failed")))}},async removeMarketplace(e){const n=await l(s.join(P(),".claude","plugins","known_marketplaces.json")),a=s.resolve(e),t=Object.entries(n).find(([,i])=>i&&typeof i=="object"&&typeof i.installLocation=="string"&&s.resolve(i.installLocation)===a)?.[0];t&&await b(["plugin","marketplace","remove",t])},async readProjectEnabled(e,n,a){return j(await l(g(e)))[m(n,a)]??!1},async setProjectEnabled(e,n,a,t){const i=g(e),r=await l(i);r.enabledPlugins={...u(r),[m(n,t)]:a},await y(i,r)},async readGlobalEnabled(){return j(await l(v()))},async writeGlobalEnabled(e,n){const a=v(),t=await l(a);t.enabledPlugins={...u(t),[e]:n},await y(a,t)},pluginScopes:()=>["user","project","local"],async readEnabledOverrides(e){const[n,a,t]=await Promise.all([l(v()).then(j),l(g(e)).then(j),l(h(e)).then(j)]);return{user:n,project:a,local:t}},async setEnabledOverride(e,n,a,t){const i=n==="user"?v():n==="project"?g(e):h(e),r=await l(i),d=u(r);t==="inherit"?delete d[a]:d[a]=t==="on",r.enabledPlugins=d,await y(i,r)}}}export const CLAUDE_PLUGINS=createClaudePluginSurface();
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export const CLAUDE_PROMPT_INBOX={socketEnv:"CLAUDE_CODE_MESSAGING_SOCKET",tokenEnv:"CLAUDE_CODE_MESSAGING_TOKEN",requiresAuthOn:e=>e==="win32",frame:({token:e,text:
|
|
1
|
+
export const CLAUDE_PROMPT_INBOX={socketEnv:"CLAUDE_CODE_MESSAGING_SOCKET",tokenEnv:"CLAUDE_CODE_MESSAGING_TOKEN",requiresAuthOn:e=>e==="win32",frame:({token:e,text:n})=>{const t=[];return e&&t.push(JSON.stringify({type:"auth",token:e})),t.push(JSON.stringify({type:"user",message:{role:"user",content:n}})),t.join(`
|
|
2
2
|
`)+`
|
|
3
3
|
`}};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import{resolveClaudePeer as
|
|
1
|
+
import{resolveClaudePeer as t}from"./peers.js";const n="[weave one-way injection \u2014 no reply is expected: do not call SendMessage or ListAgents, just act on this prompt in this session.]";export const CLAUDE_PROMPT_RELAY={bin:"claude",args:["-p","--no-session-persistence","--strict-mcp-config","--disable-slash-commands","--tools","SendMessage,ListAgents","-n","weave"],senderName:"weave",instruction:(e,s,o)=>`Send the following message verbatim to the Claude session named "${e}" using the SendMessage tool, then stop immediately. Do not use any other tool and do not wait for a reply \u2014 the handover is done once the tool call returns, so this process must exit promptly.
|
|
2
2
|
|
|
3
|
-
${o.oneWay?`${
|
|
3
|
+
${o.oneWay?`${n}
|
|
4
4
|
|
|
5
|
-
`:""}${s}`,resolve:
|
|
5
|
+
`:""}${s}`,resolve:t};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{HARNESS_LIFECYCLE as b}from"@weavecode/core";import{CLAUDE_PLAN as
|
|
2
|
-
${t}`:
|
|
1
|
+
import{HARNESS_LIFECYCLE as b}from"@weavecode/core";import{CLAUDE_PLAN as k}from"./plan.js";import{defaultPermissionModeOf as g}from"./model-aliases.js";import{preQuestionTextAt as w}from"./transcript.js";import{readTail as S}from"./transcript-cursor.js";const v=512*1024,m="\x1B[B",u=" ",A="\x1B[Z",x=2e3,f="(preview cannot be shown in full \u2014 compare the option labels and descriptions instead)",T="No preview available",N="n",C="press n to add notes",P=/[\p{M}\u200b-\u200f\u2028-\u202e\u2060-\u206f\u180b-\u180f\ufe0e\ufe0f]/u,q=[{keys:["1"],label:"Yes, and switch to default (ask each time) for this session"},{keys:["2"],label:"No"}],Y={bypassPermissions:"BYPASS PERMISSIONS (no further prompts)"};export function planApprovalOptions(e){return e==null||e==="default"||e==="plan"?q.map(t=>({...t})):[{keys:["1"],label:`Yes, and switch to ${Y[e]??e} for this session`},{keys:["2"],label:"Yes, manually approve edits"},{keys:["3"],label:"Tell Claude what to change",description:"shift+tab to approve with this feedback",input:!0,textTail:[A]}]}const $=[{keys:["1"],label:"Yes"},{keys:["2"],label:"Yes, and don't ask again for this tool"},{keys:["3"],label:"No, and tell Claude what to do differently (esc)"}],M=[{keys:["1"],label:"Yes, and tell Claude what to do next"},{keys:["2"],label:"No"}],d={key:"AskUserQuestion:opaque",header:null,question:"The session is asking a question (options unavailable \u2014 answer in its terminal)",multiSelect:!1,options:[]};function Q(e){if(!e||typeof e!="object")return null;const t=e,n=r(t.to_model),s=r(t.from_model);return!n||!s||n===s||t.prompt_cache_warm!==!0?null:{key:"model:switch",header:"Switch model?",question:`Your next response will be slower and use more tokens. This conversation is cached for the current model. Switching to ${n} means the full history gets re-read on your next message.`,multiSelect:!1,options:[{keys:["1"],label:`Yes, switch to ${n}`},{keys:["2"],label:"No, go back"}]}}function _(e){if(e==null||typeof e!="object")return"";try{const t=JSON.stringify(e);return!t||t==="{}"?"":t.length>160?`${t.slice(0,160)}\u2026`:t}catch{return""}}function E(e,t){return[t?{keys:[String(e+1)],label:"Type something",input:!0,textFocus:Array.from({length:e},()=>m),textTail:[u,"\r"]}:{keys:[String(e+1)],label:"Type something",input:!0,textTail:["\r"]},{keys:[String(e+2)],label:"Chat about this",chat:!0}]}function I(){return{key:"AskUserQuestion:submit",header:"Submit",question:"Review your answers",multiSelect:!1,submit:!0,options:[{keys:[u,"1"],label:"Submit answers"},{keys:[u,"2"],label:"Cancel"}]}}function r(e){return typeof e=="string"&&e?e:null}function L(e){if(!Array.isArray(e))return[];const t=[];for(const n of e){if(!n||typeof n!="object")continue;const s=r(n.label);if(!s)continue;const o=n.description;t.push({keys:[String(t.length+1)],label:s,description:typeof o=="string"&&o?o:null,preview:O(n.preview)})}return t}function O(e){return typeof e!="string"?null:e.length>x?f:e.replace(/�/g,"").trim()?P.test(e)?f:e:null}function U(e,t){return t<2?[String(e+1)]:[String(e===0?2:1),String(e+1)]}function j(e){return e.map((t,n)=>({keys:U(n,e.length),commit:["\r"],label:t.label,description:t.description,preview:t.preview??T}))}function B(e){const t=[];return e>=2&&t.push({keys:[N],label:"Notes:",description:C,input:!0,textTail:["\r"]}),t.push({keys:[String(e),m,"\r"],label:"Chat about this",chat:!0}),t}export const CLAUDE_BLOCKING_PROMPT={plan:k,blockingTools:b.claude.questionTools,permissionNotificationType:"permission_prompt",silentPermissionModes:["bypassPermissions","dontAsk"],permissionQuestion(e){const t=e.toolName?`${e.toolName}${e.toolInput?` ${_(e.toolInput)}`:""}`:"",n=e.permissionMode==="auto"||/classifier/i.test(e.message??""),s=e.message?.trim()||"Claude needs your permission";return{key:"permission:confirm",header:n?"Permission (auto mode)":"Permission",question:t?`${s}
|
|
2
|
+
${t}`:s,multiSelect:!1,options:[...n?M:$]}},parseQuestions(e,t){if(e==="AskUserQuestion"){const n=t&&typeof t=="object"?t.questions:void 0;if(!Array.isArray(n))return[d];const s=[];for(const o of n){if(!o||typeof o!="object")continue;const l=r(o.question),p=r(o.header),a=o.multiSelect===!0,i=L(o.options);if(!l||i.length===0)continue;const h=p??l.slice(0,24),c=!a&&i.some(y=>y.preview!=null);s.push({key:`AskUserQuestion:${h}`,header:p,question:l,options:c?[...j(i),...B(i.length)]:[...i,...E(i.length,a)],multiSelect:a,previewMode:c})}return s.length===0?[d]:((s.length>=2||s.some(o=>o.multiSelect))&&s.push(I()),s)}return[{key:"ExitPlanMode:approve",header:"Exit plan mode?",question:"Claude wants to exit plan mode",multiSelect:!1,options:planApprovalOptions(g())}]},eventQuestion(e,t){return e==="PreModelSwitch"?Q(t.raw):null},async preQuestion(e){if(!e)return null;const t=S(e,v);return t===null?null:w(t)}};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export const CLAUDE_RESUME={supported:!0,bin:"claude",args:
|
|
1
|
+
export const CLAUDE_RESUME={supported:!0,bin:"claude",args:s=>["--resume",s,"-p"],promptStdin:!0,openArgs:s=>["--resume",s],extractArgs:(s,e)=>["--resume",s,"--fork-session","--no-session-persistence","--session-id",e],minVersion:"2.1.287"};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{readNewLines as
|
|
1
|
+
import{readNewLines as l,transcriptSize as a}from"./transcript-cursor.js";const s=new Map,f=64;export const CLAUDE_REWIND={async sessionRewinds({transcriptPath:e}){if(!e)return null;const t=a(e);if(t===null)return s.delete(e),null;const o=s.get(e);s.delete(e);const n=o??{cur:{offset:0},marks:[],seenRoot:!1};t<n.cur.offset&&(n.cur.offset=0,n.marks=[],n.seenRoot=!1);const u=l(e,n.cur,t);if(u===null)return null;for(const r of u){if(!r.includes('"type":"user"'))continue;const i=parseRewindLine(r,n.seenRoot);i&&n.marks.push(i);try{c(JSON.parse(r))&&(n.seenRoot=!0)}catch{}}if(s.size>=f){const r=s.keys().next().value;r!==void 0&&s.delete(r)}return s.set(e,n),n.marks}};export function parseRewindLine(e,t){if(!e.includes('"type":"user"'))return null;let o;try{o=JSON.parse(e)}catch{return null}if(!c(o)||!t)return null;const n=o.timestamp;return typeof n!="string"?null:{at:n,boundaryAt:null}}function c(e){if(e.type!=="user"||e.parentUuid!==null||e.isSidechain===!0)return!1;const t=e.message?.content;return!(typeof t=="string"&&t.startsWith("<command-message>"))}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{captureHookGroup as r,sweepWeaveHookEvents as
|
|
1
|
+
import{captureHookGroup as r,sweepWeaveHookEvents as d}from"./capture.js";const f=".claude/helpers/statusline.cjs",S="Generated by weave \u2014 do not edit manually";export const WEAVE_PERMISSIONS_ALLOW=["Bash(npx weave:*)","Bash(pnpm:*)","Bash(npm:*)"],WEAVE_PERMISSIONS_DENY=["Read(./.env)","Read(./.env.*)","Read(./secrets/*)"];export function generateSettingsJson(n){const{components:s,hooks:e,platform:u,helpersDir:o}=n,c={$comment:S};if(s.helpers){const t={};e.preToolUse&&(t.PreToolUse=r("PreToolUse",o)),e.postToolUse&&(t.PostToolUse=r("PostToolUse",o)),e.userPromptSubmit&&(t.UserPromptSubmit=r("UserPromptSubmit",o)),e.sessionStart&&(t.SessionStart=r("SessionStart",o)),e.stop&&(t.Stop=r("Stop",o)),e.stopFailure&&(t.StopFailure=r("StopFailure",o)),e.subagentStop&&(t.SubagentStop=r("SubagentStop",o)),e.subagentStart&&(t.SubagentStart=r("SubagentStart",o)),e.notification&&(t.Notification=r("Notification",o)),e.postToolUseFailure&&(t.PostToolUseFailure=r("PostToolUseFailure",o)),e.permissionRequest&&(t.PermissionRequest=r("PermissionRequest",o)),e.permissionDenied&&(t.PermissionDenied=r("PermissionDenied",o)),e.preCompact&&(t.PreCompact=r("PreCompact",o)),e.sessionEnd&&(t.SessionEnd=r("SessionEnd",o)),e.preModelSwitch&&(t.PreModelSwitch=r("PreModelSwitch",o),t.PostModelSwitch=r("PostModelSwitch",o)),c.hooks=t}return c.permissions={allow:[...WEAVE_PERMISSIONS_ALLOW],deny:[...WEAVE_PERMISSIONS_DENY]},c.env={WEAVE_ENABLED:"true"},s.helpers&&(c.statusLine={type:"command",command:u.os==="windows"?`node "${o}/statusline.cjs"`:"node "+o+"/statusline.cjs",padding:0,refreshInterval:30}),c}export function mergeSettingsJson(n,s){const e={...n},u=s.hooks;if(u&&typeof u=="object"){const i=d(l(e.hooks)?{...e.hooks}:{})??{};for(const[a,p]of Object.entries(u)){const m=i[a];m===void 0?i[a]=p:Array.isArray(m)&&(i[a]=[...m,...Array.isArray(p)?p:[]])}e.hooks=i}const o=e.statusLine;s.statusLine&&(o===void 0||statusLineIsWeave(o))&&(e.statusLine=s.statusLine);const c=s.permissions;if(c&&typeof c=="object"){const i=l(e.permissions)?e.permissions:{};for(const a of["allow","deny"]){const p=c[a],m=i[a];Array.isArray(p)?i[a]=y(m,p):m===void 0&&(i[a]=p)}e.permissions=i}const t=s.env;if(t&&typeof t=="object"){const i=l(e.env)?e.env:{};for(const[a,p]of Object.entries(t))i[a]===void 0&&(i[a]=p);e.env=i}return e}function l(n){return typeof n=="object"&&n!==null&&!Array.isArray(n)}export function statusLineIsWeave(n){if(!l(n))return!1;const s=n.command;return typeof s=="string"&&h(s,f)}function h(n,s){return n.replace(/\\/g,"/").includes(s)}function y(n,s){return Array.isArray(n)?[...n,...s.filter(e=>!n.includes(e))]:[...s]}export function stripWeaveSettings(n){const s={...n};if(l(s.hooks)){const e=d(s.hooks);e?s.hooks=e:delete s.hooks}if(statusLineIsWeave(s.statusLine)&&delete s.statusLine,l(s.permissions)){const e={...s.permissions},u=(o,c)=>{const t=e[o];if(!Array.isArray(t))return;const i=t.filter(a=>!c.includes(a));i.length>0?e[o]=i:delete e[o]};u("allow",WEAVE_PERMISSIONS_ALLOW),u("deny",WEAVE_PERMISSIONS_DENY),Object.keys(e).length>0?s.permissions=e:delete s.permissions}if(l(s.env)){const e={...s.env};delete e.WEAVE_ENABLED,Object.keys(e).length>0?s.env=e:delete s.env}return s.$comment===S&&delete s.$comment,s}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{existsSync as
|
|
2
|
-
`)&&n.length<=80&&!
|
|
1
|
+
import{existsSync as a}from"node:fs";const s=2e3,o=/^[^\x00-\x1f\x7f]+$/,c=/^<(?:analysis|summary)>/,p="exploring|reviewing|inspecting|tracing|checking|locating|reporting|summarizing|examining|reading|searching|scanning|analyzing|investigating|fetching|loading|probing|auditing|mapping|listing|comparing|verifying|testing|extracting|processing|measuring|assessing|evaluating|identifying|confirming|drafting|refactoring|debugging|grepping",l=new RegExp(`^[\\p{P}\\s]*(${p})\\b`,"iu"),f=/\p{Script=Han}/u,m=n=>!n.includes(`
|
|
2
|
+
`)&&n.length<=80&&!f.test(n)&&l.test(n),e=(n,t)=>n&&typeof n=="object"?n[t]:void 0;export const CLAUDE_SIDE_QUESTION={command(n){return`/btw ${n}`},validate(n){const t=n.trim();return t?t.length>s?{ok:!1,error:`\u95EE\u9898\u8FC7\u957F\uFF08\u4E0A\u9650 ${s} \u5B57\u7B26\uFF09`}:o.test(t)?{ok:!0,text:t}:{ok:!1,error:"\u95EE\u9898\u4E0D\u80FD\u542B\u6362\u884C\u6216\u63A7\u5236\u5B57\u7B26\uFF08\u4F1A\u63D0\u524D\u63D0\u4EA4\uFF09"}:{ok:!1,error:"\u95EE\u9898\u4E0D\u80FD\u4E3A\u7A7A"}},answerOf(n,t){if(n!=="SubagentStop")return null;const r=e(t,"raw"),u=e(r,"agent_transcript_path");if(typeof u!="string"||!u||a(u))return null;const g=e(r,"last_assistant_message");if(typeof g!="string")return null;const i=g.trim();return i&&!c.test(i)&&!m(i)?i:null}};
|
|
@@ -8,5 +8,11 @@ import type { StatuslineConfig } from './config.js';
|
|
|
8
8
|
export interface GenerateStatuslineOptions {
|
|
9
9
|
cacheDir: string;
|
|
10
10
|
version: string;
|
|
11
|
+
/**
|
|
12
|
+
* 版本号落在哪个文件(daemon 启动时写入):脚本运行时读它显示当前版本。
|
|
13
|
+
* 不内联版本号是为了让脚本内容对发版免疫——否则每升一版,所有项目的
|
|
14
|
+
* statusline.cjs 都被判成「需要更新」。
|
|
15
|
+
*/
|
|
16
|
+
versionFile?: string;
|
|
11
17
|
}
|
|
12
18
|
export declare function generateStatuslineScript(config: StatuslineConfig, opts: GenerateStatuslineOptions): string;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{CONTEXT_STYLE_FORMAT as c,POWERLINE_DEFAULT_GLYPHS as e,SEGMENT_DEFAULT_FORMAT as d,SEGMENT_ORDER as p}from"./config.js";const h={gray:"90",red:"31",green:"32",yellow:"33",blue:"34",magenta:"35",cyan:"36"},f={gray:"100",red:"41",green:"42",yellow:"43",blue:"44",magenta:"45",cyan:"46"},g="\u2588",m="\u2591",
|
|
1
|
+
import{CONTEXT_STYLE_FORMAT as c,POWERLINE_DEFAULT_GLYPHS as e,SEGMENT_DEFAULT_FORMAT as d,SEGMENT_ORDER as p}from"./config.js";const h={gray:"90",red:"31",green:"32",yellow:"33",blue:"34",magenta:"35",cyan:"36"},f={gray:"100",red:"41",green:"42",yellow:"43",blue:"44",magenta:"45",cyan:"46"},g="\u2588",m="\u2591",E=10,F=8*1024*1024,r=5e3,v=3600,y=60,w=60,C=60,b=5;export function generateStatuslineScript(u,t){const n=JSON.stringify(u),a=JSON.stringify(t.cacheDir),i=JSON.stringify(h),s=JSON.stringify(f),o=JSON.stringify(d),l=JSON.stringify(c);return`#!/usr/bin/env node
|
|
2
2
|
/**
|
|
3
3
|
* weave statusline \u2014 generated by the weave dashboard.
|
|
4
4
|
* Reads Claude Code's statusline JSON from stdin and prints a summary.
|
|
@@ -7,22 +7,29 @@ import{CONTEXT_STYLE_FORMAT as c,POWERLINE_DEFAULT_GLYPHS as e,SEGMENT_DEFAULT_F
|
|
|
7
7
|
*/
|
|
8
8
|
'use strict';
|
|
9
9
|
|
|
10
|
-
const CONFIG = ${
|
|
11
|
-
const ANSI = ${
|
|
12
|
-
const BG = ${
|
|
13
|
-
const SEGMENT_FORMAT = ${
|
|
14
|
-
const CONTEXT_FORMAT = ${
|
|
10
|
+
const CONFIG = ${n};
|
|
11
|
+
const ANSI = ${i};
|
|
12
|
+
const BG = ${s};
|
|
13
|
+
const SEGMENT_FORMAT = ${o};
|
|
14
|
+
const CONTEXT_FORMAT = ${l};
|
|
15
15
|
const BAR_FILL = '${g}';
|
|
16
16
|
const BAR_EMPTY = '${m}';
|
|
17
|
-
const BAR_CELLS = ${
|
|
18
|
-
const GIT_IDENTITY_TTL = ${
|
|
19
|
-
const GIT_CHANGES_TTL = ${
|
|
20
|
-
const GIT_BRANCH_TTL = ${
|
|
17
|
+
const BAR_CELLS = ${E};
|
|
18
|
+
const GIT_IDENTITY_TTL = ${v};
|
|
19
|
+
const GIT_CHANGES_TTL = ${y};
|
|
20
|
+
const GIT_BRANCH_TTL = ${w};
|
|
21
21
|
const GIT_SYNC_TTL = ${C};
|
|
22
|
-
const GIT_RETRY_TTL = ${
|
|
23
|
-
const CACHE_DIR = ${
|
|
22
|
+
const GIT_RETRY_TTL = ${b};
|
|
23
|
+
const CACHE_DIR = ${a};
|
|
24
24
|
// Stamped into the row-0 logo so the running version is always visible.
|
|
25
|
-
|
|
25
|
+
// \u8BFB daemon \u5199\u7684\u7248\u672C\u6587\u4EF6\u800C\u4E0D\u662F\u5185\u8054\u5E38\u91CF\uFF1A\u811A\u672C\u5185\u5BB9\u56E0\u6B64\u4E0D\u968F\u53D1\u7248\u53D8\u5316\u3002
|
|
26
|
+
const WEAVE_VERSION = (() => {
|
|
27
|
+
try {
|
|
28
|
+
return require('node:fs').readFileSync(${JSON.stringify(t.versionFile??"")}, 'utf8').trim() || 'unknown';
|
|
29
|
+
} catch {
|
|
30
|
+
return 'unknown'; // daemon \u8FD8\u6CA1\u5199\u8FC7\u7248\u672C\u6587\u4EF6\uFF08\u9996\u6B21\u8FD0\u884C\u524D\uFF09
|
|
31
|
+
}
|
|
32
|
+
})();
|
|
26
33
|
// Powerline glyphs (Nerd Font), configurable via CONFIG.powerline: undefined
|
|
27
34
|
// falls back to the classic triangle set; an empty cap string disables the cap.
|
|
28
35
|
const PL = CONFIG.powerline || {};
|
|
@@ -376,7 +383,7 @@ function sessionTokens(transcriptPath) {
|
|
|
376
383
|
store.tokens[transcriptPath] = entry;
|
|
377
384
|
if (stat.size === entry.offset) return entry.total || null;
|
|
378
385
|
|
|
379
|
-
var len = Math.min(stat.size - entry.offset, ${
|
|
386
|
+
var len = Math.min(stat.size - entry.offset, ${F});
|
|
380
387
|
var buf = Buffer.alloc(len);
|
|
381
388
|
var read = 0;
|
|
382
389
|
var fd = -1;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{readFileSync as
|
|
1
|
+
import{readFileSync as g}from"node:fs";import{createHash as d}from"node:crypto";import f from"node:path";export function gitCacheKeyOf(a){return d("sha1").update(a.toLowerCase().replace(/\\/g,"/").replace(/\/+$/,"")).digest("hex").slice(0,16)}export function statuslineFactsFromCache(a,l,u=Date.now()){let o;try{o=JSON.parse(g(f.join(a,`git-${gitCacheKeyOf(l)}.json`),"utf-8"))}catch{return null}const s=t=>{const i=o.git?.[t];return!i||typeof i.expires!="number"||i.expires<=u?null:i.value??null},e={},c=s("branch");if(typeof c=="string"&&c){e.git={branch:c};const t=s("sync");t&&typeof t=="object"&&t.sync&&(e.git.ahead=t.ahead??"",e.git.behind=t.behind??"",e.git.sync=t.sync)}const n=s("git_user");n&&typeof n=="object"&&n.user&&(e.git_user={user:n.user,email:n.email??""});const r=s("changes");return r&&typeof r=="object"&&(e.changes={added:String(r.added??0),deleted:String(r.deleted??0),files:String(r.files??0)}),Object.keys(e).length>0?e:null}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{readFile as o,writeFile as m,mkdir as u,access as l}from"node:fs/promises";import n from"node:path";import{SEGMENT_ORDER as p}from"./config.js";import{generateStatuslineScript as f}from"./generator.js";import{statuslineFactsFromCache as
|
|
2
|
-
`,"utf-8")}export const CLAUDE_STATUSLINE={segments:p,tui:"injectable",scriptRelPath:`${
|
|
1
|
+
import{readFile as o,writeFile as m,mkdir as u,access as l}from"node:fs/promises";import n from"node:path";import{SEGMENT_ORDER as p}from"./config.js";import{generateStatuslineScript as f}from"./generator.js";import{statuslineFactsFromCache as d}from"./git-cache.js";const h=".claude/helpers",S="statusline.cjs",w=".claude/settings.json";async function g(t){try{return await l(t),!0}catch{return!1}}export async function ensureSettingsStatusLine(t,e){const a=n.join(t,w),i=process.platform==="win32";let r={};if(await g(a))try{r=JSON.parse(await o(a,"utf-8"))}catch{r={}}const s=e.scriptPath,c=i?`node "${s}"`:`node ${s}`;r.statusLine={type:"command",command:c,padding:0,refreshInterval:Math.max(1,Math.round(e.refreshInterval))},await u(n.dirname(a),{recursive:!0}),await m(a,`${JSON.stringify(r,null,2)}
|
|
2
|
+
`,"utf-8")}export const CLAUDE_STATUSLINE={segments:p,tui:"injectable",scriptRelPath:`${h}/${S}`,generate:(t,e)=>f(t,e),wire:ensureSettingsStatusLine,facts:d};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{closeSync as y,openSync as
|
|
2
|
-
`).slice(0,-1),
|
|
1
|
+
import{closeSync as y,openSync as p,readSync as S,statSync as h}from"node:fs";export function transcriptSize(e){try{return h(e).size}catch{return null}}export function isCompleteJsonLine(e){try{return JSON.parse(e),!0}catch{return!1}}export function readNewLines(e,t,o,s=isCompleteJsonLine){if(o<t.offset&&(t.offset=0),o===t.offset)return[];const r=t.offset,n=Buffer.alloc(o-r);let f;const c=p(e,"r");try{f=S(c,n,0,n.length,r)}catch{return null}finally{y(c)}const u=n.lastIndexOf(10,f-1);if(u<0){const i=n.subarray(0,f).toString("utf8");return s(i)?(t.offset=r+f,[i]):[]}const l=n.subarray(0,u+1).toString("utf8").split(`
|
|
2
|
+
`).slice(0,-1),a=n.subarray(u+1,f).toString("utf8");return a!==""&&s(a)?(l.push(a),t.offset=r+f):t.offset=r+u+1,l}export function readTail(e,t){const o=transcriptSize(e);if(o===null)return null;const s=Math.max(0,o-t),r=Buffer.alloc(o-s),n=p(e,"r");try{const f=S(n,r,0,r.length,s);return r.subarray(0,f).toString("utf8")}catch{return null}finally{y(n)}}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
const m="[Request interrupted by user";function y(s){return typeof s=="string"?s:Array.isArray(s)?s.map(
|
|
2
|
-
`)){if(!
|
|
3
|
-
`)){if(!
|
|
4
|
-
`)){if(!
|
|
5
|
-
`)){if(!
|
|
6
|
-
`)){if(!
|
|
7
|
-
`);let
|
|
1
|
+
const m="[Request interrupted by user";function y(s){return typeof s=="string"?s:Array.isArray(s)?s.map(n=>{const e=n?.text;return typeof e=="string"?e:""}).join(""):""}export function interruptMarkerAt(s){let n=null;for(const e of s.split(`
|
|
2
|
+
`)){if(!e.includes(m))continue;let o;try{o=JSON.parse(e)}catch{continue}const t=o;if(t?.type!=="user"||!y(t.message?.content).startsWith(m))continue;const i=Date.parse(String(t.timestamp));Number.isFinite(i)&&(n===null||i>n)&&(n=i)}return n}const d="<synthetic>";export function currentModelAt(s){let n=null;for(const e of s.split(`
|
|
3
|
+
`)){if(!e.includes('"model"'))continue;let o;try{o=JSON.parse(e)}catch{continue}const t=o,i=t?.message?.model??t?.model;typeof i!="string"||!i||i===d||(n=i)}return n}export function currentEffortAt(s){let n=null;for(const e of s.split(`
|
|
4
|
+
`)){if(!e.includes('"effort"'))continue;let o;try{o=JSON.parse(e)}catch{continue}const t=o?.effort;typeof t!="string"||!t||(n=t)}return n}export function currentModeAt(s){let n=null;for(const e of s.split(`
|
|
5
|
+
`)){if(!e.includes("permissionMode"))continue;let o;try{o=JSON.parse(e)}catch{continue}const t=o?.permissionMode;typeof t!="string"||!t||(n=t)}return n}export function currentContextTokensAt(s){let n=null;for(const e of s.split(`
|
|
6
|
+
`)){if(!e.includes('"usage"'))continue;let o;try{o=JSON.parse(e)}catch{continue}const t=o?.message?.usage;if(!t||typeof t!="object")continue;const i=u=>typeof t[u]=="number"&&Number.isFinite(t[u])?t[u]:0,f=i("input_tokens")+i("output_tokens")+i("cache_read_input_tokens")+i("cache_creation_input_tokens");f<=0||(n=f)}return n}export function preQuestionTextAt(s){const n=/"(?:AskUserQuestion|ExitPlanMode)"/,e=s.split(`
|
|
7
|
+
`);let o=null,t="";for(let l=e.length-1;l>=0;l--){const a=e[l];if(!n.test(a))continue;let c;try{c=JSON.parse(a)}catch{continue}const r=c;if(!(r?.type!=="assistant"||!r.message?.content?.some(p=>p?.type==="tool_use"&&(p.name==="AskUserQuestion"||p.name==="ExitPlanMode")))){o=typeof r.message?.id=="string"?r.message.id:null,t=typeof r.timestamp=="string"?r.timestamp:"";break}}if(o===null)return null;const i=[];let f=t;for(const l of e){if(!l.includes(o))continue;let a;try{a=JSON.parse(l)}catch{continue}const c=a;if(!(c?.type!=="assistant"||c.message?.id!==o))for(const r of c.message?.content??[])r?.type==="text"&&typeof r.text=="string"&&r.text.trim()&&(i.push(r.text),typeof c.timestamp=="string"&&(f=c.timestamp))}const u=i.join("").trim();return u?{at:f,text:u}:null}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import t from"node:path";import{FILE_ASSET_SPECS as
|
|
1
|
+
import t from"node:path";import{FILE_ASSET_SPECS as n}from"../shared/file-specs.js";import{readCodexMcpServers as l,removeCodexMcpServer as a,writeCodexMcpServer as d}from"./mcp.js";const i=e=>t.join(e,".codex","config.toml");export const CODEX_ASSETS={harness:"codex",targetDir(e,r,s,o){const c=n[e].dirs.codex;if(r!=="user"||!c?.user)throw new Error(`"${e}" has no Codex ${r==="user"?"user":"project"} surface`);return t.join(o,...c.user.split("/"))},projectSkillsRoots:()=>[".codex/skills",".agents/skills"],globalSkillsRoots:e=>[t.join(e,...".agents/skills".split("/")),t.join(e,...".codex/skills".split("/"))],userConfigFile:e=>i(e),mcpScopes:()=>["user"],mcpDest:(e,r)=>e==="user"?i(r):void 0,pluginCacheDir:e=>t.join(e,".codex","plugins","cache"),async mcpRead(e,r,s){if(e!=="user")throw new Error("Codex MCP servers are user-level only (~/.codex/config.toml)");return l(i(s))},async mcpWrite(e,r,s,o,c){if(e!=="user")throw new Error("Codex MCP servers are user-level only (~/.codex/config.toml)");await d(o,c,i(s))},async mcpRemove(e,r,s,o){if(e!=="user")throw new Error("Codex MCP servers are user-level only (~/.codex/config.toml)");return a(o,i(s))},classify(e){return e===".codex"||e.startsWith(".codex/")||e===".agents"||e.startsWith(".agents/")?!0:e.slice(e.lastIndexOf("/")+1)==="AGENTS.md"},ignore(e){return!(e===".codex"||e.startsWith(".codex/")||e===".agents"||e.startsWith(".agents/")||e==="AGENTS.md")}};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{access as
|
|
2
|
-
`,"utf-8")}export async function readUserCapture(e={}){const
|
|
1
|
+
import{access as A,mkdir as y,readFile as d,unlink as k,writeFile as x}from"node:fs/promises";import i from"node:path";import{HARNESS_EVENTS as j}from"@weavecode/core";import{generateHookHandler as g}from"../claude/capture.js";import{CANONICAL_TO_WIRE as C}from"./event-source.js";import{codexHome as v}from"./home.js";export const CODEX_HOOK_EVENTS=j.codex.map(e=>C[e]??e),CODEX_HOOK_HANDLER_MARKER="helpers/hook-handler.cjs";const O="@version weave@",H=3;function a(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function f(e){return e.replace(/\\/g,"/")}function h(e){return i.join(v(e),"hooks.json")}function E(e){return i.join(v(e),"helpers")}function u(e){return i.join(E(e),"hook-handler.cjs")}export function groupIsWeave(e){if(!a(e))return!1;const t=e.hooks;return Array.isArray(t)?t.some(o=>{if(!a(o))return!1;const n=o.commandWindows;return typeof o.command=="string"&&f(o.command).includes(CODEX_HOOK_HANDLER_MARKER)||typeof n=="string"&&f(n).includes(CODEX_HOOK_HANDLER_MARKER)}):!1}export function sweepWeaveHookEvents(e){if(!a(e))return{};const t={};for(const[o,n]of Object.entries(e)){if(!Array.isArray(n)){t[o]=n;continue}const r=n.filter(s=>!groupIsWeave(s));r.length>0&&(t[o]=r)}return t}export function captureHookGroup(e,t){const o=`node "${f(t)}"`;return[{hooks:[{type:"command",command:o,commandWindows:o,timeout:H,...e==="PostToolUse"||e==="PermissionRequest"?{async:!0}:{}}]}]}export function captureGroupsPresent(e){if(!a(e))return!1;const t=e.hooks;return a(t)?Object.values(t).some(o=>Array.isArray(o)&&o.some(groupIsWeave)):!1}async function N(e){try{return await A(e),!0}catch{return!1}}async function l(e){let t;try{t=await d(e,"utf-8")}catch{return{}}let o;try{o=JSON.parse(t)}catch{throw new Error(`codex hooks file is not parseable JSON: ${e}`)}if(!a(o))throw new Error(`codex hooks file is not a JSON object: ${e}`);return o}async function m(e,t){await y(i.dirname(e),{recursive:!0}),await x(e,JSON.stringify(t,null,2)+`
|
|
2
|
+
`,"utf-8")}export async function readUserCapture(e={}){const t=e.home,o=await l(h(t)).catch(()=>({}));return{installed:captureGroupsPresent(o),helperPresent:await N(u(t))}}export async function readScriptHealth(e={}){const t=e.home,o=u(t),n=(await readUserCapture({home:t})).installed;let r=null;try{r=await d(o,"utf-8")}catch{r=null}return{source:n?"user":"none",present:r!==null,weaveOwned:r!==null&&r.includes(O),generatedVersion:r?.match(/@version weave@(\S+)/)?.[1]??null,reportsInbox:!1,reportsPaneEnv:r!==null&&r.includes("terminalEnv()")}}export async function installUserCapture(e){const t=e.home,o=E(t);await y(o,{recursive:!0});const n=u(t);await x(n,g(e.version,"codex"),"utf-8");const r=h(t),s=await l(r),p=sweepWeaveHookEvents(s.hooks);for(const c of CODEX_HOOK_EVENTS){const w=p[c];p[c]=Array.isArray(w)?[...w,...captureHookGroup(c,n)]:captureHookGroup(c,n)}s.hooks=p,typeof s.description!="string"&&(s.description="weave hooks (generated \u2014 do not edit)"),await m(r,s)}export async function uninstallUserCapture(e={}){const t=e.home,o=h(t),n=await l(o).catch(()=>null);if(n){const s=sweepWeaveHookEvents(n.hooks);Object.keys(s).length===0?delete n.hooks:n.hooks=s,n.hooks===void 0&&(n.description===void 0||n.description==="weave hooks (generated \u2014 do not edit)")?await k(o).catch(()=>{}):await m(o,n)}const r=u(t);try{(await d(r,"utf-8")).includes(O)&&await k(r)}catch{}}export async function stripProjectCapture(e){const t=i.join(e,".codex","hooks.json"),o=await l(t).catch(()=>null);if(!o)return;const n=sweepWeaveHookEvents(o.hooks);Object.keys(n).length===0?delete o.hooks:o.hooks=n,await m(t,o)}export const CODEX_CAPTURE={harness:"codex",readUserCapture:e=>readUserCapture(e),installUserCapture:e=>installUserCapture(e),uninstallUserCapture:e=>uninstallUserCapture(e),stripProjectCapture,scriptHealth:e=>readScriptHealth(e)};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{spawn as p}from"node:child_process";import{readdir as m,readFile as f,stat as
|
|
2
|
-
`).find(
|
|
3
|
-
`)};
|
|
4
|
-
`))>=0;){const
|
|
1
|
+
import{spawn as p}from"node:child_process";import{readdir as m,readFile as f,stat as b}from"node:fs/promises";import{homedir as S}from"node:os";import r from"node:path";import{codexCommandLine as x}from"./plugins.js";const k=[{name:"model",description:"Choose what model and reasoning effort to use",source:"builtin"},{name:"approvals",description:"Choose what Codex can do without approval",source:"builtin"},{name:"new",description:"Start a new chat during a conversation",source:"builtin"},{name:"init",description:"Create an AGENTS.md file with project instructions",source:"builtin"},{name:"compact",description:"Summarize the conversation to free context",source:"builtin"},{name:"diff",description:"Show the diff of the working tree",source:"builtin"},{name:"mention",description:"Mention a file in the conversation",argsHint:"<path>",source:"builtin"},{name:"status",description:"Show session configuration and token usage",source:"builtin"},{name:"mcp",description:"List configured MCP tools",source:"builtin"},{name:"prompts",description:"Browse and use custom prompts",source:"builtin"},{name:"skills",description:"Browse and use skills",source:"builtin"},{name:"plugins",description:"Browse and manage plugins",source:"builtin"},{name:"review",description:"Review the current changes",source:"builtin"},{name:"undo",description:"Undo the last turn",source:"builtin"},{name:"statusline",description:"Configure the status line",source:"builtin"},{name:"logout",description:"Sign out of your account",source:"builtin"},{name:"quit",description:"Exit Codex",source:"builtin"}];function h(t){const n=/^---\r?\n([\s\S]*?)\r?\n---/.exec(t)?.[1]??"";return/^description:\s*(.+)$/m.exec(n)?.[1]?.trim().replace(/^["']|["']$/g,"")||(t.replace(/^---\r?\n[\s\S]*?\r?\n---\r?\n?/,"").split(`
|
|
2
|
+
`).find(i=>i.trim()!==""&&!i.startsWith("#"))?.trim()??"")}async function w(t){try{const n=await b(t);return n.isDirectory()?"dir":n.isFile()?"file":"other"}catch{return"other"}}async function v(t){try{const n=[];for(const i of await m(t,{withFileTypes:!0})){if(!i.name.endsWith(".md"))continue;const e=r.join(t,i.name);(i.isFile()||i.isSymbolicLink()&&await w(e)==="file")&&n.push(e)}return n}catch{return[]}}async function C(t){try{const n=[];for(const i of await m(t,{withFileTypes:!0})){const e=r.join(t,i.name);(i.isDirectory()||i.isSymbolicLink()&&await w(e)==="dir")&&n.push(e)}return n}catch{return[]}}async function j(t){const n=[];for(const i of await v(t)){const e=h(await f(i,"utf8").catch(()=>""));n.push({name:r.basename(i,".md"),description:e,source:"command"})}return n}async function L(t){const n=[];for(const i of await C(t)){const e=h(await f(r.join(i,"SKILL.md"),"utf8").catch(()=>""));n.push({name:r.basename(i),description:e,source:"skill",sigil:"$",inline:!0})}return n}function A(t){const n=t?.data;if(!Array.isArray(n))return null;const i=[];for(const e of n){const s=e?.skills;if(Array.isArray(s))for(const a of s){const o=a;typeof o.name!="string"||o.enabled===!1||i.push({name:o.name,description:typeof o.description=="string"?o.description:"",source:typeof o.pluginId=="string"?"plugin":"skill",sigil:"$",inline:!0})}}return i}const O=1e4;function E(t){return new Promise(n=>{const i=process.platform==="win32",e=p(i?process.env.ComSpec||"cmd.exe":"codex",i?["/d","/s","/c",x(["app-server"])]:["app-server"],{windowsHide:!0,windowsVerbatimArguments:i,stdio:["pipe","pipe","pipe"]});let s=!1,a="";const o=c=>{s||(s=!0,clearTimeout(g),i&&e.pid!==void 0?p("taskkill",["/pid",String(e.pid),"/t","/f"],{windowsHide:!0,stdio:"ignore"}).unref():e.kill("SIGKILL"),n(c))},g=setTimeout(()=>o(null),O),l=c=>{e.stdin?.write(`${JSON.stringify(c)}
|
|
3
|
+
`)};e.on("error",()=>o(null)),e.on("exit",()=>o(null)),e.stdin?.on("error",()=>o(null)),l({jsonrpc:"2.0",id:1,method:"initialize",params:{clientInfo:{name:"weave",title:"weave",version:"1.0.0"}}}),e.stdout?.setEncoding("utf8"),e.stdout?.on("data",c=>{a+=c;let d;for(;(d=a.indexOf(`
|
|
4
|
+
`))>=0;){const y=a.slice(0,d);a=a.slice(d+1);let u=null;try{u=JSON.parse(y)}catch{continue}if(u?.id===1){l({jsonrpc:"2.0",method:"initialized",params:{}}),l({jsonrpc:"2.0",id:2,method:"skills/list",params:{cwds:[t]}});continue}u?.id===2&&o(A(u.result))}})})}function M(t){const n=new Set;return t.filter(i=>n.has(i.name)?!1:(n.add(i.name),!0))}export function createCodexCommandSurface(t={}){const n=t.skills??E;return{harness:"codex",inputModes:[{kind:"slash",sigil:"/",named:!0}],async list({projectPath:i,homedir:e=S()}){const s=process.env.CODEX_HOME??r.join(e,".codex");return M([...k,...await j(r.join(s,"prompts")),...await n(i)??await L(r.join(s,"skills"))])},executions:()=>Promise.resolve(null)}}export const CODEX_COMMANDS=createCodexCommandSurface();
|