genesis-compiler 1.2.13 → 1.2.14
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/package.json +1 -1
- package/src/index/codex-hooks.js +11 -2
- package/src/index/prompt.js +24 -9
package/package.json
CHANGED
package/src/index/codex-hooks.js
CHANGED
|
@@ -173,8 +173,12 @@ function hookId(input, field) {
|
|
|
173
173
|
return value;
|
|
174
174
|
}
|
|
175
175
|
|
|
176
|
+
function normalizedPaths(values = []) {
|
|
177
|
+
return [...new Set(values.map(normalizeRelative).filter(Boolean))];
|
|
178
|
+
}
|
|
179
|
+
|
|
176
180
|
function zeroPaths(buffer) {
|
|
177
|
-
return buffer.toString('utf8').split('\0')
|
|
181
|
+
return normalizedPaths(buffer.toString('utf8').split('\0'));
|
|
178
182
|
}
|
|
179
183
|
|
|
180
184
|
async function repositorySnapshot(projectRoot) {
|
|
@@ -352,7 +356,12 @@ export async function completeCodexTurn({ input, projectRoot } = {}) {
|
|
|
352
356
|
|
|
353
357
|
if (state.phase === 'reconcile') {
|
|
354
358
|
const currentPaths = await changedProjectPaths(root, state.snapshot, await repositorySnapshot(root));
|
|
355
|
-
const changedPaths =
|
|
359
|
+
const changedPaths = normalizedPaths([...state.changedPaths, ...currentPaths]).sort();
|
|
360
|
+
if (changedPaths.length === 0) {
|
|
361
|
+
await refreshProjectIndex(root);
|
|
362
|
+
await rm(statePath, { force: true });
|
|
363
|
+
return {};
|
|
364
|
+
}
|
|
356
365
|
await refreshProjectIndex(root);
|
|
357
366
|
await writeTurnState(statePath, {
|
|
358
367
|
...state,
|
package/src/index/prompt.js
CHANGED
|
@@ -4,6 +4,7 @@ import { buildProjectIndex, MACHINE_CITY_PATH, PROGRAM_CITY_PATH } from './code-
|
|
|
4
4
|
import { BLUEPRINT_SKELETON_SOURCE, readBlueprint } from './blueprint.js';
|
|
5
5
|
import { readStack, stackPromptContext } from './stack.js';
|
|
6
6
|
import { listStackCatalogPieces } from './stack-catalog.js';
|
|
7
|
+
import { normalizeStackPieceId } from './stack-piece.js';
|
|
7
8
|
import { GenesisError } from './errors.js';
|
|
8
9
|
import { gitContext } from './git.js';
|
|
9
10
|
import { inspectProgram } from './program.js';
|
|
@@ -25,13 +26,16 @@ const DEFAULT_REQUEST = {
|
|
|
25
26
|
review: 'Review the complete useful relationship between Blueprint, code, Program, and tests.',
|
|
26
27
|
};
|
|
27
28
|
|
|
28
|
-
function stackCatalogContext(pieces = []) {
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
requires,
|
|
33
|
-
|
|
34
|
-
|
|
29
|
+
function stackCatalogContext(pieces = [], hiddenStackPieces = []) {
|
|
30
|
+
const hidden = new Set(hiddenStackPieces.map(normalizeStackPieceId));
|
|
31
|
+
return pieces
|
|
32
|
+
.filter(({ id }) => !hidden.has(id))
|
|
33
|
+
.map(({ id, description, requires, conflicts }) => ({
|
|
34
|
+
id,
|
|
35
|
+
description,
|
|
36
|
+
requires,
|
|
37
|
+
conflicts,
|
|
38
|
+
}));
|
|
35
39
|
}
|
|
36
40
|
|
|
37
41
|
function requestText(value, task) {
|
|
@@ -205,7 +209,14 @@ async function generateExplanationPrompt({ instructions, program, request, root,
|
|
|
205
209
|
};
|
|
206
210
|
}
|
|
207
211
|
|
|
208
|
-
async function generateStartPrompt({
|
|
212
|
+
async function generateStartPrompt({
|
|
213
|
+
hiddenStackPieces,
|
|
214
|
+
instructions,
|
|
215
|
+
program,
|
|
216
|
+
request,
|
|
217
|
+
root,
|
|
218
|
+
stackPackages,
|
|
219
|
+
}) {
|
|
209
220
|
let blueprint;
|
|
210
221
|
try {
|
|
211
222
|
blueprint = await readBlueprint(root, { required: true });
|
|
@@ -255,7 +266,7 @@ async function generateStartPrompt({ instructions, program, request, root, stack
|
|
|
255
266
|
description: blueprint.description,
|
|
256
267
|
},
|
|
257
268
|
stack: stackPromptContext(stack),
|
|
258
|
-
availableStackPieces: stackCatalogContext(catalog),
|
|
269
|
+
availableStackPieces: stackCatalogContext(catalog, hiddenStackPieces),
|
|
259
270
|
program: programContext(program),
|
|
260
271
|
codeIndex: codeIndexContext(index),
|
|
261
272
|
},
|
|
@@ -273,6 +284,7 @@ async function generateStartPrompt({ instructions, program, request, root, stack
|
|
|
273
284
|
|
|
274
285
|
export async function generateProjectPrompt({
|
|
275
286
|
environment = process.env,
|
|
287
|
+
hiddenStackPieces = [],
|
|
276
288
|
projectRoot,
|
|
277
289
|
request = '',
|
|
278
290
|
stackPackages = [],
|
|
@@ -314,6 +326,7 @@ export async function generateProjectPrompt({
|
|
|
314
326
|
if (task === 'start') {
|
|
315
327
|
return generateStartPrompt({
|
|
316
328
|
instructions,
|
|
329
|
+
hiddenStackPieces,
|
|
317
330
|
program,
|
|
318
331
|
request: userRequest,
|
|
319
332
|
root,
|
|
@@ -338,6 +351,7 @@ export async function generateProjectPrompt({
|
|
|
338
351
|
if (error?.code !== 'STACK_REQUIRED') throw error;
|
|
339
352
|
return generateStartPrompt({
|
|
340
353
|
instructions: await readInstalledAsset('start'),
|
|
354
|
+
hiddenStackPieces,
|
|
341
355
|
program,
|
|
342
356
|
request: userRequest,
|
|
343
357
|
root,
|
|
@@ -347,6 +361,7 @@ export async function generateProjectPrompt({
|
|
|
347
361
|
if (stack.components.length === 0) {
|
|
348
362
|
return generateStartPrompt({
|
|
349
363
|
instructions: await readInstalledAsset('start'),
|
|
364
|
+
hiddenStackPieces,
|
|
350
365
|
program,
|
|
351
366
|
request: userRequest,
|
|
352
367
|
root,
|