@neurcode-ai/cli 0.9.65 → 0.10.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 (260) hide show
  1. package/dist/commands/bootstrap-policy.d.ts +29 -0
  2. package/dist/commands/bootstrap-policy.d.ts.map +1 -0
  3. package/dist/commands/bootstrap-policy.js +334 -0
  4. package/dist/commands/bootstrap-policy.js.map +1 -0
  5. package/dist/commands/doctor.d.ts.map +1 -1
  6. package/dist/commands/doctor.js +82 -0
  7. package/dist/commands/doctor.js.map +1 -1
  8. package/dist/commands/governance.d.ts +3 -0
  9. package/dist/commands/governance.d.ts.map +1 -0
  10. package/dist/commands/governance.js +390 -0
  11. package/dist/commands/governance.js.map +1 -0
  12. package/dist/commands/quickstart.d.ts +21 -0
  13. package/dist/commands/quickstart.d.ts.map +1 -0
  14. package/dist/commands/quickstart.js +178 -0
  15. package/dist/commands/quickstart.js.map +1 -0
  16. package/dist/commands/remediate-export.d.ts +36 -0
  17. package/dist/commands/remediate-export.d.ts.map +1 -0
  18. package/dist/commands/remediate-export.js +1072 -0
  19. package/dist/commands/remediate-export.js.map +1 -0
  20. package/dist/commands/replay.d.ts.map +1 -1
  21. package/dist/commands/replay.js +14 -0
  22. package/dist/commands/replay.js.map +1 -1
  23. package/dist/commands/session.d.ts +7 -0
  24. package/dist/commands/session.d.ts.map +1 -1
  25. package/dist/commands/session.js +156 -0
  26. package/dist/commands/session.js.map +1 -1
  27. package/dist/commands/start-intent.d.ts.map +1 -1
  28. package/dist/commands/start-intent.js +61 -11
  29. package/dist/commands/start-intent.js.map +1 -1
  30. package/dist/commands/verify-guidance.d.ts +5 -0
  31. package/dist/commands/verify-guidance.d.ts.map +1 -0
  32. package/dist/commands/verify-guidance.js +49 -0
  33. package/dist/commands/verify-guidance.js.map +1 -0
  34. package/dist/commands/verify-output.d.ts +37 -0
  35. package/dist/commands/verify-output.d.ts.map +1 -0
  36. package/dist/commands/verify-output.js +572 -0
  37. package/dist/commands/verify-output.js.map +1 -0
  38. package/dist/commands/verify-render.d.ts +41 -0
  39. package/dist/commands/verify-render.d.ts.map +1 -0
  40. package/dist/commands/verify-render.js +457 -0
  41. package/dist/commands/verify-render.js.map +1 -0
  42. package/dist/commands/verify.d.ts.map +1 -1
  43. package/dist/commands/verify.js +384 -1091
  44. package/dist/commands/verify.js.map +1 -1
  45. package/dist/commands/workspace.d.ts.map +1 -1
  46. package/dist/commands/workspace.js +3 -14
  47. package/dist/commands/workspace.js.map +1 -1
  48. package/dist/context-engine/graph.d.ts.map +1 -1
  49. package/dist/context-engine/graph.js +69 -7
  50. package/dist/context-engine/graph.js.map +1 -1
  51. package/dist/context-engine/scanner.d.ts.map +1 -1
  52. package/dist/context-engine/scanner.js +9 -2
  53. package/dist/context-engine/scanner.js.map +1 -1
  54. package/dist/daemon/compatibility/execution.d.ts +42 -0
  55. package/dist/daemon/compatibility/execution.d.ts.map +1 -0
  56. package/dist/daemon/compatibility/execution.js +183 -0
  57. package/dist/daemon/compatibility/execution.js.map +1 -0
  58. package/dist/daemon/compatibility/mutation.d.ts +24 -0
  59. package/dist/daemon/compatibility/mutation.d.ts.map +1 -0
  60. package/dist/daemon/compatibility/mutation.js +724 -0
  61. package/dist/daemon/compatibility/mutation.js.map +1 -0
  62. package/dist/daemon/routes.d.ts +19 -0
  63. package/dist/daemon/routes.d.ts.map +1 -0
  64. package/dist/daemon/routes.js +123 -0
  65. package/dist/daemon/routes.js.map +1 -0
  66. package/dist/daemon/runtime/execution-bus.d.ts +217 -0
  67. package/dist/daemon/runtime/execution-bus.d.ts.map +1 -0
  68. package/dist/daemon/runtime/execution-bus.js +1420 -0
  69. package/dist/daemon/runtime/execution-bus.js.map +1 -0
  70. package/dist/daemon/runtime/workspace-runtime.d.ts +280 -0
  71. package/dist/daemon/runtime/workspace-runtime.d.ts.map +1 -0
  72. package/dist/daemon/runtime/workspace-runtime.js +1473 -0
  73. package/dist/daemon/runtime/workspace-runtime.js.map +1 -0
  74. package/dist/daemon/server.d.ts.map +1 -1
  75. package/dist/daemon/server.js +171 -874
  76. package/dist/daemon/server.js.map +1 -1
  77. package/dist/daemon/shaping.d.ts +11 -0
  78. package/dist/daemon/shaping.d.ts.map +1 -0
  79. package/dist/daemon/shaping.js +240 -0
  80. package/dist/daemon/shaping.js.map +1 -0
  81. package/dist/governance/canonical-invariants.d.ts +88 -0
  82. package/dist/governance/canonical-invariants.d.ts.map +1 -0
  83. package/dist/governance/canonical-invariants.js +197 -0
  84. package/dist/governance/canonical-invariants.js.map +1 -0
  85. package/dist/governance/canonical-ordering.d.ts +76 -0
  86. package/dist/governance/canonical-ordering.d.ts.map +1 -0
  87. package/dist/governance/canonical-ordering.js +189 -0
  88. package/dist/governance/canonical-ordering.js.map +1 -0
  89. package/dist/governance/canonical-pipeline.d.ts +9 -1
  90. package/dist/governance/canonical-pipeline.d.ts.map +1 -1
  91. package/dist/governance/canonical-pipeline.js +367 -24
  92. package/dist/governance/canonical-pipeline.js.map +1 -1
  93. package/dist/governance/diff-line-provenance.d.ts +59 -0
  94. package/dist/governance/diff-line-provenance.d.ts.map +1 -0
  95. package/dist/governance/diff-line-provenance.js +118 -0
  96. package/dist/governance/diff-line-provenance.js.map +1 -0
  97. package/dist/governance/pilot-readiness.d.ts +34 -0
  98. package/dist/governance/pilot-readiness.d.ts.map +1 -0
  99. package/dist/governance/pilot-readiness.js +226 -0
  100. package/dist/governance/pilot-readiness.js.map +1 -0
  101. package/dist/governance/policy-parity-validator.d.ts +62 -0
  102. package/dist/governance/policy-parity-validator.d.ts.map +1 -0
  103. package/dist/governance/policy-parity-validator.js +137 -0
  104. package/dist/governance/policy-parity-validator.js.map +1 -0
  105. package/dist/governance/remediation-boundary.d.ts +55 -0
  106. package/dist/governance/remediation-boundary.d.ts.map +1 -0
  107. package/dist/governance/remediation-boundary.js +120 -0
  108. package/dist/governance/remediation-boundary.js.map +1 -0
  109. package/dist/governance/structural-cache.d.ts +103 -0
  110. package/dist/governance/structural-cache.d.ts.map +1 -0
  111. package/dist/governance/structural-cache.js +235 -0
  112. package/dist/governance/structural-cache.js.map +1 -0
  113. package/dist/governance/structural-on-diff.d.ts +22 -2
  114. package/dist/governance/structural-on-diff.d.ts.map +1 -1
  115. package/dist/governance/structural-on-diff.js +36 -4
  116. package/dist/governance/structural-on-diff.js.map +1 -1
  117. package/dist/governance/structural-policy-merge.d.ts +8 -0
  118. package/dist/governance/structural-policy-merge.d.ts.map +1 -1
  119. package/dist/governance/structural-policy-merge.js +7 -0
  120. package/dist/governance/structural-policy-merge.js.map +1 -1
  121. package/dist/governance/verify-runtime-guard.d.ts +99 -0
  122. package/dist/governance/verify-runtime-guard.d.ts.map +1 -0
  123. package/dist/governance/verify-runtime-guard.js +129 -0
  124. package/dist/governance/verify-runtime-guard.js.map +1 -0
  125. package/dist/index.js +277 -77
  126. package/dist/index.js.map +1 -1
  127. package/dist/intent-engine/repo-classifier.d.ts +64 -0
  128. package/dist/intent-engine/repo-classifier.d.ts.map +1 -0
  129. package/dist/intent-engine/repo-classifier.js +178 -0
  130. package/dist/intent-engine/repo-classifier.js.map +1 -0
  131. package/dist/structural-rules/index.d.ts +4 -0
  132. package/dist/structural-rules/index.d.ts.map +1 -1
  133. package/dist/structural-rules/index.js +18 -1
  134. package/dist/structural-rules/index.js.map +1 -1
  135. package/dist/structural-rules/python/PY003-broad-except-clause.d.ts +21 -0
  136. package/dist/structural-rules/python/PY003-broad-except-clause.d.ts.map +1 -1
  137. package/dist/structural-rules/python/PY003-broad-except-clause.js +212 -21
  138. package/dist/structural-rules/python/PY003-broad-except-clause.js.map +1 -1
  139. package/dist/structural-rules/python/PY011-thread-lifecycle.d.ts +11 -0
  140. package/dist/structural-rules/python/PY011-thread-lifecycle.d.ts.map +1 -0
  141. package/dist/structural-rules/python/PY011-thread-lifecycle.js +97 -0
  142. package/dist/structural-rules/python/PY011-thread-lifecycle.js.map +1 -0
  143. package/dist/structural-rules/python/PY012-asyncio-run-misuse.d.ts +11 -0
  144. package/dist/structural-rules/python/PY012-asyncio-run-misuse.d.ts.map +1 -0
  145. package/dist/structural-rules/python/PY012-asyncio-run-misuse.js +83 -0
  146. package/dist/structural-rules/python/PY012-asyncio-run-misuse.js.map +1 -0
  147. package/dist/structural-rules/python/PY013-mutable-default-arg.d.ts +11 -0
  148. package/dist/structural-rules/python/PY013-mutable-default-arg.d.ts.map +1 -0
  149. package/dist/structural-rules/python/PY013-mutable-default-arg.js +73 -0
  150. package/dist/structural-rules/python/PY013-mutable-default-arg.js.map +1 -0
  151. package/dist/structural-rules/python/PY014-fixed-sleep-retry.d.ts +11 -0
  152. package/dist/structural-rules/python/PY014-fixed-sleep-retry.d.ts.map +1 -0
  153. package/dist/structural-rules/python/PY014-fixed-sleep-retry.js +115 -0
  154. package/dist/structural-rules/python/PY014-fixed-sleep-retry.js.map +1 -0
  155. package/dist/structural-rules/types.d.ts +12 -0
  156. package/dist/structural-rules/types.d.ts.map +1 -1
  157. package/dist/utils/active-engineering-context.d.ts +12 -0
  158. package/dist/utils/active-engineering-context.d.ts.map +1 -0
  159. package/dist/utils/active-engineering-context.js +67 -0
  160. package/dist/utils/active-engineering-context.js.map +1 -0
  161. package/dist/utils/artifact-io.d.ts +33 -0
  162. package/dist/utils/artifact-io.d.ts.map +1 -0
  163. package/dist/utils/artifact-io.js +183 -0
  164. package/dist/utils/artifact-io.js.map +1 -0
  165. package/dist/utils/change-contract.d.ts +6 -2
  166. package/dist/utils/change-contract.d.ts.map +1 -1
  167. package/dist/utils/change-contract.js +175 -0
  168. package/dist/utils/change-contract.js.map +1 -1
  169. package/dist/utils/context-pack.d.ts +12 -0
  170. package/dist/utils/context-pack.d.ts.map +1 -0
  171. package/dist/utils/context-pack.js +147 -0
  172. package/dist/utils/context-pack.js.map +1 -0
  173. package/dist/utils/control-plane.d.ts +18 -0
  174. package/dist/utils/control-plane.d.ts.map +1 -1
  175. package/dist/utils/control-plane.js +31 -4
  176. package/dist/utils/control-plane.js.map +1 -1
  177. package/dist/utils/drift-intelligence.d.ts +47 -0
  178. package/dist/utils/drift-intelligence.d.ts.map +1 -0
  179. package/dist/utils/drift-intelligence.js +2099 -0
  180. package/dist/utils/drift-intelligence.js.map +1 -0
  181. package/dist/utils/execution-actions.d.ts +22 -0
  182. package/dist/utils/execution-actions.d.ts.map +1 -0
  183. package/dist/utils/execution-actions.js +103 -0
  184. package/dist/utils/execution-actions.js.map +1 -0
  185. package/dist/utils/execution-bus.d.ts +1 -214
  186. package/dist/utils/execution-bus.d.ts.map +1 -1
  187. package/dist/utils/execution-bus.js +15 -1359
  188. package/dist/utils/execution-bus.js.map +1 -1
  189. package/dist/utils/git.d.ts +1 -0
  190. package/dist/utils/git.d.ts.map +1 -1
  191. package/dist/utils/git.js +13 -3
  192. package/dist/utils/git.js.map +1 -1
  193. package/dist/utils/governance-decisions.d.ts +75 -0
  194. package/dist/utils/governance-decisions.d.ts.map +1 -0
  195. package/dist/utils/governance-decisions.js +412 -0
  196. package/dist/utils/governance-decisions.js.map +1 -0
  197. package/dist/utils/governance-provenance.d.ts +1 -1
  198. package/dist/utils/governance-provenance.d.ts.map +1 -1
  199. package/dist/utils/governance-provenance.js +5 -7
  200. package/dist/utils/governance-provenance.js.map +1 -1
  201. package/dist/utils/governance.d.ts +108 -0
  202. package/dist/utils/governance.d.ts.map +1 -1
  203. package/dist/utils/governance.js +209 -7
  204. package/dist/utils/governance.js.map +1 -1
  205. package/dist/utils/intelligence-runtime-common.d.ts +30 -0
  206. package/dist/utils/intelligence-runtime-common.d.ts.map +1 -0
  207. package/dist/utils/intelligence-runtime-common.js +156 -0
  208. package/dist/utils/intelligence-runtime-common.js.map +1 -0
  209. package/dist/utils/intent-contract-diagnostics.d.ts +9 -0
  210. package/dist/utils/intent-contract-diagnostics.d.ts.map +1 -0
  211. package/dist/utils/intent-contract-diagnostics.js +322 -0
  212. package/dist/utils/intent-contract-diagnostics.js.map +1 -0
  213. package/dist/utils/intent-pack.d.ts +15 -0
  214. package/dist/utils/intent-pack.d.ts.map +1 -0
  215. package/dist/utils/intent-pack.js +196 -0
  216. package/dist/utils/intent-pack.js.map +1 -0
  217. package/dist/utils/plan-sync.d.ts +1 -0
  218. package/dist/utils/plan-sync.d.ts.map +1 -1
  219. package/dist/utils/plan-sync.js +23 -0
  220. package/dist/utils/plan-sync.js.map +1 -1
  221. package/dist/utils/policy-decision.d.ts +5 -0
  222. package/dist/utils/policy-decision.d.ts.map +1 -0
  223. package/dist/utils/policy-decision.js +17 -0
  224. package/dist/utils/policy-decision.js.map +1 -0
  225. package/dist/utils/replay-custody.d.ts +43 -0
  226. package/dist/utils/replay-custody.d.ts.map +1 -0
  227. package/dist/utils/replay-custody.js +168 -0
  228. package/dist/utils/replay-custody.js.map +1 -0
  229. package/dist/utils/replay-runtime.d.ts +13 -0
  230. package/dist/utils/replay-runtime.d.ts.map +1 -1
  231. package/dist/utils/replay-runtime.js +96 -9
  232. package/dist/utils/replay-runtime.js.map +1 -1
  233. package/dist/utils/repository-intelligence.d.ts +9 -0
  234. package/dist/utils/repository-intelligence.d.ts.map +1 -0
  235. package/dist/utils/repository-intelligence.js +372 -0
  236. package/dist/utils/repository-intelligence.js.map +1 -0
  237. package/dist/utils/runtime-events.d.ts.map +1 -1
  238. package/dist/utils/runtime-events.js +25 -6
  239. package/dist/utils/runtime-events.js.map +1 -1
  240. package/dist/utils/semantic-contract-intelligence.d.ts +20 -0
  241. package/dist/utils/semantic-contract-intelligence.d.ts.map +1 -0
  242. package/dist/utils/semantic-contract-intelligence.js +825 -0
  243. package/dist/utils/semantic-contract-intelligence.js.map +1 -0
  244. package/dist/utils/session-continuity.d.ts +56 -0
  245. package/dist/utils/session-continuity.d.ts.map +1 -0
  246. package/dist/utils/session-continuity.js +318 -0
  247. package/dist/utils/session-continuity.js.map +1 -0
  248. package/dist/utils/verification-evidence.d.ts.map +1 -1
  249. package/dist/utils/verification-evidence.js +4 -1
  250. package/dist/utils/verification-evidence.js.map +1 -1
  251. package/dist/utils/verify-runtime-stability.d.ts +142 -0
  252. package/dist/utils/verify-runtime-stability.d.ts.map +1 -0
  253. package/dist/utils/verify-runtime-stability.js +230 -0
  254. package/dist/utils/verify-runtime-stability.js.map +1 -0
  255. package/dist/utils/workspace-runtime.d.ts +1 -266
  256. package/dist/utils/workspace-runtime.d.ts.map +1 -1
  257. package/dist/utils/workspace-runtime.js +15 -1412
  258. package/dist/utils/workspace-runtime.js.map +1 -1
  259. package/package.json +11 -10
  260. package/LICENSE +0 -201
@@ -0,0 +1,390 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.governanceCommand = governanceCommand;
4
+ const fs_1 = require("fs");
5
+ const path_1 = require("path");
6
+ const project_root_1 = require("../utils/project-root");
7
+ const governance_decisions_1 = require("../utils/governance-decisions");
8
+ let chalk;
9
+ try {
10
+ chalk = require('chalk');
11
+ }
12
+ catch {
13
+ chalk = {
14
+ bold: (str) => str,
15
+ cyan: (str) => str,
16
+ dim: (str) => str,
17
+ green: (str) => str,
18
+ red: (str) => str,
19
+ yellow: (str) => str,
20
+ };
21
+ }
22
+ function printJson(value) {
23
+ console.log(JSON.stringify(value, null, 2));
24
+ }
25
+ function formatDecisionScope(decision) {
26
+ const parts = [
27
+ decision.findingId ? `finding=${decision.findingId}` : null,
28
+ decision.category ? `category=${decision.category}` : null,
29
+ decision.file ? `file=${decision.file}` : null,
30
+ decision.module ? `module=${decision.module}` : null,
31
+ decision.service ? `service=${decision.service}` : null,
32
+ ].filter((item) => Boolean(item));
33
+ return parts.length > 0 ? parts.join(', ') : 'unscoped';
34
+ }
35
+ function decisionStatus(decision) {
36
+ return (0, governance_decisions_1.isGovernanceDecisionExpired)(decision) ? 'expired' : 'active';
37
+ }
38
+ function resolveArtifactPath(pathArg) {
39
+ return (0, path_1.resolve)(process.cwd(), pathArg);
40
+ }
41
+ function readJsonArtifact(pathArg) {
42
+ const artifactPath = resolveArtifactPath(pathArg);
43
+ const parsed = JSON.parse((0, fs_1.readFileSync)(artifactPath, 'utf-8'));
44
+ if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {
45
+ throw new Error('artifact must be a JSON object');
46
+ }
47
+ return parsed;
48
+ }
49
+ function extractArtifactGovernanceSummary(artifact) {
50
+ const direct = artifact.governanceVerification;
51
+ if (direct && typeof direct === 'object' && !Array.isArray(direct)) {
52
+ const envelope = direct;
53
+ const intentGovernance = envelope.intentGovernance;
54
+ if (intentGovernance && typeof intentGovernance === 'object' && !Array.isArray(intentGovernance)) {
55
+ return intentGovernance;
56
+ }
57
+ }
58
+ const remediation = artifact.remediationContext;
59
+ if (remediation && typeof remediation === 'object' && !Array.isArray(remediation)) {
60
+ const governanceDecisions = remediation.governanceDecisions;
61
+ if (governanceDecisions && typeof governanceDecisions === 'object' && !Array.isArray(governanceDecisions)) {
62
+ return { governanceDecisions };
63
+ }
64
+ }
65
+ return null;
66
+ }
67
+ function requireReason(options) {
68
+ const reason = typeof options.reason === 'string' ? options.reason.trim() : '';
69
+ if (reason.length < 8) {
70
+ throw new Error('provide --reason with at least 8 characters');
71
+ }
72
+ return reason;
73
+ }
74
+ function normalizeDecisionCategory(category) {
75
+ if (!category || !category.trim())
76
+ return null;
77
+ const normalized = category.trim();
78
+ if (!(0, governance_decisions_1.isDriftIntelligenceCategory)(normalized)) {
79
+ throw new Error(`unsupported drift category '${normalized}'. Known categories: ${(0, governance_decisions_1.listDriftIntelligenceCategories)().join(', ')}`);
80
+ }
81
+ return normalized;
82
+ }
83
+ function createDecision(projectRoot, state, options) {
84
+ const category = normalizeDecisionCategory(options.category);
85
+ const expiresAt = (0, governance_decisions_1.resolveGovernanceDecisionExpiry)({
86
+ expiresAt: options.expires,
87
+ expiresInDays: options.days,
88
+ required: state === 'temporary-exception',
89
+ });
90
+ const decision = (0, governance_decisions_1.buildGovernanceDecision)({
91
+ state,
92
+ findingId: options.finding || null,
93
+ category,
94
+ file: options.file || null,
95
+ module: options.module || null,
96
+ service: options.service || null,
97
+ reason: requireReason(options),
98
+ actor: (0, governance_decisions_1.resolveGovernanceActor)(projectRoot, options.actor),
99
+ expiresAt,
100
+ temporary: state === 'temporary-exception',
101
+ });
102
+ return (0, governance_decisions_1.addGovernanceDecision)(projectRoot, decision);
103
+ }
104
+ function renderDecision(decision) {
105
+ const status = decisionStatus(decision);
106
+ const color = status === 'expired' ? chalk.yellow : chalk.green;
107
+ console.log(`${color(`• ${decision.id}`)} ${chalk.dim(`[${decision.state}; ${status}]`)}`);
108
+ console.log(chalk.dim(` Scope: ${formatDecisionScope(decision)}`));
109
+ console.log(chalk.dim(` Actor: ${decision.actor} @ ${decision.decidedAt}`));
110
+ if (decision.expiresAt) {
111
+ console.log(chalk.dim(` Expires: ${decision.expiresAt}`));
112
+ }
113
+ console.log(chalk.dim(` Reason: ${decision.reason}`));
114
+ }
115
+ function renderHygiene(summary) {
116
+ console.log(chalk.bold.cyan('\nGovernance Hygiene'));
117
+ console.log(chalk.dim(`Store: ${summary.sourcePath || '(none)'}`));
118
+ console.log(chalk.dim(`Decisions: ${summary.totalDecisions} active=${summary.activeDecisions} expired=${summary.expiredDecisions}`));
119
+ console.log(chalk.dim(`Issues: ${summary.issueCount} errors=${summary.errorCount} warnings=${summary.warningCount}`));
120
+ if (summary.issues.length === 0) {
121
+ console.log(chalk.green('No governance hygiene issues detected.\n'));
122
+ return;
123
+ }
124
+ summary.issues.forEach((issue) => {
125
+ const prefix = issue.severity === 'error' ? chalk.red('error') : issue.severity === 'warning' ? chalk.yellow('warning') : chalk.dim('info');
126
+ console.log(`${prefix} ${issue.code}${issue.decisionId ? ` (${issue.decisionId})` : ''}: ${issue.message}`);
127
+ if (issue.remediation) {
128
+ console.log(chalk.dim(` ${issue.remediation}`));
129
+ }
130
+ });
131
+ console.log('');
132
+ }
133
+ function handleDecisionWrite(projectRoot, state, options, label) {
134
+ try {
135
+ const result = createDecision(projectRoot, state, options);
136
+ if (options.json) {
137
+ printJson({ success: true, ...result });
138
+ return;
139
+ }
140
+ console.log(chalk.green(`\n${label}`));
141
+ renderDecision(result.decision);
142
+ console.log(chalk.dim(`\nStore: ${result.sourcePath}`));
143
+ console.log(chalk.dim('Re-run `neurcode verify --evidence` to make the decision replay-visible in governance artifacts.\n'));
144
+ }
145
+ catch (error) {
146
+ const message = error instanceof Error ? error.message : String(error);
147
+ if (options.json) {
148
+ printJson({ success: false, error: message });
149
+ }
150
+ else {
151
+ console.error(chalk.red(`\n${message}\n`));
152
+ }
153
+ process.exitCode = 1;
154
+ }
155
+ }
156
+ function filterDecisions(decisions, options) {
157
+ return decisions.filter((decision) => {
158
+ if (options.state && decision.state !== options.state)
159
+ return false;
160
+ if (options.active && decisionStatus(decision) !== 'active')
161
+ return false;
162
+ if (options.expired && decisionStatus(decision) !== 'expired')
163
+ return false;
164
+ return true;
165
+ });
166
+ }
167
+ function renderGovernanceStatus(projectRoot, json) {
168
+ const registry = (0, governance_decisions_1.readGovernanceDecisionRegistry)(projectRoot);
169
+ const hygiene = (0, governance_decisions_1.summarizeGovernanceDecisionHygiene)(registry);
170
+ if (json) {
171
+ printJson({
172
+ storePath: (0, governance_decisions_1.getGovernanceDecisionsPath)(projectRoot),
173
+ decisions: {
174
+ total: registry.decisions.length,
175
+ active: hygiene.activeDecisions,
176
+ expired: hygiene.expiredDecisions,
177
+ invalid: registry.invalidEntries,
178
+ },
179
+ hygiene,
180
+ });
181
+ return;
182
+ }
183
+ console.log(chalk.bold.cyan('\nGovernance Accountability Status'));
184
+ console.log(chalk.dim(`Store: ${(0, governance_decisions_1.getGovernanceDecisionsPath)(projectRoot)}`));
185
+ if (!(0, fs_1.existsSync)((0, governance_decisions_1.getGovernanceDecisionsPath)(projectRoot))) {
186
+ console.log(chalk.yellow('No governance decisions artifact found yet.'));
187
+ console.log(chalk.dim('Create one with `neurcode governance accept-risk`, `temporary-exception`, or `review`.\n'));
188
+ return;
189
+ }
190
+ console.log(chalk.dim(`Decisions: ${registry.decisions.length} active=${hygiene.activeDecisions} expired=${hygiene.expiredDecisions}`));
191
+ console.log(chalk.dim(`Hygiene: ${hygiene.errorCount} error(s), ${hygiene.warningCount} warning(s)`));
192
+ const active = registry.decisions.filter((decision) => decisionStatus(decision) === 'active').slice(0, 5);
193
+ if (active.length > 0) {
194
+ console.log(chalk.dim('\nActive decisions:'));
195
+ active.forEach((decision) => console.log(chalk.dim(` • ${decision.id} ${decision.state} — ${formatDecisionScope(decision)}`)));
196
+ }
197
+ console.log(chalk.dim('\nRun `neurcode governance hygiene` for detailed health checks.\n'));
198
+ }
199
+ function governanceCommand(program) {
200
+ const governance = program
201
+ .command('governance')
202
+ .description('Review, explain, and author repo-local governance decisions');
203
+ governance
204
+ .command('status')
205
+ .description('Show repo-local governance accountability status')
206
+ .option('--json', 'Output machine-readable JSON')
207
+ .action((options) => {
208
+ const projectRoot = (0, project_root_1.resolveNeurcodeProjectRoot)(process.cwd());
209
+ renderGovernanceStatus(projectRoot, options.json === true);
210
+ });
211
+ governance
212
+ .command('decisions')
213
+ .description('List repo-local governance decisions')
214
+ .option('--state <state>', 'Filter by governance decision state')
215
+ .option('--active', 'Show active decisions only')
216
+ .option('--expired', 'Show expired decisions only')
217
+ .option('--json', 'Output machine-readable JSON')
218
+ .action((options) => {
219
+ const projectRoot = (0, project_root_1.resolveNeurcodeProjectRoot)(process.cwd());
220
+ const registry = (0, governance_decisions_1.readGovernanceDecisionRegistry)(projectRoot);
221
+ const decisions = filterDecisions(registry.decisions, options);
222
+ if (options.json) {
223
+ printJson({
224
+ sourcePath: registry.sourcePath,
225
+ total: decisions.length,
226
+ decisions,
227
+ diagnostics: registry.diagnostics,
228
+ });
229
+ return;
230
+ }
231
+ console.log(chalk.bold.cyan('\nGovernance Decisions'));
232
+ console.log(chalk.dim(`Store: ${registry.sourcePath || (0, governance_decisions_1.getGovernanceDecisionsPath)(projectRoot)}`));
233
+ if (decisions.length === 0) {
234
+ console.log(chalk.yellow('No matching governance decisions.\n'));
235
+ return;
236
+ }
237
+ decisions.forEach(renderDecision);
238
+ console.log('');
239
+ });
240
+ governance
241
+ .command('explain')
242
+ .description('Explain governance decisions and optional verify/evidence artifact decision lineage')
243
+ .option('--decision <id>', 'Explain a specific decision ID')
244
+ .option('--finding <id>', 'Show decisions targeting a specific finding ID')
245
+ .option('--artifact <path>', 'Read governance decision summary from a verify, evidence, or remediation JSON artifact')
246
+ .option('--json', 'Output machine-readable JSON')
247
+ .action((options) => {
248
+ try {
249
+ const projectRoot = (0, project_root_1.resolveNeurcodeProjectRoot)(process.cwd());
250
+ const registry = (0, governance_decisions_1.readGovernanceDecisionRegistry)(projectRoot);
251
+ const decisions = registry.decisions.filter((decision) => {
252
+ if (options.decision && decision.id !== options.decision)
253
+ return false;
254
+ if (options.finding && decision.findingId !== options.finding)
255
+ return false;
256
+ return true;
257
+ });
258
+ const artifactSummary = options.artifact
259
+ ? extractArtifactGovernanceSummary(readJsonArtifact(options.artifact))
260
+ : null;
261
+ if (options.json) {
262
+ printJson({
263
+ sourcePath: registry.sourcePath,
264
+ decisions,
265
+ artifactPath: options.artifact ? resolveArtifactPath(options.artifact) : null,
266
+ artifactGovernance: artifactSummary,
267
+ diagnostics: registry.diagnostics,
268
+ });
269
+ return;
270
+ }
271
+ console.log(chalk.bold.cyan('\nGovernance Explanation'));
272
+ console.log(chalk.dim(`Store: ${registry.sourcePath || (0, governance_decisions_1.getGovernanceDecisionsPath)(projectRoot)}`));
273
+ if (decisions.length === 0) {
274
+ console.log(chalk.yellow('No matching repo-local decisions found.'));
275
+ }
276
+ else {
277
+ decisions.forEach(renderDecision);
278
+ }
279
+ if (options.artifact) {
280
+ console.log(chalk.dim(`\nArtifact: ${resolveArtifactPath(options.artifact)}`));
281
+ if (artifactSummary) {
282
+ console.log(chalk.dim(JSON.stringify(artifactSummary, null, 2)));
283
+ }
284
+ else {
285
+ console.log(chalk.yellow('No governance decision summary found in artifact.'));
286
+ }
287
+ }
288
+ console.log('');
289
+ }
290
+ catch (error) {
291
+ const message = error instanceof Error ? error.message : String(error);
292
+ if (options.json) {
293
+ printJson({ success: false, error: message });
294
+ }
295
+ else {
296
+ console.error(chalk.red(`\n${message}\n`));
297
+ }
298
+ process.exitCode = 1;
299
+ }
300
+ });
301
+ governance
302
+ .command('accept-risk')
303
+ .description('Record an accepted-risk decision for a bounded finding or drift category')
304
+ .option('--finding <id>', 'Specific drift finding ID')
305
+ .option('--category <category>', 'Drift category to match')
306
+ .option('--file <path>', 'Optional file scope')
307
+ .option('--module <path>', 'Optional module scope')
308
+ .option('--service <name>', 'Optional service scope')
309
+ .requiredOption('--reason <text>', 'Audit-visible justification')
310
+ .option('--actor <id>', 'Decision actor (defaults to git user/email or environment)')
311
+ .option('--expires <iso>', 'Optional expiry timestamp')
312
+ .option('--days <n>', 'Optional expiry window in days', (value) => parseInt(value, 10))
313
+ .option('--json', 'Output machine-readable JSON')
314
+ .action((options) => {
315
+ const projectRoot = (0, project_root_1.resolveNeurcodeProjectRoot)(process.cwd());
316
+ handleDecisionWrite(projectRoot, 'accepted-risk', options, 'Accepted risk recorded');
317
+ });
318
+ governance
319
+ .command('temporary-exception')
320
+ .description('Record a bounded temporary exception with required expiry')
321
+ .option('--finding <id>', 'Specific drift finding ID')
322
+ .option('--category <category>', 'Drift category to match')
323
+ .option('--file <path>', 'Optional file scope')
324
+ .option('--module <path>', 'Optional module scope')
325
+ .option('--service <name>', 'Optional service scope')
326
+ .requiredOption('--reason <text>', 'Audit-visible justification')
327
+ .option('--actor <id>', 'Decision actor (defaults to git user/email or environment)')
328
+ .option('--expires <iso>', 'Expiry timestamp')
329
+ .option('--days <n>', 'Expiry window in days', (value) => parseInt(value, 10))
330
+ .option('--json', 'Output machine-readable JSON')
331
+ .action((options) => {
332
+ const projectRoot = (0, project_root_1.resolveNeurcodeProjectRoot)(process.cwd());
333
+ handleDecisionWrite(projectRoot, 'temporary-exception', options, 'Temporary exception recorded');
334
+ });
335
+ governance
336
+ .command('review')
337
+ .description('Record a lightweight governance review decision')
338
+ .option('--state <state>', 'Decision state (acknowledged, review-required, rollout-approved, rollout-blocked, advisory-dismissed)', 'review-required')
339
+ .option('--finding <id>', 'Specific drift finding ID')
340
+ .option('--category <category>', 'Drift category to match')
341
+ .option('--file <path>', 'Optional file scope')
342
+ .option('--module <path>', 'Optional module scope')
343
+ .option('--service <name>', 'Optional service scope')
344
+ .requiredOption('--reason <text>', 'Audit-visible review note')
345
+ .option('--actor <id>', 'Decision actor (defaults to git user/email or environment)')
346
+ .option('--expires <iso>', 'Optional expiry timestamp')
347
+ .option('--days <n>', 'Optional expiry window in days', (value) => parseInt(value, 10))
348
+ .option('--json', 'Output machine-readable JSON')
349
+ .action((options) => {
350
+ const allowed = new Set([
351
+ 'acknowledged',
352
+ 'review-required',
353
+ 'rollout-approved',
354
+ 'rollout-blocked',
355
+ 'advisory-dismissed',
356
+ ]);
357
+ const state = options.state;
358
+ if (!allowed.has(state)) {
359
+ const message = `unsupported review state '${options.state}'`;
360
+ if (options.json) {
361
+ printJson({ success: false, error: message });
362
+ }
363
+ else {
364
+ console.error(chalk.red(`\n${message}\n`));
365
+ }
366
+ process.exitCode = 1;
367
+ return;
368
+ }
369
+ const projectRoot = (0, project_root_1.resolveNeurcodeProjectRoot)(process.cwd());
370
+ handleDecisionWrite(projectRoot, state, options, 'Governance review decision recorded');
371
+ });
372
+ governance
373
+ .command('hygiene')
374
+ .description('Check governance decisions for expired, stale, broad, or malformed entries')
375
+ .option('--json', 'Output machine-readable JSON')
376
+ .action((options) => {
377
+ const projectRoot = (0, project_root_1.resolveNeurcodeProjectRoot)(process.cwd());
378
+ const registry = (0, governance_decisions_1.readGovernanceDecisionRegistry)(projectRoot);
379
+ const hygiene = (0, governance_decisions_1.summarizeGovernanceDecisionHygiene)(registry);
380
+ if (options.json) {
381
+ printJson(hygiene);
382
+ return;
383
+ }
384
+ renderHygiene(hygiene);
385
+ if (hygiene.errorCount > 0) {
386
+ process.exitCode = 1;
387
+ }
388
+ });
389
+ }
390
+ //# sourceMappingURL=governance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"governance.js","sourceRoot":"","sources":["../../src/commands/governance.ts"],"names":[],"mappings":";;AAoQA,8CAgMC;AApcD,2BAA8C;AAC9C,+BAA+B;AAG/B,wDAAmE;AACnE,wEAauC;AAEvC,IAAI,KAAU,CAAC;AACf,IAAI,CAAC;IACH,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;AAC3B,CAAC;AAAC,MAAM,CAAC;IACP,KAAK,GAAG;QACN,IAAI,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,GAAG;QAC1B,IAAI,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,GAAG;QAC1B,GAAG,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,GAAG;QACzB,KAAK,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,GAAG;QAC3B,GAAG,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,GAAG;QACzB,MAAM,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,GAAG;KAC7B,CAAC;AACJ,CAAC;AAiCD,SAAS,SAAS,CAAC,KAAc;IAC/B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AAC9C,CAAC;AAED,SAAS,mBAAmB,CAAC,QAAkC;IAC7D,MAAM,KAAK,GAAG;QACZ,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI;QAC3D,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI;QAC1D,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI;QAC9C,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,IAAI;QACpD,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI;KACxD,CAAC,MAAM,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IAClD,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;AAC1D,CAAC;AAED,SAAS,cAAc,CAAC,QAAkC;IACxD,OAAO,IAAA,kDAA2B,EAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC;AACtE,CAAC;AAED,SAAS,mBAAmB,CAAC,OAAe;IAC1C,OAAO,IAAA,cAAO,EAAC,OAAO,CAAC,GAAG,EAAE,EAAE,OAAO,CAAC,CAAC;AACzC,CAAC;AAED,SAAS,gBAAgB,CAAC,OAAe;IACvC,MAAM,YAAY,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAClD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAA,iBAAY,EAAC,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC;IAC/D,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACnE,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;IACpD,CAAC;IACD,OAAO,MAAiC,CAAC;AAC3C,CAAC;AAED,SAAS,gCAAgC,CAAC,QAAiC;IACzE,MAAM,MAAM,GAAG,QAAQ,CAAC,sBAAsB,CAAC;IAC/C,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACnE,MAAM,QAAQ,GAAG,MAAiC,CAAC;QACnD,MAAM,gBAAgB,GAAG,QAAQ,CAAC,gBAAgB,CAAC;QACnD,IAAI,gBAAgB,IAAI,OAAO,gBAAgB,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE,CAAC;YACjG,OAAO,gBAA2C,CAAC;QACrD,CAAC;IACH,CAAC;IACD,MAAM,WAAW,GAAG,QAAQ,CAAC,kBAAkB,CAAC;IAChD,IAAI,WAAW,IAAI,OAAO,WAAW,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;QAClF,MAAM,mBAAmB,GAAI,WAAuC,CAAC,mBAAmB,CAAC;QACzF,IAAI,mBAAmB,IAAI,OAAO,mBAAmB,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,mBAAmB,CAAC,EAAE,CAAC;YAC1G,OAAO,EAAE,mBAAmB,EAAE,CAAC;QACjC,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,aAAa,CAAC,OAA6B;IAClD,MAAM,MAAM,GAAG,OAAO,OAAO,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/E,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;IACjE,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,yBAAyB,CAAC,QAA4B;IAC7D,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;QAAE,OAAO,IAAI,CAAC;IAC/C,MAAM,UAAU,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;IACnC,IAAI,CAAC,IAAA,kDAA2B,EAAC,UAAU,CAAC,EAAE,CAAC;QAC7C,MAAM,IAAI,KAAK,CAAC,+BAA+B,UAAU,wBAAwB,IAAA,sDAA+B,GAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACnI,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,SAAS,cAAc,CAAC,WAAmB,EAAE,KAA8B,EAAE,OAA6B;IAKxG,MAAM,QAAQ,GAAG,yBAAyB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC7D,MAAM,SAAS,GAAG,IAAA,sDAA+B,EAAC;QAChD,SAAS,EAAE,OAAO,CAAC,OAAO;QAC1B,aAAa,EAAE,OAAO,CAAC,IAAI;QAC3B,QAAQ,EAAE,KAAK,KAAK,qBAAqB;KAC1C,CAAC,CAAC;IACH,MAAM,QAAQ,GAAG,IAAA,8CAAuB,EAAC;QACvC,KAAK;QACL,SAAS,EAAE,OAAO,CAAC,OAAO,IAAI,IAAI;QAClC,QAAQ;QACR,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,IAAI;QAC1B,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,IAAI;QAC9B,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,IAAI;QAChC,MAAM,EAAE,aAAa,CAAC,OAAO,CAAC;QAC9B,KAAK,EAAE,IAAA,6CAAsB,EAAC,WAAW,EAAE,OAAO,CAAC,KAAK,CAAC;QACzD,SAAS;QACT,SAAS,EAAE,KAAK,KAAK,qBAAqB;KAC3C,CAAC,CAAC;IACH,OAAO,IAAA,4CAAqB,EAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;AACtD,CAAC;AAED,SAAS,cAAc,CAAC,QAAkC;IACxD,MAAM,MAAM,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;IACxC,MAAM,KAAK,GAAG,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC;IAChE,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,QAAQ,CAAC,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,QAAQ,CAAC,KAAK,KAAK,MAAM,GAAG,CAAC,EAAE,CAAC,CAAC;IAC3F,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,mBAAmB,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;IACpE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,QAAQ,CAAC,KAAK,MAAM,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;IAC7E,IAAI,QAAQ,CAAC,SAAS,EAAE,CAAC;QACvB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;IAC7D,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;AACzD,CAAC;AAED,SAAS,aAAa,CAAC,OAAyC;IAC9D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC;IACrD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,OAAO,CAAC,UAAU,IAAI,QAAQ,EAAE,CAAC,CAAC,CAAC;IACnE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,OAAO,CAAC,cAAc,WAAW,OAAO,CAAC,eAAe,YAAY,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC;IACrI,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,OAAO,CAAC,UAAU,WAAW,OAAO,CAAC,UAAU,aAAa,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;IACtH,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAChC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,0CAA0C,CAAC,CAAC,CAAC;QACrE,OAAO;IACT,CAAC;IACD,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;QAC/B,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC5I,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,IAAI,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAC5G,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;YACtB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;QACnD,CAAC;IACH,CAAC,CAAC,CAAC;IACH,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC;AAED,SAAS,mBAAmB,CAC1B,WAAmB,EACnB,KAA8B,EAC9B,OAA6B,EAC7B,KAAa;IAEb,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,cAAc,CAAC,WAAW,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;QAC3D,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC;YACxC,OAAO;QACT,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC;QACvC,cAAc,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAChC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;QACxD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,oGAAoG,CAAC,CAAC,CAAC;IAC/H,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,SAAS,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;QAChD,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,OAAO,IAAI,CAAC,CAAC,CAAC;QAC7C,CAAC;QACD,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACvB,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,SAAqC,EAAE,OAA4B;IAC1F,OAAO,SAAS,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE;QACnC,IAAI,OAAO,CAAC,KAAK,IAAI,QAAQ,CAAC,KAAK,KAAK,OAAO,CAAC,KAAK;YAAE,OAAO,KAAK,CAAC;QACpE,IAAI,OAAO,CAAC,MAAM,IAAI,cAAc,CAAC,QAAQ,CAAC,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAC;QAC1E,IAAI,OAAO,CAAC,OAAO,IAAI,cAAc,CAAC,QAAQ,CAAC,KAAK,SAAS;YAAE,OAAO,KAAK,CAAC;QAC5E,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,sBAAsB,CAAC,WAAmB,EAAE,IAAc;IACjE,MAAM,QAAQ,GAAG,IAAA,qDAA8B,EAAC,WAAW,CAAC,CAAC;IAC7D,MAAM,OAAO,GAAG,IAAA,yDAAkC,EAAC,QAAQ,CAAC,CAAC;IAC7D,IAAI,IAAI,EAAE,CAAC;QACT,SAAS,CAAC;YACR,SAAS,EAAE,IAAA,iDAA0B,EAAC,WAAW,CAAC;YAClD,SAAS,EAAE;gBACT,KAAK,EAAE,QAAQ,CAAC,SAAS,CAAC,MAAM;gBAChC,MAAM,EAAE,OAAO,CAAC,eAAe;gBAC/B,OAAO,EAAE,OAAO,CAAC,gBAAgB;gBACjC,OAAO,EAAE,QAAQ,CAAC,cAAc;aACjC;YACD,OAAO;SACR,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC,CAAC;IACnE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,IAAA,iDAA0B,EAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5E,IAAI,CAAC,IAAA,eAAU,EAAC,IAAA,iDAA0B,EAAC,WAAW,CAAC,CAAC,EAAE,CAAC;QACzD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,6CAA6C,CAAC,CAAC,CAAC;QACzE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,0FAA0F,CAAC,CAAC,CAAC;QACnH,OAAO;IACT,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,QAAQ,CAAC,SAAS,CAAC,MAAM,WAAW,OAAO,CAAC,eAAe,YAAY,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC;IACxI,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,OAAO,CAAC,UAAU,cAAc,OAAO,CAAC,YAAY,aAAa,CAAC,CAAC,CAAC;IACtG,MAAM,MAAM,GAAG,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,cAAc,CAAC,QAAQ,CAAC,KAAK,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC1G,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC,CAAC;QAC9C,MAAM,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,QAAQ,CAAC,EAAE,IAAI,QAAQ,CAAC,KAAK,MAAM,mBAAmB,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAClI,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,mEAAmE,CAAC,CAAC,CAAC;AAC9F,CAAC;AAED,SAAgB,iBAAiB,CAAC,OAAgB;IAChD,MAAM,UAAU,GAAG,OAAO;SACvB,OAAO,CAAC,YAAY,CAAC;SACrB,WAAW,CAAC,6DAA6D,CAAC,CAAC;IAE9E,UAAU;SACP,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,kDAAkD,CAAC;SAC/D,MAAM,CAAC,QAAQ,EAAE,8BAA8B,CAAC;SAChD,MAAM,CAAC,CAAC,OAA2B,EAAE,EAAE;QACtC,MAAM,WAAW,GAAG,IAAA,yCAA0B,EAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QAC9D,sBAAsB,CAAC,WAAW,EAAE,OAAO,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEL,UAAU;SACP,OAAO,CAAC,WAAW,CAAC;SACpB,WAAW,CAAC,sCAAsC,CAAC;SACnD,MAAM,CAAC,iBAAiB,EAAE,qCAAqC,CAAC;SAChE,MAAM,CAAC,UAAU,EAAE,4BAA4B,CAAC;SAChD,MAAM,CAAC,WAAW,EAAE,6BAA6B,CAAC;SAClD,MAAM,CAAC,QAAQ,EAAE,8BAA8B,CAAC;SAChD,MAAM,CAAC,CAAC,OAA4B,EAAE,EAAE;QACvC,MAAM,WAAW,GAAG,IAAA,yCAA0B,EAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QAC9D,MAAM,QAAQ,GAAG,IAAA,qDAA8B,EAAC,WAAW,CAAC,CAAC;QAC7D,MAAM,SAAS,GAAG,eAAe,CAAC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAC/D,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,SAAS,CAAC;gBACR,UAAU,EAAE,QAAQ,CAAC,UAAU;gBAC/B,KAAK,EAAE,SAAS,CAAC,MAAM;gBACvB,SAAS;gBACT,WAAW,EAAE,QAAQ,CAAC,WAAW;aAClC,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAC;QACvD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,QAAQ,CAAC,UAAU,IAAI,IAAA,iDAA0B,EAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC;QACnG,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,qCAAqC,CAAC,CAAC,CAAC;YACjE,OAAO;QACT,CAAC;QACD,SAAS,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;QAClC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;IAEL,UAAU;SACP,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,qFAAqF,CAAC;SAClG,MAAM,CAAC,iBAAiB,EAAE,gCAAgC,CAAC;SAC3D,MAAM,CAAC,gBAAgB,EAAE,gDAAgD,CAAC;SAC1E,MAAM,CAAC,mBAAmB,EAAE,wFAAwF,CAAC;SACrH,MAAM,CAAC,QAAQ,EAAE,8BAA8B,CAAC;SAChD,MAAM,CAAC,CAAC,OAAuB,EAAE,EAAE;QAClC,IAAI,CAAC;YACH,MAAM,WAAW,GAAG,IAAA,yCAA0B,EAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;YAC9D,MAAM,QAAQ,GAAG,IAAA,qDAA8B,EAAC,WAAW,CAAC,CAAC;YAC7D,MAAM,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE;gBACvD,IAAI,OAAO,CAAC,QAAQ,IAAI,QAAQ,CAAC,EAAE,KAAK,OAAO,CAAC,QAAQ;oBAAE,OAAO,KAAK,CAAC;gBACvE,IAAI,OAAO,CAAC,OAAO,IAAI,QAAQ,CAAC,SAAS,KAAK,OAAO,CAAC,OAAO;oBAAE,OAAO,KAAK,CAAC;gBAC5E,OAAO,IAAI,CAAC;YACd,CAAC,CAAC,CAAC;YACH,MAAM,eAAe,GAAG,OAAO,CAAC,QAAQ;gBACtC,CAAC,CAAC,gCAAgC,CAAC,gBAAgB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;gBACtE,CAAC,CAAC,IAAI,CAAC;YAET,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;gBACjB,SAAS,CAAC;oBACR,UAAU,EAAE,QAAQ,CAAC,UAAU;oBAC/B,SAAS;oBACT,YAAY,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,mBAAmB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI;oBAC7E,kBAAkB,EAAE,eAAe;oBACnC,WAAW,EAAE,QAAQ,CAAC,WAAW;iBAClC,CAAC,CAAC;gBACH,OAAO;YACT,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC,CAAC;YACzD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,QAAQ,CAAC,UAAU,IAAI,IAAA,iDAA0B,EAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC;YACnG,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC3B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,yCAAyC,CAAC,CAAC,CAAC;YACvE,CAAC;iBAAM,CAAC;gBACN,SAAS,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;YACpC,CAAC;YACD,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;gBACrB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,eAAe,mBAAmB,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC/E,IAAI,eAAe,EAAE,CAAC;oBACpB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,eAAe,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;gBACnE,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,mDAAmD,CAAC,CAAC,CAAC;gBACjF,CAAC;YACH,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAClB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACvE,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;gBACjB,SAAS,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;YAChD,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,OAAO,IAAI,CAAC,CAAC,CAAC;YAC7C,CAAC;YACD,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACvB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,UAAU;SACP,OAAO,CAAC,aAAa,CAAC;SACtB,WAAW,CAAC,0EAA0E,CAAC;SACvF,MAAM,CAAC,gBAAgB,EAAE,2BAA2B,CAAC;SACrD,MAAM,CAAC,uBAAuB,EAAE,yBAAyB,CAAC;SAC1D,MAAM,CAAC,eAAe,EAAE,qBAAqB,CAAC;SAC9C,MAAM,CAAC,iBAAiB,EAAE,uBAAuB,CAAC;SAClD,MAAM,CAAC,kBAAkB,EAAE,wBAAwB,CAAC;SACpD,cAAc,CAAC,iBAAiB,EAAE,6BAA6B,CAAC;SAChE,MAAM,CAAC,cAAc,EAAE,4DAA4D,CAAC;SACpF,MAAM,CAAC,iBAAiB,EAAE,2BAA2B,CAAC;SACtD,MAAM,CAAC,YAAY,EAAE,gCAAgC,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;SACtF,MAAM,CAAC,QAAQ,EAAE,8BAA8B,CAAC;SAChD,MAAM,CAAC,CAAC,OAA6B,EAAE,EAAE;QACxC,MAAM,WAAW,GAAG,IAAA,yCAA0B,EAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QAC9D,mBAAmB,CAAC,WAAW,EAAE,eAAe,EAAE,OAAO,EAAE,wBAAwB,CAAC,CAAC;IACvF,CAAC,CAAC,CAAC;IAEL,UAAU;SACP,OAAO,CAAC,qBAAqB,CAAC;SAC9B,WAAW,CAAC,2DAA2D,CAAC;SACxE,MAAM,CAAC,gBAAgB,EAAE,2BAA2B,CAAC;SACrD,MAAM,CAAC,uBAAuB,EAAE,yBAAyB,CAAC;SAC1D,MAAM,CAAC,eAAe,EAAE,qBAAqB,CAAC;SAC9C,MAAM,CAAC,iBAAiB,EAAE,uBAAuB,CAAC;SAClD,MAAM,CAAC,kBAAkB,EAAE,wBAAwB,CAAC;SACpD,cAAc,CAAC,iBAAiB,EAAE,6BAA6B,CAAC;SAChE,MAAM,CAAC,cAAc,EAAE,4DAA4D,CAAC;SACpF,MAAM,CAAC,iBAAiB,EAAE,kBAAkB,CAAC;SAC7C,MAAM,CAAC,YAAY,EAAE,uBAAuB,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;SAC7E,MAAM,CAAC,QAAQ,EAAE,8BAA8B,CAAC;SAChD,MAAM,CAAC,CAAC,OAA6B,EAAE,EAAE;QACxC,MAAM,WAAW,GAAG,IAAA,yCAA0B,EAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QAC9D,mBAAmB,CAAC,WAAW,EAAE,qBAAqB,EAAE,OAAO,EAAE,8BAA8B,CAAC,CAAC;IACnG,CAAC,CAAC,CAAC;IAEL,UAAU;SACP,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,iDAAiD,CAAC;SAC9D,MAAM,CAAC,iBAAiB,EAAE,uGAAuG,EAAE,iBAAiB,CAAC;SACrJ,MAAM,CAAC,gBAAgB,EAAE,2BAA2B,CAAC;SACrD,MAAM,CAAC,uBAAuB,EAAE,yBAAyB,CAAC;SAC1D,MAAM,CAAC,eAAe,EAAE,qBAAqB,CAAC;SAC9C,MAAM,CAAC,iBAAiB,EAAE,uBAAuB,CAAC;SAClD,MAAM,CAAC,kBAAkB,EAAE,wBAAwB,CAAC;SACpD,cAAc,CAAC,iBAAiB,EAAE,2BAA2B,CAAC;SAC9D,MAAM,CAAC,cAAc,EAAE,4DAA4D,CAAC;SACpF,MAAM,CAAC,iBAAiB,EAAE,2BAA2B,CAAC;SACtD,MAAM,CAAC,YAAY,EAAE,gCAAgC,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;SACtF,MAAM,CAAC,QAAQ,EAAE,8BAA8B,CAAC;SAChD,MAAM,CAAC,CAAC,OAAsB,EAAE,EAAE;QACjC,MAAM,OAAO,GAAG,IAAI,GAAG,CAA0B;YAC/C,cAAc;YACd,iBAAiB;YACjB,kBAAkB;YAClB,iBAAiB;YACjB,oBAAoB;SACrB,CAAC,CAAC;QACH,MAAM,KAAK,GAAG,OAAO,CAAC,KAAgC,CAAC;QACvD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YACxB,MAAM,OAAO,GAAG,6BAA6B,OAAO,CAAC,KAAK,GAAG,CAAC;YAC9D,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;gBACjB,SAAS,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;YAChD,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,OAAO,IAAI,CAAC,CAAC,CAAC;YAC7C,CAAC;YACD,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;YACrB,OAAO;QACT,CAAC;QACD,MAAM,WAAW,GAAG,IAAA,yCAA0B,EAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QAC9D,mBAAmB,CAAC,WAAW,EAAE,KAAK,EAAE,OAAO,EAAE,qCAAqC,CAAC,CAAC;IAC1F,CAAC,CAAC,CAAC;IAEL,UAAU;SACP,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,4EAA4E,CAAC;SACzF,MAAM,CAAC,QAAQ,EAAE,8BAA8B,CAAC;SAChD,MAAM,CAAC,CAAC,OAA2B,EAAE,EAAE;QACtC,MAAM,WAAW,GAAG,IAAA,yCAA0B,EAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QAC9D,MAAM,QAAQ,GAAG,IAAA,qDAA8B,EAAC,WAAW,CAAC,CAAC;QAC7D,MAAM,OAAO,GAAG,IAAA,yDAAkC,EAAC,QAAQ,CAAC,CAAC;QAC7D,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,SAAS,CAAC,OAAO,CAAC,CAAC;YACnB,OAAO;QACT,CAAC;QACD,aAAa,CAAC,OAAO,CAAC,CAAC;QACvB,IAAI,OAAO,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC;YAC3B,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACvB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Quickstart Command
3
+ *
4
+ * Guided onboarding flow. Gets a new engineer to first deterministic finding
5
+ * within 2 minutes. Zero interactive prompts. Zero network calls.
6
+ *
7
+ * What it does:
8
+ * 1. Resolves project root (git repo required)
9
+ * 2. Initializes .neurcode/ directory
10
+ * 3. Writes starter policy if none exists
11
+ * 4. Writes starter config skeleton if none exists
12
+ * 5. Prints 5-step verify flow explanation
13
+ * 6. Prints local-only mode explanation
14
+ * 7. Recommends next commands
15
+ */
16
+ export interface QuickstartOptions {
17
+ json?: boolean;
18
+ force?: boolean;
19
+ }
20
+ export declare function quickstartCommand(options?: QuickstartOptions): Promise<void>;
21
+ //# sourceMappingURL=quickstart.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quickstart.d.ts","sourceRoot":"","sources":["../../src/commands/quickstart.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAQH,MAAM,WAAW,iBAAiB;IAChC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AA8DD,wBAAsB,iBAAiB,CAAC,OAAO,GAAE,iBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC,CA8GtF"}
@@ -0,0 +1,178 @@
1
+ "use strict";
2
+ /**
3
+ * Quickstart Command
4
+ *
5
+ * Guided onboarding flow. Gets a new engineer to first deterministic finding
6
+ * within 2 minutes. Zero interactive prompts. Zero network calls.
7
+ *
8
+ * What it does:
9
+ * 1. Resolves project root (git repo required)
10
+ * 2. Initializes .neurcode/ directory
11
+ * 3. Writes starter policy if none exists
12
+ * 4. Writes starter config skeleton if none exists
13
+ * 5. Prints 5-step verify flow explanation
14
+ * 6. Prints local-only mode explanation
15
+ * 7. Recommends next commands
16
+ */
17
+ var __importDefault = (this && this.__importDefault) || function (mod) {
18
+ return (mod && mod.__esModule) ? mod : { "default": mod };
19
+ };
20
+ Object.defineProperty(exports, "__esModule", { value: true });
21
+ exports.quickstartCommand = quickstartCommand;
22
+ const fs_1 = require("fs");
23
+ const path_1 = require("path");
24
+ const chalk_1 = __importDefault(require("chalk"));
25
+ const project_root_1 = require("../utils/project-root");
26
+ const pilot_readiness_1 = require("../governance/pilot-readiness");
27
+ const STARTER_POLICY = `# Neurcode Starter Policy
28
+ # Generated by neurcode quickstart
29
+ # Edit this file to add governance rules for your project.
30
+ #
31
+ # Policy structure:
32
+ # - id: unique rule identifier
33
+ # name: human-readable name
34
+ # description: what this rule enforces
35
+ # severity: BLOCKING | ADVISORY
36
+ # pattern: file glob this rule applies to
37
+ #
38
+ # After editing, run: neurcode policy compile
39
+ #
40
+ # Full policy reference: https://docs.neurcode.com/policy
41
+
42
+ name: "Starter Policy"
43
+ version: "1.0.0"
44
+ description: "Neurcode starter governance policy"
45
+
46
+ rules:
47
+ - id: "REQUIRE_CHANGE_INTENT"
48
+ name: "Require Change Intent"
49
+ description: "All PRs must have a declared change intent documented in the plan."
50
+ severity: ADVISORY
51
+
52
+ - id: "STRUCTURAL_BASELINE"
53
+ name: "Structural Baseline"
54
+ description: "Enforce deterministic structural rules (SR001-SR010) on all code changes."
55
+ severity: BLOCKING
56
+ scope: structural
57
+
58
+ - id: "NO_SILENT_FAILURES"
59
+ name: "No Silent Failures"
60
+ description: "Async operations must not silently swallow exceptions (SR001)."
61
+ severity: BLOCKING
62
+ scope: structural
63
+ ruleIds: [SR001]
64
+ `;
65
+ const STARTER_CONFIG_TEMPLATE = (projectRoot) => JSON.stringify({
66
+ _comment: 'Neurcode project config. Run `neurcode init` to bind to a remote project.',
67
+ projectId: null,
68
+ orgId: null,
69
+ projectRoot,
70
+ localOnlyMode: true,
71
+ structuralRulesEnabled: true,
72
+ _generatedBy: 'neurcode quickstart',
73
+ }, null, 2);
74
+ function printBanner(text) {
75
+ console.log(chalk_1.default.bold.cyan(`\n${'═'.repeat(60)}`));
76
+ console.log(chalk_1.default.bold.white(` ${text}`));
77
+ console.log(chalk_1.default.cyan('═'.repeat(60)));
78
+ }
79
+ function printStep(n, title, desc) {
80
+ console.log(chalk_1.default.bold.white(`\n Step ${n}: ${title}`));
81
+ console.log(chalk_1.default.dim(` ${desc}`));
82
+ }
83
+ async function quickstartCommand(options = {}) {
84
+ const rootTrace = (0, project_root_1.resolveNeurcodeProjectRootWithTrace)(process.cwd());
85
+ const projectRoot = rootTrace.projectRoot;
86
+ const neurcodeDir = (0, path_1.join)(projectRoot, '.neurcode');
87
+ const created = [];
88
+ const skipped = [];
89
+ if (!options.json) {
90
+ printBanner('Neurcode Quickstart — First Governance Finding in < 2 Minutes');
91
+ console.log(chalk_1.default.dim('\n Setting up deterministic governance for this repository.\n'));
92
+ }
93
+ // 1. Initialize .neurcode/
94
+ if (!(0, fs_1.existsSync)(neurcodeDir)) {
95
+ (0, fs_1.mkdirSync)(neurcodeDir, { recursive: true });
96
+ created.push('.neurcode/');
97
+ }
98
+ // 2. Write starter policy
99
+ const policyPath = (0, path_1.join)(neurcodeDir, 'policy.yml');
100
+ if (!(0, fs_1.existsSync)(policyPath) || options.force) {
101
+ (0, fs_1.writeFileSync)(policyPath, STARTER_POLICY, 'utf-8');
102
+ created.push('.neurcode/policy.yml');
103
+ }
104
+ else {
105
+ skipped.push('.neurcode/policy.yml (already exists)');
106
+ }
107
+ // 3. Write starter config
108
+ const configPath = (0, path_1.join)(neurcodeDir, 'config.json');
109
+ if (!(0, fs_1.existsSync)(configPath) || options.force) {
110
+ (0, fs_1.writeFileSync)(configPath, STARTER_CONFIG_TEMPLATE(projectRoot), 'utf-8');
111
+ created.push('.neurcode/config.json');
112
+ }
113
+ else {
114
+ skipped.push('.neurcode/config.json (already exists)');
115
+ }
116
+ if (options.json) {
117
+ const readiness = (0, pilot_readiness_1.runPilotReadinessCheck)(projectRoot);
118
+ console.log(JSON.stringify({
119
+ success: true,
120
+ projectRoot,
121
+ created,
122
+ skipped,
123
+ readiness: {
124
+ status: readiness.ready ? 'ready' : 'not-ready',
125
+ passing: readiness.checks.filter(c => c.status === 'pass').length,
126
+ total: readiness.checks.length,
127
+ },
128
+ }, null, 2));
129
+ return;
130
+ }
131
+ // Print created/skipped
132
+ if (created.length > 0) {
133
+ console.log(chalk_1.default.green(' Created:'));
134
+ for (const f of created)
135
+ console.log(chalk_1.default.green(` ✅ ${f}`));
136
+ }
137
+ if (skipped.length > 0) {
138
+ console.log(chalk_1.default.dim(' Skipped (already exists):'));
139
+ for (const f of skipped)
140
+ console.log(chalk_1.default.dim(` ⏭️ ${f}`));
141
+ }
142
+ // 4. Explain the verify flow
143
+ printBanner('How Neurcode Verify Works');
144
+ printStep(1, 'Set intent', 'Run `neurcode start "I am adding X feature to Y service"` to declare governance intent and expected scope.');
145
+ printStep(2, 'Write code', 'Use your AI tools (Cursor, Claude Code, Codex) to generate or write code.');
146
+ printStep(3, 'Run verify', 'Run `neurcode verify --evidence` to check your code against intent, policies, and structural rules.');
147
+ printStep(4, 'Review findings', 'BLOCKING findings must be resolved. ADVISORY findings are informational.\n' +
148
+ ' Structural rules (SR001–SR010) are deterministic — same code = same result, always.');
149
+ printStep(5, 'Iterate', 'Export remediation context if needed, apply external edits, then re-run verify. When passing, the PR is governance-cleared.');
150
+ // 5. Explain local-only mode
151
+ printBanner('Local-Only Mode (No Network Required)');
152
+ console.log(chalk_1.default.dim('\n `neurcode verify --local-only` runs deterministic structural analysis'));
153
+ console.log(chalk_1.default.dim(' without network access. It uses AST-backed rules to detect:'));
154
+ console.log(chalk_1.default.dim('\n SR001 — Swallowed async rejections'));
155
+ console.log(chalk_1.default.dim(' SR002 — Missing error propagation'));
156
+ console.log(chalk_1.default.dim(' SR003 — Timer/resource leaks'));
157
+ console.log(chalk_1.default.dim(' SR004 — Unvalidated external inputs'));
158
+ console.log(chalk_1.default.dim(' SR005–SR010 — Additional structural integrity rules\n'));
159
+ console.log(chalk_1.default.dim(' These findings are:'));
160
+ console.log(chalk_1.default.dim(' • Deterministic — same code always produces same finding'));
161
+ console.log(chalk_1.default.dim(' • Reproducible — identical on any machine, any time'));
162
+ console.log(chalk_1.default.dim(' • No LLM involved — pure AST analysis\n'));
163
+ // 6. Next commands
164
+ printBanner('Recommended Next Commands');
165
+ console.log('');
166
+ console.log(chalk_1.default.bold.white(' 1. Run a governance check right now (no network required):'));
167
+ console.log(chalk_1.default.cyan(' neurcode verify --local-only\n'));
168
+ console.log(chalk_1.default.bold.white(' 2. Check system readiness:'));
169
+ console.log(chalk_1.default.cyan(' neurcode doctor\n'));
170
+ console.log(chalk_1.default.bold.white(' 3. Generate enterprise-specific policies:'));
171
+ console.log(chalk_1.default.cyan(' neurcode bootstrap-policy\n'));
172
+ console.log(chalk_1.default.bold.white(' 4. Set a plan for full governance:'));
173
+ console.log(chalk_1.default.cyan(' neurcode plan "describe your change intent"\n'));
174
+ console.log(chalk_1.default.bold.white(' 5. Connect to a remote project (requires API key):'));
175
+ console.log(chalk_1.default.cyan(' neurcode login && neurcode init\n'));
176
+ console.log(chalk_1.default.bold.green(' ✅ Quickstart complete. Run `neurcode verify --local-only` to get your first finding.\n'));
177
+ }
178
+ //# sourceMappingURL=quickstart.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quickstart.js","sourceRoot":"","sources":["../../src/commands/quickstart.ts"],"names":[],"mappings":"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"}