@dailephd/my-dev-kit-orchestrator 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (110) hide show
  1. package/README.md +295 -0
  2. package/dist/artifactChecker.d.ts +31 -0
  3. package/dist/artifactChecker.d.ts.map +1 -0
  4. package/dist/artifactChecker.js +341 -0
  5. package/dist/artifactChecker.js.map +1 -0
  6. package/dist/artifactLifecycle.d.ts +30 -0
  7. package/dist/artifactLifecycle.d.ts.map +1 -0
  8. package/dist/artifactLifecycle.js +176 -0
  9. package/dist/artifactLifecycle.js.map +1 -0
  10. package/dist/cli.d.ts +3 -0
  11. package/dist/cli.d.ts.map +1 -0
  12. package/dist/cli.js +7 -0
  13. package/dist/cli.js.map +1 -0
  14. package/dist/commands/check.d.ts +3 -0
  15. package/dist/commands/check.d.ts.map +1 -0
  16. package/dist/commands/check.js +494 -0
  17. package/dist/commands/check.js.map +1 -0
  18. package/dist/commands/export.d.ts +16 -0
  19. package/dist/commands/export.d.ts.map +1 -0
  20. package/dist/commands/export.js +248 -0
  21. package/dist/commands/export.js.map +1 -0
  22. package/dist/commands/init.d.ts +3 -0
  23. package/dist/commands/init.d.ts.map +1 -0
  24. package/dist/commands/init.js +59 -0
  25. package/dist/commands/init.js.map +1 -0
  26. package/dist/commands/list.d.ts +3 -0
  27. package/dist/commands/list.d.ts.map +1 -0
  28. package/dist/commands/list.js +101 -0
  29. package/dist/commands/list.js.map +1 -0
  30. package/dist/commands/mark.d.ts +3 -0
  31. package/dist/commands/mark.d.ts.map +1 -0
  32. package/dist/commands/mark.js +139 -0
  33. package/dist/commands/mark.js.map +1 -0
  34. package/dist/commands/prompt.d.ts +3 -0
  35. package/dist/commands/prompt.d.ts.map +1 -0
  36. package/dist/commands/prompt.js +198 -0
  37. package/dist/commands/prompt.js.map +1 -0
  38. package/dist/commands/start.d.ts +3 -0
  39. package/dist/commands/start.d.ts.map +1 -0
  40. package/dist/commands/start.js +100 -0
  41. package/dist/commands/start.js.map +1 -0
  42. package/dist/commands/status.d.ts +3 -0
  43. package/dist/commands/status.d.ts.map +1 -0
  44. package/dist/commands/status.js +191 -0
  45. package/dist/commands/status.js.map +1 -0
  46. package/dist/contractChecker.d.ts +53 -0
  47. package/dist/contractChecker.d.ts.map +1 -0
  48. package/dist/contractChecker.js +319 -0
  49. package/dist/contractChecker.js.map +1 -0
  50. package/dist/correctionRouter.d.ts +37 -0
  51. package/dist/correctionRouter.d.ts.map +1 -0
  52. package/dist/correctionRouter.js +142 -0
  53. package/dist/correctionRouter.js.map +1 -0
  54. package/dist/correctionState.d.ts +16 -0
  55. package/dist/correctionState.d.ts.map +1 -0
  56. package/dist/correctionState.js +64 -0
  57. package/dist/correctionState.js.map +1 -0
  58. package/dist/index.d.ts +4 -0
  59. package/dist/index.d.ts.map +1 -0
  60. package/dist/index.js +9 -0
  61. package/dist/index.js.map +1 -0
  62. package/dist/judgeParser.d.ts +16 -0
  63. package/dist/judgeParser.d.ts.map +1 -0
  64. package/dist/judgeParser.js +52 -0
  65. package/dist/judgeParser.js.map +1 -0
  66. package/dist/program.d.ts +3 -0
  67. package/dist/program.d.ts.map +1 -0
  68. package/dist/program.js +33 -0
  69. package/dist/program.js.map +1 -0
  70. package/dist/promptChecker.d.ts +27 -0
  71. package/dist/promptChecker.d.ts.map +1 -0
  72. package/dist/promptChecker.js +152 -0
  73. package/dist/promptChecker.js.map +1 -0
  74. package/dist/promptGenerator.d.ts +12 -0
  75. package/dist/promptGenerator.d.ts.map +1 -0
  76. package/dist/promptGenerator.js +2556 -0
  77. package/dist/promptGenerator.js.map +1 -0
  78. package/dist/run.d.ts +30 -0
  79. package/dist/run.d.ts.map +1 -0
  80. package/dist/run.js +141 -0
  81. package/dist/run.js.map +1 -0
  82. package/dist/stageDetector.d.ts +29 -0
  83. package/dist/stageDetector.d.ts.map +1 -0
  84. package/dist/stageDetector.js +161 -0
  85. package/dist/stageDetector.js.map +1 -0
  86. package/dist/traceChecker.d.ts +46 -0
  87. package/dist/traceChecker.d.ts.map +1 -0
  88. package/dist/traceChecker.js +257 -0
  89. package/dist/traceChecker.js.map +1 -0
  90. package/dist/traceModel.d.ts +7 -0
  91. package/dist/traceModel.d.ts.map +1 -0
  92. package/dist/traceModel.js +37 -0
  93. package/dist/traceModel.js.map +1 -0
  94. package/dist/traceParser.d.ts +27 -0
  95. package/dist/traceParser.d.ts.map +1 -0
  96. package/dist/traceParser.js +102 -0
  97. package/dist/traceParser.js.map +1 -0
  98. package/dist/types.d.ts +11 -0
  99. package/dist/types.d.ts.map +1 -0
  100. package/dist/types.js +9 -0
  101. package/dist/types.js.map +1 -0
  102. package/dist/workflows.d.ts +16 -0
  103. package/dist/workflows.d.ts.map +1 -0
  104. package/dist/workflows.js +170 -0
  105. package/dist/workflows.js.map +1 -0
  106. package/dist/workspace.d.ts +13 -0
  107. package/dist/workspace.d.ts.map +1 -0
  108. package/dist/workspace.js +70 -0
  109. package/dist/workspace.js.map +1 -0
  110. package/package.json +62 -0
@@ -0,0 +1,16 @@
1
+ export declare const JUDGE_VERDICTS: readonly ["PASS", "DESIGN_INCOMPLETE", "PSEUDOCODE_INCOMPLETE", "IMPLEMENTATION_MISMATCH", "TEST_COVERAGE_INCOMPLETE", "ARCHITECTURE_MISMATCH", "NEED_VERIFICATION", "NEED_CONTEXT", "SCOPE_VIOLATION", "BLOCKED"];
2
+ export type JudgeVerdict = (typeof JUDGE_VERDICTS)[number];
3
+ export interface ParsedJudgeReport {
4
+ verdict: JudgeVerdict | null;
5
+ recommendedNextStage: string | null;
6
+ raw: string;
7
+ parseError: string | null;
8
+ }
9
+ export declare function isValidVerdict(v: string): v is JudgeVerdict;
10
+ /**
11
+ * Parses the content of a judge-report.txt file.
12
+ * Returns the verdict (or null if absent/unknown), the recommended next stage,
13
+ * and a parseError if the verdict token was present but unrecognized.
14
+ */
15
+ export declare function parseJudgeReport(content: string): ParsedJudgeReport;
16
+ //# sourceMappingURL=judgeParser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"judgeParser.d.ts","sourceRoot":"","sources":["../src/judgeParser.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,cAAc,oNAWjB,CAAC;AAEX,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC;AAE3D,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,YAAY,GAAG,IAAI,CAAC;IAC7B,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAWD,wBAAgB,cAAc,CAAC,CAAC,EAAE,MAAM,GAAG,CAAC,IAAI,YAAY,CAE3D;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,iBAAiB,CAuBnE"}
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.JUDGE_VERDICTS = void 0;
4
+ exports.isValidVerdict = isValidVerdict;
5
+ exports.parseJudgeReport = parseJudgeReport;
6
+ // Supported judge verdicts as a const tuple for exhaustive typing
7
+ exports.JUDGE_VERDICTS = [
8
+ 'PASS',
9
+ 'DESIGN_INCOMPLETE',
10
+ 'PSEUDOCODE_INCOMPLETE',
11
+ 'IMPLEMENTATION_MISMATCH',
12
+ 'TEST_COVERAGE_INCOMPLETE',
13
+ 'ARCHITECTURE_MISMATCH',
14
+ 'NEED_VERIFICATION',
15
+ 'NEED_CONTEXT',
16
+ 'SCOPE_VIOLATION',
17
+ 'BLOCKED',
18
+ ];
19
+ // Matches "Verdict: SOME_VERDICT" or "Verdict: SOME_VERDICT (optional trailing text)"
20
+ const VERDICT_RE = /^Verdict:\s+([A-Z_]+)(?:\s|$)/im;
21
+ // Matches "Recommended next stage: X", "Recommended next stage - X",
22
+ // "Recommended next stage if not PASS: X", "Recommended stage: X",
23
+ // "Next stage: X", "Route to: X", "Routed stage: X"
24
+ const RECOMMENDED_STAGE_RE = /^(?:Recommended next stage(?:[^-:]*)?[-:]|Recommended stage:|Next stage:|Route to:|Routed stage:)\s+([a-z][a-z0-9-]*)(?:\s|$)/im;
25
+ function isValidVerdict(v) {
26
+ return exports.JUDGE_VERDICTS.includes(v);
27
+ }
28
+ /**
29
+ * Parses the content of a judge-report.txt file.
30
+ * Returns the verdict (or null if absent/unknown), the recommended next stage,
31
+ * and a parseError if the verdict token was present but unrecognized.
32
+ */
33
+ function parseJudgeReport(content) {
34
+ const raw = content;
35
+ const verdictMatch = VERDICT_RE.exec(content);
36
+ const recommendedMatch = RECOMMENDED_STAGE_RE.exec(content);
37
+ const recommendedNextStage = recommendedMatch ? recommendedMatch[1].trim() : null;
38
+ if (!verdictMatch) {
39
+ return { verdict: null, recommendedNextStage, raw, parseError: null };
40
+ }
41
+ const token = verdictMatch[1].trim();
42
+ if (!isValidVerdict(token)) {
43
+ return {
44
+ verdict: null,
45
+ recommendedNextStage,
46
+ raw,
47
+ parseError: `Unrecognized verdict token: "${token}". Supported: ${exports.JUDGE_VERDICTS.join(', ')}`,
48
+ };
49
+ }
50
+ return { verdict: token, recommendedNextStage, raw, parseError: null };
51
+ }
52
+ //# sourceMappingURL=judgeParser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"judgeParser.js","sourceRoot":"","sources":["../src/judgeParser.ts"],"names":[],"mappings":";;;AAgCA,wCAEC;AAOD,4CAuBC;AAhED,kEAAkE;AACrD,QAAA,cAAc,GAAG;IAC5B,MAAM;IACN,mBAAmB;IACnB,uBAAuB;IACvB,yBAAyB;IACzB,0BAA0B;IAC1B,uBAAuB;IACvB,mBAAmB;IACnB,cAAc;IACd,iBAAiB;IACjB,SAAS;CACD,CAAC;AAWX,sFAAsF;AACtF,MAAM,UAAU,GAAG,iCAAiC,CAAC;AAErD,qEAAqE;AACrE,mEAAmE;AACnE,oDAAoD;AACpD,MAAM,oBAAoB,GACxB,iIAAiI,CAAC;AAEpI,SAAgB,cAAc,CAAC,CAAS;IACtC,OAAQ,sBAAoC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED;;;;GAIG;AACH,SAAgB,gBAAgB,CAAC,OAAe;IAC9C,MAAM,GAAG,GAAG,OAAO,CAAC;IAEpB,MAAM,YAAY,GAAG,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC9C,MAAM,gBAAgB,GAAG,oBAAoB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAE5D,MAAM,oBAAoB,GAAG,gBAAgB,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IAElF,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,oBAAoB,EAAE,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;IACxE,CAAC;IAED,MAAM,KAAK,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACrC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;QAC3B,OAAO;YACL,OAAO,EAAE,IAAI;YACb,oBAAoB;YACpB,GAAG;YACH,UAAU,EAAE,gCAAgC,KAAK,iBAAiB,sBAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;SAC9F,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,oBAAoB,EAAE,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;AACzE,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function createProgram(): Command;
3
+ //# sourceMappingURL=program.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"program.d.ts","sourceRoot":"","sources":["../src/program.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAUpC,wBAAgB,aAAa,IAAI,OAAO,CAwBvC"}
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createProgram = createProgram;
4
+ const commander_1 = require("commander");
5
+ const init_1 = require("./commands/init");
6
+ const start_1 = require("./commands/start");
7
+ const status_1 = require("./commands/status");
8
+ const prompt_1 = require("./commands/prompt");
9
+ const list_1 = require("./commands/list");
10
+ const mark_1 = require("./commands/mark");
11
+ const check_1 = require("./commands/check");
12
+ const export_1 = require("./commands/export");
13
+ function createProgram() {
14
+ const program = new commander_1.Command();
15
+ program
16
+ .name('my-dev-kit-orchestrator')
17
+ .description('CLI-first workflow tool for design-first software development with coding agents.\n\n' +
18
+ 'Guides coding agents through a staged design-to-code workflow:\n' +
19
+ ' request -> architecture context -> behavior model -> pseudocode\n' +
20
+ ' -> test strategy -> implementation -> test implementation\n' +
21
+ ' -> verification -> judge -> final report')
22
+ .version('1.0.0');
23
+ program.addCommand((0, init_1.makeInitCommand)());
24
+ program.addCommand((0, start_1.makeStartCommand)());
25
+ program.addCommand((0, status_1.makeStatusCommand)());
26
+ program.addCommand((0, prompt_1.makePromptCommand)());
27
+ program.addCommand((0, list_1.makeListCommand)());
28
+ program.addCommand((0, mark_1.makeMarkCommand)());
29
+ program.addCommand((0, check_1.makeCheckCommand)());
30
+ program.addCommand((0, export_1.makeExportCommand)());
31
+ return program;
32
+ }
33
+ //# sourceMappingURL=program.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"program.js","sourceRoot":"","sources":["../src/program.ts"],"names":[],"mappings":";;AAUA,sCAwBC;AAlCD,yCAAoC;AACpC,0CAAkD;AAClD,4CAAoD;AACpD,8CAAsD;AACtD,8CAAsD;AACtD,0CAAkD;AAClD,0CAAkD;AAClD,4CAAoD;AACpD,8CAAsD;AAEtD,SAAgB,aAAa;IAC3B,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;IAE9B,OAAO;SACJ,IAAI,CAAC,yBAAyB,CAAC;SAC/B,WAAW,CACV,uFAAuF;QACvF,kEAAkE;QAClE,qEAAqE;QACrE,+DAA+D;QAC/D,4CAA4C,CAC7C;SACA,OAAO,CAAC,OAAO,CAAC,CAAC;IAEpB,OAAO,CAAC,UAAU,CAAC,IAAA,sBAAe,GAAE,CAAC,CAAC;IACtC,OAAO,CAAC,UAAU,CAAC,IAAA,wBAAgB,GAAE,CAAC,CAAC;IACvC,OAAO,CAAC,UAAU,CAAC,IAAA,0BAAiB,GAAE,CAAC,CAAC;IACxC,OAAO,CAAC,UAAU,CAAC,IAAA,0BAAiB,GAAE,CAAC,CAAC;IACxC,OAAO,CAAC,UAAU,CAAC,IAAA,sBAAe,GAAE,CAAC,CAAC;IACtC,OAAO,CAAC,UAAU,CAAC,IAAA,sBAAe,GAAE,CAAC,CAAC;IACtC,OAAO,CAAC,UAAU,CAAC,IAAA,wBAAgB,GAAE,CAAC,CAAC;IACvC,OAAO,CAAC,UAAU,CAAC,IAAA,0BAAiB,GAAE,CAAC,CAAC;IAExC,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -0,0 +1,27 @@
1
+ import { CheckSeverity } from './artifactChecker';
2
+ import { RunMetadata } from './run';
3
+ export interface PromptCheckIssue {
4
+ code: string;
5
+ severity: CheckSeverity;
6
+ message: string;
7
+ section?: string;
8
+ }
9
+ export interface PromptCheckResult {
10
+ promptFile: string;
11
+ stageName: string;
12
+ issues: PromptCheckIssue[];
13
+ passed: boolean;
14
+ checkedAt: string;
15
+ }
16
+ export declare function checkPrompt(runFolder: string, promptFile: string, stageName: string): PromptCheckResult;
17
+ export declare function checkAllPrompts(meta: RunMetadata): PromptCheckResult[];
18
+ export interface CheckResultsFile {
19
+ version: '1';
20
+ checkedAt: string;
21
+ artifactResults: import('./artifactChecker').ArtifactCheckResult[];
22
+ promptResults: PromptCheckResult[];
23
+ }
24
+ export declare function getCheckResultsPath(runFolder: string): string;
25
+ export declare function readCheckResults(runFolder: string): CheckResultsFile | null;
26
+ export declare function writeCheckResults(runFolder: string, data: CheckResultsFile): void;
27
+ //# sourceMappingURL=promptChecker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"promptChecker.d.ts","sourceRoot":"","sources":["../src/promptChecker.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAIpC,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,aAAa,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,gBAAgB,EAAE,CAAC;IAC3B,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAcD,wBAAgB,WAAW,CACzB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,GAChB,iBAAiB,CAoFnB;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,WAAW,GAAG,iBAAiB,EAAE,CAItE;AAID,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,GAAG,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,OAAO,mBAAmB,EAAE,mBAAmB,EAAE,CAAC;IACnE,aAAa,EAAE,iBAAiB,EAAE,CAAC;CACpC;AAED,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAE7D;AAED,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI,CAQ3E;AAED,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,GAAG,IAAI,CAKjF"}
@@ -0,0 +1,152 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.checkPrompt = checkPrompt;
37
+ exports.checkAllPrompts = checkAllPrompts;
38
+ exports.getCheckResultsPath = getCheckResultsPath;
39
+ exports.readCheckResults = readCheckResults;
40
+ exports.writeCheckResults = writeCheckResults;
41
+ const fs = __importStar(require("fs"));
42
+ const path = __importStar(require("path"));
43
+ // ─── Prompt structure expectations from promptGenerator.ts header() ──────────
44
+ const PROMPT_MIN_LENGTH = 50;
45
+ const PROMPT_PLACEHOLDER_PATTERNS = [
46
+ '[stage prompt not yet generated]',
47
+ '[prompt not generated]',
48
+ '[TODO]',
49
+ 'PLACEHOLDER',
50
+ ];
51
+ // ─── Prompt quality checker ───────────────────────────────────────────────────
52
+ function checkPrompt(runFolder, promptFile, stageName) {
53
+ const fullPath = path.join(runFolder, promptFile);
54
+ const checkedAt = new Date().toISOString();
55
+ const issues = [];
56
+ if (!fs.existsSync(fullPath)) {
57
+ return {
58
+ promptFile,
59
+ stageName,
60
+ issues: [
61
+ {
62
+ code: 'PROMPT_MISSING_FILE',
63
+ severity: 'fail',
64
+ message: `Prompt file does not exist: ${promptFile}`,
65
+ },
66
+ ],
67
+ passed: false,
68
+ checkedAt,
69
+ };
70
+ }
71
+ const content = fs.readFileSync(fullPath, 'utf8');
72
+ if (content.trim().length < PROMPT_MIN_LENGTH) {
73
+ issues.push({
74
+ code: 'PROMPT_EMPTY',
75
+ severity: 'fail',
76
+ message: `Prompt file is empty or too short (under ${PROMPT_MIN_LENGTH} characters)`,
77
+ });
78
+ return {
79
+ promptFile,
80
+ stageName,
81
+ issues,
82
+ passed: false,
83
+ checkedAt,
84
+ };
85
+ }
86
+ for (const pattern of PROMPT_PLACEHOLDER_PATTERNS) {
87
+ if (content.includes(pattern)) {
88
+ issues.push({
89
+ code: 'PROMPT_PLACEHOLDER',
90
+ severity: 'warn',
91
+ message: `Prompt file appears to contain placeholder content: "${pattern}"`,
92
+ });
93
+ break;
94
+ }
95
+ }
96
+ // Stage header check: generated prompts start with "Stage: <name>"
97
+ const hasStageHeader = /^Stage:\s*.+/m.test(content);
98
+ if (!hasStageHeader) {
99
+ issues.push({
100
+ code: 'PROMPT_MISSING_STAGE_HEADER',
101
+ severity: 'fail',
102
+ message: 'Prompt file does not contain a "Stage:" line',
103
+ section: 'Stage',
104
+ });
105
+ }
106
+ // Task section check
107
+ const hasTaskSection = /^Task:/m.test(content);
108
+ if (!hasTaskSection) {
109
+ issues.push({
110
+ code: 'PROMPT_MISSING_TASK_SECTION',
111
+ severity: 'warn',
112
+ message: 'Prompt file does not contain a "Task:" section',
113
+ section: 'Task',
114
+ });
115
+ }
116
+ // Required output artifact check
117
+ const hasOutputArtifact = /Required output artifact:/m.test(content);
118
+ if (!hasOutputArtifact) {
119
+ issues.push({
120
+ code: 'PROMPT_MISSING_OUTPUT_ARTIFACT',
121
+ severity: 'warn',
122
+ message: 'Prompt file does not contain a "Required output artifact:" line',
123
+ section: 'Required output artifact',
124
+ });
125
+ }
126
+ const passed = !issues.some((i) => i.severity === 'fail');
127
+ return { promptFile, stageName, issues, passed, checkedAt };
128
+ }
129
+ function checkAllPrompts(meta) {
130
+ return meta.stages.map((stage) => checkPrompt(meta.runFolder, stage.promptFile, stage.name));
131
+ }
132
+ function getCheckResultsPath(runFolder) {
133
+ return path.join(runFolder, 'artifact-check-results.json');
134
+ }
135
+ function readCheckResults(runFolder) {
136
+ const p = getCheckResultsPath(runFolder);
137
+ if (!fs.existsSync(p))
138
+ return null;
139
+ try {
140
+ return JSON.parse(fs.readFileSync(p, 'utf8'));
141
+ }
142
+ catch {
143
+ return null;
144
+ }
145
+ }
146
+ function writeCheckResults(runFolder, data) {
147
+ const p = getCheckResultsPath(runFolder);
148
+ const tmp = p + '.tmp';
149
+ fs.writeFileSync(tmp, JSON.stringify(data, null, 2), 'utf8');
150
+ fs.renameSync(tmp, p);
151
+ }
152
+ //# sourceMappingURL=promptChecker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"promptChecker.js","sourceRoot":"","sources":["../src/promptChecker.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkCA,kCAwFC;AAED,0CAIC;AAWD,kDAEC;AAED,4CAQC;AAED,8CAKC;AA9JD,uCAAyB;AACzB,2CAA6B;AAqB7B,gFAAgF;AAEhF,MAAM,iBAAiB,GAAG,EAAE,CAAC;AAC7B,MAAM,2BAA2B,GAAG;IAClC,kCAAkC;IAClC,wBAAwB;IACxB,QAAQ;IACR,aAAa;CACd,CAAC;AAEF,iFAAiF;AAEjF,SAAgB,WAAW,CACzB,SAAiB,EACjB,UAAkB,EAClB,SAAiB;IAEjB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IAClD,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC3C,MAAM,MAAM,GAAuB,EAAE,CAAC;IAEtC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7B,OAAO;YACL,UAAU;YACV,SAAS;YACT,MAAM,EAAE;gBACN;oBACE,IAAI,EAAE,qBAAqB;oBAC3B,QAAQ,EAAE,MAAM;oBAChB,OAAO,EAAE,+BAA+B,UAAU,EAAE;iBACrD;aACF;YACD,MAAM,EAAE,KAAK;YACb,SAAS;SACV,CAAC;IACJ,CAAC;IAED,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAElD,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,iBAAiB,EAAE,CAAC;QAC9C,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,cAAc;YACpB,QAAQ,EAAE,MAAM;YAChB,OAAO,EAAE,4CAA4C,iBAAiB,cAAc;SACrF,CAAC,CAAC;QACH,OAAO;YACL,UAAU;YACV,SAAS;YACT,MAAM;YACN,MAAM,EAAE,KAAK;YACb,SAAS;SACV,CAAC;IACJ,CAAC;IAED,KAAK,MAAM,OAAO,IAAI,2BAA2B,EAAE,CAAC;QAClD,IAAI,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YAC9B,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,oBAAoB;gBAC1B,QAAQ,EAAE,MAAM;gBAChB,OAAO,EAAE,wDAAwD,OAAO,GAAG;aAC5E,CAAC,CAAC;YACH,MAAM;QACR,CAAC;IACH,CAAC;IAED,mEAAmE;IACnE,MAAM,cAAc,GAAG,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACrD,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,6BAA6B;YACnC,QAAQ,EAAE,MAAM;YAChB,OAAO,EAAE,8CAA8C;YACvD,OAAO,EAAE,OAAO;SACjB,CAAC,CAAC;IACL,CAAC;IAED,qBAAqB;IACrB,MAAM,cAAc,GAAG,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC/C,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,6BAA6B;YACnC,QAAQ,EAAE,MAAM;YAChB,OAAO,EAAE,gDAAgD;YACzD,OAAO,EAAE,MAAM;SAChB,CAAC,CAAC;IACL,CAAC;IAED,iCAAiC;IACjC,MAAM,iBAAiB,GAAG,4BAA4B,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACrE,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACvB,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,gCAAgC;YACtC,QAAQ,EAAE,MAAM;YAChB,OAAO,EAAE,iEAAiE;YAC1E,OAAO,EAAE,0BAA0B;SACpC,CAAC,CAAC;IACL,CAAC;IAED,MAAM,MAAM,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC;IAC1D,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;AAC9D,CAAC;AAED,SAAgB,eAAe,CAAC,IAAiB;IAC/C,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAC/B,WAAW,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,IAAI,CAAC,CAC1D,CAAC;AACJ,CAAC;AAWD,SAAgB,mBAAmB,CAAC,SAAiB;IACnD,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,6BAA6B,CAAC,CAAC;AAC7D,CAAC;AAED,SAAgB,gBAAgB,CAAC,SAAiB;IAChD,MAAM,CAAC,GAAG,mBAAmB,CAAC,SAAS,CAAC,CAAC;IACzC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACnC,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC,CAAqB,CAAC;IACpE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAgB,iBAAiB,CAAC,SAAiB,EAAE,IAAsB;IACzE,MAAM,CAAC,GAAG,mBAAmB,CAAC,SAAS,CAAC,CAAC;IACzC,MAAM,GAAG,GAAG,CAAC,GAAG,MAAM,CAAC;IACvB,EAAE,CAAC,aAAa,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IAC7D,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;AACxB,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { RunMetadata } from './run';
2
+ import { CorrectionRouteResult } from './correctionRouter';
3
+ export declare function generateStagePrompt(meta: RunMetadata, stageName: string): string;
4
+ /**
5
+ * Generates a bounded, stage-specific correction prompt.
6
+ * The prompt instructs the coding agent to revise only the failed stage artifact
7
+ * based on the judge report finding - without broadening scope, modifying code
8
+ * automatically, or invoking any external runtime.
9
+ */
10
+ export declare function generateCorrectionPrompt(meta: RunMetadata, correctionState: CorrectionRouteResult): string;
11
+ export declare function writeStagePrompts(meta: RunMetadata): void;
12
+ //# sourceMappingURL=promptGenerator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"promptGenerator.d.ts","sourceRoot":"","sources":["../src/promptGenerator.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AACpC,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAm1E3D,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAiEhF;AAmCD;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,WAAW,EACjB,eAAe,EAAE,qBAAqB,GACrC,MAAM,CAiER;AA4BD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,CAMzD"}