@mindfoldhq/trellis 0.6.0-beta.2 → 0.6.0-beta.21
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/README.md +1 -1
- package/dist/cli/index.d.ts +1 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +58 -2
- package/dist/cli/index.js.map +1 -1
- package/dist/commands/channel/adapters/claude.d.ts +29 -0
- package/dist/commands/channel/adapters/claude.d.ts.map +1 -0
- package/dist/commands/channel/adapters/claude.js +203 -0
- package/dist/commands/channel/adapters/claude.js.map +1 -0
- package/dist/commands/channel/adapters/codex.d.ts +85 -0
- package/dist/commands/channel/adapters/codex.d.ts.map +1 -0
- package/dist/commands/channel/adapters/codex.js +505 -0
- package/dist/commands/channel/adapters/codex.js.map +1 -0
- package/dist/commands/channel/adapters/index.d.ts +84 -0
- package/dist/commands/channel/adapters/index.d.ts.map +1 -0
- package/dist/commands/channel/adapters/index.js +115 -0
- package/dist/commands/channel/adapters/index.js.map +1 -0
- package/dist/commands/channel/adapters/types.d.ts +33 -0
- package/dist/commands/channel/adapters/types.d.ts.map +1 -0
- package/dist/commands/channel/adapters/types.js +2 -0
- package/dist/commands/channel/adapters/types.js.map +1 -0
- package/dist/commands/channel/agent-loader.d.ts +32 -0
- package/dist/commands/channel/agent-loader.d.ts.map +1 -0
- package/dist/commands/channel/agent-loader.js +154 -0
- package/dist/commands/channel/agent-loader.js.map +1 -0
- package/dist/commands/channel/context-loader.d.ts +26 -0
- package/dist/commands/channel/context-loader.d.ts.map +1 -0
- package/dist/commands/channel/context-loader.js +290 -0
- package/dist/commands/channel/context-loader.js.map +1 -0
- package/dist/commands/channel/context.d.ts +16 -0
- package/dist/commands/channel/context.d.ts.map +1 -0
- package/dist/commands/channel/context.js +83 -0
- package/dist/commands/channel/context.js.map +1 -0
- package/dist/commands/channel/create.d.ts +27 -0
- package/dist/commands/channel/create.d.ts.map +1 -0
- package/dist/commands/channel/create.js +39 -0
- package/dist/commands/channel/create.js.map +1 -0
- package/dist/commands/channel/dev-parse-trace.d.ts +14 -0
- package/dist/commands/channel/dev-parse-trace.d.ts.map +1 -0
- package/dist/commands/channel/dev-parse-trace.js +70 -0
- package/dist/commands/channel/dev-parse-trace.js.map +1 -0
- package/dist/commands/channel/guard.d.ts +150 -0
- package/dist/commands/channel/guard.d.ts.map +1 -0
- package/dist/commands/channel/guard.js +474 -0
- package/dist/commands/channel/guard.js.map +1 -0
- package/dist/commands/channel/index.d.ts +3 -0
- package/dist/commands/channel/index.d.ts.map +1 -0
- package/dist/commands/channel/index.js +531 -0
- package/dist/commands/channel/index.js.map +1 -0
- package/dist/commands/channel/interrupt.d.ts +10 -0
- package/dist/commands/channel/interrupt.d.ts.map +1 -0
- package/dist/commands/channel/interrupt.js +22 -0
- package/dist/commands/channel/interrupt.js.map +1 -0
- package/dist/commands/channel/kill.d.ts +7 -0
- package/dist/commands/channel/kill.d.ts.map +1 -0
- package/dist/commands/channel/kill.js +121 -0
- package/dist/commands/channel/kill.js.map +1 -0
- package/dist/commands/channel/list.d.ts +17 -0
- package/dist/commands/channel/list.d.ts.map +1 -0
- package/dist/commands/channel/list.js +233 -0
- package/dist/commands/channel/list.js.map +1 -0
- package/dist/commands/channel/messages.d.ts +15 -0
- package/dist/commands/channel/messages.d.ts.map +1 -0
- package/dist/commands/channel/messages.js +245 -0
- package/dist/commands/channel/messages.js.map +1 -0
- package/dist/commands/channel/rm.d.ts +27 -0
- package/dist/commands/channel/rm.d.ts.map +1 -0
- package/dist/commands/channel/rm.js +216 -0
- package/dist/commands/channel/rm.js.map +1 -0
- package/dist/commands/channel/run.d.ts +30 -0
- package/dist/commands/channel/run.d.ts.map +1 -0
- package/dist/commands/channel/run.js +130 -0
- package/dist/commands/channel/run.js.map +1 -0
- package/dist/commands/channel/send.d.ts +11 -0
- package/dist/commands/channel/send.d.ts.map +1 -0
- package/dist/commands/channel/send.js +24 -0
- package/dist/commands/channel/send.js.map +1 -0
- package/dist/commands/channel/spawn.d.ts +40 -0
- package/dist/commands/channel/spawn.d.ts.map +1 -0
- package/dist/commands/channel/spawn.js +244 -0
- package/dist/commands/channel/spawn.js.map +1 -0
- package/dist/commands/channel/store/events.d.ts +39 -0
- package/dist/commands/channel/store/events.d.ts.map +1 -0
- package/dist/commands/channel/store/events.js +87 -0
- package/dist/commands/channel/store/events.js.map +1 -0
- package/dist/commands/channel/store/filter.d.ts +3 -0
- package/dist/commands/channel/store/filter.d.ts.map +1 -0
- package/dist/commands/channel/store/filter.js +2 -0
- package/dist/commands/channel/store/filter.js.map +1 -0
- package/dist/commands/channel/store/lock.d.ts +23 -0
- package/dist/commands/channel/store/lock.d.ts.map +1 -0
- package/dist/commands/channel/store/lock.js +99 -0
- package/dist/commands/channel/store/lock.js.map +1 -0
- package/dist/commands/channel/store/paths.d.ts +63 -0
- package/dist/commands/channel/store/paths.d.ts.map +1 -0
- package/dist/commands/channel/store/paths.js +246 -0
- package/dist/commands/channel/store/paths.js.map +1 -0
- package/dist/commands/channel/store/schema.d.ts +27 -0
- package/dist/commands/channel/store/schema.d.ts.map +1 -0
- package/dist/commands/channel/store/schema.js +34 -0
- package/dist/commands/channel/store/schema.js.map +1 -0
- package/dist/commands/channel/store/thread-state.d.ts +5 -0
- package/dist/commands/channel/store/thread-state.d.ts.map +1 -0
- package/dist/commands/channel/store/thread-state.js +16 -0
- package/dist/commands/channel/store/thread-state.js.map +1 -0
- package/dist/commands/channel/store/watch.d.ts +19 -0
- package/dist/commands/channel/store/watch.d.ts.map +1 -0
- package/dist/commands/channel/store/watch.js +146 -0
- package/dist/commands/channel/store/watch.js.map +1 -0
- package/dist/commands/channel/supervisor/idle.d.ts +46 -0
- package/dist/commands/channel/supervisor/idle.d.ts.map +1 -0
- package/dist/commands/channel/supervisor/idle.js +72 -0
- package/dist/commands/channel/supervisor/idle.js.map +1 -0
- package/dist/commands/channel/supervisor/inbox.d.ts +30 -0
- package/dist/commands/channel/supervisor/inbox.d.ts.map +1 -0
- package/dist/commands/channel/supervisor/inbox.js +160 -0
- package/dist/commands/channel/supervisor/inbox.js.map +1 -0
- package/dist/commands/channel/supervisor/shutdown.d.ts +68 -0
- package/dist/commands/channel/supervisor/shutdown.d.ts.map +1 -0
- package/dist/commands/channel/supervisor/shutdown.js +146 -0
- package/dist/commands/channel/supervisor/shutdown.js.map +1 -0
- package/dist/commands/channel/supervisor/stdout.d.ts +51 -0
- package/dist/commands/channel/supervisor/stdout.d.ts.map +1 -0
- package/dist/commands/channel/supervisor/stdout.js +121 -0
- package/dist/commands/channel/supervisor/stdout.js.map +1 -0
- package/dist/commands/channel/supervisor/turns.d.ts +31 -0
- package/dist/commands/channel/supervisor/turns.d.ts.map +1 -0
- package/dist/commands/channel/supervisor/turns.js +45 -0
- package/dist/commands/channel/supervisor/turns.js.map +1 -0
- package/dist/commands/channel/supervisor/warning.d.ts +48 -0
- package/dist/commands/channel/supervisor/warning.d.ts.map +1 -0
- package/dist/commands/channel/supervisor/warning.js +77 -0
- package/dist/commands/channel/supervisor/warning.js.map +1 -0
- package/dist/commands/channel/supervisor.d.ts +59 -0
- package/dist/commands/channel/supervisor.d.ts.map +1 -0
- package/dist/commands/channel/supervisor.js +344 -0
- package/dist/commands/channel/supervisor.js.map +1 -0
- package/dist/commands/channel/text-body.d.ts +13 -0
- package/dist/commands/channel/text-body.d.ts.map +1 -0
- package/dist/commands/channel/text-body.js +47 -0
- package/dist/commands/channel/text-body.js.map +1 -0
- package/dist/commands/channel/threads.d.ts +39 -0
- package/dist/commands/channel/threads.d.ts.map +1 -0
- package/dist/commands/channel/threads.js +106 -0
- package/dist/commands/channel/threads.js.map +1 -0
- package/dist/commands/channel/title.d.ts +12 -0
- package/dist/commands/channel/title.d.ts.map +1 -0
- package/dist/commands/channel/title.js +24 -0
- package/dist/commands/channel/title.js.map +1 -0
- package/dist/commands/channel/wait.d.ts +17 -0
- package/dist/commands/channel/wait.d.ts.map +1 -0
- package/dist/commands/channel/wait.js +75 -0
- package/dist/commands/channel/wait.js.map +1 -0
- package/dist/commands/init.d.ts +2 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +97 -42
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/mem.d.ts +13 -117
- package/dist/commands/mem.d.ts.map +1 -1
- package/dist/commands/mem.js +168 -1074
- package/dist/commands/mem.js.map +1 -1
- package/dist/commands/uninstall.d.ts.map +1 -1
- package/dist/commands/uninstall.js +28 -2
- package/dist/commands/uninstall.js.map +1 -1
- package/dist/commands/update.d.ts.map +1 -1
- package/dist/commands/update.js +31 -111
- package/dist/commands/update.js.map +1 -1
- package/dist/commands/upgrade.d.ts +28 -0
- package/dist/commands/upgrade.d.ts.map +1 -0
- package/dist/commands/upgrade.js +84 -0
- package/dist/commands/upgrade.js.map +1 -0
- package/dist/commands/workflow.d.ts +35 -0
- package/dist/commands/workflow.d.ts.map +1 -0
- package/dist/commands/workflow.js +219 -0
- package/dist/commands/workflow.js.map +1 -0
- package/dist/configurators/claude.d.ts.map +1 -1
- package/dist/configurators/claude.js +1 -0
- package/dist/configurators/claude.js.map +1 -1
- package/dist/configurators/codex.d.ts.map +1 -1
- package/dist/configurators/codex.js +5 -3
- package/dist/configurators/codex.js.map +1 -1
- package/dist/configurators/shared.js +4 -4
- package/dist/configurators/shared.js.map +1 -1
- package/dist/configurators/workflow.d.ts +8 -0
- package/dist/configurators/workflow.d.ts.map +1 -1
- package/dist/configurators/workflow.js +3 -2
- package/dist/configurators/workflow.js.map +1 -1
- package/dist/migrations/manifests/0.5.10.json +9 -0
- package/dist/migrations/manifests/0.5.11.json +16 -0
- package/dist/migrations/manifests/0.5.12.json +9 -0
- package/dist/migrations/manifests/0.5.13.json +9 -0
- package/dist/migrations/manifests/0.5.14.json +9 -0
- package/dist/migrations/manifests/0.5.15.json +9 -0
- package/dist/migrations/manifests/0.5.16.json +9 -0
- package/dist/migrations/manifests/0.5.17.json +9 -0
- package/dist/migrations/manifests/0.5.18.json +9 -0
- package/dist/migrations/manifests/0.6.0-beta.10.json +9 -0
- package/dist/migrations/manifests/0.6.0-beta.11.json +9 -0
- package/dist/migrations/manifests/0.6.0-beta.12.json +9 -0
- package/dist/migrations/manifests/0.6.0-beta.13.json +9 -0
- package/dist/migrations/manifests/0.6.0-beta.14.json +9 -0
- package/dist/migrations/manifests/0.6.0-beta.15.json +9 -0
- package/dist/migrations/manifests/0.6.0-beta.16.json +9 -0
- package/dist/migrations/manifests/0.6.0-beta.17.json +9 -0
- package/dist/migrations/manifests/0.6.0-beta.18.json +16 -0
- package/dist/migrations/manifests/0.6.0-beta.19.json +9 -0
- package/dist/migrations/manifests/0.6.0-beta.20.json +9 -0
- package/dist/migrations/manifests/0.6.0-beta.21.json +9 -0
- package/dist/migrations/manifests/0.6.0-beta.3.json +9 -0
- package/dist/migrations/manifests/0.6.0-beta.4.json +9 -0
- package/dist/migrations/manifests/0.6.0-beta.5.json +9 -0
- package/dist/migrations/manifests/0.6.0-beta.6.json +16 -0
- package/dist/migrations/manifests/0.6.0-beta.7.json +9 -0
- package/dist/migrations/manifests/0.6.0-beta.8.json +9 -0
- package/dist/migrations/manifests/0.6.0-beta.9.json +9 -0
- package/dist/templates/claude/agents/trellis-check.md +13 -7
- package/dist/templates/claude/agents/trellis-implement.md +8 -7
- package/dist/templates/claude/settings.json +4 -4
- package/dist/templates/codebuddy/agents/trellis-check.md +13 -7
- package/dist/templates/codebuddy/agents/trellis-implement.md +8 -7
- package/dist/templates/codebuddy/settings.json +4 -4
- package/dist/templates/codex/agents/trellis-check.toml +4 -4
- package/dist/templates/codex/agents/trellis-implement.toml +4 -4
- package/dist/templates/codex/config.toml +9 -16
- package/dist/templates/codex/hooks/session-start.py +205 -119
- package/dist/templates/codex/hooks.json +2 -2
- package/dist/templates/codex/skills/before-dev/SKILL.md +12 -6
- package/dist/templates/codex/skills/brainstorm/SKILL.md +69 -457
- package/dist/templates/codex/skills/check/SKILL.md +86 -18
- package/dist/templates/codex/skills/start/SKILL.md +33 -323
- package/dist/templates/common/bundled-skills/trellis-meta/references/customize-local/change-context-loading.md +7 -4
- package/dist/templates/common/bundled-skills/trellis-meta/references/customize-local/change-spec-structure.md +1 -1
- package/dist/templates/common/bundled-skills/trellis-meta/references/customize-local/change-workflow.md +3 -2
- package/dist/templates/common/bundled-skills/trellis-meta/references/local-architecture/context-injection.md +5 -5
- package/dist/templates/common/bundled-skills/trellis-meta/references/local-architecture/spec-system.md +1 -1
- package/dist/templates/common/bundled-skills/trellis-meta/references/local-architecture/task-system.md +35 -6
- package/dist/templates/common/bundled-skills/trellis-meta/references/platform-files/agents.md +5 -4
- package/dist/templates/common/bundled-skills/trellis-spec-bootstarp/SKILL.md +41 -0
- package/dist/templates/common/bundled-skills/trellis-spec-bootstarp/references/mcp-setup.md +90 -0
- package/dist/templates/common/bundled-skills/trellis-spec-bootstarp/references/repository-analysis.md +59 -0
- package/dist/templates/common/bundled-skills/trellis-spec-bootstarp/references/spec-task-planning.md +61 -0
- package/dist/templates/common/bundled-skills/trellis-spec-bootstarp/references/spec-writing.md +70 -0
- package/dist/templates/common/commands/continue.md +6 -5
- package/dist/templates/common/commands/start.md +9 -6
- package/dist/templates/common/skills/before-dev.md +12 -6
- package/dist/templates/common/skills/brainstorm.md +68 -504
- package/dist/templates/common/skills/check.md +7 -1
- package/dist/templates/copilot/hooks/session-start.py +219 -101
- package/dist/templates/copilot/hooks.json +2 -2
- package/dist/templates/copilot/prompts/before-dev.prompt.md +12 -6
- package/dist/templates/copilot/prompts/brainstorm.prompt.md +69 -457
- package/dist/templates/copilot/prompts/check.prompt.md +86 -18
- package/dist/templates/copilot/prompts/parallel.prompt.md +16 -8
- package/dist/templates/copilot/prompts/start.prompt.md +33 -367
- package/dist/templates/cursor/agents/trellis-check.md +13 -7
- package/dist/templates/cursor/agents/trellis-implement.md +8 -7
- package/dist/templates/cursor/hooks.json +1 -7
- package/dist/templates/droid/droids/trellis-check.md +13 -7
- package/dist/templates/droid/droids/trellis-implement.md +8 -7
- package/dist/templates/droid/settings.json +4 -4
- package/dist/templates/gemini/agents/trellis-check.md +11 -5
- package/dist/templates/gemini/agents/trellis-implement.md +7 -6
- package/dist/templates/gemini/settings.json +2 -2
- package/dist/templates/kiro/agents/trellis-check.json +1 -1
- package/dist/templates/kiro/agents/trellis-implement.json +1 -1
- package/dist/templates/markdown/spec/guides/code-reuse-thinking-guide.md.txt +127 -9
- package/dist/templates/markdown/spec/guides/cross-layer-thinking-guide.md.txt +171 -6
- package/dist/templates/markdown/spec/guides/cross-platform-thinking-guide.md.txt +333 -43
- package/dist/templates/markdown/spec/guides/index.md.txt +18 -0
- package/dist/templates/opencode/agents/trellis-check.md +13 -7
- package/dist/templates/opencode/agents/trellis-implement.md +9 -8
- package/dist/templates/opencode/lib/session-utils.js +212 -123
- package/dist/templates/opencode/lib/trellis-context.js +73 -11
- package/dist/templates/opencode/plugins/inject-subagent-context.js +131 -29
- package/dist/templates/opencode/plugins/inject-workflow-state.js +9 -5
- package/dist/templates/opencode/plugins/session-start.js +9 -1
- package/dist/templates/pi/agents/trellis-check.md +5 -4
- package/dist/templates/pi/agents/trellis-implement.md +5 -4
- package/dist/templates/pi/extensions/trellis/index.ts.txt +1357 -754
- package/dist/templates/qoder/agents/trellis-check.md +11 -5
- package/dist/templates/qoder/agents/trellis-implement.md +7 -6
- package/dist/templates/qoder/settings.json +4 -4
- package/dist/templates/shared-hooks/index.d.ts.map +1 -1
- package/dist/templates/shared-hooks/index.js +0 -1
- package/dist/templates/shared-hooks/index.js.map +1 -1
- package/dist/templates/shared-hooks/inject-subagent-context.py +36 -14
- package/dist/templates/shared-hooks/inject-workflow-state.py +40 -42
- package/dist/templates/shared-hooks/session-start.py +222 -171
- package/dist/templates/trellis/config.yaml +38 -0
- package/dist/templates/trellis/index.d.ts +1 -0
- package/dist/templates/trellis/index.d.ts.map +1 -1
- package/dist/templates/trellis/index.js +2 -0
- package/dist/templates/trellis/index.js.map +1 -1
- package/dist/templates/trellis/scripts/add_session.py +50 -24
- package/dist/templates/trellis/scripts/common/config.py +57 -1
- package/dist/templates/trellis/scripts/common/safe_commit.py +285 -0
- package/dist/templates/trellis/scripts/common/session_context.py +384 -137
- package/dist/templates/trellis/scripts/common/task_context.py +3 -3
- package/dist/templates/trellis/scripts/common/task_store.py +161 -15
- package/dist/templates/trellis/scripts/common/workflow_phase.py +7 -10
- package/dist/templates/trellis/scripts/task.py +3 -3
- package/dist/templates/trellis/workflow.md +119 -98
- package/dist/utils/cwd-guard.d.ts +38 -0
- package/dist/utils/cwd-guard.d.ts.map +1 -0
- package/dist/utils/cwd-guard.js +62 -0
- package/dist/utils/cwd-guard.js.map +1 -0
- package/dist/utils/file-writer.d.ts +13 -0
- package/dist/utils/file-writer.d.ts.map +1 -1
- package/dist/utils/file-writer.js +59 -1
- package/dist/utils/file-writer.js.map +1 -1
- package/dist/utils/manifest-prune.d.ts +61 -0
- package/dist/utils/manifest-prune.d.ts.map +1 -0
- package/dist/utils/manifest-prune.js +136 -0
- package/dist/utils/manifest-prune.js.map +1 -0
- package/dist/utils/task-json.d.ts +9 -42
- package/dist/utils/task-json.d.ts.map +1 -1
- package/dist/utils/task-json.js +8 -45
- package/dist/utils/task-json.js.map +1 -1
- package/dist/utils/template-hash.d.ts +32 -6
- package/dist/utils/template-hash.d.ts.map +1 -1
- package/dist/utils/template-hash.js +53 -31
- package/dist/utils/template-hash.js.map +1 -1
- package/dist/utils/uninstall-scrubbers.d.ts +1 -0
- package/dist/utils/uninstall-scrubbers.d.ts.map +1 -1
- package/dist/utils/uninstall-scrubbers.js +21 -0
- package/dist/utils/uninstall-scrubbers.js.map +1 -1
- package/dist/utils/workflow-resolver.d.ts +86 -0
- package/dist/utils/workflow-resolver.d.ts.map +1 -0
- package/dist/utils/workflow-resolver.js +265 -0
- package/dist/utils/workflow-resolver.js.map +1 -0
- package/package.json +9 -8
|
@@ -0,0 +1,344 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Supervisor process: owns a single worker (claude or codex) and bridges
|
|
3
|
+
* worker ↔ channel events.jsonl.
|
|
4
|
+
*
|
|
5
|
+
* Run as: `trellis channel __supervisor <channel> <worker> <config-path>`
|
|
6
|
+
*
|
|
7
|
+
* Three concurrent loops:
|
|
8
|
+
* 1. stdout reader — parse worker stdout → adapter → append events
|
|
9
|
+
* 2. inbox watcher — read events.jsonl for `to=<worker>` say events,
|
|
10
|
+
* translate via adapter.encodeUserMessage → worker stdin
|
|
11
|
+
* 3. signal handler — SIGTERM → close worker stdin → 3s → SIGTERM → 3s → SIGKILL
|
|
12
|
+
* → write `killed` event → exit
|
|
13
|
+
*/
|
|
14
|
+
import { spawn } from "node:child_process";
|
|
15
|
+
import fs from "node:fs";
|
|
16
|
+
import path from "node:path";
|
|
17
|
+
import { DEFAULT_INBOX_POLICY, } from "@mindfoldhq/trellis-core/channel";
|
|
18
|
+
import { getAdapter } from "./adapters/index.js";
|
|
19
|
+
import { appendEvent } from "./store/events.js";
|
|
20
|
+
import { workerFile } from "./store/paths.js";
|
|
21
|
+
import { scheduleSupervisorIdleTimer } from "./supervisor/idle.js";
|
|
22
|
+
import { runInboxWatcher } from "./supervisor/inbox.js";
|
|
23
|
+
import { createShutdown } from "./supervisor/shutdown.js";
|
|
24
|
+
import { startStdoutPump } from "./supervisor/stdout.js";
|
|
25
|
+
import { TurnTracker } from "./supervisor/turns.js";
|
|
26
|
+
import { scheduleSupervisorTimeoutWarning } from "./supervisor/warning.js";
|
|
27
|
+
const SHUTDOWN_GRACE_MS = 3000;
|
|
28
|
+
/**
|
|
29
|
+
* Entry point invoked by `trellis channel __supervisor <channel> <worker> <config>`.
|
|
30
|
+
*/
|
|
31
|
+
export async function runSupervisor(channelName, workerName, configPath) {
|
|
32
|
+
const config = readConfig(configPath);
|
|
33
|
+
// Self-pid file lets `trellis channel kill` find us.
|
|
34
|
+
const project = process.env.TRELLIS_CHANNEL_PROJECT;
|
|
35
|
+
fs.writeFileSync(workerFile(channelName, workerName, "pid", project), String(process.pid));
|
|
36
|
+
// ── adapter selection ──
|
|
37
|
+
const adapter = getAdapter(config.provider);
|
|
38
|
+
const adapterCtx = adapter.createCtx();
|
|
39
|
+
const view = {
|
|
40
|
+
resume: config.resume,
|
|
41
|
+
model: config.model,
|
|
42
|
+
systemPrompt: config.systemPrompt,
|
|
43
|
+
cwd: config.cwd,
|
|
44
|
+
};
|
|
45
|
+
const args = adapter.buildArgs(view);
|
|
46
|
+
const env = {
|
|
47
|
+
...process.env,
|
|
48
|
+
...config.env,
|
|
49
|
+
TRELLIS_HOOKS: "0",
|
|
50
|
+
TRELLIS_CHANNEL: channelName,
|
|
51
|
+
TRELLIS_CHANNEL_AS: workerName,
|
|
52
|
+
};
|
|
53
|
+
const logPath = workerFile(channelName, workerName, "log", project);
|
|
54
|
+
const log = fs.createWriteStream(logPath);
|
|
55
|
+
log.write(`[supervisor] starting ${adapter.provider} ${args.join(" ")}\n`);
|
|
56
|
+
const child = spawn(adapter.provider, args, {
|
|
57
|
+
cwd: config.cwd,
|
|
58
|
+
env,
|
|
59
|
+
stdio: ["pipe", "pipe", "pipe"],
|
|
60
|
+
});
|
|
61
|
+
// ── shutdown controller declared before listener attachment ──
|
|
62
|
+
// Node fires `error` on next tick when spawn fails (ENOENT / EACCES);
|
|
63
|
+
// create the controller and attach listeners synchronously, with no
|
|
64
|
+
// await between spawn() and child.on("error").
|
|
65
|
+
const shutdown = createShutdown({
|
|
66
|
+
channelName,
|
|
67
|
+
workerName,
|
|
68
|
+
log,
|
|
69
|
+
getChild: () => child,
|
|
70
|
+
graceMs: SHUTDOWN_GRACE_MS,
|
|
71
|
+
timeoutMs: config.timeoutMs,
|
|
72
|
+
...(config.idleTimeoutMs !== undefined
|
|
73
|
+
? { idleTimeoutMs: config.idleTimeoutMs }
|
|
74
|
+
: {}),
|
|
75
|
+
});
|
|
76
|
+
// Gate the `spawned` event behind whichever child lifecycle event fires
|
|
77
|
+
// first: `spawn` (success) or `error` (launch failure, e.g. ENOENT).
|
|
78
|
+
// Without this gate the post-spawn path writes `spawned` even when the
|
|
79
|
+
// process never actually started — and the racing error append makes
|
|
80
|
+
// `spawned` vs `error` ordering non-deterministic. Both rounds of CR
|
|
81
|
+
// converged on this.
|
|
82
|
+
let spawnFailed = false;
|
|
83
|
+
let settleSpawn = () => undefined;
|
|
84
|
+
const spawnSettled = new Promise((resolve) => {
|
|
85
|
+
settleSpawn = resolve;
|
|
86
|
+
});
|
|
87
|
+
// Attach listeners SYNCHRONOUSLY — no awaits between spawn() and these
|
|
88
|
+
// lines. Node fires `error` on next tick when spawn fails (ENOENT etc.),
|
|
89
|
+
// and if no listener is attached by then the supervisor dies with an
|
|
90
|
+
// unhandled error and leaves a stale .pid behind.
|
|
91
|
+
child.stderr.on("data", (b) => log.write(b));
|
|
92
|
+
child.once("spawn", () => {
|
|
93
|
+
settleSpawn();
|
|
94
|
+
});
|
|
95
|
+
child.on("error", (err) => {
|
|
96
|
+
// L1 fix: guard against double-fire of `error` (Node can re-emit it
|
|
97
|
+
// during pipe teardown). The startup-failed path runs an IIFE that
|
|
98
|
+
// owns process.exit; subsequent fires must be no-ops or we'd queue
|
|
99
|
+
// duplicate error events.
|
|
100
|
+
if (spawnFailed)
|
|
101
|
+
return;
|
|
102
|
+
log.write(`[supervisor] worker error: ${err.message}\n`);
|
|
103
|
+
if (!child.pid) {
|
|
104
|
+
// Pre-spawn failure (ENOENT / EACCES): emit ONE `error` event,
|
|
105
|
+
// skip the misleading `spawned{pid:undefined}`, clean up, and exit
|
|
106
|
+
// so the supervisor doesn't linger as a zombie waiting for an
|
|
107
|
+
// `exit` event that Node won't deliver.
|
|
108
|
+
spawnFailed = true;
|
|
109
|
+
settleSpawn();
|
|
110
|
+
void (async () => {
|
|
111
|
+
try {
|
|
112
|
+
await appendEvent(channelName, {
|
|
113
|
+
kind: "error",
|
|
114
|
+
by: `supervisor:${workerName}`,
|
|
115
|
+
message: `worker spawn failed: ${err.message}`,
|
|
116
|
+
provider: config.provider,
|
|
117
|
+
}, project);
|
|
118
|
+
}
|
|
119
|
+
catch {
|
|
120
|
+
// ignore — we're exiting anyway
|
|
121
|
+
}
|
|
122
|
+
await cleanup(channelName, workerName).catch(() => undefined);
|
|
123
|
+
process.exit(1);
|
|
124
|
+
})();
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
// Post-spawn error (worker already running). Claude M2 fix: await
|
|
128
|
+
// the `error` append BEFORE requesting shutdown so `killed` can't
|
|
129
|
+
// land first in events.jsonl.
|
|
130
|
+
//
|
|
131
|
+
// Sync-claim the shutdown reason FIRST so other code paths (e.g.
|
|
132
|
+
// the `await spawnSettled` re-check, future inbox-handler probes)
|
|
133
|
+
// observe `isShuttingDown=true` immediately, before the IIFE
|
|
134
|
+
// suspends on its first await.
|
|
135
|
+
shutdown.claim("crash");
|
|
136
|
+
void (async () => {
|
|
137
|
+
try {
|
|
138
|
+
await appendEvent(channelName, {
|
|
139
|
+
kind: "error",
|
|
140
|
+
by: `supervisor:${workerName}`,
|
|
141
|
+
message: `worker process error: ${err.message}`,
|
|
142
|
+
provider: config.provider,
|
|
143
|
+
}, project);
|
|
144
|
+
}
|
|
145
|
+
catch {
|
|
146
|
+
// ignore
|
|
147
|
+
}
|
|
148
|
+
await shutdown.request("SIGTERM", "crash");
|
|
149
|
+
})();
|
|
150
|
+
});
|
|
151
|
+
child.on("exit", (code, sig) => {
|
|
152
|
+
// Codex #1 + #2 fix: synthesise a fallback terminal event when the
|
|
153
|
+
// adapter never produced one (otherwise `wait --kind done` hangs),
|
|
154
|
+
// and await any in-flight `killed` append from a concurrent shutdown
|
|
155
|
+
// before exiting so the event doesn't race the process death.
|
|
156
|
+
void (async () => {
|
|
157
|
+
await shutdown.finalizeOnExit(code, sig).catch(() => undefined);
|
|
158
|
+
await cleanup(channelName, workerName).catch(() => undefined);
|
|
159
|
+
process.exit(0);
|
|
160
|
+
})();
|
|
161
|
+
});
|
|
162
|
+
// Signal handlers MUST be registered before any await so a SIGTERM
|
|
163
|
+
// arriving during the spawn-settle / spawned-append window funnels
|
|
164
|
+
// into `shutdown.request` instead of using Node's default behaviour
|
|
165
|
+
// (which would orphan the child and skip the `killed` event).
|
|
166
|
+
process.on("SIGTERM", () => {
|
|
167
|
+
void shutdown.request("SIGTERM", readExternalShutdownReason(channelName, workerName, project));
|
|
168
|
+
});
|
|
169
|
+
process.on("SIGINT", () => void shutdown.request("SIGINT", "explicit-kill"));
|
|
170
|
+
// SIGHUP arrives when the parent terminal closes — without this
|
|
171
|
+
// handler Node's default behaviour exits the supervisor before the
|
|
172
|
+
// killed-append lands.
|
|
173
|
+
process.on("SIGHUP", () => void shutdown.request("SIGHUP", "explicit-kill"));
|
|
174
|
+
// Wait until either `spawn` or pre-spawn `error` fires before writing
|
|
175
|
+
// the `spawned` event. The error handler exits the process directly,
|
|
176
|
+
// so reaching this point with `spawnFailed=true` means we already kicked
|
|
177
|
+
// off cleanup and can bail cleanly.
|
|
178
|
+
await spawnSettled;
|
|
179
|
+
if (spawnFailed)
|
|
180
|
+
return;
|
|
181
|
+
// Codex #3 fix: if a signal/timeout requested shutdown while we were
|
|
182
|
+
// waiting for spawn-settled, don't write a misleading `spawned` event;
|
|
183
|
+
// let the in-flight `killed` append complete and bail.
|
|
184
|
+
if (shutdown.isShuttingDown()) {
|
|
185
|
+
await shutdown.awaitFinalize();
|
|
186
|
+
return;
|
|
187
|
+
}
|
|
188
|
+
fs.writeFileSync(workerFile(channelName, workerName, "worker-pid", project), String(child.pid));
|
|
189
|
+
await appendEvent(channelName, {
|
|
190
|
+
kind: "spawned",
|
|
191
|
+
by: config.spawnedBy ?? "main",
|
|
192
|
+
as: workerName,
|
|
193
|
+
provider: config.provider,
|
|
194
|
+
pid: child.pid,
|
|
195
|
+
inboxPolicy: config.inboxPolicy ?? DEFAULT_INBOX_POLICY,
|
|
196
|
+
...(config.agent ? { agent: config.agent } : {}),
|
|
197
|
+
...(config.contextFiles && config.contextFiles.length > 0
|
|
198
|
+
? { files: config.contextFiles }
|
|
199
|
+
: {}),
|
|
200
|
+
...(config.contextManifests && config.contextManifests.length > 0
|
|
201
|
+
? { manifests: config.contextManifests }
|
|
202
|
+
: {}),
|
|
203
|
+
}, project);
|
|
204
|
+
// OOM-guard idle timer: start only after `spawned` is durable. Hooks
|
|
205
|
+
// wired through the TurnTracker pause it mid-turn and reset it on
|
|
206
|
+
// turn finish / interrupted (the same transitions that drive durable
|
|
207
|
+
// `idleSince`). `<=0` short-circuits the timer to a no-op.
|
|
208
|
+
const idleTimer = scheduleSupervisorIdleTimer({
|
|
209
|
+
idleTimeoutMs: config.idleTimeoutMs ?? 0,
|
|
210
|
+
shutdown,
|
|
211
|
+
isChildExited: () => child.exitCode !== null || child.signalCode !== null,
|
|
212
|
+
log,
|
|
213
|
+
});
|
|
214
|
+
const turnTracker = new TurnTracker({
|
|
215
|
+
onIdleExit: () => idleTimer.pause(),
|
|
216
|
+
onIdleEnter: () => idleTimer.reset(),
|
|
217
|
+
});
|
|
218
|
+
process.on("exit", () => idleTimer.cancel());
|
|
219
|
+
// ── 1. stdout reader ──
|
|
220
|
+
startStdoutPump({
|
|
221
|
+
channelName,
|
|
222
|
+
workerName,
|
|
223
|
+
child,
|
|
224
|
+
adapter,
|
|
225
|
+
adapterCtx,
|
|
226
|
+
log,
|
|
227
|
+
shutdown,
|
|
228
|
+
turnTracker,
|
|
229
|
+
});
|
|
230
|
+
// ── timeout guard (anti-zombie) ──
|
|
231
|
+
if (config.timeoutMs && config.timeoutMs > 0) {
|
|
232
|
+
setTimeout(() => {
|
|
233
|
+
log.write(`[supervisor] timeout ${config.timeoutMs}ms reached, killing worker\n`);
|
|
234
|
+
// shutdown.request emits a single `killed{reason:"timeout"}` event;
|
|
235
|
+
// no need to emit a separate one here.
|
|
236
|
+
void shutdown.request("SIGTERM", "timeout");
|
|
237
|
+
}, config.timeoutMs).unref();
|
|
238
|
+
// Fire-and-forget pre-timeout observability warning. One-shot, guarded
|
|
239
|
+
// by shutdown/terminal/exit state so it stays quiet once the worker is
|
|
240
|
+
// already on its way out.
|
|
241
|
+
scheduleSupervisorTimeoutWarning({
|
|
242
|
+
channelName,
|
|
243
|
+
workerName,
|
|
244
|
+
timeoutMs: config.timeoutMs,
|
|
245
|
+
warnBeforeMs: config.warnBeforeMs,
|
|
246
|
+
shutdown,
|
|
247
|
+
isChildExited: () => child.exitCode !== null || child.signalCode !== null,
|
|
248
|
+
log,
|
|
249
|
+
project,
|
|
250
|
+
});
|
|
251
|
+
}
|
|
252
|
+
// ── 3. inbox watcher ──
|
|
253
|
+
// Start BEFORE adapter.handshake() so messages arriving during the
|
|
254
|
+
// handshake window are captured. The adapter's `isReady()` is checked
|
|
255
|
+
// inside runInboxWatcher; codex blocks there until thread/start lands.
|
|
256
|
+
const abort = new AbortController();
|
|
257
|
+
process.on("exit", () => abort.abort());
|
|
258
|
+
void runInboxWatcher({
|
|
259
|
+
channelName,
|
|
260
|
+
workerName,
|
|
261
|
+
adapter,
|
|
262
|
+
ctx: adapterCtx,
|
|
263
|
+
child,
|
|
264
|
+
signal: abort.signal,
|
|
265
|
+
inboxPolicy: config.inboxPolicy ?? DEFAULT_INBOX_POLICY,
|
|
266
|
+
turnTracker,
|
|
267
|
+
});
|
|
268
|
+
// ── adapter handshake (no initial user prompt) ──
|
|
269
|
+
if (adapter.handshake) {
|
|
270
|
+
try {
|
|
271
|
+
await adapter.handshake({ child, ctx: adapterCtx, view });
|
|
272
|
+
}
|
|
273
|
+
catch (err) {
|
|
274
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
275
|
+
log.write(`[supervisor] adapter handshake failed: ${msg}\n`);
|
|
276
|
+
// Codex #4 fix: emit an `error` event with the handshake message
|
|
277
|
+
// BEFORE requesting shutdown — otherwise the channel only sees a
|
|
278
|
+
// `killed{reason:"crash"}` with no detail on what went wrong.
|
|
279
|
+
void (async () => {
|
|
280
|
+
try {
|
|
281
|
+
await appendEvent(channelName, {
|
|
282
|
+
kind: "error",
|
|
283
|
+
by: `supervisor:${workerName}`,
|
|
284
|
+
message: `handshake failed: ${msg}`,
|
|
285
|
+
provider: config.provider,
|
|
286
|
+
detail: { source: "handshake" },
|
|
287
|
+
}, project);
|
|
288
|
+
}
|
|
289
|
+
catch {
|
|
290
|
+
// ignore
|
|
291
|
+
}
|
|
292
|
+
await shutdown.request("SIGTERM", "crash");
|
|
293
|
+
})();
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
async function cleanup(channelName, workerName) {
|
|
298
|
+
// Remove ephemeral runtime files. Keep `log` (forensic), `session-id` /
|
|
299
|
+
// `thread-id` (future resume). The .spawnlock should already be gone
|
|
300
|
+
// because `withLock` released it; we delete it defensively in case the
|
|
301
|
+
// CLI crashed mid-spawn and left a stale one.
|
|
302
|
+
// Keep `log` (forensic), `session-id` / `thread-id` (future resume).
|
|
303
|
+
// `inbox-cursor` is kept so a respawn (same worker name without
|
|
304
|
+
// killing the channel) doesn't replay messages.
|
|
305
|
+
for (const suffix of [
|
|
306
|
+
"pid",
|
|
307
|
+
"worker-pid",
|
|
308
|
+
"config",
|
|
309
|
+
"spawnlock",
|
|
310
|
+
"shutdown-reason",
|
|
311
|
+
"reservation",
|
|
312
|
+
]) {
|
|
313
|
+
try {
|
|
314
|
+
fs.unlinkSync(workerFile(channelName, workerName, suffix, process.env.TRELLIS_CHANNEL_PROJECT));
|
|
315
|
+
}
|
|
316
|
+
catch {
|
|
317
|
+
// already gone
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
function readExternalShutdownReason(channelName, workerName, project) {
|
|
322
|
+
const file = workerFile(channelName, workerName, "shutdown-reason", project);
|
|
323
|
+
try {
|
|
324
|
+
const reason = fs.readFileSync(file, "utf-8").trim();
|
|
325
|
+
fs.unlinkSync(file);
|
|
326
|
+
if (reason === "idle-timeout")
|
|
327
|
+
return "idle-timeout";
|
|
328
|
+
}
|
|
329
|
+
catch {
|
|
330
|
+
// No sidecar: ordinary external SIGTERM remains an explicit kill.
|
|
331
|
+
}
|
|
332
|
+
return "explicit-kill";
|
|
333
|
+
}
|
|
334
|
+
function readConfig(p) {
|
|
335
|
+
return JSON.parse(fs.readFileSync(p, "utf-8"));
|
|
336
|
+
}
|
|
337
|
+
// Helper to write a fresh config file before forking the supervisor.
|
|
338
|
+
export function writeSupervisorConfig(channelName, workerName, config, project) {
|
|
339
|
+
const p = workerFile(channelName, workerName, "config", project);
|
|
340
|
+
fs.mkdirSync(path.dirname(p), { recursive: true });
|
|
341
|
+
fs.writeFileSync(p, JSON.stringify(config, null, 2), "utf-8");
|
|
342
|
+
return p;
|
|
343
|
+
}
|
|
344
|
+
//# sourceMappingURL=supervisor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"supervisor.js","sourceRoot":"","sources":["../../../src/commands/channel/supervisor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export interface ChannelTextBodyOptions {
|
|
2
|
+
text?: string;
|
|
3
|
+
stdin?: boolean;
|
|
4
|
+
textFile?: string;
|
|
5
|
+
}
|
|
6
|
+
interface ResolveChannelTextBodyOptions {
|
|
7
|
+
required: boolean;
|
|
8
|
+
missingMessage: string;
|
|
9
|
+
emptyMessage: string;
|
|
10
|
+
}
|
|
11
|
+
export declare function resolveChannelTextBody(opts: ChannelTextBodyOptions, resolveOpts: ResolveChannelTextBodyOptions): Promise<string | undefined>;
|
|
12
|
+
export {};
|
|
13
|
+
//# sourceMappingURL=text-body.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"text-body.d.ts","sourceRoot":"","sources":["../../../src/commands/channel/text-body.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,sBAAsB;IACrC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,UAAU,6BAA6B;IACrC,QAAQ,EAAE,OAAO,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,wBAAsB,sBAAsB,CAC1C,IAAI,EAAE,sBAAsB,EAC5B,WAAW,EAAE,6BAA6B,GACzC,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAU7B"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
export async function resolveChannelTextBody(opts, resolveOpts) {
|
|
3
|
+
const raw = await readChannelTextBody(opts);
|
|
4
|
+
if (raw === undefined) {
|
|
5
|
+
if (resolveOpts.required)
|
|
6
|
+
throw new Error(resolveOpts.missingMessage);
|
|
7
|
+
return undefined;
|
|
8
|
+
}
|
|
9
|
+
const text = raw.trimEnd();
|
|
10
|
+
if (!text)
|
|
11
|
+
throw new Error(resolveOpts.emptyMessage);
|
|
12
|
+
return text;
|
|
13
|
+
}
|
|
14
|
+
async function readChannelTextBody(opts) {
|
|
15
|
+
if (opts.text !== undefined && opts.text !== "")
|
|
16
|
+
return opts.text;
|
|
17
|
+
if (opts.textFile)
|
|
18
|
+
return fs.readFileSync(opts.textFile, "utf-8");
|
|
19
|
+
if (opts.stdin)
|
|
20
|
+
return await readStdin();
|
|
21
|
+
return undefined;
|
|
22
|
+
}
|
|
23
|
+
async function readStdin() {
|
|
24
|
+
return await new Promise((resolve, reject) => {
|
|
25
|
+
let buf = "";
|
|
26
|
+
const onData = (chunk) => {
|
|
27
|
+
buf += chunk.toString("utf-8");
|
|
28
|
+
};
|
|
29
|
+
const cleanup = () => {
|
|
30
|
+
process.stdin.off("data", onData);
|
|
31
|
+
process.stdin.off("end", onEnd);
|
|
32
|
+
process.stdin.off("error", onError);
|
|
33
|
+
};
|
|
34
|
+
const onEnd = () => {
|
|
35
|
+
cleanup();
|
|
36
|
+
resolve(buf);
|
|
37
|
+
};
|
|
38
|
+
const onError = (err) => {
|
|
39
|
+
cleanup();
|
|
40
|
+
reject(err);
|
|
41
|
+
};
|
|
42
|
+
process.stdin.on("data", onData);
|
|
43
|
+
process.stdin.once("end", onEnd);
|
|
44
|
+
process.stdin.once("error", onError);
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=text-body.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"text-body.js","sourceRoot":"","sources":["../../../src/commands/channel/text-body.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AAczB,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,IAA4B,EAC5B,WAA0C;IAE1C,MAAM,GAAG,GAAG,MAAM,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAC5C,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACtB,IAAI,WAAW,CAAC,QAAQ;YAAE,MAAM,IAAI,KAAK,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;QACtE,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,EAAE,CAAC;IAC3B,IAAI,CAAC,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;IACrD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,KAAK,UAAU,mBAAmB,CAChC,IAA4B;IAE5B,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI,KAAK,EAAE;QAAE,OAAO,IAAI,CAAC,IAAI,CAAC;IAClE,IAAI,IAAI,CAAC,QAAQ;QAAE,OAAO,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAClE,IAAI,IAAI,CAAC,KAAK;QAAE,OAAO,MAAM,SAAS,EAAE,CAAC;IACzC,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,KAAK,UAAU,SAAS;IACtB,OAAO,MAAM,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACnD,IAAI,GAAG,GAAG,EAAE,CAAC;QACb,MAAM,MAAM,GAAG,CAAC,KAAa,EAAQ,EAAE;YACrC,GAAG,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QACjC,CAAC,CAAC;QACF,MAAM,OAAO,GAAG,GAAS,EAAE;YACzB,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YAClC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YAChC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACtC,CAAC,CAAC;QACF,MAAM,KAAK,GAAG,GAAS,EAAE;YACvB,OAAO,EAAE,CAAC;YACV,OAAO,CAAC,GAAG,CAAC,CAAC;QACf,CAAC,CAAC;QACF,MAAM,OAAO,GAAG,CAAC,GAAU,EAAQ,EAAE;YACnC,OAAO,EAAE,CAAC;YACV,MAAM,CAAC,GAAG,CAAC,CAAC;QACd,CAAC,CAAC;QAEF,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACjC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACjC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
export interface ThreadPostOptions {
|
|
2
|
+
as: string;
|
|
3
|
+
action: string;
|
|
4
|
+
thread?: string;
|
|
5
|
+
title?: string;
|
|
6
|
+
text?: string;
|
|
7
|
+
stdin?: boolean;
|
|
8
|
+
textFile?: string;
|
|
9
|
+
description?: string;
|
|
10
|
+
status?: string;
|
|
11
|
+
labels?: string;
|
|
12
|
+
assignees?: string;
|
|
13
|
+
summary?: string;
|
|
14
|
+
scope?: string;
|
|
15
|
+
/** New canonical flag list. */
|
|
16
|
+
contextFile?: string[];
|
|
17
|
+
contextRaw?: string[];
|
|
18
|
+
/** Legacy aliases accepted while users migrate scripts. */
|
|
19
|
+
linkedContextFile?: string[];
|
|
20
|
+
linkedContextRaw?: string[];
|
|
21
|
+
}
|
|
22
|
+
export interface ForumOptions {
|
|
23
|
+
scope?: string;
|
|
24
|
+
status?: string;
|
|
25
|
+
raw?: boolean;
|
|
26
|
+
}
|
|
27
|
+
export interface ThreadShowOptions {
|
|
28
|
+
scope?: string;
|
|
29
|
+
raw?: boolean;
|
|
30
|
+
}
|
|
31
|
+
export interface ThreadRenameOptions {
|
|
32
|
+
as: string;
|
|
33
|
+
scope?: string;
|
|
34
|
+
}
|
|
35
|
+
export declare function channelThreadPost(channelName: string, opts: ThreadPostOptions): Promise<void>;
|
|
36
|
+
export declare function channelForumList(channelName: string, opts: ForumOptions): Promise<void>;
|
|
37
|
+
export declare function channelThreadShow(channelName: string, threadKey: string, opts: ThreadShowOptions): Promise<void>;
|
|
38
|
+
export declare function channelThreadRename(channelName: string, oldThread: string, newThread: string, opts: ThreadRenameOptions): Promise<void>;
|
|
39
|
+
//# sourceMappingURL=threads.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"threads.d.ts","sourceRoot":"","sources":["../../../src/commands/channel/threads.ts"],"names":[],"mappings":"AAqBA,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+BAA+B;IAC/B,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,2DAA2D;IAC3D,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAsB,iBAAiB,CACrC,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,iBAAiB,GACtB,OAAO,CAAC,IAAI,CAAC,CAwCf;AAED,wBAAsB,gBAAgB,CACpC,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,YAAY,GACjB,OAAO,CAAC,IAAI,CAAC,CAaf;AAED,wBAAsB,iBAAiB,CACrC,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,iBAAiB,GACtB,OAAO,CAAC,IAAI,CAAC,CA2Bf;AAED,wBAAsB,mBAAmB,CACvC,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,mBAAmB,GACxB,OAAO,CAAC,IAAI,CAAC,CAWf"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import { buildContextEntries, listForumThreads as coreListForumThreads, showThread as coreShowThread, postThread as corePostThread, reduceThreads, renameThread as coreRenameThread, } from "@mindfoldhq/trellis-core/channel";
|
|
2
|
+
import { parseChannelScope, parseThreadAction, } from "./store/schema.js";
|
|
3
|
+
import { parseCsv } from "./store/schema.js";
|
|
4
|
+
import { formatThreadBoard } from "./store/thread-state.js";
|
|
5
|
+
import { resolveChannelTextBody } from "./text-body.js";
|
|
6
|
+
export async function channelThreadPost(channelName, opts) {
|
|
7
|
+
const parsed = parseThreadAction(opts.action);
|
|
8
|
+
if (parsed === "rename") {
|
|
9
|
+
throw new Error("Use `trellis channel thread rename <channel> <old> <new>` instead of `post rename`.");
|
|
10
|
+
}
|
|
11
|
+
const action = parsed;
|
|
12
|
+
const context = buildContextEntries([...(opts.contextFile ?? []), ...(opts.linkedContextFile ?? [])], [...(opts.contextRaw ?? []), ...(opts.linkedContextRaw ?? [])]);
|
|
13
|
+
const labels = parseCsv(opts.labels);
|
|
14
|
+
const assignees = parseCsv(opts.assignees);
|
|
15
|
+
const text = await resolveChannelTextBody(opts, {
|
|
16
|
+
required: false,
|
|
17
|
+
missingMessage: "No text provided (use --text, --stdin, or --text-file)",
|
|
18
|
+
emptyMessage: "Empty thread event text",
|
|
19
|
+
});
|
|
20
|
+
const scope = parseChannelScope(opts.scope);
|
|
21
|
+
const event = await corePostThread({
|
|
22
|
+
channel: channelName,
|
|
23
|
+
by: opts.as,
|
|
24
|
+
action,
|
|
25
|
+
thread: opts.thread ?? "",
|
|
26
|
+
...(scope !== undefined ? { scope } : {}),
|
|
27
|
+
...(opts.title ? { title: opts.title } : {}),
|
|
28
|
+
...(text !== undefined ? { text } : {}),
|
|
29
|
+
...(opts.description ? { description: opts.description } : {}),
|
|
30
|
+
...(opts.status ? { status: opts.status } : {}),
|
|
31
|
+
...(labels ? { labels } : {}),
|
|
32
|
+
...(assignees ? { assignees } : {}),
|
|
33
|
+
...(opts.summary ? { summary: opts.summary } : {}),
|
|
34
|
+
...(context ? { context } : {}),
|
|
35
|
+
origin: "cli",
|
|
36
|
+
});
|
|
37
|
+
console.log(JSON.stringify(event));
|
|
38
|
+
}
|
|
39
|
+
export async function channelForumList(channelName, opts) {
|
|
40
|
+
const scope = parseChannelScope(opts.scope);
|
|
41
|
+
const states = (await coreListForumThreads({
|
|
42
|
+
channel: channelName,
|
|
43
|
+
...(scope !== undefined ? { scope } : {}),
|
|
44
|
+
})).filter((state) => (opts.status ? state.status === opts.status : true));
|
|
45
|
+
if (opts.raw) {
|
|
46
|
+
for (const state of states)
|
|
47
|
+
console.log(JSON.stringify(state));
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
for (const line of formatThreadBoard(states))
|
|
51
|
+
console.log(line);
|
|
52
|
+
}
|
|
53
|
+
export async function channelThreadShow(channelName, threadKey, opts) {
|
|
54
|
+
const scope = parseChannelScope(opts.scope);
|
|
55
|
+
const events = await coreShowThread({
|
|
56
|
+
channel: channelName,
|
|
57
|
+
thread: threadKey,
|
|
58
|
+
...(scope !== undefined ? { scope } : {}),
|
|
59
|
+
});
|
|
60
|
+
if (opts.raw) {
|
|
61
|
+
for (const ev of events)
|
|
62
|
+
console.log(JSON.stringify(ev));
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
if (events.length === 0) {
|
|
66
|
+
throw new Error(`Thread '${threadKey}' not found in channel '${channelName}'`);
|
|
67
|
+
}
|
|
68
|
+
const state = reduceThreads(events)[0];
|
|
69
|
+
console.log(`${state.thread} [${state.status}] ${state.title ?? ""}`.trimEnd());
|
|
70
|
+
if (state.description)
|
|
71
|
+
console.log(`description: ${state.description}`);
|
|
72
|
+
if (state.labels.length > 0)
|
|
73
|
+
console.log(`labels: ${state.labels.join(",")}`);
|
|
74
|
+
if (state.assignees.length > 0) {
|
|
75
|
+
console.log(`assignees: ${state.assignees.join(",")}`);
|
|
76
|
+
}
|
|
77
|
+
if (state.summary)
|
|
78
|
+
console.log(`summary: ${state.summary}`);
|
|
79
|
+
for (const ev of events)
|
|
80
|
+
printTimelineEvent(ev);
|
|
81
|
+
}
|
|
82
|
+
export async function channelThreadRename(channelName, oldThread, newThread, opts) {
|
|
83
|
+
const scope = parseChannelScope(opts.scope);
|
|
84
|
+
const event = await coreRenameThread({
|
|
85
|
+
channel: channelName,
|
|
86
|
+
by: opts.as,
|
|
87
|
+
thread: oldThread,
|
|
88
|
+
newThread,
|
|
89
|
+
...(scope !== undefined ? { scope } : {}),
|
|
90
|
+
origin: "cli",
|
|
91
|
+
});
|
|
92
|
+
console.log(JSON.stringify(event));
|
|
93
|
+
}
|
|
94
|
+
function printTimelineEvent(ev) {
|
|
95
|
+
const ts = ev.ts.slice(0, 19).replace("T", " ");
|
|
96
|
+
if (ev.kind === "thread") {
|
|
97
|
+
const action = ev.action ?? "?";
|
|
98
|
+
const text = ev.text ? ` ${ev.text}` : "";
|
|
99
|
+
console.log(` ${ts} ${action} by=${ev.by}${text}`);
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
// context event
|
|
103
|
+
const action = ev.action ?? "?";
|
|
104
|
+
console.log(` ${ts} context-${action} by=${ev.by}`);
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=threads.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"threads.js","sourceRoot":"","sources":["../../../src/commands/channel/threads.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export interface TitleSetCliOptions {
|
|
2
|
+
as?: string;
|
|
3
|
+
title: string;
|
|
4
|
+
scope?: string;
|
|
5
|
+
}
|
|
6
|
+
export interface TitleClearCliOptions {
|
|
7
|
+
as?: string;
|
|
8
|
+
scope?: string;
|
|
9
|
+
}
|
|
10
|
+
export declare function channelTitleSet(channelName: string, opts: TitleSetCliOptions): Promise<void>;
|
|
11
|
+
export declare function channelTitleClear(channelName: string, opts: TitleClearCliOptions): Promise<void>;
|
|
12
|
+
//# sourceMappingURL=title.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"title.d.ts","sourceRoot":"","sources":["../../../src/commands/channel/title.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,kBAAkB;IACjC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,oBAAoB;IACnC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAsB,eAAe,CACnC,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,kBAAkB,GACvB,OAAO,CAAC,IAAI,CAAC,CAUf;AAED,wBAAsB,iBAAiB,CACrC,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,oBAAoB,GACzB,OAAO,CAAC,IAAI,CAAC,CASf"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { clearChannelTitle, setChannelTitle, } from "@mindfoldhq/trellis-core/channel";
|
|
2
|
+
import { parseChannelScope } from "./store/schema.js";
|
|
3
|
+
export async function channelTitleSet(channelName, opts) {
|
|
4
|
+
const scope = parseChannelScope(opts.scope);
|
|
5
|
+
const event = await setChannelTitle({
|
|
6
|
+
channel: channelName,
|
|
7
|
+
by: opts.as ?? "main",
|
|
8
|
+
title: opts.title,
|
|
9
|
+
...(scope !== undefined ? { scope } : {}),
|
|
10
|
+
origin: "cli",
|
|
11
|
+
});
|
|
12
|
+
console.log(JSON.stringify(event));
|
|
13
|
+
}
|
|
14
|
+
export async function channelTitleClear(channelName, opts) {
|
|
15
|
+
const scope = parseChannelScope(opts.scope);
|
|
16
|
+
const event = await clearChannelTitle({
|
|
17
|
+
channel: channelName,
|
|
18
|
+
by: opts.as ?? "main",
|
|
19
|
+
...(scope !== undefined ? { scope } : {}),
|
|
20
|
+
origin: "cli",
|
|
21
|
+
});
|
|
22
|
+
console.log(JSON.stringify(event));
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=title.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"title.js","sourceRoot":"","sources":["../../../src/commands/channel/title.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,eAAe,GAEhB,MAAM,kCAAkC,CAAC;AAE1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAatD,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,WAAmB,EACnB,IAAwB;IAExB,MAAM,KAAK,GAA6B,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACtE,MAAM,KAAK,GAAG,MAAM,eAAe,CAAC;QAClC,OAAO,EAAE,WAAW;QACpB,EAAE,EAAE,IAAI,CAAC,EAAE,IAAI,MAAM;QACrB,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzC,MAAM,EAAE,KAAK;KACd,CAAC,CAAC;IACH,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;AACrC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,WAAmB,EACnB,IAA0B;IAE1B,MAAM,KAAK,GAA6B,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACtE,MAAM,KAAK,GAAG,MAAM,iBAAiB,CAAC;QACpC,OAAO,EAAE,WAAW;QACpB,EAAE,EAAE,IAAI,CAAC,EAAE,IAAI,MAAM;QACrB,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzC,MAAM,EAAE,KAAK;KACd,CAAC,CAAC;IACH,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;AACrC,CAAC"}
|