@phamvuhoang/otto-core 0.21.0 → 0.23.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.
Files changed (65) hide show
  1. package/dist/external-skills.d.ts +170 -0
  2. package/dist/external-skills.d.ts.map +1 -0
  3. package/dist/external-skills.js +417 -0
  4. package/dist/external-skills.js.map +1 -0
  5. package/dist/index.d.ts +11 -7
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +9 -5
  8. package/dist/index.js.map +1 -1
  9. package/dist/loop.d.ts.map +1 -1
  10. package/dist/loop.js +200 -16
  11. package/dist/loop.js.map +1 -1
  12. package/dist/plan-artifacts.d.ts +10 -0
  13. package/dist/plan-artifacts.d.ts.map +1 -0
  14. package/dist/plan-artifacts.js +63 -0
  15. package/dist/plan-artifacts.js.map +1 -0
  16. package/dist/plan-gate.d.ts +10 -1
  17. package/dist/plan-gate.d.ts.map +1 -1
  18. package/dist/plan-gate.js +22 -4
  19. package/dist/plan-gate.js.map +1 -1
  20. package/dist/plan-report-cli.d.ts +2 -1
  21. package/dist/plan-report-cli.d.ts.map +1 -1
  22. package/dist/plan-report-cli.js +9 -32
  23. package/dist/plan-report-cli.js.map +1 -1
  24. package/dist/plan-rubric.d.ts +24 -0
  25. package/dist/plan-rubric.d.ts.map +1 -1
  26. package/dist/plan-rubric.js +122 -0
  27. package/dist/plan-rubric.js.map +1 -1
  28. package/dist/report-finalize.d.ts +26 -0
  29. package/dist/report-finalize.d.ts.map +1 -0
  30. package/dist/report-finalize.js +222 -0
  31. package/dist/report-finalize.js.map +1 -0
  32. package/dist/report-rubric.d.ts +1 -1
  33. package/dist/report-rubric.d.ts.map +1 -1
  34. package/dist/report-rubric.js +3 -3
  35. package/dist/report-rubric.js.map +1 -1
  36. package/dist/run-report.d.ts +29 -0
  37. package/dist/run-report.d.ts.map +1 -1
  38. package/dist/run-report.js.map +1 -1
  39. package/dist/runner.d.ts +2 -0
  40. package/dist/runner.d.ts.map +1 -1
  41. package/dist/runner.js +1 -1
  42. package/dist/runner.js.map +1 -1
  43. package/dist/skills-cli.d.ts +16 -5
  44. package/dist/skills-cli.d.ts.map +1 -1
  45. package/dist/skills-cli.js +134 -7
  46. package/dist/skills-cli.js.map +1 -1
  47. package/dist/skills.d.ts +21 -0
  48. package/dist/skills.d.ts.map +1 -1
  49. package/dist/skills.js +26 -1
  50. package/dist/skills.js.map +1 -1
  51. package/dist/stage-exec.d.ts.map +1 -1
  52. package/dist/stage-exec.js +3 -2
  53. package/dist/stage-exec.js.map +1 -1
  54. package/dist/tools-cli.d.ts +55 -0
  55. package/dist/tools-cli.d.ts.map +1 -0
  56. package/dist/tools-cli.js +196 -0
  57. package/dist/tools-cli.js.map +1 -0
  58. package/dist/tools.d.ts +164 -0
  59. package/dist/tools.d.ts.map +1 -0
  60. package/dist/tools.js +228 -0
  61. package/dist/tools.js.map +1 -0
  62. package/package.json +2 -2
  63. package/templates/plan.md +36 -4
  64. package/templates/quality-report.md +18 -9
  65. package/templates/report-rewrite.md +25 -0
package/templates/plan.md CHANGED
@@ -22,7 +22,7 @@
22
22
 
23
23
  You are PLANNING, not implementing. Turn the thin task in `<inputs>` into a
24
24
  world-class, structured **spec** and a task-decomposed **plan**, persisted for
25
- human review *before* any code is written. There is NO human available during
25
+ human review _before_ any code is written. There is NO human available during
26
26
  this run: act autonomously and **record your reasoning** instead of waiting for
27
27
  approval ("record assumptions and proceed").
28
28
 
@@ -66,7 +66,7 @@ plan-quality rubric scores — a world-class plan has all of them):
66
66
 
67
67
  - `## Problem` — who is blocked, what they cannot do, and why it matters.
68
68
  - `## Decisions` (or `## Assumptions`) — each `question → chosen answer →
69
- rationale`; record blockers and the safest assumption taken.
69
+ rationale`; record blockers and the safest assumption taken.
70
70
  - `## Scope guard` — what is explicitly **out of scope** / the **non-goals**, so
71
71
  the implementer does not sprawl.
72
72
  - `## File map` — the component/file map: the specific files this work will
@@ -96,8 +96,20 @@ independent tasks out to isolated sub-agents (issue #66 P11). Shape:
96
96
  {
97
97
  "version": 1,
98
98
  "tasks": [
99
- { "id": "t1", "title": "<short>", "fileScope": ["path/you/expect/to/touch"], "dependsOn": [], "parallelSafe": true },
100
- { "id": "t2", "title": "<short>", "fileScope": ["other/path"], "dependsOn": ["t1"], "parallelSafe": false }
99
+ {
100
+ "id": "t1",
101
+ "title": "<short>",
102
+ "fileScope": ["path/you/expect/to/touch"],
103
+ "dependsOn": [],
104
+ "parallelSafe": true
105
+ },
106
+ {
107
+ "id": "t2",
108
+ "title": "<short>",
109
+ "fileScope": ["other/path"],
110
+ "dependsOn": ["t1"],
111
+ "parallelSafe": false
112
+ }
101
113
  ]
102
114
  }
103
115
  ```
@@ -109,9 +121,29 @@ Rules: `id` unique; `dependsOn` lists earlier task ids that must land first;
109
121
  if the work does not decompose into cleanly independent tasks, omit it and the
110
122
  run proceeds sequentially. A malformed file is ignored (fan-out simply disabled).
111
123
 
124
+ ## 4c. SELF-CHECK PLAN DEPTH ONCE
125
+
126
+ Before committing, inspect the spec + plan you wrote. If any item below is
127
+ missing, revise the artifacts once before you commit:
128
+
129
+ - File map names at least two real repo paths in backticks.
130
+ - Every task names the failing test file/case it will start with and includes an
131
+ explicit `verify:` command.
132
+ - Success criteria are concretely testable: a reviewer can tell pass/fail from
133
+ an observable result, test, or command.
134
+
112
135
  ## 5. COMMIT
113
136
 
114
137
  Commit ONLY the spec + plan + (if written) the task graph — this is the whole
115
138
  run, no code. Use a `docs(plan):` or `chore(plan):` commit. Then print a one-line
116
139
  summary of the task-key and the number of plan tasks authored. Do not implement;
117
140
  the human reviews the plan next.
141
+
142
+ ## 6. QUALITY REPORT
143
+
144
+ Before you output `<promise>NO MORE TASKS</promise>`, emit one Otto quality
145
+ report for this plan-authoring run. Frame it around what the maintainer can now
146
+ do with the authored plan (approve it, edit it, or reject it before
147
+ implementation), not around the diff.
148
+
149
+ @include:quality-report.md
@@ -7,10 +7,13 @@
7
7
 
8
8
  Produce an **Otto quality report** with the exact section headings below. Rules:
9
9
 
10
+ - **Outcome-first.** Lead with what the end user can now do, drawn from the
11
+ issue/plan intent and traceable to evidence — not marketing claims and not a
12
+ diff summary. Keep the change description below the engineer divider.
10
13
  - **Layperson-first.** Lead with plain language a non-engineer can act on — the
11
- prose sections (What Changed · Why · How To Verify · What To Watch · What I Was
12
- Unsure About) come first; keep code-cited engineer detail below the divider.
13
- Write the top sections with no jargon, file paths, or SHAs.
14
+ prose sections (What You Can Now Do · Why · How To Verify · What To Watch ·
15
+ What I Was Unsure About) come first; keep code-cited engineer detail below the
16
+ divider. Write the top sections with no jargon, file paths, or SHAs.
14
17
  - **Readable first.** Keep it short enough to review in a couple of minutes — a
15
18
  maintainer should not have to replay the run log. Specific beats exhaustive.
16
19
  - **Verification a non-engineer can run.** _How To Verify_ is numbered,
@@ -33,10 +36,11 @@ Produce an **Otto quality report** with the exact section headings below. Rules:
33
36
  One of — **Accepted** · **Accepted with follow-ups** · **Needs human review** · **Rejected**
34
37
  (when uncertain, choose **Needs human review**)
35
38
 
36
- ## What Changed
39
+ ## What You Can Now Do
37
40
 
38
- <Plain language, no jargon — what is different now for a person using this, in
39
- one or two sentences. No file paths or SHAs here; those go under Evidence.>
41
+ <Plain language, no jargon — the user-visible outcome this run enables, in one
42
+ or two sentences. Draw it from the issue/plan intent. No file paths, SHAs, or
43
+ diff summaries here; those go below the divider.>
40
44
 
41
45
  ## Why
42
46
 
@@ -72,6 +76,11 @@ _Engineer detail below — a non-engineer can stop reading here._
72
76
  - Source: <plan/PRD path, GitHub issue #, or Linear ref>
73
77
  - Issue or plan: <link or path>
74
78
 
79
+ ## What Changed
80
+
81
+ <Engineer-facing change summary: the concrete implementation or documentation
82
+ changes, one click below the user outcome. Cite evidence in the next section.>
83
+
75
84
  ## Evidence
76
85
 
77
86
  - Implementation evidence: <file:line or commit SHA proving each claim; the
@@ -97,8 +106,8 @@ _Engineer detail below — a non-engineer can stop reading here._
97
106
  ### Human verdict trail
98
107
 
99
108
  Prior **human** verdicts on past Otto runs (most recent last) — consult them so a
100
- recurring reason ("scope creep", "thin evidence") informs *this* run's Verdict
101
- and *Recommended next action* before you commit to one:
109
+ recurring reason ("scope creep", "thin evidence") informs _this_ run's Verdict
110
+ and _Recommended next action_ before you commit to one:
102
111
 
103
112
  <verdict-trail>
104
113
 
@@ -109,7 +118,7 @@ and *Recommended next action* before you commit to one:
109
118
  **Maintainer:** after reviewing this report, append your verdict to
110
119
  `./.otto/verdicts.md` (create it lazily) — a dated `##` heading plus one line:
111
120
  the human verdict (**Accepted** · **Accepted with follow-ups** · **Rejected** ·
112
- **Needs investigation**) and *why* (what was accepted with caveats, or the
121
+ **Needs investigation**) and _why_ (what was accepted with caveats, or the
113
122
  concrete reason it was rejected). The file is git-tracked; it feeds the existing
114
123
  learning loop, so future runs see what was accepted or rejected and why.
115
124
 
@@ -0,0 +1,25 @@
1
+ {{ RESUME }}
2
+
3
+ A quality report failed Otto's emit-time legibility rubric. The missing
4
+ required section(s): **{{ MISSING }}**.
5
+
6
+ Your only job: emit a corrected **Otto quality report** that includes ALL
7
+ required sections. Lead the prose with `## What You Can Now Do`. Keep the
8
+ leading `# Otto quality report` H1 marker so the harness re-captures it.
9
+
10
+ Rules — read carefully, this is a tight rewrite, not a new run:
11
+
12
+ - **Read-only.** Do NOT edit files, do NOT commit, do NOT run the loop or any
13
+ build/test stage. You are reformatting an existing report.
14
+ - **No invented value.** Base every claim ONLY on the report below and real run
15
+ evidence. Never fabricate outcomes, verdicts, or evidence to fill a section —
16
+ if the original report did not establish something, say so plainly.
17
+ - **Layperson-first, terse.** Match the style of the quality-report contract:
18
+ the prose sections (What You Can Now Do · Why · How To Verify · What To Watch ·
19
+ What I Was Unsure About) come first, no jargon, then the
20
+ `_Engineer detail below — a non-engineer can stop reading here._` divider, then
21
+ the engineer sections. Short enough to review in a couple of minutes.
22
+
23
+ The report to correct:
24
+
25
+ {{ REPORT }}