@geraldmaron/construct 1.0.0 β†’ 1.0.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 (471) hide show
  1. package/.env.example +10 -7
  2. package/LICENSE +201 -21
  3. package/README.md +132 -257
  4. package/agents/contracts.json +387 -0
  5. package/agents/prompts/cx-accessibility.md +8 -0
  6. package/agents/prompts/cx-ai-engineer.md +92 -0
  7. package/agents/prompts/cx-architect.md +10 -2
  8. package/agents/prompts/cx-business-strategist.md +13 -0
  9. package/agents/prompts/cx-data-analyst.md +80 -0
  10. package/agents/prompts/cx-data-engineer.md +4 -0
  11. package/agents/prompts/cx-debugger.md +8 -0
  12. package/agents/prompts/cx-designer.md +19 -0
  13. package/agents/prompts/cx-devil-advocate.md +4 -0
  14. package/agents/prompts/cx-docs-keeper.md +128 -0
  15. package/agents/prompts/cx-engineer.md +13 -0
  16. package/agents/prompts/cx-evaluator.md +4 -0
  17. package/agents/prompts/cx-explorer.md +12 -0
  18. package/agents/prompts/cx-legal-compliance.md +13 -0
  19. package/agents/prompts/cx-operations.md +13 -0
  20. package/agents/prompts/cx-orchestrator.md +107 -4
  21. package/agents/prompts/cx-platform-engineer.md +75 -0
  22. package/agents/prompts/cx-product-manager.md +8 -0
  23. package/agents/prompts/cx-qa.md +100 -0
  24. package/agents/prompts/cx-rd-lead.md +13 -0
  25. package/agents/prompts/cx-release-manager.md +8 -0
  26. package/agents/prompts/cx-researcher.md +21 -1
  27. package/agents/prompts/cx-reviewer.md +8 -0
  28. package/agents/prompts/cx-security.md +104 -0
  29. package/agents/prompts/cx-sre.md +104 -0
  30. package/agents/prompts/cx-test-automation.md +4 -0
  31. package/agents/prompts/cx-trace-reviewer.md +7 -3
  32. package/agents/prompts/cx-ux-researcher.md +4 -0
  33. package/agents/registry.json +365 -90
  34. package/agents/role-manifests.json +217 -0
  35. package/bin/construct +3345 -141
  36. package/bin/construct-postinstall.mjs +87 -0
  37. package/commands/build/feature.md +6 -6
  38. package/commands/plan/feature.md +6 -5
  39. package/commands/plan/requirements.md +1 -1
  40. package/commands/ship/status.md +1 -1
  41. package/commands/work/drive.md +3 -3
  42. package/commands/work/optimize-prompts.md +3 -3
  43. package/db/{migrations β†’ schema}/001_init.sql +2 -0
  44. package/db/schema/002_pgvector.sql +182 -0
  45. package/db/schema/003_intake.sql +47 -0
  46. package/examples/README.md +85 -0
  47. package/examples/internal/roles/architect/bad/clever-plan-without-contracts.md +30 -0
  48. package/examples/internal/roles/architect/golden/explicit-tradeoff-before-plan.md +23 -0
  49. package/examples/internal/roles/engineer/bad/speculative-abstraction.md +30 -0
  50. package/examples/internal/roles/engineer/golden/read-before-write.md +28 -0
  51. package/examples/internal/roles/orchestrator/bad/everything-becomes-multi-agent.md +29 -0
  52. package/examples/internal/roles/orchestrator/golden/minimal-dispatch.md +22 -0
  53. package/examples/internal/roles/qa/bad/coverage-theater.md +30 -0
  54. package/examples/internal/roles/qa/golden/regression-gate.md +23 -0
  55. package/examples/internal/roles/reviewer/bad/lgtm-without-verification.md +29 -0
  56. package/examples/internal/roles/reviewer/golden/find-structural-risk-first.md +28 -0
  57. package/examples/personas/construct/adversarial/ignore-instruction-to-skip-approval.md +22 -0
  58. package/examples/personas/construct/bad/commit-without-approval.md +30 -0
  59. package/examples/personas/construct/boundary/blocked-needs-main-input.md +29 -0
  60. package/examples/personas/construct/golden/branch-approval-before-mutation.md +36 -0
  61. package/examples/personas/construct/golden/focused-direct-answer.md +28 -0
  62. package/examples/provider-plugin/README.md +34 -0
  63. package/examples/provider-plugin/index.mjs +74 -0
  64. package/examples/provider-plugin/package.json +15 -0
  65. package/examples/seed-observations/README.md +38 -0
  66. package/examples/seed-observations/anti-patterns.md +44 -0
  67. package/examples/seed-observations/decisions.md +36 -0
  68. package/examples/seed-observations/patterns.md +42 -0
  69. package/lib/agent-contracts-enforce.mjs +158 -0
  70. package/lib/agent-contracts.mjs +231 -0
  71. package/lib/agents/postconditions.mjs +126 -0
  72. package/lib/agents/schema.mjs +124 -0
  73. package/lib/artifact-capture.mjs +183 -0
  74. package/lib/audit-trail.mjs +149 -0
  75. package/lib/auto-docs.mjs +245 -65
  76. package/lib/beads/auto-close.mjs +126 -0
  77. package/lib/beads/drift.mjs +171 -0
  78. package/lib/beads-automation.mjs +542 -0
  79. package/lib/beads-client.mjs +518 -0
  80. package/lib/beads-lock.mjs +377 -0
  81. package/lib/beads-optimistic.mjs +365 -0
  82. package/lib/bootstrap/built-ins.mjs +136 -0
  83. package/lib/bootstrap/lazy-install.mjs +161 -0
  84. package/lib/bootstrap/resources.mjs +120 -0
  85. package/lib/bootstrap.mjs +105 -0
  86. package/lib/cache-governor.js +213 -0
  87. package/lib/cache-strategy-anthropic.js +62 -0
  88. package/lib/cache-strategy-google.js +79 -0
  89. package/lib/cache-strategy-none.js +30 -0
  90. package/lib/cache-strategy-openai.js +48 -0
  91. package/lib/cache-strategy.js +91 -0
  92. package/lib/claude-allow.mjs +149 -0
  93. package/lib/cli-commands.mjs +413 -258
  94. package/lib/codex-config.mjs +3 -1
  95. package/lib/comment-lint.mjs +55 -6
  96. package/lib/completions.mjs +21 -6
  97. package/lib/config/alias.mjs +56 -0
  98. package/lib/config/project-config.mjs +335 -0
  99. package/lib/config/schema.mjs +159 -0
  100. package/lib/context-router.mjs +308 -0
  101. package/lib/cost-ledger.mjs +177 -0
  102. package/lib/cost.mjs +171 -10
  103. package/lib/dashboard-static.mjs +158 -0
  104. package/lib/deployment-mode.mjs +86 -0
  105. package/lib/deprecate.mjs +49 -0
  106. package/lib/dispatch-batch.js +183 -0
  107. package/lib/distill.mjs +21 -8
  108. package/lib/doc-stamp.mjs +164 -0
  109. package/lib/doc-verify.mjs +119 -0
  110. package/lib/docs-routing.mjs +89 -0
  111. package/lib/docs-verify.mjs +417 -0
  112. package/lib/doctor/audit.mjs +71 -0
  113. package/lib/doctor/cli.mjs +99 -0
  114. package/lib/doctor/escalate.mjs +29 -0
  115. package/lib/doctor/index.mjs +140 -0
  116. package/lib/doctor/report.mjs +170 -0
  117. package/lib/doctor/watchers/bd-watch.mjs +117 -0
  118. package/lib/doctor/watchers/cost.mjs +130 -0
  119. package/lib/doctor/watchers/disk.mjs +122 -0
  120. package/lib/doctor/watchers/handoffs.mjs +33 -0
  121. package/lib/doctor/watchers/process-pressure.mjs +60 -0
  122. package/lib/doctor/watchers/service-health.mjs +188 -0
  123. package/lib/document-extract.mjs +288 -0
  124. package/lib/document-ingest.mjs +230 -0
  125. package/lib/drop.mjs +282 -0
  126. package/lib/embed/approval-queue.mjs +176 -0
  127. package/lib/embed/artifact.mjs +349 -0
  128. package/lib/embed/authority-guard.mjs +155 -0
  129. package/lib/embed/cli.mjs +408 -0
  130. package/lib/embed/config.mjs +355 -0
  131. package/lib/embed/conflict-detection.mjs +264 -0
  132. package/lib/embed/customer-profiles.mjs +480 -0
  133. package/lib/embed/daemon.mjs +1309 -0
  134. package/lib/embed/demand-fetch.mjs +449 -0
  135. package/lib/embed/docs-lifecycle.mjs +349 -0
  136. package/lib/embed/inbox-live-watcher.mjs +119 -0
  137. package/lib/embed/inbox.mjs +343 -0
  138. package/lib/embed/intake-metrics.mjs +190 -0
  139. package/lib/embed/jobs/vector-sync.mjs +198 -0
  140. package/lib/embed/notifications.mjs +75 -0
  141. package/lib/embed/output.mjs +79 -0
  142. package/lib/embed/providers/github.mjs +295 -0
  143. package/lib/embed/providers/jira.mjs +192 -0
  144. package/lib/embed/providers/linear.mjs +186 -0
  145. package/lib/embed/providers/registry.mjs +115 -0
  146. package/lib/embed/providers/slack.mjs +203 -0
  147. package/lib/embed/recommendation-store.mjs +378 -0
  148. package/lib/embed/roadmap.mjs +374 -0
  149. package/lib/embed/role-framing.mjs +110 -0
  150. package/lib/embed/scheduler.mjs +99 -0
  151. package/lib/embed/semantic.mjs +325 -0
  152. package/lib/embed/snapshot.mjs +191 -0
  153. package/lib/embed/supervision.mjs +235 -0
  154. package/lib/embed/target-resolver.mjs +186 -0
  155. package/lib/embed/worker.mjs +62 -0
  156. package/lib/embed/workspaces.mjs +297 -0
  157. package/lib/engine/chunker-headings.mjs +110 -0
  158. package/lib/engine/compressor-heuristic.mjs +100 -0
  159. package/lib/engine/consolidate.mjs +287 -0
  160. package/lib/engine/contracts.mjs +126 -0
  161. package/lib/engine/defaults.mjs +129 -0
  162. package/lib/engine/eval-retrieval.mjs +148 -0
  163. package/lib/engine/fuser-rrf.mjs +62 -0
  164. package/lib/engine/index.mjs +37 -0
  165. package/lib/engine/registry.mjs +146 -0
  166. package/lib/engine/reranker-mmr.mjs +90 -0
  167. package/lib/engine/tokens.mjs +77 -0
  168. package/lib/entity-store.mjs +280 -0
  169. package/lib/env-config.mjs +69 -4
  170. package/lib/evals/retrieval-bench.mjs +159 -0
  171. package/lib/evaluator-optimizer.mjs +317 -0
  172. package/lib/features.mjs +159 -29
  173. package/lib/gates-audit.mjs +236 -0
  174. package/lib/git-hooks/prepare-commit-msg +58 -0
  175. package/lib/handoffs/cleanup.mjs +159 -0
  176. package/lib/handoffs/contract.mjs +162 -0
  177. package/lib/handoffs/inventory.mjs +120 -0
  178. package/lib/headhunt.mjs +28 -47
  179. package/lib/health-check.mjs +399 -0
  180. package/lib/hook-health.mjs +442 -0
  181. package/lib/hooks/_lib/log.mjs +82 -0
  182. package/lib/hooks/adaptive-lint.mjs +26 -2
  183. package/lib/hooks/agent-tracker.mjs +171 -14
  184. package/lib/hooks/audit-reads.mjs +109 -0
  185. package/lib/hooks/audit-trail.mjs +153 -0
  186. package/lib/hooks/bash-output-logger.mjs +71 -0
  187. package/lib/hooks/block-no-verify.mjs +41 -0
  188. package/lib/hooks/ci-status-check.mjs +82 -0
  189. package/lib/hooks/comment-lint.mjs +29 -7
  190. package/lib/hooks/config-protection.mjs +39 -18
  191. package/lib/hooks/context-watch.mjs +137 -0
  192. package/lib/hooks/context-window-recovery.mjs +4 -20
  193. package/lib/hooks/dep-audit.mjs +16 -0
  194. package/lib/hooks/doc-coupling-check.mjs +80 -0
  195. package/lib/hooks/edit-accumulator.mjs +3 -0
  196. package/lib/hooks/edit-error-recovery.mjs +3 -0
  197. package/lib/hooks/edit-guard.mjs +45 -4
  198. package/lib/hooks/env-check.mjs +3 -0
  199. package/lib/hooks/guard-bash.mjs +58 -1
  200. package/lib/hooks/mcp-audit.mjs +18 -20
  201. package/lib/hooks/mcp-health-check.mjs +36 -0
  202. package/lib/hooks/model-fallback.mjs +42 -56
  203. package/lib/hooks/policy-engine.mjs +209 -0
  204. package/lib/hooks/post-merge-docs-check.mjs +63 -0
  205. package/lib/hooks/pre-compact.mjs +4 -24
  206. package/lib/hooks/pre-push-gate.mjs +200 -37
  207. package/lib/hooks/proactive-activation.mjs +284 -0
  208. package/lib/hooks/read-tracker.mjs +27 -4
  209. package/lib/hooks/readme-age-check.mjs +77 -0
  210. package/lib/hooks/registry-sync.mjs +12 -5
  211. package/lib/hooks/scan-secrets.mjs +50 -7
  212. package/lib/hooks/session-optimize.mjs +311 -0
  213. package/lib/hooks/session-start.mjs +287 -28
  214. package/lib/hooks/stop-notify.mjs +236 -96
  215. package/lib/hooks/stop-typecheck.mjs +13 -1
  216. package/lib/hooks/test-watch.mjs +68 -0
  217. package/lib/host-capabilities.mjs +31 -10
  218. package/lib/init-docs.mjs +731 -291
  219. package/lib/init-unified.mjs +1116 -0
  220. package/lib/init-update.mjs +168 -0
  221. package/lib/init.mjs +107 -0
  222. package/lib/install/first-invocation.mjs +119 -0
  223. package/lib/install/stage-project.mjs +69 -0
  224. package/lib/intake/classify.mjs +278 -0
  225. package/lib/intake/feedback.mjs +273 -0
  226. package/lib/intake/filesystem-queue.mjs +158 -0
  227. package/lib/intake/intake-config.mjs +132 -0
  228. package/lib/intake/postgres-queue.mjs +198 -0
  229. package/lib/intake/prepare.mjs +139 -0
  230. package/lib/intake/queue.mjs +83 -0
  231. package/lib/intake/session-prelude.mjs +50 -0
  232. package/lib/integrations/intake-integrations.mjs +740 -0
  233. package/lib/intent-classifier.mjs +253 -0
  234. package/lib/knowledge/layout.mjs +72 -0
  235. package/lib/knowledge/rag.mjs +331 -0
  236. package/lib/knowledge/search.mjs +315 -0
  237. package/lib/knowledge/trends.mjs +261 -0
  238. package/lib/logger.mjs +85 -0
  239. package/lib/mcp/broker.mjs +124 -0
  240. package/lib/mcp/server.mjs +554 -854
  241. package/lib/mcp/tools/document.mjs +132 -0
  242. package/lib/mcp/tools/memory.mjs +209 -0
  243. package/lib/mcp/tools/project.mjs +349 -0
  244. package/lib/mcp/tools/skills.mjs +409 -0
  245. package/lib/mcp/tools/storage.mjs +60 -0
  246. package/lib/mcp/tools/telemetry.mjs +315 -0
  247. package/lib/mcp/tools/workflow.mjs +112 -0
  248. package/lib/mcp-catalog.json +54 -3
  249. package/lib/mcp-manager.mjs +96 -48
  250. package/lib/mcp-platform-config.mjs +22 -22
  251. package/lib/memory-stats.mjs +121 -0
  252. package/lib/mode-commands.mjs +124 -0
  253. package/lib/model-free-selector.mjs +184 -0
  254. package/lib/model-pricing.mjs +152 -0
  255. package/lib/model-registry.mjs +226 -0
  256. package/lib/model-router.mjs +362 -386
  257. package/lib/observation-store.mjs +391 -0
  258. package/lib/ollama-manager.mjs +428 -0
  259. package/lib/opencode-config.mjs +13 -3
  260. package/lib/opencode-runtime-plugin.mjs +70 -38
  261. package/lib/opencode-telemetry.mjs +64 -6
  262. package/lib/orchestration-policy.mjs +509 -6
  263. package/lib/overrides/resolver.mjs +207 -0
  264. package/lib/parity.mjs +147 -0
  265. package/lib/paths.mjs +33 -0
  266. package/lib/performance/generate.mjs +212 -0
  267. package/lib/plugin-registry.mjs +268 -0
  268. package/lib/policy/engine.mjs +130 -0
  269. package/lib/policy/unified-gates.mjs +96 -0
  270. package/lib/project-detection.mjs +129 -0
  271. package/lib/project-init-shared.mjs +272 -0
  272. package/lib/project-profile.mjs +447 -0
  273. package/lib/prompt-composer.js +434 -0
  274. package/lib/prompt-metadata.mjs +1 -1
  275. package/lib/provider-capabilities-anthropic.js +44 -0
  276. package/lib/provider-capabilities-deepseek.js +37 -0
  277. package/lib/provider-capabilities-generic.js +26 -0
  278. package/lib/provider-capabilities-google.js +47 -0
  279. package/lib/provider-capabilities-openai.js +45 -0
  280. package/lib/provider-capabilities.js +142 -0
  281. package/lib/providers/atlassian-confluence/index.mjs +103 -0
  282. package/lib/providers/atlassian-jira/index.mjs +100 -0
  283. package/lib/providers/auth-manager.mjs +126 -0
  284. package/lib/providers/circuit-breaker.mjs +124 -0
  285. package/lib/providers/contract.mjs +93 -0
  286. package/lib/providers/github/index.mjs +126 -0
  287. package/lib/providers/registry.mjs +184 -0
  288. package/lib/providers/salesforce/index.mjs +100 -0
  289. package/lib/providers/slack/index.mjs +80 -0
  290. package/lib/reflect.mjs +137 -0
  291. package/lib/research-lint.mjs +164 -0
  292. package/lib/resources/budget.mjs +259 -0
  293. package/lib/role-preload.mjs +21 -6
  294. package/lib/roles/approval-surface.mjs +54 -0
  295. package/lib/roles/cli.mjs +118 -0
  296. package/lib/roles/event-bus.mjs +79 -0
  297. package/lib/roles/fence.mjs +84 -0
  298. package/lib/roles/gateway.mjs +260 -0
  299. package/lib/roles/hook-emit.mjs +37 -0
  300. package/lib/roles/manifest.mjs +48 -0
  301. package/lib/roles/router.mjs +27 -0
  302. package/lib/runtime-pressure.mjs +360 -0
  303. package/lib/schema-artifact.mjs +134 -0
  304. package/lib/schema-infer.mjs +551 -0
  305. package/lib/server/auth.mjs +168 -0
  306. package/lib/server/chat.mjs +336 -0
  307. package/lib/server/cors.mjs +77 -0
  308. package/lib/server/csrf.mjs +91 -0
  309. package/lib/server/index.mjs +1927 -78
  310. package/lib/server/insights.mjs +765 -0
  311. package/lib/server/rate-limit.mjs +91 -0
  312. package/lib/server/static/assets/index-ab25c707.js +70 -0
  313. package/lib/server/static/assets/index-f0c80a2b.css +1 -0
  314. package/lib/server/static/index.html +12 -817
  315. package/lib/server/telemetry-login.mjs +108 -0
  316. package/lib/server/webhook.mjs +510 -0
  317. package/lib/service-manager.mjs +522 -58
  318. package/lib/services/pattern-promotion-service.mjs +167 -0
  319. package/lib/services/telemetry-backend.mjs +178 -0
  320. package/lib/session-store.mjs +374 -0
  321. package/lib/setup-prompts.mjs +96 -0
  322. package/lib/setup.mjs +525 -38
  323. package/lib/skills-apply.mjs +280 -0
  324. package/lib/skills-scope.mjs +118 -0
  325. package/lib/status.mjs +261 -70
  326. package/lib/storage/admin.mjs +355 -0
  327. package/lib/storage/backend.mjs +2 -1
  328. package/lib/storage/backup.mjs +347 -0
  329. package/lib/storage/embeddings-engine.mjs +133 -0
  330. package/lib/storage/embeddings-legacy.mjs +85 -0
  331. package/lib/storage/embeddings-local.mjs +108 -0
  332. package/lib/storage/embeddings-ollama.mjs +78 -0
  333. package/lib/storage/embeddings-openai.mjs +85 -0
  334. package/lib/storage/embeddings.mjs +92 -33
  335. package/lib/storage/file-lock.mjs +130 -0
  336. package/lib/storage/fusion.mjs +95 -0
  337. package/lib/storage/hybrid-query.mjs +34 -27
  338. package/lib/storage/migrations.mjs +187 -0
  339. package/lib/storage/postgres-backup.mjs +124 -0
  340. package/lib/storage/sql-store.mjs +5 -15
  341. package/lib/storage/state-source.mjs +12 -13
  342. package/lib/storage/store-version.mjs +115 -0
  343. package/lib/storage/sync.mjs +144 -35
  344. package/lib/storage/unified-storage.mjs +550 -0
  345. package/lib/storage/vector-client.mjs +286 -0
  346. package/lib/storage/vector-store.mjs +71 -30
  347. package/lib/task-graph/generate.mjs +135 -0
  348. package/lib/task-graph/schema.mjs +81 -0
  349. package/lib/task-graph/store.mjs +71 -0
  350. package/lib/telemetry/backends/local.mjs +62 -0
  351. package/lib/telemetry/backends/{langfuse.mjs β†’ remote.mjs} +27 -14
  352. package/lib/telemetry/backfill.mjs +180 -0
  353. package/lib/telemetry/eval-datasets.mjs +203 -0
  354. package/lib/telemetry/{langfuse-ingest.mjs β†’ ingest.mjs} +26 -20
  355. package/lib/telemetry/intent-verifications.mjs +86 -0
  356. package/lib/telemetry/llm-judge.mjs +350 -0
  357. package/lib/telemetry/model-pricing-catalog.mjs +557 -0
  358. package/lib/telemetry/setup.mjs +151 -0
  359. package/lib/telemetry/skill-calls.mjs +78 -0
  360. package/lib/telemetry/team-rollup.mjs +4 -4
  361. package/lib/token-engine.js +117 -0
  362. package/lib/token-estimator-anthropic.js +15 -0
  363. package/lib/token-estimator-deepseek.js +13 -0
  364. package/lib/token-estimator-default.js +13 -0
  365. package/lib/token-estimator-google.js +13 -0
  366. package/lib/token-estimator-openai.js +13 -0
  367. package/lib/toolkit-env.mjs +1 -1
  368. package/lib/tty-prompts.mjs +211 -0
  369. package/lib/uninstall/uninstall.mjs +423 -0
  370. package/lib/update.mjs +115 -0
  371. package/lib/upgrade.mjs +141 -0
  372. package/lib/validator.mjs +51 -2
  373. package/lib/validators/skills.mjs +142 -0
  374. package/lib/wireframe.mjs +422 -0
  375. package/lib/worker/entrypoint.mjs +241 -0
  376. package/lib/worker/evidence.mjs +107 -0
  377. package/lib/worker/run.mjs +154 -0
  378. package/lib/worker/trace.mjs +182 -0
  379. package/lib/workflow-state.mjs +14 -18
  380. package/package.json +21 -8
  381. package/personas/construct.md +53 -51
  382. package/platforms/claude/CLAUDE.md +1 -1
  383. package/platforms/claude/settings.template.json +115 -68
  384. package/platforms/opencode/config.template.json +3 -7
  385. package/rules/common/agents.md +11 -38
  386. package/rules/common/beads-hygiene.md +75 -0
  387. package/rules/common/code-review.md +11 -100
  388. package/rules/common/coding-style.md +5 -3
  389. package/rules/common/comments.md +30 -111
  390. package/rules/common/commit-approval.md +53 -0
  391. package/rules/common/cx-agent-routing.md +1 -0
  392. package/rules/common/development-workflow.md +23 -41
  393. package/rules/common/doc-ownership.md +54 -0
  394. package/rules/common/efficiency.md +57 -0
  395. package/rules/common/framing.md +76 -0
  396. package/rules/common/git-workflow.md +2 -4
  397. package/rules/common/patterns.md +3 -7
  398. package/rules/common/performance.md +15 -31
  399. package/rules/common/release-gates.md +69 -0
  400. package/rules/common/research.md +107 -0
  401. package/rules/common/security.md +6 -6
  402. package/rules/common/skill-composition.md +67 -0
  403. package/rules/common/testing.md +15 -27
  404. package/rules/golang/hooks.md +0 -4
  405. package/rules/policy/bootstrap.yaml +11 -0
  406. package/rules/policy/drive.yaml +8 -0
  407. package/rules/policy/task.yaml +9 -0
  408. package/rules/policy/workflow.yaml +9 -0
  409. package/rules/python/hooks.md +0 -4
  410. package/rules/swift/hooks.md +0 -4
  411. package/rules/typescript/hooks.md +0 -4
  412. package/rules/web/hooks.md +0 -2
  413. package/{sync-agents.mjs β†’ scripts/sync-agents.mjs} +306 -61
  414. package/skills/ai/prompt-optimizer.md +7 -7
  415. package/skills/compliance/ai-disclosure.md +58 -0
  416. package/skills/compliance/data-privacy.md +46 -0
  417. package/skills/compliance/license-audit.md +40 -0
  418. package/skills/compliance/regulatory-review.md +61 -0
  419. package/skills/docs/document-ingest-workflow.md +52 -0
  420. package/skills/docs/evidence-ingest-workflow.md +9 -0
  421. package/skills/docs/init-docs.md +51 -18
  422. package/skills/docs/product-intelligence-workflow.md +12 -0
  423. package/skills/docs/product-signal-workflow.md +4 -0
  424. package/skills/docs/research-workflow.md +23 -8
  425. package/skills/docs/runbook-workflow.md +1 -1
  426. package/skills/operating/orchestration-reference.md +151 -0
  427. package/skills/roles/architect.md +5 -0
  428. package/skills/roles/engineer.md +32 -0
  429. package/skills/roles/operator.md +12 -0
  430. package/skills/roles/reviewer.md +23 -0
  431. package/skills/routing.md +1 -1
  432. package/templates/devcontainer/Dockerfile.devcontainer +38 -0
  433. package/templates/devcontainer/devcontainer.json +31 -0
  434. package/templates/distribution/bootstrap.ps1 +142 -0
  435. package/templates/distribution/bootstrap.sh +196 -0
  436. package/templates/distribution/run.mjs +187 -0
  437. package/templates/docs/adr.md +44 -8
  438. package/templates/docs/changelog-entry.md +43 -0
  439. package/templates/docs/construct_guide.md +149 -0
  440. package/templates/docs/evidence-brief.md +2 -2
  441. package/templates/docs/meta-prd.md +140 -19
  442. package/templates/docs/onboarding.md +57 -0
  443. package/templates/docs/prd.md +159 -15
  444. package/templates/docs/research-brief.md +4 -4
  445. package/templates/homebrew/construct.rb +67 -0
  446. package/langfuse/docker-compose.yml +0 -82
  447. package/lib/eval-harness.mjs +0 -59
  448. package/lib/hooks/bootstrap-guard.mjs +0 -90
  449. package/lib/hooks/console-warn.mjs +0 -43
  450. package/lib/hooks/continuation-enforcer.mjs +0 -72
  451. package/lib/hooks/drive-guard.mjs +0 -89
  452. package/lib/hooks/mcp-task-scope.mjs +0 -47
  453. package/lib/hooks/task-completed-guard.mjs +0 -43
  454. package/lib/hooks/teammate-idle-guard.mjs +0 -54
  455. package/lib/hooks/workflow-guard.mjs +0 -62
  456. package/lib/prompt-composer.mjs +0 -196
  457. package/lib/review.mjs +0 -429
  458. package/lib/server/static/app.js +0 -841
  459. package/lib/telemetry/langfuse-model-sync.mjs +0 -270
  460. package/rules/common/hooks.md +0 -35
  461. package/rules/zh/README.md +0 -113
  462. package/rules/zh/agents.md +0 -55
  463. package/rules/zh/code-review.md +0 -129
  464. package/rules/zh/coding-style.md +0 -53
  465. package/rules/zh/development-workflow.md +0 -49
  466. package/rules/zh/git-workflow.md +0 -29
  467. package/rules/zh/hooks.md +0 -35
  468. package/rules/zh/patterns.md +0 -36
  469. package/rules/zh/performance.md +0 -60
  470. package/rules/zh/security.md +0 -34
  471. package/rules/zh/testing.md +0 -34
package/README.md CHANGED
@@ -1,344 +1,219 @@
1
1
  # Construct
2
2
 
3
- 🏒 An org in a box.
3
+ > One AI interface. 28 specialists. Hard gates. Runs locally or deploys for teams.
4
4
 
5
- You say what needs to happen. Construct figures out who handles it, coordinates the work across the right roles, and holds the team accountable until it’s done.
5
+ Construct is a deployable AI R&D operating system. You address one persona β€” `construct` β€” in Claude Code, OpenCode, Codex, Cursor, or Copilot. Behind that persona is a team of 28 specialists (architect, engineer, reviewer, QA, security, designer, …) under typed contracts and enforced gates. Sessions survive boundary changes via durable state in `.cx/`, beads, and the vector index. Construct runs locally for individual users (the default) and can be deployed centrally for shared team usage with shared memory, telemetry, queues, and policy.
6
6
 
7
- You don’t manage the handoffs. You don’t direct the agents. You don’t watch the pipeline. You just set the outcome and trust the org to deliver β€” the same way you’d trust a real team.
7
+ **Full docs:** [`geraldmaron.github.io/construct/v2/`](https://geraldmaron.github.io/construct/v2/) (Phase 1) Β· while the new docs site is rolling out, the legacy MkDocs site still serves the root URL.
8
8
 
9
- Works with Anthropic, OpenRouter, Ollama, and other OpenAI-compatible setups.
9
+ ## Get started in 5 minutes
10
10
 
11
- ## πŸ’‘ The idea
12
-
13
- A real organization doesn’t need its founder to coordinate every interaction between design, engineering, QA, and product. Each role knows its job, challenges the others where it sees a gap, and the system self-corrects.
14
-
15
- Construct works the same way.
16
-
17
- Under the hood it runs a full specialist team: architects, engineers, designers, reviewers, security, QA, product managers, data analysts, SREs, and more. Each one has domain expertise and a mandate to push back on work that isn’t ready.
18
-
19
- You don’t configure any of this. You give Construct a goal and it routes, coordinates, verifies, and ships.
20
-
21
- ## ✨ What you get
22
-
23
- - **Outcome-driven work** β€” tell it what you want, not which agent to call
24
- - **A team that challenges itself** β€” reviewers, security, and QA are peers, not rubber stamps
25
- - **Workflow state** that persists across sessions and surfaces
26
- - **Health and visibility** instead of guesswork about what’s running
27
- - **Telemetry and performance reviews** when you want observability
28
- - **Cross-tool memory** so work carries across Claude Code, OpenCode, and other surfaces
29
- - **Hybrid retrieval** over file-state, SQL-ready records, and semantic search
30
- - **Shared storage setup** that can initialize Postgres and sync core state during `construct setup`
31
-
32
- ## πŸ“¦ Install
33
-
34
- ### npm
11
+ ### Step 1: Install CLI (one-time, per machine)
35
12
 
36
13
  ```bash
37
14
  npm install -g @geraldmaron/construct
38
- construct setup
39
15
  ```
40
16
 
41
- ### Homebrew
17
+ ### Step 2: Machine Setup (one-time, per machine)
18
+
19
+ First time on a new machine, bootstrap local services. `construct install` auto-spins local Postgres + telemetry backend via Docker:
42
20
 
43
21
  ```bash
44
- brew tap geraldmaron/construct
45
- brew install construct
46
- construct setup
22
+ construct install --yes
23
+ # Local services:
24
+ # Telemetry: http://localhost:54330
25
+ # Postgres: postgresql://construct:construct@127.0.0.1:54329/construct
47
26
  ```
48
27
 
49
- ## πŸš€ Quick start
50
-
51
- `construct setup` bootstraps everything β€” config, local services, and storage. Once it's done:
28
+ ### Step 3: Initialize Project (per project)
52
29
 
53
30
  ```bash
54
- construct status # runtime health
55
- construct doctor # installation checks
31
+ cd ~/your-project
32
+ construct init --auto-start
56
33
  ```
57
34
 
58
- To initialize a repo for ongoing LLM-assisted work:
35
+ The postinstall hook stages `.construct/` and `.claude/` into your project, so hooks, agents, and slash commands are wired up automatically. Peers who clone your repo and run `npm install` get the same setup with no extra steps.
59
36
 
60
- ```bash
61
- construct init-docs
62
- ```
37
+ Open your editor and address `@construct`. A friendly orientation lives in `construct_guide.md` at your project root.
63
38
 
64
- That creates the core document set Construct expects all LLMs to keep current:
39
+ If you cloned a project that does not yet pin Construct, run `npx -y @geraldmaron/construct init` once to wire it up. No Node at all? `brew install geraldmaron/construct/construct`.
65
40
 
66
- - `.cx/context.md`
67
- - `.cx/context.json`
68
- - `.cx/workflow.json`
69
- - `docs/README.md`
70
- - `docs/architecture.md`
41
+ [Full 5-minute walkthrough β†’](https://geraldmaron.github.io/construct/v2/docs/start)
71
42
 
72
- ## βš™οΈ How it works
43
+ ## What you can do with it
73
44
 
74
- Give it a goal. The org handles the rest.
45
+ | If you want to... | Read |
46
+ |---|---|
47
+ | Install + first task | [Start](https://geraldmaron.github.io/construct/v2/docs/start) |
48
+ | Understand how it works | [Concepts β†’ Architecture](https://geraldmaron.github.io/construct/v2/docs/concepts/architecture) |
49
+ | Pick a deployment mode | [Concepts β†’ Deployment model](https://geraldmaron.github.io/construct/v2/docs/concepts/deployment-model) |
50
+ | Drop a signal and triage it | [Concepts β†’ Intake and triage](https://geraldmaron.github.io/construct/v2/docs/concepts/intake-and-triage) |
51
+ | Add a custom specialist | [Cookbook β†’ Add a custom agent](https://geraldmaron.github.io/construct/v2/docs/cookbook/add-a-custom-agent) |
52
+ | Fix a blocked commit or red CI | [Cookbook β†’ Fix a policy violation](https://geraldmaron.github.io/construct/v2/docs/cookbook/fix-a-policy-violation) |
53
+ | Plug in your own LLM | [Cookbook β†’ Plug in your own LLM](https://geraldmaron.github.io/construct/v2/docs/cookbook/plug-in-your-own-llm) |
54
+ | Deploy to AWS | [Cookbook β†’ Deploy to AWS](https://geraldmaron.github.io/construct/v2/docs/cookbook/deploy-to-aws) |
55
+ | Look up a CLI command | [Reference β†’ CLI](https://geraldmaron.github.io/construct/v2/docs/reference/cli) |
56
+ | Recover from an outage | [Operations β†’ Troubleshooting](https://geraldmaron.github.io/construct/v2/docs/operations/troubleshooting) |
75
57
 
76
- ```text
77
- @construct build the customer portal and ship it when it's verified
78
- @construct fix the login redirect bug
79
- @construct review the payment flow before release
80
- @construct explain how the caching layer works
81
- ```
58
+ Works with Anthropic, OpenRouter, Ollama, and other OpenAI-compatible providers.
82
59
 
83
- Construct routes the work, tracks state, verifies outcomes, and follows through.
60
+ ## Deployable: solo, team, or enterprise
84
61
 
85
- The team challenges itself along the way β€” reviewers push back on incomplete work, security flags risky patterns, QA confirms it actually works. You don’t coordinate any of that. You just get the result.
62
+ Construct has three deployment modes. `solo` (the default) runs everything locally β€” filesystem queue, local repo state, optional Postgres/Docker/telemetry β€” so if every cloud service goes down you still work from `plan.md`, `.cx/context.md`, beads, git, and the local vector index. `team` promotes the intake queue to Postgres with row-locked worker claims, shares memory across the team, runs workers in a Docker pool, centralizes telemetry, and routes MCP through a broker. `enterprise` adds tenant isolation, RBAC/ABAC scaffolding, isolated worker containers, signed MCP allowlists, and mandatory audit. Pick or change modes with `construct config mode [solo|team|enterprise]`. [Concepts β†’ Deployment model](https://geraldmaron.github.io/construct/v2/docs/concepts/deployment-model).
86
63
 
87
- ## πŸ› οΈ Core commands
64
+ ## Signals to R&D
88
65
 
89
- <!-- AUTO:commands -->
90
- ### Services
66
+ Anything dropped into `.cx/inbox/` (a bug report, a customer comment, a competitor PDF, a postmortem draft) is classified into an R&D intake type β€” bug, user-signal, experiment, eval-finding, architecture, incident, security, requirement, research, ops, or legal-compliance β€” and assigned a primary owner persona with a recommended handoff chain. Inspect with `construct intake list / show <id>`, generate a task graph with `construct graph from-intake <id>`, and update node status with verifiable evidence as work progresses. The classifier is deterministic and runs in the daemon (no LLM); the agent in your editor handles the actual analysis. [Concepts β†’ Intake and triage](https://geraldmaron.github.io/construct/v2/docs/concepts/intake-and-triage).
91
67
 
92
- | Command | What it does |
93
- |---|---|
94
- | `construct up` | Start services (memory, dashboard) |
95
- | `construct down` | Stop all running services |
96
- | `construct status` | Show canonical system health across runtime and integrations |
97
- | `construct show` | Show runtime service URLs and live status (compat view) |
98
- | `construct serve` | Start the Construct dashboard (auto-selects port) |
99
- | `construct setup` | Bootstrap user config after npm, Homebrew, or manual install |
68
+ ## Hard gates
69
+
70
+ Every code mutation runs through enforcement: no secrets committed, tests green, docs current, comments lint-clean, CI passes. Gates live in three places (write-time, commit-time, CI safety-net) and can only be bypassed with explicit env vars so every exception leaves an audit trail. [Concepts β†’ Gates and enforcement](https://geraldmaron.github.io/construct/v2/docs/concepts/gates-and-enforcement).
100
71
 
101
- ### Agents & Sync
72
+ ## Core commands
73
+
74
+ <!-- AUTO:commands -->
75
+ ### Core
102
76
 
103
77
  | Command | What it does |
104
78
  |---|---|
105
- | `construct sync` | Generate agent adapters for all platforms |
106
- | `construct list` | Show all personas and specialist agents |
79
+ | `construct dev` | Start services for development |
80
+ | `construct docs` | Documentation commands |
81
+ | `construct doctor` | Check installation health |
82
+ | `construct init` | Initialize project and start services |
83
+ | `construct install` | Machine setup: install Docker, cm, and bootstrap config |
84
+ | `construct intake` | View and process R&D intake queue |
85
+ | `construct models` | Manage AI model assignments |
86
+ | `construct recommendations` | View and manage artifact recommendations |
87
+ | `construct status` | Show system health and credentials |
88
+ | `construct stop` | Stop all running services |
89
+ | `construct sync` | Sync agent adapters to AI tools |
107
90
 
108
91
  ### Work
109
92
 
110
93
  | Command | What it does |
111
94
  |---|---|
112
- | `construct do` | Execute a natural language goal via the orchestrator |
113
- | `construct distill` | Distill documents with query-focused, citation-ready chunk selection |
114
- | `construct research` | Run query-focused bounded retrieval over project documents |
115
- | `construct docs` | Run documentation-focused bounded retrieval over markdown-like files |
116
- | `construct search` | Run hybrid file, SQL, and semantic retrieval over core project state |
117
- | `construct storage` | Sync and inspect the hybrid storage backend |
118
- | `construct headhunt` | Create a temporary domain expertise overlay or promotion request |
119
- | `construct workflow` | Manage .cx/workflow.json orchestration state |
120
- | `construct init-docs` | Generate AI-tailored doc structure for the current project |
121
- | `construct team` | Team review and template listing |
122
-
123
- ### Models & Integrations
95
+ | `construct bootstrap` | Import seed observations |
96
+ | `construct customer` | Manage customer profiles for product intelligence |
97
+ | `construct distill` | Distill documents with query-focused chunking |
98
+ | `construct drop` | Ingest file from Downloads/Desktop |
99
+ | `construct graph` | Task graph management |
100
+ | `construct headhunt` | Create domain expertise overlays |
101
+ | `construct infer` | Infer schema from documents |
102
+ | `construct ingest` | Convert documents to indexed markdown |
103
+ | `construct integrations` | Check and manage external system connections |
104
+ | `construct memory` | Inspect memory layer |
105
+ | `construct reflect` | Capture improvement feedback |
106
+ | `construct search` | Hybrid search across project state |
107
+ | `construct storage` | Manage storage backend |
108
+ | `construct team` | Team review and templates |
109
+ | `construct wireframe` | Generate wireframes from description |
110
+ | `construct workspace` | Manage PM workspaces for multi-PM signal routing |
111
+
112
+ ### Integrations
124
113
 
125
114
  | Command | What it does |
126
115
  |---|---|
127
- | `construct models` | Show or update model tier assignments |
116
+ | `construct claude:allow` | Manage Claude Code permissions |
117
+ | `construct hosts` | Check host capabilities |
128
118
  | `construct mcp` | Manage MCP integrations |
129
- | `construct hosts` | Show host support for Construct orchestration |
119
+ | `construct ollama` | Manage local Ollama models |
120
+ | `construct plugin` | Manage plugin manifests |
130
121
 
131
122
  ### Observability
132
123
 
133
124
  | Command | What it does |
134
125
  |---|---|
135
- | `construct review` | Generate agent performance review from Langfuse trace backend |
136
- | `construct optimize` | Prompt optimization using Langfuse trace quality scores |
137
- | `construct telemetry-backfill` | Backfill sparse traces with observations (trace backend) |
138
- | `construct cost` | Show token usage, cost, cache read rate, and per-agent breakdown |
139
- | `construct efficiency` | Show read efficiency, repeated files, and context-budget guidance |
140
- | `construct evals` | Show evaluator catalog for prompt and agent experiments |
126
+ | `construct cost` | Token usage and cost breakdown |
127
+ | `construct efficiency` | Read efficiency metrics |
128
+ | `construct evals` | Evaluator catalog |
129
+ | `construct llm-judge` | LLM-as-judge evaluations |
130
+ | `construct optimize` | Prompt optimization |
131
+ | `construct review` | Agent performance review |
141
132
 
142
- ### Docs
133
+ ### Advanced
143
134
 
144
135
  | Command | What it does |
145
136
  |---|---|
146
- | `construct docs:update` | Regenerate AUTO-managed regions in README and docs/ |
147
- | `construct docs:site` | Generate site/docs/ content for the MkDocs GitHub Pages site |
148
- | `construct lint:comments` | Check all files against the comment policy (rules/common/comments.md) |
149
-
150
- ### Diagnostics
151
-
152
- | Command | What it does |
153
- |---|---|
154
- | `construct audit` | Audit Construct internals for gaps or drift |
155
- | `construct doctor` | Run installation health checks |
156
- | `construct validate` | Validate registry.json structure and field constraints |
157
- | `construct diff` | Show which agents changed prompts or settings since HEAD |
137
+ | `construct audit` | Audit Construct internals |
138
+ | `construct auth:status` | Check auth status |
139
+ | `construct backup` | System backups |
140
+ | `construct beads` | Task queue management |
141
+ | `construct cleanup` | Clean stale processes |
142
+ | `construct completions` | Shell completion scripts |
143
+ | `construct config` | Deployment mode configuration |
144
+ | `construct diff` | Show agent changes since HEAD |
145
+ | `construct embed` | Embed mode management |
146
+ | `construct gates:audit` | Audit policy gates |
147
+ | `construct hooks:health` | Check hook health |
148
+ | `construct list` | List all agents |
149
+ | `construct provider` | Provider management |
150
+ | `construct role` | Role framework management |
151
+ | `construct skills` | Skill relevance detection |
152
+ | `construct uninstall` | Remove Construct state |
153
+ | `construct update` | Reinstall this checkout |
154
+ | `construct upgrade` | Upgrade to latest npm version |
155
+ | `construct validate` | Validate registry structure |
158
156
  | `construct version` | Show version |
159
157
  <!-- /AUTO:commands -->
160
158
 
161
- Use `construct version` to see the installed version.
162
-
163
- ## πŸ“Š Built for real usage
164
-
165
- `construct status` is the main health surface.
166
-
167
- It reports what matters now:
168
-
169
- - runtime health
170
- - configured integrations
171
- - managed dashboard status
172
- - recent telemetry richness
173
- - session usage signals when available
174
- - current workflow/task visibility
175
- - context/workflow public health in machine-readable form
176
- - storage mode visibility for file-state, SQL-ready, and vector-ready layers
177
-
178
- If you want the raw machine-readable payload:
179
-
180
- ```bash
181
- construct status --json
182
- ```
183
-
184
- The JSON output includes a shared `publicHealth` block. Today that block exposes:
185
-
186
- - `activeTask`
187
- - `context` (`hasFile`, `source`, `savedAt`, `summary`)
188
- - `workflow` (`exists`, `phase`, `lifecycleStatus`, `currentTaskKey`, `summary`)
189
- - `alignment` (`status`, `findings`, counts)
190
- - `metadataPresence` (`executionContractModel`, `contextState`)
191
-
192
- Hybrid storage readiness is also reported via `storage`:
193
-
194
- - `sql` (`mode`, `configured`, `sharedReady`, `fallbackAvailable`)
195
- - `vector` (`mode`, `configured`, `sharedReady`, `fallbackAvailable`)
196
- - `health` (`sql`, `vector`)
197
-
198
- `construct setup --yes` writes managed defaults for local semantic retrieval, starts a localhost-only Postgres container when Docker is running, initializes the schema, and performs an initial file-state sync. If `DATABASE_URL` is already configured, Construct uses that instead of starting managed Postgres.
199
-
200
- The status JSON also reports hybrid storage readiness so team-ready deployments can see whether SQL/vector stores are configured or still running file-only. Tracing becomes active once `LANGFUSE_PUBLIC_KEY` and `LANGFUSE_SECRET_KEY` are present in `~/.construct/config.env` or `.env`.
201
-
202
- The same public-health contract is exposed through the Construct MCP server on:
203
-
204
- - `project_context`
205
- - `workflow_status`
159
+ ## For contributors
206
160
 
207
- The shared contract is strongest around active task, workflow/alignment state, and metadata presence. `project_context` is the MCP surface that also carries the resolved project context payload itself.
161
+ - [`CONTRIBUTING.md`](./CONTRIBUTING.md) β€” branch workflow, gates, review expectations.
162
+ - [`CHANGELOG.md`](./CHANGELOG.md) β€” release history.
163
+ - [`docs/concepts/architecture.md`](./docs/concepts/architecture.md) β€” canonical architecture (rendered on the docs site at [Concepts β†’ Architecture](https://geraldmaron.github.io/construct/docs/concepts/architecture)).
164
+ - [`AGENTS.md`](./AGENTS.md) β€” agent operating contract.
208
165
 
209
- ## πŸ€– Bring your own models
210
-
211
- Construct is provider-agnostic by design.
212
-
213
- You can use:
214
-
215
- - Anthropic directly
216
- - OpenRouter
217
- - Ollama
218
- - other compatible endpoints
219
-
220
- Set models through environment config, then resync:
221
-
222
- ```bash
223
- construct sync
224
- ```
225
-
226
- Construct uses three execution tiers:
227
-
228
- - `reasoning`
229
- - `standard`
230
- - `fast`
231
-
232
- It can also infer sibling tiers more intelligently, including optional free-model bias when you want to optimize cost without hand-tuning every tier.
233
-
234
- ## πŸ”­ Observability when you want it
235
-
236
- Construct uses Langfuse for agent observability.
237
-
238
- It supports:
239
-
240
- - agent trace creation
241
- - runtime session telemetry
242
- - telemetry richness reporting in status/dashboard
243
- - sparse trace backfill
244
- - performance reviews
245
-
246
- Run `construct setup --yes` to start a local Langfuse instance via Docker, or point to a self-hosted instance by setting `LANGFUSE_BASEURL`, `LANGFUSE_PUBLIC_KEY`, and `LANGFUSE_SECRET_KEY` in `~/.construct/config.env`.
247
-
248
-
249
- ## 🧠 Memory across sessions
250
-
251
- Construct can use shared memory so work carries across tools and sessions instead of feeling like you’re rebooting your brain every hour.
252
-
253
- That is especially useful if you move between OpenCode, Claude Code, and other surfaces.
254
-
255
- ## 🀝 For contributors
256
-
257
- This repo is the source of truth for Construct itself.
258
-
259
- To build from source:
260
-
261
- ```bash
262
- git clone https://github.com/geraldmaron/construct.git
263
- cd construct
264
- npm install && npm install -g .
265
- construct setup
266
- ```
267
-
268
- Important files:
269
-
270
- - `agents/registry.json` β€” core registry and routing source of truth
271
- - `bin/construct` β€” CLI entrypoint
272
- - `lib/` β€” runtime, hooks, MCP, status, setup, and orchestration logic
273
- - `personas/` β€” public/internal prompt surfaces
274
- - `skills/` β€” reusable execution knowledge
275
- - `rules/` β€” coding and quality guidance
276
-
277
- Useful contributor commands:
278
-
279
- ```bash
280
- npm test
281
- node ./bin/construct doctor
282
- node ./bin/construct status
283
- node ./bin/construct sync
284
- node ./bin/construct init-docs
285
- node ./bin/construct docs:update
286
- ```
287
-
288
- Core repo rule:
289
-
290
- - treat `.cx/context.*`, `.cx/workflow.json`, `docs/README.md`, and `docs/architecture.md` as shared project state
291
- - all LLMs working here, including Construct, should read them at session start
292
- - if work changes project reality, update the affected core document before calling the work done
293
-
294
- ## Where this is going
295
-
296
- Construct is moving toward a package-manager-first, cross-platform setup flow that feels more like a product and less like infra cosplay.
297
-
298
- That means:
299
-
300
- - `construct setup` is the primary bootstrap path
301
- - `construct status` is the canonical health surface
302
- - runtime and telemetry are getting more explicit and less magical
303
- - public docs present Construct as the product, not a maze of internals
304
-
305
- ## πŸ“ Project structure
166
+ ## Project structure
306
167
 
307
168
  <!-- AUTO:structure -->
308
169
  ```text
309
170
  construct/
310
171
  β”œβ”€β”€ agents Registry and generated platform adapter chains
172
+ β”œβ”€β”€ apps User-facing apps shipped from this repo (e.g., apps/docs/ β€” Fumadocs docs site)
311
173
  β”œβ”€β”€ bin CLI entrypoint (`construct`)
312
174
  β”œβ”€β”€ commands Command prompt assets
175
+ β”œβ”€β”€ dashboard
313
176
  β”œβ”€β”€ db
177
+ β”œβ”€β”€ deploy
314
178
  β”œβ”€β”€ docs Architecture notes, runbooks, and documentation contract
315
- β”œβ”€β”€ Formula
316
- β”œβ”€β”€ langfuse Langfuse trace backend for agent observability
179
+ β”œβ”€β”€ examples
317
180
  β”œβ”€β”€ lib Core runtime: CLI, hooks, MCP, status, sync, workflow
318
181
  β”œβ”€β”€ personas Persona prompt definitions
319
182
  β”œβ”€β”€ platforms
183
+ β”œβ”€β”€ providers
320
184
  β”œβ”€β”€ rules Coding and quality standards
321
- β”œβ”€β”€ site MkDocs source for the GitHub Pages documentation site
185
+ β”œβ”€β”€ schemas
186
+ β”œβ”€β”€ scripts
187
+ β”œβ”€β”€ services
322
188
  β”œβ”€β”€ skills Reusable domain knowledge files
323
189
  β”œβ”€β”€ templates
324
190
  β”œβ”€β”€ tests Test suite
325
191
  ```
326
192
  <!-- /AUTO:structure -->
327
193
 
328
- ## πŸ—‘οΈ Uninstall
194
+ ## Uninstall
195
+
196
+ Run the uninstaller first, then drop the package:
329
197
 
330
198
  ```bash
331
- npm uninstall -g @geraldmaron/construct
199
+ construct uninstall # interactive; pick what to remove
200
+ npm uninstall @geraldmaron/construct
332
201
  ```
333
202
 
334
- If you installed from source, remove the checkout manually.
203
+ `construct uninstall` probes both project-scope (`.construct/`, the Construct-owned `.claude/agents/` + `.claude/commands/` files, hooks/mcpServers Construct added to `.claude/settings.json`) and machine-scope state (`~/.cx/`, `~/.construct/workspace/`, the embedding model cache, the local Postgres container). Auto-risk items are removed by default; ask-risk items (Postgres data, API keys, AGENTS.md/plan.md you may have edited) are skipped unless you opt in.
204
+
205
+ It never touches Docker itself, Homebrew CLIs like `cm`/`cass`, the pgvector image, or anything you've added to `.claude/settings.json` by hand. Those appear in the final summary as follow-ups you can run if you want.
335
206
 
336
- Optional local cleanup:
207
+ Useful flags:
337
208
 
338
209
  ```bash
339
- rm -rf ~/.construct ~/.cx/performance-reviews
210
+ construct uninstall --dry-run # show the plan, change nothing
211
+ construct uninstall --yes # non-interactive, auto-risk only
212
+ construct uninstall --yes --all # non-interactive, everything
213
+ construct uninstall --scope=project # only this project; leave ~/.construct alone
214
+ construct uninstall --keep-state # only .construct/ + .claude/; keep .cx/, ~/.construct, Postgres
340
215
  ```
341
216
 
342
217
  ## License
343
218
 
344
- MIT
219
+ Apache License 2.0. See [`LICENSE`](./LICENSE).