@geraldmaron/construct 1.1.1 → 1.2.1

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 (426) hide show
  1. package/README.md +30 -19
  2. package/bin/construct +487 -87
  3. package/bin/construct-postinstall.mjs +30 -2
  4. package/examples/distribution/README.md +42 -0
  5. package/examples/distribution/manifest.json +53 -0
  6. package/examples/distribution/sources/adr.md +84 -0
  7. package/examples/distribution/sources/deck-one-pager.md +65 -0
  8. package/examples/distribution/sources/prd-platform.md +161 -0
  9. package/examples/distribution/sources/research-brief.md +80 -0
  10. package/examples/distribution/sources/rfc-platform.md +82 -0
  11. package/examples/distribution/sources/runbook.md +103 -0
  12. package/examples/distribution/sources/strategy.md +88 -0
  13. package/lib/adapters-sync.mjs +67 -0
  14. package/lib/artifact-gate-notice.mjs +38 -0
  15. package/lib/artifact-manifest.mjs +258 -0
  16. package/lib/artifact-release-gate.mjs +171 -0
  17. package/lib/artifact-reviewers.mjs +68 -0
  18. package/lib/artifact-type-from-path.mjs +79 -0
  19. package/lib/artifact-workflow.mjs +252 -0
  20. package/lib/audit-skills.mjs +4 -0
  21. package/lib/audit-specialists.mjs +285 -0
  22. package/lib/audit-trail.mjs +1 -1
  23. package/lib/auto-docs.mjs +90 -19
  24. package/lib/beads/drift.mjs +27 -6
  25. package/lib/beads-client.mjs +49 -121
  26. package/lib/beads-optimistic.mjs +5 -12
  27. package/lib/brand-fonts.mjs +93 -0
  28. package/lib/brand-prose.mjs +214 -0
  29. package/lib/brand-tokens.mjs +92 -0
  30. package/lib/bridges/copilot-proxy.mjs +13 -26
  31. package/lib/capability-ledger.mjs +156 -0
  32. package/lib/certification/artifact-fixtures.mjs +132 -0
  33. package/lib/certification/artifact-gates.mjs +63 -0
  34. package/lib/certification/artifact-provenance.mjs +97 -0
  35. package/lib/certification/canonical-scenarios.mjs +78 -0
  36. package/lib/certification/cli.mjs +191 -0
  37. package/lib/certification/dashboard-api.mjs +71 -0
  38. package/lib/certification/demo-parity.mjs +116 -0
  39. package/lib/certification/document-io-fixtures.mjs +246 -0
  40. package/lib/certification/document-workflow.mjs +97 -0
  41. package/lib/certification/eval-bridge.mjs +77 -0
  42. package/lib/certification/model-routing.mjs +149 -0
  43. package/lib/certification/prompt-budget.mjs +119 -0
  44. package/lib/certification/rc-gate.mjs +206 -0
  45. package/lib/certification/real-llm-scenarios.mjs +303 -0
  46. package/lib/certification/role-cards.mjs +113 -0
  47. package/lib/certification/role-overlays.mjs +117 -0
  48. package/lib/certification/run.mjs +122 -0
  49. package/lib/certification/runner.mjs +323 -0
  50. package/lib/certification/scenarios.mjs +51 -0
  51. package/lib/certification/skill-inventory.mjs +289 -0
  52. package/lib/certification/skill-scenarios.mjs +147 -0
  53. package/lib/certification/specialist-contracts.mjs +85 -0
  54. package/lib/certification/specialist-scenarios.mjs +175 -0
  55. package/lib/certification/stale-impact.mjs +146 -0
  56. package/lib/certification/status.mjs +252 -0
  57. package/lib/certification/store.mjs +77 -0
  58. package/lib/chat/cli.mjs +333 -0
  59. package/lib/chat/command-suggest.mjs +161 -0
  60. package/lib/chat/commands.mjs +215 -0
  61. package/lib/chat/config.mjs +142 -0
  62. package/lib/chat/context-compactor.mjs +250 -0
  63. package/lib/chat/context-continuation.mjs +253 -0
  64. package/lib/chat/continuation-source.mjs +58 -0
  65. package/lib/chat/demo-guide.mjs +61 -0
  66. package/lib/chat/design-tokens.mjs +91 -0
  67. package/lib/chat/desktop-binary.mjs +79 -0
  68. package/lib/chat/desktop-build.mjs +130 -0
  69. package/lib/chat/desktop-launcher.mjs +133 -0
  70. package/lib/chat/evidence.mjs +145 -0
  71. package/lib/chat/export.mjs +74 -0
  72. package/lib/chat/harness/driver.mjs +91 -0
  73. package/lib/chat/list-picker.mjs +112 -0
  74. package/lib/chat/model-picker.mjs +356 -0
  75. package/lib/chat/openrouter-fallback.mjs +151 -0
  76. package/lib/chat/permission-prompt.mjs +33 -0
  77. package/lib/chat/picker-catalog.mjs +45 -0
  78. package/lib/chat/policy-telemetry.mjs +34 -0
  79. package/lib/chat/present.mjs +246 -0
  80. package/lib/chat/session-context.mjs +39 -0
  81. package/lib/chat/session-persist.mjs +73 -0
  82. package/lib/chat/session-restore.mjs +71 -0
  83. package/lib/chat/session-settings.mjs +53 -0
  84. package/lib/chat/system-prompt.mjs +52 -0
  85. package/lib/chat/transparency.mjs +93 -0
  86. package/lib/chat/tui/color-scheme.mjs +42 -0
  87. package/lib/chat/tui/markdown.mjs +123 -0
  88. package/lib/chat/tui/presentation.mjs +100 -0
  89. package/lib/chat/tui/render.mjs +500 -0
  90. package/lib/chat/tui/turn-block.mjs +284 -0
  91. package/lib/chat/tui/turn-present.mjs +18 -0
  92. package/lib/chat/tui/turn-state.mjs +88 -0
  93. package/lib/chat/tui/usage.mjs +122 -0
  94. package/lib/chat/web-commands.mjs +146 -0
  95. package/lib/chat/web-launcher.mjs +63 -0
  96. package/lib/chat/web-picker-keys.mjs +46 -0
  97. package/lib/chat/web-session.mjs +159 -0
  98. package/lib/cli-commands.mjs +146 -15
  99. package/lib/cli-service-inventory.mjs +42 -0
  100. package/lib/comment-lint.mjs +6 -4
  101. package/lib/config/intake-policy.mjs +209 -0
  102. package/lib/config/project-config.mjs +11 -2
  103. package/lib/config/schema.mjs +86 -6
  104. package/lib/config/source-targets.mjs +311 -0
  105. package/lib/contract-schemas/decision.json +50 -0
  106. package/lib/contract-schemas/implementation.json +51 -0
  107. package/lib/contract-schemas/review-report.json +32 -0
  108. package/lib/contract-schemas/test-report.json +43 -0
  109. package/lib/contracts/construct-handoff.mjs +60 -0
  110. package/lib/contracts/validate.mjs +32 -3
  111. package/lib/contracts/violation-log.mjs +58 -5
  112. package/lib/dashboard-demo.mjs +71 -0
  113. package/lib/dashboard-static.mjs +19 -5
  114. package/lib/decisions/registry.mjs +5 -3
  115. package/lib/deck-export-pptx.mjs +1152 -0
  116. package/lib/demo-recording.mjs +142 -0
  117. package/lib/demo-script.mjs +114 -0
  118. package/lib/demo-surface.mjs +249 -0
  119. package/lib/demo.mjs +598 -140
  120. package/lib/diagram-export.mjs +192 -0
  121. package/lib/diagram.mjs +13 -11
  122. package/lib/docs-verify.mjs +25 -7
  123. package/lib/doctor/index.mjs +3 -1
  124. package/lib/doctor/project-adapters.mjs +44 -0
  125. package/lib/doctor/source-checkout.mjs +16 -0
  126. package/lib/doctor/watchers/cx-budget.mjs +98 -0
  127. package/lib/doctor/watchers/graph-staleness.mjs +52 -0
  128. package/lib/doctor/watchers/process-pressure.mjs +4 -3
  129. package/lib/document-export.mjs +384 -38
  130. package/lib/document-extract.mjs +44 -4
  131. package/lib/document-ingest.mjs +29 -20
  132. package/lib/embed/auto-sources.mjs +44 -0
  133. package/lib/embed/cli.mjs +4 -3
  134. package/lib/embed/daemon.mjs +18 -46
  135. package/lib/embed/demand-fetch.mjs +50 -19
  136. package/lib/embed/inbox.mjs +6 -10
  137. package/lib/embed/worker.mjs +4 -3
  138. package/lib/embedded-contract/index.mjs +11 -0
  139. package/lib/embedded-contract/model-resolve.mjs +10 -9
  140. package/lib/env-config.mjs +26 -0
  141. package/lib/evals/dataset.mjs +137 -0
  142. package/lib/evals/gates.mjs +175 -0
  143. package/lib/export-branding.mjs +32 -0
  144. package/lib/graph/build-co-change.mjs +54 -0
  145. package/lib/graph/build-from-registry.mjs +136 -0
  146. package/lib/graph/build-import-graph.mjs +153 -0
  147. package/lib/graph/cli.mjs +110 -0
  148. package/lib/graph/impact-cli.mjs +89 -0
  149. package/lib/graph/impact.mjs +108 -0
  150. package/lib/graph/staleness.mjs +44 -0
  151. package/lib/graph/store.mjs +172 -0
  152. package/lib/health-check.mjs +90 -76
  153. package/lib/hooks/artifact-release-gate.mjs +43 -0
  154. package/lib/hooks/brand-prose-lint.mjs +38 -0
  155. package/lib/hooks/graph-impact-advisory.mjs +62 -0
  156. package/lib/hooks/session-optimize.mjs +84 -207
  157. package/lib/hooks/session-start.mjs +18 -16
  158. package/lib/host-disposition.mjs +7 -0
  159. package/lib/improvement/cli.mjs +189 -0
  160. package/lib/improvement/controller.mjs +137 -0
  161. package/lib/improvement/proposal.mjs +120 -0
  162. package/lib/improvement/specialist-loop.mjs +192 -0
  163. package/lib/improvement/store.mjs +89 -0
  164. package/lib/improvement/surface.mjs +219 -0
  165. package/lib/ingest-tooling.mjs +97 -0
  166. package/lib/init/doc-lanes.mjs +165 -0
  167. package/lib/init-docs.mjs +31 -178
  168. package/lib/init-unified.mjs +50 -119
  169. package/lib/init-update-guide.mjs +102 -0
  170. package/lib/init-update.mjs +32 -1
  171. package/lib/init.mjs +8 -0
  172. package/lib/install/desktop-binary-download.mjs +85 -0
  173. package/lib/install/legacy-global-cleanup.mjs +189 -0
  174. package/lib/intake/constants.mjs +29 -0
  175. package/lib/intake/daemon.mjs +2 -0
  176. package/lib/intake/git-queue.mjs +9 -8
  177. package/lib/intake/intake-config.mjs +52 -105
  178. package/lib/intake/legacy-paths.mjs +5 -0
  179. package/lib/intake/queue.mjs +2 -1
  180. package/lib/intake/session-prelude.mjs +90 -1
  181. package/lib/libreoffice-export.mjs +97 -0
  182. package/lib/logging/rotate.mjs +9 -0
  183. package/lib/maintenance/docker-reclaim.mjs +206 -0
  184. package/lib/mcp/external-schema-cost.mjs +74 -0
  185. package/lib/mcp/server.mjs +103 -10
  186. package/lib/mcp/stdio-mcp-probe.mjs +188 -0
  187. package/lib/mcp/tool-budget.mjs +55 -4
  188. package/lib/mcp/tools/document.mjs +18 -4
  189. package/lib/mcp/tools/embedded-contract.mjs +14 -0
  190. package/lib/mcp/tools/skills.mjs +32 -3
  191. package/lib/mcp/tools/workflow.mjs +13 -1
  192. package/lib/model-free-selector.mjs +18 -0
  193. package/lib/model-registry.mjs +13 -229
  194. package/lib/model-router.mjs +373 -92
  195. package/lib/models/behavior-matrix.mjs +289 -0
  196. package/lib/models/catalog.mjs +209 -0
  197. package/lib/models/execution-capability-profile.mjs +196 -0
  198. package/lib/models/execution-policy.mjs +307 -0
  199. package/lib/models/provider-poll.mjs +383 -0
  200. package/lib/npm-spawn-env.mjs +17 -0
  201. package/lib/ollama/installed-models.mjs +129 -0
  202. package/lib/oracle/actions.mjs +187 -0
  203. package/lib/oracle/artifact-gate.mjs +99 -0
  204. package/lib/oracle/cli.mjs +204 -0
  205. package/lib/oracle/daemon-entry.mjs +14 -0
  206. package/lib/oracle/dispatch.mjs +81 -0
  207. package/lib/oracle/execute.mjs +143 -0
  208. package/lib/oracle/gaps.mjs +76 -0
  209. package/lib/oracle/index.mjs +84 -0
  210. package/lib/oracle/issues.mjs +164 -0
  211. package/lib/oracle/org-graph.mjs +170 -0
  212. package/lib/oracle/policy.mjs +80 -0
  213. package/lib/oracle/read-model.mjs +398 -0
  214. package/lib/oracle/reconcile.mjs +191 -0
  215. package/lib/oracle/routing.mjs +89 -0
  216. package/lib/oracle/synthesize.mjs +384 -0
  217. package/lib/oracle/verdicts.mjs +51 -0
  218. package/lib/orchestration/worker.mjs +88 -27
  219. package/lib/orchestration-policy.mjs +50 -0
  220. package/lib/parity.mjs +96 -2
  221. package/lib/playwright-demo.mjs +254 -0
  222. package/lib/project-init-shared.mjs +4 -1
  223. package/lib/prompt-composer.js +7 -3
  224. package/lib/prompt-validation-contract.mjs +24 -0
  225. package/lib/provider-capabilities.js +57 -11
  226. package/lib/providers/contract/adapters/confluence/index.mjs +181 -0
  227. package/lib/providers/contract/adapters/git/index.mjs +115 -0
  228. package/lib/providers/contract/adapters/github/index.mjs +166 -0
  229. package/lib/providers/contract/adapters/jira/index.mjs +187 -0
  230. package/lib/providers/contract/adapters/slack/index.mjs +175 -0
  231. package/lib/providers/contract/contract-tests.mjs +57 -0
  232. package/lib/providers/contract/errors.mjs +48 -0
  233. package/lib/providers/contract/interface.mjs +50 -0
  234. package/lib/providers/contract/registry.mjs +102 -0
  235. package/lib/providers/copilot-auth.mjs +297 -0
  236. package/lib/providers/credential-bootstrap.mjs +178 -0
  237. package/lib/providers/credential-catalog.mjs +46 -0
  238. package/lib/providers/credential-sources.mjs +63 -0
  239. package/lib/providers/creds.mjs +5 -2
  240. package/lib/providers/op-run.mjs +59 -0
  241. package/lib/providers/secret-resolver.mjs +159 -0
  242. package/lib/publish-template.mjs +163 -0
  243. package/lib/publish-tooling.mjs +119 -0
  244. package/lib/publish.mjs +305 -0
  245. package/lib/registry/cli.mjs +82 -0
  246. package/lib/registry/consolidation.mjs +147 -0
  247. package/lib/registry/generate-docs.mjs +75 -0
  248. package/lib/registry/skill-verification.mjs +57 -0
  249. package/lib/registry/surface-map.mjs +76 -0
  250. package/lib/registry/validate.mjs +135 -0
  251. package/lib/resources/budget.mjs +82 -0
  252. package/lib/resources/process-budget.mjs +45 -0
  253. package/lib/rules-delivery.mjs +9 -2
  254. package/lib/rules-read.mjs +26 -0
  255. package/lib/runtime-env.mjs +23 -0
  256. package/lib/runtime-pressure.mjs +51 -7
  257. package/lib/schema-infer.mjs +13 -2
  258. package/lib/server/chat-loop.mjs +622 -0
  259. package/lib/server/demo-preview.mjs +63 -0
  260. package/lib/server/index.mjs +259 -9
  261. package/lib/server/rate-limit.mjs +5 -3
  262. package/lib/server/webhook.mjs +3 -2
  263. package/lib/service-manager.mjs +60 -8
  264. package/lib/setup.mjs +70 -7
  265. package/lib/specialists/prompt-schema.mjs +19 -10
  266. package/lib/specialists/roster.mjs +43 -0
  267. package/lib/specialists/scaffold.mjs +56 -0
  268. package/lib/storage/backend.mjs +6 -6
  269. package/lib/storage/hybrid-query.mjs +7 -4
  270. package/lib/storage/state-source.mjs +5 -5
  271. package/lib/storage/sync.mjs +2 -3
  272. package/lib/telemetry/rule-calls.mjs +52 -0
  273. package/lib/template-registry.mjs +2 -2
  274. package/lib/templates/visual-requirements.mjs +27 -51
  275. package/lib/test-corpus-inventory.mjs +313 -0
  276. package/lib/uninstall/uninstall.mjs +19 -7
  277. package/lib/update.mjs +12 -0
  278. package/lib/upgrade.mjs +14 -0
  279. package/lib/wireframe.mjs +20 -14
  280. package/lib/worker/run.mjs +17 -4
  281. package/lib/worker/trace.mjs +11 -3
  282. package/package.json +28 -14
  283. package/personas/construct.md +2 -2
  284. package/platforms/claude/settings.template.json +36 -0
  285. package/rules/common/patterns.md +1 -1
  286. package/rules/common/release-gates.md +4 -3
  287. package/scripts/sync-specialists.mjs +41 -28
  288. package/skills/devops/data-engineering.md +1 -1
  289. package/skills/docs/adr-workflow.md +1 -0
  290. package/skills/docs/backlog-proposal-workflow.md +1 -0
  291. package/skills/docs/codebase-research-workflow.md +40 -0
  292. package/skills/docs/customer-profile-workflow.md +1 -0
  293. package/skills/docs/document-ingest-workflow.md +1 -0
  294. package/skills/docs/evidence-ingest-workflow.md +1 -0
  295. package/skills/docs/init-docs.md +2 -2
  296. package/skills/docs/init-project.md +7 -2
  297. package/skills/docs/prd-workflow.md +24 -1
  298. package/skills/docs/prfaq-workflow.md +1 -0
  299. package/skills/docs/product-intelligence-workflow.md +1 -0
  300. package/skills/docs/product-signal-workflow.md +1 -0
  301. package/skills/docs/research-workflow.md +54 -37
  302. package/skills/docs/runbook-workflow.md +1 -0
  303. package/skills/docs/strategy-workflow.md +1 -0
  304. package/skills/docs/user-research-workflow.md +40 -0
  305. package/skills/operating/orchestration-reference.md +1 -1
  306. package/skills/roles/architect.md +5 -0
  307. package/skills/roles/operator.docs.md +4 -0
  308. package/skills/routing.md +4 -2
  309. package/specialists/artifact-manifest.json +489 -0
  310. package/specialists/artifact-manifest.schema.json +83 -0
  311. package/specialists/audit-enrichments.json +454 -0
  312. package/specialists/contracts.json +37 -25
  313. package/specialists/prompts/_shared/validation-contract.md +26 -0
  314. package/specialists/prompts/cx-accessibility.md +21 -2
  315. package/specialists/prompts/cx-ai-engineer.md +24 -1
  316. package/specialists/prompts/cx-architect.md +4 -1
  317. package/specialists/prompts/cx-business-strategist.md +23 -2
  318. package/specialists/prompts/cx-data-analyst.md +22 -1
  319. package/specialists/prompts/cx-data-engineer.md +23 -2
  320. package/specialists/prompts/cx-debugger.md +21 -2
  321. package/specialists/prompts/cx-designer.md +26 -3
  322. package/specialists/prompts/cx-devil-advocate.md +19 -2
  323. package/specialists/prompts/cx-docs-keeper.md +28 -1
  324. package/specialists/prompts/cx-engineer.md +22 -1
  325. package/specialists/prompts/cx-evaluator.md +18 -1
  326. package/specialists/prompts/cx-explorer.md +21 -2
  327. package/specialists/prompts/cx-legal-compliance.md +21 -2
  328. package/specialists/prompts/cx-operations.md +21 -2
  329. package/specialists/prompts/cx-oracle.md +94 -0
  330. package/specialists/prompts/cx-orchestrator.md +20 -1
  331. package/specialists/prompts/cx-platform-engineer.md +25 -2
  332. package/specialists/prompts/cx-product-manager.md +32 -1
  333. package/specialists/prompts/cx-qa.md +24 -2
  334. package/specialists/prompts/cx-rd-lead.md +23 -2
  335. package/specialists/prompts/cx-release-manager.md +23 -2
  336. package/specialists/prompts/cx-researcher.md +22 -2
  337. package/specialists/prompts/cx-reviewer.md +18 -1
  338. package/specialists/prompts/cx-security.md +22 -2
  339. package/specialists/prompts/cx-sre.md +30 -3
  340. package/specialists/prompts/cx-test-automation.md +7 -1
  341. package/specialists/prompts/cx-trace-reviewer.md +22 -3
  342. package/specialists/prompts/cx-ux-researcher.md +21 -2
  343. package/specialists/registry.json +52 -173
  344. package/specialists/tone-profiles.json +42 -0
  345. package/templates/demos/playwright/demo-recording.config.mjs +47 -0
  346. package/templates/demos/recordings/agentic-platforms-prd.json +19 -0
  347. package/templates/demos/scripts/agentic-platforms-prd.json +44 -0
  348. package/templates/demos/specs/_helpers/scroll-artifact.ts +89 -0
  349. package/templates/demos/tapes/agentic-platforms-prd.tape +49 -0
  350. package/templates/demos/tapes/resource-guard-rails.tape +49 -0
  351. package/templates/demos/vhs/construct-cockpit.json +24 -0
  352. package/templates/distribution/construct-brand.typ +446 -0
  353. package/templates/distribution/construct-decision.typ +38 -0
  354. package/templates/distribution/construct-deck.html +95 -0
  355. package/templates/distribution/construct-pdf.typ +38 -0
  356. package/templates/distribution/construct-prd.typ +38 -0
  357. package/templates/distribution/construct-reference.docx +0 -0
  358. package/templates/distribution/construct-research.typ +38 -0
  359. package/templates/distribution/construct-web.html +92 -0
  360. package/templates/distribution/fonts/Geist-Bold.ttf +0 -0
  361. package/templates/distribution/fonts/Geist-Medium.ttf +0 -0
  362. package/templates/distribution/fonts/Geist-Regular.ttf +0 -0
  363. package/templates/distribution/fonts/Geist-SemiBold.ttf +0 -0
  364. package/templates/distribution/fonts/GeistMono-Medium.ttf +0 -0
  365. package/templates/distribution/fonts/GeistMono-Regular.ttf +0 -0
  366. package/templates/distribution/fonts/GeistMono-SemiBold.ttf +0 -0
  367. package/templates/distribution/fonts/IBMPlexMono-Regular.otf +0 -0
  368. package/templates/distribution/fonts/JetBrainsMono-Medium.ttf +0 -0
  369. package/templates/distribution/fonts/JetBrainsMono-Regular.ttf +0 -0
  370. package/templates/distribution/fonts/JetBrainsMono-SemiBold.ttf +0 -0
  371. package/templates/distribution/fonts/PlusJakartaSans-Bold.ttf +0 -0
  372. package/templates/distribution/fonts/PlusJakartaSans-Medium.ttf +0 -0
  373. package/templates/distribution/fonts/PlusJakartaSans-Regular.ttf +0 -0
  374. package/templates/distribution/fonts/PlusJakartaSans-SemiBold.ttf +0 -0
  375. package/templates/distribution/fonts/README.md +36 -0
  376. package/templates/distribution/fonts/SpaceGrotesk-Variable.ttf +0 -0
  377. package/templates/distribution/fonts/handwritten/Caveat.ttf +0 -0
  378. package/templates/distribution/fonts/legacy/IBMPlexMono-Regular.otf +0 -0
  379. package/templates/distribution/fonts/legacy/Inter-Medium.otf +0 -0
  380. package/templates/distribution/fonts/legacy/Inter-Regular.otf +0 -0
  381. package/templates/distribution/fonts/legacy/Inter-SemiBold.otf +0 -0
  382. package/templates/distribution/fonts/legacy/InterDisplay-SemiBold.otf +0 -0
  383. package/templates/distribution/fonts/legacy/SourceSerif4-Regular.otf +0 -0
  384. package/templates/distribution/fonts/legacy/SourceSerif4-Semibold.otf +0 -0
  385. package/templates/distribution/icons/activity.svg +15 -0
  386. package/templates/distribution/icons/alert-triangle.svg +17 -0
  387. package/templates/distribution/icons/book-open.svg +16 -0
  388. package/templates/distribution/icons/bot.svg +20 -0
  389. package/templates/distribution/icons/brain.svg +22 -0
  390. package/templates/distribution/icons/circle-check.svg +16 -0
  391. package/templates/distribution/icons/clipboard-check.svg +17 -0
  392. package/templates/distribution/icons/cpu.svg +28 -0
  393. package/templates/distribution/icons/database.svg +17 -0
  394. package/templates/distribution/icons/eye.svg +16 -0
  395. package/templates/distribution/icons/file-text.svg +19 -0
  396. package/templates/distribution/icons/gauge.svg +16 -0
  397. package/templates/distribution/icons/git-branch.svg +17 -0
  398. package/templates/distribution/icons/key.svg +17 -0
  399. package/templates/distribution/icons/layers.svg +17 -0
  400. package/templates/distribution/icons/list-checks.svg +19 -0
  401. package/templates/distribution/icons/lock.svg +16 -0
  402. package/templates/distribution/icons/message-square.svg +15 -0
  403. package/templates/distribution/icons/network.svg +19 -0
  404. package/templates/distribution/icons/route.svg +17 -0
  405. package/templates/distribution/icons/scale.svg +19 -0
  406. package/templates/distribution/icons/search.svg +16 -0
  407. package/templates/distribution/icons/send.svg +16 -0
  408. package/templates/distribution/icons/server.svg +18 -0
  409. package/templates/distribution/icons/shield-check.svg +16 -0
  410. package/templates/distribution/icons/users.svg +18 -0
  411. package/templates/distribution/icons/webhook.svg +17 -0
  412. package/templates/distribution/icons/workflow.svg +17 -0
  413. package/templates/distribution/icons/wrench.svg +15 -0
  414. package/templates/distribution/run.mjs +18 -1
  415. package/templates/docs/adr.md +7 -0
  416. package/templates/docs/construct_guide.md +8 -8
  417. package/templates/docs/customer-profile.md +4 -0
  418. package/templates/docs/one-pager.md +4 -0
  419. package/templates/docs/postmortem.md +31 -0
  420. package/templates/docs/prd-platform.md +19 -0
  421. package/templates/docs/prd.md +15 -0
  422. package/templates/docs/prfaq.md +7 -0
  423. package/templates/docs/qa-strategy.md +103 -0
  424. package/templates/docs/research-brief.md +8 -0
  425. package/templates/docs/rfc-platform.md +12 -0
  426. package/templates/docs/test-plan.md +7 -0
@@ -0,0 +1,47 @@
1
+ /**
2
+ * templates/demos/playwright/demo-recording.config.mjs — Playwright config scaffold.
3
+ *
4
+ * Copied to .cx/demos/playwright.config.mjs on `construct demo init`. webServer
5
+ * command/url come from DEMO_WEB_SERVER_* env injected by recordPlaywrightDemo.
6
+ */
7
+
8
+ import { defineConfig, devices } from '@playwright/test';
9
+ import path from 'node:path';
10
+ import { fileURLToPath } from 'node:url';
11
+
12
+ const DEMO_ROOT = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..');
13
+ const DEMO_OUTPUT = process.env.DEMO_OUTPUT_DIR || path.join(DEMO_ROOT, '.cx', 'demos');
14
+
15
+ const webServerCommand = process.env.DEMO_WEB_SERVER_COMMAND;
16
+ const webServerUrl = process.env.DEMO_WEB_SERVER_URL;
17
+
18
+ export default defineConfig({
19
+ testDir: path.join(DEMO_ROOT, '.cx', 'demos', 'specs'),
20
+ timeout: 180_000,
21
+ fullyParallel: false,
22
+ workers: 1,
23
+ reporter: 'list',
24
+ use: {
25
+ baseURL: process.env.BASE_URL || webServerUrl || 'http://127.0.0.1:3456',
26
+ trace: 'off',
27
+ screenshot: 'off',
28
+ video: 'on',
29
+ viewport: { width: 1280, height: 720 },
30
+ },
31
+ projects: [
32
+ {
33
+ name: 'demo-recording',
34
+ use: { ...devices['Desktop Chrome'] },
35
+ },
36
+ ],
37
+ outputDir: DEMO_OUTPUT,
38
+ webServer: process.env.SKIP_WEBSERVER || process.env.CHECKLY || !webServerCommand
39
+ ? undefined
40
+ : {
41
+ command: webServerCommand,
42
+ url: webServerUrl || process.env.BASE_URL || 'http://127.0.0.1:3456',
43
+ reuseExistingServer: !process.env.CI,
44
+ timeout: Number(process.env.DEMO_WEB_SERVER_TIMEOUT || 120_000),
45
+ cwd: process.env.DEMO_WEB_SERVER_CWD || DEMO_ROOT,
46
+ },
47
+ });
@@ -0,0 +1,19 @@
1
+ {
2
+ "name": "agentic-platforms-prd",
3
+ "title": "Publish guardrails — agentic platforms PRD",
4
+ "engine": "playwright",
5
+ "workspace": "apps/dashboard",
6
+ "spec": "apps/dashboard/e2e/demo/agentic-platforms-prd.spec.ts",
7
+ "baseUrl": "http://127.0.0.1:4242",
8
+ "project": "demo-recording",
9
+ "artifactReveal": {
10
+ "mode": "constructPreview",
11
+ "staticDir": ".",
12
+ "file": "prd-platform.pdf",
13
+ "scroll": true
14
+ },
15
+ "output": {
16
+ "format": "mp4",
17
+ "path": ".cx/demos/dashboard/agentic-platforms-prd.mp4"
18
+ }
19
+ }
@@ -0,0 +1,44 @@
1
+ {
2
+ "name": "agentic-platforms-prd",
3
+ "title": "Publish guardrails — agentic platforms PRD",
4
+ "summary": "Prove Construct's path: workflow invoke returns a plan only, validate and publish fail on the thin stub, then pass on the golden fixture with styled PDF export.",
5
+ "systemOverlay": "Demo mode for publish guardrails. Run the exact construct CLI commands from each step using shell or construct_tool. Do not hand-author production PRD markdown in chat — the passing artifact is tests/fixtures/publish/golden-prd-platform.md. The stub is tests/fixtures/publish/agentic-platforms-stub.md.",
6
+ "tape": "agentic-platforms-prd",
7
+ "dashboardDemo": "agentic-platforms-prd",
8
+ "fallbackSurface": "tape",
9
+ "artifactReveal": {
10
+ "path": "prd-platform.pdf",
11
+ "scroll": true
12
+ },
13
+ "fixtures": {
14
+ "stub": "tests/fixtures/publish/agentic-platforms-stub.md",
15
+ "golden": "tests/fixtures/publish/golden-prd-platform.md"
16
+ },
17
+ "steps": [
18
+ {
19
+ "title": "Plan only — workflow invoke",
20
+ "prompt": "Run construct workflow invoke for prd-draft and show the specialist chain. This is plan-only — it does not draft the PRD.",
21
+ "command": "node bin/construct workflow invoke --json --workflow-type prd-draft --approval-mode proposal-only --text 'Enterprise agentic platform PRD'"
22
+ },
23
+ {
24
+ "title": "Release gate FAIL — thin stub",
25
+ "prompt": "Run artifact validate on the stub fixture with type prd-platform. It must fail (structure, visuals, citations).",
26
+ "command": "node bin/construct artifact validate tests/fixtures/publish/agentic-platforms-stub.md --type=prd-platform"
27
+ },
28
+ {
29
+ "title": "Publish FAIL — gate blocks distribution",
30
+ "prompt": "Run construct publish on the stub with --figures. Publish must exit 2 and block at the release gate.",
31
+ "command": "node bin/construct publish tests/fixtures/publish/agentic-platforms-stub.md --figures"
32
+ },
33
+ {
34
+ "title": "Golden fixture PASS — validate",
35
+ "prompt": "Run artifact validate on the golden prd-platform fixture. It must pass the release gate.",
36
+ "command": "node bin/construct artifact validate tests/fixtures/publish/golden-prd-platform.md --type=prd-platform"
37
+ },
38
+ {
39
+ "title": "Publish PASS — styled PDF",
40
+ "prompt": "Publish the golden fixture with --type=prd-platform --figures to .cx/publish/golden-prd-platform.pdf, then confirm the file exists.",
41
+ "command": "node bin/construct publish tests/fixtures/publish/golden-prd-platform.md --type=prd-platform --figures --output .cx/publish/golden-prd-platform.pdf"
42
+ }
43
+ ]
44
+ }
@@ -0,0 +1,89 @@
1
+ /**
2
+ * templates/demos/specs/_helpers/scroll-artifact.ts — shared Act 2 scroll helpers.
3
+ *
4
+ * Used by Construct cockpit demos and copied into project .cx/demos/specs/ on init.
5
+ */
6
+
7
+ import { type Page, expect } from '@playwright/test';
8
+ import fs from 'node:fs';
9
+ import path from 'node:path';
10
+
11
+ type RevealArtifactOpts = {
12
+ file?: string;
13
+ basePath?: string;
14
+ artifactDir?: string;
15
+ mode?: string;
16
+ baseUrl?: string;
17
+ };
18
+
19
+ export async function scrollPdfViewer(page: Page) {
20
+ await page.waitForTimeout(1500);
21
+ const viewer = page.locator('embed[type="application/pdf"], #viewer, pdf-viewer');
22
+ if (await viewer.count()) {
23
+ await viewer.first().click({ timeout: 5000 }).catch(() => page.mouse.click(640, 360));
24
+ } else {
25
+ await page.mouse.click(640, 360);
26
+ }
27
+ await page.waitForTimeout(800);
28
+
29
+ for (let i = 0; i < 8; i += 1) {
30
+ await page.keyboard.press('PageDown');
31
+ await page.waitForTimeout(900);
32
+ }
33
+ await page.waitForTimeout(1500);
34
+ }
35
+
36
+ export async function scrollPage(page: Page, { steps = 10, delta = 500, pauseMs = 700 } = {}) {
37
+ await page.waitForTimeout(1000);
38
+ for (let i = 0; i < steps; i += 1) {
39
+ await page.mouse.wheel(0, delta);
40
+ await page.waitForTimeout(pauseMs);
41
+ }
42
+ await page.waitForTimeout(1000);
43
+ }
44
+
45
+ export async function revealArtifact(page: Page, {
46
+ file,
47
+ basePath = '/demo-preview',
48
+ artifactDir = process.env.CONSTRUCT_DEMO_ARTIFACT_DIR || '',
49
+ mode = process.env.DEMO_ARTIFACT_REVEAL_MODE || 'constructPreview',
50
+ baseUrl = process.env.BASE_URL || '',
51
+ }: RevealArtifactOpts = {}) {
52
+ const artifactFile = file || process.env.DEMO_ARTIFACT_FILE || '';
53
+ const dir = artifactDir;
54
+ const artifactPath = dir && artifactFile ? path.join(dir, artifactFile) : '';
55
+ if (!artifactFile || !dir || !fs.existsSync(artifactPath)) {
56
+ return;
57
+ }
58
+
59
+ const encoded = encodeURIComponent(artifactFile);
60
+ const url = mode === 'sameOrigin' && baseUrl
61
+ ? `${baseUrl.replace(/\/$/, '')}/${encoded}`
62
+ : `${basePath}/${encoded}`;
63
+
64
+ await page.goto(url);
65
+ await page.waitForLoadState('domcontentloaded');
66
+
67
+ let usedPdf = true;
68
+ try {
69
+ await expect(page).toHaveURL(new RegExp(artifactFile.replace('.', '\\.')));
70
+ await scrollPdfViewer(page);
71
+ } catch {
72
+ usedPdf = false;
73
+ const htmlName = artifactFile.replace(/\.pdf$/i, '.html');
74
+ const htmlPath = path.join(dir, htmlName);
75
+ if (!fs.existsSync(htmlPath)) {
76
+ throw new Error(`PDF viewer scroll failed and HTML fallback missing: ${htmlPath}`);
77
+ }
78
+ const htmlUrl = mode === 'sameOrigin' && baseUrl
79
+ ? `${baseUrl.replace(/\/$/, '')}/${encodeURIComponent(htmlName)}`
80
+ : `${basePath}/${encodeURIComponent(htmlName)}`;
81
+ await page.goto(htmlUrl);
82
+ await page.waitForLoadState('domcontentloaded');
83
+ await scrollPage(page);
84
+ }
85
+
86
+ if (!usedPdf && process.env.CI) {
87
+ throw new Error('PDF viewer automation failed on CI; HTML fallback used — fix PDF scroll selectors');
88
+ }
89
+ }
@@ -0,0 +1,49 @@
1
+ Require node
2
+ Require vhs
3
+ # construct demo: publish guardrails via construct chat cockpit (violet theme)
4
+ Output .cx/demos/agentic-platforms-prd.mp4
5
+ Set FontSize 18
6
+ Set Width 1200
7
+ Set Height 720
8
+ Set Theme {"name":"Construct Cockpit","background":"#0c1018","foreground":"#e8eaed","cursor":"#8b5cf6","cursorAccent":"#0c1018","selection":"#1e1b4b","black":"#0c1018","red":"#e06c75","green":"#98c379","yellow":"#e5c07b","blue":"#8b5cf6","magenta":"#c4b5fd","cyan":"#a78bfa","white":"#e8eaed","brightBlack":"#6b7280","brightRed":"#f87171","brightGreen":"#86efac","brightYellow":"#fbbf24","brightBlue":"#a78bfa","brightMagenta":"#ddd6fe","brightCyan":"#c4b5fd","brightWhite":"#ffffff"}
9
+ Set TypingSpeed 42ms
10
+
11
+ Type "node bin/construct chat --demo=agentic-platforms-prd --plain"
12
+ Sleep 800ms
13
+ Enter
14
+ Sleep 3s
15
+
16
+ Type "/demo steps"
17
+ Sleep 400ms
18
+ Enter
19
+ Sleep 2s
20
+
21
+ Type "/demo next"
22
+ Sleep 400ms
23
+ Enter
24
+ Sleep 2s
25
+
26
+ Type "/demo next"
27
+ Sleep 400ms
28
+ Enter
29
+ Sleep 2s
30
+
31
+ Type "/demo next"
32
+ Sleep 400ms
33
+ Enter
34
+ Sleep 2s
35
+
36
+ Type "/demo next"
37
+ Sleep 400ms
38
+ Enter
39
+ Sleep 2s
40
+
41
+ Type "/demo next"
42
+ Sleep 400ms
43
+ Enter
44
+ Sleep 2s
45
+
46
+ Type "/exit"
47
+ Sleep 400ms
48
+ Enter
49
+ Sleep 1s
@@ -0,0 +1,49 @@
1
+ Require node
2
+ Require vhs
3
+ # construct demo: resource guard rails — disk budget walkthrough
4
+ Output .cx/demos/resource-guard-rails.mp4
5
+ Set FontSize 18
6
+ Set Width 1200
7
+ Set Height 680
8
+ Set Theme "Dracula"
9
+ Set TypingSpeed 55ms
10
+
11
+ Type "# 1) Show .cx/ usage vs cap in doctor"
12
+ Sleep 400ms
13
+ Enter
14
+ Sleep 800ms
15
+
16
+ Type "node bin/construct doctor 2>&1 | tail -25"
17
+ Sleep 400ms
18
+ Enter
19
+ Sleep 3s
20
+
21
+ Type "# 2) Preview retention prune (dry-run)"
22
+ Sleep 400ms
23
+ Enter
24
+ Sleep 800ms
25
+
26
+ Type "node bin/construct prune --dry-run"
27
+ Sleep 400ms
28
+ Enter
29
+ Sleep 2s
30
+
31
+ Type "# 3) Run resource budget functional test"
32
+ Sleep 400ms
33
+ Enter
34
+ Sleep 800ms
35
+
36
+ Type "node --test tests/functional/resource-write-guard.functional.test.mjs"
37
+ Sleep 400ms
38
+ Enter
39
+ Sleep 3s
40
+
41
+ Type "# 4) User-scope cleanup (logs + pressure)"
42
+ Sleep 400ms
43
+ Enter
44
+ Sleep 800ms
45
+
46
+ Type "node bin/construct cleanup --disk-only --dry-run"
47
+ Sleep 400ms
48
+ Enter
49
+ Sleep 2s
@@ -0,0 +1,24 @@
1
+ {
2
+ "name": "Construct Cockpit",
3
+ "background": "#0a0c10",
4
+ "foreground": "#e8eaed",
5
+ "cursor": "#ffffff",
6
+ "cursorAccent": "#0a0c10",
7
+ "selection": "#23272e",
8
+ "black": "#0a0c10",
9
+ "red": "#e06c75",
10
+ "green": "#98c379",
11
+ "yellow": "#e5c07b",
12
+ "blue": "#8a93a3",
13
+ "magenta": "#b8bec8",
14
+ "cyan": "#aab2bd",
15
+ "white": "#e8eaed",
16
+ "brightBlack": "#565c66",
17
+ "brightRed": "#f87171",
18
+ "brightGreen": "#86efac",
19
+ "brightYellow": "#fbbf24",
20
+ "brightBlue": "#cdd0d6",
21
+ "brightMagenta": "#e3e4e8",
22
+ "brightCyan": "#d6dae0",
23
+ "brightWhite": "#ffffff"
24
+ }