@neurcode-ai/cli 0.9.29 → 0.9.30
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/LICENSE +201 -0
- package/dist/api-client.d.ts +20 -0
- package/dist/api-client.d.ts.map +1 -1
- package/dist/api-client.js +11 -0
- package/dist/api-client.js.map +1 -1
- package/dist/commands/apply.d.ts.map +1 -1
- package/dist/commands/apply.js +33 -0
- package/dist/commands/apply.js.map +1 -1
- package/dist/commands/approve.d.ts +11 -0
- package/dist/commands/approve.d.ts.map +1 -0
- package/dist/commands/approve.js +116 -0
- package/dist/commands/approve.js.map +1 -0
- package/dist/commands/prompt.d.ts.map +1 -1
- package/dist/commands/prompt.js +47 -3
- package/dist/commands/prompt.js.map +1 -1
- package/dist/commands/ship.d.ts +2 -0
- package/dist/commands/ship.d.ts.map +1 -1
- package/dist/commands/ship.js +228 -1
- package/dist/commands/ship.js.map +1 -1
- package/dist/commands/verify.d.ts +2 -0
- package/dist/commands/verify.d.ts.map +1 -1
- package/dist/commands/verify.js +240 -7
- package/dist/commands/verify.js.map +1 -1
- package/dist/index.js +26 -0
- package/dist/index.js.map +1 -1
- package/dist/utils/governance.d.ts +33 -0
- package/dist/utils/governance.d.ts.map +1 -0
- package/dist/utils/governance.js +68 -0
- package/dist/utils/governance.js.map +1 -0
- package/dist/utils/manual-approvals.d.ts +20 -0
- package/dist/utils/manual-approvals.d.ts.map +1 -0
- package/dist/utils/manual-approvals.js +104 -0
- package/dist/utils/manual-approvals.js.map +1 -0
- package/package.json +12 -9
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"approve.d.ts","sourceRoot":"","sources":["../../src/commands/approve.ts"],"names":[],"mappings":"AAuBA,UAAU,cAAc;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAsCD,wBAAgB,cAAc,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI,CA2E5D"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.approveCommand = approveCommand;
|
|
4
|
+
const child_process_1 = require("child_process");
|
|
5
|
+
const manual_approvals_1 = require("../utils/manual-approvals");
|
|
6
|
+
const project_root_1 = require("../utils/project-root");
|
|
7
|
+
let chalk;
|
|
8
|
+
try {
|
|
9
|
+
chalk = require('chalk');
|
|
10
|
+
}
|
|
11
|
+
catch {
|
|
12
|
+
chalk = {
|
|
13
|
+
green: (str) => str,
|
|
14
|
+
yellow: (str) => str,
|
|
15
|
+
red: (str) => str,
|
|
16
|
+
dim: (str) => str,
|
|
17
|
+
bold: (str) => str,
|
|
18
|
+
cyan: (str) => str,
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
function resolveCommitSha(projectRoot, headOverride) {
|
|
22
|
+
if (typeof headOverride === 'string' && headOverride.trim()) {
|
|
23
|
+
return headOverride.trim().toLowerCase();
|
|
24
|
+
}
|
|
25
|
+
return (0, child_process_1.execSync)('git rev-parse HEAD', {
|
|
26
|
+
cwd: projectRoot,
|
|
27
|
+
encoding: 'utf-8',
|
|
28
|
+
stdio: ['ignore', 'pipe', 'ignore'],
|
|
29
|
+
})
|
|
30
|
+
.trim()
|
|
31
|
+
.toLowerCase();
|
|
32
|
+
}
|
|
33
|
+
function resolveApprover(projectRoot, options) {
|
|
34
|
+
if (options.approver && options.approver.trim()) {
|
|
35
|
+
return options.approver.trim();
|
|
36
|
+
}
|
|
37
|
+
if (process.env.NEURCODE_APPROVER && process.env.NEURCODE_APPROVER.trim()) {
|
|
38
|
+
return process.env.NEURCODE_APPROVER.trim();
|
|
39
|
+
}
|
|
40
|
+
try {
|
|
41
|
+
const gitName = (0, child_process_1.execSync)('git config user.name', {
|
|
42
|
+
cwd: projectRoot,
|
|
43
|
+
encoding: 'utf-8',
|
|
44
|
+
stdio: ['ignore', 'pipe', 'ignore'],
|
|
45
|
+
}).trim();
|
|
46
|
+
if (gitName)
|
|
47
|
+
return gitName;
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
// Ignore git-config lookup failure.
|
|
51
|
+
}
|
|
52
|
+
if (process.env.USER && process.env.USER.trim()) {
|
|
53
|
+
return process.env.USER.trim();
|
|
54
|
+
}
|
|
55
|
+
return 'unknown-approver';
|
|
56
|
+
}
|
|
57
|
+
function approveCommand(options) {
|
|
58
|
+
const projectRoot = (0, project_root_1.resolveNeurcodeProjectRoot)(process.cwd());
|
|
59
|
+
const commitSha = resolveCommitSha(projectRoot, options.head);
|
|
60
|
+
if (options.list) {
|
|
61
|
+
const approvals = (0, manual_approvals_1.getManualApprovalsForCommit)(projectRoot, commitSha);
|
|
62
|
+
const distinctApprovers = (0, manual_approvals_1.countDistinctApprovers)(approvals);
|
|
63
|
+
if (options.json) {
|
|
64
|
+
console.log(JSON.stringify({
|
|
65
|
+
commitSha,
|
|
66
|
+
approvals,
|
|
67
|
+
total: approvals.length,
|
|
68
|
+
distinctApprovers,
|
|
69
|
+
storePath: (0, manual_approvals_1.getManualApprovalsPath)(projectRoot),
|
|
70
|
+
}, null, 2));
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
console.log(chalk.cyan('\nManual Approvals'));
|
|
74
|
+
console.log(chalk.dim(`Commit: ${commitSha}`));
|
|
75
|
+
if (approvals.length === 0) {
|
|
76
|
+
console.log(chalk.yellow('No approvals recorded for this commit.\n'));
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
approvals.forEach((item) => {
|
|
80
|
+
const reason = item.reason ? ` — ${item.reason}` : '';
|
|
81
|
+
console.log(chalk.dim(`• ${item.approver} @ ${item.approvedAt}${reason}`));
|
|
82
|
+
});
|
|
83
|
+
console.log(chalk.dim(`\nDistinct approvers: ${distinctApprovers}`));
|
|
84
|
+
console.log(chalk.dim(`Store: ${(0, manual_approvals_1.getManualApprovalsPath)(projectRoot)}\n`));
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
const approver = resolveApprover(projectRoot, options);
|
|
88
|
+
const approval = (0, manual_approvals_1.addManualApproval)(projectRoot, {
|
|
89
|
+
commitSha,
|
|
90
|
+
approver,
|
|
91
|
+
planId: options.planId || null,
|
|
92
|
+
reason: options.reason || null,
|
|
93
|
+
});
|
|
94
|
+
const approvals = (0, manual_approvals_1.getManualApprovalsForCommit)(projectRoot, commitSha);
|
|
95
|
+
const distinctApprovers = (0, manual_approvals_1.countDistinctApprovers)(approvals);
|
|
96
|
+
if (options.json) {
|
|
97
|
+
console.log(JSON.stringify({
|
|
98
|
+
success: true,
|
|
99
|
+
approval,
|
|
100
|
+
commitSha,
|
|
101
|
+
distinctApprovers,
|
|
102
|
+
totalApprovals: approvals.length,
|
|
103
|
+
storePath: (0, manual_approvals_1.getManualApprovalsPath)(projectRoot),
|
|
104
|
+
}, null, 2));
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
console.log(chalk.green('\n✅ Manual approval recorded'));
|
|
108
|
+
console.log(chalk.dim(` Commit: ${commitSha}`));
|
|
109
|
+
console.log(chalk.dim(` Approver: ${approval.approver}`));
|
|
110
|
+
if (approval.reason) {
|
|
111
|
+
console.log(chalk.dim(` Reason: ${approval.reason}`));
|
|
112
|
+
}
|
|
113
|
+
console.log(chalk.dim(` Distinct approvers for commit: ${distinctApprovers}`));
|
|
114
|
+
console.log(chalk.dim(` Store: ${(0, manual_approvals_1.getManualApprovalsPath)(projectRoot)}\n`));
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=approve.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"approve.js","sourceRoot":"","sources":["../../src/commands/approve.ts"],"names":[],"mappings":";;AAoEA,wCA2EC;AA/ID,iDAAyC;AACzC,gEAKmC;AACnC,wDAAmE;AAEnE,IAAI,KAAU,CAAC;AACf,IAAI,CAAC;IACH,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;AAC3B,CAAC;AAAC,MAAM,CAAC;IACP,KAAK,GAAG;QACN,KAAK,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,GAAG;QAC3B,MAAM,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,GAAG;QAC5B,GAAG,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,GAAG;QACzB,GAAG,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,GAAG;QACzB,IAAI,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,GAAG;QAC1B,IAAI,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,GAAG;KAC3B,CAAC;AACJ,CAAC;AAWD,SAAS,gBAAgB,CAAC,WAAmB,EAAE,YAAqB;IAClE,IAAI,OAAO,YAAY,KAAK,QAAQ,IAAI,YAAY,CAAC,IAAI,EAAE,EAAE,CAAC;QAC5D,OAAO,YAAY,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC3C,CAAC;IACD,OAAO,IAAA,wBAAQ,EAAC,oBAAoB,EAAE;QACpC,GAAG,EAAE,WAAW;QAChB,QAAQ,EAAE,OAAO;QACjB,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC;KACpC,CAAC;SACC,IAAI,EAAE;SACN,WAAW,EAAE,CAAC;AACnB,CAAC;AAED,SAAS,eAAe,CAAC,WAAmB,EAAE,OAAuB;IACnE,IAAI,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC;QAChD,OAAO,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;IACjC,CAAC;IACD,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,EAAE,EAAE,CAAC;QAC1E,OAAO,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC;IAC9C,CAAC;IACD,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,IAAA,wBAAQ,EAAC,sBAAsB,EAAE;YAC/C,GAAG,EAAE,WAAW;YAChB,QAAQ,EAAE,OAAO;YACjB,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC;SACpC,CAAC,CAAC,IAAI,EAAE,CAAC;QACV,IAAI,OAAO;YAAE,OAAO,OAAO,CAAC;IAC9B,CAAC;IAAC,MAAM,CAAC;QACP,oCAAoC;IACtC,CAAC;IACD,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;QAChD,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IACjC,CAAC;IACD,OAAO,kBAAkB,CAAC;AAC5B,CAAC;AAED,SAAgB,cAAc,CAAC,OAAuB;IACpD,MAAM,WAAW,GAAG,IAAA,yCAA0B,EAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAC9D,MAAM,SAAS,GAAG,gBAAgB,CAAC,WAAW,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IAE9D,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,MAAM,SAAS,GAAG,IAAA,8CAA2B,EAAC,WAAW,EAAE,SAAS,CAAC,CAAC;QACtE,MAAM,iBAAiB,GAAG,IAAA,yCAAsB,EAAC,SAAS,CAAC,CAAC;QAC5D,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,OAAO,CAAC,GAAG,CACT,IAAI,CAAC,SAAS,CACZ;gBACE,SAAS;gBACT,SAAS;gBACT,KAAK,EAAE,SAAS,CAAC,MAAM;gBACvB,iBAAiB;gBACjB,SAAS,EAAE,IAAA,yCAAsB,EAAC,WAAW,CAAC;aAC/C,EACD,IAAI,EACJ,CAAC,CACF,CACF,CAAC;YACF,OAAO;QACT,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC;QAC9C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,SAAS,EAAE,CAAC,CAAC,CAAC;QAC/C,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,0CAA0C,CAAC,CAAC,CAAC;YACtE,OAAO;QACT,CAAC;QACD,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YACzB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACtD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,QAAQ,MAAM,IAAI,CAAC,UAAU,GAAG,MAAM,EAAE,CAAC,CAAC,CAAC;QAC7E,CAAC,CAAC,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,yBAAyB,iBAAiB,EAAE,CAAC,CAAC,CAAC;QACrE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,IAAA,yCAAsB,EAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;QAC1E,OAAO;IACT,CAAC;IAED,MAAM,QAAQ,GAAG,eAAe,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IACvD,MAAM,QAAQ,GAAG,IAAA,oCAAiB,EAAC,WAAW,EAAE;QAC9C,SAAS;QACT,QAAQ;QACR,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,IAAI;QAC9B,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,IAAI;KAC/B,CAAC,CAAC;IACH,MAAM,SAAS,GAAG,IAAA,8CAA2B,EAAC,WAAW,EAAE,SAAS,CAAC,CAAC;IACtE,MAAM,iBAAiB,GAAG,IAAA,yCAAsB,EAAC,SAAS,CAAC,CAAC;IAE5D,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,OAAO,CAAC,GAAG,CACT,IAAI,CAAC,SAAS,CACZ;YACE,OAAO,EAAE,IAAI;YACb,QAAQ;YACR,SAAS;YACT,iBAAiB;YACjB,cAAc,EAAE,SAAS,CAAC,MAAM;YAChC,SAAS,EAAE,IAAA,yCAAsB,EAAC,WAAW,CAAC;SAC/C,EACD,IAAI,EACJ,CAAC,CACF,CACF,CAAC;QACF,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC,CAAC;IACzD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,SAAS,EAAE,CAAC,CAAC,CAAC;IAClD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,gBAAgB,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IAC5D,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAC1D,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,qCAAqC,iBAAiB,EAAE,CAAC,CAAC,CAAC;IACjF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,IAAA,yCAAsB,EAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;AAC/E,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../../src/commands/prompt.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../../src/commands/prompt.ts"],"names":[],"mappings":"AA+FA;;;GAGG;AACH,UAAU,aAAa;IACrB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AA0CD,wBAAsB,aAAa,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,iBAiP3E"}
|
package/dist/commands/prompt.js
CHANGED
|
@@ -42,6 +42,8 @@ const toolbox_service_1 = require("../services/toolbox-service");
|
|
|
42
42
|
const project_root_1 = require("../utils/project-root");
|
|
43
43
|
const fs_1 = require("fs");
|
|
44
44
|
const path_1 = require("path");
|
|
45
|
+
const core_1 = require("@neurcode-ai/core");
|
|
46
|
+
const policy_1 = require("@neurcode-ai/policy");
|
|
45
47
|
// Import chalk with fallback for plain strings if not available
|
|
46
48
|
let chalk;
|
|
47
49
|
try {
|
|
@@ -204,22 +206,27 @@ async function promptCommand(planId, options) {
|
|
|
204
206
|
}
|
|
205
207
|
// Fetch the prompt and intent from API
|
|
206
208
|
const { prompt: apiPrompt, intent, telemetry: apiTelemetry } = await client.getPlanPrompt(finalPlanId);
|
|
209
|
+
const planRecord = await client.getPlan(finalPlanId).catch(() => null);
|
|
207
210
|
// Clean apiPrompt: Remove any existing "Available Tools" section to avoid duplication
|
|
208
211
|
// The apiPrompt may contain an old toolbox summary from when the plan was originally generated
|
|
209
212
|
// Use regex to strip ANY existing "Available Tools" block
|
|
210
213
|
const toolsBlockRegex = /=== Available Tools[\s\S]*?=== END Available Tools ===/g;
|
|
211
214
|
let cleanedPrompt = apiPrompt.replace(toolsBlockRegex, '');
|
|
215
|
+
const projectRoot = (0, project_root_1.resolveNeurcodeProjectRoot)(process.cwd());
|
|
212
216
|
// Try to load asset map and append toolbox summary if available
|
|
213
217
|
let finalPrompt = cleanedPrompt;
|
|
218
|
+
let contextCandidateFiles = [];
|
|
214
219
|
try {
|
|
215
|
-
const
|
|
216
|
-
const map = (0, map_1.loadAssetMap)(cwd);
|
|
220
|
+
const map = (0, map_1.loadAssetMap)(projectRoot);
|
|
217
221
|
if (map && map.globalExports.length > 0) {
|
|
218
222
|
const toolboxSummary = (0, toolbox_service_1.generateToolboxSummary)(map, intent);
|
|
219
223
|
if (toolboxSummary) {
|
|
220
224
|
finalPrompt += toolboxSummary;
|
|
221
225
|
}
|
|
222
226
|
}
|
|
227
|
+
if (map) {
|
|
228
|
+
contextCandidateFiles = Object.keys(map.files || {});
|
|
229
|
+
}
|
|
223
230
|
}
|
|
224
231
|
catch (error) {
|
|
225
232
|
// Silently fail - toolbox summary is optional
|
|
@@ -227,7 +234,44 @@ async function promptCommand(planId, options) {
|
|
|
227
234
|
console.warn(chalk.yellow(`⚠️ Could not load asset map: ${error instanceof Error ? error.message : 'Unknown error'}`));
|
|
228
235
|
}
|
|
229
236
|
}
|
|
230
|
-
const
|
|
237
|
+
const plannedFiles = Array.isArray(planRecord?.content?.files)
|
|
238
|
+
? planRecord.content.files
|
|
239
|
+
.filter((file) => file.action !== 'BLOCK')
|
|
240
|
+
.map((file) => file.path)
|
|
241
|
+
: [];
|
|
242
|
+
contextCandidateFiles = [...new Set([...contextCandidateFiles, ...plannedFiles])];
|
|
243
|
+
const contextPolicy = (0, policy_1.loadContextPolicy)(projectRoot);
|
|
244
|
+
const contextAccess = (0, policy_1.evaluateContextAccess)(contextCandidateFiles, contextPolicy);
|
|
245
|
+
const allowedPreview = contextAccess.allowedContextFiles.slice(0, 120);
|
|
246
|
+
const deniedPreview = contextAccess.deniedReadFiles.slice(0, 60);
|
|
247
|
+
const accessEnvelope = [
|
|
248
|
+
'',
|
|
249
|
+
'=== Context Access Envelope ===',
|
|
250
|
+
'Use only the following repository context (AI Context Access Control):',
|
|
251
|
+
...allowedPreview.map((filePath) => `- ${filePath}`),
|
|
252
|
+
...(contextAccess.allowedContextFiles.length > allowedPreview.length
|
|
253
|
+
? [`- ... (${contextAccess.allowedContextFiles.length - allowedPreview.length} more allowed files)`]
|
|
254
|
+
: []),
|
|
255
|
+
deniedPreview.length > 0 ? '' : null,
|
|
256
|
+
deniedPreview.length > 0 ? 'Do NOT read or use these denied paths:' : null,
|
|
257
|
+
...deniedPreview.map((filePath) => `- ${filePath}`),
|
|
258
|
+
...(contextAccess.deniedReadFiles.length > deniedPreview.length
|
|
259
|
+
? [`- ... (${contextAccess.deniedReadFiles.length - deniedPreview.length} more denied files)`]
|
|
260
|
+
: []),
|
|
261
|
+
'=== END Context Access Envelope ===',
|
|
262
|
+
'',
|
|
263
|
+
].filter((line) => typeof line === 'string');
|
|
264
|
+
finalPrompt += accessEnvelope.join('\n');
|
|
265
|
+
const promptContextLogPath = (0, core_1.resolveNeurcodeFile)(projectRoot, core_1.PROMPT_CONTEXT_LOG_FILENAME);
|
|
266
|
+
(0, core_1.writeJsonFile)(promptContextLogPath, {
|
|
267
|
+
generatedAt: new Date().toISOString(),
|
|
268
|
+
planId: finalPlanId,
|
|
269
|
+
task: intent,
|
|
270
|
+
policy: contextPolicy,
|
|
271
|
+
contextProvided: contextAccess.allowedContextFiles,
|
|
272
|
+
deniedContext: contextAccess.deniedReadFiles,
|
|
273
|
+
sourceCandidates: contextCandidateFiles.length,
|
|
274
|
+
});
|
|
231
275
|
let outputPath = null;
|
|
232
276
|
if (options?.output && options.output.trim()) {
|
|
233
277
|
outputPath = writePromptOutputFile(projectRoot, options.output.trim(), finalPrompt);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../src/commands/prompt.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+IA,sCAmMC;AAlVD,sCAAsD;AACtD,8CAA0C;AAC1C,0CAA+C;AAC/C,+BAAqC;AACrC,iEAAqE;AACrE,wDAAmE;AACnE,2BAA0D;AAC1D,+BAAwC;AAExC,gEAAgE;AAChE,IAAI,KAAU,CAAC;AACf,IAAI,CAAC;IACH,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;AAC3B,CAAC;AAAC,MAAM,CAAC;IACP,kEAAkE;IAClE,KAAK,GAAG;QACN,KAAK,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,GAAG;QAC3B,MAAM,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,GAAG;QAC5B,GAAG,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,GAAG;QACzB,IAAI,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,GAAG;QAC1B,GAAG,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,GAAG;QACzB,IAAI,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,GAAG;QAC1B,KAAK,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,GAAG;KAC5B,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,gBAAgB,CAAC,MAAc;IACtC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACjC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAEzE,aAAa;IACb,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,QAAQ,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;IAE9D,UAAU;IACV,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,OAAO,GAAG,QAAQ,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QAC3C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC1G,CAAC;IAED,gBAAgB;IAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,QAAQ,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;AAChE,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,eAAe,CAAC,IAAY;IACzC,IAAI,CAAC;QACH,MAAM,EAAE,QAAQ,EAAE,GAAG,wDAAa,eAAe,GAAC,CAAC;QACnD,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;QAElC,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAC1B,QAAQ;YACR,QAAQ,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YACpC,OAAO,IAAI,CAAC;QACd,CAAC;aAAM,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;YAChC,qCAAqC;YACrC,IAAI,CAAC;gBACH,QAAQ,CAAC,4BAA4B,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;gBACxD,OAAO,IAAI,CAAC;YACd,CAAC;YAAC,MAAM,CAAC;gBACP,IAAI,CAAC;oBACH,QAAQ,CAAC,0BAA0B,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;oBACtD,OAAO,IAAI,CAAC;gBACd,CAAC;gBAAC,MAAM,CAAC;oBACP,OAAO,KAAK,CAAC;gBACf,CAAC;YACH,CAAC;QACH,CAAC;aAAM,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;YAChC,UAAU;YACV,MAAM,EAAE,IAAI,EAAE,GAAG,wDAAa,eAAe,GAAC,CAAC;YAC/C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;gBAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;oBAClC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC;gBAClB,CAAC,CAAC,CAAC;gBACH,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;oBACf,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;oBACvB,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;gBACnB,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,KAAK,CAAC,CAAC;gBACjB,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAsCD,SAAS,cAAc,CAAC,OAAgC;IACtD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AAChD,CAAC;AAED,SAAS,qBAAqB,CAAC,WAAmB,EAAE,UAAkB,EAAE,MAAc;IACpF,MAAM,YAAY,GAAG,IAAA,cAAO,EAAC,WAAW,EAAE,UAAU,CAAC,CAAC;IACtD,MAAM,GAAG,GAAG,IAAA,cAAO,EAAC,YAAY,CAAC,CAAC;IAClC,IAAI,CAAC,IAAA,eAAU,EAAC,GAAG,CAAC,EAAE,CAAC;QACrB,IAAA,cAAS,EAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACtC,CAAC;IACD,IAAA,kBAAa,EAAC,YAAY,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IAC7C,OAAO,YAAY,CAAC;AACtB,CAAC;AAEM,KAAK,UAAU,aAAa,CAAC,MAAe,EAAE,OAAuB;IAC1E,IAAI,WAAW,GAAkB,MAAM,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC;IACxD,MAAM,gBAAgB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACpC,IAAI,CAAC;QACH,gDAAgD;QAChD,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,MAAM,UAAU,GAAG,IAAA,qBAAa,GAAE,CAAC;YACnC,IAAI,UAAU,EAAE,CAAC;gBACf,WAAW,GAAG,UAAU,CAAC;gBACzB,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC;oBACnB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,0BAA0B,WAAW,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;gBACrF,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,MAAM,OAAO,GAAG,mEAAmE,CAAC;gBACpF,IAAI,OAAO,EAAE,IAAI,EAAE,CAAC;oBAClB,cAAc,CAAC;wBACb,OAAO,EAAE,KAAK;wBACd,MAAM,EAAE,IAAI;wBACZ,MAAM,EAAE,IAAI;wBACZ,MAAM,EAAE,IAAI;wBACZ,MAAM,EAAE,KAAK;wBACb,UAAU,EAAE,IAAI;wBAChB,OAAO;qBACR,CAAC,CAAC;gBACL,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC,CAAC;oBACzD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC,CAAC;oBAC3D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,6EAA6E,CAAC,CAAC,CAAC;oBACtG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,gDAAgD,CAAC,CAAC,CAAC;gBAC3E,CAAC;gBACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;QAED,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,MAAM,OAAO,GAAG,sBAAsB,CAAC;YACvC,IAAI,OAAO,EAAE,IAAI,EAAE,CAAC;gBAClB,cAAc,CAAC;oBACb,OAAO,EAAE,KAAK;oBACd,MAAM,EAAE,IAAI;oBACZ,MAAM,EAAE,IAAI;oBACZ,MAAM,EAAE,IAAI;oBACZ,MAAM,EAAE,KAAK;oBACb,UAAU,EAAE,IAAI;oBAChB,OAAO;iBACR,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC,CAAC;gBACzD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC,CAAC;YAC7D,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,qBAAqB;QACrB,MAAM,MAAM,GAAG,IAAA,mBAAU,GAAE,CAAC;QAE5B,kBAAkB;QAClB,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YACnB,MAAM,CAAC,MAAM,GAAG,IAAA,sBAAa,GAAE,CAAC;QAClC,CAAC;QAED,wBAAwB;QACxB,MAAM,MAAM,GAAG,IAAI,sBAAS,CAAC,MAAM,CAAC,CAAC;QAErC,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC;YACnB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,oBAAoB,WAAW,KAAK,CAAC,CAAC,CAAC;QAC/D,CAAC;QAED,uCAAuC;QACvC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;QAEvG,sFAAsF;QACtF,+FAA+F;QAC/F,0DAA0D;QAC1D,MAAM,eAAe,GAAG,yDAAyD,CAAC;QAClF,IAAI,aAAa,GAAG,SAAS,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;QAE3D,gEAAgE;QAChE,IAAI,WAAW,GAAG,aAAa,CAAC;QAChC,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,IAAA,yCAA0B,EAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;YACtD,MAAM,GAAG,GAAG,IAAA,kBAAY,EAAC,GAAG,CAAC,CAAC;YAC9B,IAAI,GAAG,IAAI,GAAG,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACxC,MAAM,cAAc,GAAG,IAAA,wCAAsB,EAAC,GAAG,EAAE,MAAM,CAAC,CAAC;gBAC3D,IAAI,cAAc,EAAE,CAAC;oBACnB,WAAW,IAAI,cAAc,CAAC;gBAChC,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,8CAA8C;YAC9C,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;gBACtB,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,iCAAiC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC;YAC1H,CAAC;QACH,CAAC;QAED,MAAM,WAAW,GAAG,IAAA,yCAA0B,EAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QAC9D,IAAI,UAAU,GAAkB,IAAI,CAAC;QACrC,IAAI,OAAO,EAAE,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;YAC7C,UAAU,GAAG,qBAAqB,CAAC,WAAW,EAAE,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,WAAW,CAAC,CAAC;QACtF,CAAC;QAED,yDAAyD;QACzD,IAAI,MAAM,GAAG,KAAK,CAAC;QACnB,IAAI,OAAO,EAAE,IAAI,KAAK,KAAK,EAAE,CAAC;YAC5B,MAAM,GAAG,MAAM,eAAe,CAAC,WAAW,CAAC,CAAC;QAC9C,CAAC;QAED,MAAM,gBAAgB,GAAG,WAAW,CAAC,MAAM,CAAC;QAC5C,MAAM,gBAAgB,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QACrF,MAAM,0BAA0B,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC,CAAC,CAAC;QAChF,MAAM,SAAS,GAA2B;YACxC,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,gBAAgB;YAC1C,WAAW,EAAE;gBACX,KAAK,EAAE,gBAAgB;gBACvB,KAAK,EAAE,gBAAgB;gBACvB,eAAe,EAAE,0BAA0B;aAC5C;YACD,GAAG,CAAC,YAAY;gBACd,CAAC,CAAC;oBACE,GAAG,EAAE;wBACH,QAAQ,EAAE,YAAY,CAAC,QAAQ;wBAC/B,WAAW,EAAE,YAAY,CAAC,WAAW;wBACrC,WAAW,EAAE,YAAY,CAAC,WAAW;wBACrC,eAAe,EAAE,YAAY,CAAC,eAAe;qBAC9C;iBACF;gBACH,CAAC,CAAC,EAAE,CAAC;SACR,CAAC;QAEF,IAAI,OAAO,EAAE,IAAI,EAAE,CAAC;YAClB,cAAc,CAAC;gBACb,OAAO,EAAE,IAAI;gBACb,MAAM,EAAE,WAAW;gBACnB,MAAM,EAAE,MAAM,IAAI,IAAI;gBACtB,MAAM,EAAE,WAAW;gBACnB,MAAM;gBACN,UAAU;gBACV,SAAS;gBACT,OAAO,EAAE,+BAA+B;aACzC,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,8BAA8B;YAC9B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAClB,gBAAgB,CAAC,WAAW,CAAC,CAAC;YAC9B,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAEhB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,6EAA6E,CAAC,CAAC,CAAC;YACxG,IAAI,OAAO,EAAE,IAAI,KAAK,KAAK,EAAE,CAAC;gBAC5B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC,CAAC;YACnE,CAAC;iBAAM,IAAI,MAAM,EAAE,CAAC;gBAClB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAC,CAAC;YAC3E,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,uFAAuF,CAAC,CAAC,CAAC;YACrH,CAAC;YACD,IAAI,UAAU,EAAE,CAAC;gBACf,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,yBAAyB,UAAU,EAAE,CAAC,CAAC,CAAC;YAClE,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC5E,IAAI,OAAO,EAAE,IAAI,EAAE,CAAC;YAClB,cAAc,CAAC;gBACb,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE,WAAW;gBACnB,MAAM,EAAE,IAAI;gBACZ,MAAM,EAAE,IAAI;gBACZ,MAAM,EAAE,KAAK;gBACb,UAAU,EAAE,IAAI;gBAChB,OAAO,EAAE,YAAY;aACtB,CAAC,CAAC;YACH,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC,CAAC;QAEzD,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAC3B,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;YAExC,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;gBACzE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC;gBAC1C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC,CAAC;gBACrD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC,CAAC;YAC7D,CAAC;iBAAM,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,CAAC;gBACxD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC;gBAC1C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC,CAAC;gBACpD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC,CAAC;gBACrD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC,CAAC;YAC9D,CAAC;QACH,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC;QAED,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
|
|
1
|
+
{"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../src/commands/prompt.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/ship.d.ts
CHANGED
|
@@ -8,6 +8,7 @@ interface ShipOptions {
|
|
|
8
8
|
requirePass?: boolean;
|
|
9
9
|
requirePolicyLock?: boolean;
|
|
10
10
|
skipPolicyLock?: boolean;
|
|
11
|
+
manualApproveHighRisk?: boolean;
|
|
11
12
|
json?: boolean;
|
|
12
13
|
publishCard?: boolean;
|
|
13
14
|
resumeRunId?: string;
|
|
@@ -28,6 +29,7 @@ interface ShipResumeOptions {
|
|
|
28
29
|
requirePass?: boolean;
|
|
29
30
|
requirePolicyLock?: boolean;
|
|
30
31
|
skipPolicyLock?: boolean;
|
|
32
|
+
manualApproveHighRisk?: boolean;
|
|
31
33
|
publishCard?: boolean;
|
|
32
34
|
json?: boolean;
|
|
33
35
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ship.d.ts","sourceRoot":"","sources":["../../src/commands/ship.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ship.d.ts","sourceRoot":"","sources":["../../src/commands/ship.ts"],"names":[],"mappings":"AA0BA,UAAU,WAAW;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC/B,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC,wBAAwB,CAAC,EAAE,MAAM,EAAE,CAAC;IACpC,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAs8DD,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAi+BnF;AAED,UAAU,iBAAiB;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AA2CD,wBAAsB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAwHhG;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CA6BjF;AAED,UAAU,4BAA4B;IACpC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,4BAA4B,CAC1C,oBAAoB,EAAE,MAAM,EAC5B,OAAO,EAAE,4BAA4B,GACpC,IAAI,CAiGN"}
|
package/dist/commands/ship.js
CHANGED
|
@@ -13,6 +13,7 @@ const config_1 = require("../config");
|
|
|
13
13
|
const project_root_1 = require("../utils/project-root");
|
|
14
14
|
const state_1 = require("../utils/state");
|
|
15
15
|
const breakage_simulator_1 = require("../utils/breakage-simulator");
|
|
16
|
+
const manual_approvals_1 = require("../utils/manual-approvals");
|
|
16
17
|
let chalk;
|
|
17
18
|
try {
|
|
18
19
|
chalk = require('chalk');
|
|
@@ -108,6 +109,7 @@ function createShipCheckpoint(input) {
|
|
|
108
109
|
requirePass: input.requirePass,
|
|
109
110
|
requirePolicyLock: input.requirePolicyLock,
|
|
110
111
|
skipPolicyLock: input.skipPolicyLock,
|
|
112
|
+
manualApproveHighRisk: input.options.manualApproveHighRisk === true,
|
|
111
113
|
publishCard: input.options.publishCard !== false,
|
|
112
114
|
},
|
|
113
115
|
baselineDirtyPaths: [],
|
|
@@ -542,6 +544,152 @@ function parseVerifyPayload(output) {
|
|
|
542
544
|
};
|
|
543
545
|
})()
|
|
544
546
|
: undefined;
|
|
547
|
+
const contextPolicy = record.contextPolicy && typeof record.contextPolicy === 'object' && !Array.isArray(record.contextPolicy)
|
|
548
|
+
? (() => {
|
|
549
|
+
const raw = record.contextPolicy;
|
|
550
|
+
const violations = Array.isArray(raw.violations)
|
|
551
|
+
? raw.violations
|
|
552
|
+
.filter((item) => !!item && typeof item === 'object')
|
|
553
|
+
.map((item) => ({
|
|
554
|
+
file: typeof item.file === 'string' ? item.file : 'unknown',
|
|
555
|
+
rule: typeof item.rule === 'string' ? item.rule : 'unknown',
|
|
556
|
+
reason: typeof item.reason === 'string' ? item.reason : '',
|
|
557
|
+
}))
|
|
558
|
+
: [];
|
|
559
|
+
return {
|
|
560
|
+
deniedModifyTouched: Array.isArray(raw.deniedModifyTouched)
|
|
561
|
+
? raw.deniedModifyTouched.filter((item) => typeof item === 'string')
|
|
562
|
+
: [],
|
|
563
|
+
violations,
|
|
564
|
+
};
|
|
565
|
+
})()
|
|
566
|
+
: undefined;
|
|
567
|
+
const blastRadius = record.blastRadius && typeof record.blastRadius === 'object' && !Array.isArray(record.blastRadius)
|
|
568
|
+
? (() => {
|
|
569
|
+
const raw = record.blastRadius;
|
|
570
|
+
const risk = typeof raw.riskScore === 'string' ? raw.riskScore.toLowerCase() : 'low';
|
|
571
|
+
const riskScore = risk === 'high' || risk === 'medium' ? risk : 'low';
|
|
572
|
+
return {
|
|
573
|
+
filesChanged: typeof raw.filesChanged === 'number' ? raw.filesChanged : 0,
|
|
574
|
+
functionsAffected: typeof raw.functionsAffected === 'number' ? raw.functionsAffected : 0,
|
|
575
|
+
modulesAffected: Array.isArray(raw.modulesAffected)
|
|
576
|
+
? raw.modulesAffected.filter((item) => typeof item === 'string')
|
|
577
|
+
: [],
|
|
578
|
+
dependenciesAdded: Array.isArray(raw.dependenciesAdded)
|
|
579
|
+
? raw.dependenciesAdded.filter((item) => typeof item === 'string')
|
|
580
|
+
: [],
|
|
581
|
+
riskScore: riskScore,
|
|
582
|
+
};
|
|
583
|
+
})()
|
|
584
|
+
: undefined;
|
|
585
|
+
const suspiciousChange = record.suspiciousChange && typeof record.suspiciousChange === 'object' && !Array.isArray(record.suspiciousChange)
|
|
586
|
+
? (() => {
|
|
587
|
+
const raw = record.suspiciousChange;
|
|
588
|
+
const confidenceRaw = typeof raw.confidence === 'string' ? raw.confidence.toLowerCase() : 'low';
|
|
589
|
+
const confidence = confidenceRaw === 'high' || confidenceRaw === 'medium' ? confidenceRaw : 'low';
|
|
590
|
+
return {
|
|
591
|
+
expectedFiles: typeof raw.expectedFiles === 'number' ? raw.expectedFiles : 0,
|
|
592
|
+
actualFiles: typeof raw.actualFiles === 'number' ? raw.actualFiles : 0,
|
|
593
|
+
unexpectedFiles: Array.isArray(raw.unexpectedFiles)
|
|
594
|
+
? raw.unexpectedFiles.filter((item) => typeof item === 'string')
|
|
595
|
+
: [],
|
|
596
|
+
flagged: raw.flagged === true,
|
|
597
|
+
confidence: confidence,
|
|
598
|
+
};
|
|
599
|
+
})()
|
|
600
|
+
: undefined;
|
|
601
|
+
const changeJustification = record.changeJustification && typeof record.changeJustification === 'object' && !Array.isArray(record.changeJustification)
|
|
602
|
+
? (() => {
|
|
603
|
+
const raw = record.changeJustification;
|
|
604
|
+
return {
|
|
605
|
+
task: typeof raw.task === 'string' ? raw.task : '',
|
|
606
|
+
changes: Array.isArray(raw.changes)
|
|
607
|
+
? raw.changes
|
|
608
|
+
.filter((item) => !!item && typeof item === 'object')
|
|
609
|
+
.map((item) => ({
|
|
610
|
+
file: typeof item.file === 'string' ? item.file : 'unknown',
|
|
611
|
+
reason: typeof item.reason === 'string' ? item.reason : '',
|
|
612
|
+
}))
|
|
613
|
+
: [],
|
|
614
|
+
};
|
|
615
|
+
})()
|
|
616
|
+
: undefined;
|
|
617
|
+
const governanceDecision = record.governanceDecision && typeof record.governanceDecision === 'object' && !Array.isArray(record.governanceDecision)
|
|
618
|
+
? (() => {
|
|
619
|
+
const raw = record.governanceDecision;
|
|
620
|
+
const decisionRaw = typeof raw.decision === 'string' ? raw.decision.toLowerCase() : 'allow';
|
|
621
|
+
const decision = decisionRaw === 'warn' || decisionRaw === 'manual_approval' || decisionRaw === 'block'
|
|
622
|
+
? decisionRaw
|
|
623
|
+
: 'allow';
|
|
624
|
+
return {
|
|
625
|
+
decision: decision,
|
|
626
|
+
reasonCodes: Array.isArray(raw.reasonCodes)
|
|
627
|
+
? raw.reasonCodes.filter((item) => typeof item === 'string')
|
|
628
|
+
: [],
|
|
629
|
+
summary: typeof raw.summary === 'string' ? raw.summary : undefined,
|
|
630
|
+
averageRelevanceScore: typeof raw.averageRelevanceScore === 'number' ? raw.averageRelevanceScore : undefined,
|
|
631
|
+
lowRelevanceFiles: Array.isArray(raw.lowRelevanceFiles)
|
|
632
|
+
? raw.lowRelevanceFiles
|
|
633
|
+
.filter((item) => !!item && typeof item === 'object')
|
|
634
|
+
.map((item) => ({
|
|
635
|
+
file: typeof item.file === 'string' ? item.file : 'unknown',
|
|
636
|
+
relevanceScore: typeof item.relevanceScore === 'number' ? item.relevanceScore : 0,
|
|
637
|
+
planLink: typeof item.planLink === 'string' ? item.planLink : 'unknown',
|
|
638
|
+
}))
|
|
639
|
+
: undefined,
|
|
640
|
+
requiresManualApproval: raw.requiresManualApproval === true,
|
|
641
|
+
};
|
|
642
|
+
})()
|
|
643
|
+
: undefined;
|
|
644
|
+
const aiChangeLog = record.aiChangeLog && typeof record.aiChangeLog === 'object' && !Array.isArray(record.aiChangeLog)
|
|
645
|
+
? (() => {
|
|
646
|
+
const raw = record.aiChangeLog;
|
|
647
|
+
const integrityRaw = raw.integrity && typeof raw.integrity === 'object' && !Array.isArray(raw.integrity)
|
|
648
|
+
? raw.integrity
|
|
649
|
+
: null;
|
|
650
|
+
return {
|
|
651
|
+
path: typeof raw.path === 'string' ? raw.path : undefined,
|
|
652
|
+
auditPath: typeof raw.auditPath === 'string' ? raw.auditPath : undefined,
|
|
653
|
+
integrity: integrityRaw
|
|
654
|
+
? {
|
|
655
|
+
valid: integrityRaw.valid === true,
|
|
656
|
+
required: integrityRaw.required === true,
|
|
657
|
+
signed: integrityRaw.signed === true,
|
|
658
|
+
issues: Array.isArray(integrityRaw.issues)
|
|
659
|
+
? integrityRaw.issues.filter((item) => typeof item === 'string')
|
|
660
|
+
: [],
|
|
661
|
+
payloadHash: typeof integrityRaw.payloadHash === 'string' ? integrityRaw.payloadHash : null,
|
|
662
|
+
chainHash: typeof integrityRaw.chainHash === 'string' ? integrityRaw.chainHash : null,
|
|
663
|
+
}
|
|
664
|
+
: undefined,
|
|
665
|
+
};
|
|
666
|
+
})()
|
|
667
|
+
: undefined;
|
|
668
|
+
const policySources = record.policySources && typeof record.policySources === 'object' && !Array.isArray(record.policySources)
|
|
669
|
+
? (() => {
|
|
670
|
+
const raw = record.policySources;
|
|
671
|
+
const modeRaw = typeof raw.mode === 'string' ? raw.mode.toLowerCase() : 'local';
|
|
672
|
+
const mode = modeRaw === 'merged' || modeRaw === 'org_only' ? modeRaw : 'local';
|
|
673
|
+
return {
|
|
674
|
+
localPolicy: raw.localPolicy !== false,
|
|
675
|
+
orgPolicy: raw.orgPolicy === true,
|
|
676
|
+
mode: mode,
|
|
677
|
+
};
|
|
678
|
+
})()
|
|
679
|
+
: undefined;
|
|
680
|
+
const orgGovernance = record.orgGovernance && typeof record.orgGovernance === 'object' && !Array.isArray(record.orgGovernance)
|
|
681
|
+
? (() => {
|
|
682
|
+
const raw = record.orgGovernance;
|
|
683
|
+
return {
|
|
684
|
+
requireSignedAiLogs: raw.requireSignedAiLogs === true,
|
|
685
|
+
requireManualApproval: raw.requireManualApproval !== false,
|
|
686
|
+
minimumManualApprovals: typeof raw.minimumManualApprovals === 'number'
|
|
687
|
+
? Math.max(1, Math.min(5, Math.floor(raw.minimumManualApprovals)))
|
|
688
|
+
: 1,
|
|
689
|
+
updatedAt: typeof raw.updatedAt === 'string' ? raw.updatedAt : null,
|
|
690
|
+
};
|
|
691
|
+
})()
|
|
692
|
+
: undefined;
|
|
545
693
|
return {
|
|
546
694
|
grade: record.grade,
|
|
547
695
|
score: typeof record.score === 'number' ? record.score : 0,
|
|
@@ -561,6 +709,14 @@ function parseVerifyPayload(output) {
|
|
|
561
709
|
policyLock,
|
|
562
710
|
policyExceptions,
|
|
563
711
|
policyGovernance,
|
|
712
|
+
contextPolicy,
|
|
713
|
+
blastRadius,
|
|
714
|
+
suspiciousChange,
|
|
715
|
+
changeJustification,
|
|
716
|
+
governanceDecision,
|
|
717
|
+
aiChangeLog,
|
|
718
|
+
policySources,
|
|
719
|
+
orgGovernance,
|
|
564
720
|
};
|
|
565
721
|
}
|
|
566
722
|
function parsePlanPayload(output) {
|
|
@@ -644,6 +800,20 @@ function runGit(cwd, args) {
|
|
|
644
800
|
stderr: result.stderr || '',
|
|
645
801
|
};
|
|
646
802
|
}
|
|
803
|
+
function getHeadSha(cwd) {
|
|
804
|
+
const head = runGit(cwd, ['rev-parse', 'HEAD']);
|
|
805
|
+
if (head.code !== 0)
|
|
806
|
+
return null;
|
|
807
|
+
const value = head.stdout.trim().toLowerCase();
|
|
808
|
+
return value || null;
|
|
809
|
+
}
|
|
810
|
+
function resolveDistinctManualApprovers(cwd, commitSha) {
|
|
811
|
+
const approvals = (0, manual_approvals_1.getManualApprovalsForCommit)(cwd, commitSha);
|
|
812
|
+
return {
|
|
813
|
+
approvals,
|
|
814
|
+
distinctApprovers: (0, manual_approvals_1.countDistinctApprovers)(approvals),
|
|
815
|
+
};
|
|
816
|
+
}
|
|
647
817
|
function getPrimaryGitRemoteUrl(cwd) {
|
|
648
818
|
const remote = runGit(cwd, ['remote', 'get-url', 'origin']);
|
|
649
819
|
if (remote.code !== 0)
|
|
@@ -1613,8 +1783,64 @@ async function shipCommand(goal, options) {
|
|
|
1613
1783
|
});
|
|
1614
1784
|
}
|
|
1615
1785
|
const finalVerifyPayload = verifyPayload;
|
|
1616
|
-
|
|
1786
|
+
let verifyPassedFinal = verifyExitCode === 0 &&
|
|
1617
1787
|
(finalVerifyPayload.verdict === 'PASS' || (!requirePass && isInfoOnlyGovernanceResult(finalVerifyPayload)));
|
|
1788
|
+
const manualApprovalBypass = options.manualApproveHighRisk === true || process.env.NEURCODE_MANUAL_APPROVE_HIGH_RISK === '1';
|
|
1789
|
+
const governanceDecision = finalVerifyPayload.governanceDecision?.decision;
|
|
1790
|
+
const orgGovernance = finalVerifyPayload.orgGovernance || null;
|
|
1791
|
+
const orgManualApprovalRequired = orgGovernance?.requireManualApproval === true;
|
|
1792
|
+
const minimumManualApprovals = orgGovernance
|
|
1793
|
+
? Math.max(1, Math.min(5, Math.floor(orgGovernance.minimumManualApprovals || 1)))
|
|
1794
|
+
: 1;
|
|
1795
|
+
const approvalHeadSha = getHeadSha(cwd);
|
|
1796
|
+
const manualApprovalState = approvalHeadSha
|
|
1797
|
+
? resolveDistinctManualApprovers(cwd, approvalHeadSha)
|
|
1798
|
+
: { approvals: [], distinctApprovers: 0 };
|
|
1799
|
+
if (verifyPassedFinal && governanceDecision === 'block') {
|
|
1800
|
+
verifyPassedFinal = false;
|
|
1801
|
+
verifyExitCode = verifyExitCode === 0 ? 2 : verifyExitCode;
|
|
1802
|
+
remediationActions.push('governance_decision_block');
|
|
1803
|
+
const summary = finalVerifyPayload.governanceDecision?.summary || 'Governance decision matrix returned BLOCK.';
|
|
1804
|
+
finalVerifyPayload.message = `${finalVerifyPayload.message || 'Governance verification completed.'} ${summary}`;
|
|
1805
|
+
console.log(chalk.red('\n⛔ Ship blocked by governance decision matrix (BLOCK).'));
|
|
1806
|
+
if (finalVerifyPayload.governanceDecision?.reasonCodes?.length) {
|
|
1807
|
+
console.log(chalk.dim(` Reasons: ${finalVerifyPayload.governanceDecision.reasonCodes.join(', ')}`));
|
|
1808
|
+
}
|
|
1809
|
+
}
|
|
1810
|
+
const requiresManualApproval = governanceDecision === 'manual_approval' ||
|
|
1811
|
+
(!governanceDecision && finalVerifyPayload.blastRadius?.riskScore === 'high');
|
|
1812
|
+
let effectiveDistinctApprovers = manualApprovalState.distinctApprovers;
|
|
1813
|
+
if (orgManualApprovalRequired && manualApprovalBypass) {
|
|
1814
|
+
// Backward-compatible flag counts as the current operator approval in enterprise mode.
|
|
1815
|
+
effectiveDistinctApprovers += 1;
|
|
1816
|
+
}
|
|
1817
|
+
const manualApprovalSatisfied = orgManualApprovalRequired
|
|
1818
|
+
? effectiveDistinctApprovers >= minimumManualApprovals
|
|
1819
|
+
: manualApprovalBypass;
|
|
1820
|
+
if (verifyPassedFinal && requiresManualApproval && !manualApprovalSatisfied) {
|
|
1821
|
+
verifyPassedFinal = false;
|
|
1822
|
+
verifyExitCode = verifyExitCode === 0 ? 2 : verifyExitCode;
|
|
1823
|
+
remediationActions.push('governance_manual_approval_required');
|
|
1824
|
+
const summary = finalVerifyPayload.governanceDecision?.summary ||
|
|
1825
|
+
'High blast-radius risk requires manual approval before ship can continue.';
|
|
1826
|
+
finalVerifyPayload.message = `${finalVerifyPayload.message || 'Governance verification completed.'} ${summary}`;
|
|
1827
|
+
console.log(chalk.red('\n⛔ Ship blocked: governance requires manual approval before deploy.'));
|
|
1828
|
+
if (orgManualApprovalRequired) {
|
|
1829
|
+
const recordedCount = manualApprovalState.distinctApprovers;
|
|
1830
|
+
console.log(chalk.dim(` Manual approvals required: ${minimumManualApprovals}, recorded: ${recordedCount}${manualApprovalBypass ? ' (+1 current operator flag)' : ''}`));
|
|
1831
|
+
if (approvalHeadSha) {
|
|
1832
|
+
console.log(chalk.dim(` Commit: ${approvalHeadSha}`));
|
|
1833
|
+
}
|
|
1834
|
+
console.log(chalk.dim(' Record approvals with `neurcode approve --reason "<review context>"`.'));
|
|
1835
|
+
console.log(chalk.dim(' Then re-run `neurcode ship ...` to continue.'));
|
|
1836
|
+
}
|
|
1837
|
+
else {
|
|
1838
|
+
console.log(chalk.dim(' Re-run with --manual-approve-high-risk after manual review.'));
|
|
1839
|
+
}
|
|
1840
|
+
if (typeof finalVerifyPayload.governanceDecision?.averageRelevanceScore === 'number') {
|
|
1841
|
+
console.log(chalk.dim(` Avg relevance score: ${finalVerifyPayload.governanceDecision.averageRelevanceScore}`));
|
|
1842
|
+
}
|
|
1843
|
+
}
|
|
1618
1844
|
if (verifyPassedFinal && !options.skipTests) {
|
|
1619
1845
|
testsAttempts += 1;
|
|
1620
1846
|
if (!testCommand) {
|
|
@@ -2182,6 +2408,7 @@ async function shipResumeCommand(runId, options) {
|
|
|
2182
2408
|
requirePass: options.requirePass ?? checkpoint.options.requirePass,
|
|
2183
2409
|
requirePolicyLock: options.requirePolicyLock ?? checkpoint.options.requirePolicyLock,
|
|
2184
2410
|
skipPolicyLock: options.skipPolicyLock ?? checkpoint.options.skipPolicyLock,
|
|
2411
|
+
manualApproveHighRisk: options.manualApproveHighRisk ?? checkpoint.options.manualApproveHighRisk,
|
|
2185
2412
|
publishCard: options.publishCard ?? checkpoint.options.publishCard,
|
|
2186
2413
|
json: options.json === true,
|
|
2187
2414
|
resumeRunId: checkpoint.runId,
|