gsd-lite 0.6.0 → 0.6.1
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.
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
"name": "gsd",
|
|
14
14
|
"source": "./",
|
|
15
15
|
"description": "AI orchestration tool — GSD management shell + Superpowers quality core. 5 commands, 4 agents, 5 workflows, MCP server, context monitoring.",
|
|
16
|
-
"version": "0.6.
|
|
16
|
+
"version": "0.6.1",
|
|
17
17
|
"keywords": [
|
|
18
18
|
"orchestration",
|
|
19
19
|
"mcp",
|
package/README.md
CHANGED
|
@@ -213,8 +213,8 @@ All state lives in `.gsd/state.json` — a single source of truth with:
|
|
|
213
213
|
|-----------|-----|----------|
|
|
214
214
|
| Commands | 32 | **6** |
|
|
215
215
|
| Agents | 12 | **4** |
|
|
216
|
-
| Source files | 100+ | **~
|
|
217
|
-
| Installer | 2465 lines | **~
|
|
216
|
+
| Source files | 100+ | **~48** |
|
|
217
|
+
| Installer | 2465 lines | **~290 lines** |
|
|
218
218
|
| User interactions | 6+ confirmations | **Typically 2** |
|
|
219
219
|
| TDD / Anti-rationalization | No | **Yes** |
|
|
220
220
|
| State machine recovery | Partial | **Full (12 modes)** |
|
|
@@ -249,7 +249,7 @@ gsd-lite/
|
|
|
249
249
|
├── references/ # 8 reference docs
|
|
250
250
|
├── hooks/ # Session lifecycle (StatusLine + PostToolUse + SessionStart + Stop + AutoUpdate)
|
|
251
251
|
│ └── lib/ # Shared hook utilities (gsd-finder)
|
|
252
|
-
├── tests/ #
|
|
252
|
+
├── tests/ # 866 tests (unit + simulation + E2E)
|
|
253
253
|
├── cli.js # Install/uninstall CLI entry
|
|
254
254
|
├── install.js # Installation script
|
|
255
255
|
└── uninstall.js # Uninstall script
|
|
@@ -258,7 +258,7 @@ gsd-lite/
|
|
|
258
258
|
## Testing
|
|
259
259
|
|
|
260
260
|
```bash
|
|
261
|
-
npm test # Run all
|
|
261
|
+
npm test # Run all 866 tests
|
|
262
262
|
npm run test:coverage # Tests + coverage report (94%+ lines, 83%+ branches)
|
|
263
263
|
npm run lint # Biome lint
|
|
264
264
|
node --test tests/file.js # Run a single test file
|
|
@@ -112,7 +112,7 @@ process.stdin.on('end', () => {
|
|
|
112
112
|
if (isCritical) {
|
|
113
113
|
message = `CONTEXT CRITICAL: Usage at ${usedPct}%. Remaining: ${remaining}%. `
|
|
114
114
|
+ 'Context is nearly exhausted. Complete current task checkpoint immediately, '
|
|
115
|
-
+ 'set workflow_mode = awaiting_clear via
|
|
115
|
+
+ 'set workflow_mode = awaiting_clear via state-update, and tell user to /clear then /gsd:resume.';
|
|
116
116
|
} else {
|
|
117
117
|
message = `CONTEXT WARNING: Usage at ${usedPct}%. Remaining: ${remaining}%. `
|
|
118
118
|
+ 'Context is getting limited. Avoid starting new complex work. Complete current task then save state.';
|
package/package.json
CHANGED
|
@@ -109,26 +109,28 @@ async function resumeExecutingTask(state, basePath) {
|
|
|
109
109
|
};
|
|
110
110
|
}
|
|
111
111
|
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
112
|
+
// Find the running task — either from current_task or by scanning (orphan recovery)
|
|
113
|
+
const runningTask = state.current_task
|
|
114
|
+
? getTaskById(phase, state.current_task)
|
|
115
|
+
: (phase.todo || []).find(t => t.lifecycle === 'running');
|
|
116
|
+
|
|
117
|
+
if (runningTask?.lifecycle === 'running') {
|
|
118
|
+
const isRetrying = (runningTask.retry_count || 0) > 0;
|
|
119
|
+
const persistError = await persist(basePath, {
|
|
120
|
+
workflow_mode: 'executing_task',
|
|
121
|
+
current_task: runningTask.id,
|
|
122
|
+
current_review: null,
|
|
123
|
+
});
|
|
124
|
+
if (persistError) return persistError;
|
|
125
|
+
return buildExecutorDispatch(state, phase, runningTask, {
|
|
126
|
+
resumed: true,
|
|
127
|
+
interruption_recovered: !isRetrying,
|
|
128
|
+
...(isRetrying ? {
|
|
129
|
+
retry_after_failure: true,
|
|
130
|
+
retry_count: runningTask.retry_count,
|
|
131
|
+
last_failure_summary: runningTask.last_failure_summary,
|
|
132
|
+
} : {}),
|
|
133
|
+
});
|
|
132
134
|
}
|
|
133
135
|
|
|
134
136
|
const selection = selectRunnableTask(phase, state);
|
|
@@ -153,8 +153,8 @@ export async function handleReviewerResult({ result, basePath = process.cwd() }
|
|
|
153
153
|
workflow_mode: workflowMode,
|
|
154
154
|
phase_id: phase.id,
|
|
155
155
|
review_status: reviewStatus,
|
|
156
|
-
accepted_count:
|
|
157
|
-
rework_count:
|
|
156
|
+
accepted_count: taskPatches.filter(p => p.lifecycle === 'accepted').length,
|
|
157
|
+
rework_count: taskPatches.filter(p => p.lifecycle === 'needs_revalidation').length,
|
|
158
158
|
critical_count: result.critical_issues?.length || 0,
|
|
159
159
|
};
|
|
160
160
|
}
|