@nac3/forge-cli 1.17.0 → 1.19.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 (200) hide show
  1. package/dist/bin/heap_bootstrap.d.ts +52 -1
  2. package/dist/bin/heap_bootstrap.d.ts.map +1 -1
  3. package/dist/bin/heap_bootstrap.js +46 -11
  4. package/dist/bin/heap_bootstrap.js.map +1 -1
  5. package/dist/bin/yf.d.ts.map +1 -1
  6. package/dist/bin/yf.js +4 -0
  7. package/dist/bin/yf.js.map +1 -1
  8. package/dist/chat/claude.d.ts +7 -0
  9. package/dist/chat/claude.d.ts.map +1 -1
  10. package/dist/chat/claude.js.map +1 -1
  11. package/dist/chat/claude_cli.d.ts +4 -0
  12. package/dist/chat/claude_cli.d.ts.map +1 -1
  13. package/dist/chat/claude_cli.js +58 -0
  14. package/dist/chat/claude_cli.js.map +1 -1
  15. package/dist/chat/doctrine_digest.d.ts.map +1 -1
  16. package/dist/chat/doctrine_digest.js +11 -0
  17. package/dist/chat/doctrine_digest.js.map +1 -1
  18. package/dist/chat/panel.d.ts.map +1 -1
  19. package/dist/chat/panel.js +235 -2
  20. package/dist/chat/panel.js.map +1 -1
  21. package/dist/chat/project_slug.d.ts.map +1 -1
  22. package/dist/chat/project_slug.js +29 -0
  23. package/dist/chat/project_slug.js.map +1 -1
  24. package/dist/chat/server.d.ts.map +1 -1
  25. package/dist/chat/server.js +203 -16
  26. package/dist/chat/server.js.map +1 -1
  27. package/dist/chat/tools/evidence.d.ts +30 -0
  28. package/dist/chat/tools/evidence.d.ts.map +1 -0
  29. package/dist/chat/tools/evidence.js +74 -0
  30. package/dist/chat/tools/evidence.js.map +1 -0
  31. package/dist/chat/tools/pending.d.ts +3 -0
  32. package/dist/chat/tools/pending.d.ts.map +1 -1
  33. package/dist/chat/tools/pending.js +71 -1
  34. package/dist/chat/tools/pending.js.map +1 -1
  35. package/dist/chat/tools/urazuke.d.ts +22 -0
  36. package/dist/chat/tools/urazuke.d.ts.map +1 -0
  37. package/dist/chat/tools/urazuke.js +54 -0
  38. package/dist/chat/tools/urazuke.js.map +1 -0
  39. package/dist/chat/tools/workflow.d.ts.map +1 -1
  40. package/dist/chat/tools/workflow.js +5 -3
  41. package/dist/chat/tools/workflow.js.map +1 -1
  42. package/dist/chat/tools.d.ts.map +1 -1
  43. package/dist/chat/tools.js +22 -0
  44. package/dist/chat/tools.js.map +1 -1
  45. package/dist/chat/turn_control.d.ts +66 -19
  46. package/dist/chat/turn_control.d.ts.map +1 -1
  47. package/dist/chat/turn_control.js +112 -31
  48. package/dist/chat/turn_control.js.map +1 -1
  49. package/dist/chat/urazuke_section.d.ts +8 -0
  50. package/dist/chat/urazuke_section.d.ts.map +1 -0
  51. package/dist/chat/urazuke_section.js +42 -0
  52. package/dist/chat/urazuke_section.js.map +1 -0
  53. package/dist/commands/pending.d.ts +1 -0
  54. package/dist/commands/pending.d.ts.map +1 -1
  55. package/dist/commands/pending.js +82 -8
  56. package/dist/commands/pending.js.map +1 -1
  57. package/dist/commands/start.d.ts +60 -0
  58. package/dist/commands/start.d.ts.map +1 -0
  59. package/dist/commands/start.js +265 -0
  60. package/dist/commands/start.js.map +1 -0
  61. package/dist/commands/urazuke.d.ts +17 -0
  62. package/dist/commands/urazuke.d.ts.map +1 -0
  63. package/dist/commands/urazuke.js +541 -0
  64. package/dist/commands/urazuke.js.map +1 -0
  65. package/dist/commands/workflow.js +4 -4
  66. package/dist/commands/workflow.js.map +1 -1
  67. package/dist/core/brain_config.d.ts +4 -0
  68. package/dist/core/brain_config.d.ts.map +1 -1
  69. package/dist/core/brain_config.js +2 -0
  70. package/dist/core/brain_config.js.map +1 -1
  71. package/dist/core/forge_embed.d.ts.map +1 -1
  72. package/dist/core/forge_embed.js +10 -0
  73. package/dist/core/forge_embed.js.map +1 -1
  74. package/dist/core/limits_config.d.ts +15 -0
  75. package/dist/core/limits_config.d.ts.map +1 -1
  76. package/dist/core/limits_config.js +5 -0
  77. package/dist/core/limits_config.js.map +1 -1
  78. package/dist/core/native_dialogs.d.ts +13 -0
  79. package/dist/core/native_dialogs.d.ts.map +1 -0
  80. package/dist/core/native_dialogs.js +111 -0
  81. package/dist/core/native_dialogs.js.map +1 -0
  82. package/dist/core/projects.d.ts +6 -0
  83. package/dist/core/projects.d.ts.map +1 -1
  84. package/dist/core/projects.js +1 -1
  85. package/dist/core/projects.js.map +1 -1
  86. package/dist/docs/doctrine/urazuke.md +38 -0
  87. package/dist/nac3/internal_manifest.d.ts.map +1 -1
  88. package/dist/nac3/internal_manifest.js +96 -2
  89. package/dist/nac3/internal_manifest.js.map +1 -1
  90. package/dist/pending/store.d.ts +8 -1
  91. package/dist/pending/store.d.ts.map +1 -1
  92. package/dist/pending/store.js +8 -1
  93. package/dist/pending/store.js.map +1 -1
  94. package/dist/pending/types.d.ts +41 -1
  95. package/dist/pending/types.d.ts.map +1 -1
  96. package/dist/pending/types.js.map +1 -1
  97. package/dist/urazuke/catalog.d.ts +109 -0
  98. package/dist/urazuke/catalog.d.ts.map +1 -0
  99. package/dist/urazuke/catalog.js +459 -0
  100. package/dist/urazuke/catalog.js.map +1 -0
  101. package/dist/urazuke/close_gate.d.ts +36 -0
  102. package/dist/urazuke/close_gate.d.ts.map +1 -0
  103. package/dist/urazuke/close_gate.js +48 -0
  104. package/dist/urazuke/close_gate.js.map +1 -0
  105. package/dist/urazuke/current.d.ts +55 -0
  106. package/dist/urazuke/current.d.ts.map +1 -0
  107. package/dist/urazuke/current.js +125 -0
  108. package/dist/urazuke/current.js.map +1 -0
  109. package/dist/urazuke/cycle.d.ts +91 -0
  110. package/dist/urazuke/cycle.d.ts.map +1 -0
  111. package/dist/urazuke/cycle.js +310 -0
  112. package/dist/urazuke/cycle.js.map +1 -0
  113. package/dist/urazuke/enabled.d.ts +31 -0
  114. package/dist/urazuke/enabled.d.ts.map +1 -0
  115. package/dist/urazuke/enabled.js +51 -0
  116. package/dist/urazuke/enabled.js.map +1 -0
  117. package/dist/urazuke/evidence.d.ts +45 -0
  118. package/dist/urazuke/evidence.d.ts.map +1 -0
  119. package/dist/urazuke/evidence.js +264 -0
  120. package/dist/urazuke/evidence.js.map +1 -0
  121. package/dist/urazuke/gate.d.ts +68 -0
  122. package/dist/urazuke/gate.d.ts.map +1 -0
  123. package/dist/urazuke/gate.js +249 -0
  124. package/dist/urazuke/gate.js.map +1 -0
  125. package/dist/urazuke/probes.d.ts +13 -0
  126. package/dist/urazuke/probes.d.ts.map +1 -0
  127. package/dist/urazuke/probes.js +87 -0
  128. package/dist/urazuke/probes.js.map +1 -0
  129. package/dist/urazuke/prompts.generated.d.ts +12 -0
  130. package/dist/urazuke/prompts.generated.d.ts.map +1 -0
  131. package/dist/urazuke/prompts.generated.js +135 -0
  132. package/dist/urazuke/prompts.generated.js.map +1 -0
  133. package/dist/urazuke/prompts_client.d.ts +44 -0
  134. package/dist/urazuke/prompts_client.d.ts.map +1 -0
  135. package/dist/urazuke/prompts_client.js +151 -0
  136. package/dist/urazuke/prompts_client.js.map +1 -0
  137. package/dist/urazuke/quality.d.ts +99 -0
  138. package/dist/urazuke/quality.d.ts.map +1 -0
  139. package/dist/urazuke/quality.js +269 -0
  140. package/dist/urazuke/quality.js.map +1 -0
  141. package/dist/urazuke/receipts.d.ts +90 -0
  142. package/dist/urazuke/receipts.d.ts.map +1 -0
  143. package/dist/urazuke/receipts.js +171 -0
  144. package/dist/urazuke/receipts.js.map +1 -0
  145. package/dist/urazuke/report.d.ts +23 -0
  146. package/dist/urazuke/report.d.ts.map +1 -0
  147. package/dist/urazuke/report.js +62 -0
  148. package/dist/urazuke/report.js.map +1 -0
  149. package/dist/urazuke/retro.d.ts +52 -0
  150. package/dist/urazuke/retro.d.ts.map +1 -0
  151. package/dist/urazuke/retro.js +145 -0
  152. package/dist/urazuke/retro.js.map +1 -0
  153. package/dist/urazuke/section.d.ts +43 -0
  154. package/dist/urazuke/section.d.ts.map +1 -0
  155. package/dist/urazuke/section.js +64 -0
  156. package/dist/urazuke/section.js.map +1 -0
  157. package/dist/urazuke/stacks.d.ts +42 -0
  158. package/dist/urazuke/stacks.d.ts.map +1 -0
  159. package/dist/urazuke/stacks.js +264 -0
  160. package/dist/urazuke/stacks.js.map +1 -0
  161. package/dist/urazuke/workflow.d.ts +23 -0
  162. package/dist/urazuke/workflow.d.ts.map +1 -0
  163. package/dist/urazuke/workflow.js +64 -0
  164. package/dist/urazuke/workflow.js.map +1 -0
  165. package/dist/version.d.ts +1 -1
  166. package/dist/version.js +1 -1
  167. package/dist/workflow/config.d.ts +9 -4
  168. package/dist/workflow/config.d.ts.map +1 -1
  169. package/dist/workflow/config.js +4 -1
  170. package/dist/workflow/config.js.map +1 -1
  171. package/dist/workflow/definitions.d.ts +20 -4
  172. package/dist/workflow/definitions.d.ts.map +1 -1
  173. package/dist/workflow/definitions.js +16 -3
  174. package/dist/workflow/definitions.js.map +1 -1
  175. package/dist/workflow/instances.d.ts.map +1 -1
  176. package/dist/workflow/instances.js +6 -0
  177. package/dist/workflow/instances.js.map +1 -1
  178. package/dist/workflow/orchestrator.d.ts +10 -1
  179. package/dist/workflow/orchestrator.d.ts.map +1 -1
  180. package/dist/workflow/orchestrator.js +54 -7
  181. package/dist/workflow/orchestrator.js.map +1 -1
  182. package/dist/workflow/select.d.ts +5 -1
  183. package/dist/workflow/select.d.ts.map +1 -1
  184. package/dist/workflow/select.js +16 -5
  185. package/dist/workflow/select.js.map +1 -1
  186. package/dist/workflow/state.d.ts +3 -2
  187. package/dist/workflow/state.d.ts.map +1 -1
  188. package/dist/workflow/state.js.map +1 -1
  189. package/docs/doctrine/urazuke.md +38 -0
  190. package/package.json +18 -20
  191. package/src/i18n/catalogs/ar.json +550 -542
  192. package/src/i18n/catalogs/de.json +550 -542
  193. package/src/i18n/catalogs/en.json +550 -542
  194. package/src/i18n/catalogs/es.json +550 -542
  195. package/src/i18n/catalogs/fr.json +550 -542
  196. package/src/i18n/catalogs/hi.json +550 -542
  197. package/src/i18n/catalogs/it.json +550 -542
  198. package/src/i18n/catalogs/ja.json +550 -542
  199. package/src/i18n/catalogs/pt.json +550 -542
  200. package/src/i18n/catalogs/zh.json +550 -542
@@ -0,0 +1 @@
1
+ {"version":3,"file":"current.d.ts","sourceRoot":"","sources":["../../src/urazuke/current.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAEL,KAAK,WAAW,EAAE,KAAK,cAAc,EACtC,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAiC,KAAK,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAGlF,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,SAAS,GAAG,gBAAgB,CAAC;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,2CAA2C;IAC3C,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,iBAAiB,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;CACf;AAWD,wEAAwE;AACxE,wBAAgB,UAAU,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,SAAS,MAAM,EAAE,CAE1F;AAED;qDACqD;AACrD,wBAAsB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,EAAE,IAAI,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC;IAAE,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAS/L;AAED,8DAA8D;AAC9D,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,SAAS,GAAG,gBAAgB,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,GAAG,SAAS,CAAC,CAWlJ;AAED,6EAA6E;AAC7E,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC,CA8B3G;AAED,MAAM,WAAW,SAAS;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,OAAO,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,CAAC;IAC7C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED;8DAC8D;AAC9D,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,SAAS,EAAE,CAAA;CAAE,CAAC,CA4BnI"}
@@ -0,0 +1,125 @@
1
+ /**
2
+ * Where is the project on the ladder? Binds the catalogue, the workflow
3
+ * instances and the gate into one answer: the open Urazuke workflow, its
4
+ * current canonical task, the step/station it is, its mechanical result,
5
+ * and its prompts. Used by the prompt section, the verbs and the CLI.
6
+ *
7
+ * ASCII-only.
8
+ */
9
+ import { urazukeStep, urazukeStation, URAZUKE_STEPS, URAZUKE_LEGACY_STATIONS, } from './catalog.js';
10
+ import { URAZUKE_PROMPTS } from './prompts.generated.js';
11
+ import { evaluateStep, evaluateStation } from './gate.js';
12
+ import { realProbes } from './probes.js';
13
+ function pick(table, step, station) {
14
+ if (step)
15
+ return table[step.prompt_key] ?? [];
16
+ if (station) {
17
+ const all = table[station.prompt_key] ?? [];
18
+ return station.prompt_indexes.map((i) => all[i]).filter((p) => typeof p === 'string');
19
+ }
20
+ return [];
21
+ }
22
+ /** The VENDORED prompts (offline, synchronous). Tests and fallbacks. */
23
+ export function promptsFor(step, station) {
24
+ return pick(URAZUKE_PROMPTS, step, station);
25
+ }
26
+ /** The EFFECTIVE prompts for a project: overrides > published > vendored
27
+ * (src/urazuke/prompts_client.ts). Never throws. */
28
+ export async function promptsForProject(projectRoot, step, station) {
29
+ try {
30
+ const { resolvePrompts } = await import('./prompts_client.js');
31
+ const r = await resolvePrompts(projectRoot);
32
+ const key = step?.prompt_key ?? station?.prompt_key ?? '';
33
+ return { prompts: pick(r.prompts, step, station), source: r.source[key] ?? 'vendored', version: r.version };
34
+ }
35
+ catch {
36
+ return { prompts: pick(URAZUKE_PROMPTS, step, station), source: 'vendored', version: 'vendored' };
37
+ }
38
+ }
39
+ /** The open Urazuke workflow of the project, or undefined. */
40
+ export async function findUrazukeInstance(slug) {
41
+ const { listInstances } = await import('../workflow/instances.js');
42
+ const isUz = (i) => i.kind === 'urazuke' || i.kind === 'urazuke-legacy';
43
+ const open = (await listInstances(slug, 'open')).find(isUz);
44
+ if (open)
45
+ return { code: open.code, kind: open.kind, closed: false };
46
+ /* The ladder does not vanish when the last step closes: the finished
47
+ * ladder stays visible (and the receipt gate keeps applying to the plan
48
+ * of a project built with the method). Found on 2026-10-19: Turnera
49
+ * closed 24/24 and the Urazuke tab disappeared from the panel. */
50
+ const closed = (await listInstances(slug, 'closed')).filter(isUz).sort((a, b) => (b.closed_at ?? 0) - (a.closed_at ?? 0))[0];
51
+ return closed ? { code: closed.code, kind: closed.kind, closed: true } : undefined;
52
+ }
53
+ /** The current step of the project (next open canonical task), evaluated. */
54
+ export async function urazukeCurrent(slug, projectRoot) {
55
+ const inst = await findUrazukeInstance(slug);
56
+ if (!inst)
57
+ return undefined;
58
+ const { workflowTasks } = await import('../workflow/orchestrator.js');
59
+ const all = await workflowTasks(slug, inst.code, 'all');
60
+ const canonical = all.filter((t) => !t.workflow?.ad_hoc && t.workflow?.urazuke);
61
+ const open = canonical.filter((t) => t.closed_at === undefined);
62
+ const task = open[0];
63
+ if (!task || !task.workflow?.urazuke)
64
+ return undefined;
65
+ const link = task.workflow.urazuke;
66
+ const probes = realProbes(slug);
67
+ let step;
68
+ let station;
69
+ let result;
70
+ if (link.step != null) {
71
+ step = urazukeStep(link.step);
72
+ if (!step)
73
+ return undefined;
74
+ result = await evaluateStep(step, { projectRoot, probes });
75
+ }
76
+ else if (link.station != null) {
77
+ station = urazukeStation(link.station);
78
+ if (!station)
79
+ return undefined;
80
+ result = await evaluateStation(station, { projectRoot, probes });
81
+ }
82
+ else
83
+ return undefined;
84
+ const eff = await promptsForProject(projectRoot, step, station);
85
+ return {
86
+ code: inst.code, kind: inst.kind, task_id: task.id,
87
+ ...(step ? { step } : {}), ...(station ? { station } : {}),
88
+ prompts: eff.prompts, prompt_source: eff.source, result,
89
+ remaining: open.length, total: canonical.length,
90
+ };
91
+ }
92
+ /** Every step (or station + step) of the project's ladder with its
93
+ * mechanical status; closed tasks are reported as closed. */
94
+ export async function urazukeLadder(slug, projectRoot) {
95
+ const inst = await findUrazukeInstance(slug);
96
+ const probes = realProbes(slug);
97
+ const byStep = new Map();
98
+ if (inst) {
99
+ const { workflowTasks } = await import('../workflow/orchestrator.js');
100
+ for (const t of await workflowTasks(slug, inst.code, 'all')) {
101
+ const u = t.workflow?.urazuke;
102
+ if (!u || t.workflow?.ad_hoc)
103
+ continue;
104
+ byStep.set(u.step != null ? 's' + u.step : 'n' + u.station, { id: t.id, closed: t.closed_at !== undefined });
105
+ }
106
+ }
107
+ const rows = [];
108
+ const legacy = inst?.kind === 'urazuke-legacy';
109
+ if (legacy) {
110
+ for (const st of URAZUKE_LEGACY_STATIONS) {
111
+ const t = byStep.get('n' + st.num);
112
+ const r = await evaluateStation(st, { projectRoot, probes });
113
+ rows.push({ num: 'N' + st.num, title: st.title, status: t?.closed ? 'closed' : r.status, ...(t ? { task_id: t.id } : {}), failing: r.checks.filter((c) => c.status === 'fail').map((c) => c.detail) });
114
+ }
115
+ }
116
+ for (const s of URAZUKE_STEPS) {
117
+ if (legacy && s.num < 5)
118
+ continue;
119
+ const t = byStep.get('s' + s.num);
120
+ const r = await evaluateStep(s, { projectRoot, probes });
121
+ rows.push({ num: String(s.num).padStart(2, '0'), title: s.title, status: t?.closed ? 'closed' : r.status, ...(t ? { task_id: t.id } : {}), failing: r.checks.filter((c) => c.status === 'fail').map((c) => c.detail) });
122
+ }
123
+ return { ...(inst ? { code: inst.code, kind: inst.kind } : {}), rows };
124
+ }
125
+ //# sourceMappingURL=current.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"current.js","sourceRoot":"","sources":["../../src/urazuke/current.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EACL,WAAW,EAAE,cAAc,EAAE,aAAa,EAAE,uBAAuB,GAEpE,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,eAAe,EAA0B,MAAM,WAAW,CAAC;AAClF,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAgBzC,SAAS,IAAI,CAAC,KAAwC,EAAE,IAAkB,EAAE,OAAwB;IAClG,IAAI,IAAI;QAAE,OAAO,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;IAC9C,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;QAC5C,OAAO,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC;IACrG,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,wEAAwE;AACxE,MAAM,UAAU,UAAU,CAAC,IAAkB,EAAE,OAAwB;IACrE,OAAO,IAAI,CAAC,eAAe,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;AAC9C,CAAC;AAED;qDACqD;AACrD,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,WAA+B,EAAE,IAAkB,EAAE,OAAwB;IACnH,IAAI,CAAC;QACH,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAC;QAC/D,MAAM,CAAC,GAAG,MAAM,cAAc,CAAC,WAAW,CAAC,CAAC;QAC5C,MAAM,GAAG,GAAG,IAAI,EAAE,UAAU,IAAI,OAAO,EAAE,UAAU,IAAI,EAAE,CAAC;QAC1D,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;IAC9G,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,eAAe,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;IACpG,CAAC;AACH,CAAC;AAED,8DAA8D;AAC9D,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,IAAY;IACpD,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,0BAA0B,CAAC,CAAC;IACnE,MAAM,IAAI,GAAG,CAAC,CAAmB,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,CAAC,IAAI,KAAK,gBAAgB,CAAC;IAC1F,MAAM,IAAI,GAAG,CAAC,MAAM,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5D,IAAI,IAAI;QAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAoC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IACrG;;;uEAGmE;IACnE,MAAM,MAAM,GAAG,CAAC,MAAM,aAAa,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7H,OAAO,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,IAAoC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;AACrH,CAAC;AAED,6EAA6E;AAC7E,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,IAAY,EAAE,WAAmB;IACpE,MAAM,IAAI,GAAG,MAAM,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAC7C,IAAI,CAAC,IAAI;QAAE,OAAO,SAAS,CAAC;IAC5B,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,6BAA6B,CAAC,CAAC;IACtE,MAAM,GAAG,GAAG,MAAM,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACxD,MAAM,SAAS,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAChF,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC;IAChE,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACrB,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO;QAAE,OAAO,SAAS,CAAC;IACvD,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;IACnC,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IAChC,IAAI,IAA6B,CAAC;IAClC,IAAI,OAAmC,CAAC;IACxC,IAAI,MAAyB,CAAC;IAC9B,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC;QACtB,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9B,IAAI,CAAC,IAAI;YAAE,OAAO,SAAS,CAAC;QAC5B,MAAM,GAAG,MAAM,YAAY,CAAC,IAAI,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,CAAC;IAC7D,CAAC;SAAM,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,EAAE,CAAC;QAChC,OAAO,GAAG,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACvC,IAAI,CAAC,OAAO;YAAE,OAAO,SAAS,CAAC;QAC/B,MAAM,GAAG,MAAM,eAAe,CAAC,OAAO,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,CAAC;IACnE,CAAC;;QAAM,OAAO,SAAS,CAAC;IACxB,MAAM,GAAG,GAAG,MAAM,iBAAiB,CAAC,WAAW,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAChE,OAAO;QACL,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE;QAClD,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1D,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM;QACvD,SAAS,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,SAAS,CAAC,MAAM;KAChD,CAAC;AACJ,CAAC;AAUD;8DAC8D;AAC9D,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,IAAY,EAAE,WAAmB;IACnE,MAAM,IAAI,GAAG,MAAM,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAC7C,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IAChC,MAAM,MAAM,GAAG,IAAI,GAAG,EAA2C,CAAC;IAClE,IAAI,IAAI,EAAE,CAAC;QACT,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,6BAA6B,CAAC,CAAC;QACtE,KAAK,MAAM,CAAC,IAAI,MAAM,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC;YAC5D,MAAM,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,OAAO,CAAC;YAC9B,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,MAAM;gBAAE,SAAS;YACvC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC,CAAC;QAC/G,CAAC;IACH,CAAC;IACD,MAAM,IAAI,GAAgB,EAAE,CAAC;IAC7B,MAAM,MAAM,GAAG,IAAI,EAAE,IAAI,KAAK,gBAAgB,CAAC;IAC/C,IAAI,MAAM,EAAE,CAAC;QACX,KAAK,MAAM,EAAE,IAAI,uBAAuB,EAAE,CAAC;YACzC,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;YACnC,MAAM,CAAC,GAAG,MAAM,eAAe,CAAC,EAAE,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,CAAC;YAC7D,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACzM,CAAC;IACH,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,aAAa,EAAE,CAAC;QAC9B,IAAI,MAAM,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC;YAAE,SAAS;QAClC,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;QAClC,MAAM,CAAC,GAAG,MAAM,YAAY,CAAC,CAAC,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,CAAC;QACzD,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAC1N,CAAC;IACD,OAAO,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC;AACzE,CAAC"}
@@ -0,0 +1,91 @@
1
+ export interface CycleConfig {
2
+ version: 1;
3
+ /** How often the timer runs (informative; the timer unit carries it). */
4
+ every_days?: number;
5
+ /** A read-only COUNT query against the project's .forge/db.json. */
6
+ count_sql?: string;
7
+ /** D-039: a read-only query returning the first and the last timestamp
8
+ * the count spans, as two columns (e.g. `SELECT MIN(created_at) AS a,
9
+ * MAX(created_at) AS b FROM turnos`). With it the window is read from
10
+ * the database; without it a hand-typed `over_days` is used and the
11
+ * report says so. */
12
+ window_sql?: string;
13
+ /** Over how many days the counted rows accumulated (hand-typed; only
14
+ * used when `window_sql` is absent). */
15
+ over_days?: number;
16
+ /** Where the number comes from (the method refuses an unsourced number). */
17
+ source?: string;
18
+ bytes_per_row?: number;
19
+ /** D-038: the sources under which the PRODUCT captures its errors. When
20
+ * set, only these count; when absent, everything but the panel's own
21
+ * sources counts. */
22
+ product_error_sources?: string[];
23
+ }
24
+ export interface CycleState {
25
+ version: 1;
26
+ last_run?: number;
27
+ runs: number;
28
+ }
29
+ export interface CycleMeasured {
30
+ rows_total: number;
31
+ over_days: number;
32
+ source: string;
33
+ bytes_per_row?: number;
34
+ /** D-039: where the window comes from. `db` = read with window_sql
35
+ * (first/last timestamps on record); `manual` = typed by the operator,
36
+ * which only warns and never opens a pending item on its own. */
37
+ window?: 'db' | 'manual';
38
+ window_from?: string;
39
+ window_to?: string;
40
+ }
41
+ export interface CycleResult {
42
+ file: string;
43
+ window: {
44
+ since: number;
45
+ until: number;
46
+ };
47
+ measured?: CycleMeasured;
48
+ drift?: {
49
+ ok: boolean;
50
+ verdict: string;
51
+ ratio?: number;
52
+ declared?: number;
53
+ observed?: number;
54
+ };
55
+ errors: {
56
+ support_reports: number;
57
+ distinct_messages: string[];
58
+ receipts_not_ok: number;
59
+ open_bugs: number;
60
+ tool_reports: number;
61
+ };
62
+ changes_journaled: number;
63
+ ladder?: {
64
+ closed: number;
65
+ red: number;
66
+ total: number;
67
+ };
68
+ pendings_opened: string[];
69
+ blind_spots: string[];
70
+ }
71
+ export declare function cycleConfigPath(root: string): string;
72
+ export declare function readCycleConfig(root: string): Promise<CycleConfig>;
73
+ export interface CycleOptions {
74
+ measured?: CycleMeasured;
75
+ now?: number;
76
+ /** Default: since the last run, or 30 days. */
77
+ since?: number;
78
+ /** Do not open pendings (dry run). */
79
+ no_pendings?: boolean;
80
+ }
81
+ /** Sources the panel UI reports under: its own network and script errors.
82
+ * Product-side captures (the embed, a declared error log) use other names. */
83
+ export declare const PANEL_INTERNAL_SOURCES: Set<string>;
84
+ export declare function isPanelInternal(source: string | undefined): boolean;
85
+ export declare function runCycle(slug: string, root: string, opts?: CycleOptions): Promise<CycleResult>;
86
+ /** systemd units for the cycle on a server: a oneshot service + a timer. */
87
+ export declare function cycleUnits(name: string, deployDir: string, everyDays?: number): {
88
+ service: string;
89
+ timer: string;
90
+ };
91
+ //# sourceMappingURL=cycle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cycle.d.ts","sourceRoot":"","sources":["../../src/urazuke/cycle.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,310 @@
1
+ /**
2
+ * THE CYCLIC REPORT (Urazuke steps 21 + 22) -- and the sizing revalidation
3
+ * tied to it (closes the gap left open in knowledge graph 8.12).
4
+ *
5
+ * Every cycle (a timer on the server, or `yf urazuke cycle` by hand) Forge:
6
+ * 1. measures the real row count when it can (a COUNT(*) declared in
7
+ * .forge/cycle.json, run through the read-only db path) or takes the
8
+ * number the operator passes, and re-runs the sizing drift check;
9
+ * 2. gathers the errors of the window (support reports, receipts with a
10
+ * NOT OK verdict, open bugs) and the configuration changes journaled by
11
+ * operate mode;
12
+ * 3. writes docs/MONITORING_REPORT_<date>.md with the numbers;
13
+ * 4. opens ONE pending per thing that needs a hand: a sizing out of its
14
+ * envelope, each distinct new error without a pending ("ningun error
15
+ * sin pendiente").
16
+ * What Forge cannot measure it says so, in the report, as a blind spot.
17
+ *
18
+ * ASCII-only.
19
+ */
20
+ import fs from 'node:fs/promises';
21
+ import path from 'node:path';
22
+ export function cycleConfigPath(root) { return path.join(root, '.forge', 'cycle.json'); }
23
+ function statePath(root) { return path.join(root, '.forge', 'cycle-state.json'); }
24
+ export async function readCycleConfig(root) {
25
+ try {
26
+ const c = JSON.parse(await fs.readFile(cycleConfigPath(root), 'utf8'));
27
+ if (c && c.version === 1)
28
+ return c;
29
+ }
30
+ catch { /* none */ }
31
+ return { version: 1 };
32
+ }
33
+ async function readState(root) {
34
+ try {
35
+ const s = JSON.parse(await fs.readFile(statePath(root), 'utf8'));
36
+ if (s && s.version === 1)
37
+ return { ...s, runs: s.runs ?? 0 };
38
+ }
39
+ catch { /* none */ }
40
+ return { version: 1, runs: 0 };
41
+ }
42
+ async function writeState(root, s) {
43
+ await fs.mkdir(path.dirname(statePath(root)), { recursive: true });
44
+ await fs.writeFile(statePath(root), JSON.stringify(s, null, 2) + '\n', 'utf8');
45
+ }
46
+ /** Run the declared COUNT query through the read-only db path. */
47
+ async function measureFromDb(root, cfg) {
48
+ if (!cfg.count_sql)
49
+ return undefined;
50
+ try {
51
+ const { runDbQuery } = await import('../chat/tools/db_query.js');
52
+ let win;
53
+ if (cfg.window_sql) {
54
+ try {
55
+ const w = await runDbQuery({ sql: cfg.window_sql, limit: 1 }, { projectRoot: root });
56
+ const row0 = (w.result?.rows ?? [])[0] ?? {};
57
+ const raw = Array.isArray(row0) ? row0 : Object.values(row0);
58
+ const vals = raw.map((v) => String(v ?? '')).filter(Boolean);
59
+ const a = Date.parse(vals[0] ?? '');
60
+ const b = Date.parse(vals[1] ?? '');
61
+ if (!Number.isNaN(a) && !Number.isNaN(b) && b >= a) {
62
+ win = { over_days: Math.max(1, Math.round((b - a) / 86400000)), from: new Date(a).toISOString().slice(0, 10), to: new Date(b).toISOString().slice(0, 10) };
63
+ }
64
+ }
65
+ catch { /* window stays manual */ }
66
+ }
67
+ const r = await runDbQuery({ sql: cfg.count_sql, limit: 1 }, { projectRoot: root });
68
+ if (r.is_error)
69
+ return undefined;
70
+ const res = r.result;
71
+ const first = res.rows?.[0]?.[0];
72
+ const n = typeof first === 'number' ? first : Number(first);
73
+ if (!Number.isFinite(n))
74
+ return undefined;
75
+ return {
76
+ rows_total: n, over_days: win ? win.over_days : (cfg.over_days ?? 365),
77
+ source: cfg.source ?? ('count_sql: ' + cfg.count_sql), ...(cfg.bytes_per_row ? { bytes_per_row: cfg.bytes_per_row } : {}),
78
+ window: win ? 'db' : 'manual', ...(win ? { window_from: win.from, window_to: win.to } : {}),
79
+ };
80
+ }
81
+ catch {
82
+ return undefined;
83
+ }
84
+ }
85
+ /** Sources the panel UI reports under: its own network and script errors.
86
+ * Product-side captures (the embed, a declared error log) use other names. */
87
+ export const PANEL_INTERNAL_SOURCES = new Set(['window.onerror', 'fetch', 'unhandled', 'panel', 'mobile-voice', 'mobile-relay']);
88
+ export function isPanelInternal(source) {
89
+ return PANEL_INTERNAL_SOURCES.has((source ?? 'panel').trim());
90
+ }
91
+ export async function runCycle(slug, root, opts = {}) {
92
+ const now = opts.now ?? Date.now();
93
+ const cfg = await readCycleConfig(root);
94
+ const state = await readState(root);
95
+ const since = opts.since ?? state.last_run ?? (now - 30 * 24 * 3600 * 1000);
96
+ const blind = [];
97
+ const opened = [];
98
+ /* 1. sizing drift */
99
+ const measured = opts.measured ?? await measureFromDb(root, cfg);
100
+ let drift;
101
+ if (measured) {
102
+ try {
103
+ const { checkDrift } = await import('../sizing/store.js');
104
+ const d = await checkDrift(slug, { rows_total: measured.rows_total, over_days: measured.over_days, source: measured.source, ...(measured.bytes_per_row ? { bytes_per_row: measured.bytes_per_row } : {}) });
105
+ drift = { ok: d.ok, verdict: d.verdict, ratio: d.ratio, declared: d.declared_rows_per_year, observed: d.observed_rows_per_year };
106
+ }
107
+ catch (e) {
108
+ drift = { ok: false, verdict: 'drift check failed: ' + (e instanceof Error ? e.message : String(e)) };
109
+ }
110
+ }
111
+ else {
112
+ blind.push('sizing not revalidated: no measured row count (declare count_sql in .forge/cycle.json or pass --rows/--over-days/--source)');
113
+ }
114
+ /* D-039: a hand-typed window only warns. Found on 2026-10-19 (inherited
115
+ * Turnera): 30,000 rows of three years passed as one year opened a false
116
+ * drift pending. */
117
+ const manualWindow = !!measured && measured.window !== 'db';
118
+ if (manualWindow)
119
+ blind.push('the sizing window (' + measured.over_days + ' days) was typed by hand, not read from the database (declare window_sql in .forge/cycle.json): a drift from it only warns, it opens no pending item');
120
+ /* 2. errors + changes. Only the PRODUCT's errors count: the panel's own
121
+ * sources (a fetch that failed because the panel server was down, a
122
+ * window.onerror in the chat UI) are Forge's problem, not the owner's.
123
+ * Found on 2026-10-19: the first cycle of the Turnera practice opened
124
+ * six "bugs" that were the panel talking to a server that was off. */
125
+ let supportReports = 0;
126
+ let panelReports = 0;
127
+ const messages = new Map();
128
+ const toolMessages = new Map();
129
+ const productSources = (cfg.product_error_sources ?? []).map((s) => s.trim()).filter(Boolean);
130
+ try {
131
+ const { readReports } = await import('../support/reports.js');
132
+ for (const r of await readReports()) {
133
+ const t = Date.parse(r.ts);
134
+ if (!(t >= since && t <= now) || r.level !== 'error')
135
+ continue;
136
+ const isTool = productSources.length ? !productSources.includes((r.source ?? 'panel').trim()) : isPanelInternal(r.source);
137
+ if (isTool) {
138
+ panelReports += 1;
139
+ const tk = ((r.source ?? 'panel') + ': ' + r.message.replace(/\d+/g, '#')).slice(0, 120);
140
+ toolMessages.set(tk, (toolMessages.get(tk) ?? 0) + 1);
141
+ continue;
142
+ }
143
+ supportReports += 1;
144
+ const key = r.message.replace(/\d+/g, '#').slice(0, 120);
145
+ messages.set(key, (messages.get(key) ?? 0) + 1);
146
+ }
147
+ }
148
+ catch {
149
+ blind.push('support reports unreadable');
150
+ }
151
+ /* D-038: the tool's errors are listed apart (section below), never as product errors. */
152
+ let receiptsNotOk = 0;
153
+ try {
154
+ const { readReceipts } = await import('./receipts.js');
155
+ receiptsNotOk = (await readReceipts(slug)).items.filter((r) => r.verdict !== 'ok' && r.started_at >= since && r.started_at <= now).length;
156
+ }
157
+ catch { /* none */ }
158
+ let openBugs = 0;
159
+ let openTitles = new Set();
160
+ try {
161
+ const { listPending } = await import('../pending/store.js');
162
+ const open = await listPending(slug, { status: 'open' });
163
+ openBugs = open.filter((p) => p.category === 'bug').length;
164
+ openTitles = new Set(open.map((p) => p.title));
165
+ }
166
+ catch { /* none */ }
167
+ let changes = 0;
168
+ try {
169
+ const raw = await fs.readFile(path.join(root, '.forge', 'changes', 'changes.jsonl'), 'utf8');
170
+ for (const line of raw.split('\n')) {
171
+ if (!line.trim())
172
+ continue;
173
+ try {
174
+ const j = JSON.parse(line);
175
+ const t = j.ts ? Date.parse(j.ts) : NaN;
176
+ if (t >= since && t <= now)
177
+ changes += 1;
178
+ }
179
+ catch { /* skip */ }
180
+ }
181
+ }
182
+ catch { /* no journal */ }
183
+ if (!cfg.count_sql && !opts.measured)
184
+ blind.push('resource usage (cpu, memory, disk, slow queries) is not measured by Forge: wire the host metrics or the db slow log into this report');
185
+ /* 3. ladder */
186
+ let ladder;
187
+ try {
188
+ const { urazukeLadder } = await import('./current.js');
189
+ const l = await urazukeLadder(slug, root);
190
+ ladder = { closed: l.rows.filter((r) => r.status === 'closed').length, red: l.rows.filter((r) => r.status === 'red').length, total: l.rows.length };
191
+ }
192
+ catch { /* none */ }
193
+ /* 4. pendings: one per thing that needs a hand */
194
+ if (!opts.no_pendings) {
195
+ try {
196
+ const { addPending } = await import('../pending/store.js');
197
+ if (drift && !drift.ok && measured && !manualWindow) {
198
+ const title = 'Dimensionamiento fuera de envoltura (reporte ciclico)';
199
+ if (!openTitles.has(title)) {
200
+ const p = await addPending(slug, { title, category: 'infra', priority: 10, body: drift.verdict + '\n\nMedido: ' + measured.rows_total + ' filas en ' + measured.over_days + ' dias (' + measured.source + '). Revisar con yujin.sizing.show / yujin.sizing.record.' });
201
+ opened.push(p.id);
202
+ }
203
+ }
204
+ const top = [...messages.entries()].sort((a, b) => b[1] - a[1]).slice(0, 10);
205
+ for (const [msg, n] of top) {
206
+ const title = '[error] ' + msg;
207
+ if (openTitles.has(title))
208
+ continue;
209
+ const p = await addPending(slug, { title, category: 'bug', priority: 20, body: n + ' ocurrencia(s) en la ventana del reporte ciclico. Ningun error sin pendiente (peldano 22).' });
210
+ opened.push(p.id);
211
+ }
212
+ }
213
+ catch {
214
+ blind.push('could not open pendings for the findings');
215
+ }
216
+ }
217
+ /* 5. the report */
218
+ const date = new Date(now).toISOString().slice(0, 10);
219
+ const file = path.join(root, 'docs', 'MONITORING_REPORT_' + date + '.md');
220
+ const row = (k, v) => '| ' + k + ' | ' + v + ' |';
221
+ const lines = [
222
+ '# Reporte ciclico ' + date + ' (ventana ' + new Date(since).toISOString().slice(0, 10) + ' .. ' + date + ')',
223
+ '',
224
+ 'Generado por `yf urazuke cycle`. Los numeros salen de los registros de Forge y, cuando esta',
225
+ 'declarado, de una consulta de solo lectura a la base. Lo que no se pudo medir esta en puntos ciegos.',
226
+ '',
227
+ '## Dimensionamiento (peldano 3, revalidado cada ciclo)',
228
+ '',
229
+ measured
230
+ ? '- medido: ' + measured.rows_total + ' filas en ' + measured.over_days + ' dias (' + measured.source + ')'
231
+ : '- sin medicion este ciclo',
232
+ measured
233
+ ? (measured.window === 'db'
234
+ ? '- ventana: leida de la base, ' + measured.window_from + ' .. ' + measured.window_to + ' (D-039)'
235
+ : '- ventana: ESCRITA A MANO (' + measured.over_days + ' dias); un desvio sobre esta ventana solo avisa, no abre pendiente (D-039)')
236
+ : '- ventana: sin medicion',
237
+ drift ? '- veredicto: ' + (drift.ok ? 'ADMISIBLE' : 'FUERA DE ENVOLTURA') + ' -- ' + drift.verdict + (drift.ratio != null ? ' (ratio ' + drift.ratio + ', declarado ' + drift.declared + ' filas/ano, observado ' + drift.observed + ')' : '') : '- veredicto: no evaluado',
238
+ '',
239
+ '## Errores (peldano 22)',
240
+ '',
241
+ '| Medida | Valor |',
242
+ '|---|---|',
243
+ row('Reportes de error (support) en la ventana', supportReports),
244
+ row('Mensajes distintos', messages.size),
245
+ row('Recibos con veredicto NOT OK', receiptsNotOk),
246
+ row('Bugs abiertos hoy', openBugs),
247
+ row('Pendientes abiertos por este reporte', opened.length ? opened.join(', ') : 0),
248
+ '',
249
+ '## Errores de la herramienta (fuera del producto, D-038)',
250
+ '',
251
+ '_Los errores del panel de Forge, del agente residente y del propio monitoreo se listan aparte y no abren pendientes._',
252
+ '',
253
+ ...(panelReports
254
+ ? [row('Reportes en la ventana', panelReports), ...[...toolMessages.entries()].sort((a, b) => b[1] - a[1]).slice(0, 10).map(([m, n]) => '- ' + n + ' x ' + m)]
255
+ : ['- ninguno en la ventana']),
256
+ '',
257
+ '## Cambios de configuracion journalizados (operate mode)',
258
+ '',
259
+ row('Cambios en la ventana', changes).replace('| ', '- ').replace(' |', '').replace(' | ', ': '),
260
+ '',
261
+ '## Escalera',
262
+ '',
263
+ ladder ? '- ' + ladder.closed + ' cerrados, ' + ladder.red + ' en rojo de ' + ladder.total : '- sin workflow urazuke',
264
+ '',
265
+ '## Puntos ciegos',
266
+ '',
267
+ ...(blind.length ? blind.map((b) => '- ' + b) : ['- ninguno declarado']),
268
+ '',
269
+ ];
270
+ await fs.mkdir(path.dirname(file), { recursive: true });
271
+ await fs.writeFile(file, lines.join('\n'), 'utf8');
272
+ await writeState(root, { version: 1, last_run: now, runs: state.runs + 1 });
273
+ return {
274
+ file, window: { since, until: now }, ...(measured ? { measured } : {}), ...(drift ? { drift } : {}),
275
+ errors: { support_reports: supportReports, distinct_messages: [...messages.keys()], receipts_not_ok: receiptsNotOk, open_bugs: openBugs, tool_reports: panelReports },
276
+ changes_journaled: changes, ...(ladder ? { ladder } : {}), pendings_opened: opened, blind_spots: blind,
277
+ };
278
+ }
279
+ /** systemd units for the cycle on a server: a oneshot service + a timer. */
280
+ export function cycleUnits(name, deployDir, everyDays = 7) {
281
+ const service = [
282
+ '[Unit]',
283
+ 'Description=Forge Embedded cyclic report (' + name + ')',
284
+ 'After=network.target',
285
+ '',
286
+ '[Service]',
287
+ 'Type=oneshot',
288
+ 'User=CHANGE_ME',
289
+ 'WorkingDirectory=' + deployDir,
290
+ 'Environment=YF_ENV=prod',
291
+ 'Environment=PATH=/usr/local/bin:/usr/bin:/bin',
292
+ 'ExecStart=/usr/bin/env yf urazuke cycle --cwd ' + deployDir,
293
+ '',
294
+ ].join('\n');
295
+ const timer = [
296
+ '[Unit]',
297
+ 'Description=Forge Embedded cyclic report timer (' + name + ', every ' + everyDays + ' days)',
298
+ '',
299
+ '[Timer]',
300
+ 'OnBootSec=15min',
301
+ 'OnUnitActiveSec=' + everyDays + 'd',
302
+ 'Persistent=true',
303
+ '',
304
+ '[Install]',
305
+ 'WantedBy=timers.target',
306
+ '',
307
+ ].join('\n');
308
+ return { service, timer };
309
+ }
310
+ //# sourceMappingURL=cycle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cycle.js","sourceRoot":"","sources":["../../src/urazuke/cycle.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * URAZUKE ON/OFF -- one switch, in the brain config of the instance.
3
+ *
4
+ * Pablo (2026-10-19): the method is enabled by default in Forge developer
5
+ * (the panel a person opens on their machine) and disabled by default in
6
+ * Forge embed (the resident assistant that runs on a server with YF_ENV
7
+ * set to prod / uat / ops). The user flips it in Settings; the explicit
8
+ * value, when present, wins over the default.
9
+ *
10
+ * What the switch gates: the prompt injected into the brain, the Urazuke
11
+ * startup tab, the automatic choice of a urazuke / urazuke-legacy workflow
12
+ * for a newly mapped project, the step gate on canonical tasks, the
13
+ * receipt gate on plan items, and the yujin.urazuke.* / yujin.evidence.*
14
+ * verbs. The `yf urazuke` CLI stays explicit and always works.
15
+ *
16
+ * ASCII-only.
17
+ */
18
+ /** True when this process is a Forge embed (resident assistant). */
19
+ export declare function isEmbedRuntime(env?: NodeJS.ProcessEnv): boolean;
20
+ /** The default when the config does not say: developer on, embed off. */
21
+ export declare function urazukeDefaultEnabled(env?: NodeJS.ProcessEnv): boolean;
22
+ /** Resolve the effective switch: explicit config value, else the default. */
23
+ export declare function resolveUrazukeEnabled(cfg: {
24
+ urazuke_enabled?: boolean;
25
+ } | undefined, env?: NodeJS.ProcessEnv): boolean;
26
+ /** Read the instance config and resolve. Never throws: on any failure the
27
+ * default for this runtime applies. Tests may force it with
28
+ * YF_URAZUKE_ENABLED=0|1. */
29
+ export declare function urazukeEnabled(): Promise<boolean>;
30
+ export declare const URAZUKE_DISABLED_MESSAGE = "Urazuke is disabled for this Forge (Settings > Urazuke). Enable it there, or use the yf urazuke CLI explicitly.";
31
+ //# sourceMappingURL=enabled.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enabled.d.ts","sourceRoot":"","sources":["../../src/urazuke/enabled.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAIH,oEAAoE;AACpE,wBAAgB,cAAc,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,OAAO,CAE5E;AAED,yEAAyE;AACzE,wBAAgB,qBAAqB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,OAAO,CAEnF;AAED,6EAA6E;AAC7E,wBAAgB,qBAAqB,CAAC,GAAG,EAAE;IAAE,eAAe,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,SAAS,EAAE,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,OAAO,CAGnI;AAED;;8BAE8B;AAC9B,wBAAsB,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC,CAUvD;AAED,eAAO,MAAM,wBAAwB,oHAAoH,CAAC"}