sillyspec 3.27.11 → 3.27.12
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/.claude/skills/sillyspec-execute/SKILL.md +214 -214
- package/.claude/skills/sillyspec-plan/SKILL.md +156 -156
- package/.claude/skills/sillyspec-quick/SKILL.md +116 -116
- package/README.md +3 -2
- package/package.json +1 -1
- package/src/change-delete.js +181 -0
- package/src/docs-check.js +126 -0
- package/src/endpoint-extractor.js +7 -4
- package/src/index.js +173 -9
- package/src/init.js +104 -27
- package/src/module-changelog.js +116 -0
- package/src/progress/change-registry.js +28 -0
- package/src/progress/shared.js +6 -0
- package/src/progress/stage-machine.js +85 -8
- package/src/progress.js +3 -0
- package/src/run/command.js +25 -0
- package/src/run/complete-handlers.js +11 -1
- package/src/run/prompt.js +12 -1
- package/src/run/shared.js +32 -0
- package/src/stages/archive.js +5 -0
- package/src/stages/execute.js +1 -0
- package/src/sync.js +453 -17
- package/src/workflow.js +4 -0
- package/src/worktree-apply.js +4 -4
- package/src/worktree.js +6 -4
- package/templates/{claude-instruction.md → agents-instruction.md} +2 -2
- package/.npmrc-temp +0 -1
package/src/worktree-apply.js
CHANGED
|
@@ -842,10 +842,10 @@ export function applyWorktree(changeName, { cwd, checkOnly = false, merge = fals
|
|
|
842
842
|
const marker = `sillyspec apply ${changeName} --stash-dirty ${new Date().toISOString()}`;
|
|
843
843
|
const before = (gitQuiet(projectRoot, ['stash', 'list']) || '').split('\n').filter(Boolean).length;
|
|
844
844
|
// pathspec 限定 stash 范围与探针/4.5 同口径(排除 .sillyspec/ 运行时与他者 spec 产物、
|
|
845
|
-
// .claude/docs/CLAUDE.md)——裸 push -u 会把排除项的未跟踪文件一并卷走,恢复时与
|
|
845
|
+
// .claude/docs/CLAUDE.md/AGENTS.md)——裸 push -u 会把排除项的未跟踪文件一并卷走,恢复时与
|
|
846
846
|
// apply 期间重建的 spec 文件 already exists 互踩(实证 dbg)。
|
|
847
847
|
git(projectRoot, ['stash', 'push', '--include-untracked', '-m', marker,
|
|
848
|
-
'--', '.', ':(exclude).sillyspec/', ':(exclude).claude/', ':(exclude)docs/', ':(exclude)CLAUDE.md'], { timeout: 60000 });
|
|
848
|
+
'--', '.', ':(exclude).sillyspec/', ':(exclude).claude/', ':(exclude)docs/', ':(exclude)CLAUDE.md', ':(exclude)AGENTS.md'], { timeout: 60000 });
|
|
849
849
|
const headEntry = ((gitQuiet(projectRoot, ['stash', 'list']) || '').split('\n')[0] || '');
|
|
850
850
|
const after = (gitQuiet(projectRoot, ['stash', 'list']) || '').split('\n').filter(Boolean).length;
|
|
851
851
|
const sha = gitQuiet(projectRoot, ['rev-parse', '--verify', 'stash@{0}']);
|
|
@@ -884,12 +884,12 @@ export function applyWorktree(changeName, { cwd, checkOnly = false, merge = fals
|
|
|
884
884
|
// (这些文件 apply 前无未提交修改,还原 = apply 前状态),无关脏文件不在 patch/rollback 范围
|
|
885
885
|
// 不受影响 → fail-safe,报错后 stash 重试即可。放行时 warning 提示此路径。
|
|
886
886
|
// 排除非交付物的元数据/文档 churn(execute 自身改的 + 多操作者常改的 agent 指引/文档),
|
|
887
|
-
// 否则别人改 CLAUDE.md/docs/.claude → 判定 dirty → apply 误阻断(多操作者仓库高频踩坑)。
|
|
887
|
+
// 否则别人改 CLAUDE.md/AGENTS.md/docs/.claude → 判定 dirty → apply 误阻断(多操作者仓库高频踩坑)。
|
|
888
888
|
// 注意:排除规则必须和 computeBaselineHash (worktree.js) 一致(虽已不比对 hash,仍用同一口径判当前 dirty)。
|
|
889
889
|
if (meta.baselineHash) {
|
|
890
890
|
// pathspec:`--` 结束选项,`.` 包含全部,后续 :(exclude) 排除非交付物元数据/文档 churn
|
|
891
891
|
// (与 computeBaselineHash 同口径)。数组形式逐元素传递,:(exclude) magic 字面直传不经 shell。
|
|
892
|
-
const exclude = ['--', '.', ':(exclude).sillyspec/', ':(exclude).claude/', ':(exclude)docs/', ':(exclude)CLAUDE.md'];
|
|
892
|
+
const exclude = ['--', '.', ':(exclude).sillyspec/', ':(exclude).claude/', ':(exclude)docs/', ':(exclude)CLAUDE.md', ':(exclude)AGENTS.md'];
|
|
893
893
|
const staged = gitQuiet(projectRoot, ['diff', '--cached', ...exclude]) || '';
|
|
894
894
|
const unstaged = gitQuiet(projectRoot, ['diff', ...exclude]) || '';
|
|
895
895
|
const untracked = gitQuiet(projectRoot, ['ls-files', '--others', '--exclude-standard', ...exclude]) || '';
|
package/src/worktree.js
CHANGED
|
@@ -226,9 +226,9 @@ export function computeBaselineHash(cwd) {
|
|
|
226
226
|
// - .sillyspec/:brainstorm/plan 蓝图 + runtime 产物
|
|
227
227
|
// - .claude/:agent 配置/skills/CLAUDE.md(多操作者 agent 指引 churn)
|
|
228
228
|
// - docs/:文档(非代码交付物)
|
|
229
|
-
// - CLAUDE.md:根 agent
|
|
229
|
+
// - CLAUDE.md / AGENTS.md:根 agent 指引(多操作者常改;AGENTS.md 为内容源、CLAUDE.md 为指针)
|
|
230
230
|
// 必须和 applyWorktree step 4.5 (worktree-apply.js) 使用相同的排除规则。
|
|
231
|
-
const exclude = ['--', '.', ':(exclude).sillyspec/', ':(exclude).claude/', ':(exclude)docs/', ':(exclude)CLAUDE.md'];
|
|
231
|
+
const exclude = ['--', '.', ':(exclude).sillyspec/', ':(exclude).claude/', ':(exclude)docs/', ':(exclude)CLAUDE.md', ':(exclude)AGENTS.md'];
|
|
232
232
|
const staged = gitQuiet(cwd, ['diff', '--cached', ...exclude], { timeout: 30000 }) || '';
|
|
233
233
|
const unstaged = gitQuiet(cwd, ['diff', ...exclude], { timeout: 30000 }) || '';
|
|
234
234
|
const untracked = gitQuiet(cwd, ['ls-files', '--others', '--exclude-standard', ...exclude], { timeout: 30000 }) || '';
|
|
@@ -1632,7 +1632,9 @@ export class WorktreeManager {
|
|
|
1632
1632
|
}
|
|
1633
1633
|
|
|
1634
1634
|
/**
|
|
1635
|
-
* DB
|
|
1635
|
+
* DB 终态探测(坑 doctor-reprovision-archived-change):changes 表 status='archived'
|
|
1636
|
+
* (归档收尾)或 'deleted'(change-delete 删除,2026-08-30)——两种终态的 worktree 都是
|
|
1637
|
+
* 死目录,doctor 一致跳过供给、fix 走 cleanup。
|
|
1636
1638
|
* 只读直查(node:sqlite)——doctor 是同步方法,惰性动态 import 不可用;DB 不存在/无行/
|
|
1637
1639
|
* 读失败 → false(保守退回普通 deps 供给路径)。
|
|
1638
1640
|
* @param {string} name
|
|
@@ -1645,7 +1647,7 @@ export class WorktreeManager {
|
|
|
1645
1647
|
const db = openDatabase(dbPath, { readOnly: true });
|
|
1646
1648
|
try {
|
|
1647
1649
|
const row = db.prepare('SELECT status FROM changes WHERE name = ?').get(name);
|
|
1648
|
-
return row?.status === 'archived';
|
|
1650
|
+
return row?.status === 'archived' || row?.status === 'deleted';
|
|
1649
1651
|
} finally { try { db.close() } catch {} }
|
|
1650
1652
|
} catch { return false }
|
|
1651
1653
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Agent 指引
|
|
2
2
|
|
|
3
3
|
## 项目说明
|
|
4
4
|
本项目使用 **SillySpec** 管理变更,采用文档驱动开发。SillySpec 是给 Agent 调用的 CLI 流程控制器,不是给人类直接使用的产品,也不是处理业务逻辑的工具——你(Agent)通过 CLI 告诉它"我在哪",它告诉你"下一步做什么";你执行步骤,它校验产出、推进状态,人类只在关键决策点介入审批。要考虑多 agent 同时操作代码,代码随时可能变化。所有变更以稳定、可用、可维护为目标,按生产级标准处理。
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
9. **中途停下不靠额外命令存进度**——进度已由上一次 `--done` 自动落盘;恢复时用 `sillyspec progress show` 查看进度,再用 `sillyspec run <stage>` 续跑,不直接 commit 半成品。
|
|
16
16
|
10. **实现完成后对照文档验收**(design.md / 模块文档),并检查是否影响已有测试。
|
|
17
17
|
11. **非测试逻辑本身有误时,禁止改测试来"通过"**——修逻辑,不修测试。
|
|
18
|
-
12. **hook
|
|
18
|
+
12. **git hook 拦截提交时禁止跳过**(如 `.husky/pre-push`),修复问题后再提交。
|
|
19
19
|
13. **代码必须兼容 Windows / Linux / macOS**(路径 / 换行 / 并发都要顾)。
|
|
20
20
|
14. **任务记录隔离**:永不重置 / reset / 清零已存在的 change;多个活跃 change 各自 `--change <名>` 隔离不重叠;quick 同一 QUICKLOG 按 ql-ID 条目追加,不冲突。
|
|
21
21
|
15. **quicklog 结构化落盘**:末步 `--done` 用四参数 `--req/--cause/--solution/--result`(CLI 合成结构化 output 并自动提取标题/四段分行);文件括注用 `--file-notes "path::注 || path2"`。骨架由 CLI 接管,`--done` 后按需核对即可,勿手拼模板。
|
package/.npmrc-temp
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
//registry.npmjs.org/:_authToken=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
|