syntaur 0.5.3 → 0.6.0

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.
Files changed (64) hide show
  1. package/dashboard/dist/assets/{_basePickBy-DqA1yD9s.js → _basePickBy-BQIP1Ca7.js} +1 -1
  2. package/dashboard/dist/assets/{_baseUniq-CgN0Iv38.js → _baseUniq-BnBWRwT7.js} +1 -1
  3. package/dashboard/dist/assets/{arc-DgB3MKjO.js → arc-BYWL4eq0.js} +1 -1
  4. package/dashboard/dist/assets/{architectureDiagram-2XIMDMQ5-MTDIkEyu.js → architectureDiagram-2XIMDMQ5-CD_SWPSa.js} +1 -1
  5. package/dashboard/dist/assets/{blockDiagram-WCTKOSBZ-I46jD1td.js → blockDiagram-WCTKOSBZ-BS1ZbFBU.js} +1 -1
  6. package/dashboard/dist/assets/{c4Diagram-IC4MRINW-JqqM3A9W.js → c4Diagram-IC4MRINW-D99yg-l2.js} +1 -1
  7. package/dashboard/dist/assets/channel-Df6VrFK5.js +1 -0
  8. package/dashboard/dist/assets/{chunk-4BX2VUAB-CCzfQiva.js → chunk-4BX2VUAB-BkN9IORC.js} +1 -1
  9. package/dashboard/dist/assets/{chunk-55IACEB6-BRicQJbU.js → chunk-55IACEB6-BQPHWefV.js} +1 -1
  10. package/dashboard/dist/assets/{chunk-FMBD7UC4-DDGrEm9o.js → chunk-FMBD7UC4-CNcExMdx.js} +1 -1
  11. package/dashboard/dist/assets/{chunk-JSJVCQXG-DQDIUaJ5.js → chunk-JSJVCQXG-LXBmftkC.js} +1 -1
  12. package/dashboard/dist/assets/{chunk-KX2RTZJC-s54oa7En.js → chunk-KX2RTZJC-Tqi7zNqq.js} +1 -1
  13. package/dashboard/dist/assets/{chunk-NQ4KR5QH-BAd0ryDR.js → chunk-NQ4KR5QH-DkMbx-rW.js} +1 -1
  14. package/dashboard/dist/assets/{chunk-QZHKN3VN-CaG2de4F.js → chunk-QZHKN3VN-BlrRCfkJ.js} +1 -1
  15. package/dashboard/dist/assets/{chunk-WL4C6EOR-sYE1pmwc.js → chunk-WL4C6EOR-of3XBzMu.js} +1 -1
  16. package/dashboard/dist/assets/classDiagram-VBA2DB6C-CyfzumTY.js +1 -0
  17. package/dashboard/dist/assets/classDiagram-v2-RAHNMMFH-CyfzumTY.js +1 -0
  18. package/dashboard/dist/assets/clone-CMs4Aqrx.js +1 -0
  19. package/dashboard/dist/assets/{cose-bilkent-S5V4N54A-Cg_S9Qjs.js → cose-bilkent-S5V4N54A-BlIiyO76.js} +1 -1
  20. package/dashboard/dist/assets/{dagre-KLK3FWXG-Dwvkdoks.js → dagre-KLK3FWXG-CYQjSI9N.js} +1 -1
  21. package/dashboard/dist/assets/{diagram-E7M64L7V-CbXW2F--.js → diagram-E7M64L7V-BZHzTKct.js} +1 -1
  22. package/dashboard/dist/assets/{diagram-IFDJBPK2-zZVy4Luk.js → diagram-IFDJBPK2-kMP3WqBV.js} +1 -1
  23. package/dashboard/dist/assets/{diagram-P4PSJMXO-DZAlQraU.js → diagram-P4PSJMXO-BWSHyFOv.js} +1 -1
  24. package/dashboard/dist/assets/{erDiagram-INFDFZHY-6cHkl5xD.js → erDiagram-INFDFZHY-B5HrvsPP.js} +1 -1
  25. package/dashboard/dist/assets/{flowDiagram-PKNHOUZH-CKZRsUC0.js → flowDiagram-PKNHOUZH-Dm4ewP7w.js} +1 -1
  26. package/dashboard/dist/assets/{ganttDiagram-A5KZAMGK-DIlglJ9Q.js → ganttDiagram-A5KZAMGK-DB3k27zu.js} +1 -1
  27. package/dashboard/dist/assets/{gitGraphDiagram-K3NZZRJ6-DFtox46y.js → gitGraphDiagram-K3NZZRJ6-G7y6Ey-m.js} +1 -1
  28. package/dashboard/dist/assets/{graph-gOeYAZHK.js → graph-CaM4i6vq.js} +1 -1
  29. package/dashboard/dist/assets/{index-DIczdcwd.css → index-B4QMu-Oq.css} +1 -1
  30. package/dashboard/dist/assets/index-BBWZjPBC.js +495 -0
  31. package/dashboard/dist/assets/{infoDiagram-LFFYTUFH-BSZBkrxW.js → infoDiagram-LFFYTUFH-JNTUbTjg.js} +1 -1
  32. package/dashboard/dist/assets/{ishikawaDiagram-PHBUUO56-CUyd2rdL.js → ishikawaDiagram-PHBUUO56-BZJt1ht8.js} +1 -1
  33. package/dashboard/dist/assets/{journeyDiagram-4ABVD52K-DMOgR3V0.js → journeyDiagram-4ABVD52K-DPcqvl9A.js} +1 -1
  34. package/dashboard/dist/assets/{kanban-definition-K7BYSVSG-Dtbxd8Eb.js → kanban-definition-K7BYSVSG-D1D7AuOV.js} +1 -1
  35. package/dashboard/dist/assets/{layout-QCf7g5sC.js → layout-BTOh3EDT.js} +1 -1
  36. package/dashboard/dist/assets/{linear-5jD8xK0U.js → linear-MbCpC_Cg.js} +1 -1
  37. package/dashboard/dist/assets/{mermaid.core-kxfDb1ct.js → mermaid.core-CYbhqlNy.js} +4 -4
  38. package/dashboard/dist/assets/{mindmap-definition-YRQLILUH-doBW0swI.js → mindmap-definition-YRQLILUH-CwYCISFH.js} +1 -1
  39. package/dashboard/dist/assets/{pieDiagram-SKSYHLDU-CqIvYb35.js → pieDiagram-SKSYHLDU-5qfZ73SG.js} +1 -1
  40. package/dashboard/dist/assets/{quadrantDiagram-337W2JSQ-BZAbCvmw.js → quadrantDiagram-337W2JSQ-WI8y1sQ_.js} +1 -1
  41. package/dashboard/dist/assets/{requirementDiagram-Z7DCOOCP-y_PYzin9.js → requirementDiagram-Z7DCOOCP-BFlD0ZTS.js} +1 -1
  42. package/dashboard/dist/assets/{sankeyDiagram-WA2Y5GQK-DBtnNQIQ.js → sankeyDiagram-WA2Y5GQK-Bdckv1Se.js} +1 -1
  43. package/dashboard/dist/assets/{sequenceDiagram-2WXFIKYE-BJNMqOeF.js → sequenceDiagram-2WXFIKYE-DgzxKAlZ.js} +1 -1
  44. package/dashboard/dist/assets/{stateDiagram-RAJIS63D-DesYeUWd.js → stateDiagram-RAJIS63D-DO4OXahC.js} +1 -1
  45. package/dashboard/dist/assets/stateDiagram-v2-FVOUBMTO-o8bgX-J3.js +1 -0
  46. package/dashboard/dist/assets/{timeline-definition-YZTLITO2-B-iNZkiE.js → timeline-definition-YZTLITO2-BBB01JWw.js} +1 -1
  47. package/dashboard/dist/assets/{treemap-KZPCXAKY-BHdixPrl.js → treemap-KZPCXAKY-Dr0jb8op.js} +1 -1
  48. package/dashboard/dist/assets/{vennDiagram-LZ73GAT5-DE52hvrZ.js → vennDiagram-LZ73GAT5-D40KFl2o.js} +1 -1
  49. package/dashboard/dist/assets/{xychartDiagram-JWTSCODW-CpCVkMuD.js → xychartDiagram-JWTSCODW-DBUmWQfT.js} +1 -1
  50. package/dashboard/dist/index.html +2 -2
  51. package/dist/dashboard/server.js +2380 -1263
  52. package/dist/dashboard/server.js.map +1 -1
  53. package/dist/index.js +5601 -4684
  54. package/dist/index.js.map +1 -1
  55. package/package.json +1 -1
  56. package/vendor/syntaur-skills/README.md +2 -0
  57. package/vendor/syntaur-skills/skills/clear-assignment/SKILL.md +111 -0
  58. package/vendor/syntaur-skills/skills/manage-statuses/SKILL.md +72 -0
  59. package/dashboard/dist/assets/channel-B4s4rTYI.js +0 -1
  60. package/dashboard/dist/assets/classDiagram-VBA2DB6C-CZUrPM07.js +0 -1
  61. package/dashboard/dist/assets/classDiagram-v2-RAHNMMFH-CZUrPM07.js +0 -1
  62. package/dashboard/dist/assets/clone-Dv7yV4O2.js +0 -1
  63. package/dashboard/dist/assets/index-DabqR6PW.js +0 -481
  64. package/dashboard/dist/assets/stateDiagram-v2-FVOUBMTO-CbJcvA8M.js +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "syntaur",
3
- "version": "0.5.3",
3
+ "version": "0.6.0",
4
4
  "description": "Project workflow CLI with dashboard, Claude Code plugin, and Codex plugin",
5
5
  "homepage": "https://github.com/prong-horn/syntaur#readme",
6
6
  "repository": {
@@ -43,8 +43,10 @@ npx skills add prong-horn/syntaur-skills --skill syntaur-protocol
43
43
  | `grab-assignment` | Discover and claim a pending assignment from a project. Sets up working context. |
44
44
  | `plan-assignment` | Create a detailed implementation plan for the current assignment. |
45
45
  | `complete-assignment` | Write a handoff and transition an assignment to review or completed. |
46
+ | `clear-assignment` | Drop the active assignment from session context without transitioning lifecycle state. Inverse of `grab-assignment`. |
46
47
  | `create-project` | Create a new project with full scaffolding (manifest + indexes + resources + memories). |
47
48
  | `create-assignment` | Create a new assignment within a project (or as a standalone one-off at `~/.syntaur/assignments/<uuid>/`). |
49
+ | `manage-statuses` | List / add / rename / remove / reorder custom assignment statuses (and transitions); writes to `~/.syntaur/config.md`. |
48
50
 
49
51
  ## How it works
50
52
 
@@ -0,0 +1,111 @@
1
+ ---
2
+ name: clear-assignment
3
+ description: >-
4
+ Clear the active Syntaur assignment from the current session without
5
+ transitioning lifecycle state. Use when the user wants to drop, release,
6
+ unclaim, abandon, or clear assignment context — e.g., "clear my assignment",
7
+ "drop this assignment", "release context", "unclaim this", "I'm not actually
8
+ working on this anymore". Does not mark the assignment complete or failed.
9
+ license: MIT
10
+ metadata:
11
+ author: prong-horn
12
+ version: "1.0.0"
13
+ ---
14
+
15
+ # Clear Assignment
16
+
17
+ Drop the active assignment binding from the current workspace. The assignment itself is left untouched in `~/.syntaur/projects/.../assignments/` — only the local `.syntaur/context.json` pointer is cleared so the session is no longer scoped to it.
18
+
19
+ This is the inverse of `grab-assignment`. Unlike `complete-assignment`, it does **not** transition lifecycle state, write a handoff, or close out the work. Use it when:
20
+
21
+ - The user grabbed the wrong assignment.
22
+ - The user wants to switch focus without finishing or formally reviewing the current one.
23
+ - Session context was set up earlier and is now stale.
24
+
25
+ If the assignment is actually done, use `complete-assignment` instead so a handoff is recorded and the lifecycle state advances.
26
+
27
+ ## Input
28
+
29
+ Optional flags from the user:
30
+
31
+ - `--keep-session` — preserve `sessionId` / `transcriptPath` fields in `context.json` (just strip the assignment fields). Default: full delete.
32
+ - `--unassign` — also run `syntaur unassign <slug> --project <project>` so the assignment is no longer claimed by this agent. Default: leave the claim in place (only the local context is cleared). Skip this flag if the CLI does not support `unassign` in the installed version — fall back to leaving the claim alone and tell the user.
33
+
34
+ ## Step 1: Load Context
35
+
36
+ Read `.syntaur/context.json` from the current working directory.
37
+
38
+ - If the file does not exist, tell the user: "No active assignment context to clear." and stop.
39
+ - If the file exists but contains only session fields (`sessionId`, `transcriptPath`) and no `projectSlug` / `assignmentSlug`, tell the user: "No active assignment is bound — only a platform session record exists. Nothing to clear." and stop (unless they explicitly ask to wipe the session record too).
40
+
41
+ Otherwise extract: `projectSlug`, `assignmentSlug`, `assignmentDir`, `title`.
42
+
43
+ ## Step 2: Confirm with the User
44
+
45
+ Show the user what is about to be cleared and confirm before touching anything:
46
+
47
+ > About to clear active assignment context:
48
+ > - Assignment: `<assignmentSlug>` — <title>
49
+ > - Project: `<projectSlug>` (or "standalone" if null)
50
+ > - The assignment itself will NOT be transitioned. Its lifecycle status stays as-is.
51
+ > - Proceed?
52
+
53
+ Stop if the user says no.
54
+
55
+ If lifecycle status is `in_progress` and the user has not passed `--complete-instead`, also note:
56
+
57
+ > Note: this assignment is currently `in_progress`. Clearing context does not change that. If you actually finished it, run `complete-assignment` instead so a handoff is recorded.
58
+
59
+ ## Step 3 (optional): Unassign
60
+
61
+ If the user passed `--unassign`, run:
62
+
63
+ ```bash
64
+ syntaur unassign <assignment-slug> --project <project-slug>
65
+ ```
66
+
67
+ For standalone assignments use the UUID (the folder name) in place of the slug, and omit `--project`.
68
+
69
+ If the CLI rejects the command (older versions may not implement `unassign`), report the error and continue — the local context clear in Step 4 still happens.
70
+
71
+ ## Step 4: Clear the Context File
72
+
73
+ Default behavior — delete the file entirely:
74
+
75
+ ```bash
76
+ rm .syntaur/context.json
77
+ ```
78
+
79
+ If the user passed `--keep-session`, preserve session fields and strip everything else instead:
80
+
81
+ ```bash
82
+ jq '{sessionId, transcriptPath} | with_entries(select(.value != null))' \
83
+ .syntaur/context.json > .syntaur/context.json.tmp \
84
+ && mv .syntaur/context.json.tmp .syntaur/context.json
85
+ ```
86
+
87
+ If the resulting file would be empty (`{}`), delete it instead of leaving an empty stub.
88
+
89
+ Do not delete the `.syntaur/` directory itself — other tooling may use it.
90
+
91
+ ## Step 5: Close Session (optional)
92
+
93
+ If the original `context.json` included a `sessionId` and the Syntaur dashboard is running, mark the session as cleared so the dashboard does not keep showing it as active:
94
+
95
+ ```bash
96
+ curl -s -X PATCH "http://localhost:$(cat ~/.syntaur/dashboard-port 2>/dev/null || echo 4800)/api/agent-sessions/<session-id>/status" \
97
+ -H "Content-Type: application/json" \
98
+ -d '{"status":"cleared","projectSlug":"<project-slug>"}'
99
+ ```
100
+
101
+ If this fails (e.g., dashboard not running, endpoint not present in the installed version), it is non-critical — silently continue.
102
+
103
+ Skip this step entirely when `--keep-session` is set.
104
+
105
+ ## Step 6: Report to User
106
+
107
+ Summarize:
108
+ - Which assignment was cleared (slug + title).
109
+ - That its lifecycle status is unchanged (and what that status currently is, if known from frontmatter).
110
+ - Whether the assignment was unassigned via the CLI or the claim was left in place.
111
+ - Suggested next step: `grab-assignment` to claim a different one, or `complete-assignment` if the previous one was actually finished.
@@ -0,0 +1,72 @@
1
+ ---
2
+ name: manage-statuses
3
+ description: >-
4
+ Manage custom assignment statuses and transitions in Syntaur. Use when the
5
+ user wants to add a status, customize a workflow stage, rename a status,
6
+ remove or reorder statuses, define a custom transition, change which states
7
+ are terminal (the "done state"), or otherwise edit the `statuses:` block in
8
+ `~/.syntaur/config.md`. Triggers on phrases like "add a status", "custom
9
+ status", "rename a status", "workflow stage", "change my workflow",
10
+ "terminal status", "done state".
11
+ license: MIT
12
+ metadata:
13
+ author: prong-horn
14
+ version: "1.0.0"
15
+ ---
16
+
17
+ # Manage Statuses
18
+
19
+ Customize Syntaur's assignment-status workflow via the `syntaur status` CLI. The CLI writes to the same `statuses:` block in `~/.syntaur/config.md` that the dashboard Settings page edits — so CLI and dashboard edits stay in sync.
20
+
21
+ The runtime is **all-or-nothing**: once `~/.syntaur/config.md` has a `statuses:` block, the built-in defaults (`pending`, `in_progress`, `blocked`, `review`, `completed`, `failed`) are NOT merged. `syntaur status init` materializes those defaults explicitly so the user has a starting point to customize. `syntaur status reset` removes the block to revert.
22
+
23
+ ## Input
24
+
25
+ The user usually describes the change in free-form prose ("add a needs-design status after pending", "rename in_progress to working", "remove blocked", "make completed not terminal"). Map their intent to a subcommand:
26
+
27
+ | Subcommand | When to use |
28
+ |-----------|-------------|
29
+ | `syntaur status list [--json]` | Show the current set, with `source: config | default` markers. Always run this first when the user asks "what statuses do I have?" |
30
+ | `syntaur status init [--force]` | Materialize the built-in defaults explicitly. Run before any custom edit if `list` shows `source: default` for everything. |
31
+ | `syntaur status reset [--force]` | Remove the `statuses:` block and revert to implicit defaults. |
32
+ | `syntaur status add <id> --label <label> [--color <hex>] [--icon <name>] [--description <text>] [--terminal] [--after <id> | --before <id> | --at-end]` | Append a new status. Position flags are mutually exclusive. |
33
+ | `syntaur status set --id <id> [...]` | Mutate metadata on an existing status without renaming. `--terminal true|false` (literal strings). |
34
+ | `syntaur status reorder <id,id,...>` | Replace the order array. CSV must be a permutation of current ids — no drops, no extras. |
35
+ | `syntaur status remove <id> [--force]` | Remove a status. Without `--force`, errors if any assignment references it; lists offenders. With `--force`, also prunes `order` and `transitions[i]` whose `from === <id>` or `to === <id>`. |
36
+ | `syntaur status rename <id> --to <new-id> [--label <label>]` | Rename a status id. **Atomic** rewrite across `config.md` + every affected `assignment.md`. Without `--label`, keeps the original label. |
37
+ | `syntaur status transition add --from <id> --command <cmd> --to <id> [--label <label>] [--requires-reason]` | Define a custom transition. |
38
+ | `syntaur status transition remove --from <id> --command <cmd>` | Drop a custom transition. |
39
+
40
+ Every mutating subcommand supports `--dry-run`, which prints a unified diff of the would-be `statuses:` block change (and, for `rename`, a per-file frontmatter diff for each affected `assignment.md`) and exits without writing.
41
+
42
+ ## Step 1: Determine intent → pick subcommand
43
+
44
+ Read the user's request and choose the subcommand. If ambiguous, ask. If the user says "make my workflow look like X", run `syntaur status list` first, present what's there, and confirm what they actually want changed.
45
+
46
+ If the user is making a destructive change (`remove`, `rename`, `reset`), default to running with `--dry-run` first and showing the diff, then asking the user to confirm before re-running without `--dry-run`.
47
+
48
+ ## Step 2: Run the CLI
49
+
50
+ Build and run the chosen `syntaur status ...` invocation. Quote labels and descriptions that contain spaces. Use the literal strings `true`/`false` for `--terminal` on the `set` subcommand.
51
+
52
+ If the user is on a fresh `~/.syntaur/config.md` (no `statuses:` block) and wants to make any change other than `init`/`reset`, run `syntaur status init` first so subsequent `add` / `set` / `reorder` / `rename` / `remove` operate on an explicit set.
53
+
54
+ ## Step 3: Verify with `syntaur status list`
55
+
56
+ After every mutating subcommand, run `syntaur status list` (or `--json` for machine consumption) and confirm the change took effect. Report back to the user with the new state.
57
+
58
+ ## Step 4: Guide next steps
59
+
60
+ - **If the dashboard is running** (`syntaur dashboard`), tell the user to restart it. The dashboard caches `StatusConfig` per-process and CLI mutations cannot reach a separate Node process. The dashboard's own writes invalidate its cache automatically; CLI writes don't.
61
+ - **After a `rename`,** every assignment that referenced the old id has been rewritten in-place. Mention this to the user — git will show diffs in many `assignment.md` files. They are intentional.
62
+ - **After a `remove --force`,** the affected assignments now reference an undefined status. `syntaur doctor` will flag them as invalid. Suggest the user run `syntaur doctor` and either re-add the status (`syntaur status add ...`) or edit each frontmatter to a valid id.
63
+ - **After `transition add`,** the dashboard's transition buttons reflect the new transition only after the cache invalidation above.
64
+
65
+ ## Safety notes
66
+
67
+ - **`remove` is destructive.** Without `--force` it refuses if any assignment references the id. Don't suggest `--force` without first running `syntaur status remove <id>` (no force) so the user sees the affected list.
68
+ - **`rename` rewrites many files.** It edits `config.md` AND every affected `assignment.md` in a single atomic transaction (with rollback if any write fails partway). Always run `--dry-run` first on a non-trivial codebase so the user sees the per-file diff.
69
+ - **`terminal: true` is load-bearing.** Terminal statuses affect dashboard progress bars and dependency-satisfaction logic — an assignment with a terminal status counts as "done" for downstream `dependsOn` checks and project-rollup status. Don't toggle this on `pending`-style states without thinking.
70
+ - **`init --force` overwrites a custom block.** Use `reset` first if the user wants a clean slate, OR confirm before passing `--force` if they have unsaved customizations.
71
+ - **Concurrency.** `rename`'s buffer-write-rollback strategy assumes no concurrent writers. Tell the user to close the dashboard / pause other agents during a rename.
72
+ - **`SYNTAUR_HOME` precedence.** If the user has `SYNTAUR_HOME` set, the CLI writes there instead of `~/.syntaur`. Mirror their environment.
@@ -1 +0,0 @@
1
- import{aq as o,ar as n}from"./mermaid.core-kxfDb1ct.js";const t=(r,a)=>o.lang.round(n.parse(r)[a]);export{t as c};
@@ -1 +0,0 @@
1
- import{s as a,c as s,a as e,C as t}from"./chunk-WL4C6EOR-sYE1pmwc.js";import{_ as i}from"./mermaid.core-kxfDb1ct.js";import"./chunk-FMBD7UC4-DDGrEm9o.js";import"./chunk-JSJVCQXG-DQDIUaJ5.js";import"./chunk-55IACEB6-BRicQJbU.js";import"./chunk-KX2RTZJC-s54oa7En.js";import"./index-DabqR6PW.js";var n={parser:e,get db(){return new t},renderer:s,styles:a,init:i(r=>{r.class||(r.class={}),r.class.arrowMarkerAbsolute=r.arrowMarkerAbsolute},"init")};export{n as diagram};
@@ -1 +0,0 @@
1
- import{s as a,c as s,a as e,C as t}from"./chunk-WL4C6EOR-sYE1pmwc.js";import{_ as i}from"./mermaid.core-kxfDb1ct.js";import"./chunk-FMBD7UC4-DDGrEm9o.js";import"./chunk-JSJVCQXG-DQDIUaJ5.js";import"./chunk-55IACEB6-BRicQJbU.js";import"./chunk-KX2RTZJC-s54oa7En.js";import"./index-DabqR6PW.js";var n={parser:e,get db(){return new t},renderer:s,styles:a,init:i(r=>{r.class||(r.class={}),r.class.arrowMarkerAbsolute=r.arrowMarkerAbsolute},"init")};export{n as diagram};
@@ -1 +0,0 @@
1
- import{b as r}from"./_baseUniq-CgN0Iv38.js";var e=4;function a(o){return r(o,e)}export{a as c};