@devenius/junamis-skills 0.0.0-stage → 1.1.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 (311) hide show
  1. package/CHANGELOG.md +150 -0
  2. package/LICENSE +21 -0
  3. package/README.md +231 -2
  4. package/SECURITY.md +81 -0
  5. package/bin/junamis-skills.js +7 -0
  6. package/dist/cli.d.ts +59 -0
  7. package/dist/cli.d.ts.map +1 -0
  8. package/dist/cli.js +564 -0
  9. package/dist/cli.js.map +1 -0
  10. package/dist/color.d.ts +40 -0
  11. package/dist/color.d.ts.map +1 -0
  12. package/dist/color.js +55 -0
  13. package/dist/color.js.map +1 -0
  14. package/dist/design/atomic.d.ts +4 -0
  15. package/dist/design/atomic.d.ts.map +1 -0
  16. package/dist/design/atomic.js +14 -0
  17. package/dist/design/atomic.js.map +1 -0
  18. package/dist/design/bootstrap.d.ts +23 -0
  19. package/dist/design/bootstrap.d.ts.map +1 -0
  20. package/dist/design/bootstrap.js +411 -0
  21. package/dist/design/bootstrap.js.map +1 -0
  22. package/dist/design/cli.d.ts +86 -0
  23. package/dist/design/cli.d.ts.map +1 -0
  24. package/dist/design/cli.js +425 -0
  25. package/dist/design/cli.js.map +1 -0
  26. package/dist/design/delta.d.ts +45 -0
  27. package/dist/design/delta.d.ts.map +1 -0
  28. package/dist/design/delta.js +557 -0
  29. package/dist/design/delta.js.map +1 -0
  30. package/dist/design/drift.d.ts +26 -0
  31. package/dist/design/drift.d.ts.map +1 -0
  32. package/dist/design/drift.js +341 -0
  33. package/dist/design/drift.js.map +1 -0
  34. package/dist/design/errors.d.ts +25 -0
  35. package/dist/design/errors.d.ts.map +1 -0
  36. package/dist/design/errors.js +30 -0
  37. package/dist/design/errors.js.map +1 -0
  38. package/dist/design/events.d.ts +18 -0
  39. package/dist/design/events.d.ts.map +1 -0
  40. package/dist/design/events.js +44 -0
  41. package/dist/design/events.js.map +1 -0
  42. package/dist/design/fingerprint.d.ts +10 -0
  43. package/dist/design/fingerprint.d.ts.map +1 -0
  44. package/dist/design/fingerprint.js +66 -0
  45. package/dist/design/fingerprint.js.map +1 -0
  46. package/dist/design/index-gen.d.ts +16 -0
  47. package/dist/design/index-gen.d.ts.map +1 -0
  48. package/dist/design/index-gen.js +94 -0
  49. package/dist/design/index-gen.js.map +1 -0
  50. package/dist/design/schema.d.ts +54 -0
  51. package/dist/design/schema.d.ts.map +1 -0
  52. package/dist/design/schema.js +408 -0
  53. package/dist/design/schema.js.map +1 -0
  54. package/dist/design/yaml.d.ts +12 -0
  55. package/dist/design/yaml.d.ts.map +1 -0
  56. package/dist/design/yaml.js +264 -0
  57. package/dist/design/yaml.js.map +1 -0
  58. package/dist/external.d.ts +61 -0
  59. package/dist/external.d.ts.map +1 -0
  60. package/dist/external.js +426 -0
  61. package/dist/external.js.map +1 -0
  62. package/dist/guide.d.ts +17 -0
  63. package/dist/guide.d.ts.map +1 -0
  64. package/dist/guide.js +219 -0
  65. package/dist/guide.js.map +1 -0
  66. package/dist/index.d.ts +2 -0
  67. package/dist/index.d.ts.map +1 -0
  68. package/dist/index.js +7 -0
  69. package/dist/index.js.map +1 -0
  70. package/dist/install-external.d.ts +3 -0
  71. package/dist/install-external.d.ts.map +1 -0
  72. package/dist/install-external.js +37 -0
  73. package/dist/install-external.js.map +1 -0
  74. package/dist/library-install.d.ts +39 -0
  75. package/dist/library-install.d.ts.map +1 -0
  76. package/dist/library-install.js +663 -0
  77. package/dist/library-install.js.map +1 -0
  78. package/dist/orchestrator/boot.d.ts +3 -0
  79. package/dist/orchestrator/boot.d.ts.map +1 -0
  80. package/dist/orchestrator/boot.js +515 -0
  81. package/dist/orchestrator/boot.js.map +1 -0
  82. package/dist/orchestrator/cli.d.ts +37 -0
  83. package/dist/orchestrator/cli.d.ts.map +1 -0
  84. package/dist/orchestrator/cli.js +563 -0
  85. package/dist/orchestrator/cli.js.map +1 -0
  86. package/dist/orchestrator/commands.d.ts +46 -0
  87. package/dist/orchestrator/commands.d.ts.map +1 -0
  88. package/dist/orchestrator/commands.js +752 -0
  89. package/dist/orchestrator/commands.js.map +1 -0
  90. package/dist/orchestrator/compaction.d.ts +21 -0
  91. package/dist/orchestrator/compaction.d.ts.map +1 -0
  92. package/dist/orchestrator/compaction.js +93 -0
  93. package/dist/orchestrator/compaction.js.map +1 -0
  94. package/dist/orchestrator/drift.d.ts +11 -0
  95. package/dist/orchestrator/drift.d.ts.map +1 -0
  96. package/dist/orchestrator/drift.js +181 -0
  97. package/dist/orchestrator/drift.js.map +1 -0
  98. package/dist/orchestrator/errors.d.ts +52 -0
  99. package/dist/orchestrator/errors.d.ts.map +1 -0
  100. package/dist/orchestrator/errors.js +96 -0
  101. package/dist/orchestrator/errors.js.map +1 -0
  102. package/dist/orchestrator/frontmatter.d.ts +6 -0
  103. package/dist/orchestrator/frontmatter.d.ts.map +1 -0
  104. package/dist/orchestrator/frontmatter.js +50 -0
  105. package/dist/orchestrator/frontmatter.js.map +1 -0
  106. package/dist/orchestrator/fsx.d.ts +45 -0
  107. package/dist/orchestrator/fsx.d.ts.map +1 -0
  108. package/dist/orchestrator/fsx.js +295 -0
  109. package/dist/orchestrator/fsx.js.map +1 -0
  110. package/dist/orchestrator/handoff.d.ts +8 -0
  111. package/dist/orchestrator/handoff.d.ts.map +1 -0
  112. package/dist/orchestrator/handoff.js +246 -0
  113. package/dist/orchestrator/handoff.js.map +1 -0
  114. package/dist/orchestrator/hash.d.ts +10 -0
  115. package/dist/orchestrator/hash.d.ts.map +1 -0
  116. package/dist/orchestrator/hash.js +65 -0
  117. package/dist/orchestrator/hash.js.map +1 -0
  118. package/dist/orchestrator/journal.d.ts +35 -0
  119. package/dist/orchestrator/journal.d.ts.map +1 -0
  120. package/dist/orchestrator/journal.js +163 -0
  121. package/dist/orchestrator/journal.js.map +1 -0
  122. package/dist/orchestrator/lease.d.ts +31 -0
  123. package/dist/orchestrator/lease.d.ts.map +1 -0
  124. package/dist/orchestrator/lease.js +175 -0
  125. package/dist/orchestrator/lease.js.map +1 -0
  126. package/dist/orchestrator/plan.d.ts +27 -0
  127. package/dist/orchestrator/plan.d.ts.map +1 -0
  128. package/dist/orchestrator/plan.js +240 -0
  129. package/dist/orchestrator/plan.js.map +1 -0
  130. package/dist/orchestrator/report.d.ts +49 -0
  131. package/dist/orchestrator/report.d.ts.map +1 -0
  132. package/dist/orchestrator/report.js +244 -0
  133. package/dist/orchestrator/report.js.map +1 -0
  134. package/dist/orchestrator/state.d.ts +43 -0
  135. package/dist/orchestrator/state.d.ts.map +1 -0
  136. package/dist/orchestrator/state.js +369 -0
  137. package/dist/orchestrator/state.js.map +1 -0
  138. package/dist/orchestrator/store.d.ts +42 -0
  139. package/dist/orchestrator/store.d.ts.map +1 -0
  140. package/dist/orchestrator/store.js +202 -0
  141. package/dist/orchestrator/store.js.map +1 -0
  142. package/dist/orchestrator/test-hooks.d.ts +5 -0
  143. package/dist/orchestrator/test-hooks.d.ts.map +1 -0
  144. package/dist/orchestrator/test-hooks.js +31 -0
  145. package/dist/orchestrator/test-hooks.js.map +1 -0
  146. package/dist/orchestrator/time.d.ts +11 -0
  147. package/dist/orchestrator/time.d.ts.map +1 -0
  148. package/dist/orchestrator/time.js +38 -0
  149. package/dist/orchestrator/time.js.map +1 -0
  150. package/dist/paths.d.ts +9 -0
  151. package/dist/paths.d.ts.map +1 -0
  152. package/dist/paths.js +42 -0
  153. package/dist/paths.js.map +1 -0
  154. package/dist/pinned-source.d.ts +13 -0
  155. package/dist/pinned-source.d.ts.map +1 -0
  156. package/dist/pinned-source.js +238 -0
  157. package/dist/pinned-source.js.map +1 -0
  158. package/dist/reconcile/cli.d.ts +17 -0
  159. package/dist/reconcile/cli.d.ts.map +1 -0
  160. package/dist/reconcile/cli.js +171 -0
  161. package/dist/reconcile/cli.js.map +1 -0
  162. package/dist/reconcile/detectors.d.ts +29 -0
  163. package/dist/reconcile/detectors.d.ts.map +1 -0
  164. package/dist/reconcile/detectors.js +294 -0
  165. package/dist/reconcile/detectors.js.map +1 -0
  166. package/dist/reconcile/manifest.d.ts +11 -0
  167. package/dist/reconcile/manifest.d.ts.map +1 -0
  168. package/dist/reconcile/manifest.js +118 -0
  169. package/dist/reconcile/manifest.js.map +1 -0
  170. package/dist/reconcile/queue.d.ts +3 -0
  171. package/dist/reconcile/queue.d.ts.map +1 -0
  172. package/dist/reconcile/queue.js +723 -0
  173. package/dist/reconcile/queue.js.map +1 -0
  174. package/dist/reconcile/score.d.ts +19 -0
  175. package/dist/reconcile/score.d.ts.map +1 -0
  176. package/dist/reconcile/score.js +58 -0
  177. package/dist/reconcile/score.js.map +1 -0
  178. package/dist/scripts/check-opencode-config.d.ts +12 -0
  179. package/dist/scripts/check-opencode-config.d.ts.map +1 -0
  180. package/dist/scripts/check-opencode-config.js +216 -0
  181. package/dist/scripts/check-opencode-config.js.map +1 -0
  182. package/dist/scripts/check-pack.d.ts +3 -0
  183. package/dist/scripts/check-pack.d.ts.map +1 -0
  184. package/dist/scripts/check-pack.js +74 -0
  185. package/dist/scripts/check-pack.js.map +1 -0
  186. package/dist/scripts/check-pins.d.ts +9 -0
  187. package/dist/scripts/check-pins.d.ts.map +1 -0
  188. package/dist/scripts/check-pins.js +65 -0
  189. package/dist/scripts/check-pins.js.map +1 -0
  190. package/dist/scripts/check-security.d.ts +3 -0
  191. package/dist/scripts/check-security.d.ts.map +1 -0
  192. package/dist/scripts/check-security.js +47 -0
  193. package/dist/scripts/check-security.js.map +1 -0
  194. package/dist/scripts/check-skills-lock.d.ts +7 -0
  195. package/dist/scripts/check-skills-lock.d.ts.map +1 -0
  196. package/dist/scripts/check-skills-lock.js +36 -0
  197. package/dist/scripts/check-skills-lock.js.map +1 -0
  198. package/dist/scripts/check-skills-sync.d.ts +7 -0
  199. package/dist/scripts/check-skills-sync.d.ts.map +1 -0
  200. package/dist/scripts/check-skills-sync.js +146 -0
  201. package/dist/scripts/check-skills-sync.js.map +1 -0
  202. package/dist/scripts/check-yaml.d.ts +3 -0
  203. package/dist/scripts/check-yaml.d.ts.map +1 -0
  204. package/dist/scripts/check-yaml.js +41 -0
  205. package/dist/scripts/check-yaml.js.map +1 -0
  206. package/dist/scripts/publish-npm.d.ts +3 -0
  207. package/dist/scripts/publish-npm.d.ts.map +1 -0
  208. package/dist/scripts/publish-npm.js +67 -0
  209. package/dist/scripts/publish-npm.js.map +1 -0
  210. package/dist/scripts/release-check.d.ts +3 -0
  211. package/dist/scripts/release-check.d.ts.map +1 -0
  212. package/dist/scripts/release-check.js +97 -0
  213. package/dist/scripts/release-check.js.map +1 -0
  214. package/dist/scripts/support.d.ts +41 -0
  215. package/dist/scripts/support.d.ts.map +1 -0
  216. package/dist/scripts/support.js +78 -0
  217. package/dist/scripts/support.js.map +1 -0
  218. package/dist/targets/claude.d.ts +4 -0
  219. package/dist/targets/claude.d.ts.map +1 -0
  220. package/dist/targets/claude.js +42 -0
  221. package/dist/targets/claude.js.map +1 -0
  222. package/dist/targets/cline.d.ts +4 -0
  223. package/dist/targets/cline.d.ts.map +1 -0
  224. package/dist/targets/cline.js +39 -0
  225. package/dist/targets/cline.js.map +1 -0
  226. package/dist/targets/cursor.d.ts +4 -0
  227. package/dist/targets/cursor.d.ts.map +1 -0
  228. package/dist/targets/cursor.js +40 -0
  229. package/dist/targets/cursor.js.map +1 -0
  230. package/dist/targets/index.d.ts +4 -0
  231. package/dist/targets/index.d.ts.map +1 -0
  232. package/dist/targets/index.js +11 -0
  233. package/dist/targets/index.js.map +1 -0
  234. package/dist/targets/opencode.d.ts +4 -0
  235. package/dist/targets/opencode.d.ts.map +1 -0
  236. package/dist/targets/opencode.js +48 -0
  237. package/dist/targets/opencode.js.map +1 -0
  238. package/dist/targets/windsurf.d.ts +4 -0
  239. package/dist/targets/windsurf.d.ts.map +1 -0
  240. package/dist/targets/windsurf.js +41 -0
  241. package/dist/targets/windsurf.js.map +1 -0
  242. package/dist/types/common.d.ts +193 -0
  243. package/dist/types/common.d.ts.map +1 -0
  244. package/dist/types/common.js +6 -0
  245. package/dist/types/common.js.map +1 -0
  246. package/dist/types/design.d.ts +185 -0
  247. package/dist/types/design.d.ts.map +1 -0
  248. package/dist/types/design.js +3 -0
  249. package/dist/types/design.js.map +1 -0
  250. package/dist/types/guards.d.ts +13 -0
  251. package/dist/types/guards.d.ts.map +1 -0
  252. package/dist/types/guards.js +64 -0
  253. package/dist/types/guards.js.map +1 -0
  254. package/dist/types/handoff.d.ts +29 -0
  255. package/dist/types/handoff.d.ts.map +1 -0
  256. package/dist/types/handoff.js +3 -0
  257. package/dist/types/handoff.js.map +1 -0
  258. package/dist/types/index.d.ts +7 -0
  259. package/dist/types/index.d.ts.map +1 -0
  260. package/dist/types/index.js +11 -0
  261. package/dist/types/index.js.map +1 -0
  262. package/dist/types/orchestrator.d.ts +414 -0
  263. package/dist/types/orchestrator.d.ts.map +1 -0
  264. package/dist/types/orchestrator.js +4 -0
  265. package/dist/types/orchestrator.js.map +1 -0
  266. package/dist/types/reconcile.d.ts +160 -0
  267. package/dist/types/reconcile.d.ts.map +1 -0
  268. package/dist/types/reconcile.js +3 -0
  269. package/dist/types/reconcile.js.map +1 -0
  270. package/docs/RECONCILE.md +505 -0
  271. package/docs/design/_schema.md +506 -0
  272. package/junamis-skills.yml +328 -0
  273. package/library/EXTERNAL.md +35 -0
  274. package/library/HANDOFF.md +93 -0
  275. package/library/RESUME.md +429 -0
  276. package/library/SAFETY.md +83 -0
  277. package/library/agents/context-keeper.md +41 -0
  278. package/library/agents/frontend.md +43 -0
  279. package/library/agents/maintainer.md +44 -0
  280. package/library/agents/nestjs.md +40 -0
  281. package/library/agents/nextjs.md +40 -0
  282. package/library/agents/operator.md +42 -0
  283. package/library/agents/orchestrator.md +313 -0
  284. package/library/agents/researcher.md +40 -0
  285. package/library/agents/reviewer.md +40 -0
  286. package/library/skills/db-migrate/SKILL.md +50 -0
  287. package/library/skills/decision-record/SKILL.md +74 -0
  288. package/library/skills/dependency-upgrade/SKILL.md +57 -0
  289. package/library/skills/deploy-verify/SKILL.md +51 -0
  290. package/library/skills/document/SKILL.md +51 -0
  291. package/library/skills/env-doctor/SKILL.md +65 -0
  292. package/library/skills/frontend/SKILL.md +63 -0
  293. package/library/skills/handoff/SKILL.md +79 -0
  294. package/library/skills/incident-response/SKILL.md +69 -0
  295. package/library/skills/nestjs/SKILL.md +49 -0
  296. package/library/skills/nextjs/SKILL.md +48 -0
  297. package/library/skills/perf-budget/SKILL.md +62 -0
  298. package/library/skills/refactor-safely/SKILL.md +48 -0
  299. package/library/skills/release-prep/SKILL.md +75 -0
  300. package/library/skills/research/SKILL.md +66 -0
  301. package/library/skills/rollback/SKILL.md +49 -0
  302. package/library/skills/route/SKILL.md +107 -0
  303. package/library/skills/route-external/SKILL.md +67 -0
  304. package/library/skills/security-audit/SKILL.md +64 -0
  305. package/library/skills/skill-author/SKILL.md +49 -0
  306. package/opencode.json +5906 -0
  307. package/package.json +88 -4
  308. package/scripts/design-registry.mjs +7 -0
  309. package/scripts/orchestrator-state.mjs +7 -0
  310. package/scripts/reconcile.mjs +7 -0
  311. package/skills-lock.json +197 -0
@@ -0,0 +1,557 @@
1
+ // Apply a design_delta mechanically.
2
+ //
3
+ // A delta is the only way a skill changes a design surface. This module checks
4
+ // the base checksum, applies section actions, bumps the version, updates the
5
+ // review metadata, appends to the change log, validates the result, writes it
6
+ // atomically, journals the event, and (once the index module is wired in)
7
+ // regenerates INDEX.md.
8
+ import { spawnSync } from "node:child_process";
9
+ import { extname, join, resolve } from "node:path";
10
+ import { exists, readText } from "../orchestrator/fsx.js";
11
+ import { atomicWriteText } from "./atomic.js";
12
+ import { appendDesignEvent } from "./events.js";
13
+ import { DeltaError, ValidationError } from "./errors.js";
14
+ import { writeIndex } from "./index-gen.js";
15
+ import { canonicalSectionOrder, computeDesignChecksum, isKind, isSurfaceId, parseSections, readSurface, requiredSections, surfacePath, validateDesignText, } from "./schema.js";
16
+ import { parseYaml } from "./yaml.js";
17
+ import { runReconcile } from "../reconcile/queue.js";
18
+ import { errorMessage, isRecord } from "../types/guards.js";
19
+ const OPERATIONS = new Set(["create", "update", "deprecate", "none"]);
20
+ const ACTIONS = new Set(["replace", "append", "prepend", "remove_line"]);
21
+ const DELTA_KEYS = new Set([
22
+ "surface_id",
23
+ "operation",
24
+ "base_checksum",
25
+ "sections",
26
+ "code_paths_touched",
27
+ "rationale",
28
+ "task_id",
29
+ "skill",
30
+ "idempotent",
31
+ "bump",
32
+ ]);
33
+ const CHECKSUM_RE = /^sha256:[0-9a-f]{64}$/;
34
+ const SAFE_SCALAR_RE = /^[A-Za-z0-9_./:@+-]+$/;
35
+ function deltaError(message, detail = null) {
36
+ return new DeltaError(message, { detail });
37
+ }
38
+ export function parseDeltaText(text, { file = "delta" } = {}) {
39
+ if (typeof text !== "string" || text.trim().length === 0)
40
+ throw deltaError(`${file} is empty`);
41
+ let raw;
42
+ if (extname(file).toLowerCase() === ".json" || text.trimStart().startsWith("{")) {
43
+ try {
44
+ raw = JSON.parse(text);
45
+ }
46
+ catch (error) {
47
+ throw deltaError(`${file} is not valid JSON: ${errorMessage(error)}`);
48
+ }
49
+ }
50
+ else {
51
+ raw = parseYaml(text, { label: file });
52
+ }
53
+ return normalizeDelta(raw, { file });
54
+ }
55
+ export function normalizeDelta(raw, { file = "delta" } = {}) {
56
+ if (!isRecord(raw)) {
57
+ throw deltaError(`${file} must be a mapping`);
58
+ }
59
+ for (const key of Object.keys(raw)) {
60
+ if (!DELTA_KEYS.has(key))
61
+ throw deltaError(`${file} has an unknown key ${key}`);
62
+ }
63
+ const surfaceId = raw["surface_id"];
64
+ if (!isSurfaceId(surfaceId))
65
+ throw deltaError(`${file} has an invalid surface_id`);
66
+ const kind = surfaceId.split("/")[0] ?? "";
67
+ if (!isKind(kind))
68
+ throw deltaError(`${file} surface_id does not start with a known kind`);
69
+ const operation = raw["operation"];
70
+ if (typeof operation !== "string" || !OPERATIONS.has(operation)) {
71
+ throw deltaError(`${file} operation must be create, update, deprecate, or none`);
72
+ }
73
+ const baseChecksum = raw["base_checksum"];
74
+ if (operation === "create") {
75
+ if (baseChecksum !== null && baseChecksum !== undefined) {
76
+ throw deltaError(`${file} operation create requires base_checksum: null`);
77
+ }
78
+ }
79
+ else if (operation !== "none") {
80
+ if (typeof baseChecksum !== "string" || !CHECKSUM_RE.test(baseChecksum)) {
81
+ throw deltaError(`${file} operation ${operation} requires a sha256 base_checksum`);
82
+ }
83
+ }
84
+ const sections = raw["sections"] ?? [];
85
+ if (!Array.isArray(sections))
86
+ throw deltaError(`${file} sections must be a list`);
87
+ if (operation === "deprecate" && sections.length > 0) {
88
+ throw deltaError(`${file} operation deprecate must have an empty sections list`);
89
+ }
90
+ if (operation === "none" && sections.length > 0) {
91
+ throw deltaError(`${file} operation none must have an empty sections list`);
92
+ }
93
+ const normalizedSections = sections.map((section, index) => {
94
+ if (!isRecord(section)) {
95
+ throw deltaError(`${file} sections[${index}] must be a mapping`);
96
+ }
97
+ const sectionName = section["section"];
98
+ if (typeof sectionName !== "string" || sectionName.length === 0) {
99
+ throw deltaError(`${file} sections[${index}].section must be a non-empty string`);
100
+ }
101
+ const action = section["action"];
102
+ if (typeof action !== "string" || !ACTIONS.has(action)) {
103
+ throw deltaError(`${file} sections[${index}].action ${JSON.stringify(action)} is not supported`);
104
+ }
105
+ if (action === "remove_line") {
106
+ const match = section["match"];
107
+ if (typeof match !== "string" || match.length === 0) {
108
+ throw deltaError(`${file} sections[${index}] remove_line needs a match string`);
109
+ }
110
+ return { section: sectionName, action: "remove_line", match };
111
+ }
112
+ const content = section["content"];
113
+ if (typeof content !== "string") {
114
+ throw deltaError(`${file} sections[${index}] ${action} needs a content string`);
115
+ }
116
+ return { section: sectionName, action: action, content };
117
+ });
118
+ const codePathsTouched = raw["code_paths_touched"] ?? [];
119
+ if (!Array.isArray(codePathsTouched) || codePathsTouched.some((path) => typeof path !== "string" || path.length === 0)) {
120
+ throw deltaError(`${file} code_paths_touched must be a list of non-empty strings`);
121
+ }
122
+ const bump = raw["bump"] ?? "minor";
123
+ if (bump !== "minor" && bump !== "major")
124
+ throw deltaError(`${file} bump must be minor or major`);
125
+ const taskId = raw["task_id"];
126
+ if (taskId !== undefined && (typeof taskId !== "string" || taskId.length === 0)) {
127
+ throw deltaError(`${file} task_id must be a non-empty string`);
128
+ }
129
+ const skill = raw["skill"];
130
+ if (skill !== undefined && (typeof skill !== "string" || skill.length === 0)) {
131
+ throw deltaError(`${file} skill must be a non-empty string`);
132
+ }
133
+ const rationale = raw["rationale"];
134
+ if (rationale !== undefined && typeof rationale !== "string") {
135
+ throw deltaError(`${file} rationale must be a string`);
136
+ }
137
+ const idempotent = raw["idempotent"];
138
+ if (idempotent !== undefined && typeof idempotent !== "boolean") {
139
+ throw deltaError(`${file} idempotent must be true or false`);
140
+ }
141
+ return {
142
+ surface_id: surfaceId,
143
+ operation: operation,
144
+ base_checksum: operation === "create" ? null : (typeof baseChecksum === "string" ? baseChecksum : null),
145
+ sections: normalizedSections,
146
+ code_paths_touched: codePathsTouched,
147
+ rationale: typeof rationale === "string" ? rationale : null,
148
+ task_id: typeof taskId === "string" ? taskId : null,
149
+ skill: typeof skill === "string" ? skill : null,
150
+ idempotent: idempotent === true,
151
+ bump,
152
+ };
153
+ }
154
+ function normalizeContent(lines) {
155
+ return (lines ?? [])
156
+ .map((line) => line.replace(/[ \t]+$/, ""))
157
+ .join("\n")
158
+ .replace(/^\n+/, "")
159
+ .replace(/\n+$/, "");
160
+ }
161
+ function buildBody(sections, kind) {
162
+ const order = canonicalSectionOrder(kind) ?? [];
163
+ return order
164
+ .map((title) => {
165
+ const content = normalizeContent(sections.get(title));
166
+ return content.length > 0 ? `## ${title}\n\n${content}\n` : `## ${title}\n`;
167
+ })
168
+ .join("\n");
169
+ }
170
+ function appendContent(existing, content) {
171
+ const normalized = normalizeContent(content.split("\n"));
172
+ if (existing.length === 0)
173
+ return content;
174
+ if (normalized.length > 0 && existing.endsWith(normalized))
175
+ return existing;
176
+ return `${existing}\n\n${content}`;
177
+ }
178
+ function prependContent(existing, content) {
179
+ const normalized = normalizeContent(content.split("\n"));
180
+ if (existing.length === 0)
181
+ return content;
182
+ if (normalized.length > 0 && existing.startsWith(normalized))
183
+ return existing;
184
+ return `${content}\n\n${existing}`;
185
+ }
186
+ const BULLET_SECTIONS = new Set(["Known gaps", "Change log"]);
187
+ function bulletize(content) {
188
+ return content
189
+ .split("\n")
190
+ .map((line) => {
191
+ const trimmed = line.trim();
192
+ if (trimmed.length === 0)
193
+ return line;
194
+ return trimmed.startsWith("- ") ? line : `- ${trimmed}`;
195
+ })
196
+ .join("\n");
197
+ }
198
+ export function applySectionActions(body, sections, kind) {
199
+ const parsed = parseSections(body);
200
+ const map = new Map([...parsed.sections.entries()].map(([title, lines]) => [title, [...lines]]));
201
+ for (const entry of sections) {
202
+ if (!map.has(entry.section)) {
203
+ throw new ValidationError(`delta names missing section ## ${entry.section}`);
204
+ }
205
+ const current = map.get(entry.section) ?? [];
206
+ const content = BULLET_SECTIONS.has(entry.section) && entry.content !== undefined
207
+ ? bulletize(entry.content)
208
+ : entry.content;
209
+ if (entry.action === "replace") {
210
+ map.set(entry.section, (content ?? "").split("\n"));
211
+ }
212
+ else if (entry.action === "append") {
213
+ const existing = normalizeContent(current);
214
+ map.set(entry.section, appendContent(existing, content ?? "").split("\n"));
215
+ }
216
+ else if (entry.action === "prepend") {
217
+ const existing = normalizeContent(current);
218
+ map.set(entry.section, prependContent(existing, content ?? "").split("\n"));
219
+ }
220
+ else if (entry.action === "remove_line") {
221
+ const index = current.findIndex((line) => line.includes(entry.match ?? ""));
222
+ if (index !== -1)
223
+ current.splice(index, 1);
224
+ }
225
+ }
226
+ if (map.has("Known gaps") && normalizeContent(map.get("Known gaps")).length === 0) {
227
+ map.set("Known gaps", ["- None"]);
228
+ }
229
+ return buildBody(map, kind);
230
+ }
231
+ function bumpVersion(version, bump) {
232
+ const [major = 0, minor = 0] = version.split(".").map((part) => Number.parseInt(part, 10));
233
+ if (bump === "major")
234
+ return `${major + 1}.0.0`;
235
+ return `${major}.${minor + 1}.0`;
236
+ }
237
+ function yamlScalar(value) {
238
+ const text = String(value);
239
+ return SAFE_SCALAR_RE.test(text) ? text : JSON.stringify(text).replace(/"/g, "'");
240
+ }
241
+ function yamlList(key, values) {
242
+ if (!Array.isArray(values) || values.length === 0)
243
+ return [`${key}: []`];
244
+ const lines = [`${key}:`];
245
+ for (const value of values)
246
+ lines.push(` - "${String(value).replace(/"/g, "'")}"`);
247
+ return lines;
248
+ }
249
+ export function renderDesignFile(frontmatter, body) {
250
+ const lines = ["---"];
251
+ lines.push(`surface_id: ${yamlScalar(frontmatter.surface_id)}`);
252
+ if (frontmatter.app)
253
+ lines.push(`app: ${yamlScalar(frontmatter.app)}`);
254
+ lines.push(`kind: ${frontmatter.kind}`);
255
+ lines.push(`status: ${frontmatter.status}`);
256
+ lines.push(`version: ${frontmatter.version}`);
257
+ lines.push(`owner: ${yamlScalar(frontmatter.owner)}`);
258
+ lines.push(...yamlList("code_paths", frontmatter.code_paths));
259
+ lines.push(...yamlList("depends_on", frontmatter.depends_on));
260
+ lines.push(...yamlList("related_tasks", frontmatter.related_tasks));
261
+ lines.push(`last_reviewed: ${frontmatter.last_reviewed}`);
262
+ lines.push(`design_checksum: ${frontmatter.design_checksum ?? ""}`);
263
+ if (frontmatter.last_reviewed_commit)
264
+ lines.push(`last_reviewed_commit: ${frontmatter.last_reviewed_commit}`);
265
+ lines.push("---", "");
266
+ return `${lines.join("\n")}\n${body.endsWith("\n") ? body : `${body}\n`}`;
267
+ }
268
+ export function headCommit(projectRoot, { git = true } = {}) {
269
+ if (!git)
270
+ return null;
271
+ const result = spawnSync("git", ["rev-parse", "HEAD"], {
272
+ cwd: projectRoot,
273
+ encoding: "utf8",
274
+ stdio: ["ignore", "pipe", "ignore"],
275
+ });
276
+ if (result.status !== 0)
277
+ return null;
278
+ const sha = (result.stdout ?? "").trim();
279
+ return /^[0-9a-f]{40}$/.test(sha) ? sha : null;
280
+ }
281
+ function today(now) {
282
+ if (!now)
283
+ return new Date().toISOString().slice(0, 10);
284
+ const value = String(now).slice(0, 10);
285
+ if (!/^\d{4}-\d{2}-\d{2}$/.test(value))
286
+ throw deltaError(`--now must be a YYYY-MM-DD date`);
287
+ return value;
288
+ }
289
+ function changeLogLine({ date, version, operation, rationale, taskId, skill }) {
290
+ const summary = operation === "create"
291
+ ? "Created surface"
292
+ : operation === "deprecate"
293
+ ? "Deprecated surface"
294
+ : (rationale ?? "Updated surface");
295
+ const parts = [date, `v${version}`, String(summary).replace(/\s*\n\s*/g, " ")];
296
+ if (taskId)
297
+ parts.push(`task ${taskId}`);
298
+ if (skill)
299
+ parts.push(skill);
300
+ return `- ${parts.join(" · ")}`;
301
+ }
302
+ function hasChangeLogAction(delta) {
303
+ return delta.sections.some((entry) => entry.section === "Change log");
304
+ }
305
+ async function reject({ stateRoot, projectRoot = null, designRoot = null, delta, reason, code = "invalid_delta", detail = null, }) {
306
+ const journal = await appendDesignEvent({
307
+ stateRoot,
308
+ type: "design_delta_rejected",
309
+ taskId: delta.task_id,
310
+ payload: {
311
+ surface_id: delta.surface_id,
312
+ operation: delta.operation,
313
+ task_id: delta.task_id ?? null,
314
+ skill: delta.skill ?? null,
315
+ reason,
316
+ code,
317
+ detail,
318
+ },
319
+ });
320
+ let reconcile = null;
321
+ if (projectRoot && designRoot && (await exists(join(stateRoot, "journal.ndjson")))) {
322
+ try {
323
+ reconcile = await runReconcile({
324
+ stateRoot,
325
+ projectRoot,
326
+ designRoot,
327
+ trigger: "design_delta_rejected",
328
+ sessionId: "s-design-registry",
329
+ });
330
+ }
331
+ catch {
332
+ // A rejected delta still stands even if the reconcile pass cannot run.
333
+ }
334
+ }
335
+ return {
336
+ ok: false,
337
+ rejected: true,
338
+ surface_id: delta.surface_id,
339
+ reason,
340
+ code,
341
+ journal,
342
+ reconcile: reconcile?.status ?? null,
343
+ };
344
+ }
345
+ export async function applyDelta({ projectRoot, designRoot, stateRoot, deltaPath = null, deltaText = null, now = null, git = true, onWritten = null, }) {
346
+ let delta;
347
+ if (deltaText !== null) {
348
+ delta = parseDeltaText(deltaText, { file: deltaPath ?? "delta" });
349
+ }
350
+ else {
351
+ if (!deltaPath)
352
+ throw deltaError("apply needs a delta path");
353
+ const absolute = resolve(projectRoot, deltaPath);
354
+ const text = await readText(absolute);
355
+ if (text === null)
356
+ throw deltaError(`delta file not found: ${absolute}`);
357
+ delta = parseDeltaText(text, { file: absolute });
358
+ }
359
+ if (delta.operation === "none") {
360
+ return {
361
+ ok: true,
362
+ unchanged: true,
363
+ surface_id: delta.surface_id,
364
+ reason: delta.rationale ?? "no change",
365
+ operation: "none",
366
+ };
367
+ }
368
+ const file = surfacePath(designRoot, delta.surface_id);
369
+ const date = today(now);
370
+ const existing = await exists(file);
371
+ let current = null;
372
+ if (existing) {
373
+ current = await readSurface(designRoot, delta.surface_id);
374
+ if (!current || !current.ok) {
375
+ return reject({
376
+ projectRoot,
377
+ designRoot,
378
+ stateRoot,
379
+ delta,
380
+ reason: `current design file is invalid: ${(current?.errors ?? ["not found"]).join("; ")}`,
381
+ code: "invalid_current_design",
382
+ detail: current?.errors ?? null,
383
+ });
384
+ }
385
+ if (current.frontmatter.status === "deprecated" || current.frontmatter.status === "needs_review") {
386
+ return reject({
387
+ projectRoot,
388
+ designRoot,
389
+ stateRoot,
390
+ delta,
391
+ reason: `cannot apply a delta to a ${current.frontmatter.status} surface`,
392
+ code: "status_guard",
393
+ });
394
+ }
395
+ }
396
+ if (delta.operation === "create") {
397
+ if (existing) {
398
+ return reject({ projectRoot, designRoot, stateRoot, delta, reason: "operation create requires the surface not to exist", code: "surface_exists" });
399
+ }
400
+ }
401
+ else if (!existing) {
402
+ return reject({ projectRoot, designRoot, stateRoot, delta, reason: "surface does not exist", code: "surface_missing" });
403
+ }
404
+ const kind = delta.surface_id.split("/")[0] ?? "";
405
+ let body;
406
+ let frontmatter;
407
+ if (delta.operation === "create") {
408
+ const sections = new Map((requiredSections(kind) ?? []).map((title) => [title, []]));
409
+ sections.set("Known gaps", ["- None"]);
410
+ body = buildBody(sections, kind);
411
+ frontmatter = {
412
+ surface_id: delta.surface_id,
413
+ kind,
414
+ status: "draft",
415
+ version: "0.1.0",
416
+ owner: delta.skill ?? "orchestrator",
417
+ code_paths: [...delta.code_paths_touched],
418
+ depends_on: [],
419
+ related_tasks: delta.task_id ? [delta.task_id] : [],
420
+ last_reviewed: date,
421
+ last_reviewed_commit: headCommit(projectRoot, { git }),
422
+ };
423
+ }
424
+ else if (current) {
425
+ body = current.body;
426
+ frontmatter = { ...current.frontmatter };
427
+ }
428
+ else {
429
+ return reject({ projectRoot, designRoot, stateRoot, delta, reason: "surface does not exist", code: "surface_missing" });
430
+ }
431
+ if (delta.operation === "deprecate") {
432
+ frontmatter.status = "deprecated";
433
+ }
434
+ else if (delta.sections.length > 0) {
435
+ try {
436
+ body = applySectionActions(body, delta.sections, kind);
437
+ }
438
+ catch (error) {
439
+ const detail = isRecord(error) && "detail" in error ? error["detail"] : null;
440
+ return reject({
441
+ projectRoot,
442
+ designRoot,
443
+ stateRoot,
444
+ delta,
445
+ reason: errorMessage(error),
446
+ code: error instanceof DeltaError || error instanceof ValidationError ? error.code : "invalid_delta",
447
+ detail,
448
+ });
449
+ }
450
+ }
451
+ const oldChecksum = current?.checksum ?? null;
452
+ const newChecksum = computeDesignChecksum(body, kind);
453
+ if (delta.operation === "update" && newChecksum === oldChecksum) {
454
+ if (delta.base_checksum !== oldChecksum && !delta.idempotent) {
455
+ return reject({
456
+ projectRoot,
457
+ designRoot,
458
+ stateRoot,
459
+ delta,
460
+ reason: "base_checksum does not match the current design_checksum",
461
+ code: "stale_base_checksum",
462
+ detail: { base_checksum: delta.base_checksum, current_checksum: oldChecksum },
463
+ });
464
+ }
465
+ return {
466
+ ok: true,
467
+ unchanged: true,
468
+ surface_id: delta.surface_id,
469
+ reason: "delta is already applied",
470
+ operation: delta.operation,
471
+ checksum: oldChecksum,
472
+ };
473
+ }
474
+ if (delta.operation !== "create" && delta.base_checksum !== oldChecksum) {
475
+ return reject({
476
+ projectRoot,
477
+ designRoot,
478
+ stateRoot,
479
+ delta,
480
+ reason: "base_checksum does not match the current design_checksum",
481
+ code: "stale_base_checksum",
482
+ detail: { base_checksum: delta.base_checksum, current_checksum: oldChecksum },
483
+ });
484
+ }
485
+ frontmatter.version = delta.operation === "create"
486
+ ? "0.1.0"
487
+ : bumpVersion(frontmatter.version, delta.bump);
488
+ frontmatter.last_reviewed = date;
489
+ frontmatter.last_reviewed_commit = headCommit(projectRoot, { git });
490
+ if (delta.task_id && !(frontmatter.related_tasks ?? []).includes(delta.task_id)) {
491
+ frontmatter.related_tasks = [...(frontmatter.related_tasks ?? []), delta.task_id];
492
+ }
493
+ if (!hasChangeLogAction(delta)) {
494
+ const line = changeLogLine({
495
+ date,
496
+ version: frontmatter.version,
497
+ operation: delta.operation,
498
+ rationale: delta.rationale,
499
+ taskId: delta.task_id,
500
+ skill: delta.skill,
501
+ });
502
+ body = applySectionActions(body, [{ section: "Change log", action: "append", content: line }], kind);
503
+ }
504
+ frontmatter.design_checksum = computeDesignChecksum(body, kind);
505
+ const text = renderDesignFile(frontmatter, body);
506
+ const validated = validateDesignText(text, { file, designRoot, requireChecksum: true });
507
+ if (!validated.ok) {
508
+ return reject({
509
+ projectRoot,
510
+ designRoot,
511
+ stateRoot,
512
+ delta,
513
+ reason: `resulting design file is invalid: ${validated.errors.join("; ")}`,
514
+ code: "invalid_result",
515
+ detail: validated.errors,
516
+ });
517
+ }
518
+ await atomicWriteText(file, text);
519
+ const journal = await appendDesignEvent({
520
+ stateRoot,
521
+ type: "design_update",
522
+ payload: {
523
+ surface_id: delta.surface_id,
524
+ operation: delta.operation,
525
+ version: frontmatter.version,
526
+ checksum: frontmatter.design_checksum,
527
+ previous_checksum: oldChecksum,
528
+ task_id: delta.task_id ?? null,
529
+ skill: delta.skill ?? null,
530
+ rationale: delta.rationale,
531
+ },
532
+ });
533
+ let index;
534
+ if (onWritten) {
535
+ index = await onWritten({ designRoot, surfaceId: delta.surface_id });
536
+ }
537
+ else {
538
+ const generated = await writeIndex({ designRoot });
539
+ index = { path: generated.path, generatedAt: generated.generatedAt };
540
+ }
541
+ return {
542
+ ok: true,
543
+ unchanged: false,
544
+ surface_id: delta.surface_id,
545
+ operation: delta.operation,
546
+ version: frontmatter.version,
547
+ checksum: frontmatter.design_checksum,
548
+ previous_checksum: oldChecksum,
549
+ file,
550
+ journal,
551
+ index,
552
+ };
553
+ }
554
+ export function deltaPathFor(projectRoot, relative) {
555
+ return join(projectRoot, relative);
556
+ }
557
+ //# sourceMappingURL=delta.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delta.js","sourceRoot":"","sources":["../../src/design/delta.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import type { CodeDriftFlag, CoverageReport, DependencyDriftFlag, DriftReport } from "../types/design.js";
2
+ export declare function globToRegExp(pattern: unknown): RegExp;
3
+ export declare function matchesAny(path: string, patterns: readonly string[] | null | undefined): boolean;
4
+ export declare function listProjectFiles(projectRoot: string): Promise<string[]>;
5
+ export interface CodeDriftInput {
6
+ readonly designRoot: string;
7
+ readonly projectRoot: string;
8
+ readonly git?: boolean;
9
+ }
10
+ export declare function detectCodeDrift({ designRoot, projectRoot, git }: CodeDriftInput): Promise<CodeDriftFlag[]>;
11
+ export declare function detectDependencyDrift({ designRoot }: {
12
+ readonly designRoot: string;
13
+ }): Promise<DependencyDriftFlag[]>;
14
+ export declare function readBootstrapFlag(designRoot: string): Promise<boolean>;
15
+ export interface CoverageInput {
16
+ readonly designRoot: string;
17
+ readonly projectRoot: string;
18
+ }
19
+ export declare function detectCoverage({ designRoot, projectRoot }: CoverageInput): Promise<CoverageReport>;
20
+ export interface RunDriftInput {
21
+ readonly designRoot: string;
22
+ readonly projectRoot: string;
23
+ readonly git?: boolean;
24
+ }
25
+ export declare function runDrift({ designRoot, projectRoot, git }: RunDriftInput): Promise<DriftReport>;
26
+ //# sourceMappingURL=drift.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"drift.d.ts","sourceRoot":"","sources":["../../src/design/drift.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EACV,aAAa,EACb,cAAc,EACd,mBAAmB,EAEnB,WAAW,EACZ,MAAM,oBAAoB,CAAC;AAgD5B,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAoCrD;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAQhG;AAkBD,wBAAsB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAK7E;AA0ED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,wBAAsB,eAAe,CAAC,EAAE,UAAU,EAAE,WAAW,EAAE,GAAU,EAAE,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAwBvH;AAwBD,wBAAsB,qBAAqB,CAAC,EAAE,UAAU,EAAE,EAAE;IAAE,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC,CA6B3H;AAED,wBAAsB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAM5E;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAED,wBAAsB,cAAc,CAAC,EAAE,UAAU,EAAE,WAAW,EAAE,EAAE,aAAa,GAAG,OAAO,CAAC,cAAc,CAAC,CAgCxG;AAOD,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,wBAAsB,QAAQ,CAAC,EAAE,UAAU,EAAE,WAAW,EAAE,GAAU,EAAE,EAAE,aAAa,GAAG,OAAO,CAAC,WAAW,CAAC,CAW3G"}