syntaur 0.14.0 → 0.16.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.
- package/dashboard/dist/assets/{_basePickBy-qEDLAY_J.js → _basePickBy-B1S22H85.js} +1 -1
- package/dashboard/dist/assets/{_baseUniq-7tDs18Gn.js → _baseUniq-CJIRCCsh.js} +1 -1
- package/dashboard/dist/assets/{arc-Brdw0dYW.js → arc-CdlNYTcd.js} +1 -1
- package/dashboard/dist/assets/{architectureDiagram-2XIMDMQ5-BiEdLT9m.js → architectureDiagram-2XIMDMQ5-KVI0HWOy.js} +1 -1
- package/dashboard/dist/assets/{blockDiagram-WCTKOSBZ-HC-j_hPZ.js → blockDiagram-WCTKOSBZ-ClnG7gaq.js} +1 -1
- package/dashboard/dist/assets/{c4Diagram-IC4MRINW-DA_rWbl7.js → c4Diagram-IC4MRINW-BD9lkttL.js} +1 -1
- package/dashboard/dist/assets/channel-Cm_FzKJq.js +1 -0
- package/dashboard/dist/assets/{chunk-4BX2VUAB-CF3hguyj.js → chunk-4BX2VUAB-BM3DXZMG.js} +1 -1
- package/dashboard/dist/assets/{chunk-55IACEB6-BTeCeIc_.js → chunk-55IACEB6-DUIbFJ3r.js} +1 -1
- package/dashboard/dist/assets/{chunk-FMBD7UC4-8qVvxmks.js → chunk-FMBD7UC4-B_cxCRkA.js} +1 -1
- package/dashboard/dist/assets/{chunk-JSJVCQXG-DCf8n7EO.js → chunk-JSJVCQXG-2mLf1WoM.js} +1 -1
- package/dashboard/dist/assets/{chunk-KX2RTZJC-CcpjTmME.js → chunk-KX2RTZJC-BMz3ND2R.js} +1 -1
- package/dashboard/dist/assets/{chunk-NQ4KR5QH-BnFPKo4-.js → chunk-NQ4KR5QH-DiCxpw3L.js} +1 -1
- package/dashboard/dist/assets/{chunk-QZHKN3VN-IPMVLLv2.js → chunk-QZHKN3VN-BcaWPzd5.js} +1 -1
- package/dashboard/dist/assets/{chunk-WL4C6EOR-D1pQmHqX.js → chunk-WL4C6EOR-BbsfhS6J.js} +1 -1
- package/dashboard/dist/assets/classDiagram-VBA2DB6C-Bdan2Dp5.js +1 -0
- package/dashboard/dist/assets/classDiagram-v2-RAHNMMFH-Bdan2Dp5.js +1 -0
- package/dashboard/dist/assets/clone-9PoPEM_s.js +1 -0
- package/dashboard/dist/assets/{cose-bilkent-S5V4N54A-tvJjvBQr.js → cose-bilkent-S5V4N54A-iuQzyyrA.js} +1 -1
- package/dashboard/dist/assets/{dagre-KLK3FWXG-qp1vt6LY.js → dagre-KLK3FWXG-C0TB1zg5.js} +1 -1
- package/dashboard/dist/assets/{diagram-E7M64L7V-VF5eizNr.js → diagram-E7M64L7V-Ck8tvxP2.js} +1 -1
- package/dashboard/dist/assets/{diagram-IFDJBPK2-C3pCbJ1e.js → diagram-IFDJBPK2-rQKIi-sc.js} +1 -1
- package/dashboard/dist/assets/{diagram-P4PSJMXO-D-taXZwH.js → diagram-P4PSJMXO-DS1RGSgx.js} +1 -1
- package/dashboard/dist/assets/{erDiagram-INFDFZHY-QjY-NHVs.js → erDiagram-INFDFZHY-BqWCybWW.js} +1 -1
- package/dashboard/dist/assets/{flowDiagram-PKNHOUZH-FjO8P5Tq.js → flowDiagram-PKNHOUZH-BCoQtyQ5.js} +1 -1
- package/dashboard/dist/assets/{ganttDiagram-A5KZAMGK-Bsn7CyK3.js → ganttDiagram-A5KZAMGK-CD1BmicP.js} +1 -1
- package/dashboard/dist/assets/{gitGraphDiagram-K3NZZRJ6-BZ8DjhnF.js → gitGraphDiagram-K3NZZRJ6-tGDYOZuO.js} +1 -1
- package/dashboard/dist/assets/{graph-AdliIYqX.js → graph-BT0s-094.js} +1 -1
- package/dashboard/dist/assets/index-BdSkANCC.js +510 -0
- package/dashboard/dist/assets/index-D2Yoi6DJ.css +1 -0
- package/dashboard/dist/assets/{infoDiagram-LFFYTUFH-BfZjLA86.js → infoDiagram-LFFYTUFH-E4dVb8BD.js} +1 -1
- package/dashboard/dist/assets/{ishikawaDiagram-PHBUUO56-BSgSGMp5.js → ishikawaDiagram-PHBUUO56-CubuM_ev.js} +1 -1
- package/dashboard/dist/assets/{journeyDiagram-4ABVD52K-BlQ7qeMC.js → journeyDiagram-4ABVD52K-DfyJbgMF.js} +1 -1
- package/dashboard/dist/assets/{kanban-definition-K7BYSVSG-CifO0AUu.js → kanban-definition-K7BYSVSG-BXamajyZ.js} +1 -1
- package/dashboard/dist/assets/{layout-B9r-gpD9.js → layout-6b_SlWD_.js} +1 -1
- package/dashboard/dist/assets/{linear-CaaIRxVZ.js → linear-BE0O-66A.js} +1 -1
- package/dashboard/dist/assets/{mermaid.core-C8wCWYw-.js → mermaid.core-DM3qWr07.js} +4 -4
- package/dashboard/dist/assets/{mindmap-definition-YRQLILUH-BpX5T7iT.js → mindmap-definition-YRQLILUH-puOtERrG.js} +1 -1
- package/dashboard/dist/assets/{pieDiagram-SKSYHLDU-BNGYtWrc.js → pieDiagram-SKSYHLDU-cE6l8UBX.js} +1 -1
- package/dashboard/dist/assets/{quadrantDiagram-337W2JSQ-CR4GeM9D.js → quadrantDiagram-337W2JSQ-CgDAyZQP.js} +1 -1
- package/dashboard/dist/assets/{requirementDiagram-Z7DCOOCP-CXrPkMLl.js → requirementDiagram-Z7DCOOCP-CJrai_8U.js} +1 -1
- package/dashboard/dist/assets/{sankeyDiagram-WA2Y5GQK-CIzof7Dm.js → sankeyDiagram-WA2Y5GQK-Bf72l7UW.js} +1 -1
- package/dashboard/dist/assets/{sequenceDiagram-2WXFIKYE-BJZLt0O2.js → sequenceDiagram-2WXFIKYE-0D8RN7ds.js} +1 -1
- package/dashboard/dist/assets/{stateDiagram-RAJIS63D-x9gC6zy6.js → stateDiagram-RAJIS63D-B8LucUIt.js} +1 -1
- package/dashboard/dist/assets/stateDiagram-v2-FVOUBMTO-D0dc7wxQ.js +1 -0
- package/dashboard/dist/assets/{timeline-definition-YZTLITO2-D_ZSQn1K.js → timeline-definition-YZTLITO2-DL3Hq8ii.js} +1 -1
- package/dashboard/dist/assets/{treemap-KZPCXAKY-LPpMEco4.js → treemap-KZPCXAKY-wF1X4_uI.js} +1 -1
- package/dashboard/dist/assets/{vennDiagram-LZ73GAT5-CRFZQpr7.js → vennDiagram-LZ73GAT5-DDAjoGTZ.js} +1 -1
- package/dashboard/dist/assets/{xychartDiagram-JWTSCODW-Bivutynw.js → xychartDiagram-JWTSCODW-T-YmzRW8.js} +1 -1
- package/dashboard/dist/index.html +2 -2
- package/dist/dashboard/server.js +7664 -5884
- package/dist/dashboard/server.js.map +1 -1
- package/dist/db/leases-db.js.map +1 -1
- package/dist/index.js +6438 -2094
- package/dist/index.js.map +1 -1
- package/dist/launch/index.d.ts +318 -0
- package/dist/launch/index.js +3122 -0
- package/dist/launch/index.js.map +1 -0
- package/package.json +15 -2
- package/platforms/claude-code/commands/track-session/track-session.md +2 -1
- package/platforms/claude-code/hooks/session-start.sh +14 -1
- package/platforms/claude-code/references/protocol-summary.md +1 -1
- package/platforms/claude-code/skills/capture-artifacts/SKILL.md +2 -1
- package/platforms/claude-code/skills/complete-assignment/SKILL.md +2 -0
- package/platforms/claude-code/skills/syntaur-protocol/references/protocol-summary.md +1 -1
- package/platforms/claude-code/skills/track-session/SKILL.md +2 -1
- package/platforms/codex/agents/syntaur-operator.md +2 -2
- package/platforms/codex/references/protocol-summary.md +1 -1
- package/platforms/codex/skills/capture-artifacts/SKILL.md +2 -1
- package/platforms/codex/skills/complete-assignment/SKILL.md +2 -0
- package/platforms/codex/skills/syntaur-protocol/references/protocol-summary.md +1 -1
- package/platforms/codex/skills/track-session/SKILL.md +2 -1
- package/scripts/install-macos-url-handler.mjs +540 -0
- package/skills/capture-artifacts/SKILL.md +2 -1
- package/skills/complete-assignment/SKILL.md +2 -0
- package/skills/syntaur-protocol/references/protocol-summary.md +1 -1
- package/skills/track-session/SKILL.md +2 -1
- package/dashboard/dist/assets/channel-D2-caOn6.js +0 -1
- package/dashboard/dist/assets/classDiagram-VBA2DB6C-HFOb_XEt.js +0 -1
- package/dashboard/dist/assets/classDiagram-v2-RAHNMMFH-HFOb_XEt.js +0 -1
- package/dashboard/dist/assets/clone-BrYOwgIq.js +0 -1
- package/dashboard/dist/assets/index-BoR_oyUZ.css +0 -1
- package/dashboard/dist/assets/index-RCBI4aX2.js +0 -525
- package/dashboard/dist/assets/stateDiagram-v2-FVOUBMTO-CN5Dcv7u.js +0 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "syntaur",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.16.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": {
|
|
@@ -23,6 +23,17 @@
|
|
|
23
23
|
"syntaur": "./bin/syntaur.js"
|
|
24
24
|
},
|
|
25
25
|
"main": "./dist/index.js",
|
|
26
|
+
"exports": {
|
|
27
|
+
".": {
|
|
28
|
+
"types": "./dist/index.d.ts",
|
|
29
|
+
"import": "./dist/index.js"
|
|
30
|
+
},
|
|
31
|
+
"./launch": {
|
|
32
|
+
"types": "./dist/launch/index.d.ts",
|
|
33
|
+
"import": "./dist/launch/index.js"
|
|
34
|
+
},
|
|
35
|
+
"./dist/dashboard/server.js": "./dist/dashboard/server.js"
|
|
36
|
+
},
|
|
26
37
|
"files": [
|
|
27
38
|
"dist",
|
|
28
39
|
"bin",
|
|
@@ -32,7 +43,8 @@
|
|
|
32
43
|
".claude-plugin",
|
|
33
44
|
"examples",
|
|
34
45
|
"dashboard/dist",
|
|
35
|
-
"statusline"
|
|
46
|
+
"statusline",
|
|
47
|
+
"scripts/install-macos-url-handler.mjs"
|
|
36
48
|
],
|
|
37
49
|
"scripts": {
|
|
38
50
|
"build": "tsup",
|
|
@@ -44,6 +56,7 @@
|
|
|
44
56
|
"test": "vitest run",
|
|
45
57
|
"test:watch": "vitest",
|
|
46
58
|
"mirror-skills": "node scripts/mirror-skills-to-platforms.mjs",
|
|
59
|
+
"postinstall": "node scripts/install-macos-url-handler.mjs",
|
|
47
60
|
"prepack": "node scripts/mirror-skills-to-platforms.mjs",
|
|
48
61
|
"prepublishOnly": "npm run build && npm ci --prefix dashboard && npm run build --prefix dashboard",
|
|
49
62
|
"try": "node scripts/try.mjs",
|
|
@@ -51,12 +51,13 @@ syntaur track-session \
|
|
|
51
51
|
--session-id "$SESSION_ID" \
|
|
52
52
|
--transcript-path "$TRANSCRIPT_PATH" \
|
|
53
53
|
--path "$(pwd)" \
|
|
54
|
+
--pid "$(ps -o ppid= -p $$ | tr -d ' ')" \
|
|
54
55
|
[--description "<text>"] \
|
|
55
56
|
[--project <slug>] \
|
|
56
57
|
[--assignment <slug>]
|
|
57
58
|
```
|
|
58
59
|
|
|
59
|
-
Omit `--transcript-path` entirely (don't pass an empty string) if no transcript path could be resolved.
|
|
60
|
+
Omit `--transcript-path` entirely (don't pass an empty string) if no transcript path could be resolved. The `--pid` value is the shell PID that owns the Claude process — the dashboard uses it to disable Resume while this session may still be writing the transcript, forcing users to Fork instead. If `ps` is unavailable, omit `--pid` too.
|
|
60
61
|
|
|
61
62
|
The CLI prints one of:
|
|
62
63
|
- `Registered standalone agent session <sessionId>.`
|
|
@@ -77,6 +77,17 @@ jq \
|
|
|
77
77
|
MISSION_SLUG=$(jq -r '.projectSlug // empty' "$CONTEXT_FILE" 2>/dev/null)
|
|
78
78
|
ASSIGNMENT_SLUG=$(jq -r '.assignmentSlug // empty' "$CONTEXT_FILE" 2>/dev/null)
|
|
79
79
|
|
|
80
|
+
# Capture the terminal-session PID that owns this Claude process. Claude
|
|
81
|
+
# Code's SessionStart payload does NOT include a parent PID, so we approximate
|
|
82
|
+
# by walking up one level from the hook's own PID — that is, the shell the
|
|
83
|
+
# hook was spawned by, which is the shell that owns claude. The server uses
|
|
84
|
+
# this for liveness checks (and an auto-captured ps lstart= for recycling
|
|
85
|
+
# defense). If `ps` is unavailable or returns nothing we just omit the field.
|
|
86
|
+
PID="$(ps -o ppid= -p $$ 2>/dev/null | tr -d '[:space:]' || true)"
|
|
87
|
+
if [ -n "$PID" ] && ! printf '%s' "$PID" | grep -q '^[0-9]\+$'; then
|
|
88
|
+
PID=""
|
|
89
|
+
fi
|
|
90
|
+
|
|
80
91
|
PORT="${SYNTAUR_DASHBOARD_PORT:-}"
|
|
81
92
|
if [ -z "$PORT" ]; then
|
|
82
93
|
PORT=$(cat "$HOME/.syntaur/dashboard-port" 2>/dev/null || echo "4800")
|
|
@@ -88,10 +99,12 @@ BODY=$(jq -cn \
|
|
|
88
99
|
--arg proj "$MISSION_SLUG" \
|
|
89
100
|
--arg assn "$ASSIGNMENT_SLUG" \
|
|
90
101
|
--arg path "$CWD" \
|
|
102
|
+
--arg pid "$PID" \
|
|
91
103
|
'{ agent: "claude", sessionId: $sid, path: $path }
|
|
92
104
|
+ (if ($tp | length) > 0 then {transcriptPath: $tp} else {} end)
|
|
93
105
|
+ (if ($proj | length) > 0 then {projectSlug: $proj} else {} end)
|
|
94
|
-
+ (if ($assn | length) > 0 then {assignmentSlug: $assn} else {} end)
|
|
106
|
+
+ (if ($assn | length) > 0 then {assignmentSlug: $assn} else {} end)
|
|
107
|
+
+ (if ($pid | length) > 0 then {pid: ($pid | tonumber)} else {} end)' 2>/dev/null)
|
|
95
108
|
|
|
96
109
|
if [ -n "$BODY" ]; then
|
|
97
110
|
# --max-time bounds the hook's wall-clock cost if the dashboard socket
|
|
@@ -93,6 +93,6 @@ Protocol version: **2.0**
|
|
|
93
93
|
|
|
94
94
|
Agents can attach typed evidence to an assignment so a human reviewer can verify the work in seconds without re-running it.
|
|
95
95
|
|
|
96
|
-
- `syntaur capture --kind <screenshot|video|asciinema|http|text> [--file <path>] [--criterion <index>] [--note <text>] [target]` — record an artifact for the active assignment. Criterion linkage is optional (0-based index into the `## Acceptance Criteria` checklist). For `--kind=text`, supply `--note` and omit `--file`.
|
|
96
|
+
- `syntaur capture --kind <screenshot|video|asciinema|http|text> [--file <path>] [--criterion <index>] [--note <text>] [--transcribe] [target]` — record an artifact for the active assignment. Criterion linkage is optional (0-based index into the `## Acceptance Criteria` checklist). For `--kind=text`, supply `--note` and omit `--file`. `--transcribe` is video-only and writes a sibling `<id>.transcript.md` (requires `ELEVENLABS_API_KEY` + `ffmpeg`).
|
|
97
97
|
- `syntaur proof build [target]` — render `proof.html` and `proof.md` at the assignment dir, walking the `## Acceptance Criteria` list and embedding tagged artifacts inline beneath each criterion. Untagged or stale (out-of-range) captures land in a final "Other artifacts" section. Atomic overwrite — safe to re-run.
|
|
98
98
|
- Artifacts are stored under `<assignmentDir>/proof/<criterion|untagged>/<id>.<ext>`. The DB row lives in `~/.syntaur/syntaur.db` alongside session tracking. No completion gate — proof is purely opt-in for v1.
|
|
@@ -46,7 +46,7 @@ Linkage to a specific criterion is **optional**. Untagged artifacts are fine —
|
|
|
46
46
|
|
|
47
47
|
```bash
|
|
48
48
|
# File-based (screenshot, video, asciinema, http transcript)
|
|
49
|
-
syntaur capture --kind <type> --file <path> [--criterion <index>] [--note <text>] \
|
|
49
|
+
syntaur capture --kind <type> --file <path> [--criterion <index>] [--note <text>] [--transcribe] \
|
|
50
50
|
[--project <slug> <assignment-slug>]
|
|
51
51
|
|
|
52
52
|
# Text-only (no --file)
|
|
@@ -59,6 +59,7 @@ Rules:
|
|
|
59
59
|
- `--kind=http` accepts either `--file` (a transcript) or `--note` (an inline summary). At least one is required.
|
|
60
60
|
- All other kinds (`screenshot`, `video`, `asciinema`) require `--file`. The CLI rejects nonexistent / non-file paths.
|
|
61
61
|
- `--criterion <index>` is optional — pass the **0-based** index into the `## Acceptance Criteria` checklist when you want to anchor the artifact to a specific criterion.
|
|
62
|
+
- `--transcribe` is video-only and writes a sibling `<id>.transcript.md` (requires `ELEVENLABS_API_KEY` + `ffmpeg`). `proof build` renders the transcript next to the player; clicking a phrase seeks the video.
|
|
62
63
|
- If you have a `.syntaur/context.json` in the cwd, the positional target argument is unnecessary; otherwise pass `--project <slug> <assignment-slug>` or a bare assignment UUID.
|
|
63
64
|
|
|
64
65
|
The CLI copies the file (if any) under `<assignmentDir>/proof/<criterion|untagged>/<id>.<ext>` and inserts a row in `~/.syntaur/syntaur.db`. Output prints the artifact id and absolute path.
|
|
@@ -129,6 +129,8 @@ If the command fails, report the error. Common failures:
|
|
|
129
129
|
- Assignment is not in `in_progress` status
|
|
130
130
|
- Project not found
|
|
131
131
|
|
|
132
|
+
**Side effect:** Source todos that were promoted into this assignment via `syntaur todo promote --new-assignment` (or the dashboard `Promote to assignment` flow) automatically flip from `in_progress` to `completed` when this transition runs. If you later `reopen` the assignment, those auto-completed todos flip back to `in_progress`. Todos that the user manually marked `completed` after the auto-complete fired are left untouched on reopen.
|
|
133
|
+
|
|
132
134
|
## Step 8: Clean Up Context
|
|
133
135
|
|
|
134
136
|
Delete the context file:
|
|
@@ -85,6 +85,6 @@ Protocol version: **2.0**
|
|
|
85
85
|
|
|
86
86
|
Agents can attach typed evidence to an assignment so a human reviewer can verify the work in seconds without re-running it.
|
|
87
87
|
|
|
88
|
-
- `syntaur capture --kind <screenshot|video|asciinema|http|text> [--file <path>] [--criterion <index>] [--note <text>] [target]` — record an artifact for the active assignment. Criterion linkage is optional (0-based index into the `## Acceptance Criteria` checklist). For `--kind=text`, supply `--note` and omit `--file`. For `--kind=http`, supply `--file` (transcript) or `--note` (inline summary).
|
|
88
|
+
- `syntaur capture --kind <screenshot|video|asciinema|http|text> [--file <path>] [--criterion <index>] [--note <text>] [--transcribe] [target]` — record an artifact for the active assignment. Criterion linkage is optional (0-based index into the `## Acceptance Criteria` checklist). For `--kind=text`, supply `--note` and omit `--file`. For `--kind=http`, supply `--file` (transcript) or `--note` (inline summary). `--transcribe` is video-only and writes a sibling `<id>.transcript.md` (requires `ELEVENLABS_API_KEY` + `ffmpeg`).
|
|
89
89
|
- `syntaur proof build [target]` — render `proof.html` and `proof.md` at the assignment dir, walking the `## Acceptance Criteria` list and embedding tagged artifacts inline beneath each criterion. Untagged or stale (out-of-range) captures land in a final "Other artifacts" section. Atomic overwrite — safe to re-run.
|
|
90
90
|
- Artifacts are stored under `<assignmentDir>/proof/<criterion|untagged>/<id>.<ext>`. The DB row lives in `~/.syntaur/syntaur.db` alongside session tracking. No completion gate — proof is purely opt-in for v1.
|
|
@@ -47,12 +47,13 @@ syntaur track-session \
|
|
|
47
47
|
--session-id "$SESSION_ID" \
|
|
48
48
|
--transcript-path "$TRANSCRIPT_PATH" \
|
|
49
49
|
--path "$(pwd)" \
|
|
50
|
+
--pid "$(ps -o ppid= -p $$ | tr -d ' ')" \
|
|
50
51
|
[--description "<text>"] \
|
|
51
52
|
[--project <slug>] \
|
|
52
53
|
[--assignment <slug>]
|
|
53
54
|
```
|
|
54
55
|
|
|
55
|
-
Omit `--transcript-path` entirely (don't pass an empty string) if no transcript path could be resolved.
|
|
56
|
+
Omit `--transcript-path` entirely (don't pass an empty string) if no transcript path could be resolved. The `--pid` value is the shell PID that owns the Claude process — the dashboard uses it to disable Resume while this session may still be writing the transcript, forcing users to Fork instead. If `ps` is unavailable, omit `--pid` too.
|
|
56
57
|
|
|
57
58
|
The CLI prints one of:
|
|
58
59
|
- `Registered standalone agent session <sessionId>.`
|
|
@@ -95,7 +95,7 @@ Use these commands directly when needed:
|
|
|
95
95
|
- `syntaur comment <assignment-slug-or-uuid> "body" --type question|note|feedback [--reply-to <id>] [--project <slug>]` — append to `comments.md`
|
|
96
96
|
- `syntaur request <target-slug-or-uuid> "text" [--from <source>] [--project <slug>]` — append to target's `## Todos`, annotated `(from: <source>)`
|
|
97
97
|
- `syntaur uninstall [--all] [--yes]`
|
|
98
|
-
- `syntaur track-session --project <project-slug> --assignment <assignment-slug> --agent codex --session-id <real-id> --transcript-path <rollout-path> --path <cwd
|
|
98
|
+
- `syntaur track-session --project <project-slug> --assignment <assignment-slug> --agent codex --session-id <real-id> --transcript-path <rollout-path> --path <cwd> [--pid <n>]` (both `--session-id` and `--transcript-path` must come from the matching Codex rollout file — never synthesize. Pass `--pid "$$"` so the dashboard can detect liveness and gate Resume off while this session is still running.)
|
|
99
99
|
- `syntaur setup-adapter codex --project <project-slug> --assignment <assignment-slug>`
|
|
100
100
|
- `syntaur plan version --assignment <slug> [--project <slug>]` — bump to `plan-v<N>.md` per Plan Versioning playbook
|
|
101
101
|
- `syntaur session resume [--json]` — re-orient on the active assignment from latest session summary + context.json + open handoff (idempotent)
|
|
@@ -115,7 +115,7 @@ Use these commands directly when needed:
|
|
|
115
115
|
4. Create (or merge into) `.syntaur/context.json` in the working directory. If a prior context file exists, preserve its fields.
|
|
116
116
|
5. Resolve the real Codex session id and rollout path: `bash ./scripts/resolve-session.sh "$(pwd)"` (relative to the plugin root). Parse `session_id=<id>` and `transcript_path=<abs path>`. If the helper exits non-zero, there is no matching Codex rollout in this cwd — start the Codex session first, then retry. Never `uuidgen`.
|
|
117
117
|
6. Merge `sessionId` + `transcriptPath` into `.syntaur/context.json`.
|
|
118
|
-
7. Register the session: `syntaur track-session --project <slug> --assignment <slug> --agent codex --session-id <id> --transcript-path <path> --path "$(pwd)"
|
|
118
|
+
7. Register the session: `syntaur track-session --project <slug> --assignment <slug> --agent codex --session-id <id> --transcript-path <path> --path "$(pwd)" --pid "$$"` (passing `--pid "$$"` lets the dashboard show Resume disabled while this session is still running).
|
|
119
119
|
8. If needed, run `syntaur setup-adapter codex --project <slug> --assignment <slug>`.
|
|
120
120
|
|
|
121
121
|
### Plan an assignment
|
|
@@ -93,6 +93,6 @@ Protocol version: **2.0**
|
|
|
93
93
|
|
|
94
94
|
Agents can attach typed evidence to an assignment so a human reviewer can verify the work in seconds without re-running it.
|
|
95
95
|
|
|
96
|
-
- `syntaur capture --kind <screenshot|video|asciinema|http|text> [--file <path>] [--criterion <index>] [--note <text>] [target]` — record an artifact for the active assignment. Criterion linkage is optional (0-based index into the `## Acceptance Criteria` checklist). For `--kind=text`, supply `--note` and omit `--file`.
|
|
96
|
+
- `syntaur capture --kind <screenshot|video|asciinema|http|text> [--file <path>] [--criterion <index>] [--note <text>] [--transcribe] [target]` — record an artifact for the active assignment. Criterion linkage is optional (0-based index into the `## Acceptance Criteria` checklist). For `--kind=text`, supply `--note` and omit `--file`. `--transcribe` is video-only and writes a sibling `<id>.transcript.md` (requires `ELEVENLABS_API_KEY` + `ffmpeg`).
|
|
97
97
|
- `syntaur proof build [target]` — render `proof.html` and `proof.md` at the assignment dir, walking the `## Acceptance Criteria` list and embedding tagged artifacts inline beneath each criterion. Untagged or stale (out-of-range) captures land in a final "Other artifacts" section. Atomic overwrite — safe to re-run.
|
|
98
98
|
- Artifacts are stored under `<assignmentDir>/proof/<criterion|untagged>/<id>.<ext>`. The DB row lives in `~/.syntaur/syntaur.db` alongside session tracking. No completion gate — proof is purely opt-in for v1.
|
|
@@ -46,7 +46,7 @@ Linkage to a specific criterion is **optional**. Untagged artifacts are fine —
|
|
|
46
46
|
|
|
47
47
|
```bash
|
|
48
48
|
# File-based (screenshot, video, asciinema, http transcript)
|
|
49
|
-
syntaur capture --kind <type> --file <path> [--criterion <index>] [--note <text>] \
|
|
49
|
+
syntaur capture --kind <type> --file <path> [--criterion <index>] [--note <text>] [--transcribe] \
|
|
50
50
|
[--project <slug> <assignment-slug>]
|
|
51
51
|
|
|
52
52
|
# Text-only (no --file)
|
|
@@ -59,6 +59,7 @@ Rules:
|
|
|
59
59
|
- `--kind=http` accepts either `--file` (a transcript) or `--note` (an inline summary). At least one is required.
|
|
60
60
|
- All other kinds (`screenshot`, `video`, `asciinema`) require `--file`. The CLI rejects nonexistent / non-file paths.
|
|
61
61
|
- `--criterion <index>` is optional — pass the **0-based** index into the `## Acceptance Criteria` checklist when you want to anchor the artifact to a specific criterion.
|
|
62
|
+
- `--transcribe` is video-only and writes a sibling `<id>.transcript.md` (requires `ELEVENLABS_API_KEY` + `ffmpeg`). `proof build` renders the transcript next to the player; clicking a phrase seeks the video.
|
|
62
63
|
- If you have a `.syntaur/context.json` in the cwd, the positional target argument is unnecessary; otherwise pass `--project <slug> <assignment-slug>` or a bare assignment UUID.
|
|
63
64
|
|
|
64
65
|
The CLI copies the file (if any) under `<assignmentDir>/proof/<criterion|untagged>/<id>.<ext>` and inserts a row in `~/.syntaur/syntaur.db`. Output prints the artifact id and absolute path.
|
|
@@ -129,6 +129,8 @@ If the command fails, report the error. Common failures:
|
|
|
129
129
|
- Assignment is not in `in_progress` status
|
|
130
130
|
- Project not found
|
|
131
131
|
|
|
132
|
+
**Side effect:** Source todos that were promoted into this assignment via `syntaur todo promote --new-assignment` (or the dashboard `Promote to assignment` flow) automatically flip from `in_progress` to `completed` when this transition runs. If you later `reopen` the assignment, those auto-completed todos flip back to `in_progress`. Todos that the user manually marked `completed` after the auto-complete fired are left untouched on reopen.
|
|
133
|
+
|
|
132
134
|
## Step 8: Clean Up Context
|
|
133
135
|
|
|
134
136
|
Delete the context file:
|
|
@@ -85,6 +85,6 @@ Protocol version: **2.0**
|
|
|
85
85
|
|
|
86
86
|
Agents can attach typed evidence to an assignment so a human reviewer can verify the work in seconds without re-running it.
|
|
87
87
|
|
|
88
|
-
- `syntaur capture --kind <screenshot|video|asciinema|http|text> [--file <path>] [--criterion <index>] [--note <text>] [target]` — record an artifact for the active assignment. Criterion linkage is optional (0-based index into the `## Acceptance Criteria` checklist). For `--kind=text`, supply `--note` and omit `--file`. For `--kind=http`, supply `--file` (transcript) or `--note` (inline summary).
|
|
88
|
+
- `syntaur capture --kind <screenshot|video|asciinema|http|text> [--file <path>] [--criterion <index>] [--note <text>] [--transcribe] [target]` — record an artifact for the active assignment. Criterion linkage is optional (0-based index into the `## Acceptance Criteria` checklist). For `--kind=text`, supply `--note` and omit `--file`. For `--kind=http`, supply `--file` (transcript) or `--note` (inline summary). `--transcribe` is video-only and writes a sibling `<id>.transcript.md` (requires `ELEVENLABS_API_KEY` + `ffmpeg`).
|
|
89
89
|
- `syntaur proof build [target]` — render `proof.html` and `proof.md` at the assignment dir, walking the `## Acceptance Criteria` list and embedding tagged artifacts inline beneath each criterion. Untagged or stale (out-of-range) captures land in a final "Other artifacts" section. Atomic overwrite — safe to re-run.
|
|
90
90
|
- Artifacts are stored under `<assignmentDir>/proof/<criterion|untagged>/<id>.<ext>`. The DB row lives in `~/.syntaur/syntaur.db` alongside session tracking. No completion gate — proof is purely opt-in for v1.
|
|
@@ -47,12 +47,13 @@ syntaur track-session \
|
|
|
47
47
|
--session-id "$SESSION_ID" \
|
|
48
48
|
--transcript-path "$TRANSCRIPT_PATH" \
|
|
49
49
|
--path "$(pwd)" \
|
|
50
|
+
--pid "$(ps -o ppid= -p $$ | tr -d ' ')" \
|
|
50
51
|
[--description "<text>"] \
|
|
51
52
|
[--project <slug>] \
|
|
52
53
|
[--assignment <slug>]
|
|
53
54
|
```
|
|
54
55
|
|
|
55
|
-
Omit `--transcript-path` entirely (don't pass an empty string) if no transcript path could be resolved.
|
|
56
|
+
Omit `--transcript-path` entirely (don't pass an empty string) if no transcript path could be resolved. The `--pid` value is the shell PID that owns the Claude process — the dashboard uses it to disable Resume while this session may still be writing the transcript, forcing users to Fork instead. If `ps` is unavailable, omit `--pid` too.
|
|
56
57
|
|
|
57
58
|
The CLI prints one of:
|
|
58
59
|
- `Registered standalone agent session <sessionId>.`
|