@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,2 +1,2 @@
|
|
|
1
|
-
import
|
|
2
|
-
`}function
|
|
1
|
+
import i from"node:path";import{generateHookHandler as p,readUserCapture as u}from"../claude/capture.js";import{generateAutoMemoryHook as m}from"../claude/helpers-gen.js";import{generateMcpJson as c,mergeMcpJson as f}from"../claude/mcp-gen.js";import{generateSettingsJson as h,mergeSettingsJson as g}from"../claude/settings-gen.js";export const WEAVE_CONTENT_MARKER="@version weave@";const d={preToolUse:!1,postToolUse:!1,userPromptSubmit:!1,sessionStart:!1,stop:!1,stopFailure:!1,subagentStop:!1,subagentStart:!1,notification:!1,postToolUseFailure:!1,permissionRequest:!1,permissionDenied:!1,preCompact:!1,sessionEnd:!1,preModelSwitch:!1,timeout:5e3,continueOnError:!0};function a(e){try{const o=JSON.parse(e);return typeof o=="object"&&o!==null&&!Array.isArray(o)?o:null}catch{return null}}function t(e){return JSON.stringify(e,null,2)+`
|
|
2
|
+
`}function l(e){return(o,s)=>{const n=a(o),r=a(s);return n===null||r===null?null:t(e(n,r))}}async function S(e){const o=i.join(e.projectPath,".claude","helpers"),n=(await u({home:e.platform.homeDir})).installed?d:e.hooks,r=[];return e.components.helpers&&r.push({relPath:".claude/helpers/hook-handler.cjs",weaveMarker:WEAVE_CONTENT_MARKER,content:p(e.version)},{relPath:".claude/helpers/auto-memory-hook.mjs",weaveMarker:WEAVE_CONTENT_MARKER,content:m(e.version)}),e.components.settings&&r.push({relPath:".claude/settings.json",content:t(h({components:e.components,hooks:n,platform:e.platform,helpersDir:o})),merge:l(g)}),e.components.mcp&&e.mcp.weave&&r.push({relPath:".mcp.json",content:t(c({platform:e.platform,includeWeaveServer:!0})),merge:l(f)}),r}const E={claude:S,codex:async()=>[]};export function generateInitFiles(e,o){return E[e](o)}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{readdir as
|
|
1
|
+
import{readdir as d,readFile as p,unlink as g,writeFile as S}from"node:fs/promises";import r from"node:path";import{ensureDir as h,fileExists as b,writeFileIfAbsent as A}from"@weavecode/core";export class InitPipeline{ctx;skipped=[];skipReasons=new Map;constructor(t){this.ctx=t}async runSurface(){await this.ensureDirs(),await this.writeSettings(),await this.writeMcp(),await this.copySkills(),await this.copyCommands(),await this.copyAgents(),await this.injectPluginTemplates(),await this.writeHelpers()}injectPluginTemplates(){}skip(t,e){this.skipped.push(t),this.skipReasons.set(t,e)}async writeOrMergeJson(t,e,s){if(!s&&await b(t)){const n=await x(t);return n===void 0?!1:(await k(t,m(n,e)),!0)}return await k(t,e),!0}async copyDirIfAbsent(t,e,s=!1){let n;try{n=await d(t,{withFileTypes:!0})}catch{return}await h(e);for(const a of n){const o=r.join(t,a.name),c=r.join(e,a.name);if(a.isDirectory())await this.copyDirIfAbsent(o,c,s);else{const w=await p(o,"utf-8");await A(c,w,s)}}}async sweepMarked(t,e,s){const n=new Set(e),a=[],o=async c=>{let w;try{w=await d(c,{withFileTypes:!0})}catch{return}for(const l of w){const u=r.join(c,l.name);if(l.isDirectory()){await o(u);continue}const j=r.relative(t,u).split(r.sep).join("/");if(n.has(j))continue;const y=await p(u,"utf-8").catch(()=>null);y!==null&&y.includes(s)&&(await g(u),a.push(u))}};return await o(t),a}}function m(i,t){const e={...i};for(const[s,n]of Object.entries(t)){const a=e[s];e[s]=f(a)&&f(n)?m(a,n):n}return e}function f(i){return typeof i=="object"&&i!==null&&!Array.isArray(i)}async function x(i){try{const t=await p(i,"utf-8"),e=JSON.parse(t);return f(e)?e:void 0}catch{return}}async function k(i,t){await h(r.dirname(i)),await S(i,JSON.stringify(t,null,2)+`
|
|
2
2
|
`,"utf-8")}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { Harness } from '@weavecode/core';
|
|
2
|
+
/**
|
|
3
|
+
* 各 harness 的官方安装命令(init 检测到未装时给用户确认后代跑)。安装知识归
|
|
4
|
+
* harness 包——weave 不捆绑宿主二进制,只代跑官方渠道;探测用 bin 复用
|
|
5
|
+
* `HARNESS_DRIVERS[h].resume.bin`,不在此重复。
|
|
6
|
+
*/
|
|
7
|
+
export declare const HARNESS_INSTALL: Record<Harness, {
|
|
8
|
+
command: string;
|
|
9
|
+
}>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export const HARNESS_INSTALL={claude:{command:"npm install -g @anthropic-ai/claude-code"},codex:{command:"npm install -g @openai/codex"}};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{CLAUDE_DRIVER as t}from"./claude/index.js";import{CODEX_DRIVER as o}from"./codex/index.js";import{HarnessRegistry as
|
|
1
|
+
import{CLAUDE_DRIVER as t}from"./claude/index.js";import{CODEX_DRIVER as o}from"./codex/index.js";import{HarnessRegistry as i}from"./driver.js";export const HARNESS_DRIVERS={claude:t,codex:o};export function registerRuntimeDrivers(r){for(const e of Object.values(HARNESS_DRIVERS))r.register(e)}export function createRuntimeRegistry(){const r=new i;return registerRuntimeDrivers(r),r}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{cp as
|
|
1
|
+
import{cp as a,lstat as c,mkdir as s,rm as u,symlink as l,unlink as m}from"node:fs/promises";import o from"node:path";export async function linkOrCopy(r,t){const i=o.resolve(r);await s(o.dirname(t),{recursive:!0});try{return await l(i,t,process.platform==="win32"?"junction":"dir"),"link"}catch(e){const n=e.code;if(n!=="EPERM"&&n!=="EEXIST"&&n!=="ENOTSUP")throw e}return await a(i,t,{recursive:!0}),"copy"}export async function removeInstalled(r){let t;try{t=await c(r)}catch{return"absent"}return t.isSymbolicLink()?(await m(r),"link"):(await u(r,{recursive:!0,force:!0}),"removed")}export async function installForm(r){try{return(await c(r)).isSymbolicLink()?"link":"copy"}catch{return"absent"}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export const MAX_FIELD_CHARS=4e3,MAX_ARRAY_ITEMS=200;export function capFields(
|
|
1
|
+
export const MAX_FIELD_CHARS=4e3,MAX_ARRAY_ITEMS=200;export function capFields(t){if(typeof t=="string")return t.length>4e3?`${t.slice(0,4e3)}\u2026`:t;if(Array.isArray(t))return t.slice(0,200).map(capFields);if(t&&typeof t=="object"){const r={};for(const[o,A]of Object.entries(t))r[o]=capFields(A);return r}return t}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import c from"node:path";import{readZcodeMcp as l,removeZcodeMcp as n,upsertZcodeMcp as d,zcodeMcpFile as r}from"./mcp.js";const p=
|
|
1
|
+
import c from"node:path";import{readZcodeMcp as l,removeZcodeMcp as n,upsertZcodeMcp as d,zcodeMcpFile as r}from"./mcp.js";const p=e=>c.join(e,".zcode","cli","config.json");export const ZCODE_ASSETS={harness:"zcode",targetDir(e){throw new Error(`"${e}" has no ZCode file-asset surface`)},projectSkillsDir:()=>".zcode/skills",globalSkillsRoots:e=>[c.join(e,...".zcode/skills".split("/")),c.join(e,...".agents/skills".split("/"))],userConfigFile:e=>p(e),mcpScopes:()=>["project","user"],mcpDest:(e,s)=>e==="project"?".zcode/config.json":c.join(s,...".zcode/cli/config.json".split("/")),mcpRead:(e,s,o)=>l(r(e,s,o)),mcpWrite:(e,s,o,i,t)=>d(r(e,s,o),i,t),mcpRemove:(e,s,o,i)=>n(r(e,s,o),i),classify(e){return e===".zcode"||e.startsWith(".zcode/")?!0:e.slice(e.lastIndexOf("/")+1)==="AGENTS.md"},ignore(e){return!(e===".zcode"||e.startsWith(".zcode/")||e==="AGENTS.md")}};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import{access as k,mkdir as y,readFile as l,unlink as A,writeFile as f}from"node:fs/promises";import{homedir as i}from"node:os";import c from"node:path";import{detectPlatform as S,HARNESS_EVENTS as b}from"@weavecode/core";import{generateHookHandler as j}from"../claude/capture.js";export const zcodeConfigFile=
|
|
2
|
-
`,"utf-8")}export async function uninstallUserCapture(
|
|
3
|
-
`,"utf-8")}}catch{}try{const
|
|
1
|
+
import{access as k,mkdir as y,readFile as l,unlink as A,writeFile as f}from"node:fs/promises";import{homedir as i}from"node:os";import c from"node:path";import{detectPlatform as S,HARNESS_EVENTS as b}from"@weavecode/core";import{generateHookHandler as j}from"../claude/capture.js";export const zcodeConfigFile=r=>c.join(r,".zcode","cli","config.json");export function zcodeHookScript(r=S().configDir){return c.join(r,"weave","hooks","zcode","hook-handler.cjs")}const w="@version weave@",g="weave/hooks/zcode/hook-handler.cjs";function a(r){return typeof r=="object"&&r!==null&&!Array.isArray(r)}function p(r){return r.replace(/\\/g,"/")}async function x(r){try{return await k(r),!0}catch{return!1}}async function d(r){let o;try{o=await l(r,"utf-8")}catch{return{}}let t;try{t=JSON.parse(o)}catch{throw new Error(`user config is not parseable JSON: ${r}`)}if(!a(t))throw new Error(`user config is not a JSON object: ${r}`);return t}export function groupIsWeave(r){if(!a(r))return!1;const o=r.hooks;return Array.isArray(o)?o.some(t=>{if(!a(t))return!1;const n=Array.isArray(t.args)?t.args.map(e=>p(String(e))):[];return(typeof t.command=="string"?p(t.command):"").includes(g)||n.some(e=>e.includes(g))}):!1}export function captureHookGroup(r){return[{hooks:[{type:"process",command:"node",args:[p(r)]}]}]}function v(r){if(!a(r))return{};const o={};for(const[t,n]of Object.entries(r)){if(!Array.isArray(n)){o[t]=n;continue}const e=n.filter(s=>!groupIsWeave(s));e.length>0&&(o[t]=e)}return o}function C(r){if(!a(r))return!1;const o=r.hooks;if(!a(o))return!1;const t=o.events;return a(t)?Object.values(t).some(n=>Array.isArray(n)&&n.some(groupIsWeave)):!1}export async function readUserCapture(r={}){const o=r.home??i(),t=await d(zcodeConfigFile(o)).catch(()=>({}));return{installed:C(t),helperPresent:await x(zcodeHookScript(r.configDir))}}export async function readScriptHealth(r={}){const o=r.home??i(),t=(await readUserCapture({home:o,configDir:r.configDir})).installed,n=zcodeHookScript(r.configDir);let e=null;try{e=await l(n,"utf-8")}catch{e=null}return{source:t?"user":"none",present:e!==null,weaveOwned:e!==null&&e.includes(w),generatedVersion:e?.match(/@version weave@(\S+)/)?.[1]??null,reportsInbox:!1,reportsPaneEnv:e!==null&&e.includes("terminalEnv()")}}export async function installUserCapture(r){const o=r.home??i(),t=zcodeHookScript(r.configDir);await y(c.dirname(t),{recursive:!0}),await f(t,j(r.version,"zcode"),"utf-8");const n=zcodeConfigFile(o),e=await d(n),s=a(e.hooks)?e.hooks:{};typeof s.enabled!="boolean"&&(s.enabled=!0),typeof s.timeoutMs!="number"&&(s.timeoutMs=5e3);const u=v(s.events);for(const h of b.zcode){const m=u[h];u[h]=Array.isArray(m)?[...m,...captureHookGroup(t)]:captureHookGroup(t)}s.events=u,e.hooks=s,await y(c.dirname(n),{recursive:!0}),await f(n,JSON.stringify(e,null,2)+`
|
|
2
|
+
`,"utf-8")}export async function uninstallUserCapture(r={}){const o=r.home??i(),t=zcodeConfigFile(o);try{const n=await d(t),e=n.hooks;if(a(e)){const s=v(e.events);Object.keys(s).length>0?e.events=s:delete e.events,n.hooks=e,await f(t,JSON.stringify(n,null,2)+`
|
|
3
|
+
`,"utf-8")}}catch{}try{const n=zcodeHookScript(r.configDir);(await l(n,"utf-8")).includes(w)&&await A(n)}catch{}}export const ZCODE_CAPTURE={harness:"zcode",readUserCapture:r=>readUserCapture(r),installUserCapture:r=>installUserCapture(r),uninstallUserCapture:r=>uninstallUserCapture(r),stripProjectCapture:async()=>{},scriptHealth:r=>readScriptHealth(r)};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{mkdir as m,readFile as p,writeFile as d}from"node:fs/promises";import a from"node:path";function i(
|
|
2
|
-
`,"utf-8")}function u(
|
|
1
|
+
import{mkdir as m,readFile as p,writeFile as d}from"node:fs/promises";import a from"node:path";function i(n){return typeof n=="object"&&n!==null&&!Array.isArray(n)}async function s(n){let e;try{e=await p(n,"utf-8")}catch{return{}}let r;try{r=JSON.parse(e)}catch(t){throw new Error(`${n} is not valid JSON \u2014 refusing to write: ${t instanceof Error?t.message:String(t)}`)}if(!i(r))throw new Error(`${n} is not a JSON object \u2014 refusing to write`);return r}async function f(n,e){await m(a.dirname(n),{recursive:!0}),await d(n,`${JSON.stringify(e,null,2)}
|
|
2
|
+
`,"utf-8")}function u(n){const e=n.mcp;return i(e)&&i(e.servers)?e.servers:{}}export async function readZcodeMcp(n){const e=u(await s(n)),r={};for(const[t,o]of Object.entries(e)){if(!i(o)||typeof o.command!="string")continue;const c={command:o.command};Array.isArray(o.args)&&(c.args=o.args),i(o.env)&&(c.env=o.env),r[t]=c}return r}export async function upsertZcodeMcp(n,e,r){const t=await s(n),o=i(t.mcp)?t.mcp:{},c={type:"stdio",command:r.command};r.args&&(c.args=r.args),r.env&&(c.env=r.env),o.servers={...u(t),[e]:c},t.mcp=o,await f(n,t)}export async function removeZcodeMcp(n,e){const r=await s(n),t=u(r);if(!(e in t))return!1;delete t[e];const o=i(r.mcp)?r.mcp:{};return o.servers=t,r.mcp=o,await f(n,r),!0}export function zcodeMcpFile(n,e,r){return n==="project"?a.join(e,".zcode","config.json"):a.join(r,".zcode","cli","config.json")}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@weavecode/harness",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.4",
|
|
4
4
|
"description": "Pluggable harness drivers — registry, init pipeline template method, and harness integration modules",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
"node": ">=22.5.0"
|
|
21
21
|
},
|
|
22
22
|
"dependencies": {
|
|
23
|
-
"@weavecode/core": "^0.1.
|
|
23
|
+
"@weavecode/core": "^0.1.4",
|
|
24
24
|
"smol-toml": "^1.3.0"
|
|
25
25
|
}
|
|
26
26
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
function
|
|
1
|
+
function i(n){return n==="__proto__"||n==="constructor"||n==="prototype"}function f(n){const e=n.split(".");if(e.some(t=>!t||i(t)))throw new Error(`\u975E\u6CD5\u914D\u7F6E\u952E\uFF1A${n}`);return e}function c(n){return typeof n=="object"&&n!==null&&!Array.isArray(n)}const u=Symbol("absent");function s(n,e){let t=n;for(const o of e){if(!c(t))return u;t=t[o]}return t===void 0?u:t}function l(n,e){let t=n;for(const o of e.slice(0,-1)){const r=t[o];if(!c(r))return;t=r}delete t[e[e.length-1]]}function p(n,e,t){let o=n;for(const r of e.slice(0,-1))c(o[r])||(o[r]={}),o=o[r];o[e[e.length-1]]=t}export function getDotted(n,e){const t=s(n,f(e));return t===u?void 0:t}export function applyUpdates(n,e){const t=structuredClone(n);for(const o of e){const r=f(o.path);o.remove?l(t,r):p(t,r,o.value)}return t}
|
|
@@ -23,8 +23,17 @@ export declare function saveProfile(root: string, harness: string, file: ConfigF
|
|
|
23
23
|
export declare function renameProfile(root: string, harness: string, file: ConfigFileId, id: string, name: string): Promise<void>;
|
|
24
24
|
export declare function removeProfile(root: string, harness: string, file: ConfigFileId, id: string): Promise<void>;
|
|
25
25
|
export declare function setActive(root: string, harness: string, file: ConfigFileId, id: string | null): Promise<void>;
|
|
26
|
+
/**
|
|
27
|
+
* 无活跃快照档位的自动基线(project/projectLocal 不支持快照、user/global 可能还没建):
|
|
28
|
+
* 首次查看立基线、写入口同步——没有它这些档位的外部改动永远判不出漂移。
|
|
29
|
+
*/
|
|
30
|
+
export declare const LASTSEEN_ID = "_lastseen";
|
|
31
|
+
/** 漂移基线:活跃快照优先,缺省落自动基线。 */
|
|
32
|
+
export declare function baselineSnapshot(root: string, harness: string, file: ConfigFileId, state: ConfigProfileState): Promise<Record<string, unknown> | null>;
|
|
33
|
+
/** 写入口同步基线:有活跃快照同步它;`_lastseen` 恒跟着写(删掉活跃快照后基线不复活旧值)。 */
|
|
34
|
+
export declare function syncBaseline(root: string, harness: string, file: ConfigFileId, state: ConfigProfileState, values: Record<string, unknown>): Promise<void>;
|
|
26
35
|
/** 写盘前把当前活配置存一份(每档留最新 20 份,超出按时间删旧)。 */
|
|
27
36
|
export declare function pushBackup(root: string, harness: string, file: ConfigFileId, values: Record<string, unknown>): Promise<void>;
|
|
28
|
-
/** 备份列表(新 →
|
|
37
|
+
/** 备份列表(新 → 旧)。同秒序号(`-2`)比无后缀的更新——按「时刻 + 序号」排,不按裸字典序。 */
|
|
29
38
|
export declare function listBackups(root: string, harness: string, file: ConfigFileId): Promise<string[]>;
|
|
30
39
|
export declare function readBackup(root: string, harness: string, file: ConfigFileId, id: string): Promise<Record<string, unknown> | null>;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import s from"node:fs/promises";import
|
|
2
|
-
`,"utf8"),await s.rename(
|
|
1
|
+
import s from"node:fs/promises";import f from"node:path";import{randomUUID as I}from"node:crypto";const h=20;function l(t,n){return f.join(t,n)}function S(t,n){return f.join(l(t,n),"profiles.json")}function w(t,n,e,a){return f.join(l(t,n),`${e}-${a}.json`)}function m(t,n){return f.join(l(t,n),"backups")}function $(t,n,e,a){return f.join(m(t,n),`${e}-${a}.json`)}async function y(t){try{const n=JSON.parse(await s.readFile(t,"utf8"));return typeof n=="object"&&n!==null&&!Array.isArray(n)?n:null}catch{return null}}async function x(t,n){await s.mkdir(f.dirname(t),{recursive:!0});const e=`${t}.${process.pid}.${Date.now()}.tmp`;await s.writeFile(e,`${JSON.stringify(n,null,2)}
|
|
2
|
+
`,"utf8"),await s.rename(e,t)}async function j(t,n){return await y(S(t,n))??{}}function g(){return{activeId:null,profiles:[]}}function v(t,n){return t[n]??g()}export async function listProfiles(t,n,e){return v(await j(t,n),e)}async function p(t,n,e,a){const r=await j(t,n),c=v(r,e);return a(c),r[e]=c,await x(S(t,n),r),c}function d(){return new Date().toISOString()}export async function writeSnapshot(t,n,e,a,r){await x(w(t,n,e,a),r)}export async function readSnapshot(t,n,e,a){return y(w(t,n,e,a))}export async function createProfile(t,n,e,a,r){const c={id:I().slice(0,8),name:a,createdAt:d(),updatedAt:d()};return await writeSnapshot(t,n,e,c.id,r),await p(t,n,e,i=>{i.profiles.push(c)}),c}export async function saveProfile(t,n,e,a,r){await writeSnapshot(t,n,e,a,r),await p(t,n,e,c=>{const i=c.profiles.find(o=>o.id===a);i&&(i.updatedAt=d())})}export async function renameProfile(t,n,e,a,r){await p(t,n,e,c=>{const i=c.profiles.find(o=>o.id===a);i&&(i.name=r,i.updatedAt=d())})}export async function removeProfile(t,n,e,a){await p(t,n,e,r=>{r.profiles=r.profiles.filter(c=>c.id!==a),r.activeId===a&&(r.activeId=null)}),await s.rm(w(t,n,e,a),{force:!0})}export async function setActive(t,n,e,a){await p(t,n,e,r=>{r.activeId=a})}export const LASTSEEN_ID="_lastseen";export async function baselineSnapshot(t,n,e,a){if(a.activeId){const r=await readSnapshot(t,n,e,a.activeId);if(r)return r}return readSnapshot(t,n,e,LASTSEEN_ID)}export async function syncBaseline(t,n,e,a,r){a.activeId&&await saveProfile(t,n,e,a.activeId,r),await writeSnapshot(t,n,e,LASTSEEN_ID,r)}function A(t){const n=e=>String(e).padStart(2,"0");return`${t.getFullYear()}-${n(t.getMonth()+1)}-${n(t.getDate())}-${n(t.getHours())}${n(t.getMinutes())}${n(t.getSeconds())}`}export async function pushBackup(t,n,e,a){const r=A(new Date),c=new Set((await s.readdir(m(t,n)).catch(()=>[])).filter(u=>u.startsWith(`${e}-${r}`)));let i=r;for(let u=2;c.has(`${e}-${i}.json`);u++)i=`${r}-${u}`;await x($(t,n,e,i),a);const o=(await listBackups(t,n,e)).slice(h);for(const u of o)await s.rm($(t,n,e,u),{force:!0})}export async function listBackups(t,n,e){const a=`${e}-`,r=i=>{const o=/^(\d{4}-\d{2}-\d{2}-\d{6})(?:-(\d+))?$/.exec(i);return o?+`${o[1].replace(/-/g,"")}${o[2]??"1"}`:0};return(await s.readdir(m(t,n)).catch(()=>[])).filter(i=>i.startsWith(a)&&i.endsWith(".json")).map(i=>i.slice(a.length,-5)).sort((i,o)=>r(i)-r(o)).reverse()}export async function readBackup(t,n,e,a){return/^[A-Za-z0-9-]+$/.test(a)?y($(t,n,e,a)):null}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{chmodSync as
|
|
2
|
-
`,{encoding:"utf8",mode:384}),y(
|
|
1
|
+
import{chmodSync as o,existsSync as c,mkdirSync as i,readFileSync as u,renameSync as y,rmSync as m,writeFileSync as p}from"node:fs";import a from"node:path";import{getAiKeyPath as n}from"../db/paths.js";export function readAiKey(t=n()){if(!c(t))return null;try{const r=JSON.parse(u(t,"utf8"));return typeof r.apiKey=="string"&&r.apiKey!==""?r.apiKey:null}catch{return null}}export function writeAiKey(t,r=n()){if(t===null||t===""){m(r,{force:!0});return}i(a.dirname(r),{recursive:!0});const e=`${r}.tmp`;p(e,`${JSON.stringify({apiKey:t},null,2)}
|
|
2
|
+
`,{encoding:"utf8",mode:384}),y(e,r);try{o(r,384)}catch{}}export function hasAiKey(t=n()){return readAiKey(t)!==null}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import{existsSync as
|
|
2
|
-
`),
|
|
1
|
+
import{existsSync as d,readdirSync as h,readFileSync as S}from"node:fs";import i from"node:path";import{builtinMarketDir as b}from"../market/builtin.js";const p=6e4,w=40,y=6;export function findDocsDir(r){let e=i.resolve(r);for(let n=0;n<y;n++){const s=i.join(e,"docs");if(d(i.join(s,"FEATURES.md")))return s;const c=i.dirname(e);if(c===e)break;e=c}return null}export function collectSkillFiles(r,e=w){const n=[],s=(c,a)=>{if(n.length>=e||a>6)return;let u;try{u=h(c,{withFileTypes:!0})}catch{return}for(const l of u){if(n.length>=e)return;const t=i.join(c,l.name);l.isDirectory()?s(t,a+1):l.name==="SKILL.md"&&n.push(t)}};return s(r,0),n.sort()}function m(r){try{return S(r,"utf8")}catch{return null}}export function buildSystemPrompt(r){const e=[],n=findDocsDir(r.cwd??process.cwd());if(n)for(const t of["ARCHITECTURE.md","FEATURES.md"]){const o=i.join(n,t);if(!d(o))continue;const f=m(o);f&&e.push({label:`docs/${t}`,text:f})}const s=b(r.dataRoot);for(const t of collectSkillFiles(s)){const o=m(t);o&&e.push({label:i.relative(s,t).split(i.sep).join("/"),text:o})}const c=["\u4F60\u662F weave \u63A7\u5236\u53F0\u5185\u7F6E\u7684 AI \u52A9\u624B\uFF0C**\u53EA\u8D1F\u8D23 weave \u672C\u8EAB**\uFF1A\u5B83\u7684\u529F\u80FD\u3001\u7528\u6CD5\u3001\u914D\u7F6E\u3001\u67B6\u6784\u3001","\u5185\u7F6E\u6280\u80FD\uFF0C\u4EE5\u53CA\u57FA\u4E8E\u4E0B\u9762\u6CE8\u5165\u8D44\u6599\u7684\u6392\u969C\u3002","","\u56DE\u7B54\u8303\u56F4\uFF08\u8D8A\u754C\u7684\u60C5\u51B5\u4E00\u5F8B\u793C\u8C8C\u62D2\u7B54\uFF1A\u7528\u4E00\u53E5\u8BDD\u8BF4\u660E\u4F60\u53EA\u804A weave\uFF0C\u7136\u540E\u628A\u8BDD\u9898\u5F15\u56DE weave\uFF09\uFF1A","- \u53EF\u4EE5\u7B54\uFF1Aweave \u7684\u80FD\u529B\u4E0E\u64CD\u4F5C\uFF08\u547D\u4EE4\u3001\u8BBE\u7F6E\u9879\u3001\u6587\u4EF6\u843D\u70B9\u3001\u63D2\u4EF6/\u6280\u80FD/\u5E02\u573A\u3001hooks\u3001\u4F1A\u8BDD\u4E0E\u4EFB\u52A1\u3001\u8BA4\u8BC1\u7B49\uFF09\uFF0C"," \u4EE5\u53CA\u6CE8\u5165\u8D44\u6599\u91CC\u80FD\u67E5\u5230\u7684\u4E8B\u5B9E\uFF1B","- \u4E0D\u8981\u7B54\uFF1A\u4E0E weave \u65E0\u5173\u7684\u901A\u7528\u7F16\u7A0B\u3001\u5199\u4F5C\u3001\u7FFB\u8BD1\u3001\u95F2\u804A\uFF0C\u5176\u5B83\u4EA7\u54C1\u6216\u670D\u52A1\uFF0C\u4EE5\u53CA\u4EFB\u4F55\u6709\u5BB3\u6216\u8D8A\u754C\u7684\u8BF7\u6C42\uFF1B","- \u8D44\u6599\u672A\u8986\u76D6\u65F6\u660E\u786E\u8BF4\u300C\u4E0D\u786E\u5B9A\u300D\uFF0C\u4E0D\u8981\u7F16\u9020 weave \u7684\u884C\u4E3A\u3001\u547D\u4EE4\u6216\u53C2\u6570\uFF1B","- \u4E0D\u7C98\u8D34\u5927\u6BB5\u6CE8\u5165\u8D44\u6599\u539F\u6587\uFF08\u7528\u6237\u70B9\u540D\u8981\u67D0\u4E00\u6BB5\u65F6\u9664\u5916\uFF09\uFF1B","- \u53EA\u505A\u53EA\u8BFB\u95EE\u7B54\uFF1A\u4E0D\u58F0\u79F0\u5DF2\u6267\u884C\u4EFB\u4F55\u64CD\u4F5C\uFF0C\u4E5F\u4E0D\u627F\u8BFA\u4EE3\u66FF\u7528\u6237\u53BB\u6539\u6587\u4EF6\u6216\u8DD1\u547D\u4EE4\u3002","","\u56DE\u7B54\u4F7F\u7528\u4E0E\u63D0\u95EE\u76F8\u540C\u7684\u8BED\u8A00\uFF1B\u6D89\u53CA\u64CD\u4F5C\u65F6\u7ED9\u51FA\u786E\u5207\u547D\u4EE4\u4E0E\u8DEF\u5F84\u3002"].join(`
|
|
2
|
+
`),a=[];let u=c.length;const l=[];for(const t of e){const o=`
|
|
3
3
|
|
|
4
|
-
## \u6CE8\u5165\u8D44\u6599\uFF1A${
|
|
4
|
+
## \u6CE8\u5165\u8D44\u6599\uFF1A${t.label}
|
|
5
5
|
|
|
6
|
-
${
|
|
6
|
+
${t.text}`;if(u+o.length>p){const f=p-u;f>500&&(a.push(`
|
|
7
7
|
|
|
8
|
-
## \u6CE8\u5165\u8D44\u6599\uFF1A${
|
|
8
|
+
## \u6CE8\u5165\u8D44\u6599\uFF1A${t.label}\uFF08\u6309\u9884\u7B97\u622A\u65AD\uFF09
|
|
9
9
|
|
|
10
|
-
${
|
|
10
|
+
${t.text.slice(0,f)}`),l.push(`${t.label}(\u622A\u65AD)`));break}u+=o.length,a.push(o),l.push(t.label)}return{prompt:c+a.join(""),labels:l,docsFound:n!==null}}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import{getDataRoot as
|
|
1
|
+
import{getDataRoot as I}from"../db/paths.js";import{DEFAULT_AI_SETTINGS as v,readDaemonSettings as N}from"./settings.js";import{hasAiKey as J,readAiKey as O}from"./ai-config.js";import{buildSystemPrompt as P,findDocsDir as R}from"./ai-context.js";import{readJson as k,sendJson as f}from"./http.js";const j=12e4,z=15e3,C=500,G=40,L=2e4;export function normalizeMessages(r){if(!Array.isArray(r)||r.length===0||r.length>G)return null;const e=[];for(const t of r){const o=t;if(o?.role!=="user"&&o?.role!=="assistant")return null;const a=o.content;if(typeof a!="string"||a===""||a.length>L)return null;e.push({role:o.role,content:a})}return e}export function aiConfigured(r,e,t){return r!==""&&e!==""&&t}export async function handleAiRoutes(r,e,t,o){if(o!=="/ai"&&!o.startsWith("/ai/"))return!1;const n=(await N()).ai??v,p=J(t.aiKeyPath);if(o==="/ai/status"&&r.method==="GET")return f(e,200,{configured:aiConfigured(n.baseUrl,n.model,p),baseUrl:n.baseUrl,model:n.model,apiKeySet:p,docsFound:R(process.cwd())!==null}),!0;if(o==="/ai/models"&&r.method==="POST"){let i;try{i=await k(r)}catch{return f(e,400,{error:"Invalid JSON body"}),!0}const u=typeof i.baseUrl=="string"&&i.baseUrl.trim()!==""?i.baseUrl.trim():n.baseUrl,m=typeof i.apiKey=="string"&&i.apiKey!==""?i.apiKey:O(t.aiKeyPath);if(u===""||m===null)return f(e,409,{error:"AI assistant is not configured"}),!0;const l=await B(u,m);return l.ok?(f(e,200,{models:l.models}),!0):(f(e,502,{error:l.error}),!0)}if(o==="/ai/chat"&&r.method==="POST"){const i=O(t.aiKeyPath);if(!aiConfigured(n.baseUrl,n.model,p)||i===null)return f(e,409,{error:"AI assistant is not configured"}),!0;let u;try{u=await k(r)}catch{return f(e,400,{error:"Invalid JSON body"}),!0}const m=normalizeMessages(u.messages);if(!m)return f(e,400,{error:"Invalid messages"}),!0;const l=P({dataRoot:t.libraries?.dataRoot??I()});return await X({req:r,res:e,baseUrl:n.baseUrl,model:n.model,apiKey:i,messages:m,system:l.prompt}),!0}return f(e,404,{error:"Not found"}),!0}function A(r){const t=r?.choices?.[0],o=t?.delta?.content??t?.message?.content;return typeof o=="string"&&o!==""?o:null}export const STREAM_MEMO_TTL_MS=1440*60*1e3;const S=new Map;export function streamMemoKey(r,e){return`${r}#${e}`}export function streamSupported(r,e=Date.now()){const t=S.get(r);return!t||e-t.checkedAt>STREAM_MEMO_TTL_MS?!0:t.streaming}export function rememberStreamSupport(r,e,t=Date.now()){const o=S.get(r);o!==void 0&&o.streaming!==e&&console.log(`[weave] ai gateway ${e?"supports":"rejects"} streaming: ${r}`),S.set(r,{streaming:e,checkedAt:t})}export function resetStreamMemory(){S.clear()}async function B(r,e){try{const t=await fetch(`${r.replace(/\/+$/,"")}/models`,{headers:{authorization:`Bearer ${e}`},signal:AbortSignal.timeout(z)});if(!t.ok){const n=await t.text().catch(()=>"");return{ok:!1,error:`upstream ${t.status}${n?`: ${n.slice(0,200)}`:""}`}}const o=await t.json().catch(()=>null),a=[...new Set((o?.data??[]).map(n=>n?.id).filter(n=>typeof n=="string"&&n!==""))].sort();return a.length===0?{ok:!1,error:"upstream returned no models"}:{ok:!0,models:a.slice(0,C)}}catch(t){return{ok:!1,error:t instanceof Error?t.message:String(t)}}}async function E(r){try{const e=await fetch(r.url,{method:"POST",headers:{"content-type":"application/json",authorization:`Bearer ${r.apiKey}`},body:JSON.stringify({model:r.model,stream:!1,messages:r.messages}),signal:r.signal});if(!e.ok){const o=await e.text().catch(()=>"");return{ok:!1,error:`upstream ${e.status}${o?`: ${o.slice(0,300)}`:""}`}}const t=A(await e.json().catch(()=>null));return t===null?{ok:!1,error:"upstream returned no content"}:{ok:!0,content:t}}catch(e){return{ok:!1,error:e instanceof Error?e.message:String(e)}}}async function X(r){const{req:e,res:t,baseUrl:o,model:a,apiKey:n,messages:p,system:i}=r,u=`${o.replace(/\/+$/,"")}/chat/completions`,m=[{role:"system",content:i},...p],l=new AbortController,_=setTimeout(()=>l.abort(),j);e.on("close",()=>l.abort()),t.writeHead(200,{"content-type":"text/event-stream","cache-control":"no-cache",connection:"keep-alive","x-accel-buffering":"no"});let b=!1;const d=s=>{if(!b)try{t.write(`data: ${JSON.stringify(s)}
|
|
2
2
|
|
|
3
|
-
`)}catch{}},
|
|
3
|
+
`)}catch{}},K=()=>{if(!b){b=!0;try{t.write(`data: {"done":true}
|
|
4
4
|
|
|
5
|
-
`),
|
|
6
|
-
`))>=0;){const
|
|
5
|
+
`),t.end()}catch{}}},g=streamMemoKey(u,a),M={url:u,apiKey:n,model:a,messages:m,signal:l.signal};try{if(!streamSupported(g)){const c=await E(M);c.ok?d({delta:c.content}):d({error:c.error});return}const s=await fetch(u,{method:"POST",headers:{"content-type":"application/json",authorization:`Bearer ${n}`},body:JSON.stringify({model:a,stream:!0,messages:m}),signal:l.signal});if(!s.ok||!s.body){const c=await s.text().catch(()=>""),h=await E(M);h.ok?(rememberStreamSupport(g,!1),d({delta:h.content})):d({error:`upstream ${s.status}${c?`: ${c.slice(0,300)}`:""}`});return}if(!(s.headers.get("content-type")??"").includes("text/event-stream")){const c=A(await s.json().catch(()=>null));rememberStreamSupport(g,!1),d(c===null?{error:"upstream returned no content"}:{delta:c});return}rememberStreamSupport(g,!0);const U=s.body.getReader(),D=new TextDecoder;let y="";for(;;){const{done:c,value:h}=await U.read();if(c)break;y+=D.decode(h,{stream:!0});let w;for(;(w=y.indexOf(`
|
|
6
|
+
`))>=0;){const $=y.slice(0,w).trim();if(y=y.slice(w+1),!$.startsWith("data:"))continue;const T=$.slice(5).trim();if(T==="[DONE]")return;try{const x=A(JSON.parse(T));x!==null&&d({delta:x})}catch{}}}}catch(s){d({error:s instanceof Error?s.message:String(s)})}finally{clearTimeout(_),K()}}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import{appendFile as
|
|
2
|
-
`)};e.on("finish",S),e.on("close",S)}write(t,e){this.chain=this.chain.then(async()=>{try{await L(this.dir,{recursive:!0}),await
|
|
3
|
-
`).reverse()){if(!l.trim())continue;let
|
|
1
|
+
import{appendFile as F,mkdir as L,readdir as T,readFile as N,rm as j}from"node:fs/promises";import g from"node:path";import{getApiLogsDir as x}from"../db/paths.js";const w=8*1024,C=2e3,b=50,D=6;export const MAX_LOG_FILES=24;const I=200,O=1e3,H=new Set(["password","apikey","token","secret","authorization","cookie","x-weave-local"]);function y(n,t=0){if(typeof n=="string")return n.length>C?`[truncated ${n.length} chars]`:n;if(Array.isArray(n)){if(t>=D)return"[depth-limited]";const e=n.slice(0,b).map(i=>y(i,t+1));return n.length>b&&e.push(`[truncated ${n.length-b} items]`),e}if(n&&typeof n=="object"){if(t>=D)return"[depth-limited]";const e={};for(const[i,a]of Object.entries(n))e[i]=H.has(i.toLowerCase())?"[redacted]":y(a,t+1);return e}return n}function M(n,t){if(t>w)return`[truncated body ${t} bytes]`;try{return y(JSON.parse(n))}catch{return y(n)}}export function maskPath(n){return n.replace(/^(\/webhooks\/orchestrate\/)[^?]+/,"$1[redacted]")}export function logFileFor(n,t){const e=a=>String(a).padStart(2,"0"),i=`${t.getFullYear()}-${e(t.getMonth()+1)}-${e(t.getDate())}T${e(t.getHours())}`;return g.join(n,`api-${i}.jsonl`)}function _(n){const t=g.basename(n).match(/^api-(\d{4}-\d{2}-\d{2}T\d{2})\.jsonl$/);return t?t[1]:null}const $=new WeakMap;export function noteRequestBody(n,t){$.get(n)?.(t)}export class ApiLogger{dir;chain=Promise.resolve();constructor(t={}){this.dir=t.dir??x()}begin(t,e){const i=Date.now(),a=[];let u=0,c=0,d="",h=0,l=!1;$.set(t,r=>{d=r,h=Buffer.byteLength(r,"utf8")});const f=r=>{const o=Buffer.isBuffer(r)?r:Buffer.from(typeof r=="string"?r:String(r??""),"utf8");if(c+=o.length,u<w){const s=o.subarray(0,w-u);a.push(s),u+=s.length}},m=e.write.bind(e),E=e.end.bind(e);let A="";const B=e.writeHead.bind(e);e.writeHead=((...r)=>{const o=r[1];if(o&&typeof o=="object"&&!Array.isArray(o)){const s=o,p=s["content-type"]??s["Content-Type"];typeof p=="string"&&(A=p)}return B(...r)}),e.write=((r,...o)=>(f(r),m(r,...o))),e.end=((r,...o)=>(typeof r!="function"&&r!=null&&f(r),E(r,...o)));const S=()=>{if(l)return;l=!0;const o=(String(e.getHeader("content-type")??"")||A).includes("event-stream"),s={ts:new Date(i).toISOString(),method:t.method??"GET",path:maskPath(t.url??"/"),status:e.statusCode,durationMs:Date.now()-i,ip:(t.socket?.remoteAddress??"").replace(/^::ffff:/,""),resBytes:c},p=t.headers["user-agent"];typeof p=="string"&&p&&(s.ua=p.slice(0,120)),h&&(s.req=M(d,h)),o?s.stream=!0:c&&(s.res=M(Buffer.concat(a).toString("utf8"),c)),e.writableEnded||(s.aborted=!0),this.write(logFileFor(this.dir,new Date(i)),`${JSON.stringify(s)}
|
|
2
|
+
`)};e.on("finish",S),e.on("close",S)}write(t,e){this.chain=this.chain.then(async()=>{try{await L(this.dir,{recursive:!0}),await F(t,e,"utf8"),await this.purge()}catch{}})}async purge(){const t=(await T(this.dir)).filter(e=>_(e)!=null);if(!(t.length<=MAX_LOG_FILES)){t.sort();for(const e of t.slice(0,t.length-MAX_LOG_FILES))await j(g.join(this.dir,e),{force:!0})}}onIdle(){return this.chain}async query(t){const e=(await T(this.dir).catch(()=>[])).filter(d=>_(d)!=null).sort().reverse(),i=Math.min(Math.max(t.limit??I,1),O),a=t.from?Date.parse(t.from):NaN,u=t.to?Date.parse(t.to):NaN,c=[];for(const d of e){if(c.length>=i)break;const h=await N(g.join(this.dir,d),"utf8").catch(()=>"");for(const l of h.split(`
|
|
3
|
+
`).reverse()){if(!l.trim())continue;let f;try{f=JSON.parse(l)}catch{continue}const m=Date.parse(f.ts);if(!(Number.isFinite(a)&&m<a)&&!(Number.isFinite(u)&&m>u)&&!(t.status!=null&&f.status!==t.status)&&!(t.method&&f.method.toUpperCase()!==t.method.toUpperCase())&&!(t.path&&!f.path.includes(t.path))&&(c.push(f),c.length>=i))break}}return{entries:c,files:e.length}}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{clearedSessionCookie as
|
|
1
|
+
import{clearedSessionCookie as c,sessionCookie as h}from"./dashboard-auth.js";import{readJson as i,sendJson as r}from"./http.js";const l=300,n=6,f=e=>new Promise(t=>setTimeout(t,e));export async function handleAuthRoutes(e,t,d,u){if(u!=="/auth"&&!u.startsWith("/auth/"))return!1;const o=d.auth;if(!o)return r(t,503,{error:"Auth subsystem unavailable"}),!0;if(u==="/auth/status"&&e.method==="GET")return r(t,200,{passwordSet:o.isPasswordSet(),authenticated:o.isAuthenticated(e.headers)}),!0;if(u==="/auth/login"&&e.method==="POST"){let s;try{s=await i(e)}catch{return r(t,400,{error:"Invalid JSON body"}),!0}const a=typeof s.password=="string"?s.password:"";return!a||!o.verifyPassword(a)?(await f(l),r(t,401,{error:"Invalid password"}),!0):(t.setHeader("set-cookie",h(o.issueSession())),r(t,200,{ok:!0}),!0)}if(u==="/auth/logout"&&e.method==="POST")return t.setHeader("set-cookie",c()),r(t,200,{ok:!0}),!0;if(u==="/auth/password"&&e.method==="PUT"){if(!o.isLocallyTrusted(e.headers))return r(t,401,{error:"Unauthorized (local token required)"}),!0;let s;try{s=await i(e)}catch{return r(t,400,{error:"Invalid JSON body"}),!0}const a=typeof s.next=="string"?s.next:"";return a.length<n?(r(t,400,{error:`Password must be at least ${n} characters`}),!0):(o.setPassword(a),r(t,200,{ok:!0}),!0)}return r(t,404,{error:"Not found"}),!0}
|
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
import{spawnSync as
|
|
2
|
-
CreateObject("WScript.Shell").Run "${
|
|
3
|
-
`),
|
|
1
|
+
import{spawnSync as l}from"node:child_process";import{fileURLToPath as m}from"node:url";import{mkdirSync as a,writeFileSync as i,unlinkSync as c}from"node:fs";import{homedir as p}from"node:os";import r from"node:path";import{getAutoStartScriptPath as s,getDataDir as f}from"../db/paths.js";import{readDaemonSettingsSync as d}from"./settings.js";const o="weave-daemon",u="HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Run";export function relaunchArgs(){return[process.execPath,...process.execArgv.map(t=>{if(t!=="tsx"&&!t.startsWith("tsx/"))return t;try{return m(import.meta.resolve(t))}catch{return t}}),r.resolve(process.argv[1]??process.argv[0])]}function h(t){return{platform:t.platform??process.platform,dataDir:t.dataDir??f(),home:t.home??p(),run:t.run??((e,n)=>({status:l(e,n,{stdio:"ignore"}).status}))}}function g(t){return t.map(e=>`"${e}"`).join(" ")}function y(t){const e=s(t.dataDir);a(r.dirname(e),{recursive:!0});const n=g(relaunchArgs());i(e,`' Generated by weave \u2014 daemon auto-start. Do not edit.
|
|
2
|
+
CreateObject("WScript.Shell").Run "${n.replace(/"/g,'""')}", 0, False
|
|
3
|
+
`),t.run("reg",["add",u,"/v",o,"/t","REG_SZ","/d",`wscript.exe "${e}"`,"/f"])}function v(t){t.run("reg",["delete",u,"/v",o,"/f"]);try{c(s(t.dataDir))}catch{}}function w(t){const e=n=>n.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">");return`<?xml version="1.0" encoding="UTF-8"?>
|
|
4
4
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
5
5
|
<plist version="1.0">
|
|
6
6
|
<dict>
|
|
7
7
|
<key>Label</key><string>com.weave.daemon</string>
|
|
8
8
|
<key>ProgramArguments</key>
|
|
9
9
|
<array>
|
|
10
|
-
`+
|
|
10
|
+
`+t.map(n=>` <string>${e(n)}</string>`).join(`
|
|
11
11
|
`)+`
|
|
12
12
|
</array>
|
|
13
13
|
<key>RunAtLoad</key><true/>
|
|
14
14
|
</dict>
|
|
15
15
|
</plist>
|
|
16
|
-
`}function L(
|
|
17
|
-
`))}function
|
|
16
|
+
`}function L(t){const e=r.join(t.home,"Library","LaunchAgents","com.weave.daemon.plist");a(r.dirname(e),{recursive:!0}),i(e,w(relaunchArgs())),t.run("launchctl",["unload",e]),t.run("launchctl",["load",e])}function D(t){const e=r.join(t.home,"Library","LaunchAgents","com.weave.daemon.plist");t.run("launchctl",["unload",e]);try{c(e)}catch{}}function k(t){return t.map(e=>/[\s"]/.test(e)?`"${e}"`:e).join(" ")}function x(t){const e=r.join(t.home,".config","autostart",`${o}.desktop`);a(r.dirname(e),{recursive:!0}),i(e,["[Desktop Entry]","Type=Application","Name=weave daemon",`Exec=${k(relaunchArgs())}`,"X-GNOME-Autostart-enabled=true",""].join(`
|
|
17
|
+
`))}function S(t){try{c(r.join(t.home,".config","autostart",`${o}.desktop`))}catch{}}export function applyLaunchOnLogin(t,e={}){try{const n=h(e);n.platform==="win32"?t?y(n):v(n):n.platform==="darwin"?t?L(n):D(n):t?x(n):S(n)}catch(n){console.error(`[weave] auto-start ${t?"enable":"disable"} failed:`,n)}}export function syncLaunchOnLogin(t={}){const e=d().startup;applyLaunchOnLogin(e?.launchOnLogin??!1,t)}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{z as
|
|
1
|
+
import{z as n}from"zod";import{isHarness as f}from"@weavecode/core";import{WEAVE_VERSION as p}from"../version.js";import{readJson as d,sendJson as s}from"./http.js";import{captureSurfaces as i}from"../surfaces.js";const l=n.object({harness:n.string(),enabled:n.boolean()});export async function handleCaptureRoutes(o,t,u,c){if(c!=="/capture")return!1;if(o.method==="GET"){const e=await Promise.all(i().map(async({harness:a,surface:r})=>({harness:a,...await r.readUserCapture()})));return s(t,200,{rows:e}),!0}if(o.method==="PUT"){let e;try{e=l.parse(await d(o))}catch(r){return s(t,400,{error:r instanceof Error?r.message:"Invalid body"}),!0}if(!f(e.harness))return s(t,400,{error:`Unknown harness: ${e.harness}`}),!0;const a=i().find(r=>r.harness===e.harness);if(!a)return s(t,400,{error:`No capture surface for harness: ${e.harness}`}),!0;try{if(e.enabled){await a.surface.installUserCapture({version:p});for(const r of u.projects.list())await a.surface.stripProjectCapture(r.path)}else await a.surface.uninstallUserCapture();u.dataBus?.emit({key:"capture"}),s(t,200,{harness:a.harness,...await a.surface.readUserCapture()})}catch(r){s(t,400,{error:r instanceof Error?r.message:"Capture update failed"})}return!0}return s(t,405,{error:"Method not allowed"}),!0}
|
|
@@ -1,57 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* claude
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* pid 被别的进程复用 → 误判活)用注册表里的 procStart 复核需要
|
|
6
|
-
* WMI/NAPI 取进程启动时间,开销不值——留作已知残差。
|
|
2
|
+
* claude 判活的唯一实现已迁 harness(`@weavecode/harness` 的 claude/liveness.ts
|
|
3
|
+
* ——判据是 harness 专属知识,server 不自拼)。本文件只剩 re-export 壳:
|
|
4
|
+
* 存量 import 点(hooks 域 6 文件 + daemon 域 4 文件 + 测试)不动。
|
|
7
5
|
*/
|
|
8
|
-
|
|
9
|
-
export interface ClaudeSessionReg {
|
|
10
|
-
pid: number;
|
|
11
|
-
sessionId: string;
|
|
12
|
-
}
|
|
13
|
-
/** 解析一个登记文件;坏输入 null。 */
|
|
14
|
-
export declare function parseClaudeSessionReg(jsonText: string): ClaudeSessionReg | null;
|
|
15
|
-
/** signal 0 探活:ESRCH = 进程不在;EPERM 等 = 存在但无权,按活算。 */
|
|
16
|
-
export declare function pidAlive(pid: number): boolean;
|
|
17
|
-
/** 新会话启动竞态豁免:lastSeen 在此窗口内且查无登记 → 当未知,不判死。 */
|
|
18
|
-
export declare const CLAUDE_REG_GRACE_MS = 90000;
|
|
19
|
-
/**
|
|
20
|
-
* 单条会话的 pidAlive 三态:
|
|
21
|
-
* - 登记命中 → 直接是 kill(pid,0) 的结果(true/false);
|
|
22
|
-
* - 查无登记 + harness=claude + lastSeen 已过豁免窗 → false——claude 的登记
|
|
23
|
-
* 文件随进程死被清(正常退出自清/崩溃后由后续启动 GC),旧会话查无登记
|
|
24
|
-
* 即进程已死;豁免窗内不猜(新会话文件可能还没落盘);
|
|
25
|
-
* - 「仅一条 SessionStart」的空壳行不判:/continue、compact 会各留一行
|
|
26
|
-
* 幽灵会话(事件跟在新 id 后面流),判死会把活着的会谈错标 terminated;
|
|
27
|
-
* 它们交给 SessionSweeper 清(宿主丢弃的见 shellDiscardedByClaude,其余保活期后);
|
|
28
|
-
* - 其余(codex/未知 harness/新鲜会话)→ null,上游不判。
|
|
29
|
-
*/
|
|
30
|
-
export declare function pidAliveOf(row: {
|
|
31
|
-
sessionId: string;
|
|
32
|
-
harness?: string | null;
|
|
33
|
-
lastSeenAt: string;
|
|
34
|
-
lastEventType?: string | null;
|
|
35
|
-
eventCount?: number;
|
|
36
|
-
}, liveness: Map<string, boolean>, now?: number): boolean | null;
|
|
37
|
-
/**
|
|
38
|
-
* 空壳会话(仅一条 SessionStart)是否已被宿主整个丢弃:claude 一句没说就退出时会把
|
|
39
|
-
* session id 连转录一起删——不发 SessionEnd、注册表自清。于是「查无登记 + 已过豁免窗」
|
|
40
|
-
* 就是再没有进程会以这个 id 发事件的证据,不必等满 1 小时保活期(用户原话:claude 那边
|
|
41
|
-
* 会话没了,weave 的会话列表却还留着)。
|
|
42
|
-
* 与 pidAliveOf 的「空壳不判」不冲突:那是状态面不猜,这里只决定清扫时机。
|
|
43
|
-
* 仍有登记的(活着的空闲会话 / 崩溃残留)一律不动,照旧走保活期。
|
|
44
|
-
*/
|
|
45
|
-
export declare function shellDiscardedByClaude(row: {
|
|
46
|
-
sessionId: string;
|
|
47
|
-
harness?: string | null;
|
|
48
|
-
lastSeenAt: string;
|
|
49
|
-
lastEventType?: string | null;
|
|
50
|
-
eventCount?: number;
|
|
51
|
-
}, liveness: Map<string, boolean>, now?: number): boolean;
|
|
52
|
-
/**
|
|
53
|
-
* sessionId → 是否活着 的映射。只覆盖注册表里有登记的(claude 会话);
|
|
54
|
-
* codex/旧会话/他机会话不进图——上游把「查不到」当未知,不许误判死。
|
|
55
|
-
* 目录读不到(claude 没装过)同样给空图。
|
|
56
|
-
*/
|
|
57
|
-
export declare function claudeLivenessById(dir?: string | null): Map<string, boolean>;
|
|
6
|
+
export { type ClaudeSessionReg, parseClaudeSessionReg, pidAlive, CLAUDE_REG_GRACE_MS, pidAliveOf, shellDiscardedByClaude, claudeLivenessById, } from '@weavecode/harness';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
export{parseClaudeSessionReg,pidAlive,CLAUDE_REG_GRACE_MS,pidAliveOf,shellDiscardedByClaude,claudeLivenessById}from"@weavecode/harness";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{homedir as
|
|
1
|
+
import{homedir as B}from"node:os";import{access as F}from"node:fs/promises";import{isHarness as I}from"@weavecode/core";import{configSurfaceFor as k}from"../surfaces.js";import{baselineSnapshot as U,createProfile as J,LASTSEEN_ID as C,listBackups as K,listProfiles as h,readBackup as E,readSnapshot as N,removeProfile as L,renameProfile as $,pushBackup as j,saveProfile as D,setActive as V,syncBaseline as P,writeSnapshot as M}from"../config/profiles.js";import{readBody as R,sendJson as a}from"./http.js";import{getHarnessConfigDir as G}from"../db/paths.js";const H=["user","project","projectLocal","global"];function x(c){return typeof c=="string"&&H.includes(c)?c:null}function y(c,r){return c.serializeRaw(r)}function _(c,r,p){const w=c.files(p).find(m=>m.id===r);return w?w.path(p):""}async function O(c){try{const r=JSON.parse(await R(c));return typeof r=="object"&&r!==null&&!Array.isArray(r)?r:null}catch{return null}}async function z(c){if(!c)return!1;try{return await F(c),!0}catch{return!1}}async function T(c,r,p,w,m){const i=_(p,w,m),n=await p.read(w,m),e=y(p,n),t=await h(c,r,w),s=await U(c,r,w,t);s||await M(c,r,w,C,n);const o=s?y(p,s):y(p,n);return{harness:r,file:w,path:i,exists:await z(i),values:n,managedKeys:p.managedKeys(n),managedEntries:p.managedEntries(n),profiles:t.profiles,activeId:t.activeId,liveText:e,activeText:o,drifted:o!==e,backups:await K(c,r,w)}}function S(c,r,p){let w=null;if(r==="project"||r==="projectLocal"){const m=Number(p);if(!Number.isInteger(m)||m<=0)return"\u9700\u8981 projectId";const i=c.projects.getById(m);if(!i)return"\u9879\u76EE\u4E0D\u5B58\u5728";w=i.path}return{projectPath:w,homedir:B()}}export async function handleConfigRoutes(c,r,p,w,m){if(!w.startsWith("/harness-config"))return!1;const i=G();if(w==="/harness-config/catalog"&&c.method==="GET"){const n=m.searchParams.get("harness");if(!I(n))return a(r,400,{error:"Unknown harness"}),!0;const e=k(n);if(!e)return a(r,200,{supported:!1}),!0;const t=x(m.searchParams.get("file"))??"user",s={projectPath:null,homedir:B()},o=e.catalog(t);return a(r,200,{supported:!0,harness:n,file:t,rawFormat:e.rawFormat,files:e.files(s).map(u=>({id:u.id,profiles:u.profiles})),groups:o.groups,keys:o.keys,envVars:o.envVars}),!0}if(w==="/harness-config"&&c.method==="GET"){const n=m.searchParams.get("harness"),e=x(m.searchParams.get("file"));if(!I(n)||!e)return a(r,400,{error:"Unknown harness or file"}),!0;const t=k(n);if(!t)return a(r,400,{error:"\u914D\u7F6E\u9762\u672A\u5B9E\u73B0"}),!0;const s=S(p,e,m.searchParams.get("projectId"));return typeof s=="string"?(a(r,400,{error:s}),!0):(a(r,200,await T(i,n,t,e,s)),!0)}if(w==="/harness-config/values"&&c.method==="PUT"){const n=await O(c);if(!n)return a(r,400,{error:"Invalid JSON body"}),!0;const e=n.harness,t=x(n.file);if(!I(e)||!t)return a(r,400,{error:"Unknown harness or file"}),!0;const s=k(e);if(!s)return a(r,400,{error:"\u914D\u7F6E\u9762\u672A\u5B9E\u73B0"}),!0;const o=S(p,t,n.projectId);if(typeof o=="string")return a(r,400,{error:o}),!0;const u=n.values;if(typeof u!="object"||u===null||Array.isArray(u))return a(r,400,{error:'Missing "values"'}),!0;try{const f=await s.read(t,o);await j(i,e,t,f),await s.write(t,o,u);const v=await h(i,e,t);await P(i,e,t,v,await s.read(t,o))}catch(f){return a(r,400,{error:f.message}),!0}return a(r,200,await T(i,e,s,t,o)),!0}if(w==="/harness-config/raw"&&c.method==="PUT"){const n=await O(c);if(!n)return a(r,400,{error:"Invalid JSON body"}),!0;const e=n.harness,t=x(n.file);if(!I(e)||!t)return a(r,400,{error:"Unknown harness or file"}),!0;const s=k(e);if(!s)return a(r,400,{error:"\u914D\u7F6E\u9762\u672A\u5B9E\u73B0"}),!0;const o=S(p,t,n.projectId);if(typeof o=="string")return a(r,400,{error:o}),!0;let u;try{u=s.parseRaw(String(n.text??""))}catch(f){return a(r,400,{error:`\u4E0D\u662F\u5408\u6CD5${s.rawFormat==="toml"?" TOML":" JSON"}\uFF1A${f.message}`}),!0}try{const f=await s.read(t,o);await j(i,e,t,f),await s.write(t,o,u);const v=await h(i,e,t);await P(i,e,t,v,await s.read(t,o))}catch(f){return a(r,400,{error:f.message}),!0}return a(r,200,await T(i,e,s,t,o)),!0}if(w==="/harness-config/profile"&&c.method==="POST"){const n=await O(c);if(!n)return a(r,400,{error:"Invalid JSON body"}),!0;const e=n.harness,t=x(n.file),s=n.action;if(!I(e)||!t||typeof s!="string")return a(r,400,{error:"Unknown harness, file or action"}),!0;const o=k(e);if(!o)return a(r,400,{error:"\u914D\u7F6E\u9762\u672A\u5B9E\u73B0"}),!0;const u=S(p,t,n.projectId);if(typeof u=="string")return a(r,400,{error:u}),!0;const f=typeof n.id=="string"?n.id:"",v=typeof n.name=="string"?n.name.trim():"",A=typeof n.values=="object"&&n.values!==null&&!Array.isArray(n.values)?n.values:null;switch(s){case"list":{const d=await h(i,e,t);return a(r,200,d),!0}case"create":{const d=await h(i,e,t),l=await J(i,e,t,v||`\u914D\u7F6E ${d.profiles.length+1}`,A??await o.read(t,u));return a(r,200,{profile:l,state:await h(i,e,t)}),!0}case"save":return(await h(i,e,t)).profiles.some(l=>l.id===f)?(await D(i,e,t,f,A??await o.read(t,u)),a(r,200,await h(i,e,t)),!0):(a(r,404,{error:"\u914D\u7F6E\u4E0D\u5B58\u5728"}),!0);case"compare":{const d=n.target;if(d==="live")return a(r,200,{text:y(o,await o.read(t,u))}),!0;if(d==="backup"){const g=typeof n.backupId=="string"?n.backupId:"",b=await E(i,e,t,g);return b?(a(r,200,{text:y(o,b)}),!0):(a(r,404,{error:"\u5907\u4EFD\u4E0D\u5B58\u5728"}),!0)}const l=await N(i,e,t,f);return l?(a(r,200,{text:y(o,l)}),!0):(a(r,404,{error:"\u914D\u7F6E\u4E0D\u5B58\u5728"}),!0)}case"duplicate":{const d=await N(i,e,t,f);if(!d)return a(r,404,{error:"\u914D\u7F6E\u4E0D\u5B58\u5728"}),!0;const l=await h(i,e,t),g=await J(i,e,t,v||`\u914D\u7F6E ${l.profiles.length+1}`,d);return a(r,200,{profile:g,state:await h(i,e,t)}),!0}case"rename":return v?(await $(i,e,t,f,v),a(r,200,await h(i,e,t)),!0):(a(r,400,{error:"\u7F3A\u5C11\u540D\u79F0"}),!0);case"remove":return await L(i,e,t,f),a(r,200,await h(i,e,t)),!0;case"activate":{const d=await N(i,e,t,f);if(!d)return a(r,404,{error:"\u914D\u7F6E\u4E0D\u5B58\u5728"}),!0;const l=await o.read(t,u);if(n.confirm!==!0)return a(r,200,{requiresConfirm:!0,liveText:y(o,l),profileText:y(o,d)}),!0;try{await j(i,e,t,l),await o.write(t,u,d),await V(i,e,t,f)}catch(g){return a(r,400,{error:g.message}),!0}return a(r,200,await T(i,e,o,t,u)),!0}case"acceptDrift":{const d=await h(i,e,t),l=await U(i,e,t,d);return l&&await j(i,e,t,l),await P(i,e,t,d,await o.read(t,u)),a(r,200,await T(i,e,o,t,u)),!0}case"restoreBaseline":{const d=await h(i,e,t),l=await U(i,e,t,d);if(!l)return a(r,404,{error:"\u6CA1\u6709\u53EF\u6062\u590D\u7684\u57FA\u7EBF"}),!0;const g=await o.read(t,u);if(n.confirm!==!0)return a(r,200,{requiresConfirm:!0,liveText:y(o,g),baselineText:y(o,l)}),!0;try{await j(i,e,t,g),await o.write(t,u,l),await P(i,e,t,d,l)}catch(b){return a(r,400,{error:b.message}),!0}return a(r,200,await T(i,e,o,t,u)),!0}case"restoreBackup":{const d=typeof n.backupId=="string"?n.backupId:"",l=await E(i,e,t,d);if(!l)return a(r,404,{error:"\u5907\u4EFD\u4E0D\u5B58\u5728"}),!0;const g=await o.read(t,u);if(n.confirm!==!0)return a(r,200,{requiresConfirm:!0,liveText:y(o,g),backupText:y(o,l)}),!0;try{await j(i,e,t,g),await o.write(t,u,l);const b=await h(i,e,t);await P(i,e,t,b,l)}catch(b){return a(r,400,{error:b.message}),!0}return a(r,200,await T(i,e,o,t,u)),!0}default:return a(r,400,{error:`\u672A\u77E5\u52A8\u4F5C\uFF1A${s}`}),!0}}if(w==="/harness-config/models"&&c.method==="POST"){const n=await O(c);if(!n)return a(r,400,{error:"Invalid JSON body"}),!0;const e=n.harness,t=x(n.file)??"user";if(!I(e))return a(r,400,{error:"Unknown harness"}),!0;const s=k(e);if(!s)return a(r,400,{error:"\u914D\u7F6E\u9762\u672A\u5B9E\u73B0"}),!0;const o=S(p,t,n.projectId);if(typeof o=="string")return a(r,400,{error:o}),!0;try{const u=await s.read(t,o),f=await s.models({values:u,file:t,homedir:o.homedir,baseUrl:typeof n.baseUrl=="string"?n.baseUrl:null,apiKey:typeof n.apiKey=="string"?n.apiKey:null,authToken:typeof n.authToken=="string"?n.authToken:null});a(r,200,f)}catch(u){a(r,502,{error:u.message})}return!0}if(w==="/harness-config/preview"&&c.method==="POST"){const n=await O(c);if(!n)return a(r,400,{error:"Invalid JSON body"}),!0;const e=n.harness,t=x(n.file);if(!I(e)||!t)return a(r,400,{error:"Unknown harness or file"}),!0;const s=k(e);if(!s)return a(r,400,{error:"\u914D\u7F6E\u9762\u672A\u5B9E\u73B0"}),!0;const o=S(p,t,n.projectId);if(typeof o=="string")return a(r,400,{error:o}),!0;const u=n.values;if(typeof u!="object"||u===null||Array.isArray(u))return a(r,400,{error:'Missing "values"'}),!0;try{const f=await s.read(t,o);a(r,200,{before:y(s,f),after:y(s,u)})}catch(f){a(r,400,{error:f.message})}return!0}return a(r,404,{error:"Not found"}),!0}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
const d=[{min:0,max:59},{min:0,max:23},{min:1,max:31},{min:1,max:12},{min:0,max:7}];export function parseCron(
|
|
1
|
+
const d=[{min:0,max:59},{min:0,max:23},{min:1,max:31},{min:1,max:12},{min:0,max:7}];export function parseCron(t){const n=t.trim().split(/\s+/);if(n.length!==5)return null;const e=[];for(let u=0;u<5;u++){const r=a(n[u],d[u].min,d[u].max);if(!r)return null;e.push(r)}const s=[...new Set(e[4].map(u=>u===7?0:u))].sort((u,r)=>u-r);return{minutes:e[0],hours:e[1],doms:e[2],months:e[3],dows:s,domAny:n[2]==="*",dowAny:n[4]==="*"}}function a(t,n,e){const s=new Set;for(const u of t.split(",")){const[r,m]=u.split("/");if(r===void 0)return null;const c=m===void 0?1:Number(m);if(!Number.isInteger(c)||c<1||c>e)return null;let i,o;if(r==="*")i=n,o=e;else if(r.includes("-")){const[l,g]=r.split("-");i=Number(l),o=Number(g)}else i=Number(r),o=m===void 0?i:e;if(!Number.isInteger(i)||!Number.isInteger(o)||i<n||o>e||i>o)return null;for(let l=i;l<=o;l+=c)s.add(l)}return s.size===0?null:[...s].sort((u,r)=>u-r)}function f(t,n){const e=t.doms.includes(n.getDate()),s=t.dows.includes(n.getDay());return t.domAny&&t.dowAny?!0:t.domAny?s:t.dowAny?e:e||s}export function matchesMinute(t,n){return t.minutes.includes(n.getMinutes())&&t.hours.includes(n.getHours())&&t.months.includes(n.getMonth()+1)&&f(t,n)}export function nextRunAt(t,n=new Date){const e=new Date(n.getTime());e.setSeconds(0,0),e.setMinutes(e.getMinutes()+1);const s=new Date(n.getTime()+366*864e5);for(;e<=s;){if(!t.months.includes(e.getMonth()+1)){e.setMonth(e.getMonth()+1,1),e.setHours(0,0,0,0);continue}if(!f(t,e)){e.setDate(e.getDate()+1),e.setHours(0,0,0,0);continue}if(!t.hours.includes(e.getHours())){e.setHours(e.getHours()+1,0,0,0);continue}if(!t.minutes.includes(e.getMinutes())){e.setMinutes(e.getMinutes()+1,0,0);continue}return e.toISOString()}return null}export function minuteKey(t){const n=e=>String(e).padStart(2,"0");return`${t.getFullYear()}-${n(t.getMonth()+1)}-${n(t.getDate())}T${n(t.getHours())}:${n(t.getMinutes())}`}
|