hotmilk 0.1.13 → 0.1.15

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 (57) hide show
  1. package/AGENTS.md +12 -10
  2. package/README.md +237 -53
  3. package/agents/README.md +3 -3
  4. package/agents/assistant.md +1 -1
  5. package/agents/coach.md +26 -4
  6. package/agents/designer.md +1 -1
  7. package/agents/planner.md +2 -2
  8. package/hotmilk.json +11 -0
  9. package/package.json +43 -24
  10. package/prompts/prompt-eval.md +241 -0
  11. package/prompts/tidy.md +3 -1
  12. package/prompts/translate.md +3 -1
  13. package/skills/make-docs/SKILL.md +43 -0
  14. package/skills/pioneer/SKILL.md +135 -131
  15. package/skills/pioneer/references/autoresearch-routing.md +114 -0
  16. package/skills/pioneer/references/chat-plan.md +50 -0
  17. package/skills/pioneer/references/goal-gate.md +54 -0
  18. package/skills/pioneer/references/graph-recon-gate.md +50 -0
  19. package/skills/pioneer/references/observational-memory-routing.md +90 -0
  20. package/skills/pioneer/references/openspec-routing.md +50 -0
  21. package/skills/pioneer/references/plannotator-routing.md +83 -0
  22. package/skills/pioneer/references/prompt-eval-gate.md +38 -0
  23. package/skills/pioneer/references/shazam-routing.md +58 -0
  24. package/skills/recommend-research/SKILL.md +94 -6
  25. package/skills/recommend-research/references/example-narrow.md +53 -0
  26. package/skills/recommend-research/references/scope-gate.md +46 -0
  27. package/skills/recommend-research/references/shortlist-gate.md +69 -0
  28. package/skills/recommend-research/references/verify-gate.md +73 -0
  29. package/skills/update-docs/SKILL.md +86 -0
  30. package/skills/update-docs/references/doc-inventory.md +69 -0
  31. package/skills/update-docs/references/drift-verification.md +59 -0
  32. package/src/bootstrap/btw.ts +49 -0
  33. package/src/bootstrap/context-stack.ts +71 -14
  34. package/src/bootstrap/dashboard-settings.ts +16 -2
  35. package/src/bootstrap/dashboard.ts +85 -10
  36. package/src/bootstrap/defaults.ts +26 -0
  37. package/src/bootstrap/extensions.ts +10 -1
  38. package/src/bootstrap/global-extension-sources.ts +43 -4
  39. package/src/bootstrap/graph.ts +12 -0
  40. package/src/bootstrap/project-trust.ts +55 -0
  41. package/src/bootstrap/resolve-bundled.ts +28 -4
  42. package/src/bootstrap/session.ts +61 -1
  43. package/src/bootstrap/subagents-doctor.ts +12 -0
  44. package/src/config/bundled-extensions.ts +42 -0
  45. package/src/config/bundled-package-registry.ts +3 -0
  46. package/src/config/hotmilk.ts +76 -1
  47. package/src/config/mcp.ts +45 -12
  48. package/src/config/resolve.ts +21 -0
  49. package/src/config/runtime.ts +6 -0
  50. package/src/controller/input.ts +15 -0
  51. package/src/controller/mode.ts +32 -0
  52. package/src/index.ts +5 -0
  53. package/src/ui/footer.ts +63 -1
  54. package/src/ui/github-user.ts +52 -4
  55. package/src/ui/session-logo.ts +31 -3
  56. package/themes/monokai.json +1 -1
  57. package/skills/empirical-prompt-tuning/SKILL.md +0 -232
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hotmilk",
3
- "version": "0.1.13",
3
+ "version": "0.1.15",
4
4
  "description": "hotmilk — Pi package bundling gentle-pi, context-mode, graphify, subagents, and bundled extension toggles via hotmilk.json",
5
5
  "keywords": [
6
6
  "hotmilk",
@@ -38,45 +38,63 @@
38
38
  },
39
39
  "dependencies": {
40
40
  "@blackbelt-technology/pi-agent-dashboard": "^0.5.4",
41
- "@blackbelt-technology/pi-flows": "^0.2.1",
41
+ "@blackbelt-technology/pi-flows": "^0.3.2",
42
42
  "@haispeed/pi-obsidian": "^0.1.1",
43
+ "@llblab/pi-actors": "^0.39.0",
44
+ "@mrclrchtr/supi-context": "^2.2.1",
45
+ "@plannotator/pi-extension": "^0.22.0",
43
46
  "@tomxprime/planning-with-files": "^1.1.0",
44
- "context-mode": "^1.0.151",
45
- "gentle-pi": "^0.4.5",
47
+ "context-mode": "^1.0.169",
48
+ "gentle-pi": "^0.13.0",
46
49
  "graphify-pi": "^0.3.0",
47
- "pi-ask-user": "^0.11.2",
48
- "pi-btw": "^0.4.0",
50
+ "latchkey": "^2.20.1",
51
+ "pi-ask-user": "^0.12.0",
52
+ "pi-autoresearch": "^1.6.2",
53
+ "pi-btw": "^0.4.1",
49
54
  "pi-caveman": "^1.0.7",
50
55
  "pi-docparser": "^3.0.1",
51
- "pi-goal": "^0.1.5",
56
+ "pi-goal": "^0.1.7",
52
57
  "pi-kanagawa": "^1.0.0",
53
- "pi-mcp-adapter": "^2.9.0",
58
+ "pi-mcp-adapter": "^2.11.0",
59
+ "pi-observational-memory": "^3.0.3",
60
+ "pi-prompt-template-model": "^0.10.0",
54
61
  "pi-red-green": "^0.2.2",
55
- "pi-rtk-optimizer": "^0.8.2",
62
+ "pi-rtk-optimizer": "^0.9.0",
63
+ "pi-shazam": "^0.26.0",
56
64
  "pi-simplify": "^0.2.2",
57
- "pi-subagents": "^0.28.0",
65
+ "pi-subagents": "^0.34.0",
58
66
  "pi-tetris": "^1.3.1",
59
- "pi-web-access": "^0.10.7"
67
+ "pi-web-access": "^0.13.0"
60
68
  },
61
69
  "devDependencies": {
62
- "@earendil-works/pi-agent-core": "^0.78.1",
63
- "@earendil-works/pi-ai": "^0.78.1",
64
- "@earendil-works/pi-coding-agent": "^0.78.1",
65
- "@earendil-works/pi-tui": "^0.78.1",
66
- "@types/node": "^22.19.19",
67
- "typebox": "^1.2.0",
68
- "vite-plus": "^0.1.24"
70
+ "@earendil-works/pi-agent-core": "^0.80.6",
71
+ "@earendil-works/pi-ai": "^0.80.6",
72
+ "@earendil-works/pi-coding-agent": "^0.80.6",
73
+ "@earendil-works/pi-tui": "^0.80.6",
74
+ "@types/node": "^22.20.1",
75
+ "typebox": "^1.3.6",
76
+ "vite-plus": "^0.2.4"
69
77
  },
70
78
  "peerDependencies": {
71
- "@earendil-works/pi-agent-core": "^0.78.1",
72
- "@earendil-works/pi-ai": "^0.78.1",
73
- "@earendil-works/pi-coding-agent": "^0.78.1",
74
- "@earendil-works/pi-tui": "^0.78.1",
75
- "typebox": "^1.2.0"
79
+ "@earendil-works/pi-agent-core": "^0.80.6",
80
+ "@earendil-works/pi-ai": "^0.80.6",
81
+ "@earendil-works/pi-coding-agent": "^0.80.6",
82
+ "@earendil-works/pi-tui": "^0.80.6",
83
+ "typebox": "^1.3.6"
76
84
  },
77
85
  "overrides": {
86
+ "@earendil-works/pi-coding-agent": "^0.80.6",
78
87
  "@fastify/static": "9.1.3",
79
- "@mozilla/readability": "0.6.0"
88
+ "@mariozechner/pi-coding-agent": "npm:@earendil-works/pi-coding-agent@^0.80.6",
89
+ "@mozilla/readability": "0.6.0",
90
+ "dompurify": "^3.4.11",
91
+ "esbuild": "0.28.1",
92
+ "hono": "^4.12.28",
93
+ "linkify-it": "^5.0.1",
94
+ "protobufjs": "^7.6.3",
95
+ "undici": "^7.28.0",
96
+ "vite": "^8.1.4",
97
+ "ws": "8.21.0"
80
98
  },
81
99
  "engines": {
82
100
  "node": "22"
@@ -100,6 +118,7 @@
100
118
  "node_modules/@haispeed/pi-obsidian/skills",
101
119
  "node_modules/pi-ask-user/skills",
102
120
  "node_modules/pi-web-access/skills",
121
+ "node_modules/pi-autoresearch/skills",
103
122
  "node_modules/@tomxprime/planning-with-files"
104
123
  ],
105
124
  "themes": [
@@ -0,0 +1,241 @@
1
+ ---
2
+ description: Harden a prompt or skill with fresh subagent evaluation loops
3
+ argument-hint: "<path to SKILL.md, AGENTS.md section, or prompt file>"
4
+ ---
5
+
6
+ Run a parent-orchestrated prompt hardening loop for the target below.
7
+
8
+ Target:
9
+
10
+ $@
11
+
12
+ Keep this parent session as loop controller and sole editor. Child subagents must not spawn subagents, edit files, or inherit authoring context.
13
+
14
+ ## Core rule: fresh executor
15
+
16
+ A prompt's quality is opaque to its author. Dispatch a **new** fresh executor every iteration. Self re-reading never qualifies.
17
+
18
+ Always set on executor and instructor dispatches:
19
+
20
+ - `context: "fresh"`
21
+ - `skill: false`
22
+ - `clarify: false`
23
+ - explicit `model` when the default resolver fails
24
+
25
+ **NOT fresh**: `context: "fork"`, same session, or reusing a prior executor's thread.
26
+
27
+ If `subagent` is unavailable, ask the user to open a separate session or report `prompt-eval skipped: no fresh agent available`. Never substitute self re-reading.
28
+
29
+ ## Step 0 — Static coherence check (parent inline)
30
+
31
+ Before any dispatch, compare what the target **advertises** vs what the body **delivers**. Fix divergences first.
32
+
33
+ | Target type | "Advertises" source | Check |
34
+ | ----------------------------- | ---------------------------- | ------------------------------------------- |
35
+ | Skill file | Frontmatter `description` | Triggers/use-cases match body coverage? |
36
+ | CLAUDE.md / AGENTS.md section | Section heading | Heading promise matches actionable content? |
37
+ | Task prompt / system prompt | Opening instruction or title | Stated goal matches the actual rules? |
38
+
39
+ Skipping this causes false positives — the fresh executor silently re-interprets the body.
40
+
41
+ ## Step 1 — Baseline (parent inline)
42
+
43
+ 1. Read the target file and freeze one stakes tier:
44
+
45
+ | Stakes | Scenarios | `[critical]` tags | Stop condition | Iteration cap |
46
+ | --------------------------------- | --------------------- | ----------------- | -------------------- | ------------- |
47
+ | **High** (core skill, automation) | 3 (1 median + 2 edge) | ≥ 2 | 3 consecutive clears | none |
48
+ | **Standard** (default) | 2 (1 median + 1 edge) | ≥ 1 | 2 consecutive clears | 5 |
49
+ | **Low** (small, low-blast) | 2 (1 median + 1 edge) | ≥ 1 | ship at 80% | 3 |
50
+
51
+ 2. Design scenarios and requirement checklists. Do not change checklists after seeing results.
52
+
53
+ Checklist rules:
54
+
55
+ - 3–7 items per scenario.
56
+ - At least one `[critical]` item — without it, success judgment is vacuous.
57
+ - Translate user complaints into observable criteria (e.g. "shallow" → "names at least one concrete bug with line reference").
58
+ - `[critical]` failure = whole scenario fails (binary ×), regardless of other items.
59
+ - Non-critical items: ○ = 1, partial = 0.5, × = 0. Accuracy = sum / total.
60
+
61
+ 3. Paste the **full target prompt text** into every executor task (not a path).
62
+
63
+ ## Step 2 — Evaluation loop
64
+
65
+ Repeat until convergence, iteration cap, or divergence. Each iteration:
66
+
67
+ ### 2a. Fresh executor (one per scenario)
68
+
69
+ For each scenario, launch:
70
+
71
+ ```text
72
+ subagent({
73
+ agent: "assistant",
74
+ context: "fresh",
75
+ skill: false,
76
+ clarify: false,
77
+ model: "<explicit-model-id>",
78
+ task: "<executor contract below with full pasted prompt + one scenario + its checklist>"
79
+ })
80
+ ```
81
+
82
+ Executor task contract:
83
+
84
+ ```markdown
85
+ You are an executor reading <target prompt name> as a blank slate.
86
+ You have no prior exposure to this prompt; treat it as newly encountered.
87
+
88
+ ## Target Prompt
89
+
90
+ <paste the full target prompt here>
91
+
92
+ ## Scenario
93
+
94
+ <one paragraph describing the situation>
95
+
96
+ ## Requirement Checklist
97
+
98
+ 1. [critical] <item>
99
+ 2. <item>
100
+ ...
101
+
102
+ ## Task
103
+
104
+ 1. Execute the scenario following the target prompt and produce the deliverable.
105
+ 2. On completion, respond with the report below.
106
+
107
+ ## Report Structure
108
+
109
+ - Deliverable: <the artifact or run summary>
110
+ - Requirement status: for each item, ○ / × / partial (with reason)
111
+ - Ambiguities: places where wording was open to interpretation (bullets)
112
+ - Discretionary fills: decisions the instructions did not specify (bullets)
113
+ - Retries: how many times you redid a decision and why
114
+ ```
115
+
116
+ Parallel scenarios: use `subagent({ tasks: [...] })` with models from the **same provider** only.
117
+
118
+ ### 2b. Instructor scoring (fresh reviewer)
119
+
120
+ Launch one fresh reviewer per iteration (or one per scenario when scenarios are large):
121
+
122
+ ```text
123
+ subagent({
124
+ agent: "reviewer",
125
+ context: "fresh",
126
+ skill: false,
127
+ clarify: false,
128
+ model: "<explicit-model-id>",
129
+ task: "Score executor reports using the rubric below. Return: per-scenario Success/Accuracy/Steps/Duration/Retries table, new ambiguities, new discretionary fills, and the single highest-impact ambiguity to fix next. Qualitative signals outweigh raw speed."
130
+ })
131
+ ```
132
+
133
+ Instructor rubric:
134
+
135
+ | Axis | Source | How to measure |
136
+ | ----------------------- | --------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- |
137
+ | **Success/Failure** | Instructor (reviewer) | ○ only if every `[critical]` met. Binary. |
138
+ | **Accuracy** | Instructor | ○/partial/× per item → percentage |
139
+ | **Step count** | Environment metadata | `tool_uses` or tool-use blocks. Text-only targets: count review comments, checklist items, or code blocks — state the unit once in the iteration log. |
140
+ | **Duration** | Environment metadata | `duration_ms` or wall-clock |
141
+ | **Retry count** | Self-report | Times the agent redid a decision |
142
+ | **Ambiguities** | Self-report | Primary signal for improvement |
143
+ | **Discretionary fills** | Self-report | Surfaces implicit requirements |
144
+
145
+ Weighting: ambiguities and discretionary fills are primary. Quantitative metrics are supporting. Chasing time alone makes prompts brittle.
146
+
147
+ On failure: append one line to Ambiguities naming which `[critical]` item dropped.
148
+
149
+ Step-count skew (even at 100% accuracy): one scenario at 3–5× the others → prompt lacks self-containment for that case. Fix with inline guidance or a minimal complete example.
150
+
151
+ Reviewers must not edit files. They score from executor self-reports plus environment metadata when available.
152
+
153
+ ### 2c. Parent applies ONE delta
154
+
155
+ 1. Identify the most impactful ambiguity from the instructor report.
156
+ 2. State which checklist item the edit satisfies.
157
+ 3. Apply the minimum edit to the target file — one semantic theme only.
158
+ 4. Record the iteration:
159
+
160
+ ```
161
+ ## Iteration N
162
+
163
+ ### Changes (delta from previous)
164
+ - <one-line edit description>
165
+
166
+ ### Results
167
+ | Scenario | Success | Accuracy | Steps | Duration | Retries |
168
+ |---|---|---|---|---|---|
169
+ | A | ○ | 90% | 4 | 20s | 0 |
170
+ | B | × | 60% | 9 | 41s | 2 |
171
+
172
+ ### Ambiguities (new this iteration)
173
+ - <Scenario B>: [critical] item N was × — <reason>
174
+ - <Scenario A>: (none new)
175
+
176
+ ### Discretionary fills (new this iteration)
177
+ - <Scenario B>: <what was filled>
178
+
179
+ ### Next edit
180
+ - <one-line minimal edit>
181
+
182
+ (Convergence: X consecutive clears / Y iterations until stop)
183
+ ```
184
+
185
+ Never leave an axis blank (write "0", not "—"). "None new" is explicit signal.
186
+
187
+ Delta rules: one semantic theme per iteration. A cluster of 2–3 related micro-edits is one theme; unrelated edits go to the next iteration.
188
+
189
+ ### 2d. Re-evaluate
190
+
191
+ Dispatch **new** fresh executors. Never reuse prior executor threads.
192
+
193
+ ## Stopping
194
+
195
+ **Converged** when for N consecutive iterations (N = 2 standard, 3 high-stakes):
196
+
197
+ - New ambiguities: 0
198
+ - Accuracy gain: ≤ +3 points
199
+ - Step count change: within ±10%
200
+ - Duration change: within ±15%
201
+
202
+ **Diverged**: after 3+ iterations ambiguities aren't decreasing → stop patching, rewrite.
203
+
204
+ **Resource cutoff**: ship at 80% when improvement cost exceeds prompt importance.
205
+
206
+ Before declaring done on any tier, run one hold-out scenario not used earlier. Accuracy drop ≥ 15 points → overfitting; return to scenario design.
207
+
208
+ ## Completion summary
209
+
210
+ Report:
211
+
212
+ - stakes tier and scenarios used
213
+ - iterations run and deltas applied
214
+ - final per-scenario scores
215
+ - hold-out result (if run)
216
+ - plateau reason (converged / cap / diverged / skipped)
217
+ - remaining ambiguities worth accepting or deferring
218
+
219
+ ## Red flags
220
+
221
+ | Rationalization | Reality |
222
+ | ------------------------------------------------ | ---------------------------------------------------------------- |
223
+ | "Re-reading it myself is equivalent." | Structurally impossible to objectively view text you just wrote. |
224
+ | "One scenario is enough." | Overfits. Minimum 2. |
225
+ | "Zero ambiguities once, so done." | May be coincidence. Require consecutive clears. |
226
+ | "Fix multiple things in one pass." | Lose attribution. One theme per iteration. |
227
+ | "Metrics look good, ignore qualitative." | Faster ≠ better. Qualitative is primary. |
228
+ | "Reuse the same fresh agent." | It learned. Dispatch anew every time. |
229
+ | "Split every micro-edit into its own iteration." | Over-splitting. One semantic unit = one iteration. |
230
+ | "Rewrite from scratch." | Valid only after 3+ stalled iterations. |
231
+
232
+ ## Subagent troubleshooting
233
+
234
+ | Symptom | Cause | Fix |
235
+ | --------------------------- | ------------------------ | -------------------------- |
236
+ | "No API key found" | Default model resolution | Specify `model` explicitly |
237
+ | Agent reads wrong files | Skill/cwd pollution | Add `skill: false` |
238
+ | Parallel timeout (exit 143) | Cross-provider mixing | Same-provider models only |
239
+ | Subagent hangs | Provider instability | Try different model id |
240
+
241
+ Structural-audit mode: for coherence/clarity checks only (not empirical behavior), mark the request with _"structural-audit mode: check textual coherence only, do not execute."_ Cannot count toward consecutive-clear convergence.
package/prompts/tidy.md CHANGED
@@ -18,12 +18,14 @@ All of these must hold:
18
18
 
19
19
  If you would hesitate to ship it by itself, it is not tidying.
20
20
 
21
+ **Extract boundary:** one extract moves a small cohesive unit with no logic change. Restructuring most of a large function is normal refactor work, not tidying.
22
+
21
23
  ## Rules
22
24
 
23
25
  1. **Name the tidying** when you describe the change
24
26
  2. **One tidying at a time**
25
27
  3. **Stay in scope** — only that cleanup
26
- 4. **Tests pass** after the change
28
+ 4. **Tests pass** after the change — run the relevant test command and report the result; if you cannot run tests, say why
27
29
 
28
30
  ## Agent instructions
29
31
 
@@ -1,5 +1,5 @@
1
1
  ---
2
- description: Translate text to Japanese
2
+ description: Translate text between English and Japanese (auto-detect direction)
3
3
  argument-hint: "<text to translate>"
4
4
  ---
5
5
 
@@ -8,6 +8,8 @@ You are a professional translator fluent in both English and Japanese. Your task
8
8
  Guidelines:
9
9
 
10
10
  - Maintain the original intent and nuance of the text
11
+ - Match the source's force and register: prohibitions stay prohibitions, advisories stay advisories, polite requests stay polite; do not soften or strengthen
12
+ - Apply register matching independently to each sentence or clause
11
13
  - Use natural, fluent Japanese expressions
12
14
  - Preserve technical terms when appropriate
13
15
  - Keep formatting and special characters intact
@@ -0,0 +1,43 @@
1
+ ---
2
+ name: make-docs
3
+ description: "Greenfield: create docs/* (9 files), README.md from interview or repo scan. If docs/ or README.md already exists, stop — use doc sync instead. [Triggers: /make-docs, create docs, init docs, generate AGENTS.md]"
4
+ disable-model-invocation: true
5
+ ---
6
+
7
+ # /make-docs — Documentation bootstrap
8
+
9
+ **前提**: `docs/` も `README.md` も無いリポジトリだけ。既にあるなら **update-docs 系に切り替え**。このスキルは初回スキャフォールド用で、勝手に上書きしない。
10
+
11
+ ## モード選択(最初に確定・途中で混ぜない)
12
+
13
+ ```
14
+ リポジトリ無し / 仕様だけ → Interactive(2〜3 問ずつ)
15
+ リポジトリあり かつ docs と AGENTS が無い → Auto-scan(下の bash)→ 足りない所だけ短命インタビュー
16
+ docs または AGENTS が既にある → **STOP**(同期ワークフローへ)
17
+ ```
18
+
19
+ ## Auto-scan(プロジェクトルートで実行)
20
+
21
+ ```bash
22
+ find . -type f -not -path '*/node_modules/*' -not -path '*/.git/*' -not -path '*/dist/*' -not -path '*/.next/*' -not -path '*/build/*' -not -path '*/target/*' | head -100
23
+ cat README.md AGENTS.md 2>/dev/null
24
+ cat package.json 2>/dev/null || cat Cargo.toml 2>/dev/null || cat pyproject.toml 2>/dev/null
25
+ ```
26
+
27
+ ## 現在のプロジェクトのファイルを読み内容に合わせて作成、またはインタラクティブに作成
28
+
29
+ ## progresive disclosure
30
+
31
+ - `./docs/requirements.md` (要件定義)
32
+ - `./docs/design.md` (詳細設計、スキーマ設計)
33
+ - `./docs/directory.md` (ディレクトリ構成)
34
+ - `./docs/tech.md` (技術スタック)
35
+ - `./docs/tasks.md` (タスク管理、進捗管理)
36
+ - `./docs/test.md` (テスト設計、テストガイド)
37
+ - `./docs/security.md` (セキュリティ設計)
38
+ - `./docs/problems.md` (注意点、落とし穴)
39
+ - `./docs/references.md` (参考文献、サンプルコード)
40
+
41
+ ## テーブル, mermaidダイアグラム
42
+
43
+ - 必要に応じてtasks.md と連動した `ROADMAP.md` も作成