@yemi33/minions 0.1.1969 → 0.1.1970

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/engine/shared.js CHANGED
@@ -1959,9 +1959,15 @@ const WORK_TYPE = {
1959
1959
  // and /api/work-items/retry) refuses to create or re-spawn a project-less WI
1960
1960
  // of any type in this set when PROJECTS.length !== 1.
1961
1961
  //
1962
- // Complement of engine.js READ_ONLY_ROOT_TASK_TYPES; `docs` is intentionally
1963
- // also exempt because docs edits run at the Minions root, not in a project
1964
- // worktree.
1962
+ // Complement of engine.js READ_ONLY_ROOT_TASK_TYPES. `docs` is included
1963
+ // (W-mpbgo1wv000gf75b): docs edits run as worktree-requiring dispatches
1964
+ // against the minions repo, so without a project the engine's
1965
+ // resolveProjectRootDir falls back to MINIONS_DIR's parent and can collapse
1966
+ // to a drive root on installs where MINIONS_DIR sits one level below the
1967
+ // filesystem root (e.g. `D:\squad` → `D:\`). Failing fast at HTTP-validate
1968
+ // time is preferable to letting a project-less docs WI land and loop on
1969
+ // WORKTREE_PREFLIGHT. Callers doing minions-repo docs work must pass
1970
+ // `project: "minions"` explicitly.
1965
1971
  const WORKTREE_REQUIRING_TYPES = new Set([
1966
1972
  WORK_TYPE.FIX,
1967
1973
  WORK_TYPE.IMPLEMENT,
@@ -1970,6 +1976,7 @@ const WORKTREE_REQUIRING_TYPES = new Set([
1970
1976
  WORK_TYPE.VERIFY,
1971
1977
  WORK_TYPE.REVIEW,
1972
1978
  WORK_TYPE.DECOMPOSE,
1979
+ WORK_TYPE.DOCS,
1973
1980
  ]);
1974
1981
 
1975
1982
  const PLAN_STATUS = {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yemi33/minions",
3
- "version": "0.1.1969",
3
+ "version": "0.1.1970",
4
4
  "description": "Multi-agent AI dev team that runs from ~/.minions/ — five autonomous agents share a single engine, dashboard, and knowledge base",
5
5
  "bin": {
6
6
  "minions": "bin/minions.js"
@@ -146,7 +146,7 @@ curl -s http://localhost:{{dashboard_port}}/api/status
146
146
 
147
147
  **Required fields per endpoint** — the server returns `{ error: "..." }` if missing. Common cases:
148
148
  - `POST /api/work-items`: `title` REQUIRED. `description` recommended. `project` REQUIRED when multiple projects are configured (server returns the list of known names if you guess wrong). `type` defaults to `implement`; valid values: `fix`, `implement`, `implement:large`, `explore`, `ask`, `review`, `test`, `verify`. Agent hint via `agent` (string) or `agents` (array).
149
- - Exempt from the `project` requirement (these run rootless or via central paths): `ask`, `explore`, `plan`, `plan-to-prd`, `meeting`, `docs`. Every other type needs a project worktree, so the server rejects project-less creates with `400 { error, knownProjects }` when ≠1 project is configured.
149
+ - Exempt from the `project` requirement (these run rootless or via central paths): `ask`, `explore`, `plan`, `plan-to-prd`, `meeting`. (`docs` is intentionally NOT exempt — it's write-capable and lands in `WORKTREE_REQUIRING_TYPES`, so it needs a real project worktree. For minions-repo docs work, pass `project: "minions"` explicitly.) Every other type needs a project worktree, so the server rejects project-less creates with `400 { error, knownProjects }` when ≠1 project is configured.
150
150
  - **`meta.keep_processes: true`** — opt-in flag that lets the agent leave specific descendant PIDs running after it exits (default: engine reaps EVERYTHING the agent spawned). **Set this whenever the user's intent is to leave a process alive after the agent finishes** — e.g. "spin up the dev server and exit", "start the watcher and leave it running", "set up my dev env", "keep the emulator open", "launch the daemon for me", "boot the constellation host and disconnect". Don't set it for normal build/test/run-once tasks (`npm test`, `npm run build`, one-shot scripts) — those should be reaped. Also accepts optional `meta.keep_processes_ttl_minutes` (default 60, hard-cap 1440 = 24h). When you set this flag, also make the WI title/description say something like "leave the dev server running" so the agent knows to write `agents/<id>/keep-pids.json` before exiting (the playbook injects the contract automatically when the flag is on). Example: `-d '{"title":"Spin up Constellation dev env and leave server running","type":"implement","project":"constellation","description":"Run bun install + bun run dev. Leave the dev server (port 5173) and Constellation host (port 3001) running after you exit so the user can iterate.","meta":{"keep_processes":true,"keep_processes_ttl_minutes":240}}'`. Inspect / kill kept PIDs anytime via `GET /api/keep-processes` and `POST /api/keep-processes/kill`.
151
151
  - **`skipPr: true`** — opt-in flag that tells the engine NOT to enforce the PR-attachment contract for this work item, so the WI can complete `done` without the missing-PR hard-fail. **Set this when the dispatch mutates state OUTSIDE any tracked git repo and therefore cannot produce a PR** — e.g. cleaning `~/.claude/skills/`, editing runtime config under `~/.config/`, resetting the dashboard cache, mutating engine JSON state files (`engine/*.json`) the engine itself owns, or local tooling installs. **Do NOT set it for any task that touches a tracked repo's source** — even one-line diffs in a real repo should produce a PR. Type-selection rule of thumb: prefer `type: "explore"` for genuinely read-only tasks (rootless, no worktree, no PR contract); use `skipPr: true` when the task is write-side mutation but the writes don't land in a git repo. Example: `-d '{"title":"Clean up duplicate skills in ~/.claude/skills","type":"implement","description":"Audit ~/.claude/skills/ and delete the 3 obsolete entries identified in NOTE-mp7gt4iw0004b879. Pure user-machine state outside any git repo, so no PR will be produced.","skipPr":true}'`.
152
152
  - **`oneShot: true`** — opt-in flag for one-off human-initiated dispatches that should NOT enroll the discovered PR into the engine's automatic review/fix loop. The PR is still tracked (status + comments are polled normally) but `discoverFromPrs` skips it for review/fix dispatch. **Set this when the user's intent is "do this single action against an existing PR, then stop"** — e.g. "review PR #2533 once", "rebase PR #2540 once and exit", "post a fix-summary comment on PR #2519". Don't set it for normal feature/fix work where the PR should keep cycling through review/fix until merged. Example: `-d '{"title":"One-off review of PR #2533","type":"review","project":"minions","description":"Single review pass on github:yemi33/minions#2533. Do not re-dispatch on subsequent comments.","oneShot":true}'`.