@seanyao/roll 3.620.1 → 3.624.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.
Files changed (67) hide show
  1. package/CHANGELOG.md +46 -0
  2. package/dist/roll.mjs +4563 -3369
  3. package/package.json +1 -1
  4. package/lib/__pycache__/changelog_audit.cpython-314.pyc +0 -0
  5. package/lib/__pycache__/github_sync.cpython-314.pyc +0 -0
  6. package/lib/__pycache__/loop-fmt.cpython-314.pyc +0 -0
  7. package/lib/__pycache__/loop_result_eval.cpython-314.pyc +0 -0
  8. package/lib/__pycache__/loop_unstick.cpython-314.pyc +0 -0
  9. package/lib/__pycache__/model_prices.cpython-314.pyc +0 -0
  10. package/lib/__pycache__/prices_fetcher.cpython-314.pyc +0 -0
  11. package/lib/__pycache__/roll-home.cpython-314.pyc +0 -0
  12. package/lib/__pycache__/roll-loop-status.cpython-314.pyc +0 -0
  13. package/lib/__pycache__/roll_git.cpython-314.pyc +0 -0
  14. package/lib/__pycache__/roll_render.cpython-314.pyc +0 -0
  15. package/lib/__pycache__/slides-render.cpython-314.pyc +0 -0
  16. package/lib/agent_usage/__pycache__/__init__.cpython-314.pyc +0 -0
  17. package/lib/agent_usage/__pycache__/gemini.cpython-314.pyc +0 -0
  18. package/lib/agent_usage/__pycache__/kimi.cpython-314.pyc +0 -0
  19. package/lib/agent_usage/__pycache__/openai.cpython-314.pyc +0 -0
  20. package/lib/agent_usage/__pycache__/pi.cpython-314.pyc +0 -0
  21. package/lib/agent_usage/__pycache__/pi_emit.cpython-314.pyc +0 -0
  22. package/lib/agent_usage/__pycache__/qwen.cpython-314.pyc +0 -0
  23. package/skills/README.md +0 -64
  24. package/skills/docs/skill-authoring.md +0 -74
  25. package/skills/reports/skill-audit-summary.md +0 -53
  26. package/skills/roll-.changelog/SKILL.md +0 -47
  27. package/skills/roll-.changelog/references/full-contract.md +0 -462
  28. package/skills/roll-.clarify/SKILL.md +0 -64
  29. package/skills/roll-.dream/SKILL.md +0 -47
  30. package/skills/roll-.dream/references/full-contract.md +0 -365
  31. package/skills/roll-.echo/SKILL.md +0 -118
  32. package/skills/roll-.qa/SKILL.md +0 -47
  33. package/skills/roll-.qa/references/full-contract.md +0 -256
  34. package/skills/roll-.review/SKILL.md +0 -148
  35. package/skills/roll-build/SKILL.md +0 -49
  36. package/skills/roll-build/references/full-contract.md +0 -968
  37. package/skills/roll-debug/SKILL.md +0 -48
  38. package/skills/roll-debug/assets/injectable-bb.js +0 -263
  39. package/skills/roll-debug/references/full-contract.md +0 -607
  40. package/skills/roll-design/SKILL.md +0 -52
  41. package/skills/roll-design/references/engineering-checklist.md +0 -298
  42. package/skills/roll-design/references/full-contract.md +0 -940
  43. package/skills/roll-doc-audit/SKILL.md +0 -51
  44. package/skills/roll-doc-audit/references/full-contract.md +0 -796
  45. package/skills/roll-doctor/SKILL.md +0 -211
  46. package/skills/roll-fix/SKILL.md +0 -49
  47. package/skills/roll-fix/references/full-contract.md +0 -672
  48. package/skills/roll-idea/SKILL.md +0 -62
  49. package/skills/roll-loop/SKILL.md +0 -50
  50. package/skills/roll-loop/references/full-contract.md +0 -534
  51. package/skills/roll-notes/SKILL.md +0 -107
  52. package/skills/roll-onboard/SKILL.md +0 -238
  53. package/skills/roll-peer/SKILL.md +0 -47
  54. package/skills/roll-peer/references/full-contract.md +0 -323
  55. package/skills/roll-propose/SKILL.md +0 -155
  56. package/skills/roll-review-pr/SKILL.md +0 -62
  57. package/skills/roll-spar/SKILL.md +0 -47
  58. package/skills/roll-spar/references/full-contract.md +0 -288
  59. package/skills/route-cases/skills.json +0 -216
  60. package/skills/scripts/audit-skills.mjs +0 -272
  61. package/skills/scripts/test-audit-skills.mjs +0 -39
  62. package/skills/tests/fixtures/skill-audit/block-skill/SKILL.md +0 -12
  63. package/skills/tests/fixtures/skill-audit/minimal-skill/SKILL.md +0 -8
  64. package/skills/tests/fixtures/skill-audit/quoted-skill/SKILL.md +0 -10
  65. package/skills/tests/fixtures/skill-audit/route-cases.json +0 -21
  66. package/skills/tests/fixtures/skill-audit/spoke-skill/SKILL.md +0 -12
  67. package/skills/tests/fixtures/skill-audit/spoke-skill/references/runbook.md +0 -3
@@ -1,107 +0,0 @@
1
- ---
2
- name: roll-notes
3
- license: MIT
4
- allowed-tools: "Read, Edit, Write, Bash(date:*)"
5
- description: "Load when recording a development moment, decision, discovery, success, or failure into Roll chronological project diary."
6
- ---
7
- # roll-notes
8
-
9
- ## Gotchas
10
-
11
- - Notes are chronological memory, not backlog commitments or release notes.
12
- - Record concrete observations with date context; avoid turning notes into hidden task lists.
13
-
14
- > 项目日记技能。记录开发过程中的成功、失败、感受和任何值得记住的事情。
15
- > Append-only, timeline-driven, no fixed format.
16
-
17
- ## Trigger
18
-
19
- - User says "记一下"、"写进日记"、"append 到日记"
20
- - User asks to record a feeling, finding, or moment
21
- - A project milestone is reached and worth capturing
22
-
23
- ```
24
- $roll-notes 终于搞定了那个 WebSocket 断线重连的 bug
25
- $roll-notes 今天的 code review 给了很好的反馈
26
- ```
27
-
28
- ## When Not to Use
29
-
30
- - Capturing a bug or feature idea into BACKLOG (use `$roll-idea`)
31
- - Generating the user-facing changelog (use `$roll-.changelog`)
32
- - Writing design documents or AC (use `$roll-design`)
33
-
34
- ## Behavior
35
-
36
- 1. **Determine file path**: `.roll/notes/YYYY-MM-DD.md` relative to project root (parallel to `.roll/dream/` and `.roll/briefs/` — notes is project metadata, not source)
37
- 2. **Get current time**: Use `Asia/Shanghai` timezone (`TZ=Asia/Shanghai date`)
38
- 3. **Read existing entries for style**: Before writing, read the last 2–3 entries
39
- in the same file. Analyze their style: heading format, voice/tone,
40
- paragraph structure, emoji usage, code block conventions, sign-off pattern.
41
- New entries must continue this style — do not invent new structural patterns.
42
- 4. **Append**: Add new entry at end of file — never overwrite existing content
43
- 5. **Create if missing**: If file doesn't exist, create with a `# YYYY-MM-DD — <one-line summary>` header
44
- 6. **Free format**: Paragraph, list, code block — whatever fits the moment
45
-
46
- ## File format
47
-
48
- ```markdown
49
- # YYYY-MM-DD — 一句话概括今天
50
-
51
- > 时间:北京时间 HH:MM
52
-
53
- ---
54
-
55
- ## HH:MM — 事件标题
56
-
57
- 发生了什么、怎么解决的、什么感受。
58
-
59
- ---
60
-
61
- ## HH:MM — 另一个事件
62
-
63
- ...
64
- ```
65
-
66
- ## 写作风格(强制)
67
-
68
- **禁止干巴巴的 checklist。禁止只有结论没有过程。必须有人的声音。**
69
-
70
- ### 叙事驱动
71
- 以时间线和事件推进为主线,像讲故事一样记录。不是 `补了功能,pytest 绿`,而是 `"电池剩余电量在哪里看?"我一愣,US-PLAT-003 的 AC 明明写了...`
72
-
73
- ### 技术细节嵌入叙事
74
- 代码、数据、命令行是故事的一部分,自然插入,不是附录。
75
-
76
- ### 对话与互动
77
- 记录用户的反馈、提问、情绪。日记是对话记录,不是独白。
78
-
79
- ### 诚实记录错误
80
- 失败、困惑、教训比成功更值得记录。
81
-
82
- ### 标题有画面感
83
- 不是功能清单。如 `每秒 20 行的噪音`、`22 个文件挤在一个抽屉里`。
84
-
85
- ### 结尾有收束
86
- 最后一段回到人的状态。如 `"值了"。"睡了"。push。`
87
-
88
- ## Rules
89
-
90
- - **Style continuity**: Match the EXACT style, tone, and formatting of previous
91
- entries in the same file. Do not invent new structural patterns or section
92
- headers. If the file already has entries, analyze them first and confirm your
93
- understanding of their style before writing.
94
- - **No planning**: Never write "明日待办" or "下一步"
95
- - **No summaries**: Never write "今日收获" or "经验教训"
96
- - **Pure record**: What happened, as-is — honest, immediate, rough is fine
97
- - **Append freely**: Multiple entries per day is normal
98
-
99
- ## File location
100
-
101
- ```
102
- .roll/
103
- └── notes/
104
- └── YYYY-MM-DD.md
105
- ```
106
-
107
- 注:notes 是项目元数据(与 `.roll/dream/` / `.roll/briefs/` 同级),不入 git;由 dream/brief 等下游 skill 跨日聚合。
@@ -1,238 +0,0 @@
1
- ---
2
- name: roll-onboard
3
- license: MIT
4
- description: "Load when bringing a legacy project into Roll through interactive discovery questions and generation of .roll/onboard-plan.yaml for roll init --apply."
5
- ---
6
- # Roll Onboard
7
-
8
- ## Gotchas
9
-
10
- - Onboard gathers a contract for roll init --apply; it should not mutate the project before the plan is reviewed.
11
- - Respect privacy/scope answers from the interactive questions as hard constraints.
12
-
13
- > Follows the Architecture Constraints, Development Discipline, and Engineering Common Sense defined in the project AGENTS.md.
14
-
15
- Interactive onboarding flow for **legacy projects**: existing code that needs to adopt the Roll convention without disrupting how the team already works.
16
-
17
- ## Trigger
18
-
19
- This skill runs when:
20
-
21
- - `roll init` detected a legacy project (≥10 source files, no `AGENTS.md`)
22
- - The CLI told the user to open an AI agent and run `$roll-onboard`
23
- - The user has now invoked you here
24
-
25
- ## Hard responsibility boundary
26
-
27
- You are the **认知 (cognition) layer**. Your job ends with writing a plan file.
28
-
29
- | You do | You do NOT |
30
- |--------|------------|
31
- | Read project code, infer type/domains/modules | Modify any source file |
32
- | Call `roll-doc-audit --dry-run` to get a gap report | Call `roll-doc-audit` (write mode) |
33
- | Ask the user 9 questions across 3 groups | Decide for the user |
34
- | Produce `.roll/onboard-plan.yaml` | Write `.gitignore` |
35
- | Produce `.roll/onboard-plan.yaml` | Run `roll init --apply` |
36
-
37
- Hard constraint: **AI cannot create files in the user's project other than `.roll/onboard-plan.yaml`.** Anything else is `bash`'s job (`roll init --apply`).
38
-
39
- ## Inputs you must read
40
-
41
- 1. The repository tree (use the project's own structure to infer technologies)
42
- 2. Any existing `README.md` / `package.json` / `pyproject.toml` / `Cargo.toml` / `go.mod` etc. as evidence
43
- 3. `roll-doc-audit --dry-run` output → identifies what documentation gaps exist
44
- 4. The path-audit pattern: scan for legacy structure markers (`BACKLOG.md`, `docs/features/`, etc.) — if any are present, REFUSE and tell the user to run `npx @seanyao/roll@2 migrate` first
45
-
46
- ## Workflow
47
-
48
- ### Step 0 — Pre-flight
49
-
50
- 1. Check that you're in a legacy project root (no `AGENTS.md`, has source code)
51
- 2. If `BACKLOG.md` or `docs/features/` already present → STOP, tell user to run `npx @seanyao/roll@2 migrate` first (this is a partial-migration project, not legacy)
52
- 3. Check `.roll/onboard-plan.yaml` doesn't already exist; if it does, ask user whether to overwrite
53
-
54
- ### Step 1 — Read code, build understanding
55
-
56
- Walk the repo. Identify:
57
- - **type**: one of `backend-service` / `frontend-only` / `fullstack` / `cli`
58
- - **description**: 1-2 sentence summary of what this project does
59
- - **domains**: top business/technical domains (e.g., "auth", "billing", "search")
60
- - **key_modules**: top 3-5 modules that hold most of the logic
61
-
62
- ### Step 1b — Phase 2 analysis: business model, tech, tests (US-ONBOARD-016)
63
-
64
- A single onboard now produces three structured analysis sections in the plan
65
- (`domain_model`, `tech_analysis`, `test_assessment`). Build them here so Step 4
66
- can serialise them.
67
-
68
- **`domain_model`** — from the code you read, identify the bounded contexts. For
69
- each: a `name`, its `aggregates` (the entities that own consistency), and its
70
- `ubiquitous_language` (the domain terms the code/docs actually use). If you
71
- genuinely cannot infer contexts from the code, emit an empty
72
- `bounded_contexts: []` — do NOT invent contexts that aren't in the code.
73
-
74
- **`tech_analysis`** — `stack` (languages/frameworks evidenced by manifests),
75
- `dependencies` (from `package.json` / `pyproject.toml` / `go.mod` / `Cargo.toml`
76
- etc.), `architecture_notes` (observed structure, not aspirational), and `risks`
77
- (each a mapping with a `description`; optionally `severity: LOW|MEDIUM|HIGH` and
78
- an `evidence: detected|inferred` tag).
79
-
80
- **`test_assessment`** — this section is under a **hard anti-hallucination
81
- constraint** (next sub-step). Do NOT write it from intuition.
82
-
83
- #### The verifiable test scan (ANTI-HALLUCINATION HARD CONSTRAINT)
84
-
85
- Every `test_assessment` claim must be backed by a real filesystem scan you run
86
- here — never by "what a project like this usually needs". Run these probes and
87
- record the raw counts/paths:
88
-
89
- 1. **Count test files** by the conventional patterns:
90
- - `*.test.*` / `*.spec.*` (JS/TS), `*_test.go` (Go), `test_*.py` / `*_test.py` (Python), `*_spec.rb` (Ruby), `*Test.java` (Java)
91
- - e.g. `git ls-files | grep -cE '\.(test|spec)\.[jt]sx?$'` and similar per pattern
92
- 2. **Probe for runner configs**: `jest.config.*`, `pytest.ini` (or `[tool.pytest]` in `pyproject.toml`), `.mocharc.*`, `vitest.config.*`, `karma.conf.*`, `phpunit.xml`, `go test` (implied by `*_test.go`)
93
- 3. **Probe for a `coverage/` directory** (and `.coverage` / `coverage.xml` artifacts)
94
-
95
- Then turn the raw findings into claims, each a **mapping** carrying a `claim`
96
- string plus an `evidence` tag:
97
-
98
- - `evidence: detected` — the scan directly found it (e.g. "42 `*.test.ts` files detected", "vitest.config.ts present", "coverage/ directory present").
99
- - `evidence: inferred` — a judgement you derived FROM the detected facts (e.g. "unit layer present but no E2E config — integration coverage likely thin"). The inference must trace back to something the scan detected.
100
-
101
- **"none detected" rule**: when a probe finds nothing, you MUST say so explicitly
102
- with a tagged claim — `{claim: "none detected", evidence: detected}` (a scan that
103
- ran and returned zero is a genuine `detected` finding). You must NOT silently
104
- omit the dimension, and you must NOT invent generic filler like "needs more E2E
105
- tests" / "consider adding integration tests" with no detected basis. The plan
106
- validator (`lib/roll-plan-validate.py`) rejects any untagged free-text claim, so
107
- filler will fail `roll init --apply`.
108
-
109
- Map the findings into the three buckets:
110
- - `current_layers`: what test layers actually exist (each tagged `detected`)
111
- - `gaps`: dimensions where the scan found nothing (`none detected`, tagged `detected`) or thin coverage you can justify (`inferred`)
112
- - `recommended_actions`: actions that trace to a detected gap (tag `inferred`); if nothing is missing, this bucket may be `[]`
113
-
114
- ### Step 2 — Get gap report
115
-
116
- Run `roll-doc-audit --dry-run` (READ-ONLY mode). This reports:
117
- - Which standard Roll artifacts (BACKLOG, features, domain models) are missing
118
- - Which existing docs Roll could `include` rather than regenerate
119
-
120
- ### Step 3 — Three groups of nine questions
121
-
122
- Present these in chat. **Aim for total time ≤ 3 minutes.** Group 1 confirms your understanding; group 2 scopes the work; group 3 handles privacy and next steps.
123
-
124
- **$(msg onboard.questions_group1)**
125
-
126
- 1. $(msg onboard.q1 "[type]" "[description]")
127
- 2. $(msg onboard.q2 "[domain A, domain B, …]")
128
- 3. $(msg onboard.q3 "[X, Y, Z]")
129
-
130
- **$(msg onboard.questions_group2)**
131
-
132
- 4. $(msg onboard.q4) Multi-select:
133
- - `backlog` — initial BACKLOG with seeded stories
134
- - `features` — features index + per-feature spec stubs
135
- - `domain` — DDD context map
136
- - `briefs` — directory for `$roll-brief` outputs
137
- 5. Of these existing docs, which should I `include` rather than regenerate?
138
- - (list candidates: README.md, docs/architecture.md, etc.)
139
- 6. Put drafts inside `.roll/`? (default: yes; "no" means use the legacy `docs/` layout — not recommended for new adoption)
140
-
141
- **Group 3 — Privacy & next steps**
142
-
143
- 7. Add `.roll/` to `.gitignore`? (yes = keep project management private; no = commit it like Roll itself does)
144
- 8. Sync Roll conventions to which AI tools? Multi-select from detected agents (claude / cursor / codex / kimi / deepseek / pi / opencode / agy / trae)
145
- 9. Enable `roll loop` autonomous execution after init?
146
-
147
- ### Step 4 — Write plan file
148
-
149
- Write `.roll/onboard-plan.yaml` with this exact schema (validated by `lib/roll-plan-validate.py`):
150
-
151
- ```yaml
152
- version: 1
153
- generated_at: "2026-05-19T14:30:00+08:00" # current ISO 8601, your timezone OK
154
-
155
- project_understanding:
156
- type: cli # one of: backend-service / frontend-only / fullstack / cli
157
- description: "..."
158
- domains: [...]
159
- key_modules: [...]
160
-
161
- scope:
162
- approved: [backlog, features, domain] # user's Q4 multi-select
163
- declined: [briefs] # what they said no to
164
-
165
- include_existing:
166
- - README.md # user's Q5 selections
167
- - docs/architecture.md
168
-
169
- privacy:
170
- gitignore_dot_roll: true # user's Q7
171
-
172
- sync_targets: [claude, cursor] # user's Q8
173
- enable_loop: false # user's Q9
174
- agent_routes_template: default # user's Q10 — agent routing preset
175
- # one of: default / minimal / heavy / skip
176
- # default = pi/deepseek/claude + history (US-AGENT-002)
177
- # minimal = single agent (pi), no history
178
- # heavy = pi/deepseek/claude/kimi + larger window
179
- # skip = don't seed .roll/agent-routes.yaml
180
-
181
- # ── US-ONBOARD-016: Phase 2 analysis sections (optional, but emit all three) ──
182
- # All three are validated only when present, so they are backward-compatible,
183
- # but a normal onboard should produce them from Step 1b.
184
-
185
- domain_model:
186
- bounded_contexts: # [] if none can be inferred — never invent
187
- - name: auth
188
- aggregates: [User, Session]
189
- ubiquitous_language: [login, token, refresh]
190
-
191
- tech_analysis:
192
- stack: [bash, python3] # evidenced by manifests
193
- dependencies: [pyyaml] # from package.json / pyproject / go.mod / ...
194
- architecture_notes: ["single-binary CLI + python helpers in lib/"]
195
- risks:
196
- - description: "no automated test run on macOS bash 3.2"
197
- severity: HIGH # optional: LOW | MEDIUM | HIGH
198
- evidence: detected # optional: detected | inferred
199
-
200
- # test_assessment — ANTI-HALLUCINATION: every claim is a mapping with an
201
- # `evidence` tag (detected | inferred). A zero-result scan is `none detected`
202
- # tagged `detected`. Untagged free-text is REJECTED by the validator.
203
- test_assessment:
204
- current_layers:
205
- - claim: "112 bats files detected under tests/" # evidence: a real scan count
206
- evidence: detected
207
- gaps:
208
- - claim: "none detected" # e.g. no coverage/ dir found
209
- evidence: detected
210
- recommended_actions: # [] if nothing is missing
211
- - claim: "add a macOS CI runner (inferred from launchd-only test skips)"
212
- evidence: inferred # an inference traceable to a detected fact
213
- ```
214
-
215
- Then tell the user:
216
-
217
- > Onboard conversation done. Plan saved to `.roll/onboard-plan.yaml`.
218
- > Return to your terminal and run:
219
- >
220
- > roll init --apply
221
- >
222
- > The plan expires in 24 hours.
223
-
224
- ### Step 5 — Stop
225
-
226
- Do NOT run `roll init --apply` yourself. Do NOT modify other project files. Your job is done.
227
-
228
- ## When NOT to use
229
-
230
- - **Not a legacy project**: empty dir or fresh project → use plain `roll init` instead
231
- - **Has BACKLOG.md or docs/features/**: this is a pre-2.0 Roll project → run `npx @seanyao/roll@2 migrate` first
232
- - **Has .roll/ already**: already onboarded → don't re-run
233
-
234
- ## Failure modes
235
-
236
- - User aborts mid-conversation → don't write partial plan; tell user to re-run from scratch
237
- - User answers contradict the gap report (e.g., declines `features` but has lots of code) → ask the contradictory question once more before accepting; if they confirm, respect the choice
238
- - You can't read enough code to fill `project_understanding` (e.g., binary repo) → write a placeholder plan but ask user to fill in `type` and `description` manually before applying
@@ -1,47 +0,0 @@
1
- ---
2
- name: roll-peer
3
- license: MIT
4
- allowed-tools: "Read, Bash, Write, Edit"
5
- description: "Load when the user explicitly asks for peer review, cross-agent negotiation, /peer, or a high-risk decision needs an external agent perspective."
6
- ---
7
- # Roll Peer
8
-
9
- This hub keeps the routing boundary, hard gates, and execution skeleton in the initial context. Load the heavier runbook only when the task actually needs the detailed contract.
10
-
11
- ## Load
12
-
13
- Load when the user explicitly asks for peer review, cross-agent negotiation, /peer, or a high-risk decision needs an external agent perspective.
14
-
15
- ## When Not to Use
16
-
17
- - Local self-review; load roll-.review.
18
- - PR-only review; load roll-review-pr.
19
-
20
- ## Read On Demand
21
-
22
- - Read [the full contract](references/full-contract.md) before executing the workflow end to end, recovering from failures, or checking exact output templates.
23
- - Keep this hub in context for trigger boundaries and hard gates.
24
-
25
- ## Workflow Skeleton
26
-
27
- 1. Confirm peer review is explicitly requested or required by a documented gate.
28
- 2. Route to an appropriate external agent.
29
- 3. Run bounded negotiation rounds.
30
- 4. Record consensus, disagreement, and unresolved questions.
31
- 5. Escalate to human when consensus fails.
32
-
33
- ## Hard Gates
34
-
35
- - Do not spawn subagents without explicit permission/tool availability.
36
- - Peer output is advisory unless local gates accept it.
37
-
38
- ## Gotchas
39
-
40
- - Only invoke cross-agent work when explicitly requested or at documented gates; do not surprise the user with extra delegation.
41
- - Consensus does not override local evidence, tests, or the owner decision.
42
-
43
- ## Maintenance
44
-
45
- - Description changes require updates in `route-cases/skills.json`.
46
- - New observed failures should add a gotcha and the matching positive or negative route case.
47
- - Heavy examples, templates, recovery paths, and deterministic snippets belong in `references/`, `assets/`, or `scripts/`, not in this hub.