@stoneforge/smithy 1.8.0 → 1.9.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/dist/prompts/director.md +7 -7
- package/dist/prompts/persistent-worker.md +3 -3
- package/dist/prompts/steward-docs.md +1 -1
- package/dist/prompts/steward-merge.md +1 -1
- package/dist/prompts/worker.md +3 -3
- package/dist/services/dispatch-daemon.d.ts.map +1 -1
- package/dist/services/dispatch-daemon.js +42 -6
- package/dist/services/dispatch-daemon.js.map +1 -1
- package/package.json +5 -5
- package/web/assets/{index-CTmFQ4-4.js → index-B6-Iktm1.js} +96 -96
- package/web/index.html +1 -1
package/dist/prompts/director.md
CHANGED
|
@@ -162,13 +162,13 @@ When creating tasks, instruct workers to update the Documentation Directory if t
|
|
|
162
162
|
|
|
163
163
|
### Documentation Library
|
|
164
164
|
|
|
165
|
-
All workspace documentation belongs to the **Documentation** library
|
|
165
|
+
All workspace documentation belongs to the **Documentation** library. Use `sf docs init` to bootstrap the Documentation library infrastructure (idempotent — safe to run anytime). After creating any document, add it to the library:
|
|
166
166
|
|
|
167
167
|
```bash
|
|
168
|
-
sf
|
|
168
|
+
sf docs add <new-doc-id>
|
|
169
169
|
```
|
|
170
170
|
|
|
171
|
-
When instructing workers to create documents, include the
|
|
171
|
+
When instructing workers to create documents, include the `sf docs add` step in task descriptions.
|
|
172
172
|
|
|
173
173
|
### Before Planning
|
|
174
174
|
|
|
@@ -197,7 +197,7 @@ ALWAYS include a documentation instruction in every task description. Workers mu
|
|
|
197
197
|
- Create new documents when they discover undocumented knowledge
|
|
198
198
|
- Fix outdated or incorrect documentation they encounter
|
|
199
199
|
- Update the Documentation Directory when creating or modifying documents
|
|
200
|
-
- Add the document to the Documentation library (`sf
|
|
200
|
+
- Add the document to the Documentation library (`sf docs add <doc-id>`)
|
|
201
201
|
- Use the correct `--category` when creating documents
|
|
202
202
|
|
|
203
203
|
### Foundational Documents
|
|
@@ -206,11 +206,11 @@ When setting up a new project or major feature area, create foundational documen
|
|
|
206
206
|
|
|
207
207
|
```bash
|
|
208
208
|
sf document create --title "System Architecture" --content "..." --category spec --type markdown
|
|
209
|
-
sf
|
|
209
|
+
sf docs add <doc-id> # Add to Documentation library
|
|
210
210
|
sf document create --title "Decision Log" --content "..." --category decision-log --type markdown
|
|
211
|
-
sf
|
|
211
|
+
sf docs add <doc-id> # Add to Documentation library
|
|
212
212
|
sf document create --title "API Reference" --content "..." --category reference --type markdown
|
|
213
|
-
sf
|
|
213
|
+
sf docs add <doc-id> # Add to Documentation library
|
|
214
214
|
```
|
|
215
215
|
|
|
216
216
|
### Document Categories
|
|
@@ -181,7 +181,7 @@ Keep documentation accurate and complete as you work:
|
|
|
181
181
|
- **Create** new documents when you discover undocumented knowledge worth preserving (architecture patterns, gotchas, setup steps).
|
|
182
182
|
- **Fix** outdated or incorrect documentation you encounter, even if it's not directly related to your task — accurate docs benefit all agents.
|
|
183
183
|
- **Update the Documentation Directory** (`sf document search "documentation directory"`) when you create or significantly modify documents.
|
|
184
|
-
- **Add to the Documentation library** (`sf
|
|
184
|
+
- **Add to the Documentation library** (`sf docs add <doc-id>`) so the document is discoverable via library browsing.
|
|
185
185
|
- Use the correct `--category` when creating: `spec`, `prd`, `decision-log`, `reference`, `how-to`, `explanation`, `runbook`, `changelog`, `post-mortem`. Use `other` only when no existing category fits, and set `--metadata '{"customCategory": "name"}'` to track the intended category.
|
|
186
186
|
|
|
187
187
|
```bash
|
|
@@ -190,7 +190,7 @@ sf document update <doc-id> --file updated-content.md
|
|
|
190
190
|
|
|
191
191
|
# Create a new document and add to library
|
|
192
192
|
sf document create --title "Auth Architecture" --content "..." --category reference --type markdown
|
|
193
|
-
sf
|
|
193
|
+
sf docs add <new-doc-id>
|
|
194
194
|
|
|
195
195
|
# Search for the Documentation Directory to update it
|
|
196
196
|
sf document search "documentation directory"
|
|
@@ -228,7 +228,7 @@ sf document search "query" --category spec --limit 10
|
|
|
228
228
|
# Documentation — create & update
|
|
229
229
|
sf document create --title "Doc Title" --content "..." --category reference --type markdown
|
|
230
230
|
sf document update <doc-id> --content "..."
|
|
231
|
-
sf
|
|
231
|
+
sf docs add <doc-id> # Add new doc to Documentation library
|
|
232
232
|
|
|
233
233
|
# Merge completed work (squash-merge session branch into master)
|
|
234
234
|
sf merge --message "descriptive commit message"
|
|
@@ -45,7 +45,7 @@ Use your judgment. If you can determine the correct fix by reading the code, fix
|
|
|
45
45
|
- **If low/medium**: Fix in your worktree, commit with clear message describing the fix
|
|
46
46
|
- **If high**: Collect for Director escalation
|
|
47
47
|
|
|
48
|
-
5. **Verify library membership**: Check that all documentation documents belong to the Documentation library
|
|
48
|
+
5. **Verify library membership**: Check that all documentation documents belong to the Documentation library. Run `sf docs init` to ensure the library exists, then add any missing documents with `sf docs add <doc-id>`.
|
|
49
49
|
|
|
50
50
|
6. **If changes made**: `sf merge --cleanup --message "docs: automated documentation fixes"` to squash-merge and clean up
|
|
51
51
|
|
|
@@ -60,7 +60,7 @@ If the PR changes behavior that is likely documented (API endpoints, config opti
|
|
|
60
60
|
sf document search "keyword from changed area"
|
|
61
61
|
```
|
|
62
62
|
|
|
63
|
-
If relevant documents exist and were NOT updated in the PR, include documentation updates in your review feedback. If the worker's task is being handed off for changes, specify which documents need updating. Also check that the Documentation Directory was updated if new documents were created. Also verify that any new documents created by the worker were added to the Documentation library (`sf
|
|
63
|
+
If relevant documents exist and were NOT updated in the PR, include documentation updates in your review feedback. If the worker's task is being handed off for changes, specify which documents need updating. Also check that the Documentation Directory was updated if new documents were created. Also verify that any new documents created by the worker were added to the Documentation library (`sf docs add <doc-id>`). If missing, include this in your review feedback.
|
|
64
64
|
|
|
65
65
|
## No Commits to Merge
|
|
66
66
|
|
package/dist/prompts/worker.md
CHANGED
|
@@ -233,7 +233,7 @@ Keep documentation accurate and complete as you work:
|
|
|
233
233
|
- **Create** new documents when you discover undocumented knowledge worth preserving (architecture patterns, gotchas, setup steps).
|
|
234
234
|
- **Fix** outdated or incorrect documentation you encounter, even if it's not directly related to your task — accurate docs benefit all agents.
|
|
235
235
|
- **Update the Documentation Directory** (`sf document search "documentation directory"`) when you create or significantly modify documents.
|
|
236
|
-
- **Add to the Documentation library** (`sf
|
|
236
|
+
- **Add to the Documentation library** (`sf docs add <doc-id>`) so the document is discoverable via library browsing.
|
|
237
237
|
- Use the correct `--category` when creating: `spec`, `prd`, `decision-log`, `reference`, `how-to`, `explanation`, `runbook`, `changelog`, `post-mortem`. Use `other` only when no existing category fits, and set `--metadata '{"customCategory": "name"}'` to track the intended category.
|
|
238
238
|
|
|
239
239
|
```bash
|
|
@@ -242,7 +242,7 @@ sf document update <doc-id> --file updated-content.md
|
|
|
242
242
|
|
|
243
243
|
# Create a new document and add to library
|
|
244
244
|
sf document create --title "Auth Architecture" --content "..." --category reference --type markdown
|
|
245
|
-
sf
|
|
245
|
+
sf docs add <new-doc-id>
|
|
246
246
|
|
|
247
247
|
# Search for the Documentation Directory to update it
|
|
248
248
|
sf document search "documentation directory"
|
|
@@ -289,5 +289,5 @@ sf document search "query" --category spec --limit 10
|
|
|
289
289
|
# Documentation — create & update
|
|
290
290
|
sf document create --title "Doc Title" --content "..." --category reference --type markdown
|
|
291
291
|
sf document update <doc-id> --content "..."
|
|
292
|
-
sf
|
|
292
|
+
sf docs add <doc-id> # Add new doc to Documentation library
|
|
293
293
|
```
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dispatch-daemon.d.ts","sourceRoot":"","sources":["../../src/services/dispatch-daemon.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"dispatch-daemon.d.ts","sourceRoot":"","sources":["../../src/services/dispatch-daemon.ts"],"names":[],"mappings":"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"}
|
|
@@ -185,7 +185,9 @@ export class DispatchDaemonImpl {
|
|
|
185
185
|
}
|
|
186
186
|
getRateLimitStatus() {
|
|
187
187
|
const fallbackChain = this.settingsService?.getAgentDefaults().fallbackChain ?? [];
|
|
188
|
-
const isPaused = fallbackChain.length > 0
|
|
188
|
+
const isPaused = fallbackChain.length > 0
|
|
189
|
+
? this.rateLimitTracker.isAllLimited(fallbackChain)
|
|
190
|
+
: this.rateLimitTracker.isLimited('claude');
|
|
189
191
|
const allLimits = this.rateLimitTracker.getAllLimits();
|
|
190
192
|
const soonestReset = this.rateLimitTracker.getSoonestResetTime();
|
|
191
193
|
return {
|
|
@@ -549,6 +551,11 @@ export class DispatchDaemonImpl {
|
|
|
549
551
|
role: 'worker',
|
|
550
552
|
workerMode: 'ephemeral',
|
|
551
553
|
});
|
|
554
|
+
// Track recovery stewards assigned during this cycle to prevent cascade assignment.
|
|
555
|
+
// When a steward session terminates immediately (e.g. rate-limited), getActiveSession
|
|
556
|
+
// returns null and the steward appears available for the next task. This set ensures
|
|
557
|
+
// each steward is only assigned once per recoverOrphanedAssignments call.
|
|
558
|
+
const stewardsUsedThisCycle = new Set();
|
|
552
559
|
for (const worker of workers) {
|
|
553
560
|
const workerId = asEntityId(worker.id);
|
|
554
561
|
// 2. Skip if worker has an active session
|
|
@@ -561,6 +568,14 @@ export class DispatchDaemonImpl {
|
|
|
561
568
|
});
|
|
562
569
|
if (workerTasks.length === 0)
|
|
563
570
|
continue;
|
|
571
|
+
// 3b. Skip recovery entirely when all executables are rate-limited.
|
|
572
|
+
// Rate limits are transient — do NOT increment resumeCount, as that
|
|
573
|
+
// would eventually trigger the recovery steward for a non-stuck task.
|
|
574
|
+
const executableCheck = this.resolveExecutableWithFallback(worker);
|
|
575
|
+
if (executableCheck === 'all_limited') {
|
|
576
|
+
logger.debug(`All executables rate-limited, skipping orphan recovery for ${worker.name}`);
|
|
577
|
+
continue; // Skip this worker entirely — do NOT increment resumeCount
|
|
578
|
+
}
|
|
564
579
|
// 4. Check if the task is stuck in a resume loop
|
|
565
580
|
const taskAssignment = workerTasks[0];
|
|
566
581
|
const resumeCount = taskAssignment.orchestratorMeta?.resumeCount ?? 0;
|
|
@@ -569,7 +584,7 @@ export class DispatchDaemonImpl {
|
|
|
569
584
|
// Task has been resumed too many times without status change —
|
|
570
585
|
// spawn a recovery steward instead of resuming the worker again
|
|
571
586
|
try {
|
|
572
|
-
await this.spawnRecoveryStewardForTask(worker, taskAssignment.task, taskAssignment.orchestratorMeta);
|
|
587
|
+
await this.spawnRecoveryStewardForTask(worker, taskAssignment.task, taskAssignment.orchestratorMeta, stewardsUsedThisCycle);
|
|
573
588
|
processed++;
|
|
574
589
|
logger.info(`[dispatch-daemon] Spawning recovery steward for stuck task ${taskAssignment.task.id} after ${resumeCount} resume attempts`);
|
|
575
590
|
}
|
|
@@ -619,6 +634,13 @@ export class DispatchDaemonImpl {
|
|
|
619
634
|
});
|
|
620
635
|
if (stewardTasks.length === 0)
|
|
621
636
|
continue;
|
|
637
|
+
// Skip recovery when all executables are rate-limited (same guard as Phase 1).
|
|
638
|
+
// Prevents stewardRecoveryCount from incrementing due to transient rate limits.
|
|
639
|
+
const stewardExecCheck = this.resolveExecutableWithFallback(steward);
|
|
640
|
+
if (stewardExecCheck === 'all_limited') {
|
|
641
|
+
logger.debug(`All executables rate-limited, skipping steward orphan recovery for ${steward.name}`);
|
|
642
|
+
continue;
|
|
643
|
+
}
|
|
622
644
|
const orphanedAssignment = stewardTasks[0];
|
|
623
645
|
// Safety valve: cap steward recovery attempts to prevent infinite re-dispatch loops
|
|
624
646
|
const stewardRecoveryCount = orphanedAssignment.orchestratorMeta?.stewardRecoveryCount ?? 0;
|
|
@@ -997,8 +1019,13 @@ export class DispatchDaemonImpl {
|
|
|
997
1019
|
try {
|
|
998
1020
|
// Check if all executables in the fallback chain are rate-limited.
|
|
999
1021
|
// When paused, skip dispatch-related polls but still run non-dispatch work.
|
|
1022
|
+
// When no fallback chain is configured, check if the default provider is limited —
|
|
1023
|
+
// an empty chain previously made allLimited always false, letting orphan recovery
|
|
1024
|
+
// run every cycle even when the only executable was rate-limited.
|
|
1000
1025
|
const fallbackChain = this.settingsService?.getAgentDefaults().fallbackChain ?? [];
|
|
1001
|
-
const allLimited = fallbackChain.length > 0
|
|
1026
|
+
const allLimited = fallbackChain.length > 0
|
|
1027
|
+
? this.rateLimitTracker.isAllLimited(fallbackChain)
|
|
1028
|
+
: this.rateLimitTracker.isLimited('claude');
|
|
1002
1029
|
if (allLimited) {
|
|
1003
1030
|
// Schedule a wake-up timer so we re-check when the soonest limit expires
|
|
1004
1031
|
const soonestReset = this.rateLimitTracker.getSoonestResetTime();
|
|
@@ -1747,17 +1774,23 @@ export class DispatchDaemonImpl {
|
|
|
1747
1774
|
* @param task - The stuck task
|
|
1748
1775
|
* @param taskMeta - The task's orchestrator metadata
|
|
1749
1776
|
*/
|
|
1750
|
-
async spawnRecoveryStewardForTask(worker, task, taskMeta) {
|
|
1777
|
+
async spawnRecoveryStewardForTask(worker, task, taskMeta, stewardsUsedThisCycle) {
|
|
1751
1778
|
const workerId = asEntityId(worker.id);
|
|
1752
1779
|
// 1. Find an available recovery steward
|
|
1753
1780
|
const stewards = await this.agentRegistry.listAgents({
|
|
1754
1781
|
role: 'steward',
|
|
1755
1782
|
stewardFocus: 'recovery',
|
|
1756
1783
|
});
|
|
1757
|
-
// Find a steward without an active session
|
|
1784
|
+
// Find a steward without an active session that hasn't already been used this cycle.
|
|
1785
|
+
// The stewardsUsedThisCycle guard prevents cascade assignment: when a steward session
|
|
1786
|
+
// terminates immediately (e.g. due to rate limiting), getActiveSession returns null
|
|
1787
|
+
// and the steward appears available for the next task in the same loop iteration.
|
|
1758
1788
|
let recoverySteward;
|
|
1759
1789
|
for (const steward of stewards) {
|
|
1760
|
-
const
|
|
1790
|
+
const sid = asEntityId(steward.id);
|
|
1791
|
+
if (stewardsUsedThisCycle?.has(sid))
|
|
1792
|
+
continue;
|
|
1793
|
+
const session = this.sessionManager.getActiveSession(sid);
|
|
1761
1794
|
if (!session) {
|
|
1762
1795
|
recoverySteward = steward;
|
|
1763
1796
|
break;
|
|
@@ -1842,6 +1875,9 @@ export class DispatchDaemonImpl {
|
|
|
1842
1875
|
interactive: false, // Stewards use headless mode
|
|
1843
1876
|
executablePathOverride: recoveryExecutableOverride ?? undefined,
|
|
1844
1877
|
});
|
|
1878
|
+
// 5b. Mark steward as used this cycle so it won't be re-assigned if the session
|
|
1879
|
+
// terminates immediately (e.g. rate-limited) before the next loop iteration checks.
|
|
1880
|
+
stewardsUsedThisCycle?.add(stewardId);
|
|
1845
1881
|
// 6. Session started successfully — now transfer the task from worker to steward.
|
|
1846
1882
|
// If the metadata update fails, terminate the steward session to avoid an
|
|
1847
1883
|
// orphaned steward running without proper task assignment.
|