@codeyam/codeyam-cli 0.1.0-staging.8778565 → 0.1.0-staging.8b51541

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 (152) hide show
  1. package/analyzer-template/.build-info.json +7 -7
  2. package/analyzer-template/log.txt +3 -3
  3. package/analyzer-template/packages/database/src/lib/kysely/tables/editorScenariosTable.ts +56 -0
  4. package/analyzer-template/packages/database/src/lib/loadEntities.ts +0 -6
  5. package/analyzer-template/packages/database/src/lib/updateCommitMetadata.ts +0 -65
  6. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/editorScenariosTable.d.ts +3 -0
  7. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/editorScenariosTable.d.ts.map +1 -1
  8. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/editorScenariosTable.js +56 -0
  9. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/editorScenariosTable.js.map +1 -1
  10. package/analyzer-template/packages/github/dist/database/src/lib/loadEntities.d.ts.map +1 -1
  11. package/analyzer-template/packages/github/dist/database/src/lib/loadEntities.js +0 -6
  12. package/analyzer-template/packages/github/dist/database/src/lib/loadEntities.js.map +1 -1
  13. package/analyzer-template/packages/github/dist/database/src/lib/updateCommitMetadata.d.ts.map +1 -1
  14. package/analyzer-template/packages/github/dist/database/src/lib/updateCommitMetadata.js +0 -25
  15. package/analyzer-template/packages/github/dist/database/src/lib/updateCommitMetadata.js.map +1 -1
  16. package/codeyam-cli/src/commands/__tests__/editor.stepDispatch.test.js +45 -0
  17. package/codeyam-cli/src/commands/__tests__/editor.stepDispatch.test.js.map +1 -0
  18. package/codeyam-cli/src/commands/__tests__/init.gitignore.test.js +101 -47
  19. package/codeyam-cli/src/commands/__tests__/init.gitignore.test.js.map +1 -1
  20. package/codeyam-cli/src/commands/editor.js +799 -211
  21. package/codeyam-cli/src/commands/editor.js.map +1 -1
  22. package/codeyam-cli/src/commands/init.js +68 -34
  23. package/codeyam-cli/src/commands/init.js.map +1 -1
  24. package/codeyam-cli/src/utils/__tests__/analyzerFinalization.test.js +173 -0
  25. package/codeyam-cli/src/utils/__tests__/analyzerFinalization.test.js.map +1 -0
  26. package/codeyam-cli/src/utils/__tests__/editorApi.test.js +18 -8
  27. package/codeyam-cli/src/utils/__tests__/editorApi.test.js.map +1 -1
  28. package/codeyam-cli/src/utils/__tests__/editorAudit.test.js +353 -1
  29. package/codeyam-cli/src/utils/__tests__/editorAudit.test.js.map +1 -1
  30. package/codeyam-cli/src/utils/__tests__/editorLoaderHelpers.test.js +128 -1
  31. package/codeyam-cli/src/utils/__tests__/editorLoaderHelpers.test.js.map +1 -1
  32. package/codeyam-cli/src/utils/__tests__/editorPreview.test.js +88 -1
  33. package/codeyam-cli/src/utils/__tests__/editorPreview.test.js.map +1 -1
  34. package/codeyam-cli/src/utils/__tests__/editorProxySession.test.js +47 -1
  35. package/codeyam-cli/src/utils/__tests__/editorProxySession.test.js.map +1 -1
  36. package/codeyam-cli/src/utils/__tests__/editorScenarios.test.js +785 -1
  37. package/codeyam-cli/src/utils/__tests__/editorScenarios.test.js.map +1 -1
  38. package/codeyam-cli/src/utils/__tests__/entityChangeStatus.test.js +63 -1
  39. package/codeyam-cli/src/utils/__tests__/entityChangeStatus.test.js.map +1 -1
  40. package/codeyam-cli/src/utils/__tests__/parseRegisterArg.test.js +30 -2
  41. package/codeyam-cli/src/utils/__tests__/parseRegisterArg.test.js.map +1 -1
  42. package/codeyam-cli/src/utils/__tests__/scenarioCoverage.test.js +227 -0
  43. package/codeyam-cli/src/utils/__tests__/scenarioCoverage.test.js.map +1 -0
  44. package/codeyam-cli/src/utils/__tests__/scenariosManifest.test.js +426 -218
  45. package/codeyam-cli/src/utils/__tests__/scenariosManifest.test.js.map +1 -1
  46. package/codeyam-cli/src/utils/__tests__/setupClaudeCodeSettings.test.js +1 -0
  47. package/codeyam-cli/src/utils/__tests__/setupClaudeCodeSettings.test.js.map +1 -1
  48. package/codeyam-cli/src/utils/analyzer.js +9 -0
  49. package/codeyam-cli/src/utils/analyzer.js.map +1 -1
  50. package/codeyam-cli/src/utils/analyzerFinalization.js +100 -0
  51. package/codeyam-cli/src/utils/analyzerFinalization.js.map +1 -0
  52. package/codeyam-cli/src/utils/backgroundServer.js +2 -8
  53. package/codeyam-cli/src/utils/backgroundServer.js.map +1 -1
  54. package/codeyam-cli/src/utils/database.js +37 -2
  55. package/codeyam-cli/src/utils/database.js.map +1 -1
  56. package/codeyam-cli/src/utils/editorApi.js +11 -5
  57. package/codeyam-cli/src/utils/editorApi.js.map +1 -1
  58. package/codeyam-cli/src/utils/editorAudit.js +51 -0
  59. package/codeyam-cli/src/utils/editorAudit.js.map +1 -1
  60. package/codeyam-cli/src/utils/editorLoaderHelpers.js +32 -0
  61. package/codeyam-cli/src/utils/editorLoaderHelpers.js.map +1 -1
  62. package/codeyam-cli/src/utils/editorPreview.js +31 -0
  63. package/codeyam-cli/src/utils/editorPreview.js.map +1 -1
  64. package/codeyam-cli/src/utils/editorScenarios.js +261 -0
  65. package/codeyam-cli/src/utils/editorScenarios.js.map +1 -1
  66. package/codeyam-cli/src/utils/entityChangeStatus.js +4 -2
  67. package/codeyam-cli/src/utils/entityChangeStatus.js.map +1 -1
  68. package/codeyam-cli/src/utils/entityChangeStatus.server.js +34 -0
  69. package/codeyam-cli/src/utils/entityChangeStatus.server.js.map +1 -1
  70. package/codeyam-cli/src/utils/parseRegisterArg.js.map +1 -1
  71. package/codeyam-cli/src/utils/progress.js +2 -2
  72. package/codeyam-cli/src/utils/progress.js.map +1 -1
  73. package/codeyam-cli/src/utils/scenarioCoverage.js +75 -0
  74. package/codeyam-cli/src/utils/scenarioCoverage.js.map +1 -0
  75. package/codeyam-cli/src/utils/scenariosManifest.js +204 -75
  76. package/codeyam-cli/src/utils/scenariosManifest.js.map +1 -1
  77. package/codeyam-cli/src/utils/setupClaudeCodeSettings.js +1 -0
  78. package/codeyam-cli/src/utils/setupClaudeCodeSettings.js.map +1 -1
  79. package/codeyam-cli/src/utils/simulationGateMiddleware.js +8 -1
  80. package/codeyam-cli/src/utils/simulationGateMiddleware.js.map +1 -1
  81. package/codeyam-cli/src/utils/slugUtils.js +25 -0
  82. package/codeyam-cli/src/utils/slugUtils.js.map +1 -0
  83. package/codeyam-cli/src/utils/syncMocksMiddleware.js +2 -2
  84. package/codeyam-cli/src/utils/syncMocksMiddleware.js.map +1 -1
  85. package/codeyam-cli/src/webserver/__tests__/clientErrors.test.js +40 -0
  86. package/codeyam-cli/src/webserver/__tests__/clientErrors.test.js.map +1 -0
  87. package/codeyam-cli/src/webserver/__tests__/editorProxy.test.js +157 -0
  88. package/codeyam-cli/src/webserver/__tests__/editorProxy.test.js.map +1 -1
  89. package/codeyam-cli/src/webserver/__tests__/idleDetector.test.js +146 -0
  90. package/codeyam-cli/src/webserver/__tests__/idleDetector.test.js.map +1 -0
  91. package/codeyam-cli/src/webserver/app/lib/clientErrors.js +65 -0
  92. package/codeyam-cli/src/webserver/app/lib/clientErrors.js.map +1 -0
  93. package/codeyam-cli/src/webserver/app/lib/git.js +3 -2
  94. package/codeyam-cli/src/webserver/app/lib/git.js.map +1 -1
  95. package/codeyam-cli/src/webserver/build/client/assets/{ScenarioViewer-0DY_NKil.js → ScenarioViewer-TSD3C211.js} +1 -1
  96. package/codeyam-cli/src/webserver/build/client/assets/api.editor-scenario-coverage-l0sNRNKZ.js +1 -0
  97. package/codeyam-cli/src/webserver/build/client/assets/api.editor-session-l0sNRNKZ.js +1 -0
  98. package/codeyam-cli/src/webserver/build/client/assets/{dev.empty-Csi0_PMl.js → dev.empty-Ii3inc0_.js} +1 -1
  99. package/codeyam-cli/src/webserver/build/client/assets/editor-16o0AIFV.js +15 -0
  100. package/codeyam-cli/src/webserver/build/client/assets/editorPreview-7Uga8I59.js +41 -0
  101. package/codeyam-cli/src/webserver/build/client/assets/{entity._sha._-BF4oLwaE.js → entity._sha._-DwCV5__E.js} +1 -1
  102. package/codeyam-cli/src/webserver/build/client/assets/{entity._sha.scenarios._scenarioId.dev-C7YX6r3H.js → entity._sha.scenarios._scenarioId.dev-BwKcai0j.js} +1 -1
  103. package/codeyam-cli/src/webserver/build/client/assets/entity._sha.scenarios._scenarioId.fullscreen-CHMiAog3.js +6 -0
  104. package/codeyam-cli/src/webserver/build/client/assets/globals-CQPR0pFR.css +1 -0
  105. package/codeyam-cli/src/webserver/build/client/assets/manifest-76e7b62c.js +1 -0
  106. package/codeyam-cli/src/webserver/build/client/assets/memory-9gnxSZlb.js +101 -0
  107. package/codeyam-cli/src/webserver/build/client/assets/{root-ClvYBUSA.js → root-DBjt6o04.js} +3 -3
  108. package/codeyam-cli/src/webserver/build/client/assets/useCustomSizes-C-_hOl_g.js +1 -0
  109. package/codeyam-cli/src/webserver/build/client/sound-test.html +98 -0
  110. package/codeyam-cli/src/webserver/build/server/assets/index-DsZjKspK.js +1 -0
  111. package/codeyam-cli/src/webserver/build/server/assets/init-DdqKD2p4.js +10 -0
  112. package/codeyam-cli/src/webserver/build/server/assets/server-build-CKKeWtVK.js +444 -0
  113. package/codeyam-cli/src/webserver/build/server/index.js +1 -1
  114. package/codeyam-cli/src/webserver/build-info.json +5 -5
  115. package/codeyam-cli/src/webserver/editorProxy.js +99 -7
  116. package/codeyam-cli/src/webserver/editorProxy.js.map +1 -1
  117. package/codeyam-cli/src/webserver/idleDetector.js +73 -0
  118. package/codeyam-cli/src/webserver/idleDetector.js.map +1 -0
  119. package/codeyam-cli/src/webserver/public/sound-test.html +98 -0
  120. package/codeyam-cli/src/webserver/server.js +46 -4
  121. package/codeyam-cli/src/webserver/server.js.map +1 -1
  122. package/codeyam-cli/src/webserver/terminalServer.js +68 -29
  123. package/codeyam-cli/src/webserver/terminalServer.js.map +1 -1
  124. package/codeyam-cli/templates/chrome-extension-react/README.md +46 -0
  125. package/codeyam-cli/templates/chrome-extension-react/package.json +1 -0
  126. package/codeyam-cli/templates/codeyam-editor-claude.md +84 -5
  127. package/codeyam-cli/templates/editor-step-hook.py +14 -8
  128. package/codeyam-cli/templates/expo-react-native/README.md +41 -0
  129. package/codeyam-cli/templates/expo-react-native/package.json +1 -0
  130. package/codeyam-cli/templates/nextjs-prisma-sqlite/DATABASE.md +14 -0
  131. package/codeyam-cli/templates/nextjs-prisma-sqlite/README.md +53 -0
  132. package/codeyam-cli/templates/nextjs-prisma-sqlite/package.json +1 -0
  133. package/codeyam-cli/templates/nextjs-prisma-supabase/README.md +52 -0
  134. package/codeyam-cli/templates/nextjs-prisma-supabase/package.json +1 -0
  135. package/codeyam-cli/templates/skills/codeyam-dev-mode/SKILL.md +1 -1
  136. package/codeyam-cli/templates/skills/codeyam-editor/SKILL.md +14 -10
  137. package/package.json +1 -1
  138. package/packages/database/src/lib/kysely/tables/editorScenariosTable.js +56 -0
  139. package/packages/database/src/lib/kysely/tables/editorScenariosTable.js.map +1 -1
  140. package/packages/database/src/lib/loadEntities.js +0 -6
  141. package/packages/database/src/lib/loadEntities.js.map +1 -1
  142. package/packages/database/src/lib/updateCommitMetadata.js +0 -25
  143. package/packages/database/src/lib/updateCommitMetadata.js.map +1 -1
  144. package/codeyam-cli/src/webserver/build/client/assets/editor-DgN1LTTt.js +0 -10
  145. package/codeyam-cli/src/webserver/build/client/assets/editorPreview-BLQMSKZa.js +0 -41
  146. package/codeyam-cli/src/webserver/build/client/assets/entity._sha.scenarios._scenarioId.fullscreen-CF164ouH.js +0 -6
  147. package/codeyam-cli/src/webserver/build/client/assets/globals-BkWJ_UNc.css +0 -1
  148. package/codeyam-cli/src/webserver/build/client/assets/manifest-c26eb85b.js +0 -1
  149. package/codeyam-cli/src/webserver/build/client/assets/memory-Bl2rpw8u.js +0 -96
  150. package/codeyam-cli/src/webserver/build/client/assets/useCustomSizes-CrAK28Bc.js +0 -1
  151. package/codeyam-cli/src/webserver/build/server/assets/index-DflIr5SD.js +0 -1
  152. package/codeyam-cli/src/webserver/build/server/assets/server-build-OhKy839M.js +0 -416
@@ -2,39 +2,74 @@ import * as fs from 'fs/promises';
2
2
  import * as path from 'path';
3
3
  import * as os from 'os';
4
4
  /**
5
- * Extract the ensureGitignoreEntry function for testing
6
- * This is the same implementation as in init.ts
5
+ * Granular .codeyam ignore patterns machine-local files only.
6
+ * Shared files (config.json, editor-scenarios/, etc.) are NOT ignored
7
+ * so they can be committed and shared via git.
7
8
  */
8
- async function ensureGitignoreEntry(projectRoot, entry) {
9
+ const CODEYAM_GITIGNORE_ENTRIES = [
10
+ '.codeyam/db.sqlite3',
11
+ '.codeyam/db.sqlite3-wal',
12
+ '.codeyam/db.sqlite3-shm',
13
+ '.codeyam/secrets.json',
14
+ '.codeyam/server.json',
15
+ '.codeyam/server-state.json',
16
+ '.codeyam/queue.json',
17
+ '.codeyam/active-scenario.json',
18
+ '.codeyam/editor-step.json',
19
+ '.codeyam/editor-user-prompt.txt',
20
+ '.codeyam/editor-mode-context.md',
21
+ '.codeyam/dev-mode-context.md',
22
+ '.codeyam/logs/',
23
+ '.codeyam/llm-calls/',
24
+ '.codeyam/captures/',
25
+ '.codeyam/results/',
26
+ '.codeyam/tmp/',
27
+ '.codeyam/rules/',
28
+ '.codeyam/bin/',
29
+ ];
30
+ /**
31
+ * Extract the ensureGitignoreEntry function for testing.
32
+ * Uses granular patterns instead of blanket .codeyam.
33
+ */
34
+ async function ensureGitignoreEntry(projectRoot) {
9
35
  const gitignorePath = path.join(projectRoot, '.gitignore');
10
36
  let gitignoreContent = '';
11
- // Read existing .gitignore if it exists
12
37
  try {
13
38
  gitignoreContent = await fs.readFile(gitignorePath, 'utf8');
14
39
  }
15
40
  catch (error) {
16
41
  // File doesn't exist, will create it
17
42
  }
18
- // Check if entry already exists
19
43
  const lines = gitignoreContent.split('\n');
20
- const entryExists = lines.some((line) => line.trim() === entry || line.trim() === `/${entry}`);
21
- if (!entryExists) {
22
- // Add entry with a comment
44
+ // If there's already a blanket .codeyam ignore, replace it with granular patterns
45
+ const blanketIndex = lines.findIndex((line) => line.trim() === '.codeyam' || line.trim() === '/.codeyam');
46
+ if (blanketIndex !== -1) {
47
+ // Remove the blanket entry (and preceding comment if it's ours)
48
+ const removeStart = blanketIndex > 0 &&
49
+ lines[blanketIndex - 1].trim().startsWith('# CodeYam local files')
50
+ ? blanketIndex - 1
51
+ : blanketIndex;
52
+ lines.splice(removeStart, blanketIndex - removeStart + 1);
53
+ gitignoreContent = lines.join('\n');
54
+ }
55
+ // Check if granular patterns already exist
56
+ const hasGranularPatterns = CODEYAM_GITIGNORE_ENTRIES.some((entry) => lines.some((line) => line.trim() === entry));
57
+ if (!hasGranularPatterns) {
58
+ const block = '\n# CodeYam - local only (not shared)\n' +
59
+ CODEYAM_GITIGNORE_ENTRIES.join('\n') +
60
+ '\n';
23
61
  const newContent = gitignoreContent +
24
62
  (gitignoreContent && !gitignoreContent.endsWith('\n') ? '\n' : '') +
25
- '\n# CodeYam local files (contains secrets and local database)\n' +
26
- `.codeyam\n`;
63
+ block;
27
64
  await fs.writeFile(gitignorePath, newContent, 'utf8');
28
65
  }
29
66
  }
30
67
  describe('init command - gitignore management', () => {
31
68
  let testDir;
32
69
  beforeEach(async () => {
33
- // Create a unique temp directory for each test
34
70
  testDir = await fs.mkdtemp(path.join(os.tmpdir(), 'codeyam-test-'));
35
71
  });
36
72
  afterEach(async () => {
37
- // Clean up test directory
38
73
  try {
39
74
  await fs.rm(testDir, { recursive: true, force: true });
40
75
  }
@@ -43,62 +78,74 @@ describe('init command - gitignore management', () => {
43
78
  }
44
79
  });
45
80
  describe('ensureGitignoreEntry', () => {
46
- test('creates new .gitignore with .codeyam entry when file does not exist', async () => {
47
- await ensureGitignoreEntry(testDir, '.codeyam');
81
+ test('creates new .gitignore with granular .codeyam patterns when file does not exist', async () => {
82
+ await ensureGitignoreEntry(testDir);
48
83
  const gitignorePath = path.join(testDir, '.gitignore');
49
84
  const content = await fs.readFile(gitignorePath, 'utf8');
50
- expect(content).toContain('.codeyam');
51
- expect(content).toContain('# CodeYam local files (contains secrets and local database)');
85
+ expect(content).toContain('.codeyam/db.sqlite3');
86
+ expect(content).toContain('.codeyam/secrets.json');
87
+ expect(content).toContain('.codeyam/server.json');
88
+ expect(content).toContain('.codeyam/logs/');
89
+ expect(content).toContain('# CodeYam - local only (not shared)');
90
+ // Should NOT have blanket .codeyam
91
+ expect(content).not.toMatch(/^\.codeyam$/m);
52
92
  });
53
- test('adds .codeyam to existing .gitignore that does not have it', async () => {
93
+ test('adds granular patterns to existing .gitignore', async () => {
54
94
  const gitignorePath = path.join(testDir, '.gitignore');
55
- const existingContent = 'node_modules\n.env\n';
56
- await fs.writeFile(gitignorePath, existingContent, 'utf8');
57
- await ensureGitignoreEntry(testDir, '.codeyam');
95
+ await fs.writeFile(gitignorePath, 'node_modules\n.env\n', 'utf8');
96
+ await ensureGitignoreEntry(testDir);
58
97
  const content = await fs.readFile(gitignorePath, 'utf8');
59
98
  expect(content).toContain('node_modules');
60
99
  expect(content).toContain('.env');
61
- expect(content).toContain('.codeyam');
62
- expect(content).toContain('# CodeYam local files (contains secrets and local database)');
100
+ expect(content).toContain('.codeyam/db.sqlite3');
101
+ expect(content).toContain('.codeyam/secrets.json');
63
102
  });
64
- test('does not duplicate .codeyam entry when it already exists', async () => {
103
+ test('does not duplicate when granular patterns already exist', async () => {
65
104
  const gitignorePath = path.join(testDir, '.gitignore');
66
- const existingContent = 'node_modules\n.codeyam\n.env\n';
67
- await fs.writeFile(gitignorePath, existingContent, 'utf8');
68
- await ensureGitignoreEntry(testDir, '.codeyam');
105
+ await fs.writeFile(gitignorePath, 'node_modules\n.codeyam/db.sqlite3\n.codeyam/secrets.json\n', 'utf8');
106
+ await ensureGitignoreEntry(testDir);
69
107
  const content = await fs.readFile(gitignorePath, 'utf8');
70
- const matches = content.match(/\.codeyam/g);
71
- // Should only appear once
108
+ const matches = content.match(/\.codeyam\/db\.sqlite3/g);
72
109
  expect(matches).toHaveLength(1);
73
110
  });
74
- test('handles .codeyam with leading slash in existing .gitignore', async () => {
111
+ test('replaces blanket .codeyam with granular patterns', async () => {
75
112
  const gitignorePath = path.join(testDir, '.gitignore');
76
- const existingContent = 'node_modules\n/.codeyam\n.env\n';
77
- await fs.writeFile(gitignorePath, existingContent, 'utf8');
78
- await ensureGitignoreEntry(testDir, '.codeyam');
113
+ await fs.writeFile(gitignorePath, 'node_modules\n\n# CodeYam local files (contains secrets and local database)\n.codeyam\n', 'utf8');
114
+ await ensureGitignoreEntry(testDir);
79
115
  const content = await fs.readFile(gitignorePath, 'utf8');
80
- const matches = content.match(/\.codeyam/g);
81
- // Should not add another entry since /.codeyam already exists
82
- expect(matches).toHaveLength(1);
116
+ // Blanket entry should be removed
117
+ expect(content).not.toMatch(/^\.codeyam$/m);
118
+ // Granular patterns should be added
119
+ expect(content).toContain('.codeyam/db.sqlite3');
120
+ expect(content).toContain('.codeyam/secrets.json');
121
+ // Existing content preserved
122
+ expect(content).toContain('node_modules');
123
+ });
124
+ test('replaces blanket /.codeyam with granular patterns', async () => {
125
+ const gitignorePath = path.join(testDir, '.gitignore');
126
+ await fs.writeFile(gitignorePath, 'node_modules\n/.codeyam\n.env\n', 'utf8');
127
+ await ensureGitignoreEntry(testDir);
128
+ const content = await fs.readFile(gitignorePath, 'utf8');
129
+ expect(content).not.toMatch(/^\/\.codeyam$/m);
130
+ expect(content).toContain('.codeyam/db.sqlite3');
131
+ expect(content).toContain('.env');
83
132
  });
84
133
  test('properly handles .gitignore without trailing newline', async () => {
85
134
  const gitignorePath = path.join(testDir, '.gitignore');
86
- const existingContent = 'node_modules';
87
- await fs.writeFile(gitignorePath, existingContent, 'utf8');
88
- await ensureGitignoreEntry(testDir, '.codeyam');
135
+ await fs.writeFile(gitignorePath, 'node_modules', 'utf8');
136
+ await ensureGitignoreEntry(testDir);
89
137
  const content = await fs.readFile(gitignorePath, 'utf8');
90
138
  expect(content).toContain('node_modules');
91
- expect(content).toContain('.codeyam');
92
- // Should have proper newlines
139
+ expect(content).toContain('.codeyam/db.sqlite3');
93
140
  expect(content).toMatch(/node_modules\n/);
94
141
  });
95
142
  test('handles empty .gitignore file', async () => {
96
143
  const gitignorePath = path.join(testDir, '.gitignore');
97
144
  await fs.writeFile(gitignorePath, '', 'utf8');
98
- await ensureGitignoreEntry(testDir, '.codeyam');
145
+ await ensureGitignoreEntry(testDir);
99
146
  const content = await fs.readFile(gitignorePath, 'utf8');
100
- expect(content).toContain('.codeyam');
101
- expect(content).toContain('# CodeYam local files (contains secrets and local database)');
147
+ expect(content).toContain('.codeyam/db.sqlite3');
148
+ expect(content).toContain('# CodeYam - local only (not shared)');
102
149
  });
103
150
  test('preserves existing content formatting', async () => {
104
151
  const gitignorePath = path.join(testDir, '.gitignore');
@@ -115,17 +162,24 @@ dist
115
162
  build
116
163
  `;
117
164
  await fs.writeFile(gitignorePath, existingContent, 'utf8');
118
- await ensureGitignoreEntry(testDir, '.codeyam');
165
+ await ensureGitignoreEntry(testDir);
119
166
  const content = await fs.readFile(gitignorePath, 'utf8');
120
- // Check that existing content is preserved
121
167
  expect(content).toContain('# Dependencies');
122
168
  expect(content).toContain('node_modules');
123
169
  expect(content).toContain('# Environment');
124
170
  expect(content).toContain('.env');
125
171
  expect(content).toContain('# Build');
126
172
  expect(content).toContain('dist');
127
- // And our new entry is added
128
- expect(content).toContain('.codeyam');
173
+ expect(content).toContain('.codeyam/db.sqlite3');
174
+ });
175
+ test('config.json is NOT ignored (allows sharing via git)', async () => {
176
+ await ensureGitignoreEntry(testDir);
177
+ const gitignorePath = path.join(testDir, '.gitignore');
178
+ const content = await fs.readFile(gitignorePath, 'utf8');
179
+ // config.json should not appear in gitignore
180
+ expect(content).not.toContain('config.json');
181
+ // editor-scenarios/ should not appear in gitignore
182
+ expect(content).not.toContain('editor-scenarios/');
129
183
  });
130
184
  });
131
185
  });
@@ -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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"}