@xhulz/nina 0.37.0 → 0.38.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 (130) hide show
  1. package/package.json +1 -1
  2. package/releases/0.38.0/core/GAPS.md +125 -0
  3. package/releases/0.38.0/core/answered.json +32 -0
  4. package/releases/0.38.0/core/defaults/tree/.claude/agents/architect.md +1 -0
  5. package/releases/0.38.0/core/defaults/tree/.claude/agents/dba.md +3 -0
  6. package/releases/0.38.0/core/defaults/tree/.claude/agents/devops.md +1 -0
  7. package/releases/0.38.0/core/defaults/tree/.claude/agents/implementer.md +1 -0
  8. package/releases/0.38.0/core/defaults/tree/.claude/agents/integration-tester.md +3 -0
  9. package/releases/0.38.0/core/defaults/tree/.claude/agents/qa.md +2 -0
  10. package/releases/0.38.0/core/defaults/tree/.claude/agents/reviewer.md +3 -0
  11. package/releases/0.38.0/core/defaults/tree/.claude/agents/secops.md +3 -0
  12. package/releases/0.38.0/core/defaults/tree/.claude/agents/solidity-auditor.md +3 -0
  13. package/releases/0.38.0/core/defaults/tree/.claude/agents/solidity-dev.md +3 -0
  14. package/releases/0.38.0/core/tree/.claude/agents/architect.md +127 -0
  15. package/releases/0.38.0/core/tree/.claude/agents/dba.md +110 -0
  16. package/releases/0.38.0/core/tree/.claude/agents/devops.md +114 -0
  17. package/releases/0.38.0/core/tree/.claude/agents/implementer.md +156 -0
  18. package/releases/0.38.0/core/tree/.claude/agents/integration-tester.md +168 -0
  19. package/releases/0.38.0/core/tree/.claude/agents/planner.md +132 -0
  20. package/releases/0.38.0/core/tree/.claude/agents/qa.md +152 -0
  21. package/releases/0.38.0/core/tree/.claude/agents/reviewer.md +183 -0
  22. package/releases/0.38.0/core/tree/.claude/agents/secops.md +121 -0
  23. package/releases/0.38.0/core/tree/.claude/agents/solidity-auditor.md +126 -0
  24. package/releases/0.38.0/core/tree/.claude/agents/solidity-dev.md +123 -0
  25. package/releases/0.38.0/core/tree/.claude/agents-overview.md +64 -0
  26. package/releases/0.38.0/core/tree/.claude/frontend.md +10 -0
  27. package/releases/0.38.0/core/tree/.claude/graph.md +75 -0
  28. package/releases/0.38.0/core/tree/.claude/patterns.md +213 -0
  29. package/releases/0.38.0/core/tree/.claude/pills/README.md +147 -0
  30. package/releases/0.38.0/core/tree/.claude/pipeline.md +101 -0
  31. package/releases/0.38.0/core/tree/.claude/retrieval.md +103 -0
  32. package/releases/0.38.0/core/tree/.claude/router.md +198 -0
  33. package/releases/0.38.0/core/tree/.claude/templates/integration.md +45 -0
  34. package/releases/0.38.0/core/tree/CLAUDE.md +161 -0
  35. package/releases/0.38.0/core/tree/scripts/cost-watch.mjs +18 -0
  36. package/releases/0.38.0/core/tree/scripts/edit-guard.mjs +16 -0
  37. package/releases/0.38.0/core/tree/scripts/harness-check.mjs +71 -0
  38. package/releases/0.38.0/core/tree/scripts/loop-gate.mjs +19 -0
  39. package/releases/0.38.0/core/vocabulary.json +13 -0
  40. package/releases/0.38.0/surfaces/blockchain/tree/.claude/agents/architect.md +5 -0
  41. package/releases/0.38.0/surfaces/blockchain/tree/.claude/agents/devops.md +5 -0
  42. package/releases/0.38.0/surfaces/blockchain/tree/.claude/agents/reviewer.md +5 -0
  43. package/releases/0.38.0/surfaces/blockchain/tree/.claude/agents/solidity-auditor.md +18 -0
  44. package/releases/0.38.0/surfaces/blockchain/tree/.claude/agents/solidity-dev.md +16 -0
  45. package/releases/0.38.0/surfaces/blockchain/tree/.claude/agents-overview.md +6 -0
  46. package/releases/0.38.0/surfaces/blockchain/tree/.claude/graph.md +11 -0
  47. package/releases/0.38.0/surfaces/blockchain/tree/.claude/router.md +6 -0
  48. package/releases/0.38.0/surfaces/blockchain/tree/CLAUDE.md +12 -0
  49. package/releases/0.38.0/surfaces/db/tree/.claude/agents/architect.md +5 -0
  50. package/releases/0.38.0/surfaces/db/tree/.claude/agents/dba.md +50 -0
  51. package/releases/0.38.0/surfaces/db/tree/.claude/agents/devops.md +5 -0
  52. package/releases/0.38.0/surfaces/db/tree/.claude/agents/implementer.md +2 -0
  53. package/releases/0.38.0/surfaces/db/tree/.claude/agents/integration-tester.md +10 -0
  54. package/releases/0.38.0/surfaces/db/tree/.claude/agents/planner.md +2 -0
  55. package/releases/0.38.0/surfaces/db/tree/.claude/agents/reviewer.md +22 -0
  56. package/releases/0.38.0/surfaces/db/tree/.claude/agents/secops.md +2 -0
  57. package/releases/0.38.0/surfaces/db/tree/.claude/agents-overview.md +5 -0
  58. package/releases/0.38.0/surfaces/db/tree/.claude/graph.md +8 -0
  59. package/releases/0.38.0/surfaces/db/tree/.claude/patterns.md +19 -0
  60. package/releases/0.38.0/surfaces/db/tree/.claude/pipeline.md +13 -0
  61. package/releases/0.38.0/surfaces/db/tree/.claude/retrieval.md +5 -0
  62. package/releases/0.38.0/surfaces/db/tree/.claude/router.md +4 -0
  63. package/releases/0.38.0/surfaces/db/tree/CLAUDE.md +17 -0
  64. package/releases/0.38.0/surfaces/edge-cf/tree/.claude/agents/architect.md +14 -0
  65. package/releases/0.38.0/surfaces/edge-cf/tree/.claude/agents/dba.md +2 -0
  66. package/releases/0.38.0/surfaces/edge-cf/tree/.claude/agents/devops.md +32 -0
  67. package/releases/0.38.0/surfaces/edge-cf/tree/.claude/agents/implementer.md +14 -0
  68. package/releases/0.38.0/surfaces/edge-cf/tree/.claude/agents/integration-tester.md +11 -0
  69. package/releases/0.38.0/surfaces/edge-cf/tree/.claude/agents/qa.md +3 -0
  70. package/releases/0.38.0/surfaces/edge-cf/tree/.claude/agents/reviewer.md +8 -0
  71. package/releases/0.38.0/surfaces/edge-cf/tree/.claude/agents/secops.md +8 -0
  72. package/releases/0.38.0/surfaces/edge-cf/tree/.claude/patterns.md +17 -0
  73. package/releases/0.38.0/surfaces/edge-cf/tree/.claude/retrieval.md +8 -0
  74. package/releases/0.38.0/surfaces/edge-cf/tree/CLAUDE.md +27 -0
  75. package/releases/0.38.0/surfaces/frontend/tree/.claude/agents/architect.md +20 -0
  76. package/releases/0.38.0/surfaces/frontend/tree/.claude/agents/devops.md +28 -0
  77. package/releases/0.38.0/surfaces/frontend/tree/.claude/agents/implementer.md +25 -0
  78. package/releases/0.38.0/surfaces/frontend/tree/.claude/agents/qa.md +17 -0
  79. package/releases/0.38.0/surfaces/frontend/tree/.claude/agents/reviewer.md +56 -0
  80. package/releases/0.38.0/surfaces/frontend/tree/.claude/patterns.md +8 -0
  81. package/releases/0.38.0/surfaces/frontend/tree/.claude/retrieval.md +2 -0
  82. package/releases/0.38.0/surfaces/frontend/tree/.claude/router.md +14 -0
  83. package/releases/0.38.0/surfaces/frontend/tree/CLAUDE.md +5 -0
  84. package/releases/0.38.0/surfaces/integrations/tree/.claude/agents/architect.md +16 -0
  85. package/releases/0.38.0/surfaces/integrations/tree/.claude/agents/implementer.md +12 -0
  86. package/releases/0.38.0/surfaces/integrations/tree/.claude/agents/integration-tester.md +20 -0
  87. package/releases/0.38.0/surfaces/integrations/tree/.claude/agents/planner.md +2 -0
  88. package/releases/0.38.0/surfaces/integrations/tree/.claude/agents/reviewer.md +21 -0
  89. package/releases/0.38.0/surfaces/integrations/tree/.claude/agents/secops.md +2 -0
  90. package/releases/0.38.0/surfaces/integrations/tree/.claude/agents-overview.md +8 -0
  91. package/releases/0.38.0/surfaces/integrations/tree/.claude/graph.md +10 -0
  92. package/releases/0.38.0/surfaces/integrations/tree/.claude/patterns.md +38 -0
  93. package/releases/0.38.0/surfaces/integrations/tree/.claude/pipeline.md +16 -0
  94. package/releases/0.38.0/surfaces/integrations/tree/.claude/retrieval.md +16 -0
  95. package/releases/0.38.0/surfaces/integrations/tree/.claude/router.md +6 -0
  96. package/releases/0.38.0/surfaces/integrations/tree/CLAUDE.md +17 -0
  97. package/releases/0.38.0/surfaces/money/tree/.claude/agents/architect.md +12 -0
  98. package/releases/0.38.0/surfaces/money/tree/.claude/agents/dba.md +14 -0
  99. package/releases/0.38.0/surfaces/money/tree/.claude/agents/implementer.md +11 -0
  100. package/releases/0.38.0/surfaces/money/tree/.claude/agents/integration-tester.md +3 -0
  101. package/releases/0.38.0/surfaces/money/tree/.claude/agents/reviewer.md +23 -0
  102. package/releases/0.38.0/surfaces/money/tree/.claude/agents/secops.md +5 -0
  103. package/releases/0.38.0/surfaces/money/tree/.claude/agents/solidity-auditor.md +4 -0
  104. package/releases/0.38.0/surfaces/money/tree/.claude/agents/solidity-dev.md +4 -0
  105. package/releases/0.38.0/surfaces/money/tree/.claude/graph.md +2 -0
  106. package/releases/0.38.0/surfaces/money/tree/.claude/patterns.md +49 -0
  107. package/releases/0.38.0/surfaces/money/tree/.claude/pipeline.md +2 -0
  108. package/releases/0.38.0/surfaces/money/tree/.claude/retrieval.md +2 -0
  109. package/releases/0.38.0/surfaces/money/tree/CLAUDE.md +11 -0
  110. package/releases/0.38.0/surfaces/pii/tree/.claude/agents/dba.md +2 -0
  111. package/releases/0.38.0/surfaces/pii/tree/.claude/agents/devops.md +8 -0
  112. package/releases/0.38.0/surfaces/pii/tree/.claude/agents/reviewer.md +8 -0
  113. package/releases/0.38.0/surfaces/pii/tree/.claude/agents/secops.md +2 -0
  114. package/releases/0.38.0/surfaces/pii/tree/.claude/agents/solidity-auditor.md +5 -0
  115. package/releases/0.38.0/surfaces/pii/tree/CLAUDE.md +5 -0
  116. package/releases/0.38.0/surfaces/prisma/tree/.claude/agents/architect.md +2 -0
  117. package/releases/0.38.0/surfaces/prisma/tree/.claude/agents/dba.md +39 -0
  118. package/releases/0.38.0/surfaces/prisma/tree/.claude/agents/devops.md +11 -0
  119. package/releases/0.38.0/surfaces/prisma/tree/.claude/agents/implementer.md +2 -0
  120. package/releases/0.38.0/surfaces/prisma/tree/.claude/agents/integration-tester.md +2 -0
  121. package/releases/0.38.0/surfaces/prisma/tree/.claude/agents/reviewer.md +2 -0
  122. package/releases/0.38.0/surfaces/prisma/tree/.claude/patterns.md +15 -0
  123. package/releases/0.38.0/surfaces/prisma/tree/CLAUDE.md +5 -0
  124. package/src/commands/learn.mjs +226 -71
  125. package/src/commands/pills.mjs +32 -9
  126. package/src/commands/stats.mjs +4 -4
  127. package/src/deep.mjs +26 -4
  128. package/src/gate.mjs +10 -0
  129. package/src/lessons.mjs +55 -0
  130. package/src/wiring.mjs +2 -1
@@ -0,0 +1,55 @@
1
+ /**
2
+ * The lessons a stage is handed as it starts: the list of its active pills, each with the trigger that says
3
+ * when it applies, given to the subagent by the `SubagentStart` hook.
4
+ *
5
+ * Every spec told its stage to read its pills, and a stage found them by opening files: every pill in its own
6
+ * directory, and every shared one to see whether its `applies_to` named it. So a reviewer read one in only
7
+ * seven of fifteen runs while twelve applied to it, and a stage no pill named opened them in two runs of three.
8
+ * Handed the list, a stage opens the ones whose trigger matches its task, and nothing else.
9
+ */
10
+
11
+ import { readFileSync, readdirSync } from 'node:fs';
12
+ import { join } from 'node:path';
13
+ import { frontmatter, list } from './commands/pills.mjs';
14
+
15
+ /** How much of a trigger goes in the list: enough to say when, not the lesson. */
16
+ const TRIGGER_CHARS = 160;
17
+
18
+ /**
19
+ * A stage's lessons as the text handed to it, or null when it has none.
20
+ *
21
+ * @param {string} root - The project directory.
22
+ * @param {string} role - The stage.
23
+ * @returns {string|null}
24
+ */
25
+ export function lessonIndex(root, role) {
26
+ const found = [];
27
+ for (const sub of [role, 'shared']) {
28
+ let files = [];
29
+ try {
30
+ files = readdirSync(join(root, '.claude', 'pills', sub)).filter((f) => f.endsWith('.md')).sort();
31
+ } catch {
32
+ continue;
33
+ }
34
+ for (const file of files) {
35
+ let fields = null;
36
+ try {
37
+ fields = frontmatter(readFileSync(join(root, '.claude', 'pills', sub, file), 'utf8'));
38
+ } catch {
39
+ continue;
40
+ }
41
+ if (!fields || fields.status === 'retired') continue;
42
+ const applies = list(fields.applies_to);
43
+ // A shared pill is this stage's when it names it; one in the stage's own directory, unless it names others.
44
+ if (sub === 'shared' ? !applies.includes(role) : applies.length > 0 && !applies.includes(role)) continue;
45
+ const trigger = String(fields.trigger ?? '').replace(/\s+/g, ' ').trim();
46
+ const when = trigger ? `when ${trigger.length > TRIGGER_CHARS ? `${trigger.slice(0, TRIGGER_CHARS - 1)}…` : trigger}` : 'on every task';
47
+ found.push(`- \`.claude/pills/${sub}/${file}\` — ${when}`);
48
+ }
49
+ }
50
+ if (found.length === 0) return null;
51
+ return [
52
+ `Your lessons in this project, ${found.length}: before acting, open each one whose trigger matches this task, and only those.`,
53
+ ...found,
54
+ ].join('\n');
55
+ }
package/src/wiring.mjs CHANGED
@@ -109,7 +109,7 @@ const previousCommands = (h) => [command(h.script, h.mode), ...EARLIER_CANNOT_ST
109
109
  * The harness check has two: `Stop` tells the person what a turn left behind, `UserPromptSubmit` puts
110
110
  * the same findings in the model's context before it answers — the only one of the two it reads. The
111
111
  * loop gate has four, one per fact it keeps: a verdict, a dispatch, the owner speaking, and the
112
- * decision itself.
112
+ * decision itself; and a fifth, as each stage starts, that hands the stage its lessons (`src/lessons.mjs`).
113
113
  */
114
114
  export const HOOKS = [
115
115
  {
@@ -132,6 +132,7 @@ export const HOOKS = [
132
132
  },
133
133
  { event: 'PostToolUse', matcher: 'Agent|Task|SendMessage|AskUserQuestion|SubagentHandback', script: GATE, timeout: 10, why: 'the gate never learns which rounds went out, or that the owner answered' },
134
134
  { event: 'SubagentStop', script: GATE, timeout: 10, why: 'the gate misses the verdict of a stage that wrote its report as its last message' },
135
+ { event: 'SubagentStart', script: GATE, timeout: 10, why: 'a stage is not handed its lessons, and opens every shared pill to find them, or none' },
135
136
  {
136
137
  event: 'PreToolUse', matcher: 'Edit|Write|MultiEdit|NotebookEdit', script: GUARD, timeout: 10, why: 'a hand edit to a composed file is found only after the turn, as drift, and the next compose overwrites it',
137
138
  crash: (cannot) => ({ systemMessage: `NINA: the edit guard could not start, so composed files can be edited in place — ${cannot}` }),