@kynetic-ai/spec 0.1.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 (278) hide show
  1. package/README.md +263 -0
  2. package/dist/acp/client.d.ts +159 -0
  3. package/dist/acp/client.d.ts.map +1 -0
  4. package/dist/acp/client.js +255 -0
  5. package/dist/acp/client.js.map +1 -0
  6. package/dist/acp/framing.d.ts +119 -0
  7. package/dist/acp/framing.d.ts.map +1 -0
  8. package/dist/acp/framing.js +302 -0
  9. package/dist/acp/framing.js.map +1 -0
  10. package/dist/acp/index.d.ts +14 -0
  11. package/dist/acp/index.d.ts.map +1 -0
  12. package/dist/acp/index.js +13 -0
  13. package/dist/acp/index.js.map +1 -0
  14. package/dist/acp/types.d.ts +89 -0
  15. package/dist/acp/types.d.ts.map +1 -0
  16. package/dist/acp/types.js +99 -0
  17. package/dist/acp/types.js.map +1 -0
  18. package/dist/agents/adapters.d.ts +55 -0
  19. package/dist/agents/adapters.d.ts.map +1 -0
  20. package/dist/agents/adapters.js +84 -0
  21. package/dist/agents/adapters.js.map +1 -0
  22. package/dist/agents/index.d.ts +8 -0
  23. package/dist/agents/index.d.ts.map +1 -0
  24. package/dist/agents/index.js +10 -0
  25. package/dist/agents/index.js.map +1 -0
  26. package/dist/agents/spawner.d.ts +53 -0
  27. package/dist/agents/spawner.d.ts.map +1 -0
  28. package/dist/agents/spawner.js +83 -0
  29. package/dist/agents/spawner.js.map +1 -0
  30. package/dist/cli/batch.d.ts +82 -0
  31. package/dist/cli/batch.d.ts.map +1 -0
  32. package/dist/cli/batch.js +162 -0
  33. package/dist/cli/batch.js.map +1 -0
  34. package/dist/cli/commands/clone-for-testing.d.ts +6 -0
  35. package/dist/cli/commands/clone-for-testing.d.ts.map +1 -0
  36. package/dist/cli/commands/clone-for-testing.js +176 -0
  37. package/dist/cli/commands/clone-for-testing.js.map +1 -0
  38. package/dist/cli/commands/derive.d.ts +6 -0
  39. package/dist/cli/commands/derive.d.ts.map +1 -0
  40. package/dist/cli/commands/derive.js +450 -0
  41. package/dist/cli/commands/derive.js.map +1 -0
  42. package/dist/cli/commands/help.d.ts +6 -0
  43. package/dist/cli/commands/help.d.ts.map +1 -0
  44. package/dist/cli/commands/help.js +196 -0
  45. package/dist/cli/commands/help.js.map +1 -0
  46. package/dist/cli/commands/inbox.d.ts +6 -0
  47. package/dist/cli/commands/inbox.d.ts.map +1 -0
  48. package/dist/cli/commands/inbox.js +235 -0
  49. package/dist/cli/commands/inbox.js.map +1 -0
  50. package/dist/cli/commands/index.d.ts +20 -0
  51. package/dist/cli/commands/index.d.ts.map +1 -0
  52. package/dist/cli/commands/index.js +21 -0
  53. package/dist/cli/commands/index.js.map +1 -0
  54. package/dist/cli/commands/init.d.ts +6 -0
  55. package/dist/cli/commands/init.d.ts.map +1 -0
  56. package/dist/cli/commands/init.js +245 -0
  57. package/dist/cli/commands/init.js.map +1 -0
  58. package/dist/cli/commands/item.d.ts +6 -0
  59. package/dist/cli/commands/item.d.ts.map +1 -0
  60. package/dist/cli/commands/item.js +1311 -0
  61. package/dist/cli/commands/item.js.map +1 -0
  62. package/dist/cli/commands/link.d.ts +6 -0
  63. package/dist/cli/commands/link.d.ts.map +1 -0
  64. package/dist/cli/commands/link.js +288 -0
  65. package/dist/cli/commands/link.js.map +1 -0
  66. package/dist/cli/commands/log.d.ts +16 -0
  67. package/dist/cli/commands/log.d.ts.map +1 -0
  68. package/dist/cli/commands/log.js +291 -0
  69. package/dist/cli/commands/log.js.map +1 -0
  70. package/dist/cli/commands/meta.d.ts +15 -0
  71. package/dist/cli/commands/meta.d.ts.map +1 -0
  72. package/dist/cli/commands/meta.js +1378 -0
  73. package/dist/cli/commands/meta.js.map +1 -0
  74. package/dist/cli/commands/module.d.ts +6 -0
  75. package/dist/cli/commands/module.d.ts.map +1 -0
  76. package/dist/cli/commands/module.js +102 -0
  77. package/dist/cli/commands/module.js.map +1 -0
  78. package/dist/cli/commands/ralph.d.ts +9 -0
  79. package/dist/cli/commands/ralph.d.ts.map +1 -0
  80. package/dist/cli/commands/ralph.js +465 -0
  81. package/dist/cli/commands/ralph.js.map +1 -0
  82. package/dist/cli/commands/search.d.ts +6 -0
  83. package/dist/cli/commands/search.d.ts.map +1 -0
  84. package/dist/cli/commands/search.js +134 -0
  85. package/dist/cli/commands/search.js.map +1 -0
  86. package/dist/cli/commands/session.d.ts +164 -0
  87. package/dist/cli/commands/session.d.ts.map +1 -0
  88. package/dist/cli/commands/session.js +745 -0
  89. package/dist/cli/commands/session.js.map +1 -0
  90. package/dist/cli/commands/setup.d.ts +26 -0
  91. package/dist/cli/commands/setup.d.ts.map +1 -0
  92. package/dist/cli/commands/setup.js +586 -0
  93. package/dist/cli/commands/setup.js.map +1 -0
  94. package/dist/cli/commands/shadow.d.ts +6 -0
  95. package/dist/cli/commands/shadow.d.ts.map +1 -0
  96. package/dist/cli/commands/shadow.js +299 -0
  97. package/dist/cli/commands/shadow.js.map +1 -0
  98. package/dist/cli/commands/task.d.ts +6 -0
  99. package/dist/cli/commands/task.d.ts.map +1 -0
  100. package/dist/cli/commands/task.js +1514 -0
  101. package/dist/cli/commands/task.js.map +1 -0
  102. package/dist/cli/commands/tasks.d.ts +6 -0
  103. package/dist/cli/commands/tasks.d.ts.map +1 -0
  104. package/dist/cli/commands/tasks.js +347 -0
  105. package/dist/cli/commands/tasks.js.map +1 -0
  106. package/dist/cli/commands/trait.d.ts +10 -0
  107. package/dist/cli/commands/trait.d.ts.map +1 -0
  108. package/dist/cli/commands/trait.js +295 -0
  109. package/dist/cli/commands/trait.js.map +1 -0
  110. package/dist/cli/commands/validate.d.ts +6 -0
  111. package/dist/cli/commands/validate.d.ts.map +1 -0
  112. package/dist/cli/commands/validate.js +626 -0
  113. package/dist/cli/commands/validate.js.map +1 -0
  114. package/dist/cli/exit-codes.d.ts +62 -0
  115. package/dist/cli/exit-codes.d.ts.map +1 -0
  116. package/dist/cli/exit-codes.js +65 -0
  117. package/dist/cli/exit-codes.js.map +1 -0
  118. package/dist/cli/help/content.d.ts +35 -0
  119. package/dist/cli/help/content.d.ts.map +1 -0
  120. package/dist/cli/help/content.js +312 -0
  121. package/dist/cli/help/content.js.map +1 -0
  122. package/dist/cli/index.d.ts +5 -0
  123. package/dist/cli/index.d.ts.map +1 -0
  124. package/dist/cli/index.js +85 -0
  125. package/dist/cli/index.js.map +1 -0
  126. package/dist/cli/introspection.d.ts +87 -0
  127. package/dist/cli/introspection.d.ts.map +1 -0
  128. package/dist/cli/introspection.js +127 -0
  129. package/dist/cli/introspection.js.map +1 -0
  130. package/dist/cli/output.d.ts +56 -0
  131. package/dist/cli/output.d.ts.map +1 -0
  132. package/dist/cli/output.js +467 -0
  133. package/dist/cli/output.js.map +1 -0
  134. package/dist/cli/suggest.d.ts +16 -0
  135. package/dist/cli/suggest.d.ts.map +1 -0
  136. package/dist/cli/suggest.js +72 -0
  137. package/dist/cli/suggest.js.map +1 -0
  138. package/dist/index.d.ts +3 -0
  139. package/dist/index.d.ts.map +1 -0
  140. package/dist/index.js +5 -0
  141. package/dist/index.js.map +1 -0
  142. package/dist/parser/alignment.d.ts +113 -0
  143. package/dist/parser/alignment.d.ts.map +1 -0
  144. package/dist/parser/alignment.js +261 -0
  145. package/dist/parser/alignment.js.map +1 -0
  146. package/dist/parser/assess.d.ts +81 -0
  147. package/dist/parser/assess.d.ts.map +1 -0
  148. package/dist/parser/assess.js +197 -0
  149. package/dist/parser/assess.js.map +1 -0
  150. package/dist/parser/convention-validation.d.ts +48 -0
  151. package/dist/parser/convention-validation.d.ts.map +1 -0
  152. package/dist/parser/convention-validation.js +167 -0
  153. package/dist/parser/convention-validation.js.map +1 -0
  154. package/dist/parser/fix.d.ts +38 -0
  155. package/dist/parser/fix.d.ts.map +1 -0
  156. package/dist/parser/fix.js +185 -0
  157. package/dist/parser/fix.js.map +1 -0
  158. package/dist/parser/index.d.ts +12 -0
  159. package/dist/parser/index.d.ts.map +1 -0
  160. package/dist/parser/index.js +13 -0
  161. package/dist/parser/index.js.map +1 -0
  162. package/dist/parser/items.d.ts +138 -0
  163. package/dist/parser/items.d.ts.map +1 -0
  164. package/dist/parser/items.js +321 -0
  165. package/dist/parser/items.js.map +1 -0
  166. package/dist/parser/meta.d.ts +120 -0
  167. package/dist/parser/meta.d.ts.map +1 -0
  168. package/dist/parser/meta.js +441 -0
  169. package/dist/parser/meta.js.map +1 -0
  170. package/dist/parser/refs.d.ts +185 -0
  171. package/dist/parser/refs.d.ts.map +1 -0
  172. package/dist/parser/refs.js +404 -0
  173. package/dist/parser/refs.js.map +1 -0
  174. package/dist/parser/shadow.d.ts +253 -0
  175. package/dist/parser/shadow.d.ts.map +1 -0
  176. package/dist/parser/shadow.js +1053 -0
  177. package/dist/parser/shadow.js.map +1 -0
  178. package/dist/parser/traits.d.ts +72 -0
  179. package/dist/parser/traits.d.ts.map +1 -0
  180. package/dist/parser/traits.js +120 -0
  181. package/dist/parser/traits.js.map +1 -0
  182. package/dist/parser/validate.d.ts +89 -0
  183. package/dist/parser/validate.d.ts.map +1 -0
  184. package/dist/parser/validate.js +817 -0
  185. package/dist/parser/validate.js.map +1 -0
  186. package/dist/parser/yaml.d.ts +326 -0
  187. package/dist/parser/yaml.d.ts.map +1 -0
  188. package/dist/parser/yaml.js +1383 -0
  189. package/dist/parser/yaml.js.map +1 -0
  190. package/dist/ralph/cli-renderer.d.ts +20 -0
  191. package/dist/ralph/cli-renderer.d.ts.map +1 -0
  192. package/dist/ralph/cli-renderer.js +179 -0
  193. package/dist/ralph/cli-renderer.js.map +1 -0
  194. package/dist/ralph/events.d.ts +65 -0
  195. package/dist/ralph/events.d.ts.map +1 -0
  196. package/dist/ralph/events.js +397 -0
  197. package/dist/ralph/events.js.map +1 -0
  198. package/dist/ralph/index.d.ts +8 -0
  199. package/dist/ralph/index.d.ts.map +1 -0
  200. package/dist/ralph/index.js +10 -0
  201. package/dist/ralph/index.js.map +1 -0
  202. package/dist/schema/common.d.ts +46 -0
  203. package/dist/schema/common.d.ts.map +1 -0
  204. package/dist/schema/common.js +71 -0
  205. package/dist/schema/common.js.map +1 -0
  206. package/dist/schema/inbox.d.ts +90 -0
  207. package/dist/schema/inbox.d.ts.map +1 -0
  208. package/dist/schema/inbox.js +30 -0
  209. package/dist/schema/inbox.js.map +1 -0
  210. package/dist/schema/index.d.ts +6 -0
  211. package/dist/schema/index.d.ts.map +1 -0
  212. package/dist/schema/index.js +7 -0
  213. package/dist/schema/index.js.map +1 -0
  214. package/dist/schema/meta.d.ts +762 -0
  215. package/dist/schema/meta.d.ts.map +1 -0
  216. package/dist/schema/meta.js +144 -0
  217. package/dist/schema/meta.js.map +1 -0
  218. package/dist/schema/spec.d.ts +912 -0
  219. package/dist/schema/spec.d.ts.map +1 -0
  220. package/dist/schema/spec.js +104 -0
  221. package/dist/schema/spec.js.map +1 -0
  222. package/dist/schema/task.d.ts +664 -0
  223. package/dist/schema/task.d.ts.map +1 -0
  224. package/dist/schema/task.js +130 -0
  225. package/dist/schema/task.js.map +1 -0
  226. package/dist/sessions/index.d.ts +11 -0
  227. package/dist/sessions/index.d.ts.map +1 -0
  228. package/dist/sessions/index.js +13 -0
  229. package/dist/sessions/index.js.map +1 -0
  230. package/dist/sessions/store.d.ts +144 -0
  231. package/dist/sessions/store.d.ts.map +1 -0
  232. package/dist/sessions/store.js +325 -0
  233. package/dist/sessions/store.js.map +1 -0
  234. package/dist/sessions/types.d.ts +157 -0
  235. package/dist/sessions/types.d.ts.map +1 -0
  236. package/dist/sessions/types.js +90 -0
  237. package/dist/sessions/types.js.map +1 -0
  238. package/dist/strings/errors.d.ts +420 -0
  239. package/dist/strings/errors.d.ts.map +1 -0
  240. package/dist/strings/errors.js +282 -0
  241. package/dist/strings/errors.js.map +1 -0
  242. package/dist/strings/guidance.d.ts +65 -0
  243. package/dist/strings/guidance.d.ts.map +1 -0
  244. package/dist/strings/guidance.js +66 -0
  245. package/dist/strings/guidance.js.map +1 -0
  246. package/dist/strings/index.d.ts +12 -0
  247. package/dist/strings/index.d.ts.map +1 -0
  248. package/dist/strings/index.js +12 -0
  249. package/dist/strings/index.js.map +1 -0
  250. package/dist/strings/labels.d.ts +74 -0
  251. package/dist/strings/labels.d.ts.map +1 -0
  252. package/dist/strings/labels.js +75 -0
  253. package/dist/strings/labels.js.map +1 -0
  254. package/dist/strings/validation.d.ts +126 -0
  255. package/dist/strings/validation.d.ts.map +1 -0
  256. package/dist/strings/validation.js +135 -0
  257. package/dist/strings/validation.js.map +1 -0
  258. package/dist/utils/commit.d.ts +23 -0
  259. package/dist/utils/commit.d.ts.map +1 -0
  260. package/dist/utils/commit.js +67 -0
  261. package/dist/utils/commit.js.map +1 -0
  262. package/dist/utils/git.d.ts +57 -0
  263. package/dist/utils/git.d.ts.map +1 -0
  264. package/dist/utils/git.js +192 -0
  265. package/dist/utils/git.js.map +1 -0
  266. package/dist/utils/grep.d.ts +28 -0
  267. package/dist/utils/grep.d.ts.map +1 -0
  268. package/dist/utils/grep.js +86 -0
  269. package/dist/utils/grep.js.map +1 -0
  270. package/dist/utils/index.d.ts +8 -0
  271. package/dist/utils/index.d.ts.map +1 -0
  272. package/dist/utils/index.js +6 -0
  273. package/dist/utils/index.js.map +1 -0
  274. package/dist/utils/time.d.ts +18 -0
  275. package/dist/utils/time.d.ts.map +1 -0
  276. package/dist/utils/time.js +61 -0
  277. package/dist/utils/time.js.map +1 -0
  278. package/package.json +62 -0
@@ -0,0 +1,586 @@
1
+ import * as fs from 'node:fs/promises';
2
+ import * as path from 'node:path';
3
+ import * as os from 'node:os';
4
+ import * as readline from 'node:readline/promises';
5
+ import { success, error, warn } from '../output.js';
6
+ import { errors } from '../../strings/index.js';
7
+ import { getShadowStatus, repairShadow, getGitRoot, SHADOW_BRANCH_NAME, } from '../../parser/shadow.js';
8
+ import { EXIT_CODES } from '../exit-codes.js';
9
+ /**
10
+ * Detect which agent environment we're running in.
11
+ * Returns the detected agent type and confidence level.
12
+ *
13
+ * Detection priority matters - more specific markers checked first.
14
+ */
15
+ export function detectAgent() {
16
+ // Claude Code: Multiple possible markers
17
+ // CLAUDECODE=1 is set in CLI sessions
18
+ // CLAUDE_CODE_ENTRYPOINT indicates entry point (cli, etc.)
19
+ // CLAUDE_PROJECT_DIR is set in some contexts
20
+ if (process.env.CLAUDECODE === '1' || process.env.CLAUDE_CODE_ENTRYPOINT || process.env.CLAUDE_PROJECT_DIR) {
21
+ return {
22
+ type: 'claude-code',
23
+ confidence: 'high',
24
+ configPath: path.join(os.homedir(), '.claude', 'settings.json'),
25
+ envVars: {
26
+ ...(process.env.CLAUDECODE && { CLAUDECODE: process.env.CLAUDECODE }),
27
+ ...(process.env.CLAUDE_CODE_ENTRYPOINT && { CLAUDE_CODE_ENTRYPOINT: process.env.CLAUDE_CODE_ENTRYPOINT }),
28
+ ...(process.env.CLAUDE_PROJECT_DIR && { CLAUDE_PROJECT_DIR: process.env.CLAUDE_PROJECT_DIR }),
29
+ },
30
+ };
31
+ }
32
+ // Cline: CLINE_ACTIVE is set when running in Cline terminal
33
+ if (process.env.CLINE_ACTIVE) {
34
+ return {
35
+ type: 'cline',
36
+ confidence: 'high',
37
+ // Cline uses VS Code settings, but env vars should be in shell profile
38
+ configPath: undefined,
39
+ envVars: { CLINE_ACTIVE: process.env.CLINE_ACTIVE },
40
+ };
41
+ }
42
+ // GitHub Copilot CLI: Check for copilot-specific markers
43
+ if (process.env.COPILOT_MODEL || process.env.GH_TOKEN) {
44
+ return {
45
+ type: 'copilot-cli',
46
+ confidence: 'medium',
47
+ configPath: path.join(os.homedir(), '.copilot', 'config.json'),
48
+ };
49
+ }
50
+ // Aider: Check for AIDER_* env vars
51
+ if (process.env.AIDER_MODEL || process.env.AIDER_DARK_MODE !== undefined) {
52
+ return {
53
+ type: 'aider',
54
+ confidence: 'high',
55
+ configPath: path.join(os.homedir(), '.aider.conf.yml'),
56
+ };
57
+ }
58
+ // OpenCode: Check for OPENCODE_* env vars
59
+ if (process.env.OPENCODE_CONFIG_DIR || process.env.OPENCODE_CONFIG) {
60
+ return {
61
+ type: 'opencode',
62
+ confidence: 'high',
63
+ configPath: process.env.OPENCODE_CONFIG || path.join(os.homedir(), '.config', 'opencode', 'opencode.json'),
64
+ };
65
+ }
66
+ // Gemini CLI: GEMINI_CLI=1 is set when running in Gemini CLI
67
+ if (process.env.GEMINI_CLI === '1') {
68
+ return {
69
+ type: 'gemini-cli',
70
+ confidence: 'high',
71
+ configPath: path.join(os.homedir(), '.gemini', 'settings.json'),
72
+ envVars: { GEMINI_CLI: '1' },
73
+ };
74
+ }
75
+ // Codex CLI: CODEX_SANDBOX is set when running in sandbox
76
+ if (process.env.CODEX_SANDBOX) {
77
+ return {
78
+ type: 'codex-cli',
79
+ confidence: 'high',
80
+ configPath: path.join(os.homedir(), '.codex', 'config.toml'),
81
+ envVars: { CODEX_SANDBOX: process.env.CODEX_SANDBOX },
82
+ };
83
+ }
84
+ // Amp (Sourcegraph): Check for AMP_API_KEY or AMP_TOOLBOX
85
+ if (process.env.AMP_API_KEY || process.env.AMP_TOOLBOX) {
86
+ return {
87
+ type: 'amp',
88
+ confidence: 'medium',
89
+ configPath: path.join(os.homedir(), '.config', 'amp', 'settings.json'),
90
+ };
91
+ }
92
+ return {
93
+ type: 'unknown',
94
+ confidence: 'low',
95
+ };
96
+ }
97
+ /**
98
+ * Install KSPEC_AUTHOR config for Claude Code (global settings)
99
+ */
100
+ async function installClaudeCodeConfig(author) {
101
+ const configPath = path.join(os.homedir(), '.claude', 'settings.json');
102
+ const configDir = path.dirname(configPath);
103
+ try {
104
+ // Ensure directory exists
105
+ await fs.mkdir(configDir, { recursive: true });
106
+ // Read existing config or start fresh
107
+ let config = {};
108
+ try {
109
+ const existing = await fs.readFile(configPath, 'utf-8');
110
+ config = JSON.parse(existing);
111
+ }
112
+ catch {
113
+ // File doesn't exist or invalid JSON, start fresh
114
+ }
115
+ // Merge env settings
116
+ const env = config.env || {};
117
+ env.KSPEC_AUTHOR = author;
118
+ config.env = env;
119
+ // Write back
120
+ await fs.writeFile(configPath, JSON.stringify(config, null, 2) + '\n', 'utf-8');
121
+ return true;
122
+ }
123
+ catch (err) {
124
+ return false;
125
+ }
126
+ }
127
+ /**
128
+ * Install hooks to project-level Claude Code settings (.claude/settings.json)
129
+ */
130
+ async function installClaudeCodeHooks(projectDir) {
131
+ const configPath = path.join(projectDir, '.claude', 'settings.json');
132
+ const configDir = path.dirname(configPath);
133
+ const result = { stop: false, promptCheck: false };
134
+ try {
135
+ // Ensure directory exists
136
+ await fs.mkdir(configDir, { recursive: true });
137
+ // Read existing config or start fresh
138
+ let config = {};
139
+ try {
140
+ const existing = await fs.readFile(configPath, 'utf-8');
141
+ config = JSON.parse(existing);
142
+ }
143
+ catch {
144
+ // File doesn't exist or invalid JSON, start fresh
145
+ }
146
+ // Get or create hooks object
147
+ const hooks = config.hooks || {};
148
+ // Install UserPromptSubmit hook (spec-first reminder)
149
+ const promptCheckCommand = 'npx kspec session prompt-check';
150
+ const existingPromptHooks = hooks.UserPromptSubmit;
151
+ const promptAlreadyInstalled = existingPromptHooks?.some((entry) => entry.hooks?.some((hook) => hook.command?.includes('session prompt-check')));
152
+ if (!promptAlreadyInstalled) {
153
+ hooks.UserPromptSubmit = [
154
+ ...(existingPromptHooks || []),
155
+ {
156
+ hooks: [
157
+ {
158
+ type: 'command',
159
+ command: promptCheckCommand,
160
+ },
161
+ ],
162
+ },
163
+ ];
164
+ result.promptCheck = true;
165
+ }
166
+ else {
167
+ result.promptCheck = true; // Already configured
168
+ }
169
+ // Install Stop hook (checkpoint)
170
+ const stopHookCommand = 'npx kspec session checkpoint --json';
171
+ const existingStopHooks = hooks.Stop;
172
+ const stopAlreadyInstalled = existingStopHooks?.some((entry) => entry.hooks?.some((hook) => hook.command?.includes('session checkpoint')));
173
+ if (!stopAlreadyInstalled) {
174
+ hooks.Stop = [
175
+ ...(existingStopHooks || []),
176
+ {
177
+ matcher: '',
178
+ hooks: [
179
+ {
180
+ type: 'command',
181
+ command: stopHookCommand,
182
+ },
183
+ ],
184
+ },
185
+ ];
186
+ result.stop = true;
187
+ }
188
+ else {
189
+ result.stop = true; // Already configured
190
+ }
191
+ config.hooks = hooks;
192
+ // Write back
193
+ await fs.writeFile(configPath, JSON.stringify(config, null, 2) + '\n', 'utf-8');
194
+ return result;
195
+ }
196
+ catch {
197
+ return result;
198
+ }
199
+ }
200
+ /**
201
+ * Install stop hook to project-level Claude Code settings (.claude/settings.json)
202
+ * @deprecated Use installClaudeCodeHooks instead
203
+ */
204
+ async function installClaudeCodeStopHook(projectDir) {
205
+ const configPath = path.join(projectDir, '.claude', 'settings.json');
206
+ const configDir = path.dirname(configPath);
207
+ try {
208
+ // Ensure directory exists
209
+ await fs.mkdir(configDir, { recursive: true });
210
+ // Read existing config or start fresh
211
+ let config = {};
212
+ try {
213
+ const existing = await fs.readFile(configPath, 'utf-8');
214
+ config = JSON.parse(existing);
215
+ }
216
+ catch {
217
+ // File doesn't exist or invalid JSON, start fresh
218
+ }
219
+ // Build the stop hook command
220
+ const stopHookCommand = 'npx kspec session checkpoint --json';
221
+ // Get or create hooks object
222
+ const hooks = config.hooks || {};
223
+ // Check if Stop hook already exists with our command
224
+ const existingStopHooks = hooks.Stop;
225
+ const alreadyInstalled = existingStopHooks?.some((entry) => entry.hooks?.some((hook) => hook.command?.includes('session checkpoint')));
226
+ if (alreadyInstalled) {
227
+ return true; // Already configured
228
+ }
229
+ // Add our stop hook using Claude Code hooks format
230
+ // Note: matcher field is required even if empty string
231
+ hooks.Stop = [
232
+ ...(existingStopHooks || []),
233
+ {
234
+ matcher: '',
235
+ hooks: [
236
+ {
237
+ type: 'command',
238
+ command: stopHookCommand,
239
+ },
240
+ ],
241
+ },
242
+ ];
243
+ config.hooks = hooks;
244
+ // Write back
245
+ await fs.writeFile(configPath, JSON.stringify(config, null, 2) + '\n', 'utf-8');
246
+ return true;
247
+ }
248
+ catch {
249
+ return false;
250
+ }
251
+ }
252
+ /**
253
+ * Install KSPEC_AUTHOR config for Aider (.aider.conf.yml)
254
+ * Aider uses `set-env:` for environment variables in list format
255
+ */
256
+ async function installAiderConfig(author) {
257
+ const configPath = path.join(os.homedir(), '.aider.conf.yml');
258
+ try {
259
+ let content = '';
260
+ try {
261
+ content = await fs.readFile(configPath, 'utf-8');
262
+ }
263
+ catch {
264
+ // File doesn't exist, start fresh
265
+ }
266
+ // Check if KSPEC_AUTHOR is already set
267
+ if (content.includes('KSPEC_AUTHOR')) {
268
+ // Replace existing value (handles both old and new format)
269
+ content = content.replace(/^(\s*-?\s*KSPEC_AUTHOR\s*[=:]\s*).*$/m, ` - KSPEC_AUTHOR=${author}`);
270
+ }
271
+ else {
272
+ // Add to set-env section or create it
273
+ if (content.includes('set-env:')) {
274
+ // Append to existing set-env section
275
+ content = content.replace(/(set-env:\s*\n)/m, `$1 - KSPEC_AUTHOR=${author}\n`);
276
+ }
277
+ else {
278
+ // Add new set-env section
279
+ content += `\n# kspec author for note attribution\nset-env:\n - KSPEC_AUTHOR=${author}\n`;
280
+ }
281
+ }
282
+ await fs.writeFile(configPath, content, 'utf-8');
283
+ return true;
284
+ }
285
+ catch {
286
+ return false;
287
+ }
288
+ }
289
+ /**
290
+ * Install KSPEC_AUTHOR for generic JSON config files
291
+ */
292
+ async function installGenericJsonConfig(configPath, author) {
293
+ try {
294
+ const configDir = path.dirname(configPath);
295
+ await fs.mkdir(configDir, { recursive: true });
296
+ let config = {};
297
+ try {
298
+ const existing = await fs.readFile(configPath, 'utf-8');
299
+ config = JSON.parse(existing);
300
+ }
301
+ catch {
302
+ // Start fresh
303
+ }
304
+ const env = config.env || {};
305
+ env.KSPEC_AUTHOR = author;
306
+ config.env = env;
307
+ await fs.writeFile(configPath, JSON.stringify(config, null, 2) + '\n', 'utf-8');
308
+ return true;
309
+ }
310
+ catch {
311
+ return false;
312
+ }
313
+ }
314
+ /**
315
+ * Get default author value for an agent type
316
+ */
317
+ function getDefaultAuthor(agentType) {
318
+ switch (agentType) {
319
+ case 'claude-code':
320
+ return '@claude';
321
+ case 'cline':
322
+ return '@cline';
323
+ case 'roo-code':
324
+ return '@roo';
325
+ case 'copilot-cli':
326
+ return '@copilot';
327
+ case 'gemini-cli':
328
+ return '@gemini';
329
+ case 'codex-cli':
330
+ return '@codex';
331
+ case 'aider':
332
+ return '@aider';
333
+ case 'opencode':
334
+ return '@opencode';
335
+ case 'amp':
336
+ return '@amp';
337
+ default:
338
+ return '@agent';
339
+ }
340
+ }
341
+ /**
342
+ * Prompt user for input with Y/N answer
343
+ */
344
+ async function promptYesNo(question) {
345
+ const rl = readline.createInterface({
346
+ input: process.stdin,
347
+ output: process.stdout,
348
+ });
349
+ try {
350
+ const answer = await rl.question(`${question} `);
351
+ return answer.toLowerCase() === 'y';
352
+ }
353
+ finally {
354
+ rl.close();
355
+ }
356
+ }
357
+ /**
358
+ * Ensure .kspec worktree exists if kspec-meta branch is present.
359
+ * AC: detect-existing-repo, auto-worktree-flag, worktree-already-exists
360
+ *
361
+ * @param autoWorktree If true, automatically create worktree without prompting
362
+ * @returns true if worktree is ready to use
363
+ */
364
+ async function ensureWorktree(autoWorktree) {
365
+ const projectRoot = getGitRoot(process.cwd());
366
+ if (!projectRoot) {
367
+ // Not in a git repo, skip worktree check
368
+ return true;
369
+ }
370
+ const status = await getShadowStatus(projectRoot);
371
+ // AC: worktree-already-exists - if already valid, skip
372
+ if (status.healthy) {
373
+ return true;
374
+ }
375
+ // AC: detect-existing-repo - branch exists but worktree doesn't
376
+ if (status.branchExists && !status.worktreeExists) {
377
+ // AC: auto-worktree-flag - auto-create if flag set
378
+ if (autoWorktree) {
379
+ console.log(`Detected ${SHADOW_BRANCH_NAME} branch without .kspec worktree. Creating...`);
380
+ const result = await repairShadow(projectRoot);
381
+ if (result.success) {
382
+ success('Created .kspec worktree');
383
+ return true;
384
+ }
385
+ else {
386
+ error(`Failed to create worktree: ${result.error}`);
387
+ return false;
388
+ }
389
+ }
390
+ // AC: detect-existing-repo - prompt user
391
+ const shouldCreate = await promptYesNo(`${SHADOW_BRANCH_NAME} branch exists but .kspec worktree is missing. Create it? (y/N)`);
392
+ if (shouldCreate) {
393
+ console.log('Creating .kspec worktree...');
394
+ const result = await repairShadow(projectRoot);
395
+ if (result.success) {
396
+ success('Created .kspec worktree');
397
+ return true;
398
+ }
399
+ else {
400
+ error(`Failed to create worktree: ${result.error}`);
401
+ return false;
402
+ }
403
+ }
404
+ else {
405
+ warn('Skipping worktree creation');
406
+ return false;
407
+ }
408
+ }
409
+ // No kspec-meta branch, or already healthy
410
+ return true;
411
+ }
412
+ /**
413
+ * Print manual setup instructions
414
+ */
415
+ function printManualInstructions(agentType) {
416
+ const author = getDefaultAuthor(agentType);
417
+ console.log('\nManual setup instructions:\n');
418
+ switch (agentType) {
419
+ case 'claude-code':
420
+ console.log('Add to ~/.claude/settings.json:');
421
+ console.log('```json');
422
+ console.log(JSON.stringify({ env: { KSPEC_AUTHOR: author } }, null, 2));
423
+ console.log('```');
424
+ break;
425
+ case 'cline':
426
+ case 'roo-code':
427
+ console.log('Add to your shell profile (~/.bashrc, ~/.zshrc):');
428
+ console.log('```bash');
429
+ console.log(`export KSPEC_AUTHOR="${author}"`);
430
+ console.log('```');
431
+ console.log('\nThis will be inherited by terminals spawned by the VS Code extension.');
432
+ break;
433
+ case 'copilot-cli':
434
+ console.log('Add to ~/.copilot/config.json:');
435
+ console.log('```json');
436
+ console.log(JSON.stringify({ env: { KSPEC_AUTHOR: author } }, null, 2));
437
+ console.log('```');
438
+ break;
439
+ case 'aider':
440
+ console.log('Add to ~/.aider.conf.yml:');
441
+ console.log('```yaml');
442
+ console.log('set-env:');
443
+ console.log(` - KSPEC_AUTHOR=${author}`);
444
+ console.log('```');
445
+ break;
446
+ case 'codex-cli':
447
+ console.log('Add to ~/.codex/config.toml:');
448
+ console.log('```toml');
449
+ console.log('[shell_environment_policy]');
450
+ console.log(`set = { KSPEC_AUTHOR = "${author}" }`);
451
+ console.log('```');
452
+ break;
453
+ case 'opencode':
454
+ console.log('Add to ~/.config/opencode/opencode.json:');
455
+ console.log('```json');
456
+ console.log(JSON.stringify({ env: { KSPEC_AUTHOR: author } }, null, 2));
457
+ console.log('```');
458
+ break;
459
+ case 'amp':
460
+ console.log('Add to ~/.config/amp/settings.json:');
461
+ console.log('```json');
462
+ console.log(JSON.stringify({ env: { KSPEC_AUTHOR: author } }, null, 2));
463
+ console.log('```');
464
+ break;
465
+ default:
466
+ console.log('Set the KSPEC_AUTHOR environment variable:');
467
+ console.log('```bash');
468
+ console.log(`export KSPEC_AUTHOR="${author}"`);
469
+ console.log('```');
470
+ console.log('\nOr add to your shell profile (~/.bashrc, ~/.zshrc, etc.)');
471
+ }
472
+ }
473
+ /**
474
+ * Register the 'setup' command
475
+ */
476
+ export function registerSetupCommand(program) {
477
+ program
478
+ .command('setup')
479
+ .description('Configure agent environment for kspec')
480
+ .option('--dry-run', 'Show what would be done without making changes')
481
+ .option('--author <author>', 'Custom author string (default: auto-detected based on agent)')
482
+ .option('--no-hooks', 'Skip installing Claude Code stop hook')
483
+ .option('--force', 'Overwrite existing configuration')
484
+ .option('--auto-worktree', 'Automatically create .kspec worktree if kspec-meta branch exists')
485
+ .action(async (options) => {
486
+ try {
487
+ // AC: detect-existing-repo, auto-worktree-flag, worktree-already-exists
488
+ const worktreeReady = await ensureWorktree(options.autoWorktree || false);
489
+ if (!worktreeReady) {
490
+ // User declined worktree creation or it failed
491
+ process.exit(EXIT_CODES.ERROR);
492
+ }
493
+ const detected = detectAgent();
494
+ const projectDir = process.cwd();
495
+ console.log(`Detected agent: ${detected.type} (confidence: ${detected.confidence})`);
496
+ if (detected.type === 'unknown') {
497
+ warn('Could not auto-detect agent environment');
498
+ printManualInstructions('unknown');
499
+ return;
500
+ }
501
+ const author = options.author || getDefaultAuthor(detected.type);
502
+ const installHooks = options.hooks !== false && detected.type === 'claude-code';
503
+ if (options.dryRun) {
504
+ console.log(`\nWould configure:`);
505
+ console.log(` Agent: ${detected.type}`);
506
+ console.log(` Author: ${author}`);
507
+ if (detected.configPath) {
508
+ console.log(` Global config: ${detected.configPath}`);
509
+ }
510
+ if (installHooks) {
511
+ console.log(` Project config: ${path.join(projectDir, '.claude', 'settings.json')}`);
512
+ console.log(` Hooks: UserPromptSubmit (prompt-check), Stop (checkpoint)`);
513
+ }
514
+ return;
515
+ }
516
+ // Check if already configured
517
+ if (!options.force && process.env.KSPEC_AUTHOR) {
518
+ warn(`KSPEC_AUTHOR is already set to "${process.env.KSPEC_AUTHOR}"`);
519
+ console.log('Use --force to overwrite');
520
+ return;
521
+ }
522
+ // Install config based on agent type
523
+ let installed = false;
524
+ let hooksInstalled = false;
525
+ let hooksResult = null;
526
+ switch (detected.type) {
527
+ case 'claude-code':
528
+ installed = await installClaudeCodeConfig(author);
529
+ if (installHooks) {
530
+ hooksResult = await installClaudeCodeHooks(projectDir);
531
+ hooksInstalled = hooksResult.stop || hooksResult.promptCheck;
532
+ }
533
+ break;
534
+ case 'aider':
535
+ installed = await installAiderConfig(author);
536
+ break;
537
+ case 'cline':
538
+ case 'roo-code':
539
+ // These VS Code extensions use shell env vars, not config files
540
+ // Can't auto-install, must print instructions
541
+ printManualInstructions(detected.type);
542
+ return;
543
+ case 'copilot-cli':
544
+ case 'gemini-cli':
545
+ case 'opencode':
546
+ case 'amp':
547
+ if (detected.configPath) {
548
+ installed = await installGenericJsonConfig(detected.configPath, author);
549
+ }
550
+ break;
551
+ case 'codex-cli':
552
+ // Codex uses TOML config, would need special handling
553
+ // For now, print manual instructions
554
+ printManualInstructions(detected.type);
555
+ return;
556
+ }
557
+ if (installed) {
558
+ success(`Configured ${detected.type} with KSPEC_AUTHOR="${author}"`, {
559
+ agent: detected.type,
560
+ author,
561
+ configPath: detected.configPath,
562
+ });
563
+ if (hooksInstalled && hooksResult) {
564
+ const installedHooks = [];
565
+ if (hooksResult.promptCheck)
566
+ installedHooks.push('UserPromptSubmit (prompt-check)');
567
+ if (hooksResult.stop)
568
+ installedHooks.push('Stop (checkpoint)');
569
+ success(`Installed hooks to .claude/settings.json`, {
570
+ hooks: installedHooks,
571
+ });
572
+ }
573
+ console.log('\nRestart your agent session for changes to take effect.');
574
+ }
575
+ else {
576
+ error(errors.failures.installConfig(detected.type));
577
+ printManualInstructions(detected.type);
578
+ }
579
+ }
580
+ catch (err) {
581
+ error(errors.failures.setupFailed, err);
582
+ process.exit(EXIT_CODES.ERROR);
583
+ }
584
+ });
585
+ }
586
+ //# sourceMappingURL=setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../../src/cli/commands/setup.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { Command } from 'commander';
2
+ /**
3
+ * Register shadow commands
4
+ */
5
+ export declare function registerShadowCommands(program: Command): void;
6
+ //# sourceMappingURL=shadow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shadow.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/shadow.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA+DpC;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAiR7D"}