@weavecode/weave 0.1.6 → 0.1.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/cjs/adapter/bun/serve-static.js +1 -1
- package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/cjs/adapter/bun/websocket.js +1 -1
- package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/cjs/context.js +1 -1
- package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/cjs/helper/css/common.js +3 -5
- package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/cjs/hono-base.js +4 -10
- package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/cjs/hono.js +0 -1
- package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/cjs/middleware/basic-auth/index.js +1 -1
- package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/cjs/middleware/bearer-auth/index.js +1 -1
- package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/cjs/middleware/csrf/index.js +2 -2
- package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/cjs/middleware/jwk/jwk.js +2 -2
- package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/cjs/middleware/jwt/jwt.js +2 -2
- package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/cjs/middleware/mount/index.js +4 -4
- package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/cjs/router/reg-exp-router/node.js +13 -11
- package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/cjs/router/reg-exp-router/prepared-router.js +4 -4
- package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/cjs/router/reg-exp-router/router.js +39 -51
- package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/cjs/router/reg-exp-router/trie.js +15 -5
- package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/cjs/utils/jwt/jwt.js +2 -1
- package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/cjs/utils/mount.js +35 -0
- package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/cjs/utils/url.js +10 -0
- package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/cjs/validator/validator.js +1 -1
- package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/context.js +1 -1
- package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/helper/css/common.js +3 -5
- package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/hono-base.js +4 -10
- package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/hono.js +0 -1
- package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/middleware/basic-auth/index.js +1 -1
- package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/middleware/bearer-auth/index.js +1 -1
- package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/middleware/csrf/index.js +2 -2
- package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/middleware/jwk/jwk.js +2 -2
- package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/middleware/jwt/jwt.js +2 -2
- package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/middleware/language/language.js +1 -1
- package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/middleware/mount/index.js +4 -4
- package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/router/reg-exp-router/node.js +13 -11
- package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/router/reg-exp-router/prepared-router.js +5 -5
- package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/router/reg-exp-router/router.js +40 -52
- package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/router/reg-exp-router/trie.js +15 -5
- package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/types/middleware/mount/index.d.ts +1 -0
- package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/types/router/reg-exp-router/node.d.ts +3 -3
- package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/types/router/reg-exp-router/trie.d.ts +1 -1
- package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/types/utils/mount.d.ts +4 -0
- package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/types/utils/url.d.ts +1 -0
- package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/utils/jwt/jwt.js +2 -1
- package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/utils/mount.js +34 -0
- package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/utils/url.js +10 -1
- package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/validator/validator.js +1 -1
- package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/package.json +1 -1
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/jwks/remote.js +3 -1
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/lib/deflate.js +2 -1
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/lib/jwt_claims_set.js +2 -1
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/package.json +1 -1
- package/node_modules/@weavecode/cli/dist/cli.js +3 -3
- package/node_modules/@weavecode/cli/dist/commands/chpass.js +1 -1
- package/node_modules/@weavecode/cli/dist/commands/daemon-auth.js +1 -1
- package/node_modules/@weavecode/cli/dist/commands/daemon.js +2 -2
- package/node_modules/@weavecode/cli/dist/commands/dashboard.js +2 -2
- package/node_modules/@weavecode/cli/dist/commands/doctor.js +1 -1
- package/node_modules/@weavecode/cli/dist/commands/init.js +1 -1
- package/node_modules/@weavecode/cli/dist/commands/msg.js +2 -2
- package/node_modules/@weavecode/cli/dist/commands/scan.js +1 -1
- package/node_modules/@weavecode/cli/dist/commands/status.js +2 -2
- package/node_modules/@weavecode/cli/dist/commands/uninstall.js +1 -1
- package/node_modules/@weavecode/cli/dist/i18n/dict/en.js +1 -1
- package/node_modules/@weavecode/cli/dist/i18n/dict/zh.d.ts +1 -0
- package/node_modules/@weavecode/cli/dist/i18n/dict/zh.js +2 -2
- 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.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.js +1 -1
- package/node_modules/@weavecode/cli/dist/init/uninstall.js +6 -6
- package/node_modules/@weavecode/cli/dist/init/wiring.js +1 -1
- package/node_modules/@weavecode/cli/dist/parser.js +1 -1
- package/node_modules/@weavecode/cli/dist/statusline/ansi.js +1 -1
- package/node_modules/@weavecode/cli/package.json +5 -5
- package/node_modules/@weavecode/core/dist/harness-checks.js +1 -1
- package/node_modules/@weavecode/core/dist/harness.d.ts +89 -0
- package/node_modules/@weavecode/core/dist/harness.js +1 -1
- package/node_modules/@weavecode/core/dist/index.d.ts +1 -1
- package/node_modules/@weavecode/core/dist/index.js +1 -1
- package/node_modules/@weavecode/core/dist/platform.js +1 -1
- package/node_modules/@weavecode/core/dist/types.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.d.ts +2 -0
- package/node_modules/@weavecode/harness/dist/claude/commands.js +3 -2
- package/node_modules/@weavecode/harness/dist/claude/config.js +2 -2
- package/node_modules/@weavecode/harness/dist/claude/detect.js +1 -1
- package/node_modules/@weavecode/harness/dist/claude/edits.js +1 -1
- package/node_modules/@weavecode/harness/dist/claude/event-source.js +1 -1
- package/node_modules/@weavecode/harness/dist/claude/images.js +2 -2
- package/node_modules/@weavecode/harness/dist/claude/index.js +1 -1
- package/node_modules/@weavecode/harness/dist/claude/liveness.js +1 -1
- package/node_modules/@weavecode/harness/dist/claude/mcp-gen.js +1 -1
- package/node_modules/@weavecode/harness/dist/claude/messaging.js +2 -2
- package/node_modules/@weavecode/harness/dist/claude/model-aliases.js +1 -1
- package/node_modules/@weavecode/harness/dist/claude/narration.js +1 -1
- package/node_modules/@weavecode/harness/dist/claude/peers.js +1 -1
- package/node_modules/@weavecode/harness/dist/claude/plan.js +1 -1
- package/node_modules/@weavecode/harness/dist/claude/plugins.js +4 -4
- package/node_modules/@weavecode/harness/dist/claude/prompt-inbox.js +1 -1
- package/node_modules/@weavecode/harness/dist/claude/prompt.js +3 -3
- package/node_modules/@weavecode/harness/dist/claude/questions.js +2 -2
- package/node_modules/@weavecode/harness/dist/claude/resume.js +1 -1
- package/node_modules/@weavecode/harness/dist/claude/rewind.js +1 -1
- package/node_modules/@weavecode/harness/dist/claude/settings-gen.js +1 -1
- package/node_modules/@weavecode/harness/dist/claude/side-question.js +2 -2
- package/node_modules/@weavecode/harness/dist/claude/statusline/generator.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-cursor.js +2 -2
- package/node_modules/@weavecode/harness/dist/claude/transcript.js +7 -7
- package/node_modules/@weavecode/harness/dist/codex/assets.js +1 -1
- package/node_modules/@weavecode/harness/dist/codex/capture.js +2 -2
- package/node_modules/@weavecode/harness/dist/codex/commands.js +4 -4
- package/node_modules/@weavecode/harness/dist/codex/config.js +2 -2
- package/node_modules/@weavecode/harness/dist/codex/detect.js +1 -1
- package/node_modules/@weavecode/harness/dist/codex/event-source.js +2 -2
- package/node_modules/@weavecode/harness/dist/codex/images.js +1 -1
- package/node_modules/@weavecode/harness/dist/codex/index.js +1 -1
- package/node_modules/@weavecode/harness/dist/codex/liveness.js +1 -1
- package/node_modules/@weavecode/harness/dist/codex/mcp.js +1 -1
- package/node_modules/@weavecode/harness/dist/codex/messaging.js +2 -2
- package/node_modules/@weavecode/harness/dist/codex/narration.js +1 -1
- package/node_modules/@weavecode/harness/dist/codex/plugin-state.js +1 -1
- package/node_modules/@weavecode/harness/dist/codex/plugins.js +3 -3
- package/node_modules/@weavecode/harness/dist/codex/provision.js +1 -1
- package/node_modules/@weavecode/harness/dist/codex/questions.js +2 -2
- package/node_modules/@weavecode/harness/dist/codex/rollout.js +5 -5
- package/node_modules/@weavecode/harness/dist/codex/side-question.js +4 -4
- package/node_modules/@weavecode/harness/dist/codex/titles.js +4 -4
- package/node_modules/@weavecode/harness/dist/codex/toml.js +13 -13
- package/node_modules/@weavecode/harness/dist/codex/transcript.js +2 -2
- package/node_modules/@weavecode/harness/dist/driver.d.ts +13 -0
- package/node_modules/@weavecode/harness/dist/driver.js +1 -1
- package/node_modules/@weavecode/harness/dist/init/generated.js +2 -2
- package/node_modules/@weavecode/harness/dist/init/pipeline.js +1 -1
- package/node_modules/@weavecode/harness/dist/registry-wiring.js +1 -1
- package/node_modules/@weavecode/harness/dist/shared/install-link.js +1 -1
- package/node_modules/@weavecode/harness/dist/shared/json-cap.js +1 -1
- package/node_modules/@weavecode/harness/package.json +2 -2
- package/node_modules/@weavecode/server/dist/config/dotted.js +1 -1
- package/node_modules/@weavecode/server/dist/config/profiles.js +2 -2
- package/node_modules/@weavecode/server/dist/daemon/ai-config.js +2 -2
- package/node_modules/@weavecode/server/dist/daemon/ai-context.js +6 -6
- package/node_modules/@weavecode/server/dist/daemon/ai-routes.js +4 -4
- package/node_modules/@weavecode/server/dist/daemon/api-log.js +3 -3
- package/node_modules/@weavecode/server/dist/daemon/auth-routes.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/auto-start.js +6 -6
- package/node_modules/@weavecode/server/dist/daemon/capture-routes.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/config-routes.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/cron.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/dashboard-auth.js +2 -2
- package/node_modules/@weavecode/server/dist/daemon/dashboard-pusher.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/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/entry.js +2 -2
- package/node_modules/@weavecode/server/dist/daemon/fs-browser.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/hook-pipeline.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/hooks-routes.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/http.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/liveness.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/mcp-orchestration.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/narration-watcher.js +2 -2
- package/node_modules/@weavecode/server/dist/daemon/opener/backend-ghostty.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/opener/backend-iterm.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/opener/backend-konsole.js +2 -2
- package/node_modules/@weavecode/server/dist/daemon/opener/backend-terminal-app.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/opener/backend-wezterm.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/opener/backend-wt.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/opener/backend.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/opener/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.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/opener/wt.js +3 -3
- package/node_modules/@weavecode/server/dist/daemon/opener.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/pet-seed.d.ts +6 -0
- package/node_modules/@weavecode/server/dist/daemon/pet-seed.js +1 -0
- package/node_modules/@weavecode/server/dist/daemon/pet-window.d.ts +17 -0
- package/node_modules/@weavecode/server/dist/daemon/pet-window.js +2 -0
- package/node_modules/@weavecode/server/dist/daemon/port.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/project-files.d.ts +1 -1
- package/node_modules/@weavecode/server/dist/daemon/project-files.js +2 -2
- package/node_modules/@weavecode/server/dist/daemon/project-harnesses.js +2 -2
- package/node_modules/@weavecode/server/dist/daemon/project-updates-refresher.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/prompt-images.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/routes/hooks-admin.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/routes/market.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/routes/orchestration.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/routes/path-refs.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/routes/pets.d.ts +3 -0
- package/node_modules/@weavecode/server/dist/daemon/routes/pets.js +1 -0
- package/node_modules/@weavecode/server/dist/daemon/routes/project-files.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/routes/projects.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/routes/search.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/routes/session-control.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/routes/session-insights.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/routes/settings-statusline.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/routes/uploads.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/routes/visualizations.js +2 -1
- package/node_modules/@weavecode/server/dist/daemon/routes/watches.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/server.d.ts +2 -0
- package/node_modules/@weavecode/server/dist/daemon/server.js +8 -8
- package/node_modules/@weavecode/server/dist/daemon/session-open.d.ts +17 -0
- 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.d.ts +21 -0
- 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.d.ts +4 -1
- package/node_modules/@weavecode/server/dist/db/db.js +2 -2
- package/node_modules/@weavecode/server/dist/db/layout.js +1 -1
- package/node_modules/@weavecode/server/dist/db/paths.d.ts +4 -0
- package/node_modules/@weavecode/server/dist/db/paths.js +1 -1
- package/node_modules/@weavecode/server/dist/hooks/answer-keys.js +1 -1
- package/node_modules/@weavecode/server/dist/hooks/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.js +1 -1
- package/node_modules/@weavecode/server/dist/hooks/delivery/channels.js +1 -1
- package/node_modules/@weavecode/server/dist/hooks/delivery/keys.js +1 -1
- package/node_modules/@weavecode/server/dist/hooks/delivery/queue.js +1 -1
- package/node_modules/@weavecode/server/dist/hooks/delivery/relay.js +1 -1
- package/node_modules/@weavecode/server/dist/hooks/delivery/send.js +2 -2
- package/node_modules/@weavecode/server/dist/hooks/delivery/views.d.ts +3 -1
- package/node_modules/@weavecode/server/dist/hooks/delivery/views.js +1 -1
- package/node_modules/@weavecode/server/dist/hooks/dispatcher.js +6 -6
- package/node_modules/@weavecode/server/dist/hooks/edge-extract.js +1 -1
- package/node_modules/@weavecode/server/dist/hooks/handlers/webhook.js +1 -1
- package/node_modules/@weavecode/server/dist/hooks/headless-runner.js +2 -2
- package/node_modules/@weavecode/server/dist/hooks/inbox-socket.js +2 -2
- package/node_modules/@weavecode/server/dist/hooks/inbox-worker.js +3 -3
- package/node_modules/@weavecode/server/dist/hooks/match.js +1 -1
- package/node_modules/@weavecode/server/dist/hooks/message-deliverer.js +5 -5
- package/node_modules/@weavecode/server/dist/hooks/mirror.js +4 -4
- package/node_modules/@weavecode/server/dist/hooks/orchestration-engine.js +7 -7
- package/node_modules/@weavecode/server/dist/hooks/orchestration-graph.js +1 -1
- package/node_modules/@weavecode/server/dist/hooks/plugin-installer.js +3 -3
- package/node_modules/@weavecode/server/dist/hooks/plugin-loader.js +1 -1
- package/node_modules/@weavecode/server/dist/hooks/plugin-project-state.js +1 -1
- package/node_modules/@weavecode/server/dist/hooks/prompt-flusher.js +1 -1
- package/node_modules/@weavecode/server/dist/hooks/promptbox.js +8 -8
- package/node_modules/@weavecode/server/dist/hooks/push-notify.js +2 -2
- package/node_modules/@weavecode/server/dist/hooks/question-tracker.js +1 -1
- package/node_modules/@weavecode/server/dist/hooks/registry.js +1 -1
- package/node_modules/@weavecode/server/dist/hooks/resume-runner.js +1 -1
- package/node_modules/@weavecode/server/dist/hooks/session-purge.js +1 -1
- package/node_modules/@weavecode/server/dist/hooks/side-questions.js +1 -1
- package/node_modules/@weavecode/server/dist/hooks/synthetic-sessions.js +1 -1
- package/node_modules/@weavecode/server/dist/hooks/toolkit-scan.js +1 -1
- package/node_modules/@weavecode/server/dist/hooks/toolkit.js +5 -5
- package/node_modules/@weavecode/server/dist/hooks/watch-engine.js +1 -1
- package/node_modules/@weavecode/server/dist/index.d.ts +1 -1
- 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 +6 -0
- package/node_modules/@weavecode/server/dist/repositories/hook-events.js +8 -5
- 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.js +2 -2
- package/node_modules/@weavecode/server/dist/repositories/uploads.js +11 -11
- package/node_modules/@weavecode/server/dist/statusline/cache-sweeper.js +1 -1
- package/node_modules/@weavecode/server/dist/statusline/generator.js +1 -1
- package/node_modules/@weavecode/server/dist/statusline/manager.js +3 -3
- package/node_modules/@weavecode/server/dist/surfaces.js +1 -1
- package/node_modules/@weavecode/server/dist/watch/cache.js +1 -1
- package/node_modules/@weavecode/server/dist/watch/classifier.js +1 -1
- package/node_modules/@weavecode/server/dist/watch/plugin-mods.js +1 -1
- package/node_modules/@weavecode/server/dist/watch/sync-scheduler.js +1 -1
- package/node_modules/@weavecode/server/dist/watch/watch-service.js +1 -1
- package/node_modules/@weavecode/server/package.json +4 -4
- package/node_modules/@weavecode/server/web/dist/assets/abnfDiagram-WEYOIA3C-t5OQjhuS.js +1 -0
- package/node_modules/@weavecode/server/web/dist/assets/{arc-DH8-rYAa.js → arc-De-uH_Q9.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/architectureDiagram-ZHVYKT53-ImPclD43.js +36 -0
- package/node_modules/@weavecode/server/web/dist/assets/{blockDiagram-RJAE7QA3-pT5eO-cB.js → blockDiagram-RJAE7QA3-B5xEQs6X.js} +2 -2
- package/node_modules/@weavecode/server/web/dist/assets/{c4Diagram-XDPPPE54-DHDBDMb1.js → c4Diagram-XDPPPE54-DP8MjIgJ.js} +2 -2
- package/node_modules/@weavecode/server/web/dist/assets/channel-C0RGiobt.js +1 -0
- package/node_modules/@weavecode/server/web/dist/assets/{chunk-2E7WHVMD-CT951PH5.js → chunk-2E7WHVMD-C3UFIDyj.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{chunk-2Q5K7J3B-E5AD7_ZY.js → chunk-2Q5K7J3B-Bgw-3YfG.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{chunk-4EMNKR2T-DWz9qkcy.js → chunk-4EMNKR2T-Dy_Wq9qn.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/chunk-55XCU76K-D32C0DXX.js +1 -0
- package/node_modules/@weavecode/server/web/dist/assets/{chunk-5VM5RSS4-ci6YzbO5.js → chunk-5VM5RSS4-Dpmi-9Gi.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{chunk-JWPE2WC7-CY4mr2f4.js → chunk-JWPE2WC7-CEYXaZDX.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{chunk-VQ5W62QI-CON8zyg8.js → chunk-VQ5W62QI-A616Pgzo.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/chunk-XXDRQBXY-CnxFMLWV.js +1 -0
- package/node_modules/@weavecode/server/web/dist/assets/chunk-ZCHMQSOR-BhjCTig8.js +2 -0
- package/node_modules/@weavecode/server/web/dist/assets/{classDiagram-v2-4MYWR3UA-GiWZ9xtF.js → classDiagram-v2-4MYWR3UA-rzlq5tPv.js} +2 -2
- package/node_modules/@weavecode/server/web/dist/assets/cose-bilkent-JH36ORCC-CxWQXzj8.js +1 -0
- package/node_modules/@weavecode/server/web/dist/assets/{cynefin-EF2NZ3EQ-9B__MaRM.js → cynefin-EF2NZ3EQ-AFHjx2wU.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/cynefinDiagram-WF24UDRP-Bp_Oaf9U.js +62 -0
- package/node_modules/@weavecode/server/web/dist/assets/dagre-NK4GIZVX-7oUPIU35.js +4 -0
- package/node_modules/@weavecode/server/web/dist/assets/diagram-CBK3MWTC-D_rS_rSY.js +24 -0
- package/node_modules/@weavecode/server/web/dist/assets/diagram-I5XIIV2D-Duc_cKMb.js +24 -0
- package/node_modules/@weavecode/server/web/dist/assets/{diagram-ODIL2UCW-CckywF4W.js → diagram-ODIL2UCW-DA0XFVXm.js} +2 -2
- package/node_modules/@weavecode/server/web/dist/assets/{diagram-PFBEJUXE-Dpjlc7Wh.js → diagram-PFBEJUXE-D1U0Xhtt.js} +2 -2
- package/node_modules/@weavecode/server/web/dist/assets/diagram-RJA3I4VV-CbDFY871.js +41 -0
- package/node_modules/@weavecode/server/web/dist/assets/{diagram-TYUNFSNR-DgRJ3zL1.js → diagram-TYUNFSNR-jPg9AxQv.js} +2 -2
- package/node_modules/@weavecode/server/web/dist/assets/ebnfDiagram-V4P3TTPT-ZHfGTB0N.js +1 -0
- package/node_modules/@weavecode/server/web/dist/assets/{elk-QONTBCTQ-Ch6Gs9G9.js → elk-QONTBCTQ-C-ESJrUi.js} +3 -3
- package/node_modules/@weavecode/server/web/dist/assets/{erDiagram-KYQIGQAA-COxT-Pxb.js → erDiagram-KYQIGQAA-DGK7TeHj.js} +2 -2
- package/node_modules/@weavecode/server/web/dist/assets/{flowDiagram-IUGLLWBU-CJVWnTBa.js → flowDiagram-IUGLLWBU-CVV4rL8v.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/ganttDiagram-R7GPNTJY-CuAwNvbm.js +292 -0
- package/node_modules/@weavecode/server/web/dist/assets/gitGraphDiagram-PDYL7XHY-D_15Wtf-.js +106 -0
- package/node_modules/@weavecode/server/web/dist/assets/infoDiagram-MVDRKAX5-ClqhbrCa.js +2 -0
- package/node_modules/@weavecode/server/web/dist/assets/{ishikawaDiagram-HPEHV2GE-BNjEDIZy.js → ishikawaDiagram-HPEHV2GE-CUJ891JX.js} +2 -2
- package/node_modules/@weavecode/server/web/dist/assets/{journeyDiagram-BOSHW7O7-Cao6h91a.js → journeyDiagram-BOSHW7O7-B4skiMu-.js} +2 -2
- package/node_modules/@weavecode/server/web/dist/assets/{kanban-definition-FNSA4HC5-CXIx2CHQ.js → kanban-definition-FNSA4HC5-UNGJR_y_.js} +2 -2
- package/node_modules/@weavecode/server/web/dist/assets/linear-BEB-UwbR.js +1 -0
- package/node_modules/@weavecode/server/web/dist/assets/main-B_0jS_Gz.js +1096 -0
- package/node_modules/@weavecode/server/web/dist/assets/main-Czzlavi4.css +11 -0
- package/node_modules/@weavecode/server/web/dist/assets/{mermaid.core-D39fi_iR.js → mermaid.core-knGXJfjz.js} +4 -4
- package/node_modules/@weavecode/server/web/dist/assets/{mindmap-definition-6OY57UG3-DHqpz_AK.js → mindmap-definition-6OY57UG3-CEldbr3a.js} +2 -2
- package/node_modules/@weavecode/server/web/dist/assets/modulepreload-polyfill-B5Qt9EMX.js +1 -0
- package/node_modules/@weavecode/server/web/dist/assets/pegDiagram-ECIUJNBX-cNCkGLx3.js +1 -0
- package/node_modules/@weavecode/server/web/dist/assets/pet-DJCpIDM5.js +1 -0
- package/node_modules/@weavecode/server/web/dist/assets/pieDiagram-GNMPY74T-CfMEFiQD.js +39 -0
- package/node_modules/@weavecode/server/web/dist/assets/{quadrantDiagram-D57K4MC3-zSM6o7mB.js → quadrantDiagram-D57K4MC3-knmi2rwP.js} +4 -4
- package/node_modules/@weavecode/server/web/dist/assets/railroadDiagram-Y72NRBL7-BJ7AzhEo.js +1 -0
- package/node_modules/@weavecode/server/web/dist/assets/{requirementDiagram-EQYSW5RA-CbCLBjHf.js → requirementDiagram-EQYSW5RA-Dte2LGQM.js} +2 -2
- package/node_modules/@weavecode/server/web/dist/assets/{sankeyDiagram-SY24JHO5-BucVk6EP.js → sankeyDiagram-SY24JHO5-3noLaWgd.js} +2 -2
- package/node_modules/@weavecode/server/web/dist/assets/{sequenceDiagram-BLEHNHQU-Dg8CYEnT.js → sequenceDiagram-BLEHNHQU-CclOWTTc.js} +2 -2
- package/node_modules/@weavecode/server/web/dist/assets/sizeCapture-INFHLROL-B82sbLhA.js +1 -0
- package/node_modules/@weavecode/server/web/dist/assets/{stateDiagram-v2-A6IESKWZ-BvK2l3is.js → stateDiagram-v2-A6IESKWZ-BXfVDwSN.js} +2 -2
- package/node_modules/@weavecode/server/web/dist/assets/swimlanes-B3ENRKFQ-D4lKZaeV.js +1 -0
- package/node_modules/@weavecode/server/web/dist/assets/swimlanesDiagram-AYQRV4AK-DbdFh_d6.js +8 -0
- package/node_modules/@weavecode/server/web/dist/assets/{timeline-definition-JXYKGLGB-CadU4Qq4.js → timeline-definition-JXYKGLGB-D6H6zP5b.js} +2 -2
- package/node_modules/@weavecode/server/web/dist/assets/{usecaseDiagram-WPOLBNNX-BYuZwTDZ.js → usecaseDiagram-WPOLBNNX-D2J2bKo_.js} +2 -2
- package/node_modules/@weavecode/server/web/dist/assets/{vennDiagram-Q3Y3IDCW-C7zgxe07.js → vennDiagram-Q3Y3IDCW-pdRbIkpB.js} +2 -2
- package/node_modules/@weavecode/server/web/dist/assets/{wardleyDiagram-IVAIDKWA-DA4Otf4s.js → wardleyDiagram-IVAIDKWA-Cyd2QPMf.js} +2 -2
- package/node_modules/@weavecode/server/web/dist/assets/{xychartDiagram-4URNHDU4-Bs5YGwMU.js → xychartDiagram-4URNHDU4-Bd4BkwVM.js} +2 -2
- package/node_modules/@weavecode/server/web/dist/icons/apple-touch-icon.png +0 -0
- package/node_modules/@weavecode/server/web/dist/icons/icon-192.png +0 -0
- package/node_modules/@weavecode/server/web/dist/icons/icon-512.png +0 -0
- package/node_modules/@weavecode/server/web/dist/icons/icon-maskable-512.png +0 -0
- package/node_modules/@weavecode/server/web/dist/index.html +12 -2
- package/node_modules/@weavecode/server/web/dist/manifest.webmanifest +16 -0
- package/node_modules/@weavecode/server/web/dist/pet.html +60 -0
- package/node_modules/@weavecode/templates/dist/index.d.ts +2 -0
- package/node_modules/@weavecode/templates/dist/index.js +1 -1
- package/node_modules/@weavecode/templates/dist/resources/pets/weave-spider/pet.json +7 -0
- package/node_modules/@weavecode/templates/dist/resources/pets/weave-spider/spritesheet.png +0 -0
- package/node_modules/@weavecode/templates/dist/resources/weave-market/.claude-plugin/marketplace.json +6 -0
- package/node_modules/@weavecode/templates/dist/resources/weave-market/plugins/core-skills/weave-pet-hatcher/.claude-plugin/plugin.json +8 -0
- package/node_modules/@weavecode/templates/dist/resources/weave-market/plugins/core-skills/weave-pet-hatcher/skills/weave-pet-hatcher/SKILL.md +121 -0
- package/node_modules/@weavecode/templates/dist/resources/weave-market/plugins/core-skills/weave-pet-hatcher/skills/weave-pet-hatcher/scripts/assemble-pet.mjs +308 -0
- package/node_modules/@weavecode/templates/dist/resources/weave-market/plugins/core-skills/weave-pet-hatcher/weave.json +4 -0
- package/node_modules/@weavecode/templates/package.json +2 -2
- package/node_modules/selfsigned/node_modules/@peculiar/x509/node_modules/tslib/README.md +3 -8
- package/node_modules/selfsigned/node_modules/@peculiar/x509/node_modules/tslib/package.json +1 -1
- package/node_modules/selfsigned/node_modules/@peculiar/x509/node_modules/tslib/tslib.d.ts +4 -2
- package/node_modules/selfsigned/node_modules/@peculiar/x509/node_modules/tslib/tslib.es6.js +10 -1
- package/node_modules/selfsigned/node_modules/@peculiar/x509/node_modules/tslib/tslib.es6.mjs +10 -1
- package/node_modules/selfsigned/node_modules/@peculiar/x509/node_modules/tslib/tslib.js +10 -1
- package/node_modules/selfsigned/node_modules/pkijs/node_modules/tslib/README.md +3 -8
- package/node_modules/selfsigned/node_modules/pkijs/node_modules/tslib/package.json +1 -1
- package/node_modules/selfsigned/node_modules/pkijs/node_modules/tslib/tslib.d.ts +4 -2
- package/node_modules/selfsigned/node_modules/pkijs/node_modules/tslib/tslib.es6.js +10 -1
- package/node_modules/selfsigned/node_modules/pkijs/node_modules/tslib/tslib.es6.mjs +10 -1
- package/node_modules/selfsigned/node_modules/pkijs/node_modules/tslib/tslib.js +10 -1
- package/package.json +11 -7
- package/scripts/preinstall.mjs +70 -0
- package/node_modules/@weavecode/server/web/dist/assets/abnfDiagram-WEYOIA3C-CbIFQh0R.js +0 -1
- package/node_modules/@weavecode/server/web/dist/assets/architectureDiagram-ZHVYKT53-qnv6S0sc.js +0 -36
- package/node_modules/@weavecode/server/web/dist/assets/channel-BHPeeuzN.js +0 -1
- package/node_modules/@weavecode/server/web/dist/assets/chunk-55XCU76K-D-SgWD8w.js +0 -1
- package/node_modules/@weavecode/server/web/dist/assets/chunk-XXDRQBXY-DXXXZ4pW.js +0 -1
- package/node_modules/@weavecode/server/web/dist/assets/chunk-ZCHMQSOR-CukvPvkM.js +0 -2
- package/node_modules/@weavecode/server/web/dist/assets/cose-bilkent-JH36ORCC-D7aJ-akq.js +0 -1
- package/node_modules/@weavecode/server/web/dist/assets/cynefinDiagram-WF24UDRP-B2ujZh2k.js +0 -62
- package/node_modules/@weavecode/server/web/dist/assets/dagre-NK4GIZVX-nHaB6IWf.js +0 -4
- package/node_modules/@weavecode/server/web/dist/assets/diagram-CBK3MWTC-xKfjDvgr.js +0 -24
- package/node_modules/@weavecode/server/web/dist/assets/diagram-I5XIIV2D-BHT2-5mY.js +0 -24
- package/node_modules/@weavecode/server/web/dist/assets/diagram-RJA3I4VV-M6WznOaW.js +0 -41
- package/node_modules/@weavecode/server/web/dist/assets/ebnfDiagram-V4P3TTPT-BzzVN__a.js +0 -1
- package/node_modules/@weavecode/server/web/dist/assets/ganttDiagram-R7GPNTJY-BkRpWPUl.js +0 -292
- package/node_modules/@weavecode/server/web/dist/assets/gitGraphDiagram-PDYL7XHY-Ba8BJcvZ.js +0 -106
- package/node_modules/@weavecode/server/web/dist/assets/index-CtifxEiF.css +0 -11
- package/node_modules/@weavecode/server/web/dist/assets/index-FwH9INgS.js +0 -1090
- package/node_modules/@weavecode/server/web/dist/assets/infoDiagram-MVDRKAX5-HTQ5FUNK.js +0 -2
- package/node_modules/@weavecode/server/web/dist/assets/linear-65WmlvQb.js +0 -1
- package/node_modules/@weavecode/server/web/dist/assets/pegDiagram-ECIUJNBX-Cpy1nsER.js +0 -1
- package/node_modules/@weavecode/server/web/dist/assets/pieDiagram-GNMPY74T-B1IyNqzr.js +0 -39
- package/node_modules/@weavecode/server/web/dist/assets/railroadDiagram-Y72NRBL7-oM4XJIwA.js +0 -1
- package/node_modules/@weavecode/server/web/dist/assets/sizeCapture-INFHLROL-C51zb7Oc.js +0 -1
- package/node_modules/@weavecode/server/web/dist/assets/swimlanes-B3ENRKFQ-Ds7QOfXW.js +0 -1
- package/node_modules/@weavecode/server/web/dist/assets/swimlanesDiagram-AYQRV4AK-ByBF02UJ.js +0 -8
|
@@ -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")}
|
|
@@ -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,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@weavecode/harness",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.8",
|
|
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.8",
|
|
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}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import
|
|
2
|
-
`,"utf8"),await
|
|
1
|
+
import s from"node:fs/promises";import p from"node:path";import{randomUUID as h}from"node:crypto";export function profileKeyOf(t,n){return(t==="project"||t==="projectLocal")&&n!==null?`${t}@p${n}`:t}const I=20;function l(t,n){return p.join(t,n)}function S(t,n){return p.join(l(t,n),"profiles.json")}function w(t,n,e,r){return p.join(l(t,n),`${e}-${r}.json`)}function m(t,n){return p.join(l(t,n),"backups")}function $(t,n,e,r){return p.join(m(t,n),`${e}-${r}.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(p.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 f(t,n,e,r){const a=await j(t,n),c=v(a,e);return r(c),a[e]=c,await x(S(t,n),a),c}function d(){return new Date().toISOString()}export async function writeSnapshot(t,n,e,r,a){await x(w(t,n,e,r),a)}export async function readSnapshot(t,n,e,r){return y(w(t,n,e,r))}export async function createProfile(t,n,e,r,a){const c={id:h().slice(0,8),name:r,createdAt:d(),updatedAt:d()};return await writeSnapshot(t,n,e,c.id,a),await f(t,n,e,i=>{i.profiles.push(c)}),c}export async function saveProfile(t,n,e,r,a){await writeSnapshot(t,n,e,r,a),await f(t,n,e,c=>{const i=c.profiles.find(o=>o.id===r);i&&(i.updatedAt=d())})}export async function renameProfile(t,n,e,r,a){await f(t,n,e,c=>{const i=c.profiles.find(o=>o.id===r);i&&(i.name=a,i.updatedAt=d())})}export async function removeProfile(t,n,e,r){await f(t,n,e,a=>{a.profiles=a.profiles.filter(c=>c.id!==r),a.activeId===r&&(a.activeId=null)}),await s.rm(w(t,n,e,r),{force:!0})}export async function setActive(t,n,e,r){await f(t,n,e,a=>{a.activeId=r})}export const LASTSEEN_ID="_lastseen";export async function baselineSnapshot(t,n,e,r){if(r.activeId){const a=await readSnapshot(t,n,e,r.activeId);if(a)return a}return readSnapshot(t,n,e,LASTSEEN_ID)}export async function syncBaseline(t,n,e,r,a){r.activeId&&await saveProfile(t,n,e,r.activeId,a),await writeSnapshot(t,n,e,LASTSEEN_ID,a)}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,r){const a=A(new Date),c=new Set((await s.readdir(m(t,n)).catch(()=>[])).filter(u=>u.startsWith(`${e}-${a}`)));let i=a;for(let u=2;c.has(`${e}-${i}.json`);u++)i=`${a}-${u}`;await x($(t,n,e,i),r);const o=(await listBackups(t,n,e)).slice(I);for(const u of o)await s.rm($(t,n,e,u),{force:!0})}export async function listBackups(t,n,e){const r=`${e}-`,a=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(r)&&i.endsWith(".json")).map(i=>i.slice(r.length,-5)).sort((i,o)=>a(i)-a(o)).reverse()}export async function readBackup(t,n,e,r){return/^[A-Za-z0-9-]+$/.test(r)?y($(t,n,e,r)):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 +1 @@
|
|
|
1
|
-
import{homedir as
|
|
1
|
+
import{homedir as J}from"node:os";import{access as K}from"node:fs/promises";import{isHarness as k}from"@weavecode/core";import{configSurfaceFor as j}from"../surfaces.js";import{baselineSnapshot as N,createProfile as E,LASTSEEN_ID as C,listBackups as L,listProfiles as m,profileKeyOf as $,readBackup as F,readSnapshot as A,removeProfile as D,renameProfile as V,pushBackup as S,saveProfile as M,setActive as R,syncBaseline as O,writeSnapshot as G}from"../config/profiles.js";import{readBody as H,sendJson as n}from"./http.js";import{getHarnessConfigDir as _}from"../db/paths.js";const z=["user","project","projectLocal","global"];function u(f,t){return $(f,t.projectId)}function T(f){return typeof f=="string"&&z.includes(f)?f:null}function g(f,t){return f.serializeRaw(t)}function W(f,t,p){const h=f.files(p).find(y=>y.id===t);return h?h.path(p):""}async function U(f){try{const t=JSON.parse(await H(f));return typeof t=="object"&&t!==null&&!Array.isArray(t)?t:null}catch{return null}}async function Q(f){if(!f)return!1;try{return await K(f),!0}catch{return!1}}async function x(f,t,p,h,y){const s=u(h,y),o=W(p,h,y),e=await p.read(h,y),r=g(p,e),c=await m(f,t,s),i=await N(f,t,s,c);i||await G(f,t,s,C,e);const a=i?g(p,i):g(p,e);return{harness:t,file:h,path:o,exists:await Q(o),values:e,managedKeys:p.managedKeys(e),managedEntries:p.managedEntries(e),profiles:c.profiles,activeId:c.activeId,liveText:r,activeText:a,drifted:a!==r,backups:await L(f,t,s)}}function P(f,t,p){let h=null,y=null;if(t==="project"||t==="projectLocal"){const s=Number(p);if(!Number.isInteger(s)||s<=0)return"\u9700\u8981 projectId";const o=f.projects.getById(s);if(!o)return"\u9879\u76EE\u4E0D\u5B58\u5728";h=o.path,y=s}return{projectPath:h,projectId:y,homedir:J()}}export async function handleConfigRoutes(f,t,p,h,y){if(!h.startsWith("/harness-config"))return!1;const s=_();if(h==="/harness-config/catalog"&&f.method==="GET"){const o=y.searchParams.get("harness");if(!k(o))return n(t,400,{error:"Unknown harness"}),!0;const e=j(o);if(!e)return n(t,200,{supported:!1}),!0;const r=T(y.searchParams.get("file"))??"user",c={projectPath:null,projectId:null,homedir:J()},i=e.catalog(r);return n(t,200,{supported:!0,harness:o,file:r,rawFormat:e.rawFormat,files:e.files(c).map(a=>({id:a.id,profiles:a.profiles})),groups:i.groups,keys:i.keys,envVars:i.envVars}),!0}if(h==="/harness-config"&&f.method==="GET"){const o=y.searchParams.get("harness"),e=T(y.searchParams.get("file"));if(!k(o)||!e)return n(t,400,{error:"Unknown harness or file"}),!0;const r=j(o);if(!r)return n(t,400,{error:"\u914D\u7F6E\u9762\u672A\u5B9E\u73B0"}),!0;const c=P(p,e,y.searchParams.get("projectId"));return typeof c=="string"?(n(t,400,{error:c}),!0):(n(t,200,await x(s,o,r,e,c)),!0)}if(h==="/harness-config/values"&&f.method==="PUT"){const o=await U(f);if(!o)return n(t,400,{error:"Invalid JSON body"}),!0;const e=o.harness,r=T(o.file);if(!k(e)||!r)return n(t,400,{error:"Unknown harness or file"}),!0;const c=j(e);if(!c)return n(t,400,{error:"\u914D\u7F6E\u9762\u672A\u5B9E\u73B0"}),!0;const i=P(p,r,o.projectId);if(typeof i=="string")return n(t,400,{error:i}),!0;const a=o.values;if(typeof a!="object"||a===null||Array.isArray(a))return n(t,400,{error:'Missing "values"'}),!0;try{const l=await c.read(r,i);await S(s,e,u(r,i),l),await c.write(r,i,a);const b=await m(s,e,u(r,i));await O(s,e,u(r,i),b,await c.read(r,i))}catch(l){return n(t,400,{error:l.message}),!0}return n(t,200,await x(s,e,c,r,i)),!0}if(h==="/harness-config/raw"&&f.method==="PUT"){const o=await U(f);if(!o)return n(t,400,{error:"Invalid JSON body"}),!0;const e=o.harness,r=T(o.file);if(!k(e)||!r)return n(t,400,{error:"Unknown harness or file"}),!0;const c=j(e);if(!c)return n(t,400,{error:"\u914D\u7F6E\u9762\u672A\u5B9E\u73B0"}),!0;const i=P(p,r,o.projectId);if(typeof i=="string")return n(t,400,{error:i}),!0;let a;try{a=c.parseRaw(String(o.text??""))}catch(l){return n(t,400,{error:`\u4E0D\u662F\u5408\u6CD5${c.rawFormat==="toml"?" TOML":" JSON"}\uFF1A${l.message}`}),!0}try{const l=await c.read(r,i);await S(s,e,u(r,i),l),await c.write(r,i,a);const b=await m(s,e,u(r,i));await O(s,e,u(r,i),b,await c.read(r,i))}catch(l){return n(t,400,{error:l.message}),!0}return n(t,200,await x(s,e,c,r,i)),!0}if(h==="/harness-config/profile"&&f.method==="POST"){const o=await U(f);if(!o)return n(t,400,{error:"Invalid JSON body"}),!0;const e=o.harness,r=T(o.file),c=o.action;if(!k(e)||!r||typeof c!="string")return n(t,400,{error:"Unknown harness, file or action"}),!0;const i=j(e);if(!i)return n(t,400,{error:"\u914D\u7F6E\u9762\u672A\u5B9E\u73B0"}),!0;const a=P(p,r,o.projectId);if(typeof a=="string")return n(t,400,{error:a}),!0;const l=typeof o.id=="string"?o.id:"",b=typeof o.name=="string"?o.name.trim():"",B=typeof o.values=="object"&&o.values!==null&&!Array.isArray(o.values)?o.values:null;switch(c){case"list":{const d=await m(s,e,u(r,a));return n(t,200,d),!0}case"create":{const d=await m(s,e,u(r,a)),w=await E(s,e,u(r,a),b||`\u914D\u7F6E ${d.profiles.length+1}`,B??await i.read(r,a));return n(t,200,{profile:w,state:await m(s,e,u(r,a))}),!0}case"save":return(await m(s,e,u(r,a))).profiles.some(w=>w.id===l)?(await M(s,e,u(r,a),l,B??await i.read(r,a)),n(t,200,await m(s,e,u(r,a))),!0):(n(t,404,{error:"\u914D\u7F6E\u4E0D\u5B58\u5728"}),!0);case"compare":{const d=o.target;if(d==="live")return n(t,200,{text:g(i,await i.read(r,a))}),!0;if(d==="backup"){const v=typeof o.backupId=="string"?o.backupId:"",I=await F(s,e,u(r,a),v);return I?(n(t,200,{text:g(i,I)}),!0):(n(t,404,{error:"\u5907\u4EFD\u4E0D\u5B58\u5728"}),!0)}const w=await A(s,e,u(r,a),l);return w?(n(t,200,{text:g(i,w)}),!0):(n(t,404,{error:"\u914D\u7F6E\u4E0D\u5B58\u5728"}),!0)}case"duplicate":{const d=await A(s,e,u(r,a),l);if(!d)return n(t,404,{error:"\u914D\u7F6E\u4E0D\u5B58\u5728"}),!0;const w=await m(s,e,u(r,a)),v=await E(s,e,u(r,a),b||`\u914D\u7F6E ${w.profiles.length+1}`,d);return n(t,200,{profile:v,state:await m(s,e,u(r,a))}),!0}case"rename":return b?(await V(s,e,u(r,a),l,b),n(t,200,await m(s,e,u(r,a))),!0):(n(t,400,{error:"\u7F3A\u5C11\u540D\u79F0"}),!0);case"remove":return await D(s,e,u(r,a),l),n(t,200,await m(s,e,u(r,a))),!0;case"activate":{const d=await A(s,e,u(r,a),l);if(!d)return n(t,404,{error:"\u914D\u7F6E\u4E0D\u5B58\u5728"}),!0;const w=await i.read(r,a);if(o.confirm!==!0)return n(t,200,{requiresConfirm:!0,liveText:g(i,w),profileText:g(i,d)}),!0;try{await S(s,e,u(r,a),w),await i.write(r,a,d),await R(s,e,u(r,a),l)}catch(v){return n(t,400,{error:v.message}),!0}return n(t,200,await x(s,e,i,r,a)),!0}case"acceptDrift":{const d=await m(s,e,u(r,a)),w=await N(s,e,u(r,a),d);return w&&await S(s,e,u(r,a),w),await O(s,e,u(r,a),d,await i.read(r,a)),n(t,200,await x(s,e,i,r,a)),!0}case"restoreBaseline":{const d=await m(s,e,u(r,a)),w=await N(s,e,u(r,a),d);if(!w)return n(t,404,{error:"\u6CA1\u6709\u53EF\u6062\u590D\u7684\u57FA\u7EBF"}),!0;const v=await i.read(r,a);if(o.confirm!==!0)return n(t,200,{requiresConfirm:!0,liveText:g(i,v),baselineText:g(i,w)}),!0;try{await S(s,e,u(r,a),v),await i.write(r,a,w),await O(s,e,u(r,a),d,w)}catch(I){return n(t,400,{error:I.message}),!0}return n(t,200,await x(s,e,i,r,a)),!0}case"restoreBackup":{const d=typeof o.backupId=="string"?o.backupId:"",w=await F(s,e,u(r,a),d);if(!w)return n(t,404,{error:"\u5907\u4EFD\u4E0D\u5B58\u5728"}),!0;const v=await i.read(r,a);if(o.confirm!==!0)return n(t,200,{requiresConfirm:!0,liveText:g(i,v),backupText:g(i,w)}),!0;try{await S(s,e,u(r,a),v),await i.write(r,a,w);const I=await m(s,e,u(r,a));await O(s,e,u(r,a),I,w)}catch(I){return n(t,400,{error:I.message}),!0}return n(t,200,await x(s,e,i,r,a)),!0}default:return n(t,400,{error:`\u672A\u77E5\u52A8\u4F5C\uFF1A${c}`}),!0}}if(h==="/harness-config/models"&&f.method==="POST"){const o=await U(f);if(!o)return n(t,400,{error:"Invalid JSON body"}),!0;const e=o.harness,r=T(o.file)??"user";if(!k(e))return n(t,400,{error:"Unknown harness"}),!0;const c=j(e);if(!c)return n(t,400,{error:"\u914D\u7F6E\u9762\u672A\u5B9E\u73B0"}),!0;const i=P(p,r,o.projectId);if(typeof i=="string")return n(t,400,{error:i}),!0;try{const a=await c.read(r,i),l=await c.models({values:a,file:r,homedir:i.homedir,baseUrl:typeof o.baseUrl=="string"?o.baseUrl:null,apiKey:typeof o.apiKey=="string"?o.apiKey:null,authToken:typeof o.authToken=="string"?o.authToken:null});n(t,200,l)}catch(a){n(t,502,{error:a.message})}return!0}if(h==="/harness-config/preview"&&f.method==="POST"){const o=await U(f);if(!o)return n(t,400,{error:"Invalid JSON body"}),!0;const e=o.harness,r=T(o.file);if(!k(e)||!r)return n(t,400,{error:"Unknown harness or file"}),!0;const c=j(e);if(!c)return n(t,400,{error:"\u914D\u7F6E\u9762\u672A\u5B9E\u73B0"}),!0;const i=P(p,r,o.projectId);if(typeof i=="string")return n(t,400,{error:i}),!0;const a=o.values;if(typeof a!="object"||a===null||Array.isArray(a))return n(t,400,{error:'Missing "values"'}),!0;try{const l=await c.read(r,i);n(t,200,{before:g(c,l),after:g(c,a)})}catch(l){n(t,400,{error:l.message})}return!0}return n(t,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())}`}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import{createHmac as d,randomBytes as
|
|
2
|
-
`,{encoding:"utf8",mode:384}),P(e,
|
|
1
|
+
import{createHmac as d,randomBytes as s,randomInt as m,scryptSync as o,timingSafeEqual as w}from"node:crypto";import{chmodSync as g,existsSync as p,mkdirSync as a,readFileSync as y,renameSync as P,rmSync as x,writeFileSync as c}from"node:fs";import h from"node:path";import{getAuthPath as k,getInitialPasswordPath as A}from"../db/paths.js";export const SESSION_COOKIE="weave_session",LOCAL_TOKEN_HEADER="x-weave-local",SESSION_TTL_MS=720*60*60*1e3;const u=64,T=16,l="abcdefghjkmnpqrstuvwxyz23456789";export function generatePassword(){const r=()=>Array.from({length:4},()=>l[m(l.length)]??"a").join("");return[r(),r(),r(),r()].join("-")}function f(r,t){const e=s(T).toString("hex");return{algo:"scrypt",salt:e,hash:o(r,e,u).toString("hex"),updatedAt:t}}function i(r,t){const e=Buffer.from(r),n=Buffer.from(t);return e.length===n.length&&w(e,n)}export function readCookie(r,t){if(r)for(const e of r.split(";")){const n=e.indexOf("=");if(!(n<0)&&e.slice(0,n).trim()===t)return e.slice(n+1).trim()}}export function sessionCookie(r){return`${SESSION_COOKIE}=${r}; HttpOnly; SameSite=Lax; Path=/; Max-Age=${Math.floor(SESSION_TTL_MS/1e3)}`}export function clearedSessionCookie(){return`${SESSION_COOKIE}=; HttpOnly; SameSite=Lax; Path=/; Max-Age=0`}function O(r){if(!p(r))return null;try{const t=JSON.parse(y(r,"utf8"));return t?.version!==1||typeof t.sessionSecret!="string"||typeof t.localToken!="string"?null:{version:1,password:t.password??null,sessionSecret:t.sessionSecret,localToken:t.localToken,createdAt:typeof t.createdAt=="string"?t.createdAt:new Date().toISOString()}}catch{return null}}function S(r,t){a(h.dirname(r),{recursive:!0});const e=`${r}.tmp`;c(e,`${JSON.stringify(t,null,2)}
|
|
2
|
+
`,{encoding:"utf8",mode:384}),P(e,r);try{g(r,384)}catch{}}export class AuthService{file;authPath;markerPath;now;initialPassword;constructor(t={}){this.authPath=t.authPath??k(),this.markerPath=t.initialPasswordPath??A(),this.now=t.now??Date.now;const e=O(this.authPath);if(e){this.file=e,this.initialPassword=null;return}const n=generatePassword();this.file={version:1,password:f(n,this.nowIso()),sessionSecret:s(32).toString("hex"),localToken:s(24).toString("hex"),createdAt:this.nowIso()},S(this.authPath,this.file),this.writeMarker(n),this.initialPassword=n}isPasswordSet(){return this.file.password!==null}verifyPassword(t){const e=this.file.password;return e?i(o(t,e.salt,u).toString("hex"),e.hash):!1}setPassword(t){this.file={...this.file,password:f(t,this.nowIso()),sessionSecret:s(32).toString("hex")},S(this.authPath,this.file),x(this.markerPath,{force:!0})}getLocalToken(){return this.file.localToken}verifyLocalToken(t){return typeof t=="string"&&t!==""&&i(t,this.file.localToken)}issueSession(){const t=this.now()+SESSION_TTL_MS;return`${t}.${this.sign(t)}`}verifySession(t){if(!t)return!1;const e=t.indexOf(".");if(e<=0)return!1;const n=Number(t.slice(0,e));return!Number.isFinite(n)||n<=this.now()?!1:i(t.slice(e+1),this.sign(n))}isAuthenticated(t){return this.isLocallyTrusted(t)?!0:this.verifySession(readCookie(t.cookie,SESSION_COOKIE))}isLocallyTrusted(t){const e=t[LOCAL_TOKEN_HEADER];return this.verifyLocalToken(typeof e=="string"?e:void 0)}sign(t){return d("sha256",this.file.sessionSecret).update(`weave-session:${t}`).digest("hex")}nowIso(){return new Date(this.now()).toISOString()}writeMarker(t){a(h.dirname(this.markerPath),{recursive:!0}),c(this.markerPath,`${t}
|
|
3
3
|
`,{encoding:"utf8",mode:384})}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{RATE_BUCKET_MS as s}from"../hooks/dashboard-rate.js";export const DASHBOARD_WINDOW_MS=36e5;const
|
|
1
|
+
import{RATE_BUCKET_MS as s}from"../hooks/dashboard-rate.js";export const DASHBOARD_WINDOW_MS=36e5;const b=60,d=1e3,h=6e4;export function startDashboardPusher(t){let o=!1,i={projects:0,sessions:0},a=0;const r=()=>{i={projects:t.projects.list().length,sessions:t.sessions.countAll()},a=Date.now()},l=()=>({...i,...t.rate.totals}),m=()=>{queueMicrotask(()=>{const n=Date.now(),c=DASHBOARD_WINDOW_MS/s,u=Math.floor(n/s)*s-(c-1)*s,f=t.projects.list().map(e=>e.id);t.rate.isSeeded||(t.rate.seed(t.events.seriesBySecond(f,new Date(u).toISOString())),t.rate.seedTotals(t.events.countAll(),t.events.countSince(f,new Date(new Date(n).setHours(0,0,0,0)).toISOString())),r()),Date.now()-a>h&&r();const D=new Date(n).toISOString();t.bus.emit({kind:"dashboard.totals",at:D,totals:l()});for(let e=0;e<c;e+=b){const E=Math.min(b,c-e),_=u+e*s,I=t.rate.bucketsFor(_,E);t.bus.emit({kind:"dashboard.series",at:D,series:I.map((A,M)=>({at:new Date(_+M*s).toISOString().slice(0,19),n:A}))})}})},w=t.bus.subscribe(n=>{n.kind==="event.ingested"&&(o=!0)}),S=setInterval(()=>{o&&(o=!1,Date.now()-a>h&&r(),t.bus.emit({kind:"dashboard.delta",at:new Date().toISOString(),series:t.rate.recentBuckets(12),totals:l()}))},d);return S.unref?.(),{attach:m,stop:()=>{w(),clearInterval(S)}}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{EventEmitter as
|
|
1
|
+
import{EventEmitter as t}from"node:events";export class DataBus{emitter=new t;subscribers=0;constructor(){this.emitter.setMaxListeners(100)}emit(s){this.emitter.emit("change",s)}hasSubscribers(){return this.subscribers>0}subscribe(s){return this.subscribers+=1,this.emitter.on("change",s),()=>{this.subscribers-=1,this.emitter.off("change",s)}}}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{chmodSync as
|
|
2
|
-
`,{encoding:"utf8",mode:384}),
|
|
1
|
+
import{chmodSync as o,existsSync as c,mkdirSync as i,readFileSync as u,renameSync as y,rmSync as m,writeFileSync as s}from"node:fs";import p from"node:path";import{getDecisionKeyPath as t}from"../db/paths.js";export function readDecisionKey(n=t()){if(!c(n))return null;try{const r=JSON.parse(u(n,"utf8"));return typeof r.apiKey=="string"&&r.apiKey!==""?r.apiKey:null}catch{return null}}export function writeDecisionKey(n,r=t()){if(n===null||n===""){m(r,{force:!0});return}i(p.dirname(r),{recursive:!0});const e=`${r}.tmp`;s(e,`${JSON.stringify({apiKey:n},null,2)}
|
|
2
|
+
`,{encoding:"utf8",mode:384}),y(e,r);try{o(r,384)}catch{}}export function hasDecisionKey(n=t()){return readDecisionKey(n)!==null}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import ws from"node:http";import{openDatabase as Ss}from"../db/db.js";import{ProjectRepository as gs}from"../repositories/projects.js";import{HookEventRepository as bs}from"../repositories/hook-events.js";import{LibraryRepository as vs}from"../repositories/libraries.js";import{HookRuleRepository as ns}from"../repositories/hook-rules.js";import{HookDispatchRepository as Rs}from"../repositories/hook-dispatches.js";import{PluginStateRepository as I}from"../repositories/plugin-states.js";import{SessionRepository as ys}from"../repositories/sessions.js";import{createRuntimeRegistry as ks}from"@weavecode/harness";import{TERMINAL_LOCATOR_ENV_KEYS as Es,isHarness as N}from"@weavecode/core";import{messagingSurfaceFor as Ds,narrationSurfaceFor as Ps}from"../surfaces.js";import{syntheticSessionIds as Is}from"../hooks/synthetic-sessions.js";import{createEdgeExtract as Ts}from"../hooks/edge-extract.js";import{HookRuleRegistry as Os}from"../hooks/registry.js";import{HookDispatcher as As}from"../hooks/dispatcher.js";import{HookEventBus as Cs}from"../hooks/bus.js";import{ResumeRunner as Fs}from"../hooks/resume-runner.js";import{HeadlessRunner as Hs}from"../hooks/headless-runner.js";import{MessageDeliverer as _s}from"../hooks/message-deliverer.js";import{QuestionTracker as $s}from"../hooks/question-tracker.js";import{SideQuestionRepository as js}from"../repositories/side-questions.js";import{claimSideAnswer as Bs}from"../hooks/side-questions.js";import{DashboardRateCache as Ms}from"../hooks/dashboard-rate.js";import{startDashboardPusher as Ls}from"./dashboard-pusher.js";import{startPromptFlusher as Us}from"../hooks/prompt-flusher.js";import{SessionWatchRepository as Ns}from"../repositories/session-watches.js";import{PushSubscriptionRepository as Ws}from"../repositories/push-subscriptions.js";import{UploadRepository as qs}from"../repositories/uploads.js";import{defaultUploadSessions as xs}from"./upload-sessions.js";import{PushNotifier as Qs}from"../hooks/push-notify.js";import{OrchestrationRepository as Ks,OrchestrationRunRepository as Gs}from"../repositories/orchestrations.js";import{WatchEngine as Js}from"../hooks/watch-engine.js";import{OrchestrationEngine as Vs,createForkConditionJudge as Ys}from"../hooks/orchestration-engine.js";import{createDecisionConditionJudge as zs}from"../hooks/decision-judge.js";import{readDecisionKey as Xs}from"./decision-config.js";import{openSessionTerminal as Zs}from"./session-open.js";import{loadAllPlugins as se}from"../hooks/plugin-loader.js";import{ensureBuiltinMarket as ee,builtinMarketDir as oe}from"../market/builtin.js";import{ToolkitService as te}from"../hooks/toolkit.js";import{startSessionSweeper as re}from"../hooks/session-sweeper.js";import{startStatuslineCacheSweeper as ne}from"../statusline/cache-sweeper.js";import{readStatuslineFacts as ie}from"../statusline/manager.js";import{WatchService as ae}from"../watch/watch-service.js";import{weaveRequestHandler as le}from"./server.js";import{startTlsServer as pe}from"./tls.js";import{DataBus as ce}from"./data-bus.js";import{TerminalTopologyRefresher as me}from"./terminal-topology-refresher.js";import{SnapshotRefresher as W}from"./snapshot-refresher.js";import{SessionProbe as ue,dbModelFactResolver as de,dbTranscriptPathResolver as fe}from"./session-probe.js";import{NarrationWatcher as he}from"./narration-watcher.js";import{InflightCountsRefresher as we}from"./inflight-counts-refresher.js";import{ProjectUpdatesRefresher as Se}from"./project-updates-refresher.js";import{FingerprintCache as ge}from"../install/fingerprint.js";import{detectProjectUpdateCounts as be}from"../install/updates.js";import{pidAliveOf as ve}from"./claude-liveness.js";import{combinedLivenessOf as R}from"./liveness.js";import{promptTerminalChannel as is,readTerminalCounts as Re}from"./opener.js";import{wireHookFilePipeline as ye}from"./hook-pipeline.js";import{DEFAULT_PORT as q,DAEMON_HOST as ke,DEFAULT_BIND_HOST as Ee,findFreePort as De,isPortFree as Pe}from"./port.js";import{writeDaemonState as as}from"./state.js";import{ensureDataLayout as Ie}from"../db/layout.js";import{pruneFileIndexes as Te}from"./project-files.js";import{pruneInstallTmp as Oe}from"../hooks/plugin-installer.js";import{readDaemonSettingsSync as y,setDaemonSettingsDb as Ae,DEFAULT_SERVER_SETTINGS as Ce}from"./settings.js";import{AuthService as Fe}from"./dashboard-auth.js";import{resolveStaticDir as He}from"./static.js";const _e="CLAUDE_CODE_CHILD_SESSION"in process.env;delete process.env.CLAUDE_CODE_CHILD_SESSION;for(const c of Es)delete process.env[c];async function $e(){Ie();const c=await Pe(q)?q:await De(q+1);as({pid:process.pid,port:c,startedAt:new Date().toISOString()});const t=Ss();Ae(t);const f=y().server?.bindHost??Ee,T=y().server?.tlsPort??Ce.tlsPort,O=new Fe;O.initialPassword&&console.log(`[dev] initial dashboard password: ${O.initialPassword}`);const r=new gs(t);Te(r.list().map(s=>s.id)),Oe();const a=new bs(t),u=new vs(t),h=ks(),ls=h.byCapability("events").flatMap(s=>s.events??[]),k=new Os(new ns(t)),E=new Rs(t),o=new ys(t),n=new Cs;{const s=await ee({libraries:u});s.error?console.error(`[dev] builtin market unavailable: ${s.error}`):s.changed&&console.log(`[dev] builtin market ${s.form==="link"?"linked":"copied"} -> ${oe(u.dataRoot)}`)}const{loader:m}=await se({rules:new ns(t),registry:k,states:new I(t),bus:n,libraries:u},r.list());{const s=m.list().filter(e=>e.status==="rejected");console.log(`[dev] plugins loaded: ${m.list().length} (rejected: ${s.length})`);for(const e of s)console.log(`[dev] rejected ${e.id}: ${e.error}`)}m.watchRoots();const x={list:()=>m.list(),setPluginEnabled:(s,e)=>m.setPluginEnabled(s,e),reloadAll:()=>m.reloadAll(),rescan:()=>m.rescanRoots(r.list(),u)},ps=new te({projects:r,states:new I(t),plugins:x,libraries:u}),A={run:null},Q=new As({registry:k,dispatches:E,bus:n,projects:r,sessions:o,plugins:m,pluginStates:new I(t),classify:s=>A.run?A.run(s):Promise.resolve(null),sessionTitleOf:async s=>{const e=a.listBySession(s,1).at(-1)?.source;return N(e)?h.get(e)?.titles?.sessionTitleOf(s)??null:null}}),D=new Hs,cs=new Fs({dispatches:E,sessions:o,projects:r,bus:n,resumeSpec:h.get("claude")?.resume,headless:D}),p=new _s({sessions:o,projects:r,hookEvents:a,bus:n,headless:D,terminal:is(()=>y().terminal),blockedByQuestion:s=>w.get(s)!=null,livenessOf:R,sideAnswerStore:{answerById:(s,e,i)=>{$.answerById(s,e,i)}}});Us(p);const C=new Ns(t),F=new Js({watches:C,deliverer:p,sessions:o,bus:n,livenessOf:R}),K=new Ws(t),H=new qs(t),ms=new Qs({subscriptions:K,sessions:o,bus:n}),_=new Ks(t),G=new Gs(t),d=new ue(fe(a),de(a,s=>o.getBySessionId(s)?.harness??null)),J=new he(n,s=>Ps(N(s)?s:"claude"),s=>d.transcriptPathOf(s),s=>o.livenessRowOf(s)?.harness??null);J.start();const w=new $s({sessions:o,hookEvents:a,onPending:s=>{n.emit({kind:"question.pending",sessionId:s.sessionId,harness:s.harness,count:s.questions.length,at:s.at})},interruptedAt:s=>{const e=o.getBySessionId(s);return e?d.interruptedAt(s,o.lastMainEventAtOf(s)??e.lastSeenAt):null}});w.seedFromDb();const $=new js(t),V=new Ms,j=Ls({rate:V,events:a,sessions:o,projects:r,bus:n}),Y={repo:$,bus:n,settle:s=>{p.interrupt(s.sessionId)}},z=new ae(r);z.start();const l=new ce,S=new me(async()=>({counts:await Re(r.list()),terminals:await p.sessionTerminals()}),l,{shouldRun:()=>l.hasSubscribers(),graceMs:1e4});S.start();const B=new W(()=>{const s=R(),e={};for(const i of o.listWithCounts()){const v=ve(i,s);v!==null&&(e[i.sessionId]=v)}return{alive:e}},l,{key:"sessionLiveness",shouldRun:()=>l.hasSubscribers()});B.start();const M=new W(()=>{const s={};for(const e of o.listWithCounts()){if(e.turnOpen!==!0)continue;const i=d.interruptedAt(e.sessionId,o.lastMainEventAtOf(e.sessionId)??e.lastSeenAt);i!==null&&(s[e.sessionId]=i)}return{interrupted:s}},l,{key:"sessionInterrupt",intervalMs:5e3,shouldRun:()=>l.hasSubscribers()});M.start(),new W(()=>{const s={};for(const e of r.list())s[e.id]=ie(e.path);return s},l,{key:"statusline",intervalMs:5e3,shouldRun:()=>l.hasSubscribers(),invalidateOnly:!0}).start();const us=new we(()=>p.listInflightCounts(),l,n);let X=null;const g=Ts({sessions:o,projects:r,harnessOf:s=>{const e=a.listBySession(s,1),i=e[e.length-1]?.source;return N(i)?i:null},surfaceFor:Ds,headless:D,onSyntheticChange:()=>X?.pushSyntheticSessions(Is())});A.run=s=>g.run(s);const ds=zs({config:async()=>{const s=y().decision;if(!s?.baseUrl||!s.model)return null;const e=Xs();return e?{baseUrl:s.baseUrl,model:s.model,apiKey:e}:null},fallback:Ys({supports:s=>g.supports(s),extract:s=>g.run(s)})}),b=new Vs({orchestrations:_,runs:G,deliverer:p,sessions:o,bus:n,supportsExtract:s=>g.supports(s),extract:s=>g.run(s),conditionJudge:ds,deferWhenUserPresent:!0,ensureOpen:async s=>{const e=a.listBySession(s,1).at(-1)?.id??0,i=await Zs({hookSessions:o,hookEvents:a,projects:r,harnesses:h,sessionProbe:d,terminalRefresher:S},s);if(!i.ok)return i;let v=!1;for(let rs=0;rs<60;rs++){if(a.listBySession(s,20).some(P=>P.id>e&&P.eventType==="SessionStart"))return{ok:!0,ack:"session-start"};R().get(s)===!0&&(v=!0),await new Promise(P=>setTimeout(P,250))}return v?{ok:!0,ack:"registry"}:{ok:!1,error:"session did not report ready within 15s"}}});b.rearm();const Z=setInterval(()=>b.cronTick(),3e4);Z.unref();const fs=new ge,hs=new Se(()=>be(r.list(),u.list(),fs),l,n,()=>l.hasSubscribers());re({sessions:o,events:a,dispatches:E,deliverer:p,watches:C,orchestrations:_,watchEngine:F,orchestrationEngine:b,questions:w,sideQuestions:$,probe:d,uploads:H,uploadSessions:xs,livenessOf:R}),ne();const L=ye({projects:r,rules:k,sessions:o,bus:n,dispatcher:Q,watchEngine:F,orchestrationEngine:b,messagePipe:p,questionTracker:w,sideQuestions:{onEvent:s=>{Bs(Y,s)}},sessionProbe:d,uploads:H,dashboardRate:V,terminalTopologyKick:()=>{S.refreshNow()}});X=L;const U=He(),ss=le({projects:r,port:c,tlsPort:T,watch:z,hookEvents:a,adapters:ls,harnesses:h,libraries:u,staticDir:U,hookRegistry:k,hookDispatches:E,hookSessions:o,hookBus:n,dataBus:l,terminalRefresher:S,interruptRefresher:M,livenessRefresher:B,sessionProbe:d,inflightRefresher:us,updatesRefresher:hs,hookDispatcher:Q,hookRunner:cs,messageDeliverer:p,terminal:is(()=>y().terminal),uploads:H,questionTracker:w,sideQuestions:Y,sessionWatches:C,watchEngine:F,orchestrations:_,orchestrationRuns:G,orchestrationEngine:b,pushSubscriptions:K,pushNotifier:ms,onAttach:j.attach,dashboardRefresh:j.attach,hookPlugins:x,hookMirror:L.mirror,pluginStates:new I(t),toolkit:ps,auth:O}),es=ws.createServer(ss);let os=null;pe({port:T,bindHost:f,handler:ss}).then(s=>{os=s,s&&console.log(`[dev] weave daemon tls listening on https://${f}:${s.port}`)});const ts=()=>{S.stop(),B.stop(),M.stop(),D.killAll(),clearInterval(Z),J.stop(),j.stop(),L.stop(),es.close(),os?.server.close(),process.exit(0)};process.on("SIGTERM",ts),process.on("SIGINT",ts),es.listen(c,f,()=>{as({pid:process.pid,port:c,startedAt:new Date().toISOString(),host:f,tlsPort:T}),console.log(`[dev] weave daemon listening on http://${f}:${c}`),console.log(`[dev] cli/dashboard local url: http://${ke}:${c}`),console.log(`[dev] child-session marker stripped: ${_e}`),console.log(U?`[dev] static: ${U}`:"[dev] static: (web/dist not built \u2014 run pnpm build:web)")})}$e();
|
|
1
|
+
import he from"node:http";import{openDatabase as we}from"../db/db.js";import{ProjectRepository as ge}from"../repositories/projects.js";import{HookEventRepository as ve}from"../repositories/hook-events.js";import{LibraryRepository as Se}from"../repositories/libraries.js";import{HookRuleRepository as oe}from"../repositories/hook-rules.js";import{HookDispatchRepository as be}from"../repositories/hook-dispatches.js";import{PluginStateRepository as E}from"../repositories/plugin-states.js";import{SessionRepository as Re}from"../repositories/sessions.js";import{createRuntimeRegistry as ye}from"@weavecode/harness";import{TERMINAL_LOCATOR_ENV_KEYS as ke,isHarness as L}from"@weavecode/core";import{messagingSurfaceFor as Pe,narrationSurfaceFor as De}from"../surfaces.js";import{syntheticSessionIds as Ee}from"../hooks/synthetic-sessions.js";import{createEdgeExtract as Oe}from"../hooks/edge-extract.js";import{HookRuleRegistry as Ie}from"../hooks/registry.js";import{HookDispatcher as Te}from"../hooks/dispatcher.js";import{HookEventBus as Ae}from"../hooks/bus.js";import{ResumeRunner as Ce}from"../hooks/resume-runner.js";import{HeadlessRunner as _e}from"../hooks/headless-runner.js";import{MessageDeliverer as Fe}from"../hooks/message-deliverer.js";import{QuestionTracker as He}from"../hooks/question-tracker.js";import{SideQuestionRepository as $e}from"../repositories/side-questions.js";import{claimSideAnswer as Me}from"../hooks/side-questions.js";import{DashboardRateCache as Be}from"../hooks/dashboard-rate.js";import{startDashboardPusher as Ue}from"./dashboard-pusher.js";import{startPromptFlusher as Le}from"../hooks/prompt-flusher.js";import{SessionWatchRepository as Ne}from"../repositories/session-watches.js";import{PushSubscriptionRepository as We}from"../repositories/push-subscriptions.js";import{UploadRepository as je}from"../repositories/uploads.js";import{defaultUploadSessions as xe}from"./upload-sessions.js";import{PushNotifier as Qe}from"../hooks/push-notify.js";import{OrchestrationRepository as qe,OrchestrationRunRepository as Ke}from"../repositories/orchestrations.js";import{WatchEngine as Ge}from"../hooks/watch-engine.js";import{OrchestrationEngine as Je,createForkConditionJudge as Ve}from"../hooks/orchestration-engine.js";import{createDecisionConditionJudge as Ye}from"../hooks/decision-judge.js";import{readDecisionKey as ze}from"./decision-config.js";import{createEnsureOpen as Xe}from"./session-open.js";import{loadAllPlugins as Ze}from"../hooks/plugin-loader.js";import{ensureBuiltinMarket as es,builtinMarketDir as ss}from"../market/builtin.js";import{ToolkitService as ts}from"../hooks/toolkit.js";import{startSessionSweeper as os}from"../hooks/session-sweeper.js";import{startStatuslineCacheSweeper as rs}from"../statusline/cache-sweeper.js";import{readStatuslineFacts as ns}from"../statusline/manager.js";import{WatchService as is}from"../watch/watch-service.js";import{weaveRequestHandler as as}from"./server.js";import{startTlsServer as ls}from"./tls.js";import{DataBus as cs}from"./data-bus.js";import{TerminalTopologyRefresher as ps}from"./terminal-topology-refresher.js";import{SnapshotRefresher as N}from"./snapshot-refresher.js";import{SessionProbe as ms,dbModelFactResolver as us,dbTranscriptPathResolver as ds}from"./session-probe.js";import{NarrationWatcher as fs}from"./narration-watcher.js";import{InflightCountsRefresher as hs}from"./inflight-counts-refresher.js";import{ProjectUpdatesRefresher as ws}from"./project-updates-refresher.js";import{FingerprintCache as gs}from"../install/fingerprint.js";import{detectProjectUpdateCounts as vs}from"../install/updates.js";import{pidAliveOf as Ss}from"./claude-liveness.js";import{combinedLivenessOf as b}from"./liveness.js";import{promptTerminalChannel as re,readTerminalCounts as bs}from"./opener.js";import{wireHookFilePipeline as Rs}from"./hook-pipeline.js";import{DEFAULT_PORT as W,DAEMON_HOST as ys,DEFAULT_BIND_HOST as ks,findFreePort as Ps,isPortFree as Ds}from"./port.js";import{writeDaemonState as ne}from"./state.js";import{ensureDataLayout as Es}from"../db/layout.js";import{pruneFileIndexes as Os}from"./project-files.js";import{pruneInstallTmp as Is}from"../hooks/plugin-installer.js";import{readDaemonSettingsSync as R,setDaemonSettingsDb as Ts,DEFAULT_SERVER_SETTINGS as As}from"./settings.js";import{AuthService as Cs}from"./dashboard-auth.js";import{openPetWindow as _s,shutdownPetWindow as Fs}from"./pet-window.js";import{seedBuiltinPets as Hs}from"./pet-seed.js";import{resolveStaticDir as $s}from"./static.js";const Ms="CLAUDE_CODE_CHILD_SESSION"in process.env;delete process.env.CLAUDE_CODE_CHILD_SESSION;for(const c of ke)delete process.env[c];async function Bs(){Es();const c=await Ds(W)?W:await Ps(W+1);ne({pid:process.pid,port:c,startedAt:new Date().toISOString()});const o=we();Ts(o);const f=R().server?.bindHost??ks,O=R().server?.tlsPort??As.tlsPort,y=new Cs;y.initialPassword&&console.log(`[dev] initial dashboard password: ${y.initialPassword}`);const r=new ge(o);Os(r.list().map(e=>e.id)),Is();const a=new ve(o),u=new Se(o),h=ye(),ie=h.byCapability("events").flatMap(e=>e.events??[]),k=new Ie(new oe(o)),P=new be(o),t=new Re(o),n=new Ae;{const e=await es({libraries:u});e.error?console.error(`[dev] builtin market unavailable: ${e.error}`):e.changed&&console.log(`[dev] builtin market ${e.form==="link"?"linked":"copied"} -> ${ss(u.dataRoot)}`)}const{loader:m}=await Ze({rules:new oe(o),registry:k,states:new E(o),bus:n,libraries:u},r.list());{const e=m.list().filter(s=>s.status==="rejected");console.log(`[dev] plugins loaded: ${m.list().length} (rejected: ${e.length})`);for(const s of e)console.log(`[dev] rejected ${s.id}: ${s.error}`)}m.watchRoots();const j={list:()=>m.list(),setPluginEnabled:(e,s)=>m.setPluginEnabled(e,s),reloadAll:()=>m.reloadAll(),rescan:()=>m.rescanRoots(r.list(),u)},ae=new ts({projects:r,states:new E(o),plugins:j,libraries:u}),I={run:null},x=new Te({registry:k,dispatches:P,bus:n,projects:r,sessions:t,plugins:m,pluginStates:new E(o),classify:e=>I.run?I.run(e):Promise.resolve(null),sessionTitleOf:async e=>{const s=a.listBySession(e,1).at(-1)?.source;return L(s)?h.get(s)?.titles?.sessionTitleOf(e)??null:null}}),D=new _e,le=new Ce({dispatches:P,sessions:t,projects:r,bus:n,resumeSpec:h.get("claude")?.resume,headless:D}),p=new Fe({sessions:t,projects:r,hookEvents:a,bus:n,headless:D,terminal:re(()=>R().terminal),blockedByQuestion:e=>w.get(e)!=null,livenessOf:b,sideAnswerStore:{answerById:(e,s,l)=>{F.answerById(e,s,l)}}});Le(p);const T=new Ne(o),A=new Ge({watches:T,deliverer:p,sessions:t,bus:n,livenessOf:b}),Q=new We(o),C=new je(o),ce=new Qe({subscriptions:Q,sessions:t,bus:n}),_=new qe(o),q=new Ke(o),d=new ms(ds(a),us(a,e=>t.getBySessionId(e)?.harness??null)),K=new fs(n,e=>De(L(e)?e:"claude"),e=>d.transcriptPathOf(e),e=>t.livenessRowOf(e)?.harness??null);K.start();const w=new He({sessions:t,hookEvents:a,onPending:e=>{n.emit({kind:"question.pending",sessionId:e.sessionId,harness:e.harness,count:e.questions.length,at:e.at})},interruptedAt:e=>{const s=t.getBySessionId(e);return s?d.interruptedAt(e,t.lastMainEventAtOf(e)??s.lastSeenAt):null}});w.seedFromDb();const F=new $e(o),G=new Be,H=Ue({rate:G,events:a,sessions:t,projects:r,bus:n}),J={repo:F,bus:n,settle:e=>{p.interrupt(e.sessionId)}},V=new is(r);V.start();const i=new cs,g=new ps(async()=>({counts:await bs(r.list()),terminals:await p.sessionTerminals()}),i,{shouldRun:()=>i.hasSubscribers(),graceMs:1e4});g.start();const $=new N(()=>{const e=b(),s={};for(const l of t.listWithCounts()){const te=Ss(l,e);te!==null&&(s[l.sessionId]=te)}return{alive:s}},i,{key:"sessionLiveness",shouldRun:()=>i.hasSubscribers()});$.start();const M=new N(()=>{const e={};for(const s of t.listWithCounts()){if(s.turnOpen!==!0)continue;const l=d.interruptedAt(s.sessionId,t.lastMainEventAtOf(s.sessionId)??s.lastSeenAt);l!==null&&(e[s.sessionId]=l)}return{interrupted:e}},i,{key:"sessionInterrupt",intervalMs:5e3,shouldRun:()=>i.hasSubscribers()});M.start(),new N(()=>{const e={};for(const s of r.list())e[s.id]=ns(s.path);return e},i,{key:"statusline",intervalMs:5e3,shouldRun:()=>i.hasSubscribers(),invalidateOnly:!0}).start();const pe=new hs(()=>p.listInflightCounts(),i,n);let Y=null;const v=Oe({sessions:t,projects:r,harnessOf:e=>{const s=a.listBySession(e,1),l=s[s.length-1]?.source;return L(l)?l:null},surfaceFor:Pe,headless:D,onSyntheticChange:()=>Y?.pushSyntheticSessions(Ee())});I.run=e=>v.run(e);const me=Ye({config:async()=>{const e=R().decision;if(!e?.baseUrl||!e.model)return null;const s=ze();return s?{baseUrl:e.baseUrl,model:e.model,apiKey:s}:null},fallback:Ve({supports:e=>v.supports(e),extract:e=>v.run(e)})}),ue=Xe({hookSessions:t,hookEvents:a,projects:r,harnesses:h,sessionProbe:d,terminalRefresher:g,livenessOf:b}),S=new Je({orchestrations:_,runs:q,deliverer:p,sessions:t,bus:n,supportsExtract:e=>v.supports(e),extract:e=>v.run(e),conditionJudge:me,deferWhenUserPresent:!0,ensureOpen:ue});S.rearm();const z=setInterval(()=>S.cronTick(),3e4);z.unref();const de=new gs,fe=new ws(()=>vs(r.list(),u.list(),de),i,n,()=>i.hasSubscribers());os({sessions:t,events:a,dispatches:P,deliverer:p,watches:T,orchestrations:_,watchEngine:A,orchestrationEngine:S,questions:w,sideQuestions:F,probe:d,uploads:C,uploadSessions:xe,livenessOf:b}),rs();const B=Rs({projects:r,rules:k,sessions:t,bus:n,dispatcher:x,watchEngine:A,orchestrationEngine:S,messagePipe:p,questionTracker:w,sideQuestions:{onEvent:e=>{Me(J,e)}},sessionProbe:d,uploads:C,dashboardRate:G,terminalTopologyKick:()=>{g.refreshNow()}});Y=B;const U=$s(),X=as({projects:r,port:c,tlsPort:O,watch:V,hookEvents:a,adapters:ie,harnesses:h,libraries:u,staticDir:U,hookRegistry:k,hookDispatches:P,hookSessions:t,hookBus:n,dataBus:i,terminalRefresher:g,interruptRefresher:M,livenessRefresher:$,sessionProbe:d,inflightRefresher:pe,updatesRefresher:fe,hookDispatcher:x,hookRunner:le,messageDeliverer:p,terminal:re(()=>R().terminal),uploads:C,questionTracker:w,sideQuestions:J,sessionWatches:T,watchEngine:A,orchestrations:_,orchestrationRuns:q,orchestrationEngine:S,pushSubscriptions:Q,pushNotifier:ce,onAttach:H.attach,dashboardRefresh:H.attach,hookPlugins:j,hookMirror:B.mirror,pluginStates:new E(o),toolkit:ae,auth:y}),Z=he.createServer(X);let ee=null;ls({port:O,bindHost:f,handler:X}).then(e=>{ee=e,e&&console.log(`[dev] weave daemon tls listening on https://${f}:${e.port}`)});const se=()=>{g.stop(),$.stop(),M.stop(),Fs(),D.killAll(),clearInterval(z),K.stop(),H.stop(),B.stop(),Z.close(),ee?.server.close(),process.exit(0)};process.on("SIGTERM",se),process.on("SIGINT",se),Z.listen(c,f,()=>{ne({pid:process.pid,port:c,startedAt:new Date().toISOString(),host:f,tlsPort:O}),console.log(`[dev] weave daemon listening on http://${f}:${c}`),console.log(`[dev] cli/dashboard local url: http://${ys}:${c}`),console.log(`[dev] child-session marker stripped: ${Ms}`),console.log(U?`[dev] static: ${U}`:"[dev] static: (web/dist not built \u2014 run pnpm build:web)"),Hs().then(()=>{_s({baseUrl:`http://localhost:${c}`,auth:y})})})}Bs();
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import{appendFileSync as r,mkdirSync as
|
|
1
|
+
import{appendFileSync as r,mkdirSync as s}from"node:fs";import c from"node:path";import{getLogsDir as a}from"../db/paths.js";import{startDaemon as m}from"./start.js";const i=(t,o)=>{const n=o instanceof Error?o.stack??o.message:String(o);try{const e=a();s(e,{recursive:!0}),r(c.join(e,"daemon-boot.log"),`[${new Date().toISOString()}] ${t}:
|
|
2
2
|
${n}
|
|
3
3
|
|
|
4
|
-
`,"utf8")}catch{}process.exit(1)};process.on("uncaughtException",t=>i("uncaughtException",t)),process.on("unhandledRejection",t=>i("unhandledRejection",t));try{m()}catch(t){const o=t instanceof Error?t.stack??t.message:String(t);try{const n=a();
|
|
4
|
+
`,"utf8")}catch{}process.exit(1)};process.on("uncaughtException",t=>i("uncaughtException",t)),process.on("unhandledRejection",t=>i("unhandledRejection",t));try{m()}catch(t){const o=t instanceof Error?t.stack??t.message:String(t);try{const n=a();s(n,{recursive:!0}),r(c.join(n,"daemon-boot.log"),`[${new Date().toISOString()}] boot crash:
|
|
5
5
|
${o}
|
|
6
6
|
|
|
7
7
|
`,"utf8")}catch{}process.exit(1)}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{readdir as
|
|
1
|
+
import{readdir as d,stat as l}from"node:fs/promises";import p from"node:os";import a from"node:path";function f(n,s){return new Promise((r,t)=>{const e=setTimeout(()=>t(new Error("timeout")),s);n.then(i=>{clearTimeout(e),r(i)},i=>{clearTimeout(e),t(i)})})}let c=null;const h=5*6e4;async function w(){if(c&&Date.now()-c.at<h)return c.drives;const n="ABCDEFGHIJKLMNOPQRSTUVWXYZ".split(""),r=(await Promise.all(n.map(async t=>{const e=`${t}:\\`;try{return await f(l(e),4e3),e}catch{return null}}))).filter(t=>t!==null);return c={at:Date.now(),drives:r},r}export async function listBrowseRoots(n){const s=[],r=new Set,t=(o,m)=>{r.has(o)||(r.add(o),s.push({path:o,kind:m}))},e=p.homedir();t(e,"home");const i=[["Desktop","desktop"],["Downloads","downloads"],["Documents","documents"]];for(const[o,m]of i){const u=a.join(e,o);try{await l(u),t(u,m)}catch{}}for(const o of n)typeof o=="string"&&o&&t(a.dirname(o),"library-parent");if(process.platform==="win32")for(const o of await w())t(o,"drive");else t(a.parse(e).root,"root");return s}export async function listDirectoryChildren(n){const r=(await d(n,{withFileTypes:!0})).filter(t=>t.isDirectory()).map(t=>({name:t.name,path:a.join(n,t.name)}));return r.sort((t,e)=>t.name.localeCompare(e.name,void 0,{numeric:!0})),r}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{readdirSync as m,unlinkSync as
|
|
1
|
+
import{readdirSync as m,unlinkSync as a}from"node:fs";import{join as c}from"node:path";import{getDbPath as h}from"../db/paths.js";import{MirrorWriter as b,hookShardId as l,hooksRoot as g,mirrorPathOf as x,outboxPathOf as k}from"../hooks/mirror.js";import{promptboxPathOf as P}from"../hooks/promptbox.js";import{messagingSurfaceFor as S}from"../surfaces.js";import{startInboxWorker as j,handleIngestedRecords as y,unparkFailedInbox as $,INBOX_CLAIM_SUFFIX as p,INBOX_FAILED_SUFFIX as u}from"../hooks/inbox-worker.js";function v(o,e){return[c(o,"inbox",`${e}.jsonl`),c(o,"inbox",`${e}${p}`),c(o,"inbox",`${e}${u}`),x(o,e),k(o,e),P(o,e)]}export function purgeProjectPipeline(o,e){for(const n of v(o,l(e)))try{a(n)}catch{}}function w(o){return(o.endsWith(".tmp")?o.slice(0,-4):o).replace(new RegExp(`(${p}|${u})$`),"").replace(/\.(jsonl|json)$/,"")}const F=/^[0-9a-f]{16}$/;export function purgeOrphanPipelineFiles(o){const e=new Set(o.projects.list().map(t=>l(t.token)));let n=0;for(const t of["inbox","mirror","outbox","promptbox"]){let i;try{i=m(c(o.hooksDir,t))}catch{continue}for(const s of i){const r=w(s);if(!(!F.test(r)||e.has(r)))try{a(c(o.hooksDir,t,s)),n++}catch{}}}return n}export function wireHookFilePipeline(o){const e=g(),n=purgeOrphanPipelineFiles({projects:o.projects,hooksDir:e});n>0&&console.log(`[weave] hook pipeline: purged ${n} orphan file(s)`);const t=$(e);t>0&&console.log(`[weave] hook pipeline: revived ${t} parked inbox file(s)`);const i=new b({projects:o.projects,rules:o.rules,sessions:o.sessions});o.rules.onChange=()=>i.syncAll(),i.attachToBus(o.bus),i.syncAll();const s=j({dbPath:h(),hooksDir:e});return s.on("message",r=>{y({projects:o.projects,hooksDir:e,bus:o.bus,dispatcher:o.dispatcher,watchEngine:o.watchEngine,orchestrationEngine:o.orchestrationEngine,messagePipe:o.messagePipe,questionTracker:o.questionTracker,sideQuestions:o.sideQuestions,dashboardRate:o.dashboardRate,sessionProbe:o.sessionProbe,uploads:o.uploads,terminalTopologyKick:o.terminalTopologyKick,paneEnvSource:f=>S(f).paneEnvSource},r)}),s.on("error",r=>console.error("[weave] inbox worker failed:",r)),{mirror:i,pushSyntheticSessions:r=>s.postMessage({type:"synthetic-sessions",ids:r}),stop:()=>s.terminate().then(()=>{})}}
|