@codeyam/codeyam-cli 0.1.29 → 0.1.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.
Files changed (36) hide show
  1. package/analyzer-template/.build-info.json +6 -6
  2. package/analyzer-template/log.txt +3 -3
  3. package/analyzer-template/package.json +1 -1
  4. package/analyzer-template/packages/aws/package.json +1 -1
  5. package/analyzer-template/packages/database/package.json +1 -1
  6. package/codeyam-cli/src/commands/__tests__/init.gitignore.test.js +38 -3
  7. package/codeyam-cli/src/commands/__tests__/init.gitignore.test.js.map +1 -1
  8. package/codeyam-cli/src/commands/editor.js +94 -0
  9. package/codeyam-cli/src/commands/editor.js.map +1 -1
  10. package/codeyam-cli/src/commands/init.js +19 -0
  11. package/codeyam-cli/src/commands/init.js.map +1 -1
  12. package/codeyam-cli/src/utils/__tests__/editorProxySession.test.js +98 -1
  13. package/codeyam-cli/src/utils/__tests__/editorProxySession.test.js.map +1 -1
  14. package/codeyam-cli/src/utils/install-skills.js +27 -6
  15. package/codeyam-cli/src/utils/install-skills.js.map +1 -1
  16. package/codeyam-cli/src/webserver/__tests__/editorProxy.test.js +115 -0
  17. package/codeyam-cli/src/webserver/__tests__/editorProxy.test.js.map +1 -1
  18. package/codeyam-cli/src/webserver/app/lib/database.js.map +1 -1
  19. package/codeyam-cli/src/webserver/build/client/assets/editor.entity.(_sha)-CsYVRiNH.js +147 -0
  20. package/codeyam-cli/src/webserver/build/client/assets/globals-Gp2o-NMc.css +1 -0
  21. package/codeyam-cli/src/webserver/build/client/assets/{manifest-3d8cde80.js → manifest-ef0f624d.js} +1 -1
  22. package/codeyam-cli/src/webserver/build/client/assets/{root-CVjDQwjJ.js → root-Didv9PLi.js} +5 -5
  23. package/codeyam-cli/src/webserver/build/server/assets/{analysisRunner-CTJYMVFP.js → analysisRunner-BKMsxwqe.js} +1 -1
  24. package/codeyam-cli/src/webserver/build/server/assets/{index-CCth4Hgw.js → index-CvuvIPEn.js} +1 -1
  25. package/codeyam-cli/src/webserver/build/server/assets/init-B3gVLAAJ.js +14 -0
  26. package/codeyam-cli/src/webserver/build/server/assets/{server-build-DSW2mE30.js → server-build-B4LxStYP.js} +140 -140
  27. package/codeyam-cli/src/webserver/build/server/index.js +1 -1
  28. package/codeyam-cli/src/webserver/build-info.json +5 -5
  29. package/codeyam-cli/src/webserver/editorProxy.js +77 -4
  30. package/codeyam-cli/src/webserver/editorProxy.js.map +1 -1
  31. package/codeyam-cli/templates/codeyam-editor-gemini.md +59 -0
  32. package/codeyam-cli/templates/seed-adapters/supabase.ts +42 -53
  33. package/package.json +1 -1
  34. package/codeyam-cli/src/webserver/build/client/assets/editor.entity.(_sha)-785deXbZ.js +0 -147
  35. package/codeyam-cli/src/webserver/build/client/assets/globals-Bt7TsgQz.css +0 -1
  36. package/codeyam-cli/src/webserver/build/server/assets/init-UXl-3vVp.js +0 -10
@@ -1,10 +1,10 @@
1
1
  {
2
- "buildTimestamp": "2026-03-30T23:54:54.800Z",
3
- "buildTime": 1774914894800,
4
- "gitCommit": "0e92e67476166610824f499bf4183ae1ea4b4fcd",
2
+ "buildTimestamp": "2026-04-01T01:07:46.592Z",
3
+ "buildTime": 1775005666592,
4
+ "gitCommit": "1963f3fe25d06de746759d0b71265b6ca9de5451",
5
5
  "nodeVersion": "v20.20.1",
6
6
  "contentHash": "c92230c027acb71cab56d2a696876a6a52206bfadd59fbc31a512b00a7ee8826",
7
- "buildNumber": 1299,
8
- "semanticVersion": "0.1.1299",
9
- "version": "0.1.1299 (2026-03-30T23:54+c92230c)"
7
+ "buildNumber": 1315,
8
+ "semanticVersion": "0.1.1315",
9
+ "version": "0.1.1315 (2026-04-01T01:07+c92230c)"
10
10
  }
@@ -1,7 +1,7 @@
1
1
 
2
- [3/30/2026, 11:54:54 PM] > codeyam-combo@1.0.0 mergeDependencies
3
- [3/30/2026, 11:54:54 PM] > node ./scripts/mergePackageJsonFiles.cjs
2
+ [4/1/2026, 1:07:46 AM] > codeyam-combo@1.0.0 mergeDependencies
3
+ [4/1/2026, 1:07:46 AM] > node ./scripts/mergePackageJsonFiles.cjs
4
4
 
5
5
 
6
- [3/30/2026, 11:54:54 PM] Merged dependencies into root package.json
6
+ [4/1/2026, 1:07:46 AM] Merged dependencies into root package.json
7
7
 
@@ -62,7 +62,7 @@
62
62
  "@types/jsdom": "^27.0.0",
63
63
  "@types/better-sqlite3": "^7.6.13",
64
64
  "@types/jest": "^30.0.0",
65
- "@types/pg": "^8.18.0",
65
+ "@types/pg": "^8.20.0",
66
66
  "@types/ws": "^8.18.1",
67
67
  "@octokit/types": "^16.0.0",
68
68
  "@types/react": "^19.2.7",
@@ -17,7 +17,7 @@
17
17
  "@aws-sdk/client-ecr": "^3.1019.0",
18
18
  "@aws-sdk/client-ecs": "^3.1009.0",
19
19
  "@aws-sdk/client-s3": "^3.1019.0",
20
- "@aws-sdk/client-sqs": "^3.1019.0",
20
+ "@aws-sdk/client-sqs": "^3.1020.0",
21
21
  "@aws-sdk/lib-storage": "^3.1019.0",
22
22
  "@aws-sdk/s3-request-presigner": "^3.1019.0",
23
23
  "@aws-sdk/util-dynamodb": "^3.990.0"
@@ -25,7 +25,7 @@
25
25
  "devDependencies": {
26
26
  "@types/better-sqlite3": "^7.6.13",
27
27
  "@types/jest": "^30.0.0",
28
- "@types/pg": "^8.18.0",
28
+ "@types/pg": "^8.20.0",
29
29
  "@types/ws": "^8.18.1"
30
30
  }
31
31
  }
@@ -17,6 +17,7 @@ const CODEYAM_GITIGNORE_ENTRIES = [
17
17
  '.codeyam/active-scenario.json',
18
18
  '.codeyam/editor-step.json',
19
19
  '.codeyam/editor-user-prompt.txt',
20
+ '.codeyam/claude-session-id.txt',
20
21
  '.codeyam/editor-mode-context.md',
21
22
  '.codeyam/dev-mode-context.md',
22
23
  '.codeyam/logs/',
@@ -26,6 +27,7 @@ const CODEYAM_GITIGNORE_ENTRIES = [
26
27
  '.codeyam/tmp/',
27
28
  '.codeyam/rules/',
28
29
  '.codeyam/bin/',
30
+ '.codeyam/docs/',
29
31
  ];
30
32
  /**
31
33
  * Extract the ensureGitignoreEntry function for testing.
@@ -63,6 +65,17 @@ async function ensureGitignoreEntry(projectRoot) {
63
65
  block;
64
66
  await fs.writeFile(gitignorePath, newContent, 'utf8');
65
67
  }
68
+ else {
69
+ // Add any missing entries from the current list
70
+ const missingEntries = CODEYAM_GITIGNORE_ENTRIES.filter((entry) => !lines.some((line) => line.trim() === entry));
71
+ if (missingEntries.length > 0) {
72
+ const updatedContent = gitignoreContent +
73
+ (gitignoreContent && !gitignoreContent.endsWith('\n') ? '\n' : '') +
74
+ missingEntries.join('\n') +
75
+ '\n';
76
+ await fs.writeFile(gitignorePath, updatedContent, 'utf8');
77
+ }
78
+ }
66
79
  }
67
80
  describe('init command - gitignore management', () => {
68
81
  let testDir;
@@ -100,12 +113,15 @@ describe('init command - gitignore management', () => {
100
113
  expect(content).toContain('.codeyam/db.sqlite3');
101
114
  expect(content).toContain('.codeyam/secrets.json');
102
115
  });
103
- test('does not duplicate when granular patterns already exist', async () => {
116
+ test('does not duplicate when all granular patterns already exist', async () => {
104
117
  const gitignorePath = path.join(testDir, '.gitignore');
105
- await fs.writeFile(gitignorePath, 'node_modules\n.codeyam/db.sqlite3\n.codeyam/secrets.json\n', 'utf8');
118
+ await fs.writeFile(gitignorePath, 'node_modules\n\n# CodeYam - local only (not shared)\n' +
119
+ CODEYAM_GITIGNORE_ENTRIES.join('\n') +
120
+ '\n', 'utf8');
106
121
  await ensureGitignoreEntry(testDir);
107
122
  const content = await fs.readFile(gitignorePath, 'utf8');
108
- const matches = content.match(/\.codeyam\/db\.sqlite3/g);
123
+ // Exact match on the line — no duplicates
124
+ const matches = content.match(/^\.codeyam\/db\.sqlite3$/gm);
109
125
  expect(matches).toHaveLength(1);
110
126
  });
111
127
  test('replaces blanket .codeyam with granular patterns', async () => {
@@ -172,6 +188,25 @@ build
172
188
  expect(content).toContain('dist');
173
189
  expect(content).toContain('.codeyam/db.sqlite3');
174
190
  });
191
+ test('adds missing entries to existing granular block', async () => {
192
+ const gitignorePath = path.join(testDir, '.gitignore');
193
+ // Simulate an older gitignore that has most entries but is missing claude-session-id.txt and docs/
194
+ const oldEntries = CODEYAM_GITIGNORE_ENTRIES.filter((e) => e !== '.codeyam/claude-session-id.txt' && e !== '.codeyam/docs/');
195
+ await fs.writeFile(gitignorePath, 'node_modules\n\n# CodeYam - local only (not shared)\n' +
196
+ oldEntries.join('\n') +
197
+ '\n', 'utf8');
198
+ await ensureGitignoreEntry(testDir);
199
+ const content = await fs.readFile(gitignorePath, 'utf8');
200
+ // New entries should be added
201
+ expect(content).toContain('.codeyam/claude-session-id.txt');
202
+ expect(content).toContain('.codeyam/docs/');
203
+ // Existing entries should still be there
204
+ expect(content).toContain('.codeyam/db.sqlite3');
205
+ expect(content).toContain('.codeyam/secrets.json');
206
+ // No duplicates
207
+ const dbMatches = content.match(/\.codeyam\/db\.sqlite3$/gm);
208
+ expect(dbMatches).toHaveLength(1);
209
+ });
175
210
  test('config.json is NOT ignored (allows sharing via git)', async () => {
176
211
  await ensureGitignoreEntry(testDir);
177
212
  const gitignorePath = path.join(testDir, '.gitignore');
@@ -1 +1 @@
1
- {"version":3,"file":"init.gitignore.test.js","sourceRoot":"","sources":["../../../../../src/commands/__tests__/init.gitignore.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init.gitignore.test.js","sourceRoot":"","sources":["../../../../../src/commands/__tests__/init.gitignore.test.ts"],"names":[],"mappings":"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"}
@@ -387,6 +387,37 @@ function checkbox(text) {
387
387
  const highlighted = text.replace(/`([^`]+)`/g, (_m, code) => chalk.cyan(code));
388
388
  console.log(` ${chalk.dim('[ ]')} ${highlighted}`);
389
389
  }
390
+ /**
391
+ * Print a checklist item for the handoff summary.
392
+ */
393
+ function checkboxHandoff() {
394
+ checkbox('Update the handoff summary in `.codeyam/config.json` for the next session/AI: `codeyam editor handoff \'{"summary":"..."}\'`');
395
+ }
396
+ /**
397
+ * Print the handoff context from a previous session or AI provider.
398
+ */
399
+ function printHandoffContext(root) {
400
+ try {
401
+ const configPath = path.join(root, '.codeyam', 'config.json');
402
+ if (!fs.existsSync(configPath))
403
+ return;
404
+ const config = JSON.parse(fs.readFileSync(configPath, 'utf8'));
405
+ const handoff = config.handoff;
406
+ if (!handoff || !handoff.summary)
407
+ return;
408
+ console.log();
409
+ console.log(chalk.bold.magenta(`━━━ HANDOFF FROM ${String(handoff.lastProvider || 'unknown').toUpperCase()} (Step ${handoff.lastStep || 'unknown'}) ━━━`));
410
+ console.log(chalk.magenta(handoff.summary));
411
+ if (handoff.lastUpdated) {
412
+ console.log(chalk.dim(` Updated: ${handoff.lastUpdated}`));
413
+ }
414
+ console.log(chalk.bold.magenta('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━'));
415
+ console.log();
416
+ }
417
+ catch {
418
+ // Non-fatal
419
+ }
420
+ }
390
421
  /**
391
422
  * Instructions for creating/updating .codeyam/data-structure.json.
392
423
  * Only prints creation instructions if the file doesn't exist yet.
@@ -1188,6 +1219,8 @@ function printStep1(root, feature, options, userPrompt) {
1188
1219
  console.log(chalk.yellow(' Option 2 label: "I\'d like some changes"') +
1189
1220
  chalk.dim(' — user describes changes, you revise the plan, then re-present'));
1190
1221
  console.log();
1222
+ checkboxHandoff();
1223
+ console.log();
1191
1224
  console.log(chalk.dim('This step is for understanding user goals and getting buy-in. Code comes in Step 2.'));
1192
1225
  console.log();
1193
1226
  console.log(chalk.bold.red('━━━ STOP ━━━'));
@@ -1315,6 +1348,8 @@ function printStep2(root, feature) {
1315
1348
  console.log();
1316
1349
  printDataStructureInstructions();
1317
1350
  }
1351
+ console.log();
1352
+ checkboxHandoff();
1318
1353
  stopGate(2);
1319
1354
  }
1320
1355
  // ─── Step 3: Prototype ────────────────────────────────────────────────
@@ -1431,6 +1466,7 @@ function printStep3(root, feature) {
1431
1466
  console.log(chalk.red.bold(' NEVER claim "you should see X" or "the preview shows X" unless you just ran a preview command.'));
1432
1467
  console.log(chalk.red(' The preview only updates when you explicitly refresh it. Verify, then describe.'));
1433
1468
  console.log();
1469
+ checkboxHandoff();
1434
1470
  stopGate(3);
1435
1471
  }
1436
1472
  // ─── Step 4: Verify Prototype ─────────────────────────────────────────
@@ -1488,6 +1524,8 @@ function printStep4(root, feature) {
1488
1524
  console.log(chalk.dim(' A new clone should work with just: git clone → npm run setup → npm run dev'));
1489
1525
  console.log();
1490
1526
  console.log(chalk.dim('Focus on building the prototype. Scenarios and refactoring happen in later steps.'));
1527
+ console.log();
1528
+ checkboxHandoff();
1491
1529
  stopGate(4);
1492
1530
  }
1493
1531
  // ─── Step 5: Confirm ──────────────────────────────────────────────────
@@ -1551,6 +1589,8 @@ function printStep5(root, feature) {
1551
1589
  chalk.dim(' — make changes, refresh preview, re-run `codeyam editor 5`'));
1552
1590
  console.log();
1553
1591
  console.log(chalk.dim('Wait for user approval before moving on. Refactoring and scenarios happen in later steps.'));
1592
+ console.log();
1593
+ checkboxHandoff();
1554
1594
  stopGate(5, { confirm: true });
1555
1595
  }
1556
1596
  // ─── Step 6: Deconstruct ──────────────────────────────────────────────
@@ -1576,6 +1616,8 @@ function printStep6(root, feature) {
1576
1616
  console.log(chalk.yellow('This step is read and plan only. Code extraction happens in step 7.'));
1577
1617
  console.log();
1578
1618
  printExtractionPlanInstructions();
1619
+ console.log();
1620
+ checkboxHandoff();
1579
1621
  stopGate(6);
1580
1622
  }
1581
1623
  // ─── Step 7: Extract ──────────────────────────────────────────────────
@@ -1658,6 +1700,8 @@ function printStep7(root, feature) {
1658
1700
  console.log(chalk.dim('Reuse glossary functions when they fit naturally. Extract a new function when the use case diverges.'));
1659
1701
  console.log();
1660
1702
  console.log(chalk.dim('Focus on TDD for functions and extraction for components. Scenarios come in later steps.'));
1703
+ console.log();
1704
+ checkboxHandoff();
1661
1705
  stopGate(7);
1662
1706
  }
1663
1707
  // ─── Step 8: Glossary ─────────────────────────────────────────────────
@@ -3346,6 +3390,50 @@ function formatApiSubcommandResult(subcommand, data) {
3346
3390
  return null; // journal-list, show/hide-results: keep full JSON
3347
3391
  }
3348
3392
  }
3393
+ /**
3394
+ * `codeyam editor handoff '{"summary":"..."}'`
3395
+ *
3396
+ * Update the handoff summary in .codeyam/config.json for other AI providers.
3397
+ */
3398
+ function handleHandoff(jsonArg) {
3399
+ if (!jsonArg) {
3400
+ console.error(chalk.red('Error: JSON argument required.'));
3401
+ console.error(chalk.dim(' Usage: codeyam editor handoff \'{"summary":"Built the X component..."}\''));
3402
+ process.exit(1);
3403
+ }
3404
+ let summary;
3405
+ try {
3406
+ const parsed = JSON.parse(jsonArg);
3407
+ summary = parsed.summary;
3408
+ }
3409
+ catch {
3410
+ console.error(chalk.red('Error: Invalid JSON.'));
3411
+ process.exit(1);
3412
+ }
3413
+ if (!summary) {
3414
+ console.error(chalk.red('Error: "summary" field is required.'));
3415
+ process.exit(1);
3416
+ }
3417
+ const root = getProjectRoot();
3418
+ const configPath = path.join(root, '.codeyam', 'config.json');
3419
+ try {
3420
+ const config = JSON.parse(fs.readFileSync(configPath, 'utf8'));
3421
+ const state = readState(root);
3422
+ const provider = config.provider || 'claude';
3423
+ config.handoff = {
3424
+ summary,
3425
+ lastProvider: provider,
3426
+ lastStep: state?.step,
3427
+ lastUpdated: new Date().toISOString(),
3428
+ };
3429
+ fs.writeFileSync(configPath, JSON.stringify(config, null, 2), 'utf8');
3430
+ console.log(chalk.green('✓ Handoff summary updated in .codeyam/config.json'));
3431
+ }
3432
+ catch (err) {
3433
+ console.error(chalk.red(`Error: Could not update config.json: ${err.message}`));
3434
+ process.exit(1);
3435
+ }
3436
+ }
3349
3437
  /**
3350
3438
  * `codeyam editor register '{"name":"...","componentName":"...",...}'`
3351
3439
  *
@@ -5504,6 +5592,11 @@ const editorCommand = {
5504
5592
  }
5505
5593
  return;
5506
5594
  }
5595
+ // Subcommand: codeyam editor handoff '{"summary":"..."}'
5596
+ if (argv.step === 'handoff') {
5597
+ await handleHandoff(argv.json || '');
5598
+ return;
5599
+ }
5507
5600
  // Subcommand: codeyam editor register '{"name":"..."}'
5508
5601
  if (argv.step === 'register') {
5509
5602
  await handleRegister(argv.json || '');
@@ -6101,6 +6194,7 @@ const editorCommand = {
6101
6194
  process.exit(1);
6102
6195
  }
6103
6196
  }
6197
+ printHandoffContext(root);
6104
6198
  switch (step) {
6105
6199
  case 1: {
6106
6200
  const feature = argv.feature || undefined;