@weavecode/weave 0.1.3 → 0.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/node_modules/@modelcontextprotocol/sdk/node_modules/express/node_modules/qs/.editorconfig +1 -1
- package/node_modules/@modelcontextprotocol/sdk/node_modules/express/node_modules/qs/CHANGELOG.md +45 -22
- package/node_modules/@modelcontextprotocol/sdk/node_modules/express/node_modules/qs/README.md +26 -1
- package/node_modules/@modelcontextprotocol/sdk/node_modules/express/node_modules/qs/dist/qs.js +27 -27
- package/node_modules/@modelcontextprotocol/sdk/node_modules/express/node_modules/qs/eslint.config.mjs +61 -50
- package/node_modules/@modelcontextprotocol/sdk/node_modules/express/node_modules/qs/lib/formats.js +7 -2
- package/node_modules/@modelcontextprotocol/sdk/node_modules/express/node_modules/qs/lib/parse.js +13 -6
- package/node_modules/@modelcontextprotocol/sdk/node_modules/express/node_modules/qs/lib/stringify.js +5 -3
- package/node_modules/@modelcontextprotocol/sdk/node_modules/express/node_modules/qs/lib/utils.js +15 -7
- package/node_modules/@modelcontextprotocol/sdk/node_modules/express/node_modules/qs/package.json +6 -6
- package/node_modules/@modelcontextprotocol/sdk/node_modules/express-rate-limit/node_modules/ip-address/dist/common.js +2 -2
- package/node_modules/@modelcontextprotocol/sdk/node_modules/express-rate-limit/node_modules/ip-address/package.json +2 -2
- package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/README.md +2 -3
- package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/cjs/helper/css/common.js +8 -3
- package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/cjs/helper/css/index.js +1 -1
- package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/cjs/helper/route/index.js +3 -1
- package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/cjs/jsx/base.js +1 -1
- package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/cjs/middleware/bearer-auth/index.js +8 -0
- package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/cjs/middleware/serve-static/index.js +3 -1
- package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/cjs/router/trie-router/node.js +2 -2
- package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/cjs/utils/url.js +11 -6
- package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/helper/css/common.js +8 -3
- package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/helper/css/index.js +1 -1
- package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/helper/route/index.js +3 -1
- package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/jsx/base.js +1 -1
- package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/middleware/bearer-auth/index.js +8 -0
- package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/middleware/serve-static/index.js +3 -1
- package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/router/trie-router/node.js +2 -2
- package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/types/adapter/aws-lambda/conninfo.d.ts +1 -1
- package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/types/adapter/bun/conninfo.d.ts +1 -1
- package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/types/adapter/bun/ssg.d.ts +1 -1
- package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/types/adapter/cloudflare-pages/conninfo.d.ts +1 -1
- package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/types/adapter/cloudflare-workers/conninfo.d.ts +1 -1
- package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/types/adapter/deno/conninfo.d.ts +1 -1
- package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/types/adapter/deno/ssg.d.ts +1 -1
- package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/types/adapter/lambda-edge/conninfo.d.ts +1 -1
- package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/types/adapter/netlify/conninfo.d.ts +1 -1
- package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/types/adapter/vercel/conninfo.d.ts +1 -1
- package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/types/helper/testing/index.d.ts +2 -1
- package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/types/hono-base.d.ts +21 -9
- package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/types/index.d.ts +1 -1
- package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/types/jsx/components.d.ts +2 -2
- package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/types/jsx/context.d.ts +2 -2
- package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/types/jsx/dom/components.d.ts +2 -2
- package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/types/jsx/dom/css.d.ts +2 -2
- package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/types/jsx/streaming.d.ts +4 -3
- package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/types/middleware/bearer-auth/index.d.ts +2 -1
- package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/types/middleware/ip-restriction/index.d.ts +3 -3
- package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/types/middleware/jsx-renderer/index.d.ts +3 -3
- package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/types/utils/ipaddr.d.ts +1 -1
- package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/utils/url.js +11 -6
- package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/package.json +1 -1
- package/node_modules/@weavecode/cli/dist/cli.js +4 -4
- package/node_modules/@weavecode/cli/dist/commands/chpass.js +1 -1
- package/node_modules/@weavecode/cli/dist/commands/daemon-auth.js +1 -1
- package/node_modules/@weavecode/cli/dist/commands/daemon.js +2 -2
- package/node_modules/@weavecode/cli/dist/commands/dashboard.js +2 -2
- package/node_modules/@weavecode/cli/dist/commands/doctor.js +1 -1
- package/node_modules/@weavecode/cli/dist/commands/init.js +1 -1
- package/node_modules/@weavecode/cli/dist/commands/scan.js +1 -1
- package/node_modules/@weavecode/cli/dist/commands/status.js +2 -2
- package/node_modules/@weavecode/cli/dist/commands/uninstall.js +1 -1
- package/node_modules/@weavecode/cli/dist/i18n/dict/en.js +2 -1
- package/node_modules/@weavecode/cli/dist/i18n/dict/zh.d.ts +14 -0
- package/node_modules/@weavecode/cli/dist/i18n/dict/zh.js +4 -3
- package/node_modules/@weavecode/cli/dist/i18n/index.js +1 -1
- package/node_modules/@weavecode/cli/dist/i18n/t.js +1 -1
- package/node_modules/@weavecode/cli/dist/init/claudemd-gen.js +3 -3
- package/node_modules/@weavecode/cli/dist/init/executor.d.ts +5 -4
- package/node_modules/@weavecode/cli/dist/init/executor.js +3 -3
- package/node_modules/@weavecode/cli/dist/init/git-commit.js +2 -2
- package/node_modules/@weavecode/cli/dist/init/harnesses/claude.js +7 -7
- package/node_modules/@weavecode/cli/dist/init/harnesses/codex.js +1 -1
- package/node_modules/@weavecode/cli/dist/init/instruction-link.js +1 -1
- package/node_modules/@weavecode/cli/dist/init/plugin-templates.js +1 -1
- package/node_modules/@weavecode/cli/dist/init/prompt.js +4 -4
- package/node_modules/@weavecode/cli/dist/init/provision.d.ts +25 -0
- package/node_modules/@weavecode/cli/dist/init/provision.js +1 -0
- package/node_modules/@weavecode/cli/dist/init/uninstall.js +6 -6
- package/node_modules/@weavecode/cli/dist/init/wiring.js +1 -1
- package/node_modules/@weavecode/cli/dist/parser.js +1 -1
- package/node_modules/@weavecode/cli/dist/statusline/ansi.js +1 -1
- package/node_modules/@weavecode/cli/dist/statusline/mock-input.js +1 -1
- package/node_modules/@weavecode/cli/dist/statusline/preview.js +2 -2
- package/node_modules/@weavecode/cli/package.json +5 -5
- package/node_modules/@weavecode/core/dist/harness-checks.js +1 -1
- package/node_modules/@weavecode/core/dist/harness.d.ts +13 -1
- package/node_modules/@weavecode/core/dist/harness.js +1 -1
- package/node_modules/@weavecode/core/dist/index.d.ts +1 -1
- package/node_modules/@weavecode/core/dist/index.js +1 -1
- package/node_modules/@weavecode/core/dist/platform.js +1 -1
- package/node_modules/@weavecode/core/dist/types.js +1 -1
- package/node_modules/@weavecode/core/dist/utils/fs.js +1 -1
- package/node_modules/@weavecode/core/dist/utils/logger.js +1 -1
- package/node_modules/@weavecode/core/package.json +1 -1
- package/node_modules/@weavecode/harness/dist/claude/assets.js +4 -4
- package/node_modules/@weavecode/harness/dist/claude/capture.js +9 -9
- package/node_modules/@weavecode/harness/dist/claude/commands.js +3 -3
- package/node_modules/@weavecode/harness/dist/claude/config.d.ts +9 -0
- package/node_modules/@weavecode/harness/dist/claude/config.js +2 -2
- package/node_modules/@weavecode/harness/dist/claude/detect.js +1 -1
- package/node_modules/@weavecode/harness/dist/claude/edits.js +1 -1
- package/node_modules/@weavecode/harness/dist/claude/event-source.d.ts +2 -0
- package/node_modules/@weavecode/harness/dist/claude/event-source.js +1 -1
- package/node_modules/@weavecode/harness/dist/claude/images.js +2 -2
- package/node_modules/@weavecode/harness/dist/claude/index.d.ts +4 -2
- package/node_modules/@weavecode/harness/dist/claude/index.js +1 -1
- package/node_modules/@weavecode/harness/dist/claude/liveness.d.ts +64 -0
- package/node_modules/@weavecode/harness/dist/claude/liveness.js +1 -0
- package/node_modules/@weavecode/harness/dist/claude/mcp-gen.js +1 -1
- package/node_modules/@weavecode/harness/dist/claude/messaging.js +2 -2
- package/node_modules/@weavecode/harness/dist/claude/model-aliases.d.ts +4 -0
- package/node_modules/@weavecode/harness/dist/claude/model-aliases.js +1 -1
- package/node_modules/@weavecode/harness/dist/claude/narration.d.ts +13 -0
- package/node_modules/@weavecode/harness/dist/claude/narration.js +1 -0
- package/node_modules/@weavecode/harness/dist/claude/peers.js +1 -1
- package/node_modules/@weavecode/harness/dist/claude/plan.js +1 -1
- package/node_modules/@weavecode/harness/dist/claude/plugins.js +4 -4
- package/node_modules/@weavecode/harness/dist/claude/prompt-inbox.js +1 -1
- package/node_modules/@weavecode/harness/dist/claude/prompt.js +3 -3
- package/node_modules/@weavecode/harness/dist/claude/questions.js +2 -2
- package/node_modules/@weavecode/harness/dist/claude/resume.js +1 -1
- package/node_modules/@weavecode/harness/dist/claude/settings-gen.js +1 -1
- package/node_modules/@weavecode/harness/dist/claude/side-question.js +2 -2
- package/node_modules/@weavecode/harness/dist/claude/statusline/generator.js +14 -14
- package/node_modules/@weavecode/harness/dist/claude/statusline/git-cache.js +1 -1
- package/node_modules/@weavecode/harness/dist/claude/statusline/surface.js +2 -2
- package/node_modules/@weavecode/harness/dist/claude/transcript.d.ts +13 -0
- package/node_modules/@weavecode/harness/dist/claude/transcript.js +7 -6
- package/node_modules/@weavecode/harness/dist/codex/assets.js +1 -1
- package/node_modules/@weavecode/harness/dist/codex/capture.d.ts +1 -2
- package/node_modules/@weavecode/harness/dist/codex/capture.js +2 -2
- package/node_modules/@weavecode/harness/dist/codex/commands.js +4 -4
- package/node_modules/@weavecode/harness/dist/codex/config.d.ts +10 -0
- package/node_modules/@weavecode/harness/dist/codex/config.js +2 -2
- package/node_modules/@weavecode/harness/dist/codex/detect.js +1 -1
- package/node_modules/@weavecode/harness/dist/codex/event-source.d.ts +1 -1
- package/node_modules/@weavecode/harness/dist/codex/event-source.js +2 -2
- package/node_modules/@weavecode/harness/dist/codex/images.d.ts +2 -0
- package/node_modules/@weavecode/harness/dist/codex/images.js +1 -0
- package/node_modules/@weavecode/harness/dist/codex/index.d.ts +13 -2
- package/node_modules/@weavecode/harness/dist/codex/index.js +1 -1
- package/node_modules/@weavecode/harness/dist/codex/liveness.d.ts +38 -0
- package/node_modules/@weavecode/harness/dist/codex/liveness.js +1 -0
- package/node_modules/@weavecode/harness/dist/codex/mcp.js +1 -1
- package/node_modules/@weavecode/harness/dist/codex/messaging.d.ts +7 -3
- package/node_modules/@weavecode/harness/dist/codex/messaging.js +3 -3
- package/node_modules/@weavecode/harness/dist/codex/narration.d.ts +10 -0
- package/node_modules/@weavecode/harness/dist/codex/narration.js +1 -0
- package/node_modules/@weavecode/harness/dist/codex/plugin-state.js +1 -1
- package/node_modules/@weavecode/harness/dist/codex/plugins.js +3 -3
- package/node_modules/@weavecode/harness/dist/codex/provision.d.ts +12 -0
- package/node_modules/@weavecode/harness/dist/codex/provision.js +1 -0
- package/node_modules/@weavecode/harness/dist/codex/questions.d.ts +9 -0
- package/node_modules/@weavecode/harness/dist/codex/questions.js +2 -0
- package/node_modules/@weavecode/harness/dist/codex/resume.js +1 -1
- package/node_modules/@weavecode/harness/dist/codex/rollout.d.ts +8 -5
- package/node_modules/@weavecode/harness/dist/codex/rollout.js +5 -5
- package/node_modules/@weavecode/harness/dist/codex/side-question.d.ts +12 -0
- package/node_modules/@weavecode/harness/dist/codex/side-question.js +4 -0
- package/node_modules/@weavecode/harness/dist/codex/titles.d.ts +8 -0
- package/node_modules/@weavecode/harness/dist/codex/titles.js +4 -0
- package/node_modules/@weavecode/harness/dist/codex/toml.js +13 -13
- package/node_modules/@weavecode/harness/dist/codex/transcript.js +2 -2
- package/node_modules/@weavecode/harness/dist/driver.d.ts +162 -8
- package/node_modules/@weavecode/harness/dist/driver.js +1 -1
- package/node_modules/@weavecode/harness/dist/index.d.ts +1 -0
- package/node_modules/@weavecode/harness/dist/index.js +1 -1
- package/node_modules/@weavecode/harness/dist/init/generated.js +2 -2
- package/node_modules/@weavecode/harness/dist/init/pipeline.js +1 -1
- package/node_modules/@weavecode/harness/dist/install.d.ts +9 -0
- package/node_modules/@weavecode/harness/dist/install.js +1 -0
- package/node_modules/@weavecode/harness/dist/registry-wiring.js +1 -1
- package/node_modules/@weavecode/harness/dist/shared/install-link.js +1 -1
- package/node_modules/@weavecode/harness/dist/shared/json-cap.js +1 -1
- package/node_modules/@weavecode/harness/dist/zcode/assets.js +1 -1
- package/node_modules/@weavecode/harness/dist/zcode/capture.js +3 -3
- package/node_modules/@weavecode/harness/dist/zcode/mcp.js +2 -2
- package/node_modules/@weavecode/harness/package.json +2 -2
- package/node_modules/@weavecode/server/dist/config/dotted.js +1 -1
- package/node_modules/@weavecode/server/dist/config/profiles.d.ts +10 -1
- package/node_modules/@weavecode/server/dist/config/profiles.js +2 -2
- package/node_modules/@weavecode/server/dist/daemon/ai-config.js +2 -2
- package/node_modules/@weavecode/server/dist/daemon/ai-context.js +6 -6
- package/node_modules/@weavecode/server/dist/daemon/ai-routes.js +4 -4
- package/node_modules/@weavecode/server/dist/daemon/api-log.js +3 -3
- package/node_modules/@weavecode/server/dist/daemon/auth-routes.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/auto-start.js +6 -6
- package/node_modules/@weavecode/server/dist/daemon/capture-routes.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/claude-liveness.d.ts +4 -55
- package/node_modules/@weavecode/server/dist/daemon/claude-liveness.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/config-routes.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/cron.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/dashboard-auth.js +2 -2
- package/node_modules/@weavecode/server/dist/daemon/dashboard-pusher.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/data-bus.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/decision-config.js +2 -2
- package/node_modules/@weavecode/server/dist/daemon/dev-entry.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/fs-browser.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/hook-pipeline.d.ts +2 -0
- package/node_modules/@weavecode/server/dist/daemon/hook-pipeline.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/hooks-routes.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/http.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/liveness.d.ts +7 -0
- package/node_modules/@weavecode/server/dist/daemon/liveness.js +1 -0
- package/node_modules/@weavecode/server/dist/daemon/mcp-orchestration.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/narration-watcher.d.ts +28 -0
- package/node_modules/@weavecode/server/dist/daemon/narration-watcher.js +2 -0
- package/node_modules/@weavecode/server/dist/daemon/opener/backend-ghostty.d.ts +16 -0
- package/node_modules/@weavecode/server/dist/daemon/opener/backend-ghostty.js +1 -0
- package/node_modules/@weavecode/server/dist/daemon/opener/backend-iterm.d.ts +20 -0
- package/node_modules/@weavecode/server/dist/daemon/opener/backend-iterm.js +12 -0
- package/node_modules/@weavecode/server/dist/daemon/opener/backend-konsole.d.ts +23 -0
- package/node_modules/@weavecode/server/dist/daemon/opener/backend-konsole.js +2 -0
- package/node_modules/@weavecode/server/dist/daemon/opener/backend-terminal-app.d.ts +19 -0
- package/node_modules/@weavecode/server/dist/daemon/opener/backend-terminal-app.js +1 -0
- package/node_modules/@weavecode/server/dist/daemon/opener/backend-wezterm.d.ts +87 -0
- package/node_modules/@weavecode/server/dist/daemon/opener/backend-wezterm.js +1 -0
- package/node_modules/@weavecode/server/dist/daemon/opener/backend-wt.d.ts +45 -0
- package/node_modules/@weavecode/server/dist/daemon/opener/backend-wt.js +1 -0
- package/node_modules/@weavecode/server/dist/daemon/opener/backend.d.ts +115 -0
- package/node_modules/@weavecode/server/dist/daemon/opener/backend.js +1 -0
- package/node_modules/@weavecode/server/dist/daemon/opener/launch.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/opener/pty-terminals.js +4 -4
- package/node_modules/@weavecode/server/dist/daemon/opener/shared.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/opener/wezterm-mux.d.ts +8 -5
- package/node_modules/@weavecode/server/dist/daemon/opener/wezterm-mux.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/opener/wt.js +3 -3
- package/node_modules/@weavecode/server/dist/daemon/opener.d.ts +23 -120
- package/node_modules/@weavecode/server/dist/daemon/opener.js +1 -13
- package/node_modules/@weavecode/server/dist/daemon/port.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/project-files.d.ts +17 -2
- package/node_modules/@weavecode/server/dist/daemon/project-files.js +2 -1
- package/node_modules/@weavecode/server/dist/daemon/project-harnesses.d.ts +2 -0
- package/node_modules/@weavecode/server/dist/daemon/project-harnesses.js +2 -2
- package/node_modules/@weavecode/server/dist/daemon/project-updates-refresher.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/prompt-images.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/routes/hooks-admin.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/routes/market.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/routes/orchestration.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/routes/path-refs.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/routes/project-files.d.ts +6 -0
- package/node_modules/@weavecode/server/dist/daemon/routes/project-files.js +1 -0
- package/node_modules/@weavecode/server/dist/daemon/routes/projects.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/routes/search.d.ts +38 -0
- package/node_modules/@weavecode/server/dist/daemon/routes/search.js +1 -0
- package/node_modules/@weavecode/server/dist/daemon/routes/session-control.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/routes/session-insights.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/routes/settings-statusline.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/routes/uploads.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/routes/watches.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/server.d.ts +8 -2
- package/node_modules/@weavecode/server/dist/daemon/server.js +8 -8
- package/node_modules/@weavecode/server/dist/daemon/session-open.d.ts +10 -1
- package/node_modules/@weavecode/server/dist/daemon/session-open.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/session-probe.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/settings.js +2 -2
- package/node_modules/@weavecode/server/dist/daemon/snapshot-refresher.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/sse-hub.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/start.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/state.js +2 -2
- package/node_modules/@weavecode/server/dist/daemon/static.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/terminal-topology-refresher.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/tls.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/toolkit-routes.js +1 -1
- package/node_modules/@weavecode/server/dist/daemon/upload-sessions.js +1 -1
- package/node_modules/@weavecode/server/dist/db/db.js +5 -2
- package/node_modules/@weavecode/server/dist/db/layout.js +1 -1
- package/node_modules/@weavecode/server/dist/hooks/answer-keys.js +1 -1
- package/node_modules/@weavecode/server/dist/hooks/bus.d.ts +10 -0
- package/node_modules/@weavecode/server/dist/hooks/bus.js +1 -1
- package/node_modules/@weavecode/server/dist/hooks/dashboard-rate.js +1 -1
- package/node_modules/@weavecode/server/dist/hooks/decision-judge.js +1 -1
- package/node_modules/@weavecode/server/dist/hooks/delivery/ack-gate.d.ts +20 -0
- package/node_modules/@weavecode/server/dist/hooks/delivery/ack-gate.js +1 -1
- package/node_modules/@weavecode/server/dist/hooks/delivery/channels.js +1 -1
- package/node_modules/@weavecode/server/dist/hooks/delivery/keys.d.ts +7 -1
- package/node_modules/@weavecode/server/dist/hooks/delivery/keys.js +1 -1
- package/node_modules/@weavecode/server/dist/hooks/delivery/queue.d.ts +4 -4
- package/node_modules/@weavecode/server/dist/hooks/delivery/queue.js +1 -1
- package/node_modules/@weavecode/server/dist/hooks/delivery/relay.js +1 -1
- package/node_modules/@weavecode/server/dist/hooks/delivery/send.js +2 -2
- package/node_modules/@weavecode/server/dist/hooks/delivery/views.d.ts +3 -1
- package/node_modules/@weavecode/server/dist/hooks/delivery/views.js +1 -1
- package/node_modules/@weavecode/server/dist/hooks/dispatcher.d.ts +5 -0
- package/node_modules/@weavecode/server/dist/hooks/dispatcher.js +6 -6
- package/node_modules/@weavecode/server/dist/hooks/edge-extract.js +1 -1
- package/node_modules/@weavecode/server/dist/hooks/handlers/webhook.js +1 -1
- package/node_modules/@weavecode/server/dist/hooks/headless-runner.js +2 -2
- package/node_modules/@weavecode/server/dist/hooks/inbox-socket.js +2 -2
- package/node_modules/@weavecode/server/dist/hooks/inbox-worker.d.ts +15 -0
- package/node_modules/@weavecode/server/dist/hooks/inbox-worker.js +3 -3
- package/node_modules/@weavecode/server/dist/hooks/match.js +1 -1
- package/node_modules/@weavecode/server/dist/hooks/message-deliverer.d.ts +64 -6
- package/node_modules/@weavecode/server/dist/hooks/message-deliverer.js +3 -2
- package/node_modules/@weavecode/server/dist/hooks/mirror.js +4 -4
- package/node_modules/@weavecode/server/dist/hooks/orchestration-engine.js +7 -7
- package/node_modules/@weavecode/server/dist/hooks/orchestration-graph.js +1 -1
- package/node_modules/@weavecode/server/dist/hooks/plugin-installer.d.ts +5 -0
- package/node_modules/@weavecode/server/dist/hooks/plugin-installer.js +3 -3
- package/node_modules/@weavecode/server/dist/hooks/plugin-loader.js +1 -1
- package/node_modules/@weavecode/server/dist/hooks/plugin-project-state.js +1 -1
- package/node_modules/@weavecode/server/dist/hooks/prompt-flusher.js +1 -1
- package/node_modules/@weavecode/server/dist/hooks/promptbox.js +8 -8
- package/node_modules/@weavecode/server/dist/hooks/push-notify.js +2 -2
- package/node_modules/@weavecode/server/dist/hooks/question-tracker.js +1 -1
- package/node_modules/@weavecode/server/dist/hooks/registry.js +1 -1
- package/node_modules/@weavecode/server/dist/hooks/resume-runner.js +1 -1
- package/node_modules/@weavecode/server/dist/hooks/session-purge.js +1 -1
- package/node_modules/@weavecode/server/dist/hooks/session-sweeper.d.ts +2 -0
- package/node_modules/@weavecode/server/dist/hooks/session-sweeper.js +1 -1
- package/node_modules/@weavecode/server/dist/hooks/side-questions.js +1 -1
- package/node_modules/@weavecode/server/dist/hooks/synthetic-sessions.js +1 -1
- package/node_modules/@weavecode/server/dist/hooks/toolkit-scan.js +1 -1
- package/node_modules/@weavecode/server/dist/hooks/toolkit.js +5 -5
- package/node_modules/@weavecode/server/dist/hooks/watch-engine.js +1 -1
- package/node_modules/@weavecode/server/dist/index.d.ts +1 -0
- package/node_modules/@weavecode/server/dist/index.js +1 -1
- package/node_modules/@weavecode/server/dist/install/apply-update.js +1 -1
- package/node_modules/@weavecode/server/dist/install/capabilities.js +1 -1
- package/node_modules/@weavecode/server/dist/install/codex-toml.js +1 -1
- package/node_modules/@weavecode/server/dist/install/file-assets.js +1 -1
- package/node_modules/@weavecode/server/dist/install/fingerprint.js +1 -1
- package/node_modules/@weavecode/server/dist/install/global-config.js +1 -1
- package/node_modules/@weavecode/server/dist/install/global-file-assets.js +1 -1
- package/node_modules/@weavecode/server/dist/install/init-files.js +2 -2
- package/node_modules/@weavecode/server/dist/install/install-ledger.js +1 -1
- package/node_modules/@weavecode/server/dist/install/installer.js +1 -1
- package/node_modules/@weavecode/server/dist/install/library-index.js +1 -1
- package/node_modules/@weavecode/server/dist/install/mcp-rows.js +1 -1
- package/node_modules/@weavecode/server/dist/install/plugin-install.js +1 -1
- package/node_modules/@weavecode/server/dist/install/plugin-rows.js +1 -1
- package/node_modules/@weavecode/server/dist/install/plugin-templates.js +1 -1
- package/node_modules/@weavecode/server/dist/install/project-config.js +1 -1
- package/node_modules/@weavecode/server/dist/install/reader.js +1 -1
- package/node_modules/@weavecode/server/dist/install/scan-cache.js +1 -1
- package/node_modules/@weavecode/server/dist/install/scanner.js +1 -1
- package/node_modules/@weavecode/server/dist/install/settings-mcp.js +2 -2
- package/node_modules/@weavecode/server/dist/install/updates.js +1 -1
- package/node_modules/@weavecode/server/dist/market/builtin.js +1 -1
- package/node_modules/@weavecode/server/dist/market/identity.js +1 -1
- package/node_modules/@weavecode/server/dist/market/import.js +2 -2
- package/node_modules/@weavecode/server/dist/market/refresh.js +1 -1
- package/node_modules/@weavecode/server/dist/market/resolve.js +1 -1
- package/node_modules/@weavecode/server/dist/market/updates.js +1 -1
- package/node_modules/@weavecode/server/dist/registry.js +2 -2
- package/node_modules/@weavecode/server/dist/repositories/hook-dispatches.js +5 -5
- package/node_modules/@weavecode/server/dist/repositories/hook-events.d.ts +19 -1
- package/node_modules/@weavecode/server/dist/repositories/hook-events.js +9 -3
- package/node_modules/@weavecode/server/dist/repositories/hook-rules.js +4 -4
- package/node_modules/@weavecode/server/dist/repositories/libraries.js +1 -1
- package/node_modules/@weavecode/server/dist/repositories/orchestrations.js +7 -7
- package/node_modules/@weavecode/server/dist/repositories/plugin-states.js +1 -1
- package/node_modules/@weavecode/server/dist/repositories/projects.js +2 -2
- package/node_modules/@weavecode/server/dist/repositories/push-subscriptions.js +2 -2
- package/node_modules/@weavecode/server/dist/repositories/session-watches.js +4 -4
- package/node_modules/@weavecode/server/dist/repositories/sessions.d.ts +12 -2
- package/node_modules/@weavecode/server/dist/repositories/sessions.js +2 -2
- package/node_modules/@weavecode/server/dist/repositories/side-questions.d.ts +7 -0
- package/node_modules/@weavecode/server/dist/repositories/side-questions.js +8 -5
- package/node_modules/@weavecode/server/dist/repositories/uploads.js +11 -11
- package/node_modules/@weavecode/server/dist/statusline/cache-sweeper.js +1 -1
- package/node_modules/@weavecode/server/dist/statusline/generator.js +1 -1
- package/node_modules/@weavecode/server/dist/statusline/manager.js +3 -3
- package/node_modules/@weavecode/server/dist/surfaces.d.ts +8 -1
- package/node_modules/@weavecode/server/dist/surfaces.js +1 -1
- package/node_modules/@weavecode/server/dist/version.d.ts +1 -11
- package/node_modules/@weavecode/server/dist/version.js +1 -1
- package/node_modules/@weavecode/server/dist/watch/cache.js +1 -1
- package/node_modules/@weavecode/server/dist/watch/classifier.js +1 -1
- package/node_modules/@weavecode/server/dist/watch/plugin-mods.js +1 -1
- package/node_modules/@weavecode/server/dist/watch/sync-scheduler.js +1 -1
- package/node_modules/@weavecode/server/dist/watch/watch-service.js +1 -1
- package/node_modules/@weavecode/server/package.json +4 -4
- package/node_modules/@weavecode/server/web/dist/assets/{abnfDiagram-WEYOIA3C-etRkSvQM.js → abnfDiagram-WEYOIA3C-DA-K085F.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{arc-FxRZALAZ.js → arc-BI1jnmdZ.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{architectureDiagram-ZHVYKT53-5OxZ-ffz.js → architectureDiagram-ZHVYKT53-DbdBgric.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{blockDiagram-RJAE7QA3-C-CgMF0O.js → blockDiagram-RJAE7QA3-BPRBmzb-.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{c4Diagram-XDPPPE54-B6TqN1Pw.js → c4Diagram-XDPPPE54-C4D5sRs1.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/channel-DcCJrvon.js +1 -0
- package/node_modules/@weavecode/server/web/dist/assets/{chunk-2E7WHVMD-Bdzr5RRj.js → chunk-2E7WHVMD-9ZSKiNU3.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{chunk-2Q5K7J3B-gBZASjAC.js → chunk-2Q5K7J3B-i0AOjw_8.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{chunk-4EMNKR2T-DSlUhKMw.js → chunk-4EMNKR2T-DTpLfX1H.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{chunk-55XCU76K-BDQ6zpGR.js → chunk-55XCU76K-COQYRD4q.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{chunk-5VM5RSS4-DPnewKbl.js → chunk-5VM5RSS4-VsftEbvo.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{chunk-JWPE2WC7-DagmT8Cc.js → chunk-JWPE2WC7-DonektJN.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{chunk-VQ5W62QI-Da_2PxfM.js → chunk-VQ5W62QI-CaKUwuul.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{chunk-XXDRQBXY-Cdaysois.js → chunk-XXDRQBXY-DXH3D_MT.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{chunk-ZCHMQSOR-CvgYfbjU.js → chunk-ZCHMQSOR-COwyAuGn.js} +2 -2
- package/node_modules/@weavecode/server/web/dist/assets/{classDiagram-v2-4MYWR3UA-ahplYD2h.js → classDiagram-v2-4MYWR3UA-DEvMZ6mX.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{cose-bilkent-JH36ORCC-DFyUfgKj.js → cose-bilkent-JH36ORCC-6JBJHfH6.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{cynefin-EF2NZ3EQ-mr2qRwod.js → cynefin-EF2NZ3EQ-C4GM4sjT.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{cynefinDiagram-WF24UDRP-BC26VqNp.js → cynefinDiagram-WF24UDRP-Cqgi0MBP.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{dagre-NK4GIZVX-DoKn_P1x.js → dagre-NK4GIZVX-CljrnkCY.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{diagram-CBK3MWTC-C9WfEmt3.js → diagram-CBK3MWTC-C3PyOj5J.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{diagram-I5XIIV2D-D4Ibieda.js → diagram-I5XIIV2D-I5brQlaZ.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{diagram-ODIL2UCW-wsLbYLi0.js → diagram-ODIL2UCW-BX9uFNbU.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{diagram-PFBEJUXE-DBioMmDk.js → diagram-PFBEJUXE-y7D-VmqJ.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{diagram-RJA3I4VV-Cl5gKsWm.js → diagram-RJA3I4VV-DLUL8W42.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{diagram-TYUNFSNR-BSXOaZic.js → diagram-TYUNFSNR-DLCC3ILi.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{ebnfDiagram-V4P3TTPT-CJIGOag6.js → ebnfDiagram-V4P3TTPT-D7vALia7.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{elk-QONTBCTQ-D6nd2OVX.js → elk-QONTBCTQ-Ct2_hatz.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{erDiagram-KYQIGQAA-gmXjWsuF.js → erDiagram-KYQIGQAA-DxLai58T.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{flowDiagram-IUGLLWBU-DWAiZ43K.js → flowDiagram-IUGLLWBU-AWn2IHrF.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{ganttDiagram-R7GPNTJY-De4v6Wtt.js → ganttDiagram-R7GPNTJY-DmRHd4Wz.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{gitGraphDiagram-PDYL7XHY-CouLBWOB.js → gitGraphDiagram-PDYL7XHY-Ccj-t3zg.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/index-BSxzia7U.js +1031 -0
- package/node_modules/@weavecode/server/web/dist/assets/index-CEpJpR7P.css +11 -0
- package/node_modules/@weavecode/server/web/dist/assets/{infoDiagram-MVDRKAX5-CeMCdduD.js → infoDiagram-MVDRKAX5-BHquFlQa.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{ishikawaDiagram-HPEHV2GE-DK6hETwg.js → ishikawaDiagram-HPEHV2GE-CVogEbdm.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{journeyDiagram-BOSHW7O7-BcgwTlST.js → journeyDiagram-BOSHW7O7-DC9XG9oh.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{kanban-definition-FNSA4HC5-CTVMJNz2.js → kanban-definition-FNSA4HC5-C_eu7DC_.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{linear-CqQf5eWO.js → linear-keTbWHJ-.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{mermaid.core-B6KZaljU.js → mermaid.core-4sbg0MnY.js} +4 -4
- package/node_modules/@weavecode/server/web/dist/assets/{mindmap-definition-6OY57UG3-cpKvrQTI.js → mindmap-definition-6OY57UG3-kMQS0S2l.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{pegDiagram-ECIUJNBX-Bv2bNqMZ.js → pegDiagram-ECIUJNBX-DcUFoEwP.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{pieDiagram-GNMPY74T-CXOnA429.js → pieDiagram-GNMPY74T-BQJ7WDCx.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{quadrantDiagram-D57K4MC3-BFDUpWZb.js → quadrantDiagram-D57K4MC3-C7Oi1-sq.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{railroadDiagram-Y72NRBL7-BHoDSO0D.js → railroadDiagram-Y72NRBL7-CEF2QbOF.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{requirementDiagram-EQYSW5RA-B8JGji7q.js → requirementDiagram-EQYSW5RA-CTjjFS7X.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{sankeyDiagram-SY24JHO5-BbE2-6ZM.js → sankeyDiagram-SY24JHO5-j0S5kubS.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{sequenceDiagram-BLEHNHQU-DwK4X2MT.js → sequenceDiagram-BLEHNHQU-B76EsZp4.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{sizeCapture-INFHLROL-CY10zRMe.js → sizeCapture-INFHLROL-r0DZuqAy.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{stateDiagram-v2-A6IESKWZ-32t4Zx8b.js → stateDiagram-v2-A6IESKWZ-B4DR9LHz.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{swimlanes-B3ENRKFQ-CZlYQ8_g.js → swimlanes-B3ENRKFQ-Dbcl85ro.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/swimlanesDiagram-AYQRV4AK-CZ_6SSBd.js +8 -0
- package/node_modules/@weavecode/server/web/dist/assets/{timeline-definition-JXYKGLGB-8VsB-Jwg.js → timeline-definition-JXYKGLGB-BlBXXRNf.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{usecaseDiagram-WPOLBNNX-CKOTONay.js → usecaseDiagram-WPOLBNNX-Ck1M0dpc.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{vennDiagram-Q3Y3IDCW-BzrNjxtm.js → vennDiagram-Q3Y3IDCW-N8B-ohWk.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{wardleyDiagram-IVAIDKWA-CrSd-v8I.js → wardleyDiagram-IVAIDKWA-DX-AMXq_.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/assets/{xychartDiagram-4URNHDU4-t9cV9_9b.js → xychartDiagram-4URNHDU4-4fgL48Yl.js} +1 -1
- package/node_modules/@weavecode/server/web/dist/index.html +5 -4
- package/node_modules/@weavecode/templates/package.json +2 -2
- package/node_modules/selfsigned/node_modules/@peculiar/x509/node_modules/@peculiar/asn1-cms/node_modules/@peculiar/asn1-x509-attr/package.json +3 -3
- package/node_modules/selfsigned/node_modules/@peculiar/x509/node_modules/@peculiar/asn1-cms/package.json +4 -4
- package/node_modules/selfsigned/node_modules/@peculiar/x509/node_modules/@peculiar/asn1-csr/package.json +3 -3
- package/node_modules/selfsigned/node_modules/@peculiar/x509/node_modules/@peculiar/asn1-ecc/package.json +3 -3
- package/node_modules/selfsigned/node_modules/@peculiar/x509/node_modules/@peculiar/asn1-pkcs9/node_modules/@peculiar/asn1-pfx/package.json +5 -5
- package/node_modules/selfsigned/node_modules/@peculiar/x509/node_modules/@peculiar/asn1-pkcs9/node_modules/@peculiar/asn1-pkcs8/package.json +3 -3
- package/node_modules/selfsigned/node_modules/@peculiar/x509/node_modules/@peculiar/asn1-pkcs9/node_modules/@peculiar/asn1-x509-attr/package.json +3 -3
- package/node_modules/selfsigned/node_modules/@peculiar/x509/node_modules/@peculiar/asn1-pkcs9/package.json +7 -7
- package/node_modules/selfsigned/node_modules/@peculiar/x509/node_modules/@peculiar/asn1-rsa/package.json +3 -3
- package/node_modules/selfsigned/node_modules/@peculiar/x509/node_modules/@peculiar/asn1-schema/package.json +1 -1
- package/node_modules/selfsigned/node_modules/@peculiar/x509/node_modules/@peculiar/asn1-x509/build/cjs/time.js +1 -1
- package/node_modules/selfsigned/node_modules/@peculiar/x509/node_modules/@peculiar/asn1-x509/build/es2015/time.js +1 -1
- package/node_modules/selfsigned/node_modules/@peculiar/x509/node_modules/@peculiar/asn1-x509/package.json +2 -2
- package/package.json +6 -6
- package/node_modules/@weavecode/server/web/dist/assets/channel-Dv4QUMOJ.js +0 -1
- package/node_modules/@weavecode/server/web/dist/assets/index-BXhLerZ4.js +0 -1008
- package/node_modules/@weavecode/server/web/dist/assets/index-BYRxC-Zz.css +0 -11
- package/node_modules/@weavecode/server/web/dist/assets/swimlanesDiagram-AYQRV4AK-BlIxQLON.js +0 -8
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{
|
|
2
|
-
${t}`:n,multiSelect:!1,options:[...s?
|
|
1
|
+
import{readFile as b}from"node:fs/promises";import{HARNESS_LIFECYCLE as S}from"@weavecode/core";import{CLAUDE_PLAN as k}from"./plan.js";import{defaultPermissionModeOf as g}from"./model-aliases.js";import{preQuestionTextAt as w}from"./transcript.js";const f="\x1B[B",a=" ",T="\x1B[Z",A=2e3,m="(preview cannot be shown in full \u2014 compare the option labels and descriptions instead)",N="No preview available",E="n",_="press n to add notes",O=/[\p{M}\u200b-\u200f\u2028-\u202e\u2060-\u206f\u180b-\u180f\ufe0e\ufe0f]/u,P=[{keys:["1"],label:"Yes, and switch to default (ask each time) for this session"},{keys:["2"],label:"No"}],v={bypassPermissions:"BYPASS PERMISSIONS (no further prompts)"};export function planApprovalOptions(e){return e==null||e==="default"||e==="plan"?P.map(t=>({...t})):[{keys:["1"],label:`Yes, and switch to ${v[e]??e} for this session`},{keys:["2"],label:"Yes, manually approve edits"},{keys:["3"],label:"Tell Claude what to change",description:"shift+tab to approve with this feedback",input:!0,textTail:[T]}]}const I=[{keys:["1"],label:"Yes"},{keys:["2"],label:"Yes, and don't ask again for this tool"},{keys:["3"],label:"No, and tell Claude what to do differently (esc)"}],C=[{keys:["1"],label:"Yes, and tell Claude what to do next"},{keys:["2"],label:"No"}],h={key:"AskUserQuestion:opaque",header:null,question:"The session is asking a question (options unavailable \u2014 answer in its terminal)",multiSelect:!1,options:[]};function L(e){if(!e||typeof e!="object")return null;const t=e,s=r(t.to_model),n=r(t.from_model);return!s||!n||s===n||t.prompt_cache_warm!==!0?null:{key:"model:switch",header:"Switch model?",question:`Your next response will be slower and use more tokens. This conversation is cached for the current model. Switching to ${s} means the full history gets re-read on your next message.`,multiSelect:!1,options:[{keys:["1"],label:`Yes, switch to ${s}`},{keys:["2"],label:"No, go back"}]}}function R(e){if(e==null||typeof e!="object")return"";try{const t=JSON.stringify(e);return!t||t==="{}"?"":t.length>160?`${t.slice(0,160)}\u2026`:t}catch{return""}}function q(e,t){return[t?{keys:[String(e+1)],label:"Type something",input:!0,textFocus:Array.from({length:e},()=>f),textTail:[a,"\r"]}:{keys:[String(e+1)],label:"Type something",input:!0,textTail:["\r"]},{keys:[String(e+2)],label:"Chat about this",chat:!0}]}function Q(){return{key:"AskUserQuestion:submit",header:"Submit",question:"Review your answers",multiSelect:!1,submit:!0,options:[{keys:[a,"1"],label:"Submit answers"},{keys:[a,"2"],label:"Cancel"}]}}function r(e){return typeof e=="string"&&e?e:null}function Y(e){if(!Array.isArray(e))return[];const t=[];for(const s of e){if(!s||typeof s!="object")continue;const n=r(s.label);if(!n)continue;const o=s.description;t.push({keys:[String(t.length+1)],label:n,description:typeof o=="string"&&o?o:null,preview:x(s.preview)})}return t}function x(e){return typeof e!="string"?null:e.length>A?m:e.replace(/�/g,"").trim()?O.test(e)?m:e:null}function U(e,t){return t<2?[String(e+1)]:[String(e===0?2:1),String(e+1)]}function $(e){return e.map((t,s)=>({keys:U(s,e.length),commit:["\r"],label:t.label,description:t.description,preview:t.preview??N}))}function M(e){const t=[];return e>=2&&t.push({keys:[E],label:"Notes:",description:_,input:!0,textTail:["\r"]}),t.push({keys:[String(e),f,"\r"],label:"Chat about this",chat:!0}),t}export const CLAUDE_BLOCKING_PROMPT={plan:k,blockingTools:S.claude.questionTools,permissionNotificationType:"permission_prompt",silentPermissionModes:["bypassPermissions","dontAsk"],permissionQuestion(e){const t=e.toolName?`${e.toolName}${e.toolInput?` ${R(e.toolInput)}`:""}`:"",s=e.permissionMode==="auto"||/classifier/i.test(e.message??""),n=e.message?.trim()||"Claude needs your permission";return{key:"permission:confirm",header:s?"Permission (auto mode)":"Permission",question:t?`${n}
|
|
2
|
+
${t}`:n,multiSelect:!1,options:[...s?C:I]}},parseQuestions(e,t){if(e==="AskUserQuestion"){const s=t&&typeof t=="object"?t.questions:void 0;if(!Array.isArray(s))return[h];const n=[];for(const o of s){if(!o||typeof o!="object")continue;const l=r(o.question),c=r(o.header),u=o.multiSelect===!0,i=Y(o.options);if(!l||i.length===0)continue;const y=c??l.slice(0,24),p=!u&&i.some(d=>d.preview!=null);n.push({key:`AskUserQuestion:${y}`,header:c,question:l,options:p?[...$(i),...M(i.length)]:[...i,...q(i.length,u)],multiSelect:u,previewMode:p})}return n.length===0?[h]:((n.length>=2||n.some(o=>o.multiSelect))&&n.push(Q()),n)}return[{key:"ExitPlanMode:approve",header:"Exit plan mode?",question:"Claude wants to exit plan mode",multiSelect:!1,options:planApprovalOptions(g())}]},eventQuestion(e,t){return e==="PreModelSwitch"?L(t.raw):null},async preQuestion(e){if(!e)return null;let t;try{t=await b(e,"utf8")}catch{return null}return w(t)}};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export const CLAUDE_RESUME={supported:!0,bin:"claude",args:
|
|
1
|
+
export const CLAUDE_RESUME={supported:!0,bin:"claude",args:e=>["--resume",e,"-p"],promptStdin:!0,openArgs:e=>["--resume",e],extractArgs:(e,s)=>["--resume",e,"--fork-session","--no-session-persistence","--session-id",s],minVersion:"2.1.287"};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{captureHookGroup as r,sweepWeaveHookEvents as
|
|
1
|
+
import{captureHookGroup as r,sweepWeaveHookEvents as m}from"./capture.js";const S=".claude/helpers/statusline.cjs",d="Generated by weave \u2014 do not edit manually";export const WEAVE_PERMISSIONS_ALLOW=["Bash(npx weave:*)","Bash(pnpm:*)","Bash(npm:*)"],WEAVE_PERMISSIONS_DENY=["Read(./.env)","Read(./.env.*)","Read(./secrets/*)"];export function generateSettingsJson(n){const{components:s,hooks:e,platform:p,helpersDir:o}=n,c={$comment:d};if(s.helpers){const t={};e.preToolUse&&(t.PreToolUse=r("PreToolUse",o)),e.postToolUse&&(t.PostToolUse=r("PostToolUse",o)),e.userPromptSubmit&&(t.UserPromptSubmit=r("UserPromptSubmit",o)),e.sessionStart&&(t.SessionStart=r("SessionStart",o)),e.stop&&(t.Stop=r("Stop",o)),e.stopFailure&&(t.StopFailure=r("StopFailure",o)),e.subagentStop&&(t.SubagentStop=r("SubagentStop",o)),e.subagentStart&&(t.SubagentStart=r("SubagentStart",o)),e.notification&&(t.Notification=r("Notification",o)),e.postToolUseFailure&&(t.PostToolUseFailure=r("PostToolUseFailure",o)),e.permissionRequest&&(t.PermissionRequest=r("PermissionRequest",o)),e.permissionDenied&&(t.PermissionDenied=r("PermissionDenied",o)),e.preCompact&&(t.PreCompact=r("PreCompact",o)),e.sessionEnd&&(t.SessionEnd=r("SessionEnd",o)),e.preModelSwitch&&(t.PreModelSwitch=r("PreModelSwitch",o),t.PostModelSwitch=r("PostModelSwitch",o)),c.hooks=t}return c.permissions={allow:[...WEAVE_PERMISSIONS_ALLOW],deny:[...WEAVE_PERMISSIONS_DENY]},c.env={WEAVE_ENABLED:"true"},s.helpers&&(c.statusLine={type:"command",command:p.os==="windows"?`node "${o}/statusline.cjs"`:"node "+o+"/statusline.cjs",padding:0,refreshInterval:30}),c}export function mergeSettingsJson(n,s){const e={...n},p=s.hooks;if(p&&typeof p=="object"){const i=m(l(e.hooks)?{...e.hooks}:{})??{};for(const[a,f]of Object.entries(p)){const u=i[a];u===void 0?i[a]=f:Array.isArray(u)&&(i[a]=[...u,...Array.isArray(f)?f:[]])}e.hooks=i}const o=e.statusLine;s.statusLine&&(o===void 0||statusLineIsWeave(o))&&(e.statusLine=s.statusLine);const c=s.permissions;if(c&&typeof c=="object"){const i=l(e.permissions)?e.permissions:{};for(const a of["allow","deny"]){const f=c[a],u=i[a];Array.isArray(f)?i[a]=E(u,f):u===void 0&&(i[a]=f)}e.permissions=i}const t=s.env;if(t&&typeof t=="object"){const i=l(e.env)?e.env:{};for(const[a,f]of Object.entries(t))i[a]===void 0&&(i[a]=f);e.env=i}return e}function l(n){return typeof n=="object"&&n!==null&&!Array.isArray(n)}export function statusLineIsWeave(n){if(!l(n))return!1;const s=n.command;return typeof s=="string"&&h(s,S)}function h(n,s){return n.replace(/\\/g,"/").includes(s)}function E(n,s){return Array.isArray(n)?[...n,...s.filter(e=>!n.includes(e))]:[...s]}export function stripWeaveSettings(n){const s={...n};if(l(s.hooks)){const e=m(s.hooks);e?s.hooks=e:delete s.hooks}if(statusLineIsWeave(s.statusLine)&&delete s.statusLine,l(s.permissions)){const e={...s.permissions},p=(o,c)=>{const t=e[o];if(!Array.isArray(t))return;const i=t.filter(a=>!c.includes(a));i.length>0?e[o]=i:delete e[o]};p("allow",WEAVE_PERMISSIONS_ALLOW),p("deny",WEAVE_PERMISSIONS_DENY),Object.keys(e).length>0?s.permissions=e:delete s.permissions}if(l(s.env)){const e={...s.env};delete e.WEAVE_ENABLED,Object.keys(e).length>0?s.env=e:delete s.env}return s.$comment===d&&delete s.$comment,s}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{existsSync as
|
|
2
|
-
`)&&n.length<=80&&!
|
|
1
|
+
import{existsSync as o}from"node:fs";const a=2e3,c=/^[^\x00-\x1f\x7f]+$/,u=/^<(?:analysis|summary)>/,p="exploring|reviewing|inspecting|tracing|checking|locating|reporting|summarizing|examining|reading|searching|scanning|analyzing|investigating|fetching|loading|probing|auditing|mapping|listing|comparing|verifying|testing|extracting|processing|measuring|assessing|evaluating|identifying|confirming|drafting|refactoring|debugging|grepping",f=new RegExp(`^[\\p{P}\\s]*(${p})\\b`,"iu"),l=/\p{Script=Han}/u,S=n=>!n.includes(`
|
|
2
|
+
`)&&n.length<=80&&!l.test(n)&&f.test(n),e=(n,t)=>n&&typeof n=="object"?n[t]:void 0;export const CLAUDE_SIDE_QUESTION={command(n){return`/btw ${n}`},validate(n){const t=n.trim();return t?t.length>a?{ok:!1,error:`\u95EE\u9898\u8FC7\u957F\uFF08\u4E0A\u9650 ${a} \u5B57\u7B26\uFF09`}:c.test(t)?{ok:!0,text:t}:{ok:!1,error:"\u95EE\u9898\u4E0D\u80FD\u542B\u6362\u884C\u6216\u63A7\u5236\u5B57\u7B26\uFF08\u4F1A\u63D0\u524D\u63D0\u4EA4\uFF09"}:{ok:!1,error:"\u95EE\u9898\u4E0D\u80FD\u4E3A\u7A7A"}},answerOf(n,t){if(n!=="SubagentStop")return null;const s=e(t,"raw"),r=e(s,"agent_transcript_path");if(typeof r!="string"||!r||o(r))return null;const g=e(s,"last_assistant_message");if(typeof g!="string")return null;const i=g.trim();return i&&!u.test(i)&&!S(i)?i:null}};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{CONTEXT_STYLE_FORMAT as c,POWERLINE_DEFAULT_GLYPHS as e,SEGMENT_DEFAULT_FORMAT as d,SEGMENT_ORDER as p}from"./config.js";const h={gray:"90",red:"31",green:"32",yellow:"33",blue:"34",magenta:"35",cyan:"36"},f={gray:"100",red:"41",green:"42",yellow:"43",blue:"44",magenta:"45",cyan:"46"},g="\u2588",m="\u2591",v=10,
|
|
1
|
+
import{CONTEXT_STYLE_FORMAT as c,POWERLINE_DEFAULT_GLYPHS as e,SEGMENT_DEFAULT_FORMAT as d,SEGMENT_ORDER as p}from"./config.js";const h={gray:"90",red:"31",green:"32",yellow:"33",blue:"34",magenta:"35",cyan:"36"},f={gray:"100",red:"41",green:"42",yellow:"43",blue:"44",magenta:"45",cyan:"46"},g="\u2588",m="\u2591",v=10,y=8*1024*1024,n=5e3,b=3600,w=60,_=60,C=60,k=5;export function generateStatuslineScript(r,t){const s=JSON.stringify(r),i=JSON.stringify(t.cacheDir),a=JSON.stringify(h),o=JSON.stringify(f),l=JSON.stringify(d),u=JSON.stringify(c);return`#!/usr/bin/env node
|
|
2
2
|
/**
|
|
3
3
|
* weave statusline \u2014 generated by the weave dashboard.
|
|
4
4
|
* Reads Claude Code's statusline JSON from stdin and prints a summary.
|
|
@@ -7,19 +7,19 @@ import{CONTEXT_STYLE_FORMAT as c,POWERLINE_DEFAULT_GLYPHS as e,SEGMENT_DEFAULT_F
|
|
|
7
7
|
*/
|
|
8
8
|
'use strict';
|
|
9
9
|
|
|
10
|
-
const CONFIG = ${
|
|
11
|
-
const ANSI = ${
|
|
12
|
-
const BG = ${
|
|
13
|
-
const SEGMENT_FORMAT = ${
|
|
14
|
-
const CONTEXT_FORMAT = ${
|
|
10
|
+
const CONFIG = ${s};
|
|
11
|
+
const ANSI = ${a};
|
|
12
|
+
const BG = ${o};
|
|
13
|
+
const SEGMENT_FORMAT = ${l};
|
|
14
|
+
const CONTEXT_FORMAT = ${u};
|
|
15
15
|
const BAR_FILL = '${g}';
|
|
16
16
|
const BAR_EMPTY = '${m}';
|
|
17
17
|
const BAR_CELLS = ${v};
|
|
18
|
-
const GIT_IDENTITY_TTL = ${
|
|
19
|
-
const GIT_CHANGES_TTL = ${
|
|
20
|
-
const GIT_BRANCH_TTL = ${
|
|
21
|
-
const GIT_SYNC_TTL = ${
|
|
22
|
-
const GIT_RETRY_TTL = ${
|
|
18
|
+
const GIT_IDENTITY_TTL = ${b};
|
|
19
|
+
const GIT_CHANGES_TTL = ${w};
|
|
20
|
+
const GIT_BRANCH_TTL = ${_};
|
|
21
|
+
const GIT_SYNC_TTL = ${C};
|
|
22
|
+
const GIT_RETRY_TTL = ${k};
|
|
23
23
|
const CACHE_DIR = ${i};
|
|
24
24
|
// Stamped into the row-0 logo so the running version is always visible.
|
|
25
25
|
const WEAVE_VERSION = ${JSON.stringify(t.version)};
|
|
@@ -355,7 +355,7 @@ function sessionTokens(transcriptPath) {
|
|
|
355
355
|
store.tokens[transcriptPath] = entry;
|
|
356
356
|
if (stat.size === entry.offset) return entry.total || null;
|
|
357
357
|
|
|
358
|
-
var len = Math.min(stat.size - entry.offset, ${
|
|
358
|
+
var len = Math.min(stat.size - entry.offset, ${y});
|
|
359
359
|
var buf = Buffer.alloc(len);
|
|
360
360
|
var read = 0;
|
|
361
361
|
var fd = -1;
|
|
@@ -392,8 +392,8 @@ function sessionTokens(transcriptPath) {
|
|
|
392
392
|
+ (usage.cache_read_input_tokens || 0) + (usage.cache_creation_input_tokens || 0);
|
|
393
393
|
}
|
|
394
394
|
entry.offset += consumed;
|
|
395
|
-
if (entry.ids.length > ${
|
|
396
|
-
entry.ids = entry.ids.slice(entry.ids.length - ${
|
|
395
|
+
if (entry.ids.length > ${n}) {
|
|
396
|
+
entry.ids = entry.ids.slice(entry.ids.length - ${n});
|
|
397
397
|
}
|
|
398
398
|
CACHE_DIRTY = true;
|
|
399
399
|
return entry.total || null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{readFileSync as
|
|
1
|
+
import{readFileSync as f}from"node:fs";import{createHash as g}from"node:crypto";import d from"node:path";export function gitCacheKeyOf(c){return g("sha1").update(c.toLowerCase().replace(/\\/g,"/").replace(/\/+$/,"")).digest("hex").slice(0,16)}export function statuslineFactsFromCache(c,l,u=Date.now()){let o;try{o=JSON.parse(f(d.join(c,`git-${gitCacheKeyOf(l)}.json`),"utf-8"))}catch{return null}const s=t=>{const i=o.git?.[t];return!i||typeof i.expires!="number"||i.expires<=u?null:i.value??null},e={},a=s("branch");if(typeof a=="string"&&a){e.git={branch:a};const t=s("sync");t&&typeof t=="object"&&t.sync&&(e.git.ahead=t.ahead??"",e.git.behind=t.behind??"",e.git.sync=t.sync)}const n=s("git_user");n&&typeof n=="object"&&n.user&&(e.git_user={user:n.user,email:n.email??""});const r=s("changes");return r&&typeof r=="object"&&(e.changes={added:String(r.added??0),deleted:String(r.deleted??0),files:String(r.files??0)}),Object.keys(e).length>0?e:null}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{readFile as o,writeFile as m,mkdir as u,access as l}from"node:fs/promises";import n from"node:path";import{SEGMENT_ORDER as p}from"./config.js";import{generateStatuslineScript as f}from"./generator.js";import{statuslineFactsFromCache as
|
|
2
|
-
`,"utf-8")}export const CLAUDE_STATUSLINE={segments:p,tui:"injectable",scriptRelPath:`${
|
|
1
|
+
import{readFile as o,writeFile as m,mkdir as u,access as l}from"node:fs/promises";import n from"node:path";import{SEGMENT_ORDER as p}from"./config.js";import{generateStatuslineScript as f}from"./generator.js";import{statuslineFactsFromCache as S}from"./git-cache.js";const d=".claude/helpers",h="statusline.cjs",E=".claude/settings.json";async function w(t){try{return await l(t),!0}catch{return!1}}export async function ensureSettingsStatusLine(t,e){const r=n.join(t,E),i=process.platform==="win32";let s={};if(await w(r))try{s=JSON.parse(await o(r,"utf-8"))}catch{s={}}const a=e.scriptPath,c=i?`node "${a}"`:`node ${a}`;s.statusLine={type:"command",command:c,padding:0,refreshInterval:Math.max(1,Math.round(e.refreshInterval))},await u(n.dirname(r),{recursive:!0}),await m(r,`${JSON.stringify(s,null,2)}
|
|
2
|
+
`,"utf-8")}export const CLAUDE_STATUSLINE={segments:p,tui:"injectable",scriptRelPath:`${d}/${h}`,generate:(t,e)=>f(t,e),wire:ensureSettingsStatusLine,facts:S};
|
|
@@ -43,3 +43,16 @@ export declare function currentModeAt(tail: string): string | null;
|
|
|
43
43
|
* 更新——与模型/模式的「最后已知」同口径。没有 usage 的行(合成条目等)跳过。
|
|
44
44
|
*/
|
|
45
45
|
export declare function currentContextTokensAt(tail: string): number | null;
|
|
46
|
+
/**
|
|
47
|
+
* 转录尾部最后一条阻塞工具调用(AskUserQuestion / ExitPlanMode)**之前**的
|
|
48
|
+
* assistant 正文——模型提问前写给用户看的说明(「先答中途的问题,再汇报……」)。
|
|
49
|
+
*
|
|
50
|
+
* 为什么绕到转录:阻塞提问不发 Stop,hook 事件里只有工具三元组,这段话没有任何
|
|
51
|
+
* 事件照会。claude 把一条 assistant 消息拆成相邻多行(同 `message.id`),正文与
|
|
52
|
+
* 工具调用常在同一消息里——所以定位按「最后一条阻塞工具所在消息」收,正文取该
|
|
53
|
+
* 消息(含其前同 id 的相邻行)里全部 text 分区的拼接。
|
|
54
|
+
*/
|
|
55
|
+
export declare function preQuestionTextAt(tail: string): {
|
|
56
|
+
at: string;
|
|
57
|
+
text: string;
|
|
58
|
+
} | null;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
const
|
|
2
|
-
`)){if(!
|
|
3
|
-
`)){if(!
|
|
4
|
-
`)){if(!
|
|
5
|
-
`)){if(!
|
|
6
|
-
`)){if(!
|
|
1
|
+
const m="[Request interrupted by user";function y(s){return typeof s=="string"?s:Array.isArray(s)?s.map(e=>{const t=e?.text;return typeof t=="string"?t:""}).join(""):""}export function interruptMarkerAt(s){let e=null;for(const t of s.split(`
|
|
2
|
+
`)){if(!t.includes(m))continue;let n;try{n=JSON.parse(t)}catch{continue}const o=n;if(o?.type!=="user"||!y(o.message?.content).startsWith(m))continue;const i=Date.parse(String(o.timestamp));Number.isFinite(i)&&(e===null||i>e)&&(e=i)}return e}const d="<synthetic>";export function currentModelAt(s){let e=null;for(const t of s.split(`
|
|
3
|
+
`)){if(!t.includes('"model"'))continue;let n;try{n=JSON.parse(t)}catch{continue}const o=n,i=o?.message?.model??o?.model;typeof i!="string"||!i||i===d||(e=i)}return e}export function currentEffortAt(s){let e=null;for(const t of s.split(`
|
|
4
|
+
`)){if(!t.includes('"effort"'))continue;let n;try{n=JSON.parse(t)}catch{continue}const o=n?.effort;typeof o!="string"||!o||(e=o)}return e}export function currentModeAt(s){let e=null;for(const t of s.split(`
|
|
5
|
+
`)){if(!t.includes("permissionMode"))continue;let n;try{n=JSON.parse(t)}catch{continue}const o=n?.permissionMode;typeof o!="string"||!o||(e=o)}return e}export function currentContextTokensAt(s){let e=null;for(const t of s.split(`
|
|
6
|
+
`)){if(!t.includes('"usage"'))continue;let n;try{n=JSON.parse(t)}catch{continue}const i=n?.message?.usage;if(!i||typeof i!="object")continue;const l=c=>typeof i[c]=="number"&&Number.isFinite(i[c])?i[c]:0,f=l("input_tokens")+l("output_tokens")+l("cache_read_input_tokens")+l("cache_creation_input_tokens");f<=0||(e=f)}return e}export function preQuestionTextAt(s){const e=/"(?:AskUserQuestion|ExitPlanMode)"/,t=s.split(`
|
|
7
|
+
`);let n=null,o="";for(let c=t.length-1;c>=0;c--){const a=t[c];if(!e.test(a))continue;let u;try{u=JSON.parse(a)}catch{continue}const r=u;if(!(r?.type!=="assistant"||!r.message?.content?.some(p=>p?.type==="tool_use"&&(p.name==="AskUserQuestion"||p.name==="ExitPlanMode")))){n=typeof r.message?.id=="string"?r.message.id:null,o=typeof r.timestamp=="string"?r.timestamp:"";break}}if(n===null)return null;const i=[];let l=o;for(const c of t){if(!c.includes(n))continue;let a;try{a=JSON.parse(c)}catch{continue}const u=a;if(!(u?.type!=="assistant"||u.message?.id!==n))for(const r of u.message?.content??[])r?.type==="text"&&typeof r.text=="string"&&r.text.trim()&&(i.push(r.text),typeof u.timestamp=="string"&&(l=u.timestamp))}const f=i.join("").trim();return f?{at:l,text:f}:null}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import t from"node:path";import{FILE_ASSET_SPECS as
|
|
1
|
+
import t from"node:path";import{FILE_ASSET_SPECS as c}from"../shared/file-specs.js";import{readCodexMcpServers as d,removeCodexMcpServer as l,writeCodexMcpServer as u}from"./mcp.js";const i=e=>t.join(e,".codex","config.toml");export const CODEX_ASSETS={harness:"codex",targetDir(e,r,o,s){const n=c[e].dirs.codex;if(r!=="user"||!n?.user)throw new Error(`"${e}" has no Codex ${r==="user"?"user":"project"} surface`);return t.join(s,...n.user.split("/"))},projectSkillsRoots:()=>[".codex/skills",".agents/skills"],globalSkillsRoots:e=>[t.join(e,...".agents/skills".split("/")),t.join(e,...".codex/skills".split("/"))],userConfigFile:e=>i(e),mcpScopes:()=>["user"],mcpDest:(e,r)=>e==="user"?i(r):void 0,pluginCacheDir:e=>t.join(e,".codex","plugins","cache"),async mcpRead(e,r,o){if(e!=="user")throw new Error("Codex MCP servers are user-level only (~/.codex/config.toml)");return d(i(o))},async mcpWrite(e,r,o,s,n){if(e!=="user")throw new Error("Codex MCP servers are user-level only (~/.codex/config.toml)");await u(s,n,i(o))},async mcpRemove(e,r,o,s){if(e!=="user")throw new Error("Codex MCP servers are user-level only (~/.codex/config.toml)");return l(s,i(o))},classify(e){return e===".codex"||e.startsWith(".codex/")||e===".agents"||e.startsWith(".agents/")?!0:e.slice(e.lastIndexOf("/")+1)==="AGENTS.md"},ignore(e){return!(e===".codex"||e.startsWith(".codex/")||e===".agents"||e.startsWith(".agents/")||e==="AGENTS.md")}};
|
|
@@ -20,8 +20,7 @@ import type { CaptureDeps, CaptureScriptHealth, CaptureState, CaptureSurface } f
|
|
|
20
20
|
/**
|
|
21
21
|
* 要订阅的 codex 线名(`HookEventsToml` 的键,`codex-rs/config/src/hook_config.rs:39`)
|
|
22
22
|
* ——由 `HARNESS_EVENTS.codex` 反推,不另抄一份线名表。`PreToolUse` /
|
|
23
|
-
* `
|
|
24
|
-
* 眼下没有消费方。
|
|
23
|
+
* `PreModelRequest` / `PostModelRequest` 不订阅:量最大且眼下没有消费方。
|
|
25
24
|
*/
|
|
26
25
|
export declare const CODEX_HOOK_EVENTS: readonly string[];
|
|
27
26
|
/**
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{access as
|
|
2
|
-
`,"utf-8")}export async function readUserCapture(
|
|
1
|
+
import{access as j,mkdir as y,readFile as p,unlink as k,writeFile as E}from"node:fs/promises";import a from"node:path";import{HARNESS_EVENTS as v}from"@weavecode/core";import{generateHookHandler as H}from"../claude/capture.js";import{CANONICAL_TO_WIRE as g}from"./event-source.js";import{codexHome as x}from"./home.js";export const CODEX_HOOK_EVENTS=v.codex.map(e=>g[e]??e),CODEX_HOOK_HANDLER_MARKER="helpers/hook-handler.cjs";const O="@version weave@",C=3;function i(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function d(e){return e.replace(/\\/g,"/")}function h(e){return a.join(x(e),"hooks.json")}function A(e){return a.join(x(e),"helpers")}function l(e){return a.join(A(e),"hook-handler.cjs")}export function groupIsWeave(e){if(!i(e))return!1;const o=e.hooks;return Array.isArray(o)?o.some(t=>{if(!i(t))return!1;const n=t.commandWindows;return typeof t.command=="string"&&d(t.command).includes(CODEX_HOOK_HANDLER_MARKER)||typeof n=="string"&&d(n).includes(CODEX_HOOK_HANDLER_MARKER)}):!1}export function sweepWeaveHookEvents(e){if(!i(e))return{};const o={};for(const[t,n]of Object.entries(e)){if(!Array.isArray(n)){o[t]=n;continue}const r=n.filter(s=>!groupIsWeave(s));r.length>0&&(o[t]=r)}return o}export function captureHookGroup(e,o){const t=`node "${d(o)}"`;return[{hooks:[{type:"command",command:t,commandWindows:t,timeout:C,...e==="PostToolUse"||e==="PermissionRequest"?{async:!0}:{}}]}]}export function captureGroupsPresent(e){if(!i(e))return!1;const o=e.hooks;return i(o)?Object.values(o).some(t=>Array.isArray(t)&&t.some(groupIsWeave)):!1}async function _(e){try{return await j(e),!0}catch{return!1}}async function f(e){let o;try{o=await p(e,"utf-8")}catch{return{}}let t;try{t=JSON.parse(o)}catch{throw new Error(`codex hooks file is not parseable JSON: ${e}`)}if(!i(t))throw new Error(`codex hooks file is not a JSON object: ${e}`);return t}async function m(e,o){await y(a.dirname(e),{recursive:!0}),await E(e,JSON.stringify(o,null,2)+`
|
|
2
|
+
`,"utf-8")}export async function readUserCapture(e={}){const o=e.home,t=await f(h(o)).catch(()=>({}));return{installed:captureGroupsPresent(t),helperPresent:await _(l(o))}}export async function readScriptHealth(e={}){const o=e.home,t=l(o),n=(await readUserCapture({home:o})).installed;let r=null;try{r=await p(t,"utf-8")}catch{r=null}return{source:n?"user":"none",present:r!==null,weaveOwned:r!==null&&r.includes(O),generatedVersion:r?.match(/@version weave@(\S+)/)?.[1]??null,reportsInbox:!1,reportsPaneEnv:r!==null&&r.includes("terminalEnv()")}}export async function installUserCapture(e){const o=e.home,t=A(o);await y(t,{recursive:!0});const n=l(o);await E(n,H(e.version,"codex"),"utf-8");const r=h(o),s=await f(r),c=sweepWeaveHookEvents(s.hooks);for(const u of CODEX_HOOK_EVENTS){const w=c[u];c[u]=Array.isArray(w)?[...w,...captureHookGroup(u,n)]:captureHookGroup(u,n)}s.hooks=c,typeof s.description!="string"&&(s.description="weave hooks (generated \u2014 do not edit)"),await m(r,s)}export async function uninstallUserCapture(e={}){const o=e.home,t=h(o),n=await f(t).catch(()=>null);if(n){const s=sweepWeaveHookEvents(n.hooks);Object.keys(s).length===0?delete n.hooks:n.hooks=s,n.hooks===void 0&&(n.description===void 0||n.description==="weave hooks (generated \u2014 do not edit)")?await k(t).catch(()=>{}):await m(t,n)}const r=l(o);try{(await p(r,"utf-8")).includes(O)&&await k(r)}catch{}}export async function stripProjectCapture(e){const o=a.join(e,".codex","hooks.json"),t=await f(o).catch(()=>null);if(!t)return;const n=sweepWeaveHookEvents(t.hooks);Object.keys(n).length===0?delete t.hooks:t.hooks=n,await m(o,t)}export const CODEX_CAPTURE={harness:"codex",readUserCapture:e=>readUserCapture(e),installUserCapture:e=>installUserCapture(e),uninstallUserCapture:e=>uninstallUserCapture(e),stripProjectCapture,scriptHealth:e=>readScriptHealth(e)};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{spawn as p}from"node:child_process";import{readdir as m,readFile as f,stat as
|
|
2
|
-
`).find(
|
|
3
|
-
`)};
|
|
4
|
-
`))>=0;){const
|
|
1
|
+
import{spawn as p}from"node:child_process";import{readdir as m,readFile as f,stat as y}from"node:fs/promises";import{homedir as S}from"node:os";import r from"node:path";import{codexCommandLine as k}from"./plugins.js";const x=[{name:"model",description:"Choose what model and reasoning effort to use",source:"builtin"},{name:"approvals",description:"Choose what Codex can do without approval",source:"builtin"},{name:"new",description:"Start a new chat during a conversation",source:"builtin"},{name:"init",description:"Create an AGENTS.md file with project instructions",source:"builtin"},{name:"compact",description:"Summarize the conversation to free context",source:"builtin"},{name:"diff",description:"Show the diff of the working tree",source:"builtin"},{name:"mention",description:"Mention a file in the conversation",argsHint:"<path>",source:"builtin"},{name:"status",description:"Show session configuration and token usage",source:"builtin"},{name:"mcp",description:"List configured MCP tools",source:"builtin"},{name:"prompts",description:"Browse and use custom prompts",source:"builtin"},{name:"skills",description:"Browse and use skills",source:"builtin"},{name:"plugins",description:"Browse and manage plugins",source:"builtin"},{name:"review",description:"Review the current changes",source:"builtin"},{name:"undo",description:"Undo the last turn",source:"builtin"},{name:"statusline",description:"Configure the status line",source:"builtin"},{name:"logout",description:"Sign out of your account",source:"builtin"},{name:"quit",description:"Exit Codex",source:"builtin"}];function h(t){const i=/^---\r?\n([\s\S]*?)\r?\n---/.exec(t)?.[1]??"",e=/^description:\s*(.+)$/m.exec(i)?.[1]?.trim().replace(/^["']|["']$/g,"");return e||(t.replace(/^---\r?\n[\s\S]*?\r?\n---\r?\n?/,"").split(`
|
|
2
|
+
`).find(s=>s.trim()!==""&&!s.startsWith("#"))?.trim()??"")}async function w(t){try{const i=await y(t);return i.isDirectory()?"dir":i.isFile()?"file":"other"}catch{return"other"}}async function v(t){try{const i=[];for(const e of await m(t,{withFileTypes:!0})){if(!e.name.endsWith(".md"))continue;const n=r.join(t,e.name);(e.isFile()||e.isSymbolicLink()&&await w(n)==="file")&&i.push(n)}return i}catch{return[]}}async function C(t){try{const i=[];for(const e of await m(t,{withFileTypes:!0})){const n=r.join(t,e.name);(e.isDirectory()||e.isSymbolicLink()&&await w(n)==="dir")&&i.push(n)}return i}catch{return[]}}async function j(t){const i=[];for(const e of await v(t)){const n=h(await f(e,"utf8").catch(()=>""));i.push({name:r.basename(e,".md"),description:n,source:"command"})}return i}async function O(t){const i=[];for(const e of await C(t)){const n=h(await f(r.join(e,"SKILL.md"),"utf8").catch(()=>""));i.push({name:r.basename(e),description:n,source:"skill",sigil:"$"})}return i}function L(t){const i=t?.data;if(!Array.isArray(i))return null;const e=[];for(const n of i){const s=n?.skills;if(Array.isArray(s))for(const c of s){const o=c;typeof o.name!="string"||o.enabled===!1||e.push({name:o.name,description:typeof o.description=="string"?o.description:"",source:typeof o.pluginId=="string"?"plugin":"skill",sigil:"$"})}}return e}const I=1e4;function M(t){return new Promise(i=>{const e=process.platform==="win32",n=p(e?process.env.ComSpec||"cmd.exe":"codex",e?["/d","/s","/c",k(["app-server"])]:["app-server"],{windowsHide:!0,windowsVerbatimArguments:e,stdio:["pipe","pipe","pipe"]});let s=!1,c="";const o=a=>{s||(s=!0,clearTimeout(b),e&&n.pid!==void 0?p("taskkill",["/pid",String(n.pid),"/t","/f"],{windowsHide:!0,stdio:"ignore"}).unref():n.kill("SIGKILL"),i(a))},b=setTimeout(()=>o(null),I),l=a=>{n.stdin?.write(`${JSON.stringify(a)}
|
|
3
|
+
`)};n.on("error",()=>o(null)),n.on("exit",()=>o(null)),n.stdin?.on("error",()=>o(null)),l({jsonrpc:"2.0",id:1,method:"initialize",params:{clientInfo:{name:"weave",title:"weave",version:"1.0.0"}}}),n.stdout?.setEncoding("utf8"),n.stdout?.on("data",a=>{c+=a;let d;for(;(d=c.indexOf(`
|
|
4
|
+
`))>=0;){const g=c.slice(0,d);c=c.slice(d+1);let u=null;try{u=JSON.parse(g)}catch{continue}if(u?.id===1){l({jsonrpc:"2.0",method:"initialized",params:{}}),l({jsonrpc:"2.0",id:2,method:"skills/list",params:{cwds:[t]}});continue}u?.id===2&&o(L(u.result))}})})}function T(t){const i=new Set;return t.filter(e=>i.has(e.name)?!1:(i.add(e.name),!0))}export function createCodexCommandSurface(t={}){const i=t.skills??M;return{harness:"codex",async list({projectPath:e,homedir:n=S()}){const s=process.env.CODEX_HOME??r.join(n,".codex");return T([...x,...await j(r.join(s,"prompts")),...await i(e)??await O(r.join(s,"skills"))])},executions:()=>Promise.resolve(null)}}export const CODEX_COMMANDS=createCodexCommandSurface();
|
|
@@ -1,2 +1,12 @@
|
|
|
1
1
|
import type { ConfigSurface } from '../driver.js';
|
|
2
|
+
/**
|
|
3
|
+
* 预写文件夹信任(init 时替用户答掉 codex 首开的「是否信任该文件夹」):
|
|
4
|
+
* `~/.codex/config.toml` 的 `[projects.'<dir>'] trust_level = "trusted"`。
|
|
5
|
+
*
|
|
6
|
+
* 键形是 codex 自己的归一(本机 0.164 实测):win32 = 全小写 + 反斜杠、
|
|
7
|
+
* literal string;posix = 原样。已有 `projects` 节时先按「忽略大小写与分隔符
|
|
8
|
+
* 等值」找既有键沿用其键形——codex 打开过的项目它自己已经写过一份,weave
|
|
9
|
+
* 再造一份异形键宿主不认。行级编辑保用户注释;损坏抛 `CodexTomlCorruptError`。
|
|
10
|
+
*/
|
|
11
|
+
export declare function ensureTrustAccepted(projectPath: string): Promise<void>;
|
|
2
12
|
export declare const CODEX_CONFIG: ConfigSurface;
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import
|
|
1
|
+
import d from"node:fs/promises";import{homedir as k}from"node:os";import f from"node:path";import{parse as m}from"smol-toml";import{CODEX_CONFIG_GROUPS as S,CODEX_CONFIG_KEYS as b}from"./config-catalog.generated.js";import{codexHome as g}from"./home.js";import{CodexTomlCorruptError as y,setTomlValueInText as x}from"./toml.js";const A=[{id:"user",profiles:!0},{id:"project",profiles:!1}];function h(e,t){switch(e){case"user":return f.join(g(t.homedir),"config.toml");case"project":return f.join(t.projectPath??"",".codex","config.toml");default:return""}}function _(e){return e==="project"?b.filter(t=>t.scope!=="user"):b}function $(e){return new Set(_(e).map(t=>t.key.split(".")[0]))}function p(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function C(e){const t=[],r=e.mcp_servers;return p(r)&&"weave"in r&&t.push("mcp_servers.weave"),t}function F(e,t){let r=e.trim();return r==="~"?t:((r.startsWith("~/")||r.startsWith("~\\"))&&(r=f.join(t,r.slice(2))),f.isAbsolute(r)?r:f.join(g(t),r))}async function T(e){const t=e.values.model_catalog_json;if(typeof t!="string"||!t.trim())return{models:[],baseUrl:"",credential:"none"};const r=F(t,e.homedir??k());let o;try{o=await d.readFile(r,"utf-8")}catch{throw new Error(`model_catalog_json \u6307\u5411\u7684\u6587\u4EF6\u8BFB\u4E0D\u5230\uFF1A${r}`)}let s;try{s=JSON.parse(o)}catch{throw new Error(`model_catalog_json \u4E0D\u662F\u5408\u6CD5 JSON\uFF1A${r}`)}const i=p(s)?s.models:null;if(!Array.isArray(i))throw new Error("model catalog \u7F3A models \u6570\u7EC4");const a=[];for(const n of i)!p(n)||typeof n.slug!="string"||a.push({id:n.slug,...typeof n.display_name=="string"?{name:n.display_name}:{},...typeof n.description=="string"?{createdAt:n.description}:{}});return{models:a,baseUrl:"",credential:"none"}}export async function ensureTrustAccepted(e){const t=f.join(g(),"config.toml");let r="";try{r=await d.readFile(t,"utf-8")}catch{}let o;try{o=m(r)}catch(u){throw new y(`${t} is not valid TOML \u2014 refusing to write: ${u instanceof Error?u.message:String(u)}`)}const s=f.resolve(e),i=p(o.projects)?o.projects:{},a=(u,O)=>process.platform==="win32"?u.toLowerCase().replaceAll("/","\\")===O.toLowerCase().replaceAll("/","\\"):u===O,l=Object.keys(i).find(u=>a(u,s))??L(s),c=x(r,["projects",l,"trust_level"],"trusted");c!==r&&(await d.mkdir(f.dirname(t),{recursive:!0}),await d.writeFile(t,c,"utf-8"))}function L(e){return process.platform==="win32"?e.toLowerCase():e}export const CODEX_CONFIG={harness:"codex",files(e){return A.map(t=>({id:t.id,profiles:t.profiles,path:r=>h(t.id,r)}))},catalog(e){const t=_(e);return{groups:S.filter(r=>t.some(o=>o.group===r)),keys:t,envVars:[]}},async read(e,t){const r=h(e,t);let o;try{o=await d.readFile(r,"utf-8")}catch{return{}}let s;try{s=m(o)}catch(n){throw new y(`${r} is not valid TOML \u2014 refusing to read: ${n instanceof Error?n.message:String(n)}`)}if(!p(s))return{};const i=$(e),a={};for(const n of i)n in s&&(a[n]=s[n]);return a},async write(e,t,r){const o=h(e,t);let s="";try{s=await d.readFile(o,"utf-8")}catch{}let i;try{i=m(s)}catch(c){throw new y(`${o} is not valid TOML \u2014 refusing to write: ${c instanceof Error?c.message:String(c)}`)}const a=$(e),n={...i};for(const c of Object.keys(i))a.has(c)&&!(c in r)&&delete n[c];for(const[c,u]of Object.entries(r))a.has(c.split(".")[0])&&(n[c]=u);const l=E(n);await d.mkdir(f.dirname(o),{recursive:!0}),await d.writeFile(o,l,"utf-8")},managedKeys:C,managedEntries(){return[]},models:T,rawFormat:"toml",parseRaw(e){const t=m(e);if(!p(t))throw new Error("\u9876\u5C42\u5FC5\u987B\u662F\u8868");return t},serializeRaw(e){return E(e)}};function E(e){const t=[],r=(o,s)=>{const i=[],a=[];for(const[n,l]of Object.entries(s))p(l)&&!N(l)?a.push([n,l]):i.push(`${w(n)} = ${j(l)}`);o.length>0&&(i.length>0||a.length===0)&&(t.length>0&&t.push(""),t.push(`[${o.map(w).join(".")}]`)),t.push(...i);for(const[n,l]of a)r([...o,n],l)};return r([],e),t.length>0?`${t.join(`
|
|
2
2
|
`)}
|
|
3
|
-
`:""}function
|
|
3
|
+
`:""}function N(e){return Object.keys(e).length===0}function w(e){return/^[A-Za-z0-9_-]+$/.test(e)?e:JSON.stringify(e)}function j(e){return e==null?'""':typeof e=="boolean"?e?"true":"false":typeof e=="number"?Number.isFinite(e)?String(e):'""':typeof e=="string"?K(e):Array.isArray(e)?`[${e.map(j).join(", ")}]`:`{ ${Object.entries(e).filter(([,r])=>r!==void 0).map(([r,o])=>`${w(r)} = ${j(o)}`).join(", ")} }`}function K(e){const t=e.includes("\\"),r=!e.includes("'")&&!/[\u0000-\u0008\u000b\u000c\u000e-\u001f\u007f\n]/.test(e);return t&&r?`'${e}'`:JSON.stringify(e)}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{existsSync as
|
|
1
|
+
import{existsSync as n}from"node:fs";import s from"node:path";const t=[".codex","AGENTS.md"];function o(e){return t.some(r=>n(s.join(e,r)))}export const CODEX_DETECTOR={markers:t,present:o,detect:e=>({harness:"codex",present:o(e)})};
|
|
@@ -62,7 +62,7 @@ export declare class CodexTurnBuffer {
|
|
|
62
62
|
}
|
|
63
63
|
export declare class CodexEventSource implements EventSource {
|
|
64
64
|
readonly source: "codex";
|
|
65
|
-
readonly events: readonly ["SessionStart", "UserPromptSubmit", "Stop", "TurnAborted", "PostToolUse", "SessionEnd", "PreCompact", "PostCompact", "SubagentStart", "SubagentStop"];
|
|
65
|
+
readonly events: readonly ["SessionStart", "UserPromptSubmit", "Stop", "TurnAborted", "PostToolUse", "SessionEnd", "PreCompact", "PostCompact", "SubagentStart", "SubagentStop", "PermissionRequest"];
|
|
66
66
|
normalize(report: unknown, projectId: number): CodexHookEventInput;
|
|
67
67
|
}
|
|
68
68
|
/** 事件接入实例(driver events 槽消费;normalize 无状态,单例安全)。 */
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{HARNESS_EVENTS as _}from"@weavecode/core";import{capFields as
|
|
2
|
-
`)||null}export function promptOfLine(
|
|
1
|
+
import{HARNESS_EVENTS as _}from"@weavecode/core";import{capFields as l}from"../shared/json-cap.js";import{CLAUDE_EVENT_SOURCE as g}from"../claude/event-source.js";const u={Interrupt:"TurnAborted"};export const CANONICAL_TO_WIRE=Object.fromEntries(Object.entries(u).map(([n,t])=>[t,n]));export function metaOfLine(n){if(n.type!=="session_meta")return null;const t=n.payload??{};return typeof t.session_id!="string"||!t.session_id?null:{sessionId:t.session_id,cwd:typeof t.cwd=="string"&&t.cwd?t.cwd:null}}function i(n){return Array.isArray(n)&&n.map(e=>{const o=e;return(typeof o?.type=="string"?o.type.toLowerCase():"")==="text"&&typeof o.text=="string"?o.text:""}).filter(Boolean).join(`
|
|
2
|
+
`)||null}export function promptOfLine(n){const t=n.payload??{};if(t.type==="user_message")return typeof t.message=="string"&&t.message?t.message:null;if(t.type!=="item_completed")return null;const e=t.item;return e?.type!=="UserMessage"?null:i(e.content)}function p(n){const t=n.payload??{};if(t.type!=="item_completed")return null;const e=t.item;if(!e||typeof e!="object")return null;const o=e.type;return typeof o=="string"?{type:o,item:e}:null}export class CodexTurnBuffer{last=null;report(t){const e=t.payload??{},o=typeof e.type=="string"?e.type:null,s=p(t);if(o==="agent_message")return typeof e.message=="string"&&e.message&&(this.last=e.message),null;if(s?.type==="AgentMessage"){const r=i(s.item.content);return r&&(this.last=r),null}if(promptOfLine(t)!==null)return this.last=null,{eventType:"UserPromptSubmit",payload:{line:t}};if(t.type==="session_meta")return{eventType:"SessionStart",payload:{line:t}};if(o==="task_started")return this.last=null,null;if(o==="task_complete"){const r=this.last;return this.last=null,{eventType:"Stop",payload:{line:t,lastAgentMessage:r}}}return o==="turn_aborted"?{eventType:"TurnAborted",payload:{line:t}}:o==="exec_command_end"||o==="patch_apply_end"?{eventType:"PostToolUse",payload:{line:t}}:s?.type==="CommandExecution"||s?.type==="FileChange"||s?.type==="McpToolCall"?{eventType:"PostToolUse",payload:{line:t}}:null}}function c(n){return Array.isArray(n)?n.filter(t=>typeof t=="string").join(" "):typeof n=="string"?n:null}function x(n){const t=n.payload??{};if(t.type==="exec_command_end")return{toolName:"exec_command",toolInput:{command:c(t.command),cwd:t.cwd??null},toolResponse:{exit_code:t.exit_code??null,status:t.status??null}};if(t.type==="patch_apply_end"){const o=t.changes&&typeof t.changes=="object"?t.changes:{};return{toolName:"apply_patch",toolInput:{paths:Object.keys(o)},toolResponse:{success:t.success??null}}}const e=p(n);if(e?.type==="CommandExecution")return{toolName:"exec_command",toolInput:{command:c(e.item.command),cwd:e.item.cwd??null},toolResponse:{exit_code:e.item.exit_code??null,status:e.item.status??null}};if(e?.type==="FileChange"){const o=e.item.changes&&typeof e.item.changes=="object"?e.item.changes:{};return{toolName:"apply_patch",toolInput:{paths:Object.keys(o)},toolResponse:{status:e.item.status??null}}}return e?.type==="McpToolCall"?{toolName:typeof e.item.name=="string"?e.item.name:"mcp_tool_call",toolInput:e.item.arguments??null,toolResponse:e.item.result??e.item.status??null}:{toolName:null,toolInput:null,toolResponse:null}}function T(n,t){return typeof n.last_agent_message=="string"&&n.last_agent_message?n.last_agent_message:t??null}function h(n){const t=n.error;if(typeof t=="string"&&t)return t;if(t&&typeof t=="object"){const e=t.message;if(typeof e=="string"&&e)return e}return null}export class CodexEventSource{source="codex";events=_.codex;normalize(t,e){const o=t??{};return typeof o.payload=="string"?O(o,e):w(o,e)}}function O(n,t){const e=n.eventType||"unknown",o=u[e]??e;return{...g.normalize({...n,eventType:o},t),source:"codex"}}function w(n,t){const e=n.payload?.line??{},o=e.payload??{},s=n.eventType||"unknown",r={};if(s==="UserPromptSubmit")r.prompt=promptOfLine(e)??"";else if(s==="Stop"){r.last_assistant_message=T(o,n.payload?.lastAgentMessage);const a=h(o);a&&(r.error=a)}else s==="TurnAborted"?(r.reason=o.reason??null,r.duration_ms=o.duration_ms??null):s==="SessionStart"&&(r.source="rollout");e.ordinal!==void 0&&(r.seq=e.ordinal);const{toolName:m,toolInput:f,toolResponse:y}=x(e),d={eventType:s,toolName:m,toolInput:l(f),toolResponse:l(y),cwd:n.cwd??null,raw:l({...r,turn_id:o.turn_id??null,call_id:o.call_id??null})};return{projectId:t,source:"codex",eventType:s,sessionId:n.sessionId,payload:JSON.stringify(d)}}export const CODEX_EVENT_SOURCE=new CodexEventSource;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{createReadStream as f}from"node:fs";import{createInterface as u}from"node:readline";const m=new Set(["image/png","image/jpeg","image/gif","image/webp"]),p=10*1024*1024,l=/^data:([^;,]+);base64,(.*)$/s;function y(e){if(!Array.isArray(e))return[];const t=[];for(const i of e){if(!i||typeof i!="object")continue;const o=i;if(o.type!=="image")continue;const n=typeof o.image_url=="string"?o.image_url:null;if(!n)continue;const c=l.exec(n);if(!c)continue;const r=c[1];if(!m.has(r))continue;const s=Buffer.from(c[2],"base64");s.length===0||s.length>p||t.push({mediaType:r,bytes:s})}return t}function g(e){return Array.isArray(e)?e.map(t=>t&&typeof t=="object"&&t.type==="text"?String(t.text??""):"").join(""):""}export const CODEX_IMAGES={async sessionImages({transcriptPath:e}){if(!e)return null;const t=[],i=u({input:f(e,{encoding:"utf8"}),crlfDelay:1/0});try{for await(const o of i){if(!o.includes('"type":"image"'))continue;const n=JSON.parse(o);if(n.type!=="event_msg")continue;const c=n.payload;if(c?.type!=="item_completed")continue;const r=c.item;if(r?.type!=="UserMessage")continue;const s=r.content,a=y(s);a.length!==0&&t.push({text:g(s),at:typeof n.timestamp=="string"?n.timestamp:null,images:a})}}catch{return null}finally{i.close()}return t}};
|
|
@@ -1,17 +1,23 @@
|
|
|
1
1
|
import type { HarnessDriver } from '../driver.js';
|
|
2
2
|
export { CODEX_DETECTOR } from './detect.js';
|
|
3
3
|
export { CODEX_PLUGIN_STATE } from './plugin-state.js';
|
|
4
|
+
export { CODEX_IMAGES } from './images.js';
|
|
5
|
+
export { CODEX_NARRATION } from './narration.js';
|
|
4
6
|
export { CODEX_MESSAGING } from './messaging.js';
|
|
7
|
+
export { CODEX_QUESTIONS } from './questions.js';
|
|
5
8
|
export { CODEX_RESUME } from './resume.js';
|
|
6
9
|
export { CODEX_EVENT_SOURCE, CodexEventSource, CodexTurnBuffer } from './event-source.js';
|
|
7
10
|
export { CODEX_LOG_SOURCE, CodexLogSource } from './rollout.js';
|
|
8
11
|
export { CODEX_CAPTURE } from './capture.js';
|
|
9
12
|
export { codexInterruptMarkerAt } from './transcript.js';
|
|
10
13
|
export { CODEX_PLUGINS, createCodexPluginSurface, CODEX_MARKETPLACE } from './plugins.js';
|
|
11
|
-
export { CODEX_CONFIG } from './config.js';
|
|
14
|
+
export { CODEX_CONFIG, ensureTrustAccepted as ensureCodexTrustAccepted } from './config.js';
|
|
15
|
+
export { CODEX_PROVISION, codexProvisionCheck } from './provision.js';
|
|
12
16
|
export * from './mcp.js';
|
|
13
17
|
export * from './toml.js';
|
|
14
18
|
export { CODEX_COMMANDS } from './commands.js';
|
|
19
|
+
export { CODEX_LIVENESS, codexLivenessById, codexThreadLockDir, CODEX_LOCK_GRACE_MS, type LockProbe, } from './liveness.js';
|
|
20
|
+
export { CODEX_TITLES, codexSessionTitleOf, codexSetSessionTitle } from './titles.js';
|
|
15
21
|
/**
|
|
16
22
|
* Codex 接入模块的驱动:批 4a 补 assets 槽、批 5 补 detect、P2 补 pluginState
|
|
17
23
|
* (config.toml 启用态)、session-orchestration 批 1 补 messaging(显式不支持面)、
|
|
@@ -19,6 +25,11 @@ export { CODEX_COMMANDS } from './commands.js';
|
|
|
19
25
|
* `<CODEX_HOME>/hooks.json`,见 `capture.ts`)、logs 降为兜底(hooks 未被信任
|
|
20
26
|
* 时仍能看到存量会话)、**plugins 补安装/市场面**(`codex plugin add` /
|
|
21
27
|
* `marketplace`,见 `plugins.ts`)、**config 补配置面**(config.toml 词表 +
|
|
22
|
-
* TOML 读写,见 `config.ts
|
|
28
|
+
* TOML 读写,见 `config.ts`)、**provision 补安装形态检查**(桌面端/CLI 双面孔
|
|
29
|
+
* 的版本漂移警告,见 `provision.ts`)、**images 补入站图**(rollout 的
|
|
30
|
+
* UserMessage 条目,见 `images.ts`)、**questions 补阻塞式交互**(审批对话框
|
|
31
|
+
* 的 PermissionRequest hook 采集 + 稳定键位作答,见 `questions.ts`)、**titles 补
|
|
32
|
+
* 会话标题读写**(session_index 读 + thread/name/set 写,见 `titles.ts`)——init
|
|
33
|
+
* 槽不在此(由 cli init/wiring 携带)。
|
|
23
34
|
*/
|
|
24
35
|
export declare const CODEX_DRIVER: HarnessDriver;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{CODEX_ASSETS as o}from"./assets.js";import{CODEX_CAPTURE as r}from"./capture.js";import{CODEX_CONFIG as e}from"./config.js";import{CODEX_DETECTOR as E}from"./detect.js";import{CODEX_EVENT_SOURCE as t}from"./event-source.js";import{
|
|
1
|
+
import{CODEX_ASSETS as o}from"./assets.js";import{CODEX_CAPTURE as r}from"./capture.js";import{CODEX_CONFIG as e}from"./config.js";import{CODEX_DETECTOR as E}from"./detect.js";import{CODEX_EVENT_SOURCE as t}from"./event-source.js";import{CODEX_IMAGES as m}from"./images.js";import{CODEX_NARRATION as C}from"./narration.js";import{CODEX_MESSAGING as O}from"./messaging.js";import{CODEX_PLUGINS as i}from"./plugins.js";import{CODEX_PLUGIN_STATE as p}from"./plugin-state.js";import{CODEX_PROVISION as s}from"./provision.js";import{CODEX_QUESTIONS as _}from"./questions.js";import{CODEX_RESUME as f}from"./resume.js";import{CODEX_LOG_SOURCE as D}from"./rollout.js";import{CODEX_COMMANDS as S}from"./commands.js";import{CODEX_LIVENESS as X}from"./liveness.js";import{CODEX_TITLES as n}from"./titles.js";export{CODEX_DETECTOR}from"./detect.js";export{CODEX_PLUGIN_STATE}from"./plugin-state.js";export{CODEX_IMAGES}from"./images.js";export{CODEX_NARRATION}from"./narration.js";export{CODEX_MESSAGING}from"./messaging.js";export{CODEX_QUESTIONS}from"./questions.js";export{CODEX_RESUME}from"./resume.js";export{CODEX_EVENT_SOURCE,CodexEventSource,CodexTurnBuffer}from"./event-source.js";export{CODEX_LOG_SOURCE,CodexLogSource}from"./rollout.js";export{CODEX_CAPTURE}from"./capture.js";export{codexInterruptMarkerAt}from"./transcript.js";export{CODEX_PLUGINS,createCodexPluginSurface,CODEX_MARKETPLACE}from"./plugins.js";export{CODEX_CONFIG,ensureTrustAccepted as ensureCodexTrustAccepted}from"./config.js";export{CODEX_PROVISION,codexProvisionCheck}from"./provision.js";export*from"./mcp.js";export*from"./toml.js";export{CODEX_COMMANDS}from"./commands.js";export{CODEX_LIVENESS,codexLivenessById,codexThreadLockDir,CODEX_LOCK_GRACE_MS}from"./liveness.js";export{CODEX_TITLES,codexSessionTitleOf,codexSetSessionTitle}from"./titles.js";export const CODEX_DRIVER={id:"codex",displayName:"Codex",capabilities:["assets","detect","plugins","pluginState","messaging","resume","events","capture","logs","config","commands","provision","liveness","images","narration","questions"],assets:o,detect:E,plugins:i,pluginState:p,messaging:O,resume:f,events:t,capture:r,logs:D,config:e,commands:S,provision:s,liveness:X,images:m,narration:C,questions:_,titles:n};
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { LivenessSurface } from '../driver.js';
|
|
2
|
+
/**
|
|
3
|
+
* codex 会话存活判定:codex 没有进程注册表,但每个活跃 thread 在
|
|
4
|
+
* `<CODEX_HOME>/thread-writer-locks/<sessionId>.lock` 持一把**独占**写锁
|
|
5
|
+
* (先于 rollout 创建、全程持有——实测跨回合与长空闲不释放、正常关闭即删、
|
|
6
|
+
* 崩溃后句柄由内核释放但文件残留)——HELD = 活。
|
|
7
|
+
* node 的 libuv 恒以全共享打开文件探不到独占锁,批量探测经 PowerShell 一枪
|
|
8
|
+
* (`[IO.File]::Open` 以 None 共享开,IOException = HELD;~0.7s/轮,2026-10-26 实测)。
|
|
9
|
+
* `.coordination.lock` 等非 UUID 命名不是 thread 锁,跳过。
|
|
10
|
+
*
|
|
11
|
+
* 失去 HELD(FREE/文件消失)**不当场判死**:锁的释放瞬间(正在关闭、queue
|
|
12
|
+
* 命令触碰)不该让在途消息落定——宽限窗(`CODEX_LOCK_GRACE_MS`)内不输出
|
|
13
|
+
* (当未知),过窗才输出 false。宽限锚点 = 最后一次见到 HELD 的时刻;daemon
|
|
14
|
+
* 重启后状态清零,用 FREE 锁文件的 mtime 兜底(0 字节文件 mtime ≈ 创建时刻
|
|
15
|
+
* ≤ 死亡时刻,宽限只会长不会短)。与 claude 注册表的豁免窗同构。
|
|
16
|
+
*/
|
|
17
|
+
/** 失去 HELD 后的宽限窗:期内当未知,过窗才判死。 */
|
|
18
|
+
export declare const CODEX_LOCK_GRACE_MS = 90000;
|
|
19
|
+
/** 锁目录(`home` 注入供测试;缺省 `codexHome()`)。 */
|
|
20
|
+
export declare function codexThreadLockDir(home?: string): string;
|
|
21
|
+
/**
|
|
22
|
+
* 批量锁探针的注入口(测试注入假实现);缺省 spawn PowerShell 一枪探全部,
|
|
23
|
+
* 回 HELD 的锁名集合。探针失败(超时/spawn 不出)回空集——只损失 true
|
|
24
|
+
* (当未知),绝不产生错误的「死」。
|
|
25
|
+
*/
|
|
26
|
+
export type LockProbe = (lockNames: readonly string[]) => Promise<Set<string>>;
|
|
27
|
+
/**
|
|
28
|
+
* codex 存活图:目录里全部 thread 锁 → 一枪探针 → 合成宽限三态。
|
|
29
|
+
* HELD → true(刷新锚点);失去 HELD → 宽限期内不输出(当未知)、过窗 false;
|
|
30
|
+
* 从没见过的 FREE 锁用 mtime 当锚点(重启后崩溃残留立即可判)。
|
|
31
|
+
* 探针失败回空 map(全不判,不许误判死)。
|
|
32
|
+
*/
|
|
33
|
+
export declare function codexLivenessById(home?: string, now?: number): Promise<Map<string, boolean>>;
|
|
34
|
+
/**
|
|
35
|
+
* codex 的存活面:锁探针异步批量(spawn 一枪)+ 宽限窗状态在本模块——
|
|
36
|
+
* 消费方要同步 map,由装配层缓存(server 的判活装配按 15s 一拍刷新)。
|
|
37
|
+
*/
|
|
38
|
+
export declare const CODEX_LIVENESS: LivenessSurface;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{readdirSync as f,statSync as m}from"node:fs";import u from"node:path";import{codexHome as w}from"./home.js";export const CODEX_LOCK_GRACE_MS=9e4;const h=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\.lock$/i;export function codexThreadLockDir(o){return u.join(w(o),"thread-writer-locks")}async function S(o,a){const{spawn:r}=await import("node:child_process"),i=t=>t.replace(/'/g,"''"),s=["$results = @()",...o.map(t=>{const p=u.win32.join(a,t);return`try { [void][IO.File]::Open('${i(p)}','Open','ReadWrite','None') } catch [IO.IOException] { $results += '${i(t)}' }`}),'$results -join "`n"'].join("; ");return new Promise(t=>{let p="";const c=r("powershell",["-NoProfile","-NonInteractive","-Command",s],{windowsHide:!0,stdio:["ignore","pipe","pipe"]}),e=setTimeout(()=>{c.kill("SIGKILL"),t(new Set)},5e3);c.stdout?.on("data",n=>p+=n.toString()),c.on("error",()=>{clearTimeout(e),t(new Set)}),c.on("close",()=>{clearTimeout(e),t(new Set(p.split(/\r?\n/).map(n=>n.trim()).filter(Boolean)))})})}async function y(){return new Set}const d=new Map;export async function codexLivenessById(o,a=Date.now()){const r=codexThreadLockDir(o);let i;try{i=f(r)}catch{return new Map}const s=i.filter(e=>h.test(e)),p=await(s.length===0?async()=>new Set:process.platform==="win32"?e=>S(e,r):()=>y())(s),c=new Map;for(const e of s){const n=e.replace(/\.lock$/i,"");if(p.has(e)){d.set(n,a),c.set(n,!0);continue}let l=d.get(n);if(l===void 0){try{l=m(u.join(r,e)).mtimeMs}catch{continue}d.set(n,l)}a-l>=CODEX_LOCK_GRACE_MS&&c.set(n,!1)}return c}export const CODEX_LIVENESS={harness:"codex",alive(o){return codexLivenessById().then(a=>{if(!o)return a;const r=new Map;for(const i of o){const s=a.get(i);s!==void 0&&r.set(i,s)}return r})}};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{readFile as
|
|
1
|
+
import{readFile as d,writeFile as g,access as T,mkdir as k}from"node:fs/promises";import $ from"node:path";import{parse as m}from"smol-toml";import{CodexTomlCorruptError as v,parseSectionEntries as w,removeTomlSection as M,renderTomlHeader as S,renderTomlKey as x,renderTomlString as f,sameKey as y,splitTomlSections as l,upsertTomlSection as _}from"./toml.js";export function readCodexMcpFromText(r){let e;try{e=m(r)}catch{return{}}const n=e.mcp_servers;if(!n||typeof n!="object"||Array.isArray(n))return{};const t={};for(const[o,s]of Object.entries(n)){const c=E(s);c&&(t[o]=c)}return t}function j(r){if(!r||typeof r!="object"||Array.isArray(r))return;const e={};for(const[n,t]of Object.entries(r))typeof t=="string"&&(e[n]=t);return Object.keys(e).length>0?e:void 0}function E(r){if(!r||typeof r!="object"||Array.isArray(r))return null;const e=r;if(typeof e.url=="string"){const t={url:e.url},o=j(e.http_headers);return o&&(t.headers=o),typeof e.bearer_token_env_var=="string"&&(t.bearerTokenEnvVar=e.bearer_token_env_var),t}if(typeof e.command!="string")return null;const n={command:e.command};if(Array.isArray(e.args)){const t=e.args.filter(o=>typeof o=="string");t.length>0&&(n.args=t)}if(e.env&&typeof e.env=="object"&&!Array.isArray(e.env)){const t={};for(const[o,s]of Object.entries(e.env))typeof s=="string"&&(t[o]=s);Object.keys(t).length>0&&(n.env=t)}return n}function b(r,e,n,t,o){const s=[];if("command"in e)s.push(`command = ${f(e.command)}`),e.args&&e.args.length>0&&s.push(`args = [${e.args.map(f).join(", ")}]`);else{s.push(`url = ${f(e.url)}`),e.bearerTokenEnvVar&&s.push(`bearer_token_env_var = ${f(e.bearerTokenEnvVar)}`);const a=Object.entries(e.headers??{});a.length>0&&s.push(`http_headers = { ${a.map(([i,u])=>`${x(i)} = ${f(u)}`).join(", ")} }`)}if(o&&n){const a=new Set(["command","args","env","url","http_headers","bearer_token_env_var"]);for(const[i,u]of w(n.lines.slice(1)))a.has(i)||s.push(u)}const c=Object.entries("env"in e?e.env??{}:{}),p=o&&t?w(t.lines.slice(1)).filter(([a])=>!(a in("env"in e?e.env??{}:{}))):[];if(c.length>0||p.length>0){s.push(""),s.push(S([...r,"env"]));for(const[a,i]of c)s.push(`${x(a)} = ${f(i)}`);for(const[,a]of p)s.push(a)}return s}export function upsertCodexMcpInText(r,e,n){const t=["mcp_servers",e],o=A(r);if(o)throw o;const s=l(r),c=s.find(i=>y(i.key,t)),p=s.find(i=>y(i.key,[...t,"env"])),a=_(r,t,b(t,n,c,p,!0));try{return m(a),a}catch{const i=_(r,t,b(t,n,c,p,!1));try{return m(i),i}catch(u){throw new v(`unable to produce valid TOML for [mcp_servers.${e}]: ${u instanceof Error?u.message:String(u)}`)}}}export function removeCodexMcpFromText(r,e){return M(r,["mcp_servers",e])}function A(r){return l(r)[0].lines.find(t=>/^\s*mcp_servers\s*=/.test(t))?new v('~/.codex/config.toml defines "mcp_servers" as an inline value \u2014 weave only manages the [mcp_servers.<name>] section form'):null}async function O(r){try{return await d(r,"utf-8")}catch{return""}}async function h(r){try{return await T(r),!0}catch{return!1}}export async function readCodexMcpServers(r){return await h(r)?readCodexMcpFromText(await d(r,"utf-8")):{}}export async function codexMcpExists(r,e){return await h(e)?C(await d(e,"utf-8"),["mcp_servers",r]):!1}function C(r,e){return l(r).some(n=>y(n.key,e))}export async function writeCodexMcpServer(r,e,n){const t=await O(n);if(t.trim()!=="")try{m(t)}catch(o){throw new v(`${n} is not valid TOML \u2014 refusing to write: ${o instanceof Error?o.message:String(o)}`)}await k($.dirname(n),{recursive:!0}),await g(n,upsertCodexMcpInText(t,r,e),"utf-8")}export async function removeCodexMcpServer(r,e){if(!await h(e))return!1;const n=await d(e,"utf-8");try{m(n)}catch(s){throw new v(`${e} is not valid TOML \u2014 refusing to write: ${s instanceof Error?s.message:String(s)}`)}const{text:t,removed:o}=removeCodexMcpFromText(n,r);return o&&await g(e,t,"utf-8"),o}
|
|
@@ -8,9 +8,13 @@ import type { AttachSpec, MessagingSurface, QueuedPromptSpec } from '../driver.j
|
|
|
8
8
|
*/
|
|
9
9
|
export declare const CODEX_QUEUED_PROMPT: QueuedPromptSpec;
|
|
10
10
|
/**
|
|
11
|
-
* codex
|
|
12
|
-
*
|
|
13
|
-
*
|
|
11
|
+
* codex 的附件面:普通文件与图片都收。宿主没有文件附件形态——提示词里一条
|
|
12
|
+
* 绝对路径,模型自己读(读得到读不到由用户的 codex 沙箱/工具配置决定,weave
|
|
13
|
+
* 不替它判断)。图片同走路径:`view_image` 工具默认开启(features 表 Stable +
|
|
14
|
+
* default_enabled,0.164 实测本机 rollout 有真实调用),模型拿路径自己看图;
|
|
15
|
+
* 终端通道里用户粘贴图片路径时宿主也会当场转成图附件(`handle_paste_image_path`),
|
|
16
|
+
* 但那是「粘贴事件」才认,weave 投递的路径就是一段正文——两种形态模型都接得住。
|
|
17
|
+
* queue 通道硬拒 `--images`(CLI 形参),路径文本不受影响。
|
|
14
18
|
*/
|
|
15
19
|
export declare const CODEX_ATTACH: AttachSpec;
|
|
16
20
|
/**
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{existsSync as
|
|
2
|
-
`);return
|
|
1
|
+
import{existsSync as d,readFileSync as l}from"node:fs";import a from"node:path";import{HARNESS_LIFECYCLE as u}from"@weavecode/core";import{CODEX_SIDE_QUESTION as f}from"./side-question.js";function m(){const n=process.env.WEAVE_CODEX_BIN;if(n&&n.trim())return{bin:n.trim(),prefix:[]};if(process.platform!=="win32")return{bin:"codex",prefix:[]};for(const t of(process.env.PATH??"").split(a.delimiter)){if(!t)continue;const s=a.join(t,"codex.exe");if(d(s))return{bin:s,prefix:[]};const e=a.join(t,"codex.cmd");if(d(e))try{const o=l(e,"utf8").split(/\r?\n/).map(c=>c.trim()).find(c=>/^".+?\.exe"/.test(c)),r=/^"(.+?\.exe)"/.exec(o??"");if(r&&d(r[1]))return{bin:r[1],prefix:[]}}catch{}const i=a.join(t,"node_modules","@openai","codex","bin","codex.js");if(d(i))return{bin:process.execPath,prefix:[i]}}return{bin:"codex",prefix:[]}}export const CODEX_QUEUED_PROMPT={command(n,t){const{bin:s,prefix:e}=m();return{bin:s,args:[...e,"queue","--thread",n,"--message",t]}},timeoutMs:3e4},CODEX_ATTACH={kinds:["file","image"],composePrompt(n,t){const s=t.filter(i=>!n.includes(i.path));if(s.length===0)return n;const e=s.map(i=>i.path).join(`
|
|
2
|
+
`);return n?`${n}
|
|
3
3
|
|
|
4
|
-
${
|
|
4
|
+
${e}`:e}};const h={kinds:["file","dir"],lines:!1,expression:({path:n,kind:t})=>t==="dir"?`${n}/`:n,recognize:n=>{const t=[];for(const s of n.matchAll(/(?:^|\s)"([^"]*\s[^"]*)"(?=\s|$)/g)){const e=s[1],i=s.index+(s[0].startsWith(" ")?1:0),o=i+e.length+2;e.startsWith("/")||e.includes(":")||t.push({start:i,end:o,ref:n.slice(i,o),path:e,kind:"file"})}for(const s of n.matchAll(/(?:^|\s)([^\s"]+)(?=\s|$)/g)){const e=s[1];if(!/[./]/.test(e))continue;const i=s.index+(s[0].startsWith(" ")?1:0),o=i+e.length;if(e.startsWith("/")||e.includes(":")||e.includes("\\")||t.some(p=>i>=p.start&&o<=p.end))continue;const r=e.endsWith("/"),c=r?e.slice(0,-1):e;c&&t.push({start:i,end:o,ref:n.slice(i,o),path:c,kind:r?"dir":"file"})}return t.sort((s,e)=>s.start-e.start)}};export const CODEX_MESSAGING={harness:"codex",discovery:!1,prompt:null,promptInbox:null,queuedPrompt:CODEX_QUEUED_PROMPT,inject:null,headless:null,idleSignals:[...u.codex.close,"SessionEnd"],paneEnvSource:"launch",attach:CODEX_ATTACH,pathRefs:h,sideQuestion:f,unsupportedReasons:{discovery:"Codex event ingestion is pending research (BACKLOG \xA710-6); sessions are not discoverable",prompt:"Codex has no native peer-messaging channel; prompts reach it via its own queue or terminal text injection",inject:"Codex has no synchronous injection channel yet (pending research)",headless:"Codex resume is pending research",watch:"Codex error-ended turns emit no Stop; those rounds never fire idle/turnEnd"}};
|