@weavecode/weave 0.1.3 → 0.1.4
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/express/node_modules/qs/.editorconfig +1 -1
- package/node_modules/@modelcontextprotocol/sdk/node_modules/express/node_modules/qs/CHANGELOG.md +45 -22
- package/node_modules/@modelcontextprotocol/sdk/node_modules/express/node_modules/qs/README.md +26 -1
- package/node_modules/@modelcontextprotocol/sdk/node_modules/express/node_modules/qs/dist/qs.js +27 -27
- package/node_modules/@modelcontextprotocol/sdk/node_modules/express/node_modules/qs/eslint.config.mjs +61 -50
- package/node_modules/@modelcontextprotocol/sdk/node_modules/express/node_modules/qs/lib/formats.js +7 -2
- package/node_modules/@modelcontextprotocol/sdk/node_modules/express/node_modules/qs/lib/parse.js +13 -6
- package/node_modules/@modelcontextprotocol/sdk/node_modules/express/node_modules/qs/lib/stringify.js +5 -3
- package/node_modules/@modelcontextprotocol/sdk/node_modules/express/node_modules/qs/lib/utils.js +15 -7
- package/node_modules/@modelcontextprotocol/sdk/node_modules/express/node_modules/qs/package.json +6 -6
- package/node_modules/@modelcontextprotocol/sdk/node_modules/express-rate-limit/node_modules/ip-address/dist/common.js +2 -2
- package/node_modules/@modelcontextprotocol/sdk/node_modules/express-rate-limit/node_modules/ip-address/package.json +2 -2
- package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/README.md +2 -3
- package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/cjs/helper/css/common.js +8 -3
- package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/cjs/helper/css/index.js +1 -1
- package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/cjs/helper/route/index.js +3 -1
- package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/cjs/jsx/base.js +1 -1
- package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/cjs/middleware/bearer-auth/index.js +8 -0
- package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/cjs/middleware/serve-static/index.js +3 -1
- package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/cjs/router/trie-router/node.js +2 -2
- package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/cjs/utils/url.js +11 -6
- package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/helper/css/common.js +8 -3
- package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/helper/css/index.js +1 -1
- package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/helper/route/index.js +3 -1
- package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/jsx/base.js +1 -1
- package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/middleware/bearer-auth/index.js +8 -0
- package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/middleware/serve-static/index.js +3 -1
- package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/router/trie-router/node.js +2 -2
- package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/types/adapter/aws-lambda/conninfo.d.ts +1 -1
- package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/types/adapter/bun/conninfo.d.ts +1 -1
- package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/types/adapter/bun/ssg.d.ts +1 -1
- package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/types/adapter/cloudflare-pages/conninfo.d.ts +1 -1
- package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/types/adapter/cloudflare-workers/conninfo.d.ts +1 -1
- package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/types/adapter/deno/conninfo.d.ts +1 -1
- package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/types/adapter/deno/ssg.d.ts +1 -1
- package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/types/adapter/lambda-edge/conninfo.d.ts +1 -1
- package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/types/adapter/netlify/conninfo.d.ts +1 -1
- package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/types/adapter/vercel/conninfo.d.ts +1 -1
- package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/types/helper/testing/index.d.ts +2 -1
- package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/types/hono-base.d.ts +21 -9
- package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/types/index.d.ts +1 -1
- package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/types/jsx/components.d.ts +2 -2
- package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/types/jsx/context.d.ts +2 -2
- package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/types/jsx/dom/components.d.ts +2 -2
- package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/types/jsx/dom/css.d.ts +2 -2
- package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/types/jsx/streaming.d.ts +4 -3
- package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/types/middleware/bearer-auth/index.d.ts +2 -1
- package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/types/middleware/ip-restriction/index.d.ts +3 -3
- package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/types/middleware/jsx-renderer/index.d.ts +3 -3
- package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/types/utils/ipaddr.d.ts +1 -1
- package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/utils/url.js +11 -6
- package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/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/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 -1
- package/node_modules/@weavecode/cli/dist/i18n/dict/zh.d.ts +14 -0
- package/node_modules/@weavecode/cli/dist/i18n/dict/zh.js +4 -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 +3 -3
- package/node_modules/@weavecode/cli/dist/init/executor.d.ts +5 -4
- 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/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-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.d.ts +25 -0
- package/node_modules/@weavecode/cli/dist/init/provision.js +1 -0
- 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 +13 -1
- 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.js +1 -1
- package/node_modules/@weavecode/core/dist/utils/fs.js +1 -1
- package/node_modules/@weavecode/core/dist/utils/logger.js +1 -1
- package/node_modules/@weavecode/core/package.json +1 -1
- package/node_modules/@weavecode/harness/dist/claude/assets.js +4 -4
- 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.d.ts +9 -0
- 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.d.ts +2 -0
- 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.d.ts +4 -2
- package/node_modules/@weavecode/harness/dist/claude/index.js +1 -1
- package/node_modules/@weavecode/harness/dist/claude/liveness.d.ts +64 -0
- package/node_modules/@weavecode/harness/dist/claude/liveness.js +1 -0
- 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.d.ts +4 -0
- package/node_modules/@weavecode/harness/dist/claude/model-aliases.js +1 -1
- package/node_modules/@weavecode/harness/dist/claude/narration.d.ts +13 -0
- package/node_modules/@weavecode/harness/dist/claude/narration.js +1 -0
- 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/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.js +14 -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.d.ts +13 -0
- package/node_modules/@weavecode/harness/dist/claude/transcript.js +7 -6
- package/node_modules/@weavecode/harness/dist/codex/assets.js +1 -1
- package/node_modules/@weavecode/harness/dist/codex/capture.d.ts +1 -2
- 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.d.ts +10 -0
- 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.d.ts +1 -1
- package/node_modules/@weavecode/harness/dist/codex/event-source.js +2 -2
- package/node_modules/@weavecode/harness/dist/codex/images.d.ts +2 -0
- package/node_modules/@weavecode/harness/dist/codex/images.js +1 -0
- package/node_modules/@weavecode/harness/dist/codex/index.d.ts +13 -2
- package/node_modules/@weavecode/harness/dist/codex/index.js +1 -1
- package/node_modules/@weavecode/harness/dist/codex/liveness.d.ts +38 -0
- package/node_modules/@weavecode/harness/dist/codex/liveness.js +1 -0
- package/node_modules/@weavecode/harness/dist/codex/mcp.js +1 -1
- package/node_modules/@weavecode/harness/dist/codex/messaging.d.ts +7 -3
- package/node_modules/@weavecode/harness/dist/codex/messaging.js +3 -3
- package/node_modules/@weavecode/harness/dist/codex/narration.d.ts +10 -0
- package/node_modules/@weavecode/harness/dist/codex/narration.js +1 -0
- 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.d.ts +12 -0
- package/node_modules/@weavecode/harness/dist/codex/provision.js +1 -0
- package/node_modules/@weavecode/harness/dist/codex/questions.d.ts +9 -0
- package/node_modules/@weavecode/harness/dist/codex/questions.js +2 -0
- package/node_modules/@weavecode/harness/dist/codex/resume.js +1 -1
- package/node_modules/@weavecode/harness/dist/codex/rollout.d.ts +8 -5
- package/node_modules/@weavecode/harness/dist/codex/rollout.js +5 -5
- package/node_modules/@weavecode/harness/dist/codex/side-question.d.ts +12 -0
- package/node_modules/@weavecode/harness/dist/codex/side-question.js +4 -0
- package/node_modules/@weavecode/harness/dist/codex/titles.d.ts +8 -0
- package/node_modules/@weavecode/harness/dist/codex/titles.js +4 -0
- 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.d.ts +162 -8
- package/node_modules/@weavecode/harness/dist/driver.js +1 -1
- package/node_modules/@weavecode/harness/dist/index.d.ts +1 -0
- package/node_modules/@weavecode/harness/dist/index.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/install.d.ts +9 -0
- package/node_modules/@weavecode/harness/dist/install.js +1 -0
- 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.d.ts +10 -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 +6 -6
- package/node_modules/@weavecode/server/dist/daemon/capture-routes.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/claude-liveness.d.ts +4 -55
- package/node_modules/@weavecode/server/dist/daemon/claude-liveness.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/data-bus.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/fs-browser.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/hook-pipeline.d.ts +2 -0
- 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.d.ts +7 -0
- package/node_modules/@weavecode/server/dist/daemon/liveness.js +1 -0
- package/node_modules/@weavecode/server/dist/daemon/mcp-orchestration.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/narration-watcher.d.ts +28 -0
- package/node_modules/@weavecode/server/dist/daemon/narration-watcher.js +2 -0
- package/node_modules/@weavecode/server/dist/daemon/opener/backend-ghostty.d.ts +16 -0
- package/node_modules/@weavecode/server/dist/daemon/opener/backend-ghostty.js +1 -0
- package/node_modules/@weavecode/server/dist/daemon/opener/backend-iterm.d.ts +20 -0
- package/node_modules/@weavecode/server/dist/daemon/opener/backend-iterm.js +12 -0
- package/node_modules/@weavecode/server/dist/daemon/opener/backend-konsole.d.ts +23 -0
- package/node_modules/@weavecode/server/dist/daemon/opener/backend-konsole.js +2 -0
- package/node_modules/@weavecode/server/dist/daemon/opener/backend-terminal-app.d.ts +19 -0
- package/node_modules/@weavecode/server/dist/daemon/opener/backend-terminal-app.js +1 -0
- package/node_modules/@weavecode/server/dist/daemon/opener/backend-wezterm.d.ts +87 -0
- package/node_modules/@weavecode/server/dist/daemon/opener/backend-wezterm.js +1 -0
- package/node_modules/@weavecode/server/dist/daemon/opener/backend-wt.d.ts +45 -0
- package/node_modules/@weavecode/server/dist/daemon/opener/backend-wt.js +1 -0
- package/node_modules/@weavecode/server/dist/daemon/opener/backend.d.ts +115 -0
- package/node_modules/@weavecode/server/dist/daemon/opener/backend.js +1 -0
- package/node_modules/@weavecode/server/dist/daemon/opener/launch.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/opener/pty-terminals.js +4 -4
- package/node_modules/@weavecode/server/dist/daemon/opener/shared.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/opener/wezterm-mux.d.ts +8 -5
- 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.d.ts +23 -120
- package/node_modules/@weavecode/server/dist/daemon/opener.js +1 -13
- package/node_modules/@weavecode/server/dist/daemon/port.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/project-files.d.ts +17 -2
- package/node_modules/@weavecode/server/dist/daemon/project-files.js +2 -1
- package/node_modules/@weavecode/server/dist/daemon/project-harnesses.d.ts +2 -0
- 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/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/project-files.d.ts +6 -0
- package/node_modules/@weavecode/server/dist/daemon/routes/project-files.js +1 -0
- package/node_modules/@weavecode/server/dist/daemon/routes/projects.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/routes/search.d.ts +38 -0
- package/node_modules/@weavecode/server/dist/daemon/routes/search.js +1 -0
- 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/watches.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/server.d.ts +8 -2
- package/node_modules/@weavecode/server/dist/daemon/server.js +8 -8
- package/node_modules/@weavecode/server/dist/daemon/session-open.d.ts +10 -1
- 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 +5 -2
- package/node_modules/@weavecode/server/dist/db/layout.js +1 -1
- package/node_modules/@weavecode/server/dist/hooks/answer-keys.js +1 -1
- package/node_modules/@weavecode/server/dist/hooks/bus.d.ts +10 -0
- package/node_modules/@weavecode/server/dist/hooks/bus.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.d.ts +20 -0
- 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.d.ts +7 -1
- package/node_modules/@weavecode/server/dist/hooks/delivery/keys.js +1 -1
- package/node_modules/@weavecode/server/dist/hooks/delivery/queue.d.ts +4 -4
- 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.d.ts +3 -1
- package/node_modules/@weavecode/server/dist/hooks/delivery/views.js +1 -1
- package/node_modules/@weavecode/server/dist/hooks/dispatcher.d.ts +5 -0
- 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.d.ts +15 -0
- 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.d.ts +64 -6
- package/node_modules/@weavecode/server/dist/hooks/message-deliverer.js +3 -2
- 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.d.ts +5 -0
- 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/session-sweeper.d.ts +2 -0
- package/node_modules/@weavecode/server/dist/hooks/session-sweeper.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/index.d.ts +1 -0
- package/node_modules/@weavecode/server/dist/index.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.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 +5 -5
- package/node_modules/@weavecode/server/dist/repositories/hook-events.d.ts +19 -1
- package/node_modules/@weavecode/server/dist/repositories/hook-events.js +9 -3
- 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 +2 -2
- 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.d.ts +12 -2
- package/node_modules/@weavecode/server/dist/repositories/sessions.js +2 -2
- package/node_modules/@weavecode/server/dist/repositories/side-questions.d.ts +7 -0
- package/node_modules/@weavecode/server/dist/repositories/side-questions.js +8 -5
- 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.d.ts +8 -1
- package/node_modules/@weavecode/server/dist/surfaces.js +1 -1
- package/node_modules/@weavecode/server/dist/version.d.ts +1 -11
- package/node_modules/@weavecode/server/dist/version.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-etRkSvQM.js → abnfDiagram-WEYOIA3C-DA-K085F.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{arc-FxRZALAZ.js → arc-BI1jnmdZ.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{architectureDiagram-ZHVYKT53-5OxZ-ffz.js → architectureDiagram-ZHVYKT53-DbdBgric.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{blockDiagram-RJAE7QA3-C-CgMF0O.js → blockDiagram-RJAE7QA3-BPRBmzb-.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{c4Diagram-XDPPPE54-B6TqN1Pw.js → c4Diagram-XDPPPE54-C4D5sRs1.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/channel-DcCJrvon.js +1 -0
- package/node_modules/@weavecode/server/web/dist/assets/{chunk-2E7WHVMD-Bdzr5RRj.js → chunk-2E7WHVMD-9ZSKiNU3.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{chunk-2Q5K7J3B-gBZASjAC.js → chunk-2Q5K7J3B-i0AOjw_8.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{chunk-4EMNKR2T-DSlUhKMw.js → chunk-4EMNKR2T-DTpLfX1H.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{chunk-55XCU76K-BDQ6zpGR.js → chunk-55XCU76K-COQYRD4q.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{chunk-5VM5RSS4-DPnewKbl.js → chunk-5VM5RSS4-VsftEbvo.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{chunk-JWPE2WC7-DagmT8Cc.js → chunk-JWPE2WC7-DonektJN.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{chunk-VQ5W62QI-Da_2PxfM.js → chunk-VQ5W62QI-CaKUwuul.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{chunk-XXDRQBXY-Cdaysois.js → chunk-XXDRQBXY-DXH3D_MT.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{chunk-ZCHMQSOR-CvgYfbjU.js → chunk-ZCHMQSOR-COwyAuGn.js} +2 -2
- package/node_modules/@weavecode/server/web/dist/assets/{classDiagram-v2-4MYWR3UA-ahplYD2h.js → classDiagram-v2-4MYWR3UA-DEvMZ6mX.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{cose-bilkent-JH36ORCC-DFyUfgKj.js → cose-bilkent-JH36ORCC-6JBJHfH6.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{cynefin-EF2NZ3EQ-mr2qRwod.js → cynefin-EF2NZ3EQ-C4GM4sjT.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{cynefinDiagram-WF24UDRP-BC26VqNp.js → cynefinDiagram-WF24UDRP-Cqgi0MBP.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{dagre-NK4GIZVX-DoKn_P1x.js → dagre-NK4GIZVX-CljrnkCY.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{diagram-CBK3MWTC-C9WfEmt3.js → diagram-CBK3MWTC-C3PyOj5J.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{diagram-I5XIIV2D-D4Ibieda.js → diagram-I5XIIV2D-I5brQlaZ.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{diagram-ODIL2UCW-wsLbYLi0.js → diagram-ODIL2UCW-BX9uFNbU.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{diagram-PFBEJUXE-DBioMmDk.js → diagram-PFBEJUXE-y7D-VmqJ.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{diagram-RJA3I4VV-Cl5gKsWm.js → diagram-RJA3I4VV-DLUL8W42.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{diagram-TYUNFSNR-BSXOaZic.js → diagram-TYUNFSNR-DLCC3ILi.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{ebnfDiagram-V4P3TTPT-CJIGOag6.js → ebnfDiagram-V4P3TTPT-D7vALia7.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{elk-QONTBCTQ-D6nd2OVX.js → elk-QONTBCTQ-Ct2_hatz.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{erDiagram-KYQIGQAA-gmXjWsuF.js → erDiagram-KYQIGQAA-DxLai58T.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{flowDiagram-IUGLLWBU-DWAiZ43K.js → flowDiagram-IUGLLWBU-AWn2IHrF.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{ganttDiagram-R7GPNTJY-De4v6Wtt.js → ganttDiagram-R7GPNTJY-DmRHd4Wz.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{gitGraphDiagram-PDYL7XHY-CouLBWOB.js → gitGraphDiagram-PDYL7XHY-Ccj-t3zg.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/index-BSxzia7U.js +1031 -0
- package/node_modules/@weavecode/server/web/dist/assets/index-CEpJpR7P.css +11 -0
- package/node_modules/@weavecode/server/web/dist/assets/{infoDiagram-MVDRKAX5-CeMCdduD.js → infoDiagram-MVDRKAX5-BHquFlQa.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{ishikawaDiagram-HPEHV2GE-DK6hETwg.js → ishikawaDiagram-HPEHV2GE-CVogEbdm.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{journeyDiagram-BOSHW7O7-BcgwTlST.js → journeyDiagram-BOSHW7O7-DC9XG9oh.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{kanban-definition-FNSA4HC5-CTVMJNz2.js → kanban-definition-FNSA4HC5-C_eu7DC_.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{linear-CqQf5eWO.js → linear-keTbWHJ-.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{mermaid.core-B6KZaljU.js → mermaid.core-4sbg0MnY.js} +4 -4
- package/node_modules/@weavecode/server/web/dist/assets/{mindmap-definition-6OY57UG3-cpKvrQTI.js → mindmap-definition-6OY57UG3-kMQS0S2l.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{pegDiagram-ECIUJNBX-Bv2bNqMZ.js → pegDiagram-ECIUJNBX-DcUFoEwP.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{pieDiagram-GNMPY74T-CXOnA429.js → pieDiagram-GNMPY74T-BQJ7WDCx.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{quadrantDiagram-D57K4MC3-BFDUpWZb.js → quadrantDiagram-D57K4MC3-C7Oi1-sq.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{railroadDiagram-Y72NRBL7-BHoDSO0D.js → railroadDiagram-Y72NRBL7-CEF2QbOF.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{requirementDiagram-EQYSW5RA-B8JGji7q.js → requirementDiagram-EQYSW5RA-CTjjFS7X.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{sankeyDiagram-SY24JHO5-BbE2-6ZM.js → sankeyDiagram-SY24JHO5-j0S5kubS.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{sequenceDiagram-BLEHNHQU-DwK4X2MT.js → sequenceDiagram-BLEHNHQU-B76EsZp4.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{sizeCapture-INFHLROL-CY10zRMe.js → sizeCapture-INFHLROL-r0DZuqAy.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{stateDiagram-v2-A6IESKWZ-32t4Zx8b.js → stateDiagram-v2-A6IESKWZ-B4DR9LHz.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{swimlanes-B3ENRKFQ-CZlYQ8_g.js → swimlanes-B3ENRKFQ-Dbcl85ro.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/swimlanesDiagram-AYQRV4AK-CZ_6SSBd.js +8 -0
- package/node_modules/@weavecode/server/web/dist/assets/{timeline-definition-JXYKGLGB-8VsB-Jwg.js → timeline-definition-JXYKGLGB-BlBXXRNf.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{usecaseDiagram-WPOLBNNX-CKOTONay.js → usecaseDiagram-WPOLBNNX-Ck1M0dpc.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{vennDiagram-Q3Y3IDCW-BzrNjxtm.js → vennDiagram-Q3Y3IDCW-N8B-ohWk.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{wardleyDiagram-IVAIDKWA-CrSd-v8I.js → wardleyDiagram-IVAIDKWA-DX-AMXq_.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{xychartDiagram-4URNHDU4-t9cV9_9b.js → xychartDiagram-4URNHDU4-4fgL48Yl.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/index.html +5 -4
- package/node_modules/@weavecode/templates/package.json +2 -2
- package/node_modules/selfsigned/node_modules/@peculiar/x509/node_modules/@peculiar/asn1-cms/node_modules/@peculiar/asn1-x509-attr/package.json +3 -3
- package/node_modules/selfsigned/node_modules/@peculiar/x509/node_modules/@peculiar/asn1-cms/package.json +4 -4
- package/node_modules/selfsigned/node_modules/@peculiar/x509/node_modules/@peculiar/asn1-csr/package.json +3 -3
- package/node_modules/selfsigned/node_modules/@peculiar/x509/node_modules/@peculiar/asn1-ecc/package.json +3 -3
- package/node_modules/selfsigned/node_modules/@peculiar/x509/node_modules/@peculiar/asn1-pkcs9/node_modules/@peculiar/asn1-pfx/package.json +5 -5
- package/node_modules/selfsigned/node_modules/@peculiar/x509/node_modules/@peculiar/asn1-pkcs9/node_modules/@peculiar/asn1-pkcs8/package.json +3 -3
- package/node_modules/selfsigned/node_modules/@peculiar/x509/node_modules/@peculiar/asn1-pkcs9/node_modules/@peculiar/asn1-x509-attr/package.json +3 -3
- package/node_modules/selfsigned/node_modules/@peculiar/x509/node_modules/@peculiar/asn1-pkcs9/package.json +7 -7
- package/node_modules/selfsigned/node_modules/@peculiar/x509/node_modules/@peculiar/asn1-rsa/package.json +3 -3
- package/node_modules/selfsigned/node_modules/@peculiar/x509/node_modules/@peculiar/asn1-schema/package.json +1 -1
- package/node_modules/selfsigned/node_modules/@peculiar/x509/node_modules/@peculiar/asn1-x509/build/cjs/time.js +1 -1
- package/node_modules/selfsigned/node_modules/@peculiar/x509/node_modules/@peculiar/asn1-x509/build/es2015/time.js +1 -1
- package/node_modules/selfsigned/node_modules/@peculiar/x509/node_modules/@peculiar/asn1-x509/package.json +2 -2
- package/package.json +6 -6
- package/node_modules/@weavecode/server/web/dist/assets/channel-Dv4QUMOJ.js +0 -1
- package/node_modules/@weavecode/server/web/dist/assets/index-BXhLerZ4.js +0 -1008
- package/node_modules/@weavecode/server/web/dist/assets/index-BYRxC-Zz.css +0 -11
- package/node_modules/@weavecode/server/web/dist/assets/swimlanesDiagram-AYQRV4AK-BlIxQLON.js +0 -8
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{homedir as
|
|
1
|
+
import{homedir as u}from"node:os";import{access as j,mkdir as f,readFile as h,unlink as _,writeFile as v}from"node:fs/promises";import i from"node:path";import{HARNESS_DIRS as d,HARNESS_EVENTS as N,INJECTABLE_EVENTS as k,TERMINAL_LOCATOR_ENV_KEYS as b,TITLE_EFFECTIVE_EVENTS as T}from"@weavecode/core";import{CLAUDE_PROMPT_INBOX as m}from"./prompt-inbox.js";export function generateHookHandler(e,t="claude"){return`#!/usr/bin/env node
|
|
2
2
|
/**
|
|
3
3
|
* weave hook-handler \u2014 collects Claude Code hook events into the global weave
|
|
4
4
|
* data directory and renders locally-mirrored injections. No network, no
|
|
@@ -28,15 +28,15 @@ const crypto = require('crypto');
|
|
|
28
28
|
const HOOK_GUARD_MS = 2000;
|
|
29
29
|
// Events that can carry additionalContext back via hook output (harness
|
|
30
30
|
// contract; mirrors INJECTABLE_EVENTS server-side).
|
|
31
|
-
const INJECTABLE_EVENTS = ${JSON.stringify(
|
|
31
|
+
const INJECTABLE_EVENTS = ${JSON.stringify(k[t])};
|
|
32
32
|
// The host applies hookSpecificOutput.sessionTitle ONLY on these events (mirrors
|
|
33
33
|
// TITLE_EFFECTIVE_EVENTS) \u2014 tool events record hook_success but drop the field
|
|
34
34
|
// (verified against Claude Code 2.1.296).
|
|
35
|
-
const TITLE_EVENTS = ${JSON.stringify(
|
|
35
|
+
const TITLE_EVENTS = ${JSON.stringify(T[t])};
|
|
36
36
|
// Terminal pane locator env (mirrors TERMINAL_LOCATOR_ENV_KEYS in @weavecode/core):
|
|
37
37
|
// captured in the pane's own child process and reported on the inbox line's side
|
|
38
38
|
// channel, so the daemon can address THIS session's pane exactly.
|
|
39
|
-
const TERMINAL_ENV_KEYS = ${JSON.stringify(
|
|
39
|
+
const TERMINAL_ENV_KEYS = ${JSON.stringify(b)};
|
|
40
40
|
const INBOX_MAX_BYTES = 4 * 1024 * 1024;
|
|
41
41
|
const INBOX_MAX_LINES = 1000;
|
|
42
42
|
const OUTBOX_MAX_LINES = 200;
|
|
@@ -80,9 +80,9 @@ function hooksDir() {
|
|
|
80
80
|
// \u8BE5\u4F1A\u8BDD\u7684 hooks \u4E0E Bash\uFF09\uFF1Adaemon \u4FA7\u53EA\u653E\u5185\u5B58\u3001\u4E0D\u843D\u5E93\u4E0D\u8FDB UI \u2014\u2014 \u4E0A\u62A5\u8D70 inbox
|
|
81
81
|
// \u884C\u7684\u65C1\u8DEF\u5B57\u6BB5\uFF08\u4E0D\u8FDB report/payload\uFF09\u3002
|
|
82
82
|
function messagingEnv() {
|
|
83
|
-
var sock = process.env.${
|
|
83
|
+
var sock = process.env.${m.socketEnv};
|
|
84
84
|
if (!sock) return null;
|
|
85
|
-
return { socket: sock, token: process.env.${
|
|
85
|
+
return { socket: sock, token: process.env.${m.tokenEnv} || null };
|
|
86
86
|
}
|
|
87
87
|
|
|
88
88
|
// \u7EC8\u7AEF\u628A\u300C\u672C pane\u300D\u5BFC\u51FA\u7684\u73AF\u5883\u53D8\u91CF\uFF08wezterm \u7B49\uFF09\u3002\u672C\u8FDB\u7A0B\u751F\u5728\u4F1A\u8BDD\u81EA\u5DF1\u7684 pane \u91CC\uFF0C
|
|
@@ -381,6 +381,6 @@ async function main() {
|
|
|
381
381
|
}
|
|
382
382
|
|
|
383
383
|
main().catch(function () { process.exit(0); });
|
|
384
|
-
`}export const HOOK_HANDLER_MARKER=".claude/helpers/hook-handler.cjs";function
|
|
385
|
-
`,"utf-8")}export async function readUserCapture(e={}){const t=e.home??
|
|
386
|
-
`,"utf-8")}export async function uninstallUserCapture(e={}){const t=e.home??
|
|
384
|
+
`}export const HOOK_HANDLER_MARKER=".claude/helpers/hook-handler.cjs";function l(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function E(e){return e.replace(/\\/g,"/")}export function groupIsWeave(e){if(!l(e))return!1;const t=e.hooks;return Array.isArray(t)?t.some(n=>l(n)&&typeof n.command=="string"&&E(n.command).includes(HOOK_HANDLER_MARKER)):!1}export function captureHookGroup(e,t){const n=`node "${E(t)}/hook-handler.cjs"`,r=!k.claude.includes(e);return[{matcher:"*",hooks:[{type:"command",command:n,...r?{async:!0}:{}}]}]}export function sweepWeaveHookEvents(e){if(!l(e))return;const t={};for(const[n,r]of Object.entries(e)){if(!Array.isArray(r)){t[n]=r;continue}const s=r.filter(a=>!groupIsWeave(a));s.length>0&&(t[n]=s)}return Object.keys(t).length>0?t:void 0}export function captureGroupsPresent(e){if(!l(e))return!1;const t=e.hooks;return l(t)?Object.values(t).some(n=>Array.isArray(n)&&n.some(groupIsWeave)):!1}function y(e){return i.join(e,d.claude.userDir,"settings.json")}function p(e){return i.join(e,d.claude.userDir,"helpers")}const S="@version weave@";async function I(e){try{return await j(e),!0}catch{return!1}}async function g(e){let t;try{t=await h(e,"utf-8")}catch{return{}}let n;try{n=JSON.parse(t)}catch{throw new Error(`user settings is not parseable JSON: ${e}`)}if(!l(n))throw new Error(`user settings is not a JSON object: ${e}`);return n}async function w(e){let t;try{t=await g(e)}catch{return}const n=sweepWeaveHookEvents(t.hooks);n===void 0?delete t.hooks:t.hooks=n,await f(i.dirname(e),{recursive:!0}),await v(e,JSON.stringify(t,null,2)+`
|
|
385
|
+
`,"utf-8")}export async function readUserCapture(e={}){const t=e.home??u(),n=await g(y(t));return{installed:captureGroupsPresent(n),helperPresent:await I(i.join(p(t),"hook-handler.cjs"))}}export async function readScriptHealth(e={}){const t=e.home??u(),n=i.join(p(t),"hook-handler.cjs"),r=e.projectPath?i.join(e.projectPath,d.claude.projectDir,"helpers","hook-handler.cjs"):null,s=(await readUserCapture({home:t})).installed,a=s?"user":r?"project":"none",c=s?n:r??n;let o=null;try{o=await h(c,"utf-8")}catch{o=null}return{source:a,present:o!==null,weaveOwned:o!==null&&o.includes(S),generatedVersion:o?.match(/@version weave@(\S+)/)?.[1]??null,reportsInbox:o!==null&&o.includes(m.socketEnv),reportsPaneEnv:o!==null&&o.includes("terminalEnv()")}}export async function installUserCapture(e){const t=e.home??u(),n=p(t);await f(n,{recursive:!0}),await v(i.join(n,"hook-handler.cjs"),generateHookHandler(e.version),"utf-8");const r=y(t),s=await g(r),a=sweepWeaveHookEvents(s.hooks)??{};for(const c of N.claude){const o=a[c];a[c]=Array.isArray(o)?[...o,...captureHookGroup(c,n)]:captureHookGroup(c,n)}s.hooks=a,await f(i.dirname(r),{recursive:!0}),await v(r,JSON.stringify(s,null,2)+`
|
|
386
|
+
`,"utf-8")}export async function uninstallUserCapture(e={}){const t=e.home??u();await w(y(t));const n=i.join(p(t),"hook-handler.cjs");try{(await h(n,"utf-8")).includes(S)&&await _(n)}catch{}}export async function stripProjectCapture(e){await w(i.join(e,d.claude.projectDir,"settings.json"))}export const CLAUDE_CAPTURE={harness:"claude",readUserCapture:e=>readUserCapture(e),installUserCapture:e=>installUserCapture(e),uninstallUserCapture:e=>uninstallUserCapture(e),stripProjectCapture,scriptHealth:e=>readScriptHealth(e)};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import{readdir as
|
|
2
|
-
`).find(
|
|
3
|
-
`)){if(!s.includes("<command-name>")&&!s.includes("<local-command-stdout>"))continue;let o;try{o=JSON.parse(s)}catch{continue}if(o===null||typeof o!="object")continue;const
|
|
1
|
+
import{readdir as b,readFile as d,stat as k}from"node:fs/promises";import{homedir as v}from"node:os";import r from"node:path";import{execCli as S}from"./plugins.js";const C=[{name:"add-dir",description:"Add a new working directory",argsHint:"[<path>]",source:"builtin"},{name:"artifacts",description:"Browse your published and shared artifacts",source:"builtin"},{name:"auto-mode-setup",description:"Teach auto mode about your environment, plus optional rule tweaks",source:"builtin"},{name:"autocompact",description:"Set how full the context gets before auto-summarizing",argsHint:"[auto|<tokens>]",source:"builtin"},{name:"background",description:"Send this session to the background and free the terminal",argsHint:"[prompt]",source:"builtin"},{name:"branch",description:"Create a branch of the current conversation at this point",argsHint:"[name]",source:"builtin"},{name:"brief",description:"Toggle brief-only mode",source:"builtin"},{name:"btw",description:"Ask a quick side question without interrupting the main conversation",argsHint:"[question]",source:"builtin"},{name:"bug",description:"Report a bug or share your conversation",argsHint:"[report]",source:"builtin"},{name:"cd",description:"Move this session to a new working directory",argsHint:"[<path>]",source:"builtin"},{name:"clear",description:"Start a new session with empty context; previous session stays on disk (resumable with /resume)",source:"builtin"},{name:"cloud-plugins",description:"Choose whether cloud sessions use the plugins enabled on this machine",source:"builtin"},{name:"code-review",description:"Review the current diff or a PR for bugs and cleanups",source:"builtin"},{name:"color",description:"Set the prompt bar color for this session",source:"builtin"},{name:"compact",description:"Free up context by summarizing the conversation so far",argsHint:"[instructions]",source:"builtin"},{name:"config",description:"Open settings",argsHint:"[key=value]",source:"builtin"},{name:"context",description:"Visualize current context usage as a colored grid",argsHint:"[all]",source:"builtin"},{name:"copy",description:"Copy Claude's last response to clipboard (or /copy N for the Nth-latest)",source:"builtin"},{name:"daemon",description:"Manage background services and routines",source:"builtin"},{name:"debug",description:"Turn on debug logging and investigate problems",argsHint:"[issue description]",source:"builtin"},{name:"design-login",description:"Authorize design-system access for /design-sync with your claude.ai account",source:"builtin"},{name:"diff",description:"View uncommitted changes and per-turn diffs",source:"builtin"},{name:"doctor",description:"Health-check your setup and fix issues: installation, unused extensions, duplicated or bloated memory files, slow hooks, updates, permissions",source:"builtin"},{name:"effort",description:"Set effort level for model usage",argsHint:"[level]",source:"builtin"},{name:"exit",description:"Exit the CLI",source:"builtin"},{name:"export",description:"Export the current conversation to a file or clipboard",argsHint:"[filename]",source:"builtin"},{name:"feedback",description:"Send feedback to Anthropic or report a bug",argsHint:"[report]",source:"builtin"},{name:"focus",description:"Toggle focus view: just your prompt, summary, and response",source:"builtin"},{name:"fork",description:"Spawn a background agent that inherits the full conversation",argsHint:"[<directive>]",source:"builtin"},{name:"goal",description:"Set a goal Claude checks before stopping",argsHint:"[<condition> | clear]",source:"builtin"},{name:"help",description:"Show help and available commands",source:"builtin"},{name:"hooks",description:"View hook configurations for tool events",argsHint:"[name]",source:"builtin"},{name:"ide",description:"Manage IDE integrations and show status",argsHint:"[open]",source:"builtin"},{name:"init",description:"Initialize a CLAUDE.md for this project",source:"builtin"},{name:"insights",description:"Generate a report analyzing your Claude Code sessions",source:"builtin"},{name:"install",description:"Install Claude Code native build",argsHint:"[options]",source:"builtin"},{name:"install-github-app",description:"Set up Claude GitHub Actions for a repository",source:"builtin"},{name:"install-slack-app",description:"Install the Claude Slack app",source:"builtin"},{name:"keybindings",description:"Open your keyboard shortcuts file",source:"builtin"},{name:"list-agents",description:"List subagents, teammates, and other Claude sessions you can message",source:"builtin"},{name:"login",description:"Sign in with your Anthropic account",source:"builtin"},{name:"logout",description:"Sign out from your Anthropic account",source:"builtin"},{name:"loops",description:"List, create, and delete loops",argsHint:"[name]",source:"builtin"},{name:"mcp",description:"Manage MCP servers",source:"builtin"},{name:"memory",description:"Edit CLAUDE.md files and memory settings",source:"builtin"},{name:"mobile",description:"Show QR code to download the Claude mobile app",source:"builtin"},{name:"model",description:"Set the AI model for Claude Code",argsHint:"[model]",source:"builtin"},{name:"permissions",description:"Manage allow and deny tool permission rules",argsHint:"[open|<description>]",source:"builtin"},{name:"plan",description:"Enable plan mode or view the current session plan",argsHint:"[open|<description>]",source:"builtin"},{name:"plugin",description:"Manage Claude Code plugins",source:"builtin"},{name:"powerup",description:"Discover Claude Code features through quick interactive lessons",argsHint:"[name]",source:"builtin"},{name:"privacy-settings",description:"View and update your privacy settings",source:"builtin"},{name:"radio",description:"Listen to Claude FM lo-fi radio",source:"builtin"},{name:"rate-limit-options",description:"Manage usage limits and upgrade options",source:"builtin"},{name:"recap",description:"Generate a one-line session recap now",source:"builtin"},{name:"release-notes",description:"View release notes",source:"builtin"},{name:"reload-plugins",description:"Activate pending plugin changes in the current session",argsHint:"[--force]",source:"builtin"},{name:"reload-skills",description:"Pick up skills added or changed on disk during this session",source:"builtin"},{name:"rename",description:"Rename the current conversation",argsHint:"[name]",source:"builtin"},{name:"resume",description:"Resume a previous conversation",argsHint:"[conversation id or search term]",source:"builtin"},{name:"rewind",description:"Restore the code and/or conversation to a previous point",source:"builtin"},{name:"scroll-speed",description:"Adjust mouse wheel scroll speed",source:"builtin"},{name:"security-review",description:"Complete a security review of the pending changes on the current branch",source:"builtin"},{name:"skill-doctor",description:"Show which loaded skills are unused and costing context",source:"builtin"},{name:"skills",description:"List available skills",source:"builtin"},{name:"status",description:"Show Claude Code status including version, model, account, API connectivity, and tool statuses",source:"builtin"},{name:"statusline",description:"Set up Claude Code's status line UI",source:"builtin"},{name:"stickers",description:"Order Claude Code stickers",source:"builtin"},{name:"stop",description:"Stop this background session; transcript and worktree are kept",source:"builtin"},{name:"subtask",description:"Send a subagent off with your full context; its result comes back here",argsHint:"[<task>]",source:"builtin"},{name:"tasks",description:"View and manage everything running in the background",source:"builtin"},{name:"terminal-setup",description:"Check terminal setup for key bindings like Shift+Enter",source:"builtin"},{name:"theme",description:"Change the theme",source:"builtin"},{name:"tui",description:"Set the terminal UI renderer (default | fullscreen)",argsHint:"[default|fullscreen]",source:"builtin"},{name:"ultraplan",description:"Draft an editable plan in a cloud session",argsHint:"[<prompt>]",source:"builtin"},{name:"ultrareview",description:"Start a cloud agent that finds and verifies bugs in your branch",source:"builtin"},{name:"upgrade",description:"Upgrade to Max for higher rate limits and more Opus",source:"builtin"},{name:"usage",description:"Show session cost, plan usage, and activity stats",source:"builtin"},{name:"usage-credits",description:"Configure usage credits or request them from your admin when you hit a limit",source:"builtin"},{name:"version",description:"Show this session's version (autoupdate may have a newer one)",source:"builtin"},{name:"wellbeing",description:"Configure optional break reminders and quiet-hours nudges",source:"builtin"},{name:"workflows",description:"Browse running and completed workflows",source:"builtin"}];function f(i){const t=/^---\r?\n([\s\S]*?)\r?\n---/.exec(i)?.[1]??"",e=/^description:\s*(.+)$/m.exec(t)?.[1]?.trim().replace(/^["']|["']$/g,"");return e||(i.replace(/^---\r?\n[\s\S]*?\r?\n---\r?\n?/,"").split(`
|
|
2
|
+
`).find(s=>s.trim()!==""&&!s.startsWith("#"))?.trim()??"")}async function h(i){try{const t=await k(i);return t.isDirectory()?"dir":t.isFile()?"file":"other"}catch{return"other"}}async function H(i){try{const t=[];for(const e of await b(i,{withFileTypes:!0})){if(!e.name.endsWith(".md"))continue;const n=r.join(i,e.name);(e.isFile()||e.isSymbolicLink()&&await h(n)==="file")&&t.push(n)}return t}catch{return[]}}async function u(i){try{const t=[];for(const e of await b(i,{withFileTypes:!0})){const n=r.join(i,e.name);(e.isDirectory()||e.isSymbolicLink()&&await h(n)==="dir")&&t.push(n)}return t}catch{return[]}}async function w(i){const t=[],e=async(n,s)=>{for(const o of await H(n)){const a=`${s}${r.basename(o,".md")}`,c=f(await d(o,"utf8").catch(()=>""));t.push({name:a,description:c,source:"command"})}for(const o of await u(n))await e(o,`${s}${r.basename(o)}:`)};return await e(i,""),t}async function l(i,t="",e="skill"){const n=[];for(const s of await u(i)){const o=f(await d(r.join(s,"SKILL.md"),"utf8").catch(()=>""));n.push({name:`${t}${r.basename(s)}`,description:o,source:e})}return n}async function x(i){const t=[],e=new Set;for(const n of await u(r.join(i,"plugins","cache")))for(const s of await u(n)){const o=r.basename(s);if(!e.has(o))for(const a of await u(s)){const c=await l(r.join(a,"skills"),`${o}:`,"plugin");if(c.length>0){e.add(o),t.push(...c);break}}}return t}async function A(i){try{const{stdout:t}=await i(["plugin","list","--json"],{timeoutMs:15e3}),e=JSON.parse(t);if(!Array.isArray(e))return null;const n=[];for(const s of e){if(!s||typeof s!="object")continue;const o=s;if(typeof o.id!="string"||typeof o.installPath!="string")continue;const a=o.id.lastIndexOf("@");n.push({plugin:a>0?o.id.slice(0,a):o.id,enabled:o.enabled===!0,installPath:o.installPath})}return n}catch{return null}}async function j(i){const t=await A(i);if(!t)return null;const e=[];for(const n of t)n.enabled&&e.push(...await l(r.join(n.installPath,"skills"),`${n.plugin}:`,"plugin"));return e}function M(i){const t=new Set,e=[];for(const n of i)t.has(n.name)||(t.add(n.name),e.push(n));return e}const I=i=>typeof i=="string"?i:"";function L(i){return/<command-args>([\s\S]*?)<\/command-args>/.exec(i)?.[1]?.trim()??""}export async function commandExecutions(i){let t;try{t=await d(i,"utf8")}catch{return null}const e=[];let n=null;for(const s of t.split(`
|
|
3
|
+
`)){if(!s.includes("<command-name>")&&!s.includes("<local-command-stdout>"))continue;let o;try{o=JSON.parse(s)}catch{continue}if(o===null||typeof o!="object")continue;const a=o,c=a.message?.content;if(typeof c!="string")continue;const y=I(a.timestamp),p=/<command-name>([^<]*)<\/command-name>/.exec(c)?.[1]?.trim();if(p?.startsWith("/")){n={name:p.slice(1),args:L(c),at:y};continue}const m=/<local-command-stdout>([\s\S]*?)<\/local-command-stdout>/.exec(c)?.[1];if(m===void 0||n===null)continue;const g=m.replace(/\u001b\[[0-9;]*m/g,"").trim();e.push({...n,...g!==""?{output:g}:{}}),n=null}return e}export function createClaudeCommandSurface(i={}){const t=i.exec??S;return{harness:"claude",async list({projectPath:e,homedir:n=v()}){const s=r.join(n,".claude");return M([...C,...await w(r.join(e,".claude","commands")),...await w(r.join(s,"commands")),...await l(r.join(e,".claude","skills")),...await l(r.join(s,"skills")),...await j(t)??await x(s)])},executions:e=>e?commandExecutions(e):Promise.resolve(null)}}export const CLAUDE_COMMANDS=createClaudeCommandSurface();
|
|
@@ -1,2 +1,11 @@
|
|
|
1
1
|
import type { ConfigSurface } from '../driver.js';
|
|
2
|
+
/**
|
|
3
|
+
* 预写文件夹信任(init 时替用户答掉 claude 首开的「是否信任该文件夹」):
|
|
4
|
+
* `~/.claude.json` 顶层 `projects` 里该目录的 `hasTrustDialogAccepted: true`。
|
|
5
|
+
*
|
|
6
|
+
* 键形是 claude 自己的归一(本机 2.1.296 实测):正斜杠绝对路径、保留原大小写。
|
|
7
|
+
* 就着原对象改、只动这一个布尔,其余键(含其他项目条目)原位保留;已信任即
|
|
8
|
+
* no-op 不重写。原子写(tmp+rename);文件损坏/超限抛错,由调用方捕获。
|
|
9
|
+
*/
|
|
10
|
+
export declare function ensureTrustAccepted(projectPath: string): Promise<void>;
|
|
2
11
|
export declare const CLAUDE_CONFIG: ConfigSurface;
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import
|
|
2
|
-
`,"utf8"),await
|
|
1
|
+
import h from"node:fs/promises";import{homedir as m}from"node:os";import p from"node:path";import{CONFIG_SHAPE_OVERRIDES as _}from"./config-shapes.js";import{WEAVE_MARKETPLACE as P}from"./plugins.js";import{CLAUDE_ENV_VARS as R,CLAUDE_SETTINGS_GROUPS as I,CLAUDE_SETTINGS_KEYS as w}from"./settings-catalog.generated.js";import{WEAVE_PERMISSIONS_ALLOW as L,WEAVE_PERMISSIONS_DENY as b,statusLineIsWeave as $}from"./settings-gen.js";const O=2*1024*1024,C="https://api.anthropic.com",H="2023-06-01",U=["$comment","hooks","env.WEAVE_ENABLED"],k=[{id:"user",profiles:!0},{id:"project",profiles:!1},{id:"projectLocal",profiles:!1},{id:"global",profiles:!0}];function A(t,e){switch(t){case"user":return p.join(e.homedir,".claude","settings.json");case"project":return e.projectPath?p.join(e.projectPath,".claude","settings.json"):"";case"projectLocal":return e.projectPath?p.join(e.projectPath,".claude","settings.local.json"):"";case"global":return p.join(e.homedir,".claude.json")}}function v(t){return t==="projectLocal"?"local":t}function g(t){if(t==="global")return w.filter(r=>r.scope==="global");const e=v(t);return w.filter(r=>r.scope==="any"||r.scope===e)}function K(t){return t.map(e=>e.key in _?{...e,..._[e.key]}:e)}function T(t){return new Set(g(t).map(e=>e.key.split(".")[0]))}function u(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function D(t){return t==="__proto__"||t==="constructor"||t==="prototype"}function E(t,e){let r=t;for(const o of e.split(".")){if(!u(r))return;r=r[o]}return r}function j(t,e,r){const o=e.split(".");if(o.some(s=>!s||D(s)))throw new Error(`\u975E\u6CD5\u914D\u7F6E\u952E\uFF1A${e}`);let n=t;for(const s of o.slice(0,-1))u(n[s])||(n[s]={}),n=n[s];n[o[o.length-1]]=r}async function y(t){let e;try{if((await h.stat(t)).size>O)throw new Error(`\u914D\u7F6E\u6587\u4EF6\u8D85\u8FC7 ${O} \u5B57\u8282\uFF1A${t}`);e=await h.readFile(t,"utf8")}catch(n){if(n.code==="ENOENT")return{};throw n}const r=e.replace(/^/,"").trim();if(!r)return{};let o;try{o=JSON.parse(r)}catch{throw new Error(`\u914D\u7F6E\u6587\u4EF6\u4E0D\u662F\u5408\u6CD5 JSON\uFF1A${t}`)}if(!u(o))throw new Error(`\u914D\u7F6E\u6587\u4EF6\u9876\u5C42\u4E0D\u662F\u5BF9\u8C61\uFF1A${t}`);return o}async function S(t,e){await h.mkdir(p.dirname(t),{recursive:!0});const r=`${t}.${process.pid}.${Date.now()}.tmp`;await h.writeFile(r,`${JSON.stringify(e,null,2)}
|
|
2
|
+
`,"utf8"),await h.rename(r,t)}function N(t,e){const r=A(t,e);if(!r)throw new Error(`\u914D\u7F6E\u6863\u4F4D ${t} \u9700\u8981\u9879\u76EE\u8DEF\u5F84`);return r}function V(t,e,r){const o=f=>f&&u(f.env)?f.env:{},n=(f,d)=>typeof f[d]=="string"?f[d]:"",s=o(t),a=o(e),i=r.apiKey||n(s,"ANTHROPIC_API_KEY")||(n(s,"ANTHROPIC_AUTH_TOKEN")?"":n(a,"ANTHROPIC_API_KEY")),l=r.authToken||n(s,"ANTHROPIC_AUTH_TOKEN")||(n(s,"ANTHROPIC_API_KEY")?"":n(a,"ANTHROPIC_AUTH_TOKEN"));return i?{header:{"x-api-key":i},credential:"apiKey"}:l?{header:{authorization:`Bearer ${l}`},credential:"authToken"}:{header:{},credential:"none"}}export async function ensureTrustAccepted(t){const e=A("global",{projectPath:null,homedir:m()}),r=await y(e),o=p.resolve(t).replace(/\\/g,"/"),n=u(r.projects)?r.projects:{},s=u(n[o])?n[o]:{};s.hasTrustDialogAccepted!==!0&&(n[o]={...s,hasTrustDialogAccepted:!0},r.projects=n,await S(e,r))}export const CLAUDE_CONFIG={harness:"claude",files(){return k.map(t=>({id:t.id,profiles:t.profiles,path:e=>A(t.id,e)}))},catalog(t){const e=K(g(t));return{groups:I.filter(r=>e.some(o=>o.group===r)),keys:e,envVars:t==="global"?[]:R}},async read(t,e){const r=await y(N(t,e)),o=T(t),n={};for(const s of o)s in r&&j(n,s,r[s]);return n},async write(t,e,r){const o=N(t,e),n=await y(o),s=T(t),a={...n};for(const i of Object.keys(n))s.has(i)&&!(i in r)&&delete a[i];for(const[i,l]of Object.entries(r))s.has(i.split(".")[0])&&j(a,i,l);await S(o,a)},managedKeys(t){const e=U.filter(r=>E(t,r)!==void 0);return t.statusLine!==void 0&&$(t.statusLine)&&e.push("statusLine"),e},managedEntries(t){const e=[];for(const[o,n]of[["permissions.allow",L],["permissions.deny",b]]){const s=E(t,o);if(Array.isArray(s))for(const a of n)s.includes(a)&&e.push({path:o,entry:a})}const r=E(t,"enabledPlugins");if(u(r))for(const o of Object.keys(r))o.endsWith(`@${P}`)&&e.push({path:"enabledPlugins",entry:o});return e},async models(t){const e=u(t.values.env)?t.values.env:{},r=typeof e.ANTHROPIC_BASE_URL=="string"?e.ANTHROPIC_BASE_URL:"",o=t.file&&t.file!=="user"?await y(A("user",{projectPath:null,homedir:t.homedir??m()})):null,n=o&&u(o.env)&&typeof o.env.ANTHROPIC_BASE_URL=="string"?o.env.ANTHROPIC_BASE_URL:"",s=(t.baseUrl||r||n||C).replace(/\/+$/,"").replace(/\/v1$/,""),{header:a,credential:i}=V(t.values,o,t),l=await fetch(`${s}/v1/models?limit=1000`,{headers:{"anthropic-version":H,...a},signal:AbortSignal.timeout(t.timeoutMs??1e4)});if(!l.ok){const c=(await l.text().catch(()=>"")).slice(0,200);throw new Error(`\u6A21\u578B\u5217\u8868\u8BF7\u6C42\u5931\u8D25\uFF1AHTTP ${l.status}${c?` ${c}`:""}`)}const f=await l.json(),d=[];if(Array.isArray(f.data))for(const c of f.data)!u(c)||typeof c.id!="string"||d.push({id:c.id,...typeof c.display_name=="string"?{name:c.display_name}:{},...typeof c.created_at=="string"?{createdAt:c.created_at}:{}});return{models:d,baseUrl:s,credential:i}},rawFormat:"json",parseRaw(t){const e=JSON.parse(t);if(typeof e!="object"||e===null||Array.isArray(e))throw new Error("\u9876\u5C42\u5FC5\u987B\u662F\u5BF9\u8C61");return e},serializeRaw(t){return`${JSON.stringify(t,null,2)}
|
|
3
3
|
`}};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{existsSync as o}from"node:fs";import
|
|
1
|
+
import{existsSync as o}from"node:fs";import s from"node:path";const t=[".claude","CLAUDE.md"];function r(e){return t.some(n=>o(s.join(e,n)))}export const CLAUDE_DETECTOR={markers:t,present:r,detect:e=>({harness:"claude",present:r(e)})};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{createReadStream as
|
|
1
|
+
import{createReadStream as h}from"node:fs";import{createInterface as g}from"node:readline";const E=new Set(["Edit","Write","MultiEdit"]),n=t=>typeof t=="string"?t:null,d=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(c=>{const f=d(c),l=n(f.old_string),o=n(f.new_string);return l===null||o===null?[]:[{before:l,after:o}]});const s=n(e.old_string),i=n(e.new_string);return s===null||i===null?[]:[{before:s,after:i}]}export const CLAUDE_EDITS={async sessionEdits({transcriptPath:t}){if(!t)return null;const e=[],s=new Set,i=g({input:h(t,{encoding:"utf8"}),crlfDelay:1/0});try{for await(const r of i){if(!r.includes('"tool_use"'))continue;let c;try{c=JSON.parse(r)}catch{continue}const f=c.message?.content;if(Array.isArray(f))for(const l of f){const o=d(l);if(o.type!=="tool_use")continue;const u=n(o.name);if(!u||!E.has(u))continue;const a=n(o.id);if(a){if(s.has(a))continue;s.add(a)}const y=d(o.input),p=n(y.file_path);if(!p)continue;const m=n(c.timestamp);for(const _ of w(u,y))e.push({path:p,hunk:_,at:m})}}}catch{return null}finally{i.close()}return e}};
|
|
@@ -51,6 +51,8 @@ export interface ClaudeFrameFacts {
|
|
|
51
51
|
id: string;
|
|
52
52
|
status: string;
|
|
53
53
|
}>;
|
|
54
|
+
/** raw.source(SessionStart 的 startup/resume/compact/clear——压缩收尾笔靠它认)。 */
|
|
55
|
+
rawSource?: string;
|
|
54
56
|
}
|
|
55
57
|
/** frameFacts 所需的归一化 payload 形状(server NormalizedHookPayload 结构兼容)。 */
|
|
56
58
|
export interface FramePayloadLike {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{HARNESS_EVENTS as
|
|
1
|
+
import{HARNESS_EVENTS as d}from"@weavecode/core";import{capFields as p}from"../shared/json-cap.js";import{CLAUDE_PLAN as y}from"./plan.js";function g(o){try{const t=JSON.parse(o);return t&&typeof t=="object"&&!Array.isArray(t)?t:{}}catch{return{}}}function a(o,...t){for(const n of t)if(o[n]!=null)return o[n];return null}const _=[["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 w(o,t,n){return typeof o!="string"?null:y.draftOf(o,t,n)?.text?{input:t,response:n}:null}function A(o){const t={...o};for(const[n,e]of _)for(const r of e)r in t&&(t[r]=`<$.${n}>`);return t}export function expandPayloadRefs(o){const t=o.raw;if(!t||typeof t!="object"||Array.isArray(t))return o;const n={...t};for(const[e,r]of Object.entries(n)){const c=typeof r=="string"?m.exec(r):null;c&&(n[e]=k(o,c[1]))}return{...o,raw:n}}function k(o,t){let n=o;for(const e of t.split(".")){if(!n||typeof n!="object")return null;n=n[e]}return n??null}export class ClaudeEventSource{source="claude";events=d.claude;normalize(t,n){const e=g(t.payload),r=t.eventType||String(e.hook_event_name??"unknown"),c=t.sessionId??a(e,"session_id","sessionId"),i=a(e,"tool_name","toolName"),s=a(e,"tool_input","toolInput"),u=a(e,"tool_response","toolResponse"),f=w(i,s,u),l={eventType:r,toolName:i,toolInput:f?.input??p(s),toolResponse:f?.response??p(u),cwd:t.cwd??a(e,"cwd"),transcriptPath:a(e,"transcript_path","transcriptPath"),raw:A(e)};return{projectId:n,source:"claude",eventType:r,sessionId:c??void 0,payload:JSON.stringify(l)}}}export const CLAUDE_EVENT_SOURCE=new ClaudeEventSource;export function frameFacts(o){const t=o?.raw,n=t&&typeof t=="object"&&typeof t.agent_id=="string"?t.agent_id:void 0;let e;if(o?.eventType==="PostToolUse"&&o.toolName==="Agent"){const s=o.toolResponse;s?.isAsync&&typeof s.agentId=="string"&&(e=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 c={};n&&(c.agentId=n),e&&(c.spawnAgentId=e),r&&(c.backgroundTasks=r);const i=t&&typeof t=="object"&&typeof t.source=="string"?t.source:void 0;return i&&(c.rawSource=i),c}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{createReadStream as f}from"node:fs";import{createInterface as
|
|
2
|
-
`):""}export const CLAUDE_IMAGES={async sessionImages({transcriptPath:
|
|
1
|
+
import{createReadStream as f}from"node:fs";import{createInterface as u}from"node:readline";const l=new Set(["image/png","image/jpeg","image/gif","image/webp"]),m=10*1024*1024,a=t=>t&&typeof t=="object"?t:{};function p(t){if(!Array.isArray(t))return[];const e=[];for(const s of t){const i=a(s);if(i.type!=="image")continue;const n=a(i.source),o=typeof n.media_type=="string"?n.media_type:null,r=typeof n.data=="string"?n.data:null;if(!o||!r||!l.has(o))continue;const c=Buffer.from(r,"base64");c.length===0||c.length>m||e.push({mediaType:o,bytes:c})}return e}function y(t){return Array.isArray(t)?t.map(a).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=u({input:f(t,{encoding:"utf8"}),crlfDelay:1/0});try{for await(const i of s){if(!i.includes('"type":"image"'))continue;const n=JSON.parse(i);if(n.type!=="user"||n.toolUseResult!=null)continue;const o=a(n.message).content,r=p(o);r.length!==0&&e.push({text:y(o),at:typeof n.timestamp=="string"?n.timestamp:null,images:r})}}catch{return null}finally{s.close()}return e}};
|
|
@@ -12,10 +12,12 @@ export { CLAUDE_BLOCKING_PROMPT } from './questions.js';
|
|
|
12
12
|
export { CLAUDE_PROMPT_RELAY } from './prompt.js';
|
|
13
13
|
export { CLAUDE_PROMPT_INBOX } from './prompt-inbox.js';
|
|
14
14
|
export { CLAUDE_SIDE_QUESTION } from './side-question.js';
|
|
15
|
-
export { interruptMarkerAt, currentModelAt, currentModeAt, currentEffortAt, currentContextTokensAt, } from './transcript.js';
|
|
15
|
+
export { interruptMarkerAt, currentModelAt, currentModeAt, currentEffortAt, currentContextTokensAt, preQuestionTextAt, } from './transcript.js';
|
|
16
16
|
export { CLAUDE_EDITS } from './edits.js';
|
|
17
17
|
export { CLAUDE_IMAGES } from './images.js';
|
|
18
|
+
export { CLAUDE_NARRATION } from './narration.js';
|
|
18
19
|
export { CLAUDE_COMMANDS, commandExecutions } from './commands.js';
|
|
20
|
+
export { CLAUDE_LIVENESS, claudeLivenessById, parseClaudeSessionReg, pidAlive, pidAliveOf, shellDiscardedByClaude, CLAUDE_REG_GRACE_MS, type ClaudeSessionReg, } from './liveness.js';
|
|
19
21
|
export { modelAliasTargets, aliasOfModel, bareModelName, defaultModelOf, startedModelOf, switchedModelOf, effortLevelOf, permissionModeOf, type ModelAliasTarget, type ModelSwitchFact } from './model-aliases.js';
|
|
20
22
|
export { resolveClaudePeer } from './peers.js';
|
|
21
23
|
export { CLAUDE_CAPTURE, generateHookHandler, captureHookGroup, sweepWeaveHookEvents, groupIsWeave, captureGroupsPresent, readUserCapture, installUserCapture, uninstallUserCapture, stripProjectCapture, HOOK_HANDLER_MARKER, } from './capture.js';
|
|
@@ -23,7 +25,7 @@ export { generateSettingsJson, mergeSettingsJson, stripWeaveSettings, type Setti
|
|
|
23
25
|
export { generateMcpJson, mergeMcpJson, stripWeaveMcp, type McpGeneratorInput } from './mcp-gen.js';
|
|
24
26
|
export { generateAutoMemoryHook } from './helpers-gen.js';
|
|
25
27
|
export { CLAUDE_STATUSLINE } from './statusline/surface.js';
|
|
26
|
-
export { CLAUDE_CONFIG } from './config.js';
|
|
28
|
+
export { CLAUDE_CONFIG, ensureTrustAccepted as ensureClaudeTrustAccepted } from './config.js';
|
|
27
29
|
export { generateStatuslineScript, type GenerateStatuslineOptions, } from './statusline/generator.js';
|
|
28
30
|
export * from './statusline/config.js';
|
|
29
31
|
/**
|
|
@@ -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 E}from"./plugins.js";import{CLAUDE_PLUGIN_STATE as s}from"./plugin-state.js";import{CLAUDE_BLOCKING_PROMPT as m}from"./questions.js";import{CLAUDE_RESUME as p}from"./resume.js";import{CLAUDE_DETECTOR as a}from"./detect.js";import{CLAUDE_STATUSLINE as A}from"./statusline/surface.js";import{CLAUDE_CONFIG as C}from"./config.js";import{CLAUDE_EDITS as i}from"./edits.js";import{CLAUDE_IMAGES as n}from"./images.js";import{CLAUDE_NARRATION as f}from"./narration.js";import{CLAUDE_COMMANDS as U}from"./commands.js";import{CLAUDE_LIVENESS as L}from"./liveness.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_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"],assets:e,events:o,resume:p,detect:a,plugins:E,pluginState:s,messaging:t,questions:m,capture:r,statusline:A,config:C,edits:i,images:n,narration:f,commands:U,liveness:L};
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import type { LivenessSurface } from '../driver.js';
|
|
2
|
+
/**
|
|
3
|
+
* claude 会话存活判定:claude 自己维护 `~/.claude/sessions/<pid>.json`
|
|
4
|
+
* 注册表(会话活动期持续刷新,进程死即停),sessionId↔pid 零埋点可得。
|
|
5
|
+
* 判据 = 注册表存在 + `kill(pid, 0)`。pid 复用的残留误差(claude 死后
|
|
6
|
+
* pid 被别的进程复用 → 误判活)用注册表里的 procStart 复核需要
|
|
7
|
+
* WMI/NAPI 取进程启动时间,开销不值——留作已知残差。
|
|
8
|
+
*/
|
|
9
|
+
/** 注册表一行(只取判活相关字段)。 */
|
|
10
|
+
export interface ClaudeSessionReg {
|
|
11
|
+
pid: number;
|
|
12
|
+
sessionId: string;
|
|
13
|
+
}
|
|
14
|
+
/** 解析一个登记文件;坏输入 null。 */
|
|
15
|
+
export declare function parseClaudeSessionReg(jsonText: string): ClaudeSessionReg | null;
|
|
16
|
+
/** signal 0 探活:ESRCH = 进程不在;EPERM 等 = 存在但无权,按活算。 */
|
|
17
|
+
export declare function pidAlive(pid: number): boolean;
|
|
18
|
+
/** 新会话启动竞态豁免:lastSeen 在此窗口内且查无登记 → 当未知,不判死。 */
|
|
19
|
+
export declare const CLAUDE_REG_GRACE_MS = 90000;
|
|
20
|
+
/**
|
|
21
|
+
* 单条会话的 pidAlive 三态:
|
|
22
|
+
* - 登记命中 → 直接是 kill(pid,0) 的结果(true/false);
|
|
23
|
+
* - 查无登记 + harness=claude + lastSeen 已过豁免窗 → false——claude 的登记
|
|
24
|
+
* 文件随进程死被清(正常退出自清/崩溃后由后续启动 GC),旧会话查无登记
|
|
25
|
+
* 即进程已死;豁免窗内不猜(新会话文件可能还没落盘);
|
|
26
|
+
* - 「仅一条 SessionStart」的空壳行不判:/continue、compact 会各留一行
|
|
27
|
+
* 幽灵会话(事件跟在新 id 后面流),判死会把活着的会谈错标 terminated;
|
|
28
|
+
* 它们交给 SessionSweeper 清(宿主丢弃的见 shellDiscardedByClaude,其余保活期后);
|
|
29
|
+
* - 其余(codex/未知 harness/新鲜会话)→ null,上游不判。
|
|
30
|
+
*/
|
|
31
|
+
export declare function pidAliveOf(row: {
|
|
32
|
+
sessionId: string;
|
|
33
|
+
harness?: string | null;
|
|
34
|
+
lastSeenAt: string;
|
|
35
|
+
lastEventType?: string | null;
|
|
36
|
+
eventCount?: number;
|
|
37
|
+
}, liveness: Map<string, boolean>, now?: number): boolean | null;
|
|
38
|
+
/**
|
|
39
|
+
* 空壳会话(仅一条 SessionStart)是否已被宿主整个丢弃:claude 一句没说就退出时会把
|
|
40
|
+
* session id 连转录一起删——不发 SessionEnd、注册表自清。于是「查无登记 + 已过豁免窗」
|
|
41
|
+
* 就是再没有进程会以这个 id 发事件的证据,不必等满 1 小时保活期(用户原话:claude 那边
|
|
42
|
+
* 会话没了,weave 的会话列表却还留着)。
|
|
43
|
+
* 与 pidAliveOf 的「空壳不判」不冲突:那是状态面不猜,这里只决定清扫时机。
|
|
44
|
+
* 仍有登记的(活着的空闲会话 / 崩溃残留)一律不动,照旧走保活期。
|
|
45
|
+
*/
|
|
46
|
+
export declare function shellDiscardedByClaude(row: {
|
|
47
|
+
sessionId: string;
|
|
48
|
+
harness?: string | null;
|
|
49
|
+
lastSeenAt: string;
|
|
50
|
+
lastEventType?: string | null;
|
|
51
|
+
eventCount?: number;
|
|
52
|
+
}, liveness: Map<string, boolean>, now?: number): boolean;
|
|
53
|
+
/**
|
|
54
|
+
* sessionId → 是否活着 的映射。只覆盖注册表里有登记的(claude 会话);
|
|
55
|
+
* codex/旧会话/他机会话不进图——上游把「查不到」当未知,不许误判死。
|
|
56
|
+
* 目录读不到(claude 没装过)同样给空图。
|
|
57
|
+
*/
|
|
58
|
+
export declare function claudeLivenessById(dir?: string | null): Map<string, boolean>;
|
|
59
|
+
/**
|
|
60
|
+
* claude 的存活面:注册表 + kill 0 全同步(零 spawn),`alive` 直接现算。
|
|
61
|
+
* 只回注册表里有登记的条目——查无登记的 claude 会话走 `pidAliveOf` 的
|
|
62
|
+
* 豁免窗三态(那是消费方的合成判据,surface 只答「登记怎么说」)。
|
|
63
|
+
*/
|
|
64
|
+
export declare const CLAUDE_LIVENESS: LivenessSurface;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{readdirSync as a,readFileSync as c}from"node:fs";import{join as u}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=a(t)}catch{return n}for(const r of s){if(!/^\d+\.json$/.test(r))continue;let o;try{o=c(u(t,r),"utf8")}catch{continue}const i=parseClaudeSessionReg(o);i&&n.set(i.sessionId,pidAlive(i.pid))}return n}function l(){const e=process.platform==="win32"?process.env.USERPROFILE:process.env.HOME;return e?u(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 s=e.platform.os==="windows"?"cmd":"npx",c=e.platform.os==="windows"?["/c","npx","weave","mcp","start"]:["weave","mcp","start"];r.weave={command:s,args:c,env:{WEAVE_MCP:"true"}}}return{mcpServers:r}}export function mergeMcpJson(e,r){const s={...e},c=o(r.mcpServers)?r.mcpServers:{},n=o(s.mcpServers)?{...s.mcpServers}:{};for(const[t,p]of Object.entries(c))(t==="weave"||n[t]===void 0)&&(n[t]=p);return s.mcpServers=n,s}function o(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}export function stripWeaveMcp(e){const r={...e};if(o(r.mcpServers)){const s={...r.mcpServers};delete s.weave,Object.keys(s).length>0?r.mcpServers=s:delete r.mcpServers}return r}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{HARNESS_LIFECYCLE as
|
|
1
|
+
import{HARNESS_LIFECYCLE as h,INJECTABLE_EVENTS as E}from"@weavecode/core";import{CLAUDE_PROMPT_INBOX as p}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,c){const t=c.filter(s=>!e.includes(s.path));if(t.length===0)return e;const n=t.map(s=>s.path).join(`
|
|
2
2
|
`);return e?`${e}
|
|
3
3
|
|
|
4
|
-
${
|
|
4
|
+
${n}`:n}};const _={kinds:["file","dir"],lines:!0,expression:({path:e,kind:c,lines:t})=>{const n=/\s/.test(e)?`"${e}"`:e;return c==="dir"?`@${n}/`:t?t.start===t.end?`@${n}#L${t.start}`:`@${n}#L${t.start}-${t.end}`:`@${n}`},recognize:e=>{const c=[];for(const t of e.matchAll(/(?:^|\s)@"([^"@,。;:!?、()【】「」『』《》…]+)"/g)){const n=t[1],s=t.index+t[0].length-n.length-3;let o=s+n.length+3;const i=/#L(\d+)(?:-(\d+))?/.exec(e.slice(o,o+16));i&&i.index===0&&(o+=i[0].length);const r=e[o];r!==void 0&&!/\s/.test(r)||!n||n.startsWith("/")||n.includes(":")||n.includes("#")||c.push({start:s,end:o,ref:e.slice(s,o),path:n,kind:"file",...i?{lines:{start:Number(i[1]),end:Number(i[2]??i[1])}}:{}})}for(const t of e.matchAll(/(?:^|\s)@([^\s@,。;:!?、()【】「」『』《》“”‘’…]+)/g)){const n=t[1],s=t.index+t[0].length-n.length-1,o=s+1+n.length,i=e[o];if(i!==void 0&&!/\s/.test(i))continue;const r=/#L(\d+)(?:-(\d+))?$/.exec(n),l=r?n.slice(0,r.index):n,a=l.endsWith("/"),d=a?l.slice(0,-1):l;if(!d||d.startsWith("/")||d.includes(":")||d.includes("#")||d.startsWith('"')||c.some(f=>s>=f.start&&o<=f.end))continue;const u=r?Number(r[1]):null,m=r?.[2]?Number(r[2]):u;c.push({start:s,end:o,ref:e.slice(s,o),path:d,kind:a?"dir":"file",...u!=null?{lines:{start:u,end:m}}:{}})}return c.sort((t,n)=>t.start-n.start)}};export const CLAUDE_MESSAGING={harness:"claude",discovery:!0,prompt:A,promptInbox:p,queuedPrompt:null,inject:{rideEvents:E.claude},headless:L,idleSignals:[...h.claude.close,"SessionEnd"],paneEnvSource:"hook",attach:CLAUDE_ATTACH,pathRefs:_,sideQuestion:g};
|
|
@@ -38,6 +38,10 @@ export declare function defaultModelOf(homedir?: string, env?: NodeJS.ProcessEnv
|
|
|
38
38
|
* 真名;`source=resume` **不带**(实测)——但重开 = 宿主把模型落回默认,默认值就写
|
|
39
39
|
* 在全局配置里({@link defaultModelOf}),直接答它:不答的话转录里上一轮的旧照会
|
|
40
40
|
* 会一直顶到第一轮新条目落地。这条事件与模型无关时返回 null。
|
|
41
|
+
*
|
|
42
|
+
* `raw.source` 是宿主认识的启动源(startup/resume/compact/clear)才触发默认闩——
|
|
43
|
+
* 其他来源(如 codex rollout 兜底产的 `rollout`)不是「宿主重定了模型」,只是
|
|
44
|
+
* 「会话文件出现了」;拿 claude 的全局默认去标它们是错报。
|
|
41
45
|
*/
|
|
42
46
|
export declare function startedModelOf(eventType: string, raw: unknown, homedir?: string, env?: NodeJS.ProcessEnv): {
|
|
43
47
|
model: string | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import
|
|
1
|
+
import l from"node:fs";import f from"node:os";import{CLAUDE_ASSETS as p}from"./assets.js";export function modelAliasTargets(t,e=process.env,o=f.homedir()){const r=c(o);return t.map(n=>{const s=`ANTHROPIC_DEFAULT_${n.toUpperCase()}_MODEL`,i=r[s]??r[`${s}_NAME`]??e[s]??e[`${s}_NAME`]??n;return{alias:n,actual:i}})}export function switchedModelOf(t,e){if(t!=="PostModelSwitch")return null;const o=e,r=o?.to_model;if(typeof r!="string"||!r)return null;const n=o?.from_model;return{from:typeof n=="string"&&n?n:null,to:r}}export function defaultModelOf(t=f.homedir(),e=process.env){const r=c(t).ANTHROPIC_MODEL??e.ANTHROPIC_MODEL;if(r)return r;const n=u(t)?.model;return modelAliasTargets([typeof n=="string"&&n?n:"sonnet"],e,t)[0].actual}export function startedModelOf(t,e,o=f.homedir(),r=process.env){if(t!=="SessionStart")return null;const n=e??{},s=n.model;if(typeof s=="string"&&s)return{model:s};const i=typeof n.source=="string"?n.source:null;return i!=null&&!m.has(i)?null:{model:defaultModelOf(o,r)}}const m=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 o=bareModelName(e);return t.find(r=>bareModelName(r.actual)===o)?.alias??null}export function defaultPermissionModeOf(t=f.homedir()){const o=u(t)?.permissions?.defaultMode;return typeof o=="string"&&o!==""?o:null}function u(t){try{return JSON.parse(l.readFileSync(p.userConfigFile(t),"utf8"))}catch{return null}}function c(t){const e=u(t),o={};for(const[r,n]of Object.entries(e?.env??{}))typeof n=="string"&&(o[r]=n);return o}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { NarrationSurface } from '../driver.js';
|
|
2
|
+
/**
|
|
3
|
+
* 旁白(claude):模型在一轮里的全部 assistant 正文——hook 域只有 Stop 的
|
|
4
|
+
* `last_assistant_message` 一个文本载体,一轮里多次输出(写工具后又补一段收尾)
|
|
5
|
+
* 只有最后一句能进对话气泡,前面的没有任何事件照会,转录是唯一来源。
|
|
6
|
+
*
|
|
7
|
+
* 只认主链 assistant 条目的 text 分区:
|
|
8
|
+
* - `isSidechain` 条目是子代理的(away 总结等),不是对用户说的话;
|
|
9
|
+
* - thinking 分区是模型的内部推理,不是输出;
|
|
10
|
+
* - 同一条 assistant 消息宿主拆成相邻多行(同 `message.id`),text 分区各自成段
|
|
11
|
+
* ——按行原样保留(每行一段、时刻取该行 timestamp),拼接语义留给消费方。
|
|
12
|
+
*/
|
|
13
|
+
export declare const CLAUDE_NARRATION: NarrationSurface;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{createReadStream as o}from"node:fs";import{createInterface as l}from"node:readline";export const CLAUDE_NARRATION={async sessionNarration({transcriptPath:n}){if(!n)return null;const t=[],r=l({input:o(n,{encoding:"utf8"}),crlfDelay:1/0});try{for await(const i of r){const e=s(i);e&&t.push(e)}}catch{return null}finally{r.close()}return t},lineParser:s};function s(n){if(!n.includes('"type":"assistant"'))return null;let t;try{t=JSON.parse(n)}catch{return null}if(t.type!=="assistant"||t.isSidechain===!0)return null;const r=t.message?.content;if(!Array.isArray(r))return null;const i=r.filter(e=>!!e&&typeof e=="object"&&e.type==="text"&&typeof e.text=="string").map(e=>e.text).join("").trim();return i?{at:typeof t.timestamp=="string"?t.timestamp:null,text:i}:null}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{readdirSync as
|
|
1
|
+
import{readdirSync as a,readFileSync as c}from"node:fs";import{homedir as m}from"node:os";import{join as i}from"node:path";export function resolveClaudePeer(s,n=i(m(),".claude","sessions")){let r;try{r=a(n)}catch{return null}for(const t of r){if(!/^\d+\.json$/.test(t))continue;let o;try{o=JSON.parse(c(i(n,t),"utf8"))}catch{continue}const e=o;if(e?.sessionId===s&&typeof e.name=="string"&&e.name)return{name:e.name}}return null}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
const f=/[\\/]plans[\\/][^\\/]+\.md$/i,
|
|
1
|
+
const f=/[\\/]plans[\\/][^\\/]+\.md$/i,n=t=>typeof t=="string"&&t.trim()?t:null,r=t=>t&&typeof t=="object"?t:{};export const CLAUDE_PLAN={tool:"ExitPlanMode",writeTools:["Write","Edit","MultiEdit"],fileHint:"plans",draftOf(t,s,o){const e=r(s),i=r(o);if(t==="ExitPlanMode")return{text:n(e.plan)??n(i.plan),filePath:n(e.planFilePath)??n(i.filePath)};if(t==null||!CLAUDE_PLAN.writeTools.includes(t))return null;const l=n(e.file_path)??n(i.filePath);return!l||!f.test(l)?null:{text:n(e.content),filePath:l}}};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{spawn as
|
|
2
|
-
`).trim()||`exit ${
|
|
3
|
-
`,"utf8")},
|
|
4
|
-
`,"utf8")}const f=
|
|
1
|
+
import{spawn as C}from"node:child_process";import{homedir as O}from"node:os";import{cp as R,lstat as H,mkdir as x,readFile as L,readdir as V,writeFile as F}from"node:fs/promises";import r from"node:path";import{linkOrCopy as q,removeInstalled as B}from"../shared/install-link.js";import{CLAUDE_ASSETS as W}from"./assets.js";export const WEAVE_MARKETPLACE="weave";const z="weave-marketplace",Q=6e4,U=2e3,J=64*1024;export function claudeCommandLine(o){return["claude",...o.map(d=>`"${d.replace(/"/g,'\\"')}"`)].join(" ")}function X(o){if(!(o.exitCode!==null||o.signalCode!==null)){if(process.platform==="win32"&&o.pid!==void 0){C("taskkill",["/pid",String(o.pid),"/t","/f"],{windowsHide:!0,stdio:"ignore"}).unref();return}o.kill("SIGKILL")}}function $(o){return o.length>U?`${o.slice(0,U)}\u2026`:o}function K(o){try{const d=JSON.parse(o);return d&&typeof d=="object"&&!Array.isArray(d)?d:null}catch{return null}}export const execCli=(o,d)=>new Promise((E,A)=>{const v=process.platform==="win32",g=C(v?process.env.ComSpec||"cmd.exe":"claude",v?["/d","/s","/c",claudeCommandLine(o)]:o,{windowsHide:!0,windowsVerbatimArguments:v,stdio:["ignore","pipe","pipe"]}),y=`claude ${o.join(" ")}`;let k="",p="",l=!1;const j=c=>{l||(l=!0,clearTimeout(b),A(new Error($(c))))},b=setTimeout(()=>{X(g),j(`${y}: timed out after ${d.timeoutMs}ms`)},d.timeoutMs);g.stdout?.setEncoding("utf8"),g.stdout?.on("data",c=>{k.length<J&&(k+=c)}),g.stderr?.setEncoding("utf8"),g.stderr?.on("data",c=>{p.length<J&&(p+=c)}),g.on("error",c=>j(`${y}: ${c.message}`)),g.on("close",c=>{if(l)return;if(l=!0,clearTimeout(b),c===0){E({stdout:k,stderr:p});return}const h=[p,k].filter(Boolean).join(`
|
|
2
|
+
`).trim()||`exit ${c}`;A(new Error($(`${y}: ${h}`)))})});export function createClaudePluginSurface(o={}){const d=o.exec??execCli,E=e=>d(e,{timeoutMs:Q}),A=()=>W.userConfigFile(O()),v=()=>r.join(O(),".claude","plugins","installed_plugins.json"),g=()=>r.join(O(),".claude",z),y=e=>r.join(e,".claude","settings.json"),k=e=>r.join(e,".claude","settings.local.json"),p=(e,n)=>`${e}@${n??WEAVE_MARKETPLACE}`,l=async e=>{try{const n=JSON.parse(await L(e,"utf8"));return n&&typeof n=="object"&&!Array.isArray(n)?n:{}}catch{return{}}},j=async(e,n)=>{await x(r.dirname(e),{recursive:!0}),await F(e,`${JSON.stringify(n,null,2)}
|
|
3
|
+
`,"utf8")},b=e=>{const n=e.enabledPlugins;return!n||typeof n!="object"||Array.isArray(n)?{}:Object.fromEntries(Object.entries(n).filter(([,t])=>typeof t=="boolean"))},c=e=>{const n=e.enabledPlugins;return n&&typeof n=="object"&&!Array.isArray(n)?{...n}:{}},h=async()=>{const n=(await l(v())).plugins;if(!n||typeof n!="object"||Array.isArray(n))return{};const t={};for(const[i,s]of Object.entries(n))Array.isArray(s)&&(t[i]=s);return t},I=(e,n,t)=>{const i=n?.[n.length-1];return{key:e,alreadyInstalled:t,...i?.scope?{scope:i.scope}:{},...i?.installPath?{installPath:i.installPath}:{},...i?.version?{version:i.version}:{}}},N=async(e,n,t={})=>{const i=g(),s=r.join(i,"plugins",n);await B(s),await x(r.dirname(s),{recursive:!0});const a=await L(r.join(e,".claude-plugin","plugin.json"),"utf8").then(()=>!0,()=>!1),u=await V(e).catch(()=>[]);if(a&&!u.includes("node_modules")&&!u.includes(".git"))await q(e,s);else if(await R(e,s,{recursive:!0,filter:S=>{const _=r.basename(S);return _!=="node_modules"&&_!==".git"}}),!a){const S=r.join(s,".claude-plugin","plugin.json");await x(r.dirname(S),{recursive:!0}),await F(S,JSON.stringify({name:n,version:t.version??"0.0.0",...t.description?{description:t.description}:{}},null,2)+`
|
|
4
|
+
`,"utf8")}const f=r.join(i,".claude-plugin","marketplace.json"),w=await l(f),P=Array.isArray(w.plugins)?[...w.plugins]:[],M={name:n,source:`./plugins/${n}`},T=P.findIndex(S=>S?.name===n);return T>=0?P[T]=M:P.push(M),w.name=WEAVE_MARKETPLACE,w.owner||(w.owner={name:"weave"}),w.plugins=P,await j(f,w),i},G=async(e,n,t)=>{if(!e.dir)throw new Error(`marketplace dir required for ${n}@${e.name}`);if((await H(e.dir)).isSymbolicLink())return;const i=r.join(e.dir,".claude-plugin","marketplace.json"),s=await l(i),a=Array.isArray(s.plugins)?[...s.plugins]:[],u=`./${r.relative(e.dir,t).split(r.sep).join("/")}`,m={name:n,source:u},f=a.findIndex(w=>w?.name===n);f>=0?a[f]=m:a.push(m),s.name=e.name,s.owner||(s.owner={name:"weave"}),s.plugins=a,await j(i,s)};return{projectPluginDir:e=>r.join(e,".claude","plugins"),pluginKey:p,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 t=n.name;if(!t){const f=await l(r.join(e,".claude-plugin","plugin.json"));t=typeof f.name=="string"?f.name:void 0}if(!t)throw new Error(`plugin manifest missing name: ${e}`);const i=n.marketplace,s=p(t,i?.name),a=(await h())[s];if(a&&a.length>0)return I(s,a,!0);if(i)await G(i,t,e),await E(["plugin","marketplace","add",i.dir??""]);else{const f=await N(e,t,n);await E(["plugin","marketplace","add",f])}const{stdout:u}=await E(["plugin","install",s,"--scope","user","--json"]),m=K(u);if(m?.outcome==="failed")throw new Error($(String(m.message??"plugin install failed")));return I(s,(await h())[s],!1)},readInstalled:h,async isInstalled(e,n){const t=(await h())[p(e,n)];return!!t&&t.length>0},async uninstall(e,n){const t=p(e,n),i=(await h())[t];if(!i||i.length===0)return;const s=[...new Set(i.map(a=>a.scope??"user"))];for(const a of s){const{stdout:u}=await E(["plugin","uninstall",t,"--scope",a,"--json"]),m=K(u);if(m?.outcome==="failed")throw new Error($(String(m.message??"plugin uninstall failed")))}},async removeMarketplace(e){const n=await l(r.join(O(),".claude","plugins","known_marketplaces.json")),t=r.resolve(e),i=Object.entries(n).find(([,s])=>s&&typeof s=="object"&&typeof s.installLocation=="string"&&r.resolve(s.installLocation)===t)?.[0];i&&await E(["plugin","marketplace","remove",i])},async readProjectEnabled(e,n,t){return b(await l(y(e)))[p(n,t)]??!1},async setProjectEnabled(e,n,t,i){const s=y(e),a=await l(s);a.enabledPlugins={...c(a),[p(n,i)]:t},await j(s,a)},async readGlobalEnabled(){return b(await l(A()))},async writeGlobalEnabled(e,n){const t=A(),i=await l(t);i.enabledPlugins={...c(i),[e]:n},await j(t,i)},pluginScopes:()=>["user","project","local"],async readEnabledOverrides(e){const[n,t,i]=await Promise.all([l(A()).then(b),l(y(e)).then(b),l(k(e)).then(b)]);return{user:n,project:t,local:i}},async setEnabledOverride(e,n,t,i){const s=n==="user"?A():n==="project"?y(e):k(e),a=await l(s),u=c(a);i==="inherit"?delete u[t]:u[t]=i==="on",a.enabledPlugins=u,await j(s,a)}}}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:
|
|
1
|
+
export const CLAUDE_PROMPT_INBOX={socketEnv:"CLAUDE_CODE_MESSAGING_SOCKET",tokenEnv:"CLAUDE_CODE_MESSAGING_TOKEN",requiresAuthOn:e=>e==="win32",frame:({token:e,text:s})=>{const n=[];return e&&n.push(JSON.stringify({type:"auth",token:e})),n.push(JSON.stringify({type:"user",message:{role:"user",content:s}})),n.join(`
|
|
2
2
|
`)+`
|
|
3
3
|
`}};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import{resolveClaudePeer as
|
|
1
|
+
import{resolveClaudePeer as n}from"./peers.js";const t="[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?`${t}
|
|
4
4
|
|
|
5
|
-
`:""}${s}`,resolve:
|
|
5
|
+
`:""}${s}`,resolve:n};
|