@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.
- package/README.md +263 -0
- package/dist/acp/client.d.ts +159 -0
- package/dist/acp/client.d.ts.map +1 -0
- package/dist/acp/client.js +255 -0
- package/dist/acp/client.js.map +1 -0
- package/dist/acp/framing.d.ts +119 -0
- package/dist/acp/framing.d.ts.map +1 -0
- package/dist/acp/framing.js +302 -0
- package/dist/acp/framing.js.map +1 -0
- package/dist/acp/index.d.ts +14 -0
- package/dist/acp/index.d.ts.map +1 -0
- package/dist/acp/index.js +13 -0
- package/dist/acp/index.js.map +1 -0
- package/dist/acp/types.d.ts +89 -0
- package/dist/acp/types.d.ts.map +1 -0
- package/dist/acp/types.js +99 -0
- package/dist/acp/types.js.map +1 -0
- package/dist/agents/adapters.d.ts +55 -0
- package/dist/agents/adapters.d.ts.map +1 -0
- package/dist/agents/adapters.js +84 -0
- package/dist/agents/adapters.js.map +1 -0
- package/dist/agents/index.d.ts +8 -0
- package/dist/agents/index.d.ts.map +1 -0
- package/dist/agents/index.js +10 -0
- package/dist/agents/index.js.map +1 -0
- package/dist/agents/spawner.d.ts +53 -0
- package/dist/agents/spawner.d.ts.map +1 -0
- package/dist/agents/spawner.js +83 -0
- package/dist/agents/spawner.js.map +1 -0
- package/dist/cli/batch.d.ts +82 -0
- package/dist/cli/batch.d.ts.map +1 -0
- package/dist/cli/batch.js +162 -0
- package/dist/cli/batch.js.map +1 -0
- package/dist/cli/commands/clone-for-testing.d.ts +6 -0
- package/dist/cli/commands/clone-for-testing.d.ts.map +1 -0
- package/dist/cli/commands/clone-for-testing.js +176 -0
- package/dist/cli/commands/clone-for-testing.js.map +1 -0
- package/dist/cli/commands/derive.d.ts +6 -0
- package/dist/cli/commands/derive.d.ts.map +1 -0
- package/dist/cli/commands/derive.js +450 -0
- package/dist/cli/commands/derive.js.map +1 -0
- package/dist/cli/commands/help.d.ts +6 -0
- package/dist/cli/commands/help.d.ts.map +1 -0
- package/dist/cli/commands/help.js +196 -0
- package/dist/cli/commands/help.js.map +1 -0
- package/dist/cli/commands/inbox.d.ts +6 -0
- package/dist/cli/commands/inbox.d.ts.map +1 -0
- package/dist/cli/commands/inbox.js +235 -0
- package/dist/cli/commands/inbox.js.map +1 -0
- package/dist/cli/commands/index.d.ts +20 -0
- package/dist/cli/commands/index.d.ts.map +1 -0
- package/dist/cli/commands/index.js +21 -0
- package/dist/cli/commands/index.js.map +1 -0
- package/dist/cli/commands/init.d.ts +6 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +245 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/item.d.ts +6 -0
- package/dist/cli/commands/item.d.ts.map +1 -0
- package/dist/cli/commands/item.js +1311 -0
- package/dist/cli/commands/item.js.map +1 -0
- package/dist/cli/commands/link.d.ts +6 -0
- package/dist/cli/commands/link.d.ts.map +1 -0
- package/dist/cli/commands/link.js +288 -0
- package/dist/cli/commands/link.js.map +1 -0
- package/dist/cli/commands/log.d.ts +16 -0
- package/dist/cli/commands/log.d.ts.map +1 -0
- package/dist/cli/commands/log.js +291 -0
- package/dist/cli/commands/log.js.map +1 -0
- package/dist/cli/commands/meta.d.ts +15 -0
- package/dist/cli/commands/meta.d.ts.map +1 -0
- package/dist/cli/commands/meta.js +1378 -0
- package/dist/cli/commands/meta.js.map +1 -0
- package/dist/cli/commands/module.d.ts +6 -0
- package/dist/cli/commands/module.d.ts.map +1 -0
- package/dist/cli/commands/module.js +102 -0
- package/dist/cli/commands/module.js.map +1 -0
- package/dist/cli/commands/ralph.d.ts +9 -0
- package/dist/cli/commands/ralph.d.ts.map +1 -0
- package/dist/cli/commands/ralph.js +465 -0
- package/dist/cli/commands/ralph.js.map +1 -0
- package/dist/cli/commands/search.d.ts +6 -0
- package/dist/cli/commands/search.d.ts.map +1 -0
- package/dist/cli/commands/search.js +134 -0
- package/dist/cli/commands/search.js.map +1 -0
- package/dist/cli/commands/session.d.ts +164 -0
- package/dist/cli/commands/session.d.ts.map +1 -0
- package/dist/cli/commands/session.js +745 -0
- package/dist/cli/commands/session.js.map +1 -0
- package/dist/cli/commands/setup.d.ts +26 -0
- package/dist/cli/commands/setup.d.ts.map +1 -0
- package/dist/cli/commands/setup.js +586 -0
- package/dist/cli/commands/setup.js.map +1 -0
- package/dist/cli/commands/shadow.d.ts +6 -0
- package/dist/cli/commands/shadow.d.ts.map +1 -0
- package/dist/cli/commands/shadow.js +299 -0
- package/dist/cli/commands/shadow.js.map +1 -0
- package/dist/cli/commands/task.d.ts +6 -0
- package/dist/cli/commands/task.d.ts.map +1 -0
- package/dist/cli/commands/task.js +1514 -0
- package/dist/cli/commands/task.js.map +1 -0
- package/dist/cli/commands/tasks.d.ts +6 -0
- package/dist/cli/commands/tasks.d.ts.map +1 -0
- package/dist/cli/commands/tasks.js +347 -0
- package/dist/cli/commands/tasks.js.map +1 -0
- package/dist/cli/commands/trait.d.ts +10 -0
- package/dist/cli/commands/trait.d.ts.map +1 -0
- package/dist/cli/commands/trait.js +295 -0
- package/dist/cli/commands/trait.js.map +1 -0
- package/dist/cli/commands/validate.d.ts +6 -0
- package/dist/cli/commands/validate.d.ts.map +1 -0
- package/dist/cli/commands/validate.js +626 -0
- package/dist/cli/commands/validate.js.map +1 -0
- package/dist/cli/exit-codes.d.ts +62 -0
- package/dist/cli/exit-codes.d.ts.map +1 -0
- package/dist/cli/exit-codes.js +65 -0
- package/dist/cli/exit-codes.js.map +1 -0
- package/dist/cli/help/content.d.ts +35 -0
- package/dist/cli/help/content.d.ts.map +1 -0
- package/dist/cli/help/content.js +312 -0
- package/dist/cli/help/content.js.map +1 -0
- package/dist/cli/index.d.ts +5 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +85 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/introspection.d.ts +87 -0
- package/dist/cli/introspection.d.ts.map +1 -0
- package/dist/cli/introspection.js +127 -0
- package/dist/cli/introspection.js.map +1 -0
- package/dist/cli/output.d.ts +56 -0
- package/dist/cli/output.d.ts.map +1 -0
- package/dist/cli/output.js +467 -0
- package/dist/cli/output.js.map +1 -0
- package/dist/cli/suggest.d.ts +16 -0
- package/dist/cli/suggest.d.ts.map +1 -0
- package/dist/cli/suggest.js +72 -0
- package/dist/cli/suggest.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -0
- package/dist/parser/alignment.d.ts +113 -0
- package/dist/parser/alignment.d.ts.map +1 -0
- package/dist/parser/alignment.js +261 -0
- package/dist/parser/alignment.js.map +1 -0
- package/dist/parser/assess.d.ts +81 -0
- package/dist/parser/assess.d.ts.map +1 -0
- package/dist/parser/assess.js +197 -0
- package/dist/parser/assess.js.map +1 -0
- package/dist/parser/convention-validation.d.ts +48 -0
- package/dist/parser/convention-validation.d.ts.map +1 -0
- package/dist/parser/convention-validation.js +167 -0
- package/dist/parser/convention-validation.js.map +1 -0
- package/dist/parser/fix.d.ts +38 -0
- package/dist/parser/fix.d.ts.map +1 -0
- package/dist/parser/fix.js +185 -0
- package/dist/parser/fix.js.map +1 -0
- package/dist/parser/index.d.ts +12 -0
- package/dist/parser/index.d.ts.map +1 -0
- package/dist/parser/index.js +13 -0
- package/dist/parser/index.js.map +1 -0
- package/dist/parser/items.d.ts +138 -0
- package/dist/parser/items.d.ts.map +1 -0
- package/dist/parser/items.js +321 -0
- package/dist/parser/items.js.map +1 -0
- package/dist/parser/meta.d.ts +120 -0
- package/dist/parser/meta.d.ts.map +1 -0
- package/dist/parser/meta.js +441 -0
- package/dist/parser/meta.js.map +1 -0
- package/dist/parser/refs.d.ts +185 -0
- package/dist/parser/refs.d.ts.map +1 -0
- package/dist/parser/refs.js +404 -0
- package/dist/parser/refs.js.map +1 -0
- package/dist/parser/shadow.d.ts +253 -0
- package/dist/parser/shadow.d.ts.map +1 -0
- package/dist/parser/shadow.js +1053 -0
- package/dist/parser/shadow.js.map +1 -0
- package/dist/parser/traits.d.ts +72 -0
- package/dist/parser/traits.d.ts.map +1 -0
- package/dist/parser/traits.js +120 -0
- package/dist/parser/traits.js.map +1 -0
- package/dist/parser/validate.d.ts +89 -0
- package/dist/parser/validate.d.ts.map +1 -0
- package/dist/parser/validate.js +817 -0
- package/dist/parser/validate.js.map +1 -0
- package/dist/parser/yaml.d.ts +326 -0
- package/dist/parser/yaml.d.ts.map +1 -0
- package/dist/parser/yaml.js +1383 -0
- package/dist/parser/yaml.js.map +1 -0
- package/dist/ralph/cli-renderer.d.ts +20 -0
- package/dist/ralph/cli-renderer.d.ts.map +1 -0
- package/dist/ralph/cli-renderer.js +179 -0
- package/dist/ralph/cli-renderer.js.map +1 -0
- package/dist/ralph/events.d.ts +65 -0
- package/dist/ralph/events.d.ts.map +1 -0
- package/dist/ralph/events.js +397 -0
- package/dist/ralph/events.js.map +1 -0
- package/dist/ralph/index.d.ts +8 -0
- package/dist/ralph/index.d.ts.map +1 -0
- package/dist/ralph/index.js +10 -0
- package/dist/ralph/index.js.map +1 -0
- package/dist/schema/common.d.ts +46 -0
- package/dist/schema/common.d.ts.map +1 -0
- package/dist/schema/common.js +71 -0
- package/dist/schema/common.js.map +1 -0
- package/dist/schema/inbox.d.ts +90 -0
- package/dist/schema/inbox.d.ts.map +1 -0
- package/dist/schema/inbox.js +30 -0
- package/dist/schema/inbox.js.map +1 -0
- package/dist/schema/index.d.ts +6 -0
- package/dist/schema/index.d.ts.map +1 -0
- package/dist/schema/index.js +7 -0
- package/dist/schema/index.js.map +1 -0
- package/dist/schema/meta.d.ts +762 -0
- package/dist/schema/meta.d.ts.map +1 -0
- package/dist/schema/meta.js +144 -0
- package/dist/schema/meta.js.map +1 -0
- package/dist/schema/spec.d.ts +912 -0
- package/dist/schema/spec.d.ts.map +1 -0
- package/dist/schema/spec.js +104 -0
- package/dist/schema/spec.js.map +1 -0
- package/dist/schema/task.d.ts +664 -0
- package/dist/schema/task.d.ts.map +1 -0
- package/dist/schema/task.js +130 -0
- package/dist/schema/task.js.map +1 -0
- package/dist/sessions/index.d.ts +11 -0
- package/dist/sessions/index.d.ts.map +1 -0
- package/dist/sessions/index.js +13 -0
- package/dist/sessions/index.js.map +1 -0
- package/dist/sessions/store.d.ts +144 -0
- package/dist/sessions/store.d.ts.map +1 -0
- package/dist/sessions/store.js +325 -0
- package/dist/sessions/store.js.map +1 -0
- package/dist/sessions/types.d.ts +157 -0
- package/dist/sessions/types.d.ts.map +1 -0
- package/dist/sessions/types.js +90 -0
- package/dist/sessions/types.js.map +1 -0
- package/dist/strings/errors.d.ts +420 -0
- package/dist/strings/errors.d.ts.map +1 -0
- package/dist/strings/errors.js +282 -0
- package/dist/strings/errors.js.map +1 -0
- package/dist/strings/guidance.d.ts +65 -0
- package/dist/strings/guidance.d.ts.map +1 -0
- package/dist/strings/guidance.js +66 -0
- package/dist/strings/guidance.js.map +1 -0
- package/dist/strings/index.d.ts +12 -0
- package/dist/strings/index.d.ts.map +1 -0
- package/dist/strings/index.js +12 -0
- package/dist/strings/index.js.map +1 -0
- package/dist/strings/labels.d.ts +74 -0
- package/dist/strings/labels.d.ts.map +1 -0
- package/dist/strings/labels.js +75 -0
- package/dist/strings/labels.js.map +1 -0
- package/dist/strings/validation.d.ts +126 -0
- package/dist/strings/validation.d.ts.map +1 -0
- package/dist/strings/validation.js +135 -0
- package/dist/strings/validation.js.map +1 -0
- package/dist/utils/commit.d.ts +23 -0
- package/dist/utils/commit.d.ts.map +1 -0
- package/dist/utils/commit.js +67 -0
- package/dist/utils/commit.js.map +1 -0
- package/dist/utils/git.d.ts +57 -0
- package/dist/utils/git.d.ts.map +1 -0
- package/dist/utils/git.js +192 -0
- package/dist/utils/git.js.map +1 -0
- package/dist/utils/grep.d.ts +28 -0
- package/dist/utils/grep.d.ts.map +1 -0
- package/dist/utils/grep.js +86 -0
- package/dist/utils/grep.js.map +1 -0
- package/dist/utils/index.d.ts +8 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +6 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/time.d.ts +18 -0
- package/dist/utils/time.d.ts.map +1 -0
- package/dist/utils/time.js +61 -0
- package/dist/utils/time.js.map +1 -0
- 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 @@
|
|
|
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"}
|