@magnusekdahl/parallix 1.3.1 → 1.3.3
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/README.md +4 -2
- package/config/integration-pipelines.json +5 -0
- package/docs/adr/0048-fail-closed-harness-defense-against-agent-hallucinations.md +161 -0
- package/docs/adr/index.md +2 -0
- package/docs/authority-reference.md +8 -5
- package/lib/agents/agents.js +3 -1
- package/lib/agents/agents.ts +3 -1
- package/lib/agents/claude.js +3 -1
- package/lib/agents/claude.ts +3 -1
- package/lib/agents/codex.js +3 -1
- package/lib/agents/codex.ts +3 -1
- package/lib/agents/mistral-telemetry.js +122 -23
- package/lib/agents/mistral-telemetry.ts +141 -26
- package/lib/agents/mistral.js +1 -1
- package/lib/agents/mistral.ts +1 -1
- package/lib/agents/opencode.js +5 -3
- package/lib/agents/opencode.ts +5 -3
- package/lib/commands/active.js +21 -3
- package/lib/commands/active.ts +7 -2
- package/lib/commands/config.js +6 -1
- package/lib/commands/config.ts +6 -1
- package/lib/commands/coverage-gate.js +19 -1
- package/lib/commands/coverage-gate.ts +6 -1
- package/lib/commands/diff.js +6 -1
- package/lib/commands/diff.ts +6 -1
- package/lib/commands/draft.js +31 -1
- package/lib/commands/draft.ts +6 -1
- package/lib/commands/handoff.js +12 -1
- package/lib/commands/handoff.ts +6 -1
- package/lib/commands/integrate.js +103 -27
- package/lib/commands/integrate.ts +67 -31
- package/lib/commands/mission-start.js +12 -3
- package/lib/commands/mission-start.ts +7 -2
- package/lib/commands/rebase.js +10 -2
- package/lib/commands/rebase.ts +6 -2
- package/lib/commands/repair-handoff.js +13 -3
- package/lib/commands/repair-handoff.ts +7 -2
- package/lib/commands/resolve-conflict.js +8 -2
- package/lib/commands/resolve-conflict.ts +7 -2
- package/lib/commands/review.js +6 -1
- package/lib/commands/review.ts +6 -1
- package/lib/commands/setup-review.js +8 -3
- package/lib/commands/setup-review.ts +8 -3
- package/lib/commands/setup.js +8 -2
- package/lib/commands/setup.ts +7 -2
- package/lib/commands/stats-backfill.js +14 -3
- package/lib/commands/stats-backfill.ts +7 -2
- package/lib/commands/stats.js +33 -1
- package/lib/commands/stats.ts +7 -2
- package/lib/commands/status.js +8 -1
- package/lib/commands/status.ts +6 -1
- package/lib/commands/verify.js +11 -2
- package/lib/commands/verify.ts +7 -2
- package/lib/core/gitignore.js +9 -1
- package/lib/core/gitignore.ts +6 -1
- package/lib/core/persistent-data-migration.js +4 -2
- package/lib/core/persistent-data-migration.ts +4 -2
- package/lib/index.js +36 -36
- package/lib/index.ts +18 -18
- package/lib/review/review-loop.js +12 -7
- package/lib/review/review-loop.ts +10 -7
- package/lib/review/review.js +51 -1
- package/lib/review/review.ts +6 -1
- package/lib/tools/setup-review.js +7 -4
- package/lib/tools/setup-review.ts +2 -2
- package/package.json +1 -1
- package/px.js +30 -14
package/lib/review/review.js
CHANGED
|
@@ -9,22 +9,68 @@
|
|
|
9
9
|
* - review-artifacts.ts (artifact handling and posting)
|
|
10
10
|
* - review-polling.ts (polling utilities)
|
|
11
11
|
*/
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.ReviewState = exports.reviewStateFile = exports.importLegacyHandler = exports.createEventHandler = exports.closeMissionPr = exports.submitReviewRound = exports.commentRound = exports.showReviewStatus = exports.pushRound = exports.readComments = exports.submitForReview = exports.verifyReview = exports.performStaticReview = exports.postStaticReviewComment = exports.formatStaticReviewSuccess = exports.formatStaticReviewFindings = exports.readTextFlag = exports.flagValue = exports.startReviewLoop = exports.persistNormalizedPhaseRepair = exports.applyAgentFallback = exports.rebaseBeforeReviewRound = exports.commitSafeMissionArtifacts = exports.maybeUpdateGraphifyBeforeReview = exports.recordStageStatsSafe = exports.consumeImplementerArtifacts = exports.consumeReviewerArtifacts = exports.postWorkflowReview = exports.postWorkflowComment = exports.normalizeDisposition = exports.normalizeReviewVerdict = exports.deleteArtifactFile = exports.readArtifactFile = exports.reviewArtifactPath = exports.buildMetadataFooter = exports.pollForDisposition = exports.pollForReview = exports.isPollTimeout = exports.formatElapsed = exports.resolvePollTimeoutMs = exports.resolvePollIntervalMs = exports.delay = exports.POLL_TIMEOUT = exports.review = void 0;
|
|
12
14
|
// Import from review-polling module
|
|
13
15
|
const review_polling_js_1 = require("./review-polling.js");
|
|
16
|
+
Object.defineProperty(exports, "POLL_TIMEOUT", { enumerable: true, get: function () { return review_polling_js_1.POLL_TIMEOUT; } });
|
|
17
|
+
Object.defineProperty(exports, "delay", { enumerable: true, get: function () { return review_polling_js_1.delay; } });
|
|
18
|
+
Object.defineProperty(exports, "resolvePollIntervalMs", { enumerable: true, get: function () { return review_polling_js_1.resolvePollIntervalMs; } });
|
|
19
|
+
Object.defineProperty(exports, "resolvePollTimeoutMs", { enumerable: true, get: function () { return review_polling_js_1.resolvePollTimeoutMs; } });
|
|
20
|
+
Object.defineProperty(exports, "formatElapsed", { enumerable: true, get: function () { return review_polling_js_1.formatElapsed; } });
|
|
21
|
+
Object.defineProperty(exports, "isPollTimeout", { enumerable: true, get: function () { return review_polling_js_1.isPollTimeout; } });
|
|
22
|
+
Object.defineProperty(exports, "pollForReview", { enumerable: true, get: function () { return review_polling_js_1.pollForReview; } });
|
|
23
|
+
Object.defineProperty(exports, "pollForDisposition", { enumerable: true, get: function () { return review_polling_js_1.pollForDisposition; } });
|
|
14
24
|
// Import from review-artifacts module
|
|
15
25
|
const review_artifacts_js_1 = require("./review-artifacts.js");
|
|
26
|
+
Object.defineProperty(exports, "buildMetadataFooter", { enumerable: true, get: function () { return review_artifacts_js_1.buildMetadataFooter; } });
|
|
27
|
+
Object.defineProperty(exports, "reviewArtifactPath", { enumerable: true, get: function () { return review_artifacts_js_1.reviewArtifactPath; } });
|
|
28
|
+
Object.defineProperty(exports, "readArtifactFile", { enumerable: true, get: function () { return review_artifacts_js_1.readArtifactFile; } });
|
|
29
|
+
Object.defineProperty(exports, "deleteArtifactFile", { enumerable: true, get: function () { return review_artifacts_js_1.deleteArtifactFile; } });
|
|
30
|
+
Object.defineProperty(exports, "normalizeReviewVerdict", { enumerable: true, get: function () { return review_artifacts_js_1.normalizeReviewVerdict; } });
|
|
31
|
+
Object.defineProperty(exports, "normalizeDisposition", { enumerable: true, get: function () { return review_artifacts_js_1.normalizeDisposition; } });
|
|
32
|
+
Object.defineProperty(exports, "postWorkflowComment", { enumerable: true, get: function () { return review_artifacts_js_1.postWorkflowComment; } });
|
|
33
|
+
Object.defineProperty(exports, "postWorkflowReview", { enumerable: true, get: function () { return review_artifacts_js_1.postWorkflowReview; } });
|
|
34
|
+
Object.defineProperty(exports, "consumeReviewerArtifacts", { enumerable: true, get: function () { return review_artifacts_js_1.consumeReviewerArtifacts; } });
|
|
35
|
+
Object.defineProperty(exports, "consumeImplementerArtifacts", { enumerable: true, get: function () { return review_artifacts_js_1.consumeImplementerArtifacts; } });
|
|
16
36
|
// Import from review-loop module
|
|
17
37
|
const review_loop_js_1 = require("./review-loop.js");
|
|
38
|
+
Object.defineProperty(exports, "maybeUpdateGraphifyBeforeReview", { enumerable: true, get: function () { return review_loop_js_1.maybeUpdateGraphifyBeforeReview; } });
|
|
39
|
+
Object.defineProperty(exports, "commitSafeMissionArtifacts", { enumerable: true, get: function () { return review_loop_js_1.commitSafeMissionArtifacts; } });
|
|
40
|
+
Object.defineProperty(exports, "rebaseBeforeReviewRound", { enumerable: true, get: function () { return review_loop_js_1.rebaseBeforeReviewRound; } });
|
|
41
|
+
Object.defineProperty(exports, "applyAgentFallback", { enumerable: true, get: function () { return review_loop_js_1.applyAgentFallback; } });
|
|
42
|
+
Object.defineProperty(exports, "persistNormalizedPhaseRepair", { enumerable: true, get: function () { return review_loop_js_1.persistNormalizedPhaseRepair; } });
|
|
43
|
+
Object.defineProperty(exports, "startReviewLoop", { enumerable: true, get: function () { return review_loop_js_1.startReviewLoop; } });
|
|
44
|
+
Object.defineProperty(exports, "recordStageStatsSafe", { enumerable: true, get: function () { return review_loop_js_1.recordStageStatsSafe; } });
|
|
18
45
|
// Import from review-commands module
|
|
19
46
|
const review_commands_js_1 = require("./review-commands.js");
|
|
47
|
+
Object.defineProperty(exports, "flagValue", { enumerable: true, get: function () { return review_commands_js_1.flagValue; } });
|
|
48
|
+
Object.defineProperty(exports, "readTextFlag", { enumerable: true, get: function () { return review_commands_js_1.readTextFlag; } });
|
|
49
|
+
Object.defineProperty(exports, "formatStaticReviewFindings", { enumerable: true, get: function () { return review_commands_js_1.formatStaticReviewFindings; } });
|
|
50
|
+
Object.defineProperty(exports, "formatStaticReviewSuccess", { enumerable: true, get: function () { return review_commands_js_1.formatStaticReviewSuccess; } });
|
|
51
|
+
Object.defineProperty(exports, "postStaticReviewComment", { enumerable: true, get: function () { return review_commands_js_1.postStaticReviewComment; } });
|
|
52
|
+
Object.defineProperty(exports, "performStaticReview", { enumerable: true, get: function () { return review_commands_js_1.performStaticReview; } });
|
|
53
|
+
Object.defineProperty(exports, "verifyReview", { enumerable: true, get: function () { return review_commands_js_1.verifyReview; } });
|
|
54
|
+
Object.defineProperty(exports, "submitForReview", { enumerable: true, get: function () { return review_commands_js_1.submitForReview; } });
|
|
55
|
+
Object.defineProperty(exports, "readComments", { enumerable: true, get: function () { return review_commands_js_1.readComments; } });
|
|
56
|
+
Object.defineProperty(exports, "pushRound", { enumerable: true, get: function () { return review_commands_js_1.pushRound; } });
|
|
57
|
+
Object.defineProperty(exports, "showReviewStatus", { enumerable: true, get: function () { return review_commands_js_1.showReviewStatus; } });
|
|
58
|
+
Object.defineProperty(exports, "commentRound", { enumerable: true, get: function () { return review_commands_js_1.commentRound; } });
|
|
59
|
+
Object.defineProperty(exports, "submitReviewRound", { enumerable: true, get: function () { return review_commands_js_1.submitReviewRound; } });
|
|
60
|
+
Object.defineProperty(exports, "closeMissionPr", { enumerable: true, get: function () { return review_commands_js_1.closeMissionPr; } });
|
|
61
|
+
Object.defineProperty(exports, "createEventHandler", { enumerable: true, get: function () { return review_commands_js_1.createEventHandler; } });
|
|
62
|
+
Object.defineProperty(exports, "importLegacyHandler", { enumerable: true, get: function () { return review_commands_js_1.importLegacyHandler; } });
|
|
20
63
|
// Import from review-state module
|
|
21
64
|
const review_state_js_1 = require("./review-state.js");
|
|
65
|
+
Object.defineProperty(exports, "reviewStateFile", { enumerable: true, get: function () { return review_state_js_1.reviewStateFile; } });
|
|
66
|
+
Object.defineProperty(exports, "ReviewState", { enumerable: true, get: function () { return review_state_js_1.ReviewState; } });
|
|
22
67
|
// ============================================================================
|
|
23
68
|
// Module Exports
|
|
24
69
|
// ============================================================================
|
|
25
70
|
// Set the module exports to the main review function (for backward compatibility)
|
|
26
71
|
// then add all other exports as properties
|
|
27
72
|
const _review = review_commands_js_1.review;
|
|
73
|
+
exports.review = _review;
|
|
28
74
|
// From review-polling
|
|
29
75
|
_review.POLL_TIMEOUT = review_polling_js_1.POLL_TIMEOUT;
|
|
30
76
|
_review.delay = review_polling_js_1.delay;
|
|
@@ -73,4 +119,8 @@ _review.importLegacyHandler = review_commands_js_1.importLegacyHandler;
|
|
|
73
119
|
// From review-state
|
|
74
120
|
_review.reviewStateFile = review_state_js_1.reviewStateFile;
|
|
75
121
|
_review.ReviewState = review_state_js_1.ReviewState;
|
|
76
|
-
module
|
|
122
|
+
// Export the review function as the module exports (CJS-compatible)
|
|
123
|
+
exports.default = _review;
|
|
124
|
+
if (typeof module !== 'undefined') {
|
|
125
|
+
module.exports = _review;
|
|
126
|
+
}
|
package/lib/review/review.ts
CHANGED
|
@@ -135,4 +135,9 @@ _review.reviewStateFile = reviewStateFile;
|
|
|
135
135
|
_review.ReviewState = ReviewState;
|
|
136
136
|
|
|
137
137
|
// Export the review function as the module exports (CJS-compatible)
|
|
138
|
-
export
|
|
138
|
+
export default _review;
|
|
139
|
+
export { _review as review, POLL_TIMEOUT, delay, resolvePollIntervalMs, resolvePollTimeoutMs, formatElapsed, isPollTimeout, pollForReview, pollForDisposition, buildMetadataFooter, reviewArtifactPath, readArtifactFile, deleteArtifactFile, normalizeReviewVerdict, normalizeDisposition, postWorkflowComment, postWorkflowReview, consumeReviewerArtifacts, consumeImplementerArtifacts, recordStageStatsSafe, maybeUpdateGraphifyBeforeReview, commitSafeMissionArtifacts, rebaseBeforeReviewRound, applyAgentFallback, persistNormalizedPhaseRepair, startReviewLoop, flagValue, readTextFlag, formatStaticReviewFindings, formatStaticReviewSuccess, postStaticReviewComment, performStaticReview, verifyReview, submitForReview, readComments, pushRound, showReviewStatus, commentRound, submitReviewRound, closeMissionPr, createEventHandler, importLegacyHandler, reviewStateFile, ReviewState };
|
|
140
|
+
|
|
141
|
+
// CJS compat: ensure require() returns the function directly
|
|
142
|
+
declare const module: { exports: any } | undefined;
|
|
143
|
+
if (typeof module !== 'undefined') { module.exports = _review; }
|
|
@@ -32,6 +32,9 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
32
32
|
return result;
|
|
33
33
|
};
|
|
34
34
|
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
35
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
39
|
exports.standardLayoutDescription = standardLayoutDescription;
|
|
37
40
|
exports.suggestedForgejoUsers = suggestedForgejoUsers;
|
|
@@ -61,14 +64,14 @@ exports.buildNonInteractiveAnswers = buildNonInteractiveAnswers;
|
|
|
61
64
|
const fs = __importStar(require("fs"));
|
|
62
65
|
const path = __importStar(require("path"));
|
|
63
66
|
const readline = __importStar(require("readline"));
|
|
64
|
-
const
|
|
65
|
-
const { spawnSync } =
|
|
67
|
+
const child_process_1 = __importDefault(require("child_process"));
|
|
68
|
+
const { spawnSync } = child_process_1.default;
|
|
66
69
|
const fmt = __importStar(require("../core/fmt"));
|
|
67
70
|
const agents_1 = require("../agents/agents");
|
|
68
71
|
const product_config_1 = require("../core/product-config");
|
|
69
72
|
const forgejo_1 = require("./forgejo");
|
|
70
73
|
const product_config_2 = require("../core/product-config");
|
|
71
|
-
const
|
|
74
|
+
const gitignore_js_1 = __importDefault(require("../core/gitignore.js"));
|
|
72
75
|
let tokenNameCounter = 0;
|
|
73
76
|
const REVIEW_TOKEN_SCOPES = ['write:user', 'write:repository', 'write:issue', 'write:organization'];
|
|
74
77
|
const PASSWORD_PROMPT_OPTIONS = { hidden: false };
|
|
@@ -1036,7 +1039,7 @@ async function setupWizard(_args, options = {}) {
|
|
|
1036
1039
|
: await collectWizardAnswers(rootDir, { ...options, promptFn, log });
|
|
1037
1040
|
const configPath = writeWorkflowConfig(rootDir, buildWorkflowConfig(answers));
|
|
1038
1041
|
log(fmt.status('PASS', `Wrote ${configPath}`));
|
|
1039
|
-
const gitignoreResult =
|
|
1042
|
+
const gitignoreResult = (0, gitignore_js_1.default)(rootDir, { logFn: log });
|
|
1040
1043
|
if (gitignoreResult.created) {
|
|
1041
1044
|
log(fmt.status('PASS', `Created .gitignore with ${gitignoreResult.appended} workflow entries in ${fmt.path(rootDir)}`));
|
|
1042
1045
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as fs from 'fs';
|
|
2
2
|
import * as path from 'path';
|
|
3
3
|
import * as readline from 'readline';
|
|
4
|
-
import _cp
|
|
4
|
+
import _cp from 'child_process';
|
|
5
5
|
const { spawnSync } = _cp;
|
|
6
6
|
import * as fmt from '../core/fmt';
|
|
7
7
|
import { eligibleAgentsForStep } from '../agents/agents';
|
|
@@ -12,7 +12,7 @@ import {
|
|
|
12
12
|
reviewRemoteUrl,
|
|
13
13
|
} from './forgejo';
|
|
14
14
|
import { loadWorkflowConfig } from '../core/product-config';
|
|
15
|
-
import ensureWorkflowGitignore
|
|
15
|
+
import ensureWorkflowGitignore from '../core/gitignore.js';
|
|
16
16
|
|
|
17
17
|
let tokenNameCounter = 0;
|
|
18
18
|
const REVIEW_TOKEN_SCOPES = ['write:user', 'write:repository', 'write:issue', 'write:organization'];
|
package/package.json
CHANGED
package/px.js
CHANGED
|
@@ -46,10 +46,21 @@ exports.run = run;
|
|
|
46
46
|
const node_fs_1 = __importDefault(require("node:fs"));
|
|
47
47
|
const node_path_1 = __importDefault(require("node:path"));
|
|
48
48
|
const fmt = __importStar(require("./lib/core/fmt.js"));
|
|
49
|
-
const
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
49
|
+
const node_module_1 = require("node:module");
|
|
50
|
+
function resolveRuntimePath() {
|
|
51
|
+
if (typeof __filename === 'string' && __filename) {
|
|
52
|
+
return __filename;
|
|
53
|
+
}
|
|
54
|
+
const arg1 = typeof process.argv[1] === 'string' ? process.argv[1] : '';
|
|
55
|
+
if (arg1.endsWith('/px.ts') || arg1.endsWith('/px.js')) {
|
|
56
|
+
return arg1;
|
|
57
|
+
}
|
|
58
|
+
return node_path_1.default.resolve(process.cwd(), 'px.ts');
|
|
59
|
+
}
|
|
60
|
+
const runtimePath = resolveRuntimePath();
|
|
61
|
+
const _require = (0, node_module_1.createRequire)(runtimePath);
|
|
62
|
+
const packageJson = _require('./package.json');
|
|
63
|
+
const runtimeDir = node_path_1.default.dirname(runtimePath);
|
|
53
64
|
function parseArgs(argv, baseCwd = process.cwd()) {
|
|
54
65
|
const args = [...argv];
|
|
55
66
|
if (args[0] === '--version' || args[0] === '-v') {
|
|
@@ -108,10 +119,10 @@ function shellInit(shell = 'bash') {
|
|
|
108
119
|
}
|
|
109
120
|
function versionInfo() {
|
|
110
121
|
return {
|
|
111
|
-
name:
|
|
112
|
-
version:
|
|
113
|
-
pxPath:
|
|
114
|
-
packageRoot:
|
|
122
|
+
name: packageJson.name,
|
|
123
|
+
version: packageJson.version,
|
|
124
|
+
pxPath: runtimePath,
|
|
125
|
+
packageRoot: runtimeDir,
|
|
115
126
|
node: process.version,
|
|
116
127
|
};
|
|
117
128
|
}
|
|
@@ -205,11 +216,15 @@ async function run(argv = process.argv.slice(2), options = {}) {
|
|
|
205
216
|
return 0;
|
|
206
217
|
}
|
|
207
218
|
const previousCwd = process.cwd();
|
|
208
|
-
process.chdir(parsed.target);
|
|
209
219
|
try {
|
|
220
|
+
const missionStartModule = _require('./lib/commands/mission-start.js');
|
|
221
|
+
const missionStart = missionStartModule.default || missionStartModule;
|
|
222
|
+
const { createEvent } = _require('./lib/review/review-events.js');
|
|
223
|
+
const workflow = _require('./index.js');
|
|
224
|
+
process.chdir(parsed.target);
|
|
210
225
|
if (parsed.command === 'review-event') {
|
|
211
226
|
const eventArgs = parseReviewEventArgs(parsed.args);
|
|
212
|
-
const result =
|
|
227
|
+
const result = createEvent(eventArgs.slug, eventArgs.type || '', {
|
|
213
228
|
actor: eventArgs.actor || '',
|
|
214
229
|
content: eventArgs.content,
|
|
215
230
|
timestamp: eventArgs.timestamp || undefined,
|
|
@@ -245,8 +260,9 @@ async function run(argv = process.argv.slice(2), options = {}) {
|
|
|
245
260
|
process.chdir(previousCwd);
|
|
246
261
|
}
|
|
247
262
|
}
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
263
|
+
const _cjsMain = typeof require !== 'undefined' && require.main === module;
|
|
264
|
+
const _arg1 = typeof process.argv[1] === 'string' && process.argv[1] ? process.argv[1] : undefined;
|
|
265
|
+
const _esmMain = _arg1 && _arg1.endsWith('/px.ts');
|
|
266
|
+
if (_esmMain || _cjsMain) {
|
|
267
|
+
run().then(code => { process.exitCode = code; });
|
|
252
268
|
}
|