@s_s/agent-kit 1.0.0 → 1.2.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/build/hooks.js CHANGED
@@ -1,46 +1,27 @@
1
1
  import fs from 'node:fs/promises';
2
2
  import path from 'node:path';
3
- import os from 'node:os';
4
3
  import { execFile } from 'node:child_process';
5
4
  import { promisify } from 'node:util';
6
- import { AGENT_REGISTRY } from './types.js';
7
- import { getIntents, getRawHooks, getExtendHooks } from './hook-registry.js';
8
- import { checkAllDegradation } from './hook-capabilities.js';
9
- import { ClaudeCodeTranslator } from './hook-translators/claude-code.js';
10
- import { OpenCodeTranslator } from './hook-translators/opencode.js';
11
- import { OpenClawTranslator } from './hook-translators/openclaw.js';
5
+ import { resolveAgentPaths } from './paths.js';
12
6
  const execFileAsync = promisify(execFile);
13
7
  // ---------------------------------------------------------------------------
14
- // Translator factory
15
- // ---------------------------------------------------------------------------
16
- function getTranslator(agent) {
17
- switch (agent) {
18
- case 'claude-code':
19
- return new ClaudeCodeTranslator('claude-code');
20
- case 'codex':
21
- return new ClaudeCodeTranslator('codex');
22
- case 'opencode':
23
- return new OpenCodeTranslator();
24
- case 'openclaw':
25
- return new OpenClawTranslator();
26
- }
27
- }
28
- // ---------------------------------------------------------------------------
29
- // installHooks — main entry point
8
+ // installHooks — write hook files to disk
30
9
  // ---------------------------------------------------------------------------
31
10
  /**
32
11
  * Install hooks for the given agent type.
33
12
  *
34
- * Reads all registered intents, raw hooks, and extend hooks from the hook
35
- * registry. Translates them into native hook files using the agent-specific
36
- * translator. Runs degradation checks and conflict detection.
13
+ * Accepts one or more HookSet (from defineHooks()). Filters to only those
14
+ * matching the target agent. Writes content to the agent's hook directory.
15
+ *
16
+ * For Claude Code / Codex: writes shell scripts, merges into settings.json.
17
+ * For OpenCode: writes TypeScript plugin files directly to plugins dir.
18
+ * For OpenClaw: writes HOOK.md + handler.ts, attempts CLI activation.
37
19
  *
38
20
  * @internal — called by the Kit object returned from createKit().
39
21
  */
40
- export async function installHooks(name, agent) {
41
- const home = os.homedir();
42
- const entry = AGENT_REGISTRY[agent];
43
- const hookDir = entry.getHookDir(home, name);
22
+ export async function installHooks(name, agent, hookSets) {
23
+ const paths = resolveAgentPaths(agent, name);
24
+ const hookDir = paths.hookDir;
44
25
  const result = {
45
26
  success: false,
46
27
  hookDir,
@@ -48,56 +29,41 @@ export async function installHooks(name, agent) {
48
29
  settingsUpdated: false,
49
30
  notes: [],
50
31
  warnings: [],
51
- skipped: [],
52
32
  };
53
- const intents = getIntents();
54
- const rawHooks = getRawHooks();
55
- const extendHooks = getExtendHooks();
56
- // Check if there's anything to install
57
- if (intents.length === 0 && rawHooks.size === 0 && extendHooks.size === 0) {
58
- result.error =
59
- 'No hooks registered. Use hooks.inject(), hooks.beforeToolCall(), etc. to declare hook behavior.';
33
+ // Normalize and filter to matching agent
34
+ const sets = (Array.isArray(hookSets) ? hookSets : [hookSets]).filter((s) => s.agent === agent);
35
+ if (sets.length === 0) {
36
+ result.error = `No hook definitions found for agent "${agent}".`;
60
37
  return result;
61
38
  }
39
+ // Collect all definitions from matching sets
40
+ const allDefs = [];
41
+ for (const set of sets) {
42
+ allDefs.push(...set.definitions);
43
+ }
62
44
  try {
63
- // Step 1: Run degradation checks
64
- const intentTypes = [...new Set(intents.map((i) => i.type))];
65
- const degradations = checkAllDegradation(agent, intentTypes);
66
- for (const d of degradations) {
67
- if (d.level === 'unsupported') {
68
- result.warnings.push(d.message);
69
- }
70
- else if (d.level === 'partial') {
71
- result.warnings.push(d.message);
72
- }
73
- }
74
- // Step 2: Filter raw/extend hooks for this agent
75
- const agentRawHooks = new Map();
76
- for (const [key, reg] of rawHooks) {
77
- if (key.startsWith(`${agent}::`)) {
78
- agentRawHooks.set(key, reg);
79
- }
45
+ // Generate files based on agent type
46
+ const files = {};
47
+ switch (agent) {
48
+ case 'claude-code':
49
+ case 'codex':
50
+ generateClaudeCodeFiles(files, allDefs, name);
51
+ break;
52
+ case 'opencode':
53
+ generateOpenCodeFiles(files, allDefs, name);
54
+ break;
55
+ case 'openclaw':
56
+ generateOpenClawFiles(files, allDefs, name);
57
+ break;
80
58
  }
81
- const agentExtendHooks = new Map();
82
- for (const [key, regs] of extendHooks) {
83
- if (key.startsWith(`${agent}::`)) {
84
- agentExtendHooks.set(key, regs);
85
- }
86
- }
87
- // Step 3: Translate intents → native files
88
- const translator = getTranslator(agent);
89
- const translation = translator.translate(intents, agentRawHooks, agentExtendHooks, name);
90
- // Merge translation warnings and skipped
91
- result.warnings.push(...translation.warnings);
92
- result.skipped.push(...translation.skipped);
93
- // Step 4: Write hook files
94
- if (Object.keys(translation.files).length === 0) {
95
- result.notes.push('No hook files generated for this agent.');
59
+ if (Object.keys(files).length === 0) {
60
+ result.notes.push('No hook files generated.');
96
61
  result.success = true;
97
62
  return result;
98
63
  }
64
+ // Write files
99
65
  await fs.mkdir(hookDir, { recursive: true });
100
- for (const [fileName, content] of Object.entries(translation.files)) {
66
+ for (const [fileName, content] of Object.entries(files)) {
101
67
  const filePath = path.join(hookDir, fileName);
102
68
  await fs.writeFile(filePath, content, 'utf-8');
103
69
  if (fileName.endsWith('.sh')) {
@@ -105,16 +71,15 @@ export async function installHooks(name, agent) {
105
71
  }
106
72
  result.filesWritten.push(filePath);
107
73
  }
108
- // Step 5: Merge settings.json for agents that need it (Claude Code / Codex)
109
- if (entry.getSettingsPath) {
110
- const settingsPath = entry.getSettingsPath(home);
111
- const shellFiles = Object.keys(translation.files).filter((f) => f.endsWith('.sh'));
74
+ // Merge settings.json for Claude Code / Codex
75
+ if (paths.settingsFile) {
76
+ const shellFiles = Object.keys(files).filter((f) => f.endsWith('.sh'));
112
77
  if (shellFiles.length > 0) {
113
- await mergeHookSettings(settingsPath, hookDir, shellFiles, name);
78
+ await mergeHookSettings(paths.settingsFile, hookDir, shellFiles, allDefs, name);
114
79
  result.settingsUpdated = true;
115
80
  }
116
81
  }
117
- // Step 6: Agent-specific post-install
82
+ // OpenClaw post-install: attempt CLI activation
118
83
  if (agent === 'openclaw') {
119
84
  try {
120
85
  await execFileAsync('openclaw', ['hooks', 'enable', name]);
@@ -143,12 +108,11 @@ export async function installHooks(name, agent) {
143
108
  * @internal — called by the Kit object returned from createKit().
144
109
  */
145
110
  export async function uninstallHooks(name, agent) {
146
- const home = os.homedir();
147
- const entry = AGENT_REGISTRY[agent];
148
- const hookDir = entry.getHookDir(home, name);
111
+ const paths = resolveAgentPaths(agent, name);
112
+ const hookDir = paths.hookDir;
149
113
  const removed = [];
150
114
  try {
151
- // Remove hook directory
115
+ // Remove hook directory contents
152
116
  try {
153
117
  const files = await fs.readdir(hookDir);
154
118
  for (const file of files) {
@@ -162,9 +126,8 @@ export async function uninstallHooks(name, agent) {
162
126
  // Directory may not exist — that's fine
163
127
  }
164
128
  // Clean settings.json for Claude Code / Codex
165
- if (entry.getSettingsPath) {
166
- const settingsPath = entry.getSettingsPath(home);
167
- await cleanHookSettings(settingsPath, name);
129
+ if (paths.settingsFile) {
130
+ await cleanHookSettings(paths.settingsFile, name);
168
131
  }
169
132
  // Deactivate for OpenClaw
170
133
  if (agent === 'openclaw') {
@@ -190,9 +153,8 @@ export async function uninstallHooks(name, agent) {
190
153
  * @internal — called by the Kit object returned from createKit().
191
154
  */
192
155
  export async function hasHooksInstalled(name, agent) {
193
- const home = os.homedir();
194
- const entry = AGENT_REGISTRY[agent];
195
- const hookDir = entry.getHookDir(home, name);
156
+ const paths = resolveAgentPaths(agent, name);
157
+ const hookDir = paths.hookDir;
196
158
  try {
197
159
  const files = await fs.readdir(hookDir);
198
160
  return files.length > 0;
@@ -202,13 +164,69 @@ export async function hasHooksInstalled(name, agent) {
202
164
  }
203
165
  }
204
166
  // ---------------------------------------------------------------------------
167
+ // File generators — per agent
168
+ // ---------------------------------------------------------------------------
169
+ /**
170
+ * Claude Code / Codex: each definition × each event → one shell script.
171
+ * Filename: `{toolName}-{event}.sh`
172
+ */
173
+ function generateClaudeCodeFiles(files, defs, toolName) {
174
+ for (const def of defs) {
175
+ for (const event of def.events) {
176
+ const fileName = `${toolName}-${event}.sh`;
177
+ // If multiple definitions target the same event, later ones win
178
+ files[fileName] = def.content;
179
+ }
180
+ }
181
+ }
182
+ /**
183
+ * OpenCode: each definition × each event → one TypeScript plugin file.
184
+ * Filename: `{toolName}-{event}-plugin.ts`
185
+ *
186
+ * OpenCode plugins dir is flat (all in ~/.config/opencode/plugins/).
187
+ * Content is written as-is — users provide the full plugin file content.
188
+ */
189
+ function generateOpenCodeFiles(files, defs, toolName) {
190
+ for (const def of defs) {
191
+ for (const event of def.events) {
192
+ // Sanitize event name for filename (dots → dashes)
193
+ const sanitized = event.replace(/\./g, '-');
194
+ const fileName = `${toolName}-${sanitized}-plugin.ts`;
195
+ files[fileName] = def.content;
196
+ }
197
+ }
198
+ }
199
+ /**
200
+ * OpenClaw: generates HOOK.md (YAML frontmatter) + handler.ts.
201
+ * Only uses the first definition (OpenClaw = one hook = one HOOK.md + handler.ts).
202
+ */
203
+ function generateOpenClawFiles(files, defs, toolName) {
204
+ if (defs.length === 0)
205
+ return;
206
+ const def = defs[0]; // Only first definition used
207
+ // Generate HOOK.md
208
+ const description = def.description || `Hook installed by ${toolName}`;
209
+ const eventsYaml = def.events.map((e) => ` - ${e}`).join('\n');
210
+ files['HOOK.md'] = [
211
+ '---',
212
+ `name: ${toolName}`,
213
+ `description: ${description}`,
214
+ 'events:',
215
+ eventsYaml,
216
+ '---',
217
+ '',
218
+ ].join('\n');
219
+ // handler.ts — user-provided content
220
+ files['handler.ts'] = def.content;
221
+ }
222
+ // ---------------------------------------------------------------------------
205
223
  // Settings merge (Claude Code / Codex)
206
224
  // ---------------------------------------------------------------------------
207
225
  /**
208
226
  * Merge hook entries into settings.json for Claude Code / Codex.
209
- * Maps each shell script to its corresponding native hook event based on filename conventions.
227
+ * Maps each shell script filename to its hook event via the definitions.
210
228
  */
211
- async function mergeHookSettings(settingsPath, hookDir, shellFiles, toolName) {
229
+ async function mergeHookSettings(settingsPath, hookDir, shellFiles, defs, toolName) {
212
230
  let settings = {};
213
231
  try {
214
232
  const raw = await fs.readFile(settingsPath, 'utf-8');
@@ -221,39 +239,19 @@ async function mergeHookSettings(settingsPath, hookDir, shellFiles, toolName) {
221
239
  settings.hooks = {};
222
240
  }
223
241
  const hooks = settings.hooks;
224
- // Map filename patterns to native hook events
225
- const fileToEvent = {
226
- inject: 'UserPromptSubmit',
227
- 'session-start': 'SessionStart',
228
- 'session-end': 'SessionEnd',
229
- compaction: 'PreCompact',
230
- 'before-tool': 'PreToolUse',
231
- 'after-tool': 'PostToolUse',
232
- 'on-session-start': 'SessionStart',
233
- 'on-session-end': 'SessionEnd',
234
- permission: 'PermissionRequest',
235
- };
236
- for (const fileName of shellFiles) {
237
- const activatorPath = path.join(hookDir, fileName);
238
- // Determine the event from filename
239
- let event;
240
- // Check raw hooks first (pattern: toolName-raw-hookname.sh)
241
- const rawMatch = fileName.match(/^.+-raw-(.+)\.sh$/);
242
- if (rawMatch) {
243
- // Raw hooks use the hook name directly (case-insensitive lookup)
244
- event = rawMatch[1].charAt(0).toUpperCase() + rawMatch[1].slice(1);
245
- }
246
- else {
247
- // Intent-generated hooks use filename conventions
248
- for (const [pattern, hookEvent] of Object.entries(fileToEvent)) {
249
- if (fileName.includes(pattern)) {
250
- event = hookEvent;
251
- break;
252
- }
253
- }
242
+ // Build filename event map from definitions
243
+ const fileToEvent = new Map();
244
+ for (const def of defs) {
245
+ for (const event of def.events) {
246
+ const fileName = `${toolName}-${event}.sh`;
247
+ fileToEvent.set(fileName, event);
254
248
  }
249
+ }
250
+ for (const fileName of shellFiles) {
251
+ const event = fileToEvent.get(fileName);
255
252
  if (!event)
256
253
  continue;
254
+ const activatorPath = path.join(hookDir, fileName);
257
255
  const hookEntry = {
258
256
  matcher: '',
259
257
  hooks: [{ type: 'command', command: activatorPath }],
@@ -1 +1 @@
1
- {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"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"}
package/build/index.d.ts CHANGED
@@ -1,9 +1,7 @@
1
1
  export { createKit } from './create-kit.js';
2
- export type { AgentType, StorageScope, ScopeOptions, KitOptions, Kit, HookInstallResult, SkippedIntent, } from './types.js';
2
+ export { resolveConfigPath } from './prompt.js';
3
+ export { defineHooks, getValidEvents } from './define-hooks.js';
4
+ export type { AgentType, StorageScope, ScopeOptions, KitOptions, Kit, HookInstallResult, HookDefinition, HookSet, ClaudeCodeEvent, OpenCodeEvent, OpenClawPluginEvent, OpenClawInternalEvent, OpenClawEvent, AgentEventMap, AgentPaths, } from './types.js';
3
5
  export { AGENT_TYPES, CLIENT_NAME_MAP } from './types.js';
4
- export type { InjectIntent, BeforeToolCallIntent, AfterToolCallIntent, OnSessionIntent, OnPermissionIntent, HookIntent, IntentType, ToolCallContext, ToolCallInterceptResult, ToolCallObserveContext, SessionContext, PermissionDecision, PermissionContext, RawHookRegistration, ExtendHookRegistration, } from './hook-types.js';
5
- export type { SupportLevel, CapabilityEntry, DegradationWarning } from './hook-capabilities.js';
6
- export { CAPABILITY_MATRIX, checkDegradation, checkAllDegradation, isIntentFullyUnsupported, } from './hook-capabilities.js';
7
- export { detectProjectRoot } from './platform.js';
6
+ export { detectProjectRoot } from './paths.js';
8
7
  export { detectAgent, detectAgentFromClient } from './detect.js';
9
- export { hooks } from './hook-registry.js';
package/build/index.js CHANGED
@@ -1,11 +1,12 @@
1
1
  // Core factory
2
2
  export { createKit } from './create-kit.js';
3
+ // Prompt utilities
4
+ export { resolveConfigPath } from './prompt.js';
5
+ // Hook definition
6
+ export { defineHooks, getValidEvents } from './define-hooks.js';
3
7
  export { AGENT_TYPES, CLIENT_NAME_MAP } from './types.js';
4
- export { CAPABILITY_MATRIX, checkDegradation, checkAllDegradation, isIntentFullyUnsupported, } from './hook-capabilities.js';
5
- // Platform (only detectProjectRoot is standalone; getDataDir is on Kit)
6
- export { detectProjectRoot } from './platform.js';
8
+ // Paths (only detectProjectRoot is standalone; getDataDir & resolvePaths are on Kit)
9
+ export { detectProjectRoot } from './paths.js';
7
10
  // Detection
8
11
  export { detectAgent, detectAgentFromClient } from './detect.js';
9
- // Hooks — declaration API (global, not bound to kit instance)
10
- export { hooks } from './hook-registry.js';
11
12
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAY5C,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAuB1D,OAAO,EACH,iBAAiB,EACjB,gBAAgB,EAChB,mBAAmB,EACnB,wBAAwB,GAC3B,MAAM,wBAAwB,CAAC;AAEhC,wEAAwE;AACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAElD,YAAY;AACZ,OAAO,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAEjE,8DAA8D;AAC9D,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,mBAAmB;AACnB,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEhD,kBAAkB;AAClB,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAoBhE,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAE1D,qFAAqF;AACrF,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE/C,YAAY;AACZ,OAAO,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,31 @@
1
+ import type { AgentType, AgentPaths, ResolvedKitConfig, ScopeOptions } from './types.js';
2
+ /**
3
+ * Get platform-appropriate data directory path.
4
+ *
5
+ * - global: follows platform conventions (macOS ~/Library/Application Support, Linux XDG, Windows APPDATA)
6
+ * - project: `<projectRoot>/.<name>` (or custom dir name)
7
+ *
8
+ * @internal — called by the Kit object returned from createKit().
9
+ */
10
+ export declare function getDataDir(config: ResolvedKitConfig, options?: ScopeOptions): string;
11
+ /**
12
+ * Detect project root directory.
13
+ *
14
+ * Resolution order: git root > project marker files (.git, package.json, etc.) > cwd fallback.
15
+ * This is an independent function — does not require createKit().
16
+ */
17
+ export declare function detectProjectRoot(cwd?: string): Promise<string>;
18
+ /**
19
+ * Resolve all relevant paths for an agent at a given scope.
20
+ *
21
+ * Central path resolution for agent config files, hook directories, and
22
+ * settings files. All other modules should use this function instead of
23
+ * reading from AGENT_REGISTRY directly.
24
+ *
25
+ * @param agent - Target agent type.
26
+ * @param toolName - Tool/kit name. When provided, hookDir is included in the result.
27
+ * @param options - Scope options (global/project).
28
+ *
29
+ * @internal — used by prompt.ts, hooks.ts, and create-kit.ts.
30
+ */
31
+ export declare function resolveAgentPaths(agent: AgentType, toolName?: string, options?: ScopeOptions): AgentPaths;
package/build/paths.js ADDED
@@ -0,0 +1,119 @@
1
+ import path from 'node:path';
2
+ import os from 'node:os';
3
+ import fs from 'node:fs/promises';
4
+ import { execFile } from 'node:child_process';
5
+ import { promisify } from 'node:util';
6
+ import { AGENT_REGISTRY } from './types.js';
7
+ const execFileAsync = promisify(execFile);
8
+ const PROJECT_ROOT_MARKERS = ['.git', 'package.json', 'pyproject.toml', 'Cargo.toml', 'go.mod'];
9
+ /**
10
+ * Get platform-appropriate data directory path.
11
+ *
12
+ * - global: follows platform conventions (macOS ~/Library/Application Support, Linux XDG, Windows APPDATA)
13
+ * - project: `<projectRoot>/.<name>` (or custom dir name)
14
+ *
15
+ * @internal — called by the Kit object returned from createKit().
16
+ */
17
+ export function getDataDir(config, options) {
18
+ const scope = options?.scope ?? 'global';
19
+ if (scope === 'project') {
20
+ if (!options?.projectRoot) {
21
+ throw new Error('getDataDir: projectRoot is required when scope is "project".');
22
+ }
23
+ const dirName = config.dirs?.project ?? `.${config.name}`;
24
+ return path.join(options.projectRoot, dirName);
25
+ }
26
+ // Global scope
27
+ const envVar = config.envOverride ?? `${config.name.toUpperCase().replace(/-/g, '_')}_DATA_DIR`;
28
+ const envDir = process.env[envVar];
29
+ if (envDir)
30
+ return envDir;
31
+ const dirName = config.dirs?.global ?? config.name;
32
+ const home = os.homedir();
33
+ const platform = process.platform;
34
+ switch (platform) {
35
+ case 'darwin':
36
+ return path.join(home, 'Library', 'Application Support', dirName);
37
+ case 'win32':
38
+ return path.join(process.env.APPDATA || path.join(home, 'AppData', 'Roaming'), dirName);
39
+ default:
40
+ return path.join(process.env.XDG_DATA_HOME || path.join(home, '.local', 'share'), dirName);
41
+ }
42
+ }
43
+ /**
44
+ * Detect project root directory.
45
+ *
46
+ * Resolution order: git root > project marker files (.git, package.json, etc.) > cwd fallback.
47
+ * This is an independent function — does not require createKit().
48
+ */
49
+ export async function detectProjectRoot(cwd) {
50
+ const startDir = cwd ?? process.cwd();
51
+ // Try git root first
52
+ try {
53
+ const { stdout } = await execFileAsync('git', ['rev-parse', '--show-toplevel'], { cwd: startDir });
54
+ const gitRoot = stdout.trim();
55
+ if (gitRoot)
56
+ return gitRoot;
57
+ }
58
+ catch {
59
+ // Not a git repo or git not available
60
+ }
61
+ // Walk up looking for project markers
62
+ let current = path.resolve(startDir);
63
+ while (true) {
64
+ for (const marker of PROJECT_ROOT_MARKERS) {
65
+ try {
66
+ await fs.access(path.join(current, marker));
67
+ return current;
68
+ }
69
+ catch {
70
+ continue;
71
+ }
72
+ }
73
+ const parent = path.dirname(current);
74
+ if (parent === current)
75
+ break;
76
+ current = parent;
77
+ }
78
+ return path.resolve(startDir);
79
+ }
80
+ // ---------------------------------------------------------------------------
81
+ // Agent path resolution
82
+ // ---------------------------------------------------------------------------
83
+ /**
84
+ * Resolve all relevant paths for an agent at a given scope.
85
+ *
86
+ * Central path resolution for agent config files, hook directories, and
87
+ * settings files. All other modules should use this function instead of
88
+ * reading from AGENT_REGISTRY directly.
89
+ *
90
+ * @param agent - Target agent type.
91
+ * @param toolName - Tool/kit name. When provided, hookDir is included in the result.
92
+ * @param options - Scope options (global/project).
93
+ *
94
+ * @internal — used by prompt.ts, hooks.ts, and create-kit.ts.
95
+ */
96
+ export function resolveAgentPaths(agent, toolName, options) {
97
+ const entry = AGENT_REGISTRY[agent];
98
+ const scope = options?.scope ?? 'global';
99
+ const home = os.homedir();
100
+ let configFile;
101
+ if (scope === 'project') {
102
+ if (!options?.projectRoot) {
103
+ throw new Error('resolveAgentPaths: projectRoot is required when scope is "project".');
104
+ }
105
+ configFile = entry.projectConfigPath(options.projectRoot);
106
+ }
107
+ else {
108
+ configFile = entry.globalConfigPath(home);
109
+ }
110
+ const result = { configFile };
111
+ if (toolName) {
112
+ result.hookDir = entry.getHookDir(home, toolName);
113
+ }
114
+ if (entry.getSettingsPath) {
115
+ result.settingsFile = entry.getSettingsPath(home);
116
+ }
117
+ return result;
118
+ }
119
+ //# sourceMappingURL=paths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.js","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"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"}
package/build/prompt.d.ts CHANGED
@@ -19,3 +19,7 @@ export declare function hasPromptInjected(name: string, agent: AgentType, option
19
19
  * @internal — exported for testing.
20
20
  */
21
21
  export declare function applyPromptInjection(existingContent: string, name: string, promptContent: string): string;
22
+ /**
23
+ * Resolve the target config file path for an agent + scope.
24
+ */
25
+ export declare function resolveConfigPath(agent: AgentType, options?: ScopeOptions): string;
package/build/prompt.js CHANGED
@@ -1,7 +1,6 @@
1
1
  import fs from 'node:fs/promises';
2
- import os from 'node:os';
3
2
  import path from 'node:path';
4
- import { AGENT_REGISTRY } from './types.js';
3
+ import { resolveAgentPaths } from './paths.js';
5
4
  /**
6
5
  * Inject or update prompt into the agent's config file.
7
6
  *
@@ -11,19 +10,19 @@ import { AGENT_REGISTRY } from './types.js';
11
10
  * @internal — called by the Kit object returned from createKit().
12
11
  */
13
12
  export async function injectPrompt(name, prompt, agent, options) {
14
- const targetPath = resolveConfigPath(agent, options);
13
+ const { configFile } = resolveAgentPaths(agent, undefined, options);
15
14
  // Read existing content
16
15
  let existingContent = '';
17
16
  try {
18
- existingContent = await fs.readFile(targetPath, 'utf-8');
17
+ existingContent = await fs.readFile(configFile, 'utf-8');
19
18
  }
20
19
  catch {
21
20
  // File doesn't exist yet
22
21
  }
23
22
  const updated = applyPromptInjection(existingContent, name, prompt);
24
23
  // Ensure parent directory exists
25
- await fs.mkdir(path.dirname(targetPath), { recursive: true });
26
- await fs.writeFile(targetPath, updated, 'utf-8');
24
+ await fs.mkdir(path.dirname(configFile), { recursive: true });
25
+ await fs.writeFile(configFile, updated, 'utf-8');
27
26
  }
28
27
  /**
29
28
  * Check if prompt has already been injected into the agent's config file.
@@ -31,9 +30,9 @@ export async function injectPrompt(name, prompt, agent, options) {
31
30
  * @internal — called by the Kit object returned from createKit().
32
31
  */
33
32
  export async function hasPromptInjected(name, agent, options) {
34
- const targetPath = resolveConfigPath(agent, options);
33
+ const { configFile } = resolveAgentPaths(agent, undefined, options);
35
34
  try {
36
- const content = await fs.readFile(targetPath, 'utf-8');
35
+ const content = await fs.readFile(configFile, 'utf-8');
37
36
  return content.includes(markerStart(name));
38
37
  }
39
38
  catch {
@@ -72,16 +71,8 @@ export function applyPromptInjection(existingContent, name, promptContent) {
72
71
  /**
73
72
  * Resolve the target config file path for an agent + scope.
74
73
  */
75
- function resolveConfigPath(agent, options) {
76
- const entry = AGENT_REGISTRY[agent];
77
- const scope = options?.scope ?? 'global';
78
- const home = os.homedir();
79
- if (scope === 'project') {
80
- if (!options?.projectRoot) {
81
- throw new Error('injectPrompt: projectRoot is required when scope is "project".');
82
- }
83
- return entry.projectConfigPath(options.projectRoot);
84
- }
85
- return entry.globalConfigPath(home);
74
+ export function resolveConfigPath(agent, options) {
75
+ const { configFile } = resolveAgentPaths(agent, undefined, options);
76
+ return configFile;
86
77
  }
87
78
  //# sourceMappingURL=prompt.js.map