@prodara/compiler 0.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 (494) hide show
  1. package/README.md +204 -0
  2. package/dist/agent/agent.d.ts +10 -0
  3. package/dist/agent/agent.d.ts.map +1 -0
  4. package/dist/agent/agent.js +122 -0
  5. package/dist/agent/agent.js.map +1 -0
  6. package/dist/agent/api-client.d.ts +29 -0
  7. package/dist/agent/api-client.d.ts.map +1 -0
  8. package/dist/agent/api-client.js +167 -0
  9. package/dist/agent/api-client.js.map +1 -0
  10. package/dist/agent/index.d.ts +5 -0
  11. package/dist/agent/index.d.ts.map +1 -0
  12. package/dist/agent/index.js +3 -0
  13. package/dist/agent/index.js.map +1 -0
  14. package/dist/agent/party.d.ts +48 -0
  15. package/dist/agent/party.d.ts.map +1 -0
  16. package/dist/agent/party.js +79 -0
  17. package/dist/agent/party.js.map +1 -0
  18. package/dist/agent/types.d.ts +35 -0
  19. package/dist/agent/types.d.ts.map +1 -0
  20. package/dist/agent/types.js +5 -0
  21. package/dist/agent/types.js.map +1 -0
  22. package/dist/audit/audit.d.ts +32 -0
  23. package/dist/audit/audit.d.ts.map +1 -0
  24. package/dist/audit/audit.js +120 -0
  25. package/dist/audit/audit.js.map +1 -0
  26. package/dist/audit/index.d.ts +3 -0
  27. package/dist/audit/index.d.ts.map +1 -0
  28. package/dist/audit/index.js +2 -0
  29. package/dist/audit/index.js.map +1 -0
  30. package/dist/audit/types.d.ts +25 -0
  31. package/dist/audit/types.d.ts.map +1 -0
  32. package/dist/audit/types.js +5 -0
  33. package/dist/audit/types.js.map +1 -0
  34. package/dist/binder/binder.d.ts +34 -0
  35. package/dist/binder/binder.d.ts.map +1 -0
  36. package/dist/binder/binder.js +202 -0
  37. package/dist/binder/binder.js.map +1 -0
  38. package/dist/binder/index.d.ts +3 -0
  39. package/dist/binder/index.d.ts.map +1 -0
  40. package/dist/binder/index.js +2 -0
  41. package/dist/binder/index.js.map +1 -0
  42. package/dist/build-state/build-state.d.ts +40 -0
  43. package/dist/build-state/build-state.d.ts.map +1 -0
  44. package/dist/build-state/build-state.js +180 -0
  45. package/dist/build-state/build-state.js.map +1 -0
  46. package/dist/build-state/index.d.ts +3 -0
  47. package/dist/build-state/index.d.ts.map +1 -0
  48. package/dist/build-state/index.js +2 -0
  49. package/dist/build-state/index.js.map +1 -0
  50. package/dist/checker/index.d.ts +5 -0
  51. package/dist/checker/index.d.ts.map +1 -0
  52. package/dist/checker/index.js +3 -0
  53. package/dist/checker/index.js.map +1 -0
  54. package/dist/checker/type-checker.d.ts +8 -0
  55. package/dist/checker/type-checker.d.ts.map +1 -0
  56. package/dist/checker/type-checker.js +136 -0
  57. package/dist/checker/type-checker.js.map +1 -0
  58. package/dist/checker/validator.d.ts +8 -0
  59. package/dist/checker/validator.d.ts.map +1 -0
  60. package/dist/checker/validator.js +251 -0
  61. package/dist/checker/validator.js.map +1 -0
  62. package/dist/cli/agent-setup.d.ts +27 -0
  63. package/dist/cli/agent-setup.d.ts.map +1 -0
  64. package/dist/cli/agent-setup.js +829 -0
  65. package/dist/cli/agent-setup.js.map +1 -0
  66. package/dist/cli/analyze.d.ts +28 -0
  67. package/dist/cli/analyze.d.ts.map +1 -0
  68. package/dist/cli/analyze.js +188 -0
  69. package/dist/cli/analyze.js.map +1 -0
  70. package/dist/cli/checklist.d.ts +27 -0
  71. package/dist/cli/checklist.d.ts.map +1 -0
  72. package/dist/cli/checklist.js +153 -0
  73. package/dist/cli/checklist.js.map +1 -0
  74. package/dist/cli/compile.d.ts +26 -0
  75. package/dist/cli/compile.d.ts.map +1 -0
  76. package/dist/cli/compile.js +112 -0
  77. package/dist/cli/compile.js.map +1 -0
  78. package/dist/cli/dashboard.d.ts +19 -0
  79. package/dist/cli/dashboard.d.ts.map +1 -0
  80. package/dist/cli/dashboard.js +73 -0
  81. package/dist/cli/dashboard.js.map +1 -0
  82. package/dist/cli/explain.d.ts +23 -0
  83. package/dist/cli/explain.d.ts.map +1 -0
  84. package/dist/cli/explain.js +144 -0
  85. package/dist/cli/explain.js.map +1 -0
  86. package/dist/cli/git.d.ts +14 -0
  87. package/dist/cli/git.d.ts.map +1 -0
  88. package/dist/cli/git.js +44 -0
  89. package/dist/cli/git.js.map +1 -0
  90. package/dist/cli/lifecycle.d.ts +28 -0
  91. package/dist/cli/lifecycle.d.ts.map +1 -0
  92. package/dist/cli/lifecycle.js +82 -0
  93. package/dist/cli/lifecycle.js.map +1 -0
  94. package/dist/cli/main.d.ts +10 -0
  95. package/dist/cli/main.d.ts.map +1 -0
  96. package/dist/cli/main.js +1072 -0
  97. package/dist/cli/main.js.map +1 -0
  98. package/dist/cli/notify.d.ts +13 -0
  99. package/dist/cli/notify.d.ts.map +1 -0
  100. package/dist/cli/notify.js +36 -0
  101. package/dist/cli/notify.js.map +1 -0
  102. package/dist/cli/starters.d.ts +12 -0
  103. package/dist/cli/starters.d.ts.map +1 -0
  104. package/dist/cli/starters.js +439 -0
  105. package/dist/cli/starters.js.map +1 -0
  106. package/dist/config/config.d.ts +194 -0
  107. package/dist/config/config.d.ts.map +1 -0
  108. package/dist/config/config.js +434 -0
  109. package/dist/config/config.js.map +1 -0
  110. package/dist/config/index.d.ts +3 -0
  111. package/dist/config/index.d.ts.map +1 -0
  112. package/dist/config/index.js +5 -0
  113. package/dist/config/index.js.map +1 -0
  114. package/dist/diagnostics/diagnostic.d.ts +44 -0
  115. package/dist/diagnostics/diagnostic.d.ts.map +1 -0
  116. package/dist/diagnostics/diagnostic.js +44 -0
  117. package/dist/diagnostics/diagnostic.js.map +1 -0
  118. package/dist/diagnostics/index.d.ts +4 -0
  119. package/dist/diagnostics/index.d.ts.map +1 -0
  120. package/dist/diagnostics/index.js +3 -0
  121. package/dist/diagnostics/index.js.map +1 -0
  122. package/dist/diagnostics/reporter.d.ts +43 -0
  123. package/dist/diagnostics/reporter.d.ts.map +1 -0
  124. package/dist/diagnostics/reporter.js +74 -0
  125. package/dist/diagnostics/reporter.js.map +1 -0
  126. package/dist/discovery/discovery.d.ts +6 -0
  127. package/dist/discovery/discovery.d.ts.map +1 -0
  128. package/dist/discovery/discovery.js +66 -0
  129. package/dist/discovery/discovery.js.map +1 -0
  130. package/dist/discovery/index.d.ts +2 -0
  131. package/dist/discovery/index.d.ts.map +1 -0
  132. package/dist/discovery/index.js +2 -0
  133. package/dist/discovery/index.js.map +1 -0
  134. package/dist/doc-gen/doc-gen-types.d.ts +174 -0
  135. package/dist/doc-gen/doc-gen-types.d.ts.map +1 -0
  136. package/dist/doc-gen/doc-gen-types.js +7 -0
  137. package/dist/doc-gen/doc-gen-types.js.map +1 -0
  138. package/dist/doc-gen/doc-renderer.d.ts +17 -0
  139. package/dist/doc-gen/doc-renderer.d.ts.map +1 -0
  140. package/dist/doc-gen/doc-renderer.js +65 -0
  141. package/dist/doc-gen/doc-renderer.js.map +1 -0
  142. package/dist/doc-gen/format-helpers.d.ts +18 -0
  143. package/dist/doc-gen/format-helpers.d.ts.map +1 -0
  144. package/dist/doc-gen/format-helpers.js +92 -0
  145. package/dist/doc-gen/format-helpers.js.map +1 -0
  146. package/dist/doc-gen/index.d.ts +5 -0
  147. package/dist/doc-gen/index.d.ts.map +1 -0
  148. package/dist/doc-gen/index.js +5 -0
  149. package/dist/doc-gen/index.js.map +1 -0
  150. package/dist/doc-gen/link-resolver.d.ts +10 -0
  151. package/dist/doc-gen/link-resolver.d.ts.map +1 -0
  152. package/dist/doc-gen/link-resolver.js +87 -0
  153. package/dist/doc-gen/link-resolver.js.map +1 -0
  154. package/dist/doc-gen/mermaid-renderers.d.ts +12 -0
  155. package/dist/doc-gen/mermaid-renderers.d.ts.map +1 -0
  156. package/dist/doc-gen/mermaid-renderers.js +197 -0
  157. package/dist/doc-gen/mermaid-renderers.js.map +1 -0
  158. package/dist/doc-gen/module-renderer.d.ts +6 -0
  159. package/dist/doc-gen/module-renderer.d.ts.map +1 -0
  160. package/dist/doc-gen/module-renderer.js +54 -0
  161. package/dist/doc-gen/module-renderer.js.map +1 -0
  162. package/dist/doc-gen/product-renderer.d.ts +6 -0
  163. package/dist/doc-gen/product-renderer.d.ts.map +1 -0
  164. package/dist/doc-gen/product-renderer.js +101 -0
  165. package/dist/doc-gen/product-renderer.js.map +1 -0
  166. package/dist/doc-gen/section-renderers.d.ts +20 -0
  167. package/dist/doc-gen/section-renderers.d.ts.map +1 -0
  168. package/dist/doc-gen/section-renderers.js +357 -0
  169. package/dist/doc-gen/section-renderers.js.map +1 -0
  170. package/dist/doc-gen/string-resolver.d.ts +8 -0
  171. package/dist/doc-gen/string-resolver.d.ts.map +1 -0
  172. package/dist/doc-gen/string-resolver.js +47 -0
  173. package/dist/doc-gen/string-resolver.js.map +1 -0
  174. package/dist/doc-gen/surface-ascii.d.ts +7 -0
  175. package/dist/doc-gen/surface-ascii.d.ts.map +1 -0
  176. package/dist/doc-gen/surface-ascii.js +87 -0
  177. package/dist/doc-gen/surface-ascii.js.map +1 -0
  178. package/dist/drift/drift.d.ts +16 -0
  179. package/dist/drift/drift.d.ts.map +1 -0
  180. package/dist/drift/drift.js +149 -0
  181. package/dist/drift/drift.js.map +1 -0
  182. package/dist/drift/index.d.ts +3 -0
  183. package/dist/drift/index.d.ts.map +1 -0
  184. package/dist/drift/index.js +2 -0
  185. package/dist/drift/index.js.map +1 -0
  186. package/dist/extensions/index.d.ts +6 -0
  187. package/dist/extensions/index.d.ts.map +1 -0
  188. package/dist/extensions/index.js +7 -0
  189. package/dist/extensions/index.js.map +1 -0
  190. package/dist/extensions/loader.d.ts +21 -0
  191. package/dist/extensions/loader.d.ts.map +1 -0
  192. package/dist/extensions/loader.js +101 -0
  193. package/dist/extensions/loader.js.map +1 -0
  194. package/dist/extensions/marketplace.d.ts +22 -0
  195. package/dist/extensions/marketplace.d.ts.map +1 -0
  196. package/dist/extensions/marketplace.js +40 -0
  197. package/dist/extensions/marketplace.js.map +1 -0
  198. package/dist/extensions/registry.d.ts +45 -0
  199. package/dist/extensions/registry.d.ts.map +1 -0
  200. package/dist/extensions/registry.js +82 -0
  201. package/dist/extensions/registry.js.map +1 -0
  202. package/dist/extensions/types.d.ts +41 -0
  203. package/dist/extensions/types.d.ts.map +1 -0
  204. package/dist/extensions/types.js +5 -0
  205. package/dist/extensions/types.js.map +1 -0
  206. package/dist/generator/contracts.d.ts +67 -0
  207. package/dist/generator/contracts.d.ts.map +1 -0
  208. package/dist/generator/contracts.js +94 -0
  209. package/dist/generator/contracts.js.map +1 -0
  210. package/dist/generator/index.d.ts +3 -0
  211. package/dist/generator/index.d.ts.map +1 -0
  212. package/dist/generator/index.js +2 -0
  213. package/dist/generator/index.js.map +1 -0
  214. package/dist/governance/governance.d.ts +24 -0
  215. package/dist/governance/governance.d.ts.map +1 -0
  216. package/dist/governance/governance.js +238 -0
  217. package/dist/governance/governance.js.map +1 -0
  218. package/dist/governance/index.d.ts +3 -0
  219. package/dist/governance/index.d.ts.map +1 -0
  220. package/dist/governance/index.js +2 -0
  221. package/dist/governance/index.js.map +1 -0
  222. package/dist/governance/types.d.ts +14 -0
  223. package/dist/governance/types.d.ts.map +1 -0
  224. package/dist/governance/types.js +5 -0
  225. package/dist/governance/types.js.map +1 -0
  226. package/dist/graph/builder.d.ts +10 -0
  227. package/dist/graph/builder.d.ts.map +1 -0
  228. package/dist/graph/builder.js +573 -0
  229. package/dist/graph/builder.js.map +1 -0
  230. package/dist/graph/graph-types.d.ts +64 -0
  231. package/dist/graph/graph-types.d.ts.map +1 -0
  232. package/dist/graph/graph-types.js +29 -0
  233. package/dist/graph/graph-types.js.map +1 -0
  234. package/dist/graph/index.d.ts +8 -0
  235. package/dist/graph/index.d.ts.map +1 -0
  236. package/dist/graph/index.js +5 -0
  237. package/dist/graph/index.js.map +1 -0
  238. package/dist/graph/serializer.d.ts +9 -0
  239. package/dist/graph/serializer.d.ts.map +1 -0
  240. package/dist/graph/serializer.js +31 -0
  241. package/dist/graph/serializer.js.map +1 -0
  242. package/dist/graph/validator.d.ts +14 -0
  243. package/dist/graph/validator.d.ts.map +1 -0
  244. package/dist/graph/validator.js +96 -0
  245. package/dist/graph/validator.js.map +1 -0
  246. package/dist/implement/implement.d.ts +30 -0
  247. package/dist/implement/implement.d.ts.map +1 -0
  248. package/dist/implement/implement.js +299 -0
  249. package/dist/implement/implement.js.map +1 -0
  250. package/dist/implement/index.d.ts +3 -0
  251. package/dist/implement/index.d.ts.map +1 -0
  252. package/dist/implement/index.js +2 -0
  253. package/dist/implement/index.js.map +1 -0
  254. package/dist/implement/types.d.ts +41 -0
  255. package/dist/implement/types.d.ts.map +1 -0
  256. package/dist/implement/types.js +5 -0
  257. package/dist/implement/types.js.map +1 -0
  258. package/dist/incremental/incremental-spec.d.ts +12 -0
  259. package/dist/incremental/incremental-spec.d.ts.map +1 -0
  260. package/dist/incremental/incremental-spec.js +100 -0
  261. package/dist/incremental/incremental-spec.js.map +1 -0
  262. package/dist/incremental/index.d.ts +3 -0
  263. package/dist/incremental/index.d.ts.map +1 -0
  264. package/dist/incremental/index.js +5 -0
  265. package/dist/incremental/index.js.map +1 -0
  266. package/dist/incremental/types.d.ts +28 -0
  267. package/dist/incremental/types.d.ts.map +1 -0
  268. package/dist/incremental/types.js +7 -0
  269. package/dist/incremental/types.js.map +1 -0
  270. package/dist/index.d.ts +106 -0
  271. package/dist/index.d.ts.map +1 -0
  272. package/dist/index.js +106 -0
  273. package/dist/index.js.map +1 -0
  274. package/dist/lexer/index.d.ts +6 -0
  275. package/dist/lexer/index.d.ts.map +1 -0
  276. package/dist/lexer/index.js +5 -0
  277. package/dist/lexer/index.js.map +1 -0
  278. package/dist/lexer/keywords.d.ts +3 -0
  279. package/dist/lexer/keywords.d.ts.map +1 -0
  280. package/dist/lexer/keywords.js +142 -0
  281. package/dist/lexer/keywords.js.map +1 -0
  282. package/dist/lexer/lexer.d.ts +19 -0
  283. package/dist/lexer/lexer.d.ts.map +1 -0
  284. package/dist/lexer/lexer.js +286 -0
  285. package/dist/lexer/lexer.js.map +1 -0
  286. package/dist/lexer/source.d.ts +13 -0
  287. package/dist/lexer/source.d.ts.map +1 -0
  288. package/dist/lexer/source.js +59 -0
  289. package/dist/lexer/source.js.map +1 -0
  290. package/dist/lexer/tokens.d.ts +157 -0
  291. package/dist/lexer/tokens.d.ts.map +1 -0
  292. package/dist/lexer/tokens.js +173 -0
  293. package/dist/lexer/tokens.js.map +1 -0
  294. package/dist/orchestrator/index.d.ts +5 -0
  295. package/dist/orchestrator/index.d.ts.map +1 -0
  296. package/dist/orchestrator/index.js +3 -0
  297. package/dist/orchestrator/index.js.map +1 -0
  298. package/dist/orchestrator/orchestrator.d.ts +14 -0
  299. package/dist/orchestrator/orchestrator.d.ts.map +1 -0
  300. package/dist/orchestrator/orchestrator.js +129 -0
  301. package/dist/orchestrator/orchestrator.js.map +1 -0
  302. package/dist/orchestrator/pipeline.d.ts +31 -0
  303. package/dist/orchestrator/pipeline.d.ts.map +1 -0
  304. package/dist/orchestrator/pipeline.js +290 -0
  305. package/dist/orchestrator/pipeline.js.map +1 -0
  306. package/dist/orchestrator/types.d.ts +60 -0
  307. package/dist/orchestrator/types.d.ts.map +1 -0
  308. package/dist/orchestrator/types.js +8 -0
  309. package/dist/orchestrator/types.js.map +1 -0
  310. package/dist/parser/ast.d.ts +502 -0
  311. package/dist/parser/ast.d.ts.map +1 -0
  312. package/dist/parser/ast.js +7 -0
  313. package/dist/parser/ast.js.map +1 -0
  314. package/dist/parser/expressions.d.ts +18 -0
  315. package/dist/parser/expressions.d.ts.map +1 -0
  316. package/dist/parser/expressions.js +230 -0
  317. package/dist/parser/expressions.js.map +1 -0
  318. package/dist/parser/index.d.ts +4 -0
  319. package/dist/parser/index.d.ts.map +1 -0
  320. package/dist/parser/index.js +2 -0
  321. package/dist/parser/index.js.map +1 -0
  322. package/dist/parser/parser.d.ts +83 -0
  323. package/dist/parser/parser.d.ts.map +1 -0
  324. package/dist/parser/parser.js +2149 -0
  325. package/dist/parser/parser.js.map +1 -0
  326. package/dist/planner/differ.d.ts +4 -0
  327. package/dist/planner/differ.d.ts.map +1 -0
  328. package/dist/planner/differ.js +96 -0
  329. package/dist/planner/differ.js.map +1 -0
  330. package/dist/planner/index.d.ts +7 -0
  331. package/dist/planner/index.d.ts.map +1 -0
  332. package/dist/planner/index.js +5 -0
  333. package/dist/planner/index.js.map +1 -0
  334. package/dist/planner/plan-types.d.ts +26 -0
  335. package/dist/planner/plan-types.d.ts.map +1 -0
  336. package/dist/planner/plan-types.js +5 -0
  337. package/dist/planner/plan-types.js.map +1 -0
  338. package/dist/planner/planner.d.ts +8 -0
  339. package/dist/planner/planner.d.ts.map +1 -0
  340. package/dist/planner/planner.js +83 -0
  341. package/dist/planner/planner.js.map +1 -0
  342. package/dist/planner/propagator.d.ts +4 -0
  343. package/dist/planner/propagator.d.ts.map +1 -0
  344. package/dist/planner/propagator.js +45 -0
  345. package/dist/planner/propagator.js.map +1 -0
  346. package/dist/planner/semantic-diff.d.ts +27 -0
  347. package/dist/planner/semantic-diff.d.ts.map +1 -0
  348. package/dist/planner/semantic-diff.js +253 -0
  349. package/dist/planner/semantic-diff.js.map +1 -0
  350. package/dist/presets/index.d.ts +3 -0
  351. package/dist/presets/index.d.ts.map +1 -0
  352. package/dist/presets/index.js +5 -0
  353. package/dist/presets/index.js.map +1 -0
  354. package/dist/presets/loader.d.ts +28 -0
  355. package/dist/presets/loader.d.ts.map +1 -0
  356. package/dist/presets/loader.js +99 -0
  357. package/dist/presets/loader.js.map +1 -0
  358. package/dist/presets/types.d.ts +21 -0
  359. package/dist/presets/types.d.ts.map +1 -0
  360. package/dist/presets/types.js +5 -0
  361. package/dist/presets/types.js.map +1 -0
  362. package/dist/proposal/index.d.ts +3 -0
  363. package/dist/proposal/index.d.ts.map +1 -0
  364. package/dist/proposal/index.js +7 -0
  365. package/dist/proposal/index.js.map +1 -0
  366. package/dist/proposal/proposal.d.ts +9 -0
  367. package/dist/proposal/proposal.d.ts.map +1 -0
  368. package/dist/proposal/proposal.js +169 -0
  369. package/dist/proposal/proposal.js.map +1 -0
  370. package/dist/proposal/types.d.ts +15 -0
  371. package/dist/proposal/types.d.ts.map +1 -0
  372. package/dist/proposal/types.js +5 -0
  373. package/dist/proposal/types.js.map +1 -0
  374. package/dist/registry/index.d.ts +3 -0
  375. package/dist/registry/index.d.ts.map +1 -0
  376. package/dist/registry/index.js +2 -0
  377. package/dist/registry/index.js.map +1 -0
  378. package/dist/registry/resolution.d.ts +39 -0
  379. package/dist/registry/resolution.d.ts.map +1 -0
  380. package/dist/registry/resolution.js +70 -0
  381. package/dist/registry/resolution.js.map +1 -0
  382. package/dist/reviewers/adversarial.d.ts +3 -0
  383. package/dist/reviewers/adversarial.d.ts.map +1 -0
  384. package/dist/reviewers/adversarial.js +111 -0
  385. package/dist/reviewers/adversarial.js.map +1 -0
  386. package/dist/reviewers/architecture.d.ts +3 -0
  387. package/dist/reviewers/architecture.d.ts.map +1 -0
  388. package/dist/reviewers/architecture.js +71 -0
  389. package/dist/reviewers/architecture.js.map +1 -0
  390. package/dist/reviewers/code-quality.d.ts +3 -0
  391. package/dist/reviewers/code-quality.d.ts.map +1 -0
  392. package/dist/reviewers/code-quality.js +72 -0
  393. package/dist/reviewers/code-quality.js.map +1 -0
  394. package/dist/reviewers/edge-case.d.ts +3 -0
  395. package/dist/reviewers/edge-case.d.ts.map +1 -0
  396. package/dist/reviewers/edge-case.js +107 -0
  397. package/dist/reviewers/edge-case.js.map +1 -0
  398. package/dist/reviewers/index.d.ts +21 -0
  399. package/dist/reviewers/index.d.ts.map +1 -0
  400. package/dist/reviewers/index.js +39 -0
  401. package/dist/reviewers/index.js.map +1 -0
  402. package/dist/reviewers/prompt-loader.d.ts +24 -0
  403. package/dist/reviewers/prompt-loader.d.ts.map +1 -0
  404. package/dist/reviewers/prompt-loader.js +67 -0
  405. package/dist/reviewers/prompt-loader.js.map +1 -0
  406. package/dist/reviewers/quality.d.ts +3 -0
  407. package/dist/reviewers/quality.d.ts.map +1 -0
  408. package/dist/reviewers/quality.js +76 -0
  409. package/dist/reviewers/quality.js.map +1 -0
  410. package/dist/reviewers/reviewer.d.ts +39 -0
  411. package/dist/reviewers/reviewer.d.ts.map +1 -0
  412. package/dist/reviewers/reviewer.js +149 -0
  413. package/dist/reviewers/reviewer.js.map +1 -0
  414. package/dist/reviewers/security.d.ts +3 -0
  415. package/dist/reviewers/security.d.ts.map +1 -0
  416. package/dist/reviewers/security.js +87 -0
  417. package/dist/reviewers/security.js.map +1 -0
  418. package/dist/reviewers/specification.d.ts +3 -0
  419. package/dist/reviewers/specification.d.ts.map +1 -0
  420. package/dist/reviewers/specification.js +79 -0
  421. package/dist/reviewers/specification.js.map +1 -0
  422. package/dist/reviewers/test-quality.d.ts +3 -0
  423. package/dist/reviewers/test-quality.d.ts.map +1 -0
  424. package/dist/reviewers/test-quality.js +88 -0
  425. package/dist/reviewers/test-quality.js.map +1 -0
  426. package/dist/reviewers/types.d.ts +32 -0
  427. package/dist/reviewers/types.d.ts.map +1 -0
  428. package/dist/reviewers/types.js +5 -0
  429. package/dist/reviewers/types.js.map +1 -0
  430. package/dist/reviewers/ux.d.ts +3 -0
  431. package/dist/reviewers/ux.d.ts.map +1 -0
  432. package/dist/reviewers/ux.js +94 -0
  433. package/dist/reviewers/ux.js.map +1 -0
  434. package/dist/runtime/index.d.ts +3 -0
  435. package/dist/runtime/index.d.ts.map +1 -0
  436. package/dist/runtime/index.js +2 -0
  437. package/dist/runtime/index.js.map +1 -0
  438. package/dist/runtime/resolution.d.ts +30 -0
  439. package/dist/runtime/resolution.d.ts.map +1 -0
  440. package/dist/runtime/resolution.js +59 -0
  441. package/dist/runtime/resolution.js.map +1 -0
  442. package/dist/testing/index.d.ts +3 -0
  443. package/dist/testing/index.d.ts.map +1 -0
  444. package/dist/testing/index.js +2 -0
  445. package/dist/testing/index.js.map +1 -0
  446. package/dist/testing/test-runner.d.ts +18 -0
  447. package/dist/testing/test-runner.d.ts.map +1 -0
  448. package/dist/testing/test-runner.js +131 -0
  449. package/dist/testing/test-runner.js.map +1 -0
  450. package/dist/types.d.ts +36 -0
  451. package/dist/types.d.ts.map +1 -0
  452. package/dist/types.js +127 -0
  453. package/dist/types.js.map +1 -0
  454. package/dist/validation/index.d.ts +3 -0
  455. package/dist/validation/index.d.ts.map +1 -0
  456. package/dist/validation/index.js +2 -0
  457. package/dist/validation/index.js.map +1 -0
  458. package/dist/validation/types.d.ts +16 -0
  459. package/dist/validation/types.d.ts.map +1 -0
  460. package/dist/validation/types.js +5 -0
  461. package/dist/validation/types.js.map +1 -0
  462. package/dist/validation/validation.d.ts +8 -0
  463. package/dist/validation/validation.d.ts.map +1 -0
  464. package/dist/validation/validation.js +101 -0
  465. package/dist/validation/validation.js.map +1 -0
  466. package/dist/verification/index.d.ts +3 -0
  467. package/dist/verification/index.d.ts.map +1 -0
  468. package/dist/verification/index.js +5 -0
  469. package/dist/verification/index.js.map +1 -0
  470. package/dist/verification/types.d.ts +14 -0
  471. package/dist/verification/types.d.ts.map +1 -0
  472. package/dist/verification/types.js +5 -0
  473. package/dist/verification/types.js.map +1 -0
  474. package/dist/verification/verify.d.ts +7 -0
  475. package/dist/verification/verify.d.ts.map +1 -0
  476. package/dist/verification/verify.js +127 -0
  477. package/dist/verification/verify.js.map +1 -0
  478. package/dist/workflow/clarify.d.ts +7 -0
  479. package/dist/workflow/clarify.d.ts.map +1 -0
  480. package/dist/workflow/clarify.js +165 -0
  481. package/dist/workflow/clarify.js.map +1 -0
  482. package/dist/workflow/engine.d.ts +19 -0
  483. package/dist/workflow/engine.d.ts.map +1 -0
  484. package/dist/workflow/engine.js +265 -0
  485. package/dist/workflow/engine.js.map +1 -0
  486. package/dist/workflow/index.d.ts +6 -0
  487. package/dist/workflow/index.d.ts.map +1 -0
  488. package/dist/workflow/index.js +7 -0
  489. package/dist/workflow/index.js.map +1 -0
  490. package/dist/workflow/types.d.ts +95 -0
  491. package/dist/workflow/types.d.ts.map +1 -0
  492. package/dist/workflow/types.js +18 -0
  493. package/dist/workflow/types.js.map +1 -0
  494. package/package.json +63 -0
@@ -0,0 +1,169 @@
1
+ // ---------------------------------------------------------------------------
2
+ // Prodara Compiler — Proposal Operations
3
+ // ---------------------------------------------------------------------------
4
+ // Core logic for creating, listing, applying, and archiving change proposals.
5
+ import { existsSync, mkdirSync, writeFileSync, readFileSync, readdirSync, renameSync } from 'node:fs';
6
+ import { join } from 'node:path';
7
+ export const CHANGES_DIR = '.prodara/changes';
8
+ export const ARCHIVE_DIR = '.prodara/changes/archive';
9
+ // ---------------------------------------------------------------------------
10
+ // Create
11
+ // ---------------------------------------------------------------------------
12
+ export function createProposal(description, root) {
13
+ const name = slugify(description);
14
+ const changesDir = join(root, CHANGES_DIR);
15
+ const proposalDir = join(changesDir, name);
16
+ if (existsSync(proposalDir)) {
17
+ throw new Error(`Change proposal already exists: ${name}`);
18
+ }
19
+ mkdirSync(proposalDir, { recursive: true });
20
+ const metadata = {
21
+ name,
22
+ description,
23
+ status: 'proposed',
24
+ created: new Date().toISOString(),
25
+ };
26
+ // Write metadata
27
+ writeFileSync(join(proposalDir, 'metadata.json'), JSON.stringify(metadata, null, 2) + '\n', 'utf-8');
28
+ // Write proposal markdown
29
+ writeFileSync(join(proposalDir, 'proposal.md'), [
30
+ `# ${description}`,
31
+ '',
32
+ '## Summary',
33
+ '',
34
+ 'Describe the change and its motivation here.',
35
+ '',
36
+ '## Scope',
37
+ '',
38
+ '- Affected modules:',
39
+ '- New entities/workflows:',
40
+ '- Modified entities/workflows:',
41
+ '',
42
+ ].join('\n'), 'utf-8');
43
+ // Write delta.prd template
44
+ writeFileSync(join(proposalDir, 'delta.prd'), [
45
+ `// Delta specification for: ${description}`,
46
+ '// This file is compiled alongside your main .prd files.',
47
+ '// Add new or modified entity, workflow, surface, and event blocks below.',
48
+ '//',
49
+ '// Example:',
50
+ '// entity new_feature {',
51
+ '// id: uuid',
52
+ '// name: string',
53
+ '// }',
54
+ '',
55
+ ].join('\n'), 'utf-8');
56
+ // Write task checklist
57
+ writeFileSync(join(proposalDir, 'tasks.md'), [
58
+ `# Tasks — ${description}`,
59
+ '',
60
+ '- [ ] Define delta specification (delta.prd)',
61
+ '- [ ] Run `prodara validate` on delta',
62
+ '- [ ] Review semantic diff',
63
+ '- [ ] Implement changes',
64
+ '- [ ] Archive proposal',
65
+ '',
66
+ ].join('\n'), 'utf-8');
67
+ return {
68
+ name,
69
+ description,
70
+ status: 'proposed',
71
+ created: metadata.created,
72
+ path: proposalDir,
73
+ };
74
+ }
75
+ // ---------------------------------------------------------------------------
76
+ // List
77
+ // ---------------------------------------------------------------------------
78
+ export function listProposals(root) {
79
+ const changesDir = join(root, CHANGES_DIR);
80
+ if (!existsSync(changesDir))
81
+ return [];
82
+ const entries = readdirSync(changesDir, { withFileTypes: true });
83
+ const proposals = [];
84
+ for (const entry of entries) {
85
+ if (!entry.isDirectory() || entry.name === 'archive')
86
+ continue;
87
+ const metadataPath = join(changesDir, entry.name, 'metadata.json');
88
+ /* v8 ignore next -- defensive: metadata always exists for valid proposals */
89
+ if (!existsSync(metadataPath))
90
+ continue;
91
+ const metadata = JSON.parse(readFileSync(metadataPath, 'utf-8'));
92
+ proposals.push({
93
+ name: metadata.name,
94
+ description: metadata.description,
95
+ status: metadata.status,
96
+ created: metadata.created,
97
+ path: join(changesDir, entry.name),
98
+ });
99
+ }
100
+ return proposals.sort((a, b) => b.created.localeCompare(a.created));
101
+ }
102
+ // ---------------------------------------------------------------------------
103
+ // Get
104
+ // ---------------------------------------------------------------------------
105
+ export function getProposal(name, root) {
106
+ const changesDir = join(root, CHANGES_DIR);
107
+ const proposalDir = join(changesDir, name);
108
+ const metadataPath = join(proposalDir, 'metadata.json');
109
+ if (!existsSync(metadataPath))
110
+ return null;
111
+ const metadata = JSON.parse(readFileSync(metadataPath, 'utf-8'));
112
+ return {
113
+ name: metadata.name,
114
+ description: metadata.description,
115
+ status: metadata.status,
116
+ created: metadata.created,
117
+ path: proposalDir,
118
+ };
119
+ }
120
+ // ---------------------------------------------------------------------------
121
+ // Apply
122
+ // ---------------------------------------------------------------------------
123
+ export function applyProposal(name, root) {
124
+ const proposal = getProposal(name, root);
125
+ if (!proposal) {
126
+ throw new Error(`Change proposal not found: ${name}`);
127
+ }
128
+ // Update status to in-progress
129
+ updateStatus(proposal.path, 'in-progress');
130
+ return { ...proposal, status: 'in-progress' };
131
+ }
132
+ // ---------------------------------------------------------------------------
133
+ // Archive
134
+ // ---------------------------------------------------------------------------
135
+ export function archiveProposal(name, root) {
136
+ const proposal = getProposal(name, root);
137
+ if (!proposal) {
138
+ throw new Error(`Change proposal not found: ${name}`);
139
+ }
140
+ const archiveDir = join(root, ARCHIVE_DIR);
141
+ mkdirSync(archiveDir, { recursive: true });
142
+ const date = new Date().toISOString().slice(0, 10);
143
+ const archiveName = `${date}-${name}`;
144
+ const archivePath = join(archiveDir, archiveName);
145
+ // Update status before moving
146
+ updateStatus(proposal.path, 'archived');
147
+ // Move to archive
148
+ renameSync(proposal.path, archivePath);
149
+ return { ...proposal, status: 'archived', path: archivePath };
150
+ }
151
+ // ---------------------------------------------------------------------------
152
+ // Helpers
153
+ // ---------------------------------------------------------------------------
154
+ function updateStatus(proposalPath, status) {
155
+ const metadataPath = join(proposalPath, 'metadata.json');
156
+ const metadata = JSON.parse(readFileSync(metadataPath, 'utf-8'));
157
+ const updated = { ...metadata, status };
158
+ writeFileSync(metadataPath, JSON.stringify(updated, null, 2) + '\n', 'utf-8');
159
+ }
160
+ function slugify(text) {
161
+ return text
162
+ .toLowerCase()
163
+ .replace(/[^a-z0-9\s-]/g, '')
164
+ .replace(/\s+/g, '-')
165
+ .replace(/-+/g, '-')
166
+ .replace(/^-|-$/g, '')
167
+ .slice(0, 60);
168
+ }
169
+ //# sourceMappingURL=proposal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proposal.js","sourceRoot":"","sources":["../../src/proposal/proposal.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ export type ChangeStatus = 'proposed' | 'in-progress' | 'implemented' | 'archived';
2
+ export interface ChangeMetadata {
3
+ readonly name: string;
4
+ readonly description: string;
5
+ readonly status: ChangeStatus;
6
+ readonly created: string;
7
+ }
8
+ export interface ChangeProposal {
9
+ readonly name: string;
10
+ readonly description: string;
11
+ readonly status: ChangeStatus;
12
+ readonly created: string;
13
+ readonly path: string;
14
+ }
15
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/proposal/types.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG,aAAa,GAAG,aAAa,GAAG,UAAU,CAAC;AAEnF,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB"}
@@ -0,0 +1,5 @@
1
+ // ---------------------------------------------------------------------------
2
+ // Prodara Compiler — Proposal Types
3
+ // ---------------------------------------------------------------------------
4
+ export {};
5
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/proposal/types.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,oCAAoC;AACpC,8EAA8E"}
@@ -0,0 +1,3 @@
1
+ export { resolveConstitutions, parsePackageRef } from './resolution.js';
2
+ export type { ConstitutionResolutionResult, ResolvedPackage, ResolvedPolicy, ConstitutionPackageRef } from './resolution.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/registry/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACxE,YAAY,EAAE,4BAA4B,EAAE,eAAe,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { resolveConstitutions, parsePackageRef } from './resolution.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/registry/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,39 @@
1
+ import type { AstFile, PackageRef as AstPackageRef } from '../parser/ast.js';
2
+ import type { BindResult } from '../binder/binder.js';
3
+ import { DiagnosticBag } from '../diagnostics/diagnostic.js';
4
+ /** A resolved constitution package */
5
+ export interface ResolvedPackage {
6
+ readonly name: string;
7
+ readonly version: string;
8
+ readonly source: 'local' | 'git' | 'registry';
9
+ /** Resolved policies from this package */
10
+ readonly policies: readonly ResolvedPolicy[];
11
+ }
12
+ /** A policy resolved from a constitution package */
13
+ export interface ResolvedPolicy {
14
+ readonly name: string;
15
+ readonly properties: ReadonlyMap<string, unknown>;
16
+ }
17
+ /** A package reference found in a constitution declaration */
18
+ export interface ConstitutionPackageRef {
19
+ readonly path: string;
20
+ readonly version: string;
21
+ readonly module: string;
22
+ readonly constitutionName: string;
23
+ }
24
+ export interface ConstitutionResolutionResult {
25
+ readonly bag: DiagnosticBag;
26
+ readonly packages: readonly ResolvedPackage[];
27
+ readonly refs: readonly ConstitutionPackageRef[];
28
+ }
29
+ /**
30
+ * Extract constitution package references from the AST and attempt
31
+ * resolution. In v0.1, only local vendored packages are supported — remote
32
+ * packages emit an informational diagnostic.
33
+ */
34
+ export declare function resolveConstitutions(files: readonly AstFile[], _bindResult: BindResult): ConstitutionResolutionResult;
35
+ /**
36
+ * Parse a raw package reference string. Exported for testing.
37
+ */
38
+ export declare function parsePackageRef(raw: string): AstPackageRef | null;
39
+ //# sourceMappingURL=resolution.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolution.d.ts","sourceRoot":"","sources":["../../src/registry/resolution.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,OAAO,EAAE,UAAU,IAAI,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAC7E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAM7D,sCAAsC;AACtC,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,OAAO,GAAG,KAAK,GAAG,UAAU,CAAC;IAC9C,0CAA0C;IAC1C,QAAQ,CAAC,QAAQ,EAAE,SAAS,cAAc,EAAE,CAAC;CAC9C;AAED,oDAAoD;AACpD,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,UAAU,EAAE,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnD;AAED,8DAA8D;AAC9D,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;CACnC;AAED,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,GAAG,EAAE,aAAa,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,SAAS,eAAe,EAAE,CAAC;IAC9C,QAAQ,CAAC,IAAI,EAAE,SAAS,sBAAsB,EAAE,CAAC;CAClD;AAMD;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,SAAS,OAAO,EAAE,EACzB,WAAW,EAAE,UAAU,GACtB,4BAA4B,CAyC9B;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAIjE"}
@@ -0,0 +1,70 @@
1
+ // ---------------------------------------------------------------------------
2
+ // Prodara Compiler — Constitution & Registry Resolution
3
+ // ---------------------------------------------------------------------------
4
+ // Resolves constitution package references declared via `use` in constitution
5
+ // blocks. This module implements the resolution model described in the spec:
6
+ //
7
+ // Resolution order: local vendored → custom Git taps → official registry
8
+ //
9
+ // In v0.1 only local resolution is implemented. Remote registry and Git taps
10
+ // are defined as interfaces ready for future plug-in.
11
+ import { DiagnosticBag } from '../diagnostics/diagnostic.js';
12
+ // ---------------------------------------------------------------------------
13
+ // Resolution
14
+ // ---------------------------------------------------------------------------
15
+ /**
16
+ * Extract constitution package references from the AST and attempt
17
+ * resolution. In v0.1, only local vendored packages are supported — remote
18
+ * packages emit an informational diagnostic.
19
+ */
20
+ export function resolveConstitutions(files, _bindResult) {
21
+ const bag = new DiagnosticBag();
22
+ const refs = [];
23
+ const packages = [];
24
+ // Collect all constitution package references
25
+ for (const file of files) {
26
+ for (const decl of file.declarations) {
27
+ if (decl.kind !== 'module')
28
+ continue;
29
+ for (const item of decl.items) {
30
+ if (item.kind !== 'constitution')
31
+ continue;
32
+ if (item.packages) {
33
+ for (const pkg of item.packages) {
34
+ refs.push({
35
+ path: pkg.path,
36
+ version: pkg.version,
37
+ module: decl.name,
38
+ constitutionName: item.name,
39
+ });
40
+ }
41
+ }
42
+ }
43
+ }
44
+ }
45
+ // Attempt resolution (local only in v0.1)
46
+ for (const ref of refs) {
47
+ // In v0.1, no actual package fetching
48
+ bag.add({
49
+ phase: 'registry',
50
+ category: 'registry_error',
51
+ severity: 'info',
52
+ code: 'PRD0601',
53
+ message: `Constitution package '${ref.path}@${ref.version}' referenced but registry resolution is not yet available`,
54
+ file: '',
55
+ line: 0,
56
+ column: 0,
57
+ });
58
+ }
59
+ return { bag, packages, refs };
60
+ }
61
+ /**
62
+ * Parse a raw package reference string. Exported for testing.
63
+ */
64
+ export function parsePackageRef(raw) {
65
+ const match = /^([@\w][\w./-]*)(?:@(.+))?$/.exec(raw);
66
+ if (!match)
67
+ return null;
68
+ return { path: match[1], version: match[2] ?? '*' };
69
+ }
70
+ //# sourceMappingURL=resolution.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolution.js","sourceRoot":"","sources":["../../src/registry/resolution.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,wDAAwD;AACxD,8EAA8E;AAC9E,8EAA8E;AAC9E,6EAA6E;AAC7E,EAAE;AACF,yEAAyE;AACzE,EAAE;AACF,6EAA6E;AAC7E,sDAAsD;AAItD,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAmC7D,8EAA8E;AAC9E,aAAa;AACb,8EAA8E;AAE9E;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAClC,KAAyB,EACzB,WAAuB;IAEvB,MAAM,GAAG,GAAG,IAAI,aAAa,EAAE,CAAC;IAChC,MAAM,IAAI,GAA6B,EAAE,CAAC;IAC1C,MAAM,QAAQ,GAAsB,EAAE,CAAC;IAEvC,8CAA8C;IAC9C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACrC,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ;gBAAE,SAAS;YACrC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;gBAC9B,IAAI,IAAI,CAAC,IAAI,KAAK,cAAc;oBAAE,SAAS;gBAC3C,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;oBAClB,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;wBAChC,IAAI,CAAC,IAAI,CAAC;4BACR,IAAI,EAAE,GAAG,CAAC,IAAI;4BACd,OAAO,EAAE,GAAG,CAAC,OAAO;4BACpB,MAAM,EAAE,IAAI,CAAC,IAAI;4BACjB,gBAAgB,EAAE,IAAI,CAAC,IAAI;yBAC5B,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,0CAA0C;IAC1C,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,sCAAsC;QACtC,GAAG,CAAC,GAAG,CAAC;YACN,KAAK,EAAE,UAAU;YACjB,QAAQ,EAAE,gBAAgB;YAC1B,QAAQ,EAAE,MAAM;YAChB,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,yBAAyB,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,OAAO,2DAA2D;YACpH,IAAI,EAAE,EAAE;YACR,IAAI,EAAE,CAAC;YACP,MAAM,EAAE,CAAC;SACV,CAAC,CAAC;IACL,CAAC;IAED,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AACjC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,GAAW;IACzC,MAAM,KAAK,GAAG,6BAA6B,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACtD,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAE,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,CAAC;AACvD,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { ReviewerAgent } from './reviewer.js';
2
+ export declare const adversarialReviewer: ReviewerAgent;
3
+ //# sourceMappingURL=adversarial.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adversarial.d.ts","sourceRoot":"","sources":["../../src/reviewers/adversarial.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAEnD,eAAO,MAAM,mBAAmB,EAAE,aA2GjC,CAAC"}
@@ -0,0 +1,111 @@
1
+ // ---------------------------------------------------------------------------
2
+ // Prodara Compiler — Adversarial Reviewer
3
+ // ---------------------------------------------------------------------------
4
+ // A cynical/skeptical reviewer that assumes problems exist and exhaustively
5
+ // finds gaps, unstated assumptions, contradictions, and missing items.
6
+ export const adversarialReviewer = {
7
+ name: 'adversarial',
8
+ description: 'Cynical reviewer that assumes problems exist and finds gaps, contradictions, and unstated assumptions',
9
+ review(graph, _spec) {
10
+ const findings = [];
11
+ // Check: modules without any policies or rules
12
+ for (const mod of graph.modules) {
13
+ const policies = getNodeArray(mod, 'policies');
14
+ const rules = getNodeArray(mod, 'rules');
15
+ const entities = getNodeArray(mod, 'entities');
16
+ if (entities.length > 0 && policies.length === 0 && rules.length === 0) {
17
+ findings.push({
18
+ reviewer: 'adversarial',
19
+ severity: 'warning',
20
+ category: 'missing_policies',
21
+ nodeId: mod.id,
22
+ message: `Module "${mod.name}" has entities but no policies or rules — data integrity is unguarded`,
23
+ suggestion: 'Add validation policies to protect entity invariants',
24
+ });
25
+ }
26
+ }
27
+ // Check: modules without tests
28
+ for (const mod of graph.modules) {
29
+ const tests = getNodeArray(mod, 'tests');
30
+ if (tests.length === 0) {
31
+ findings.push({
32
+ reviewer: 'adversarial',
33
+ severity: 'warning',
34
+ category: 'missing_tests',
35
+ nodeId: mod.id,
36
+ message: `Module "${mod.name}" has no tests — correctness is unverified`,
37
+ suggestion: 'Add spec tests to verify module behavior',
38
+ });
39
+ }
40
+ }
41
+ // Check: entities without any edges (orphan entities)
42
+ for (const mod of graph.modules) {
43
+ for (const entity of getNodeArray(mod, 'entities')) {
44
+ const hasEdge = graph.edges.some((e) => e.from === entity.id || e.to === entity.id);
45
+ if (!hasEdge) {
46
+ findings.push({
47
+ reviewer: 'adversarial',
48
+ severity: 'warning',
49
+ category: 'orphan_entity',
50
+ nodeId: entity.id,
51
+ message: `Entity "${entity.name}" in module "${mod.name}" has no edges — it may be unused`,
52
+ suggestion: 'Connect this entity to workflows or other entities, or remove it',
53
+ });
54
+ }
55
+ }
56
+ }
57
+ // Check: workflows without any output edges
58
+ for (const mod of graph.modules) {
59
+ for (const wf of getNodeArray(mod, 'workflows')) {
60
+ const hasOutput = graph.edges.some(
61
+ /* v8 ignore next -- both emits and writes are tested */
62
+ (e) => e.from === wf.id && (e.kind === 'emits' || e.kind === 'writes'));
63
+ if (!hasOutput) {
64
+ findings.push({
65
+ reviewer: 'adversarial',
66
+ severity: 'info',
67
+ category: 'missing_output',
68
+ nodeId: wf.id,
69
+ message: `Workflow "${wf.name}" in module "${mod.name}" has no output edges — side effects are unstated`,
70
+ suggestion: 'Declare what this workflow produces, emits, or writes',
71
+ });
72
+ }
73
+ }
74
+ }
75
+ // Check: duplicate node names within a module
76
+ for (const mod of graph.modules) {
77
+ const names = new Map();
78
+ for (const category of ['entities', 'workflows', 'screens', 'policies', 'events', 'actors']) {
79
+ for (const node of getNodeArray(mod, category)) {
80
+ const existing = names.get(node.name);
81
+ if (existing) {
82
+ existing.push(node.id);
83
+ }
84
+ else {
85
+ names.set(node.name, [node.id]);
86
+ }
87
+ }
88
+ }
89
+ for (const [name, ids] of names) {
90
+ if (ids.length > 1) {
91
+ findings.push({
92
+ reviewer: 'adversarial',
93
+ severity: 'error',
94
+ category: 'duplicate_name',
95
+ nodeId: ids[0],
96
+ message: `Duplicate name "${name}" in module "${mod.name}" — ambiguous references`,
97
+ suggestion: 'Rename one of the duplicates to avoid confusion',
98
+ });
99
+ }
100
+ }
101
+ }
102
+ return findings;
103
+ },
104
+ };
105
+ function getNodeArray(mod, category) {
106
+ const val = mod[category];
107
+ if (!Array.isArray(val))
108
+ return [];
109
+ return val;
110
+ }
111
+ //# sourceMappingURL=adversarial.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adversarial.js","sourceRoot":"","sources":["../../src/reviewers/adversarial.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,0CAA0C;AAC1C,8EAA8E;AAC9E,4EAA4E;AAC5E,uEAAuE;AAOvE,MAAM,CAAC,MAAM,mBAAmB,GAAkB;IAChD,IAAI,EAAE,aAAa;IACnB,WAAW,EAAE,uGAAuG;IAEpH,MAAM,CAAC,KAAmB,EAAE,KAAsB;QAChD,MAAM,QAAQ,GAAoB,EAAE,CAAC;QAErC,+CAA+C;QAC/C,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YAChC,MAAM,QAAQ,GAAG,YAAY,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;YAC/C,MAAM,KAAK,GAAG,YAAY,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;YACzC,MAAM,QAAQ,GAAG,YAAY,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;YAC/C,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACvE,QAAQ,CAAC,IAAI,CAAC;oBACZ,QAAQ,EAAE,aAAa;oBACvB,QAAQ,EAAE,SAAS;oBACnB,QAAQ,EAAE,kBAAkB;oBAC5B,MAAM,EAAE,GAAG,CAAC,EAAE;oBACd,OAAO,EAAE,WAAW,GAAG,CAAC,IAAI,uEAAuE;oBACnG,UAAU,EAAE,sDAAsD;iBACnE,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,+BAA+B;QAC/B,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YAChC,MAAM,KAAK,GAAG,YAAY,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;YACzC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACvB,QAAQ,CAAC,IAAI,CAAC;oBACZ,QAAQ,EAAE,aAAa;oBACvB,QAAQ,EAAE,SAAS;oBACnB,QAAQ,EAAE,eAAe;oBACzB,MAAM,EAAE,GAAG,CAAC,EAAE;oBACd,OAAO,EAAE,WAAW,GAAG,CAAC,IAAI,4CAA4C;oBACxE,UAAU,EAAE,0CAA0C;iBACvD,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,sDAAsD;QACtD,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YAChC,KAAK,MAAM,MAAM,IAAI,YAAY,CAAC,GAAG,EAAE,UAAU,CAAC,EAAE,CAAC;gBACnD,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAC9B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,EAAE,CAClD,CAAC;gBACF,IAAI,CAAC,OAAO,EAAE,CAAC;oBACb,QAAQ,CAAC,IAAI,CAAC;wBACZ,QAAQ,EAAE,aAAa;wBACvB,QAAQ,EAAE,SAAS;wBACnB,QAAQ,EAAE,eAAe;wBACzB,MAAM,EAAE,MAAM,CAAC,EAAE;wBACjB,OAAO,EAAE,WAAW,MAAM,CAAC,IAAI,gBAAgB,GAAG,CAAC,IAAI,mCAAmC;wBAC1F,UAAU,EAAE,kEAAkE;qBAC/E,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC;QAED,4CAA4C;QAC5C,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YAChC,KAAK,MAAM,EAAE,IAAI,YAAY,CAAC,GAAG,EAAE,WAAW,CAAC,EAAE,CAAC;gBAChD,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI;gBAChC,wDAAwD;gBACxD,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CACvE,CAAC;gBACF,IAAI,CAAC,SAAS,EAAE,CAAC;oBACf,QAAQ,CAAC,IAAI,CAAC;wBACZ,QAAQ,EAAE,aAAa;wBACvB,QAAQ,EAAE,MAAM;wBAChB,QAAQ,EAAE,gBAAgB;wBAC1B,MAAM,EAAE,EAAE,CAAC,EAAE;wBACb,OAAO,EAAE,aAAa,EAAE,CAAC,IAAI,gBAAgB,GAAG,CAAC,IAAI,mDAAmD;wBACxG,UAAU,EAAE,uDAAuD;qBACpE,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC;QAED,8CAA8C;QAC9C,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YAChC,MAAM,KAAK,GAAG,IAAI,GAAG,EAAoB,CAAC;YAC1C,KAAK,MAAM,QAAQ,IAAI,CAAC,UAAU,EAAE,WAAW,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,CAAU,EAAE,CAAC;gBACrG,KAAK,MAAM,IAAI,IAAI,YAAY,CAAC,GAAG,EAAE,QAAQ,CAAC,EAAE,CAAC;oBAC/C,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBACtC,IAAI,QAAQ,EAAE,CAAC;wBACb,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBACzB,CAAC;yBAAM,CAAC;wBACN,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;oBAClC,CAAC;gBACH,CAAC;YACH,CAAC;YACD,KAAK,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,KAAK,EAAE,CAAC;gBAChC,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACnB,QAAQ,CAAC,IAAI,CAAC;wBACZ,QAAQ,EAAE,aAAa;wBACvB,QAAQ,EAAE,OAAO;wBACjB,QAAQ,EAAE,gBAAgB;wBAC1B,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;wBACd,OAAO,EAAE,mBAAmB,IAAI,gBAAgB,GAAG,CAAC,IAAI,0BAA0B;wBAClF,UAAU,EAAE,iDAAiD;qBAC9D,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF,CAAC;AAOF,SAAS,YAAY,CAAC,GAAe,EAAE,QAAgB;IACrD,MAAM,GAAG,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC1B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;QAAE,OAAO,EAAE,CAAC;IACnC,OAAO,GAA2B,CAAC;AACrC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { ReviewerAgent } from './reviewer.js';
2
+ export declare const architectureReviewer: ReviewerAgent;
3
+ //# sourceMappingURL=architecture.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"architecture.d.ts","sourceRoot":"","sources":["../../src/reviewers/architecture.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAEnD,eAAO,MAAM,oBAAoB,EAAE,aA6DlC,CAAC"}
@@ -0,0 +1,71 @@
1
+ // ---------------------------------------------------------------------------
2
+ // Prodara Compiler — Architecture Reviewer
3
+ // ---------------------------------------------------------------------------
4
+ // Validates architectural quality: module boundaries, dependency patterns,
5
+ // authorization coverage, and circular dependency risks.
6
+ export const architectureReviewer = {
7
+ name: 'architecture',
8
+ description: 'Validates module boundaries, dependency patterns, and authorization coverage',
9
+ review(graph, _spec) {
10
+ const findings = [];
11
+ // Check: every module should have at least one entity or workflow
12
+ for (const mod of graph.modules) {
13
+ const entities = getNodeArray(mod, 'entities');
14
+ const workflows = getNodeArray(mod, 'workflows');
15
+ if (entities.length === 0 && workflows.length === 0) {
16
+ findings.push({
17
+ reviewer: 'architecture',
18
+ severity: 'warning',
19
+ category: 'empty_module',
20
+ nodeId: mod.id,
21
+ message: `Module "${mod.name}" has no entities or workflows`,
22
+ suggestion: 'Consider adding domain constructs or merging into another module',
23
+ });
24
+ }
25
+ }
26
+ // Check: workflows should have authorization
27
+ for (const mod of graph.modules) {
28
+ for (const wf of getNodeArray(mod, 'workflows')) {
29
+ const hasAuth = graph.edges.some((e) => e.from === wf.id && e.kind === 'authorized_as');
30
+ if (!hasAuth) {
31
+ findings.push({
32
+ reviewer: 'architecture',
33
+ severity: 'warning',
34
+ category: 'missing_authorization',
35
+ nodeId: wf.id,
36
+ message: `Workflow "${wf.name}" in module "${mod.name}" has no authorization`,
37
+ suggestion: 'Add an authorization block to restrict access',
38
+ });
39
+ }
40
+ }
41
+ }
42
+ // Check: cross-module dependency density
43
+ const crossModuleEdges = graph.edges.filter((e) => {
44
+ const fromMod = extractModule(e.from);
45
+ const toMod = extractModule(e.to);
46
+ return fromMod && toMod && fromMod !== toMod;
47
+ });
48
+ const moduleCount = graph.modules.length;
49
+ if (moduleCount > 1 && crossModuleEdges.length > moduleCount * 10) {
50
+ findings.push({
51
+ reviewer: 'architecture',
52
+ severity: 'info',
53
+ category: 'high_coupling',
54
+ message: `High cross-module coupling: ${crossModuleEdges.length} cross-module edges across ${moduleCount} modules`,
55
+ suggestion: 'Consider refactoring to reduce inter-module dependencies',
56
+ });
57
+ }
58
+ return findings;
59
+ },
60
+ };
61
+ function extractModule(nodeId) {
62
+ const parts = nodeId.split('.');
63
+ return parts.length >= 2 ? parts[0] : null;
64
+ }
65
+ function getNodeArray(mod, category) {
66
+ const val = mod[category];
67
+ if (!Array.isArray(val))
68
+ return [];
69
+ return val;
70
+ }
71
+ //# sourceMappingURL=architecture.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"architecture.js","sourceRoot":"","sources":["../../src/reviewers/architecture.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { ReviewerAgent } from './reviewer.js';
2
+ export declare const codeQualityReviewer: ReviewerAgent;
3
+ //# sourceMappingURL=code-quality.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"code-quality.d.ts","sourceRoot":"","sources":["../../src/reviewers/code-quality.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAEnD,eAAO,MAAM,mBAAmB,EAAE,aAoEjC,CAAC"}
@@ -0,0 +1,72 @@
1
+ // ---------------------------------------------------------------------------
2
+ // Prodara Compiler — Code Quality Reviewer
3
+ // ---------------------------------------------------------------------------
4
+ // Validates graph structural quality: orphan nodes, edge validity,
5
+ // duplicate identifiers, and consistent graph structure.
6
+ import { collectAllNodeIds } from '../graph/graph-types.js';
7
+ export const codeQualityReviewer = {
8
+ name: 'codeQuality',
9
+ description: 'Validates graph structure: orphans, edge validity, and duplicates',
10
+ review(graph, _spec) {
11
+ const findings = [];
12
+ const allNodeIds = collectAllNodeIds(graph);
13
+ // Check: edges reference valid nodes
14
+ for (const edge of graph.edges) {
15
+ if (!allNodeIds.has(edge.from)) {
16
+ findings.push({
17
+ reviewer: 'codeQuality',
18
+ severity: 'error',
19
+ category: 'invalid_edge_source',
20
+ message: `Edge "${edge.kind}" has source "${edge.from}" which is not in the graph`,
21
+ });
22
+ }
23
+ if (!allNodeIds.has(edge.to)) {
24
+ findings.push({
25
+ reviewer: 'codeQuality',
26
+ severity: 'error',
27
+ category: 'invalid_edge_target',
28
+ message: `Edge "${edge.kind}" has target "${edge.to}" which is not in the graph`,
29
+ });
30
+ }
31
+ }
32
+ // Check: orphan nodes (non-module, non-product nodes with no edges)
33
+ const connectedNodes = new Set();
34
+ for (const edge of graph.edges) {
35
+ connectedNodes.add(edge.from);
36
+ connectedNodes.add(edge.to);
37
+ }
38
+ for (const id of allNodeIds) {
39
+ if (id === 'product')
40
+ continue;
41
+ // Module nodes are connected via 'contains' edges automatically
42
+ if (graph.modules.some((m) => m.id === id))
43
+ continue;
44
+ if (!connectedNodes.has(id)) {
45
+ findings.push({
46
+ reviewer: 'codeQuality',
47
+ severity: 'warning',
48
+ category: 'orphan_node',
49
+ nodeId: id,
50
+ message: `Node "${id}" has no edges — it may be orphaned`,
51
+ suggestion: 'Verify this node is intentionally disconnected or add relationships',
52
+ });
53
+ }
54
+ }
55
+ // Check: duplicate edge detection
56
+ const edgeSet = new Set();
57
+ for (const edge of graph.edges) {
58
+ const key = `${edge.from}|${edge.to}|${edge.kind}`;
59
+ if (edgeSet.has(key)) {
60
+ findings.push({
61
+ reviewer: 'codeQuality',
62
+ severity: 'warning',
63
+ category: 'duplicate_edge',
64
+ message: `Duplicate edge: ${edge.from} -> ${edge.to} (${edge.kind})`,
65
+ });
66
+ }
67
+ edgeSet.add(key);
68
+ }
69
+ return findings;
70
+ },
71
+ };
72
+ //# sourceMappingURL=code-quality.js.map