@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.
- package/dist/commands/bootstrap-policy.d.ts +29 -0
- package/dist/commands/bootstrap-policy.d.ts.map +1 -0
- package/dist/commands/bootstrap-policy.js +334 -0
- package/dist/commands/bootstrap-policy.js.map +1 -0
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +82 -0
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/governance.d.ts +3 -0
- package/dist/commands/governance.d.ts.map +1 -0
- package/dist/commands/governance.js +390 -0
- package/dist/commands/governance.js.map +1 -0
- package/dist/commands/quickstart.d.ts +21 -0
- package/dist/commands/quickstart.d.ts.map +1 -0
- package/dist/commands/quickstart.js +178 -0
- package/dist/commands/quickstart.js.map +1 -0
- package/dist/commands/remediate-export.d.ts +36 -0
- package/dist/commands/remediate-export.d.ts.map +1 -0
- package/dist/commands/remediate-export.js +1072 -0
- package/dist/commands/remediate-export.js.map +1 -0
- package/dist/commands/replay.d.ts.map +1 -1
- package/dist/commands/replay.js +14 -0
- package/dist/commands/replay.js.map +1 -1
- package/dist/commands/session.d.ts +7 -0
- package/dist/commands/session.d.ts.map +1 -1
- package/dist/commands/session.js +156 -0
- package/dist/commands/session.js.map +1 -1
- package/dist/commands/start-intent.d.ts.map +1 -1
- package/dist/commands/start-intent.js +61 -11
- package/dist/commands/start-intent.js.map +1 -1
- package/dist/commands/verify-guidance.d.ts +5 -0
- package/dist/commands/verify-guidance.d.ts.map +1 -0
- package/dist/commands/verify-guidance.js +49 -0
- package/dist/commands/verify-guidance.js.map +1 -0
- package/dist/commands/verify-output.d.ts +37 -0
- package/dist/commands/verify-output.d.ts.map +1 -0
- package/dist/commands/verify-output.js +572 -0
- package/dist/commands/verify-output.js.map +1 -0
- package/dist/commands/verify-render.d.ts +41 -0
- package/dist/commands/verify-render.d.ts.map +1 -0
- package/dist/commands/verify-render.js +457 -0
- package/dist/commands/verify-render.js.map +1 -0
- package/dist/commands/verify.d.ts.map +1 -1
- package/dist/commands/verify.js +384 -1091
- package/dist/commands/verify.js.map +1 -1
- package/dist/commands/workspace.d.ts.map +1 -1
- package/dist/commands/workspace.js +3 -14
- package/dist/commands/workspace.js.map +1 -1
- package/dist/context-engine/graph.d.ts.map +1 -1
- package/dist/context-engine/graph.js +69 -7
- package/dist/context-engine/graph.js.map +1 -1
- package/dist/context-engine/scanner.d.ts.map +1 -1
- package/dist/context-engine/scanner.js +9 -2
- package/dist/context-engine/scanner.js.map +1 -1
- package/dist/daemon/compatibility/execution.d.ts +42 -0
- package/dist/daemon/compatibility/execution.d.ts.map +1 -0
- package/dist/daemon/compatibility/execution.js +183 -0
- package/dist/daemon/compatibility/execution.js.map +1 -0
- package/dist/daemon/compatibility/mutation.d.ts +24 -0
- package/dist/daemon/compatibility/mutation.d.ts.map +1 -0
- package/dist/daemon/compatibility/mutation.js +724 -0
- package/dist/daemon/compatibility/mutation.js.map +1 -0
- package/dist/daemon/routes.d.ts +19 -0
- package/dist/daemon/routes.d.ts.map +1 -0
- package/dist/daemon/routes.js +123 -0
- package/dist/daemon/routes.js.map +1 -0
- package/dist/daemon/runtime/execution-bus.d.ts +217 -0
- package/dist/daemon/runtime/execution-bus.d.ts.map +1 -0
- package/dist/daemon/runtime/execution-bus.js +1420 -0
- package/dist/daemon/runtime/execution-bus.js.map +1 -0
- package/dist/daemon/runtime/workspace-runtime.d.ts +280 -0
- package/dist/daemon/runtime/workspace-runtime.d.ts.map +1 -0
- package/dist/daemon/runtime/workspace-runtime.js +1473 -0
- package/dist/daemon/runtime/workspace-runtime.js.map +1 -0
- package/dist/daemon/server.d.ts.map +1 -1
- package/dist/daemon/server.js +171 -874
- package/dist/daemon/server.js.map +1 -1
- package/dist/daemon/shaping.d.ts +11 -0
- package/dist/daemon/shaping.d.ts.map +1 -0
- package/dist/daemon/shaping.js +240 -0
- package/dist/daemon/shaping.js.map +1 -0
- package/dist/governance/canonical-invariants.d.ts +88 -0
- package/dist/governance/canonical-invariants.d.ts.map +1 -0
- package/dist/governance/canonical-invariants.js +197 -0
- package/dist/governance/canonical-invariants.js.map +1 -0
- package/dist/governance/canonical-ordering.d.ts +76 -0
- package/dist/governance/canonical-ordering.d.ts.map +1 -0
- package/dist/governance/canonical-ordering.js +189 -0
- package/dist/governance/canonical-ordering.js.map +1 -0
- package/dist/governance/canonical-pipeline.d.ts +9 -1
- package/dist/governance/canonical-pipeline.d.ts.map +1 -1
- package/dist/governance/canonical-pipeline.js +367 -24
- package/dist/governance/canonical-pipeline.js.map +1 -1
- package/dist/governance/diff-line-provenance.d.ts +59 -0
- package/dist/governance/diff-line-provenance.d.ts.map +1 -0
- package/dist/governance/diff-line-provenance.js +118 -0
- package/dist/governance/diff-line-provenance.js.map +1 -0
- package/dist/governance/pilot-readiness.d.ts +34 -0
- package/dist/governance/pilot-readiness.d.ts.map +1 -0
- package/dist/governance/pilot-readiness.js +226 -0
- package/dist/governance/pilot-readiness.js.map +1 -0
- package/dist/governance/policy-parity-validator.d.ts +62 -0
- package/dist/governance/policy-parity-validator.d.ts.map +1 -0
- package/dist/governance/policy-parity-validator.js +137 -0
- package/dist/governance/policy-parity-validator.js.map +1 -0
- package/dist/governance/remediation-boundary.d.ts +55 -0
- package/dist/governance/remediation-boundary.d.ts.map +1 -0
- package/dist/governance/remediation-boundary.js +120 -0
- package/dist/governance/remediation-boundary.js.map +1 -0
- package/dist/governance/structural-cache.d.ts +103 -0
- package/dist/governance/structural-cache.d.ts.map +1 -0
- package/dist/governance/structural-cache.js +235 -0
- package/dist/governance/structural-cache.js.map +1 -0
- package/dist/governance/structural-on-diff.d.ts +22 -2
- package/dist/governance/structural-on-diff.d.ts.map +1 -1
- package/dist/governance/structural-on-diff.js +36 -4
- package/dist/governance/structural-on-diff.js.map +1 -1
- package/dist/governance/structural-policy-merge.d.ts +8 -0
- package/dist/governance/structural-policy-merge.d.ts.map +1 -1
- package/dist/governance/structural-policy-merge.js +7 -0
- package/dist/governance/structural-policy-merge.js.map +1 -1
- package/dist/governance/verify-runtime-guard.d.ts +99 -0
- package/dist/governance/verify-runtime-guard.d.ts.map +1 -0
- package/dist/governance/verify-runtime-guard.js +129 -0
- package/dist/governance/verify-runtime-guard.js.map +1 -0
- package/dist/index.js +277 -77
- package/dist/index.js.map +1 -1
- package/dist/intent-engine/repo-classifier.d.ts +64 -0
- package/dist/intent-engine/repo-classifier.d.ts.map +1 -0
- package/dist/intent-engine/repo-classifier.js +178 -0
- package/dist/intent-engine/repo-classifier.js.map +1 -0
- package/dist/structural-rules/index.d.ts +4 -0
- package/dist/structural-rules/index.d.ts.map +1 -1
- package/dist/structural-rules/index.js +18 -1
- package/dist/structural-rules/index.js.map +1 -1
- package/dist/structural-rules/python/PY003-broad-except-clause.d.ts +21 -0
- package/dist/structural-rules/python/PY003-broad-except-clause.d.ts.map +1 -1
- package/dist/structural-rules/python/PY003-broad-except-clause.js +212 -21
- package/dist/structural-rules/python/PY003-broad-except-clause.js.map +1 -1
- package/dist/structural-rules/python/PY011-thread-lifecycle.d.ts +11 -0
- package/dist/structural-rules/python/PY011-thread-lifecycle.d.ts.map +1 -0
- package/dist/structural-rules/python/PY011-thread-lifecycle.js +97 -0
- package/dist/structural-rules/python/PY011-thread-lifecycle.js.map +1 -0
- package/dist/structural-rules/python/PY012-asyncio-run-misuse.d.ts +11 -0
- package/dist/structural-rules/python/PY012-asyncio-run-misuse.d.ts.map +1 -0
- package/dist/structural-rules/python/PY012-asyncio-run-misuse.js +83 -0
- package/dist/structural-rules/python/PY012-asyncio-run-misuse.js.map +1 -0
- package/dist/structural-rules/python/PY013-mutable-default-arg.d.ts +11 -0
- package/dist/structural-rules/python/PY013-mutable-default-arg.d.ts.map +1 -0
- package/dist/structural-rules/python/PY013-mutable-default-arg.js +73 -0
- package/dist/structural-rules/python/PY013-mutable-default-arg.js.map +1 -0
- package/dist/structural-rules/python/PY014-fixed-sleep-retry.d.ts +11 -0
- package/dist/structural-rules/python/PY014-fixed-sleep-retry.d.ts.map +1 -0
- package/dist/structural-rules/python/PY014-fixed-sleep-retry.js +115 -0
- package/dist/structural-rules/python/PY014-fixed-sleep-retry.js.map +1 -0
- package/dist/structural-rules/types.d.ts +12 -0
- package/dist/structural-rules/types.d.ts.map +1 -1
- package/dist/utils/active-engineering-context.d.ts +12 -0
- package/dist/utils/active-engineering-context.d.ts.map +1 -0
- package/dist/utils/active-engineering-context.js +67 -0
- package/dist/utils/active-engineering-context.js.map +1 -0
- package/dist/utils/artifact-io.d.ts +33 -0
- package/dist/utils/artifact-io.d.ts.map +1 -0
- package/dist/utils/artifact-io.js +183 -0
- package/dist/utils/artifact-io.js.map +1 -0
- package/dist/utils/change-contract.d.ts +6 -2
- package/dist/utils/change-contract.d.ts.map +1 -1
- package/dist/utils/change-contract.js +175 -0
- package/dist/utils/change-contract.js.map +1 -1
- package/dist/utils/context-pack.d.ts +12 -0
- package/dist/utils/context-pack.d.ts.map +1 -0
- package/dist/utils/context-pack.js +147 -0
- package/dist/utils/context-pack.js.map +1 -0
- package/dist/utils/control-plane.d.ts +18 -0
- package/dist/utils/control-plane.d.ts.map +1 -1
- package/dist/utils/control-plane.js +31 -4
- package/dist/utils/control-plane.js.map +1 -1
- package/dist/utils/drift-intelligence.d.ts +47 -0
- package/dist/utils/drift-intelligence.d.ts.map +1 -0
- package/dist/utils/drift-intelligence.js +2099 -0
- package/dist/utils/drift-intelligence.js.map +1 -0
- package/dist/utils/execution-actions.d.ts +22 -0
- package/dist/utils/execution-actions.d.ts.map +1 -0
- package/dist/utils/execution-actions.js +103 -0
- package/dist/utils/execution-actions.js.map +1 -0
- package/dist/utils/execution-bus.d.ts +1 -214
- package/dist/utils/execution-bus.d.ts.map +1 -1
- package/dist/utils/execution-bus.js +15 -1359
- package/dist/utils/execution-bus.js.map +1 -1
- package/dist/utils/git.d.ts +1 -0
- package/dist/utils/git.d.ts.map +1 -1
- package/dist/utils/git.js +13 -3
- package/dist/utils/git.js.map +1 -1
- package/dist/utils/governance-decisions.d.ts +75 -0
- package/dist/utils/governance-decisions.d.ts.map +1 -0
- package/dist/utils/governance-decisions.js +412 -0
- package/dist/utils/governance-decisions.js.map +1 -0
- package/dist/utils/governance-provenance.d.ts +1 -1
- package/dist/utils/governance-provenance.d.ts.map +1 -1
- package/dist/utils/governance-provenance.js +5 -7
- package/dist/utils/governance-provenance.js.map +1 -1
- package/dist/utils/governance.d.ts +108 -0
- package/dist/utils/governance.d.ts.map +1 -1
- package/dist/utils/governance.js +209 -7
- package/dist/utils/governance.js.map +1 -1
- package/dist/utils/intelligence-runtime-common.d.ts +30 -0
- package/dist/utils/intelligence-runtime-common.d.ts.map +1 -0
- package/dist/utils/intelligence-runtime-common.js +156 -0
- package/dist/utils/intelligence-runtime-common.js.map +1 -0
- package/dist/utils/intent-contract-diagnostics.d.ts +9 -0
- package/dist/utils/intent-contract-diagnostics.d.ts.map +1 -0
- package/dist/utils/intent-contract-diagnostics.js +322 -0
- package/dist/utils/intent-contract-diagnostics.js.map +1 -0
- package/dist/utils/intent-pack.d.ts +15 -0
- package/dist/utils/intent-pack.d.ts.map +1 -0
- package/dist/utils/intent-pack.js +196 -0
- package/dist/utils/intent-pack.js.map +1 -0
- package/dist/utils/plan-sync.d.ts +1 -0
- package/dist/utils/plan-sync.d.ts.map +1 -1
- package/dist/utils/plan-sync.js +23 -0
- package/dist/utils/plan-sync.js.map +1 -1
- package/dist/utils/policy-decision.d.ts +5 -0
- package/dist/utils/policy-decision.d.ts.map +1 -0
- package/dist/utils/policy-decision.js +17 -0
- package/dist/utils/policy-decision.js.map +1 -0
- package/dist/utils/replay-custody.d.ts +43 -0
- package/dist/utils/replay-custody.d.ts.map +1 -0
- package/dist/utils/replay-custody.js +168 -0
- package/dist/utils/replay-custody.js.map +1 -0
- package/dist/utils/replay-runtime.d.ts +13 -0
- package/dist/utils/replay-runtime.d.ts.map +1 -1
- package/dist/utils/replay-runtime.js +96 -9
- package/dist/utils/replay-runtime.js.map +1 -1
- package/dist/utils/repository-intelligence.d.ts +9 -0
- package/dist/utils/repository-intelligence.d.ts.map +1 -0
- package/dist/utils/repository-intelligence.js +372 -0
- package/dist/utils/repository-intelligence.js.map +1 -0
- package/dist/utils/runtime-events.d.ts.map +1 -1
- package/dist/utils/runtime-events.js +25 -6
- package/dist/utils/runtime-events.js.map +1 -1
- package/dist/utils/semantic-contract-intelligence.d.ts +20 -0
- package/dist/utils/semantic-contract-intelligence.d.ts.map +1 -0
- package/dist/utils/semantic-contract-intelligence.js +825 -0
- package/dist/utils/semantic-contract-intelligence.js.map +1 -0
- package/dist/utils/session-continuity.d.ts +56 -0
- package/dist/utils/session-continuity.d.ts.map +1 -0
- package/dist/utils/session-continuity.js +318 -0
- package/dist/utils/session-continuity.js.map +1 -0
- package/dist/utils/verification-evidence.d.ts.map +1 -1
- package/dist/utils/verification-evidence.js +4 -1
- package/dist/utils/verification-evidence.js.map +1 -1
- package/dist/utils/verify-runtime-stability.d.ts +142 -0
- package/dist/utils/verify-runtime-stability.d.ts.map +1 -0
- package/dist/utils/verify-runtime-stability.js +230 -0
- package/dist/utils/verify-runtime-stability.js.map +1 -0
- package/dist/utils/workspace-runtime.d.ts +1 -266
- package/dist/utils/workspace-runtime.d.ts.map +1 -1
- package/dist/utils/workspace-runtime.js +15 -1412
- package/dist/utils/workspace-runtime.js.map +1 -1
- package/package.json +11 -10
- 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":"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"}
|
|
@@ -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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"}
|