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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "genesis-compiler",
3
- "version": "1.2.13",
3
+ "version": "1.2.14",
4
4
  "type": "module",
5
5
  "description": "An agent-independent prompt, multi-language code-index, cleanup, and verification companion with optional Codex hooks.",
6
6
  "repository": {
@@ -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').filter(Boolean).map(normalizeRelative);
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 = [...new Set([...state.changedPaths, ...currentPaths])].sort();
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,
@@ -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
- return pieces.map(({ id, description, requires, conflicts }) => ({
30
- id,
31
- description,
32
- requires,
33
- conflicts,
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({ instructions, program, request, root, stackPackages }) {
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,