@autonav/core 1.7.0 → 1.8.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/dist/cli/nav-chat.d.ts.map +1 -1
- package/dist/cli/nav-chat.js +3 -1
- package/dist/cli/nav-chat.js.map +1 -1
- package/dist/conversation/App.d.ts +3 -1
- package/dist/conversation/App.d.ts.map +1 -1
- package/dist/conversation/App.js +2 -2
- package/dist/conversation/App.js.map +1 -1
- package/dist/conversation/index.d.ts +2 -0
- package/dist/conversation/index.d.ts.map +1 -1
- package/dist/conversation/index.js.map +1 -1
- package/dist/conversation/prompts.d.ts +1 -1
- package/dist/conversation/prompts.d.ts.map +1 -1
- package/dist/conversation/prompts.js +42 -1
- package/dist/conversation/prompts.js.map +1 -1
- package/dist/interview/prompts.d.ts +1 -1
- package/dist/interview/prompts.d.ts.map +1 -1
- package/dist/interview/prompts.js +9 -0
- package/dist/interview/prompts.js.map +1 -1
- package/dist/standup/types.d.ts +8 -8
- package/package.json +4 -4
- package/dist/adapter/claude-adapter.d.ts +0 -189
- package/dist/adapter/claude-adapter.d.ts.map +0 -1
- package/dist/adapter/claude-adapter.js +0 -541
- package/dist/adapter/claude-adapter.js.map +0 -1
- package/dist/memento/worker-agent.d.ts +0 -33
- package/dist/memento/worker-agent.d.ts.map +0 -1
- package/dist/memento/worker-agent.js +0 -93
- package/dist/memento/worker-agent.js.map +0 -1
- package/dist/skill-generator/index.d.ts +0 -142
- package/dist/skill-generator/index.d.ts.map +0 -1
- package/dist/skill-generator/index.js +0 -510
- package/dist/skill-generator/index.js.map +0 -1
- package/dist/templates/.gitignore.template +0 -26
- package/dist/templates/CLAUDE-pack.md.template +0 -114
- package/dist/templates/CLAUDE.md.template +0 -153
- package/dist/templates/README.md.template +0 -174
- package/dist/templates/config-pack.json.template +0 -16
- package/dist/templates/config.json.template +0 -11
- package/dist/templates/index.d.ts +0 -22
- package/dist/templates/index.d.ts.map +0 -1
- package/dist/templates/index.js +0 -32
- package/dist/templates/index.js.map +0 -1
- package/dist/templates/plugins.json.template +0 -33
- package/dist/templates/system-configuration.md.template +0 -70
|
@@ -1,510 +0,0 @@
|
|
|
1
|
-
import * as fs from "node:fs";
|
|
2
|
-
import * as path from "node:path";
|
|
3
|
-
import os from "node:os";
|
|
4
|
-
/**
|
|
5
|
-
* Get the global skills directory path (~/.claude/skills/)
|
|
6
|
-
*/
|
|
7
|
-
export function getGlobalSkillsDir() {
|
|
8
|
-
return path.join(os.homedir(), ".claude", "skills");
|
|
9
|
-
}
|
|
10
|
-
/**
|
|
11
|
-
* Get the local skills directory path for a navigator (.autonav/skills/)
|
|
12
|
-
*/
|
|
13
|
-
export function getLocalSkillsDir(navigatorPath) {
|
|
14
|
-
return path.join(navigatorPath, ".autonav", "skills");
|
|
15
|
-
}
|
|
16
|
-
/**
|
|
17
|
-
* Get the full path to a local skill directory
|
|
18
|
-
*/
|
|
19
|
-
export function getLocalSkillPath(navigatorPath, skillName) {
|
|
20
|
-
return path.join(getLocalSkillsDir(navigatorPath), skillName);
|
|
21
|
-
}
|
|
22
|
-
/**
|
|
23
|
-
* Check if a skill already exists globally
|
|
24
|
-
*/
|
|
25
|
-
export function skillExists(skillName) {
|
|
26
|
-
const skillDir = path.join(getGlobalSkillsDir(), skillName);
|
|
27
|
-
return fs.existsSync(skillDir);
|
|
28
|
-
}
|
|
29
|
-
/**
|
|
30
|
-
* Check if a skill exists locally in a navigator
|
|
31
|
-
*/
|
|
32
|
-
export function localSkillExists(navigatorPath, skillName) {
|
|
33
|
-
const skillDir = getLocalSkillPath(navigatorPath, skillName);
|
|
34
|
-
return fs.existsSync(skillDir);
|
|
35
|
-
}
|
|
36
|
-
/**
|
|
37
|
-
* Check if a global skill is a symlink
|
|
38
|
-
*/
|
|
39
|
-
export function isSkillSymlink(skillName) {
|
|
40
|
-
const skillDir = path.join(getGlobalSkillsDir(), skillName);
|
|
41
|
-
try {
|
|
42
|
-
const stats = fs.lstatSync(skillDir);
|
|
43
|
-
return stats.isSymbolicLink();
|
|
44
|
-
}
|
|
45
|
-
catch {
|
|
46
|
-
return false;
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
/**
|
|
50
|
-
* Get the target of a global skill symlink
|
|
51
|
-
*/
|
|
52
|
-
export function getSkillSymlinkTarget(skillName) {
|
|
53
|
-
const skillDir = path.join(getGlobalSkillsDir(), skillName);
|
|
54
|
-
try {
|
|
55
|
-
if (!isSkillSymlink(skillName)) {
|
|
56
|
-
return null;
|
|
57
|
-
}
|
|
58
|
-
return fs.readlinkSync(skillDir);
|
|
59
|
-
}
|
|
60
|
-
catch {
|
|
61
|
-
return null;
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
/**
|
|
65
|
-
* Generate the skill name from navigator name
|
|
66
|
-
*/
|
|
67
|
-
export function getSkillName(navigatorName) {
|
|
68
|
-
// Convert to lowercase, replace spaces/underscores with hyphens
|
|
69
|
-
const normalized = navigatorName.toLowerCase().replace(/[_\s]+/g, "-");
|
|
70
|
-
return `ask-${normalized}`;
|
|
71
|
-
}
|
|
72
|
-
/**
|
|
73
|
-
* Generate the update skill name from navigator name
|
|
74
|
-
*/
|
|
75
|
-
export function getUpdateSkillName(navigatorName) {
|
|
76
|
-
// Convert to lowercase, replace spaces/underscores with hyphens
|
|
77
|
-
const normalized = navigatorName.toLowerCase().replace(/[_\s]+/g, "-");
|
|
78
|
-
return `update-${normalized}`;
|
|
79
|
-
}
|
|
80
|
-
/**
|
|
81
|
-
* Generate the SKILL.md content for a navigator
|
|
82
|
-
*/
|
|
83
|
-
export function generateSkillContent(config) {
|
|
84
|
-
const skillName = getSkillName(config.navigatorName);
|
|
85
|
-
const navPath = config.navigatorPath;
|
|
86
|
-
return `---
|
|
87
|
-
name: ${skillName}
|
|
88
|
-
description: Query ${config.navigatorName} navigator about ${config.description}. Use when user asks to "ask ${config.navigatorName}" or needs information from this knowledge base.
|
|
89
|
-
---
|
|
90
|
-
|
|
91
|
-
# Ask ${config.navigatorName}
|
|
92
|
-
|
|
93
|
-
Query the **${config.navigatorName}** navigator for information.
|
|
94
|
-
|
|
95
|
-
**Navigator Location**: \`${navPath}\`
|
|
96
|
-
|
|
97
|
-
${config.description}
|
|
98
|
-
|
|
99
|
-
${config.scope ? `**Scope**: ${config.scope}\n` : ""}
|
|
100
|
-
${config.audience ? `**Audience**: ${config.audience}\n` : ""}
|
|
101
|
-
|
|
102
|
-
## Identity Protocol
|
|
103
|
-
|
|
104
|
-
When querying this navigator, Claude Code should explicitly identify itself as the requester. This enables bidirectional identity affirmation and helps the navigator maintain context awareness.
|
|
105
|
-
|
|
106
|
-
**Example**:
|
|
107
|
-
\`\`\`bash
|
|
108
|
-
autonav query "${navPath}" "Claude Code here, asking: How do I deploy?"
|
|
109
|
-
\`\`\`
|
|
110
|
-
|
|
111
|
-
## How to Use
|
|
112
|
-
|
|
113
|
-
Simply use \`autonav query\` to ask questions:
|
|
114
|
-
|
|
115
|
-
\`\`\`bash
|
|
116
|
-
autonav query "${navPath}" "your question here"
|
|
117
|
-
\`\`\`
|
|
118
|
-
|
|
119
|
-
The navigator will provide grounded answers with sources from its knowledge base.
|
|
120
|
-
|
|
121
|
-
## What This Navigator Knows
|
|
122
|
-
|
|
123
|
-
This navigator specializes in ${config.scope || 'its configured domain'} and follows strict grounding rules:
|
|
124
|
-
- Always cites sources from the knowledge base
|
|
125
|
-
- Never invents information
|
|
126
|
-
- Acknowledges uncertainty with confidence scores
|
|
127
|
-
- Only references files that actually exist
|
|
128
|
-
`;
|
|
129
|
-
}
|
|
130
|
-
/**
|
|
131
|
-
* Generate the update skill content for a navigator (with write permissions)
|
|
132
|
-
*/
|
|
133
|
-
export function generateUpdateSkillContent(config) {
|
|
134
|
-
const skillName = getUpdateSkillName(config.navigatorName);
|
|
135
|
-
const navPath = config.navigatorPath;
|
|
136
|
-
return `---
|
|
137
|
-
name: ${skillName}
|
|
138
|
-
description: Update ${config.navigatorName} navigator's documentation and knowledge base. Use when reporting implementation progress, documenting issues, or updating knowledge about ${config.description}.
|
|
139
|
-
---
|
|
140
|
-
|
|
141
|
-
# Update ${config.navigatorName}
|
|
142
|
-
|
|
143
|
-
Update the **${config.navigatorName}** navigator's documentation and knowledge base.
|
|
144
|
-
|
|
145
|
-
**Navigator Location**: \`${navPath}\`
|
|
146
|
-
|
|
147
|
-
${config.description}
|
|
148
|
-
|
|
149
|
-
${config.scope ? `**Scope**: ${config.scope}\n` : ""}
|
|
150
|
-
${config.audience ? `**Audience**: ${config.audience}\n` : ""}
|
|
151
|
-
|
|
152
|
-
## When to Use
|
|
153
|
-
|
|
154
|
-
Use this skill to:
|
|
155
|
-
- Report implementation progress or issues
|
|
156
|
-
- Update documentation after making changes
|
|
157
|
-
- Add new knowledge or learnings
|
|
158
|
-
- Document troubleshooting steps
|
|
159
|
-
- Create status reports or logs
|
|
160
|
-
|
|
161
|
-
## How to Use
|
|
162
|
-
|
|
163
|
-
Simply use \`autonav update\` to send an update message:
|
|
164
|
-
|
|
165
|
-
\`\`\`bash
|
|
166
|
-
autonav update "${navPath}" "your update message"
|
|
167
|
-
\`\`\`
|
|
168
|
-
|
|
169
|
-
**Example updates:**
|
|
170
|
-
|
|
171
|
-
Report progress:
|
|
172
|
-
\`\`\`bash
|
|
173
|
-
autonav update "${navPath}" "I completed feature X. Please document this in the knowledge base."
|
|
174
|
-
\`\`\`
|
|
175
|
-
|
|
176
|
-
Log an issue:
|
|
177
|
-
\`\`\`bash
|
|
178
|
-
autonav update "${navPath}" "Encountered error Y during deployment. Add this to troubleshooting docs."
|
|
179
|
-
\`\`\`
|
|
180
|
-
|
|
181
|
-
## Important
|
|
182
|
-
|
|
183
|
-
- This command grants **write permissions** to the navigator
|
|
184
|
-
- Changes are made directly to files in the knowledge base
|
|
185
|
-
- Always review edits before committing to version control
|
|
186
|
-
`;
|
|
187
|
-
}
|
|
188
|
-
/**
|
|
189
|
-
* Create a global skill for a navigator
|
|
190
|
-
*
|
|
191
|
-
* @param config - Skill configuration
|
|
192
|
-
* @param options - Options for skill creation
|
|
193
|
-
* @returns Path to the created skill directory, or null if skipped
|
|
194
|
-
*/
|
|
195
|
-
export async function createNavigatorSkill(config, options = {}) {
|
|
196
|
-
const askSkillName = getSkillName(config.navigatorName);
|
|
197
|
-
const updateSkillName = getUpdateSkillName(config.navigatorName);
|
|
198
|
-
const skillsDir = getGlobalSkillsDir();
|
|
199
|
-
const askSkillDir = path.join(skillsDir, askSkillName);
|
|
200
|
-
const updateSkillDir = path.join(skillsDir, updateSkillName);
|
|
201
|
-
// Ensure skills directory exists
|
|
202
|
-
fs.mkdirSync(skillsDir, { recursive: true });
|
|
203
|
-
// Create "ask" skill
|
|
204
|
-
if (skillExists(askSkillName) && !options.force) {
|
|
205
|
-
if (!options.quiet) {
|
|
206
|
-
console.log(`⏭️ Skill "${askSkillName}" already exists (use --force to overwrite)`);
|
|
207
|
-
}
|
|
208
|
-
}
|
|
209
|
-
else {
|
|
210
|
-
fs.mkdirSync(askSkillDir, { recursive: true });
|
|
211
|
-
const askSkillContent = generateSkillContent(config);
|
|
212
|
-
fs.writeFileSync(path.join(askSkillDir, "SKILL.md"), askSkillContent);
|
|
213
|
-
if (!options.quiet) {
|
|
214
|
-
console.log(`✓ Created global skill: ${askSkillName}`);
|
|
215
|
-
}
|
|
216
|
-
}
|
|
217
|
-
// Create "update" skill
|
|
218
|
-
if (skillExists(updateSkillName) && !options.force) {
|
|
219
|
-
if (!options.quiet) {
|
|
220
|
-
console.log(`⏭️ Skill "${updateSkillName}" already exists (use --force to overwrite)`);
|
|
221
|
-
}
|
|
222
|
-
}
|
|
223
|
-
else {
|
|
224
|
-
fs.mkdirSync(updateSkillDir, { recursive: true });
|
|
225
|
-
const updateSkillContent = generateUpdateSkillContent(config);
|
|
226
|
-
fs.writeFileSync(path.join(updateSkillDir, "SKILL.md"), updateSkillContent);
|
|
227
|
-
if (!options.quiet) {
|
|
228
|
-
console.log(`✓ Created global skill: ${updateSkillName}`);
|
|
229
|
-
}
|
|
230
|
-
}
|
|
231
|
-
return askSkillDir;
|
|
232
|
-
}
|
|
233
|
-
/**
|
|
234
|
-
* Remove a navigator skill (both ask and update skills, global only)
|
|
235
|
-
*/
|
|
236
|
-
export function removeNavigatorSkill(navigatorName, options = {}) {
|
|
237
|
-
const askSkillName = getSkillName(navigatorName);
|
|
238
|
-
const updateSkillName = getUpdateSkillName(navigatorName);
|
|
239
|
-
const skillsDir = getGlobalSkillsDir();
|
|
240
|
-
const askSkillDir = path.join(skillsDir, askSkillName);
|
|
241
|
-
const updateSkillDir = path.join(skillsDir, updateSkillName);
|
|
242
|
-
let removedAny = false;
|
|
243
|
-
// Remove ask skill
|
|
244
|
-
if (fs.existsSync(askSkillDir)) {
|
|
245
|
-
fs.rmSync(askSkillDir, { recursive: true, force: true });
|
|
246
|
-
if (!options.quiet) {
|
|
247
|
-
console.log(`Removed skill: ${askSkillName}`);
|
|
248
|
-
}
|
|
249
|
-
removedAny = true;
|
|
250
|
-
}
|
|
251
|
-
// Remove update skill
|
|
252
|
-
if (fs.existsSync(updateSkillDir)) {
|
|
253
|
-
fs.rmSync(updateSkillDir, { recursive: true, force: true });
|
|
254
|
-
if (!options.quiet) {
|
|
255
|
-
console.log(`Removed skill: ${updateSkillName}`);
|
|
256
|
-
}
|
|
257
|
-
removedAny = true;
|
|
258
|
-
}
|
|
259
|
-
if (!removedAny && !options.quiet) {
|
|
260
|
-
console.log(`No skills found for navigator "${navigatorName}"`);
|
|
261
|
-
}
|
|
262
|
-
return removedAny;
|
|
263
|
-
}
|
|
264
|
-
/**
|
|
265
|
-
* Create both ask and update skills locally in the navigator's .autonav/skills/ directory
|
|
266
|
-
*/
|
|
267
|
-
export async function createLocalSkill(navigatorPath, config, options = {}) {
|
|
268
|
-
const askSkillName = getSkillName(config.navigatorName);
|
|
269
|
-
const updateSkillName = getUpdateSkillName(config.navigatorName);
|
|
270
|
-
const localSkillsDir = getLocalSkillsDir(navigatorPath);
|
|
271
|
-
const askSkillDir = path.join(localSkillsDir, askSkillName);
|
|
272
|
-
const updateSkillDir = path.join(localSkillsDir, updateSkillName);
|
|
273
|
-
// Ensure local skills directory exists
|
|
274
|
-
fs.mkdirSync(localSkillsDir, { recursive: true });
|
|
275
|
-
let askSkillPath = null;
|
|
276
|
-
let updateSkillPath = null;
|
|
277
|
-
// Create "ask" skill
|
|
278
|
-
if (localSkillExists(navigatorPath, askSkillName) && !options.force) {
|
|
279
|
-
if (!options.quiet) {
|
|
280
|
-
console.log(`⏭️ Skill "${askSkillName}" already exists locally (use --force to overwrite)`);
|
|
281
|
-
}
|
|
282
|
-
}
|
|
283
|
-
else {
|
|
284
|
-
fs.mkdirSync(askSkillDir, { recursive: true });
|
|
285
|
-
const askSkillContent = generateSkillContent(config);
|
|
286
|
-
fs.writeFileSync(path.join(askSkillDir, "SKILL.md"), askSkillContent);
|
|
287
|
-
if (!options.quiet) {
|
|
288
|
-
console.log(`✓ Created local skill: ${askSkillName}`);
|
|
289
|
-
}
|
|
290
|
-
askSkillPath = askSkillDir;
|
|
291
|
-
}
|
|
292
|
-
// Create "update" skill
|
|
293
|
-
if (localSkillExists(navigatorPath, updateSkillName) && !options.force) {
|
|
294
|
-
if (!options.quiet) {
|
|
295
|
-
console.log(`⏭️ Skill "${updateSkillName}" already exists locally (use --force to overwrite)`);
|
|
296
|
-
}
|
|
297
|
-
}
|
|
298
|
-
else {
|
|
299
|
-
fs.mkdirSync(updateSkillDir, { recursive: true });
|
|
300
|
-
const updateSkillContent = generateUpdateSkillContent(config);
|
|
301
|
-
fs.writeFileSync(path.join(updateSkillDir, "SKILL.md"), updateSkillContent);
|
|
302
|
-
if (!options.quiet) {
|
|
303
|
-
console.log(`✓ Created local skill: ${updateSkillName}`);
|
|
304
|
-
}
|
|
305
|
-
updateSkillPath = updateSkillDir;
|
|
306
|
-
}
|
|
307
|
-
// If both skills were skipped, return paths to existing skills
|
|
308
|
-
if (!askSkillPath && localSkillExists(navigatorPath, askSkillName)) {
|
|
309
|
-
askSkillPath = askSkillDir;
|
|
310
|
-
}
|
|
311
|
-
if (!updateSkillPath && localSkillExists(navigatorPath, updateSkillName)) {
|
|
312
|
-
updateSkillPath = updateSkillDir;
|
|
313
|
-
}
|
|
314
|
-
return { askSkillPath, updateSkillPath };
|
|
315
|
-
}
|
|
316
|
-
/**
|
|
317
|
-
* Create a symlink from global skills directory to local skill
|
|
318
|
-
*
|
|
319
|
-
* @returns SymlinkResult with status and details
|
|
320
|
-
*/
|
|
321
|
-
export function symlinkSkillToGlobal(localSkillPath, skillName, options = {}) {
|
|
322
|
-
const globalSkillsDir = getGlobalSkillsDir();
|
|
323
|
-
const globalSkillDir = path.join(globalSkillsDir, skillName);
|
|
324
|
-
// Ensure global skills directory exists
|
|
325
|
-
fs.mkdirSync(globalSkillsDir, { recursive: true });
|
|
326
|
-
// Check if global skill already exists
|
|
327
|
-
if (fs.existsSync(globalSkillDir)) {
|
|
328
|
-
// Check if it's already a symlink to the correct location
|
|
329
|
-
if (isSkillSymlink(skillName)) {
|
|
330
|
-
const target = getSkillSymlinkTarget(skillName);
|
|
331
|
-
const resolvedLocal = path.resolve(localSkillPath);
|
|
332
|
-
const resolvedTarget = target ? path.resolve(path.dirname(globalSkillDir), target) : null;
|
|
333
|
-
if (resolvedTarget === resolvedLocal) {
|
|
334
|
-
if (!options.quiet) {
|
|
335
|
-
console.log(`Skill "${skillName}" already linked`);
|
|
336
|
-
}
|
|
337
|
-
return {
|
|
338
|
-
success: true,
|
|
339
|
-
action: "already_linked",
|
|
340
|
-
message: `Skill "${skillName}" already symlinked correctly`,
|
|
341
|
-
skillName,
|
|
342
|
-
localPath: localSkillPath,
|
|
343
|
-
globalPath: globalSkillDir,
|
|
344
|
-
};
|
|
345
|
-
}
|
|
346
|
-
// Symlink exists but points elsewhere
|
|
347
|
-
if (!options.force) {
|
|
348
|
-
if (!options.quiet) {
|
|
349
|
-
console.log(`Conflict: "${skillName}" symlinked to different location: ${target}`);
|
|
350
|
-
}
|
|
351
|
-
return {
|
|
352
|
-
success: false,
|
|
353
|
-
action: "conflict",
|
|
354
|
-
message: `Global skill "${skillName}" already symlinked to different location`,
|
|
355
|
-
skillName,
|
|
356
|
-
localPath: localSkillPath,
|
|
357
|
-
globalPath: globalSkillDir,
|
|
358
|
-
conflictTarget: target ?? undefined,
|
|
359
|
-
};
|
|
360
|
-
}
|
|
361
|
-
// Force: remove existing symlink
|
|
362
|
-
fs.unlinkSync(globalSkillDir);
|
|
363
|
-
}
|
|
364
|
-
else {
|
|
365
|
-
// Regular directory exists (not a symlink)
|
|
366
|
-
if (!options.force) {
|
|
367
|
-
if (!options.quiet) {
|
|
368
|
-
console.log(`Conflict: "${skillName}" exists as regular directory (not symlink)`);
|
|
369
|
-
}
|
|
370
|
-
return {
|
|
371
|
-
success: false,
|
|
372
|
-
action: "conflict",
|
|
373
|
-
message: `Global skill "${skillName}" exists as regular directory, not symlink`,
|
|
374
|
-
skillName,
|
|
375
|
-
localPath: localSkillPath,
|
|
376
|
-
globalPath: globalSkillDir,
|
|
377
|
-
};
|
|
378
|
-
}
|
|
379
|
-
// Force: remove existing directory
|
|
380
|
-
fs.rmSync(globalSkillDir, { recursive: true, force: true });
|
|
381
|
-
}
|
|
382
|
-
}
|
|
383
|
-
// Create symlink
|
|
384
|
-
try {
|
|
385
|
-
fs.symlinkSync(localSkillPath, globalSkillDir, "dir");
|
|
386
|
-
if (!options.quiet) {
|
|
387
|
-
console.log(`Symlinked skill: ${skillName}`);
|
|
388
|
-
}
|
|
389
|
-
return {
|
|
390
|
-
success: true,
|
|
391
|
-
action: "created",
|
|
392
|
-
message: `Created symlink for "${skillName}"`,
|
|
393
|
-
skillName,
|
|
394
|
-
localPath: localSkillPath,
|
|
395
|
-
globalPath: globalSkillDir,
|
|
396
|
-
};
|
|
397
|
-
}
|
|
398
|
-
catch (error) {
|
|
399
|
-
const errorMsg = error instanceof Error ? error.message : String(error);
|
|
400
|
-
if (!options.quiet) {
|
|
401
|
-
console.error(`Failed to create symlink for "${skillName}": ${errorMsg}`);
|
|
402
|
-
}
|
|
403
|
-
return {
|
|
404
|
-
success: false,
|
|
405
|
-
action: "error",
|
|
406
|
-
message: `Failed to create symlink: ${errorMsg}`,
|
|
407
|
-
skillName,
|
|
408
|
-
localPath: localSkillPath,
|
|
409
|
-
globalPath: globalSkillDir,
|
|
410
|
-
};
|
|
411
|
-
}
|
|
412
|
-
}
|
|
413
|
-
/**
|
|
414
|
-
* Remove the global symlink for a skill (preserves local skill)
|
|
415
|
-
*/
|
|
416
|
-
export function removeSkillSymlink(skillName, options = {}) {
|
|
417
|
-
const globalSkillDir = path.join(getGlobalSkillsDir(), skillName);
|
|
418
|
-
if (!fs.existsSync(globalSkillDir)) {
|
|
419
|
-
if (!options.quiet) {
|
|
420
|
-
console.log(`No global skill "${skillName}" found`);
|
|
421
|
-
}
|
|
422
|
-
return {
|
|
423
|
-
success: true,
|
|
424
|
-
wasSymlink: false,
|
|
425
|
-
message: `No global skill "${skillName}" found`,
|
|
426
|
-
};
|
|
427
|
-
}
|
|
428
|
-
if (!isSkillSymlink(skillName)) {
|
|
429
|
-
if (!options.quiet) {
|
|
430
|
-
console.log(`Warning: "${skillName}" is not a symlink, skipping removal`);
|
|
431
|
-
}
|
|
432
|
-
return {
|
|
433
|
-
success: false,
|
|
434
|
-
wasSymlink: false,
|
|
435
|
-
message: `"${skillName}" is a regular directory, not a symlink. Manual removal required.`,
|
|
436
|
-
};
|
|
437
|
-
}
|
|
438
|
-
try {
|
|
439
|
-
fs.unlinkSync(globalSkillDir);
|
|
440
|
-
if (!options.quiet) {
|
|
441
|
-
console.log(`Removed symlink: ${skillName}`);
|
|
442
|
-
}
|
|
443
|
-
return {
|
|
444
|
-
success: true,
|
|
445
|
-
wasSymlink: true,
|
|
446
|
-
message: `Removed symlink for "${skillName}"`,
|
|
447
|
-
};
|
|
448
|
-
}
|
|
449
|
-
catch (error) {
|
|
450
|
-
const errorMsg = error instanceof Error ? error.message : String(error);
|
|
451
|
-
if (!options.quiet) {
|
|
452
|
-
console.error(`Failed to remove symlink for "${skillName}": ${errorMsg}`);
|
|
453
|
-
}
|
|
454
|
-
return {
|
|
455
|
-
success: false,
|
|
456
|
-
wasSymlink: true,
|
|
457
|
-
message: `Failed to remove symlink: ${errorMsg}`,
|
|
458
|
-
};
|
|
459
|
-
}
|
|
460
|
-
}
|
|
461
|
-
/**
|
|
462
|
-
* Create both skills locally AND symlink them globally (recommended for new navigators)
|
|
463
|
-
*
|
|
464
|
-
* This is the preferred method for creating skills as it:
|
|
465
|
-
* 1. Stores both ask and update skills in the navigator's .autonav/skills/ (version-controlled)
|
|
466
|
-
* 2. Symlinks both to ~/.claude/skills/ for global discovery
|
|
467
|
-
*/
|
|
468
|
-
export async function createAndSymlinkSkill(navigatorPath, config, options = {}) {
|
|
469
|
-
// Create both local skills
|
|
470
|
-
const { askSkillPath, updateSkillPath } = await createLocalSkill(navigatorPath, config, options);
|
|
471
|
-
// If both skills were not created (and don't exist), return early
|
|
472
|
-
if (!askSkillPath && !updateSkillPath) {
|
|
473
|
-
return {
|
|
474
|
-
askSkillPath: null,
|
|
475
|
-
updateSkillPath: null,
|
|
476
|
-
askSymlinkResult: null,
|
|
477
|
-
updateSymlinkResult: null,
|
|
478
|
-
};
|
|
479
|
-
}
|
|
480
|
-
// Symlink ask skill to global
|
|
481
|
-
const askSkillName = getSkillName(config.navigatorName);
|
|
482
|
-
const askSymlinkResult = askSkillPath
|
|
483
|
-
? symlinkSkillToGlobal(askSkillPath, askSkillName, options)
|
|
484
|
-
: null;
|
|
485
|
-
// Symlink update skill to global
|
|
486
|
-
const updateSkillName = getUpdateSkillName(config.navigatorName);
|
|
487
|
-
const updateSymlinkResult = updateSkillPath
|
|
488
|
-
? symlinkSkillToGlobal(updateSkillPath, updateSkillName, options)
|
|
489
|
-
: null;
|
|
490
|
-
return {
|
|
491
|
-
askSkillPath,
|
|
492
|
-
updateSkillPath,
|
|
493
|
-
askSymlinkResult,
|
|
494
|
-
updateSymlinkResult,
|
|
495
|
-
};
|
|
496
|
-
}
|
|
497
|
-
/**
|
|
498
|
-
* Discover all local skills in a navigator (both ask and update skills)
|
|
499
|
-
*/
|
|
500
|
-
export function discoverLocalSkills(navigatorPath) {
|
|
501
|
-
const localSkillsDir = getLocalSkillsDir(navigatorPath);
|
|
502
|
-
if (!fs.existsSync(localSkillsDir)) {
|
|
503
|
-
return [];
|
|
504
|
-
}
|
|
505
|
-
const entries = fs.readdirSync(localSkillsDir, { withFileTypes: true });
|
|
506
|
-
return entries
|
|
507
|
-
.filter((entry) => entry.isDirectory() && (entry.name.startsWith("ask-") || entry.name.startsWith("update-")))
|
|
508
|
-
.map((entry) => entry.name);
|
|
509
|
-
}
|
|
510
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/skill-generator/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
# Node modules
|
|
2
|
-
node_modules/
|
|
3
|
-
|
|
4
|
-
# Environment variables
|
|
5
|
-
.env
|
|
6
|
-
.env.local
|
|
7
|
-
|
|
8
|
-
# Plugin credentials (NEVER commit these!)
|
|
9
|
-
.claude/plugins.json
|
|
10
|
-
|
|
11
|
-
# Interview progress (temporary state)
|
|
12
|
-
.autonav-init-progress.json
|
|
13
|
-
|
|
14
|
-
# OS files
|
|
15
|
-
.DS_Store
|
|
16
|
-
Thumbs.db
|
|
17
|
-
|
|
18
|
-
# IDE
|
|
19
|
-
.vscode/
|
|
20
|
-
.idea/
|
|
21
|
-
*.swp
|
|
22
|
-
*.swo
|
|
23
|
-
|
|
24
|
-
# Logs
|
|
25
|
-
*.log
|
|
26
|
-
npm-debug.log*
|
|
@@ -1,114 +0,0 @@
|
|
|
1
|
-
# Navigator: {{NAVIGATOR_NAME}}
|
|
2
|
-
|
|
3
|
-
You are a specialized navigator using the {{PACK_NAME}} knowledge pack.
|
|
4
|
-
|
|
5
|
-
## System Configuration
|
|
6
|
-
|
|
7
|
-
Your domain-specific configuration is in `system-configuration.md`. Read and follow those guidelines carefully.
|
|
8
|
-
|
|
9
|
-
## Your Knowledge Base
|
|
10
|
-
|
|
11
|
-
Your knowledge is located in the `knowledge/` directory. This has been populated from the {{PACK_NAME}} knowledge pack.
|
|
12
|
-
|
|
13
|
-
When answering questions:
|
|
14
|
-
- Always cite specific files and sections
|
|
15
|
-
- Use exact headings and references from the knowledge base
|
|
16
|
-
- If you don't know something, say so explicitly
|
|
17
|
-
- Never make up information not in your knowledge base
|
|
18
|
-
- Follow the guidelines and response format specified in `system-configuration.md`
|
|
19
|
-
|
|
20
|
-
## Agent Identity Protocol
|
|
21
|
-
|
|
22
|
-
**CRITICAL: Always introduce yourself as "{{NAVIGATOR_NAME}}" (NOT "Claude Code")** in cross-navigator communications.
|
|
23
|
-
|
|
24
|
-
### Problem Addressed
|
|
25
|
-
|
|
26
|
-
All Claude Code implementation agents identify as "Claude Code", making it impossible to track which specific implementer worked on which tasks or maintain conversation continuity across sessions.
|
|
27
|
-
|
|
28
|
-
### Solution: Named Agent Tracking
|
|
29
|
-
|
|
30
|
-
When an unknown Claude Code session first contacts you:
|
|
31
|
-
|
|
32
|
-
1. **Check for existing identity:**
|
|
33
|
-
```bash
|
|
34
|
-
grep -r "session-id" knowledge/agents/implementers/
|
|
35
|
-
```
|
|
36
|
-
|
|
37
|
-
2. **If unknown, request introduction:**
|
|
38
|
-
```
|
|
39
|
-
"Hello! I'm {{NAVIGATOR_NAME}}, your specialized navigator.
|
|
40
|
-
|
|
41
|
-
For my records, could you introduce yourself with a name I can use
|
|
42
|
-
to track our work together? I already know: [list existing names].
|
|
43
|
-
Please choose a different common name (like Oliver, Sophia, Marcus)."
|
|
44
|
-
```
|
|
45
|
-
|
|
46
|
-
3. **Create agent profile:**
|
|
47
|
-
- Create `knowledge/agents/implementers/[name].md`
|
|
48
|
-
- Document: projects worked on, communication style, session IDs
|
|
49
|
-
- Reference this agent by name in all future documentation
|
|
50
|
-
- **Format**: 3-5 sentences with YAML frontmatter for metadata
|
|
51
|
-
|
|
52
|
-
4. **Update documentation:**
|
|
53
|
-
- Note which agent is working on which workstream
|
|
54
|
-
- Track conversation references by agent name
|
|
55
|
-
|
|
56
|
-
### Communication Protocol
|
|
57
|
-
|
|
58
|
-
**With peer navigators:**
|
|
59
|
-
|
|
60
|
-
✅ **Correct:**
|
|
61
|
-
```
|
|
62
|
-
{{NAVIGATOR_NAME}} is asking [PeerNavigator] for [requirements/info] on [topic]...
|
|
63
|
-
```
|
|
64
|
-
|
|
65
|
-
❌ **Incorrect:**
|
|
66
|
-
```
|
|
67
|
-
Claude Code is asking [PeerNavigator]...
|
|
68
|
-
```
|
|
69
|
-
|
|
70
|
-
**With implementation agents:**
|
|
71
|
-
|
|
72
|
-
Track agent names in responses and documentation. When an agent reports completion or issues, note their name in documentation for continuity.
|
|
73
|
-
|
|
74
|
-
### Agent Profile Location
|
|
75
|
-
|
|
76
|
-
**Profile path:** `knowledge/agents/implementers/[name].md`
|
|
77
|
-
|
|
78
|
-
**Profile format (3-5 sentences with YAML frontmatter):**
|
|
79
|
-
```yaml
|
|
80
|
-
---
|
|
81
|
-
name: [AgentName]
|
|
82
|
-
firstContact: [Date]
|
|
83
|
-
status: Active
|
|
84
|
-
---
|
|
85
|
-
|
|
86
|
-
[AgentName] is a [specialization] implementer working on [projects/areas].
|
|
87
|
-
[AgentName] is motivated by [interests] and wants to [goals].
|
|
88
|
-
[AgentName] is [personality traits], but sometimes [challenges/needs].
|
|
89
|
-
```
|
|
90
|
-
|
|
91
|
-
## Source Citation
|
|
92
|
-
|
|
93
|
-
Always structure responses with proper source citations as specified in `system-configuration.md`.
|
|
94
|
-
|
|
95
|
-
**IMPORTANT**: When citing sources in the `submit_answer` tool:
|
|
96
|
-
- Use ONLY the filename (e.g., "planting.md"), NOT the full path (NOT "knowledge/planting.md")
|
|
97
|
-
- The knowledge base directory is already known to be `knowledge/`
|
|
98
|
-
- Example: `file: "planting.md"` ✓ NOT `file: "knowledge/planting.md"` ✗
|
|
99
|
-
|
|
100
|
-
Include:
|
|
101
|
-
- Direct answer
|
|
102
|
-
- File path references: [filename.md: Section Heading]
|
|
103
|
-
- Relevant excerpts from sources
|
|
104
|
-
- Confidence level
|
|
105
|
-
|
|
106
|
-
## Response Format
|
|
107
|
-
|
|
108
|
-
The `system-configuration.md` file provides detailed response guidelines for this knowledge pack.
|
|
109
|
-
|
|
110
|
-
Key principles:
|
|
111
|
-
- Always cite specific sources from the knowledge base
|
|
112
|
-
- Be explicit about confidence levels
|
|
113
|
-
- Acknowledge when information is missing or uncertain
|
|
114
|
-
- Follow any domain-specific formatting rules in `system-configuration.md`
|