@autonav/core 1.1.3 → 1.1.5
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 +33 -0
- package/dist/adapter/claude-adapter.d.ts +30 -0
- package/dist/adapter/claude-adapter.d.ts.map +1 -1
- package/dist/adapter/claude-adapter.js +155 -0
- package/dist/adapter/claude-adapter.js.map +1 -1
- package/dist/cli/autonav.d.ts +1 -0
- package/dist/cli/autonav.d.ts.map +1 -1
- package/dist/cli/autonav.js +23 -4
- package/dist/cli/autonav.js.map +1 -1
- package/dist/cli/nav-init.js +86 -13
- package/dist/cli/nav-init.js.map +1 -1
- package/dist/cli/nav-install.d.ts +3 -0
- package/dist/cli/nav-install.d.ts.map +1 -0
- package/dist/cli/nav-install.js +101 -0
- package/dist/cli/nav-install.js.map +1 -0
- package/dist/cli/nav-uninstall.d.ts +3 -0
- package/dist/cli/nav-uninstall.d.ts.map +1 -0
- package/dist/cli/nav-uninstall.js +123 -0
- package/dist/cli/nav-uninstall.js.map +1 -0
- package/dist/cli/nav-update.d.ts +3 -0
- package/dist/cli/nav-update.d.ts.map +1 -0
- package/dist/cli/nav-update.js +131 -0
- package/dist/cli/nav-update.js.map +1 -0
- package/dist/interview/App.d.ts +7 -1
- package/dist/interview/App.d.ts.map +1 -1
- package/dist/interview/App.js +211 -17
- package/dist/interview/App.js.map +1 -1
- package/dist/interview/index.d.ts +9 -2
- package/dist/interview/index.d.ts.map +1 -1
- package/dist/interview/index.js +12 -3
- package/dist/interview/index.js.map +1 -1
- package/dist/interview/progress.d.ts +55 -0
- package/dist/interview/progress.d.ts.map +1 -0
- package/dist/interview/progress.js +88 -0
- package/dist/interview/progress.js.map +1 -0
- package/dist/interview/prompts.d.ts +4 -1
- package/dist/interview/prompts.d.ts.map +1 -1
- package/dist/interview/prompts.js +46 -7
- package/dist/interview/prompts.js.map +1 -1
- package/dist/pack-installer/index.d.ts.map +1 -1
- package/dist/pack-installer/index.js +14 -2
- package/dist/pack-installer/index.js.map +1 -1
- package/dist/skill-generator/index.d.ts +89 -4
- package/dist/skill-generator/index.d.ts.map +1 -1
- package/dist/skill-generator/index.js +364 -143
- package/dist/skill-generator/index.js.map +1 -1
- package/dist/templates/.gitignore.template +3 -0
- package/package.json +11 -1
- package/dist/templates/CLAUDE-import.md.template +0 -90
|
@@ -2,18 +2,65 @@ import * as fs from "node:fs";
|
|
|
2
2
|
import * as path from "node:path";
|
|
3
3
|
import os from "node:os";
|
|
4
4
|
/**
|
|
5
|
-
* Get the global skills directory path
|
|
5
|
+
* Get the global skills directory path (~/.claude/skills/)
|
|
6
6
|
*/
|
|
7
7
|
export function getGlobalSkillsDir() {
|
|
8
8
|
return path.join(os.homedir(), ".claude", "skills");
|
|
9
9
|
}
|
|
10
10
|
/**
|
|
11
|
-
*
|
|
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
|
|
12
24
|
*/
|
|
13
25
|
export function skillExists(skillName) {
|
|
14
26
|
const skillDir = path.join(getGlobalSkillsDir(), skillName);
|
|
15
27
|
return fs.existsSync(skillDir);
|
|
16
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
|
+
}
|
|
17
64
|
/**
|
|
18
65
|
* Generate the skill name from navigator name
|
|
19
66
|
*/
|
|
@@ -22,6 +69,14 @@ export function getSkillName(navigatorName) {
|
|
|
22
69
|
const normalized = navigatorName.toLowerCase().replace(/[_\s]+/g, "-");
|
|
23
70
|
return `ask-${normalized}`;
|
|
24
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
|
+
}
|
|
25
80
|
/**
|
|
26
81
|
* Generate the SKILL.md content for a navigator
|
|
27
82
|
*/
|
|
@@ -30,159 +85,95 @@ export function generateSkillContent(config) {
|
|
|
30
85
|
const navPath = config.navigatorPath;
|
|
31
86
|
return `---
|
|
32
87
|
name: ${skillName}
|
|
33
|
-
description:
|
|
88
|
+
description: Query ${config.navigatorName} navigator about ${config.description}. Use when user asks to "ask ${config.navigatorName}" or needs information from this knowledge base.
|
|
34
89
|
---
|
|
35
90
|
|
|
36
|
-
# Ask ${config.navigatorName}
|
|
91
|
+
# Ask ${config.navigatorName}
|
|
92
|
+
|
|
93
|
+
Query the **${config.navigatorName}** navigator for information.
|
|
37
94
|
|
|
38
|
-
|
|
39
|
-
Facilitate conversations with the **${config.navigatorName}** navigator located at \`${navPath}\`.
|
|
95
|
+
**Navigator Location**: \`${navPath}\`
|
|
40
96
|
|
|
41
97
|
${config.description}
|
|
42
98
|
|
|
43
99
|
${config.scope ? `**Scope**: ${config.scope}\n` : ""}
|
|
44
100
|
${config.audience ? `**Audience**: ${config.audience}\n` : ""}
|
|
45
101
|
|
|
46
|
-
##
|
|
47
|
-
|
|
48
|
-
Use this skill when the user:
|
|
49
|
-
- Asks to "ask ${config.navigatorName.toLowerCase()}" or "query ${config.navigatorName.toLowerCase()}"
|
|
50
|
-
- Needs information from the ${config.navigatorName} knowledge base
|
|
51
|
-
- Wants to consult this navigator's domain expertise
|
|
52
|
-
|
|
53
|
-
## Communication Protocol
|
|
54
|
-
|
|
55
|
-
This navigator uses the Autonav communication layer for structured interactions.
|
|
56
|
-
|
|
57
|
-
### Query Format (NavigatorQuery)
|
|
58
|
-
\`\`\`json
|
|
59
|
-
{
|
|
60
|
-
"protocolVersion": "1.0.0",
|
|
61
|
-
"fromNavigator": "<your-navigator-name>",
|
|
62
|
-
"toNavigator": "${config.navigatorName}",
|
|
63
|
-
"question": "<the question>",
|
|
64
|
-
"context": "<optional context>",
|
|
65
|
-
"reason": "needs_specialist"
|
|
66
|
-
}
|
|
67
|
-
\`\`\`
|
|
68
|
-
|
|
69
|
-
### Response Format (NavigatorResponse)
|
|
70
|
-
\`\`\`json
|
|
71
|
-
{
|
|
72
|
-
"protocolVersion": "1.0.0",
|
|
73
|
-
"query": "<original question>",
|
|
74
|
-
"answer": "<grounded answer with citations>",
|
|
75
|
-
"sources": [
|
|
76
|
-
{
|
|
77
|
-
"filePath": "path/to/file.md",
|
|
78
|
-
"excerpt": "exact quote",
|
|
79
|
-
"section": "section heading"
|
|
80
|
-
}
|
|
81
|
-
],
|
|
82
|
-
"confidence": 0.85
|
|
83
|
-
}
|
|
84
|
-
\`\`\`
|
|
102
|
+
## How to Use
|
|
85
103
|
|
|
86
|
-
|
|
104
|
+
Simply use \`autonav query\` to ask questions:
|
|
87
105
|
|
|
88
|
-
### Starting a New Conversation
|
|
89
|
-
|
|
90
|
-
1. Generate a session UUID:
|
|
91
106
|
\`\`\`bash
|
|
92
|
-
|
|
107
|
+
autonav query "${navPath}" "your question here"
|
|
93
108
|
\`\`\`
|
|
94
109
|
|
|
95
|
-
|
|
96
|
-
\`\`\`bash
|
|
97
|
-
cd "${navPath}" && claude -p --session-id "$UUID" "$message"
|
|
98
|
-
\`\`\`
|
|
110
|
+
The navigator will provide grounded answers with sources from its knowledge base.
|
|
99
111
|
|
|
100
|
-
|
|
112
|
+
## What This Navigator Knows
|
|
101
113
|
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
114
|
+
This navigator specializes in ${config.scope || 'its configured domain'} and follows strict grounding rules:
|
|
115
|
+
- Always cites sources from the knowledge base
|
|
116
|
+
- Never invents information
|
|
117
|
+
- Acknowledges uncertainty with confidence scores
|
|
118
|
+
- Only references files that actually exist
|
|
119
|
+
`;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Generate the update skill content for a navigator (with write permissions)
|
|
123
|
+
*/
|
|
124
|
+
export function generateUpdateSkillContent(config) {
|
|
125
|
+
const skillName = getUpdateSkillName(config.navigatorName);
|
|
126
|
+
const navPath = config.navigatorPath;
|
|
127
|
+
return `---
|
|
128
|
+
name: ${skillName}
|
|
129
|
+
description: Update ${config.navigatorName} navigator's documentation and knowledge base. Use when reporting implementation progress, documenting issues, or updating knowledge about ${config.description}.
|
|
130
|
+
---
|
|
105
131
|
|
|
106
|
-
|
|
132
|
+
# Update ${config.navigatorName}
|
|
107
133
|
|
|
108
|
-
|
|
109
|
-
\`\`\`bash
|
|
110
|
-
autonav query "${navPath}" "your question here"
|
|
111
|
-
\`\`\`
|
|
134
|
+
Update the **${config.navigatorName}** navigator's documentation and knowledge base.
|
|
112
135
|
|
|
113
|
-
|
|
136
|
+
**Navigator Location**: \`${navPath}\`
|
|
114
137
|
|
|
115
|
-
|
|
116
|
-
1. **Context** - What you're working on
|
|
117
|
-
2. **Question** - Specific question for this navigator
|
|
118
|
-
3. **Expected format** - If you need structured output
|
|
138
|
+
${config.description}
|
|
119
139
|
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
Hi ${config.navigatorName}! I'm working on [context].
|
|
140
|
+
${config.scope ? `**Scope**: ${config.scope}\n` : ""}
|
|
141
|
+
${config.audience ? `**Audience**: ${config.audience}\n` : ""}
|
|
123
142
|
|
|
124
|
-
|
|
143
|
+
## When to Use
|
|
125
144
|
|
|
126
|
-
|
|
127
|
-
|
|
145
|
+
Use this skill to:
|
|
146
|
+
- Report implementation progress or issues
|
|
147
|
+
- Update documentation after making changes
|
|
148
|
+
- Add new knowledge or learnings
|
|
149
|
+
- Document troubleshooting steps
|
|
150
|
+
- Create status reports or logs
|
|
128
151
|
|
|
129
|
-
##
|
|
152
|
+
## How to Use
|
|
130
153
|
|
|
131
|
-
|
|
132
|
-
\`\`\`bash
|
|
133
|
-
autonav query "${navPath}" "How do I configure X?"
|
|
134
|
-
\`\`\`
|
|
154
|
+
Simply use \`autonav update\` to send an update message:
|
|
135
155
|
|
|
136
|
-
### Interactive Session
|
|
137
156
|
\`\`\`bash
|
|
138
|
-
|
|
139
|
-
|
|
157
|
+
autonav update "${navPath}" "your update message"
|
|
158
|
+
\`\`\`
|
|
140
159
|
|
|
141
|
-
|
|
142
|
-
cd "${navPath}" && claude -p --session-id "$UUID" \\
|
|
143
|
-
"I need help understanding the architecture. Can you explain the main components?"
|
|
160
|
+
**Example updates:**
|
|
144
161
|
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
162
|
+
Report progress:
|
|
163
|
+
\`\`\`bash
|
|
164
|
+
autonav update "${navPath}" "I completed feature X. Please document this in the knowledge base."
|
|
148
165
|
\`\`\`
|
|
149
166
|
|
|
150
|
-
|
|
167
|
+
Log an issue:
|
|
151
168
|
\`\`\`bash
|
|
152
|
-
|
|
153
|
-
"Please update the configuration to enable feature X"
|
|
169
|
+
autonav update "${navPath}" "Encountered error Y during deployment. Add this to troubleshooting docs."
|
|
154
170
|
\`\`\`
|
|
155
171
|
|
|
156
|
-
##
|
|
157
|
-
|
|
158
|
-
1. **Provide Context** - Give enough information for grounded answers
|
|
159
|
-
2. **Be Specific** - Focused questions get better answers
|
|
160
|
-
3. **Request Sources** - Ask for citations to verify grounding
|
|
161
|
-
4. **Check Confidence** - Low confidence answers may need human review
|
|
162
|
-
5. **Use Structured Queries** - For programmatic access, use the NavigatorQuery format
|
|
163
|
-
|
|
164
|
-
## Grounding Rules
|
|
165
|
-
|
|
166
|
-
This navigator follows strict grounding rules:
|
|
167
|
-
- Always cites sources from the knowledge base
|
|
168
|
-
- Never invents information
|
|
169
|
-
- Acknowledges uncertainty with confidence scores
|
|
170
|
-
- Only references files that actually exist
|
|
171
|
-
|
|
172
|
-
## Tool Usage
|
|
173
|
-
|
|
174
|
-
- Use \`Bash\` tool to communicate with the navigator
|
|
175
|
-
- Always \`cd\` to the navigator directory first
|
|
176
|
-
- Use \`-p\` flag for prompt mode
|
|
177
|
-
- Store UUIDs for multi-turn conversations
|
|
178
|
-
- Add \`--permission-mode acceptEdits\` only when edits are needed and confirmed
|
|
172
|
+
## Important
|
|
179
173
|
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
-
|
|
183
|
-
- Each conversation needs a unique UUID for session tracking
|
|
184
|
-
- Use \`autonav query\` for simple one-off questions
|
|
185
|
-
- Use \`claude -p --session-id\` for multi-turn conversations
|
|
174
|
+
- This command grants **write permissions** to the navigator
|
|
175
|
+
- Changes are made directly to files in the knowledge base
|
|
176
|
+
- Always review edits before committing to version control
|
|
186
177
|
`;
|
|
187
178
|
}
|
|
188
179
|
/**
|
|
@@ -193,44 +184,274 @@ This navigator follows strict grounding rules:
|
|
|
193
184
|
* @returns Path to the created skill directory, or null if skipped
|
|
194
185
|
*/
|
|
195
186
|
export async function createNavigatorSkill(config, options = {}) {
|
|
196
|
-
const
|
|
187
|
+
const askSkillName = getSkillName(config.navigatorName);
|
|
188
|
+
const updateSkillName = getUpdateSkillName(config.navigatorName);
|
|
197
189
|
const skillsDir = getGlobalSkillsDir();
|
|
198
|
-
const
|
|
199
|
-
|
|
200
|
-
|
|
190
|
+
const askSkillDir = path.join(skillsDir, askSkillName);
|
|
191
|
+
const updateSkillDir = path.join(skillsDir, updateSkillName);
|
|
192
|
+
// Ensure skills directory exists
|
|
193
|
+
fs.mkdirSync(skillsDir, { recursive: true });
|
|
194
|
+
// Create "ask" skill
|
|
195
|
+
if (skillExists(askSkillName) && !options.force) {
|
|
196
|
+
if (!options.quiet) {
|
|
197
|
+
console.log(`⏭️ Skill "${askSkillName}" already exists (use --force to overwrite)`);
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
else {
|
|
201
|
+
fs.mkdirSync(askSkillDir, { recursive: true });
|
|
202
|
+
const askSkillContent = generateSkillContent(config);
|
|
203
|
+
fs.writeFileSync(path.join(askSkillDir, "SKILL.md"), askSkillContent);
|
|
204
|
+
if (!options.quiet) {
|
|
205
|
+
console.log(`✓ Created global skill: ${askSkillName}`);
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
// Create "update" skill
|
|
209
|
+
if (skillExists(updateSkillName) && !options.force) {
|
|
210
|
+
if (!options.quiet) {
|
|
211
|
+
console.log(`⏭️ Skill "${updateSkillName}" already exists (use --force to overwrite)`);
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
else {
|
|
215
|
+
fs.mkdirSync(updateSkillDir, { recursive: true });
|
|
216
|
+
const updateSkillContent = generateUpdateSkillContent(config);
|
|
217
|
+
fs.writeFileSync(path.join(updateSkillDir, "SKILL.md"), updateSkillContent);
|
|
218
|
+
if (!options.quiet) {
|
|
219
|
+
console.log(`✓ Created global skill: ${updateSkillName}`);
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
return askSkillDir;
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* Remove a navigator skill (both ask and update skills, global only)
|
|
226
|
+
*/
|
|
227
|
+
export function removeNavigatorSkill(navigatorName, options = {}) {
|
|
228
|
+
const askSkillName = getSkillName(navigatorName);
|
|
229
|
+
const updateSkillName = getUpdateSkillName(navigatorName);
|
|
230
|
+
const skillsDir = getGlobalSkillsDir();
|
|
231
|
+
const askSkillDir = path.join(skillsDir, askSkillName);
|
|
232
|
+
const updateSkillDir = path.join(skillsDir, updateSkillName);
|
|
233
|
+
let removedAny = false;
|
|
234
|
+
// Remove ask skill
|
|
235
|
+
if (fs.existsSync(askSkillDir)) {
|
|
236
|
+
fs.rmSync(askSkillDir, { recursive: true, force: true });
|
|
237
|
+
if (!options.quiet) {
|
|
238
|
+
console.log(`Removed skill: ${askSkillName}`);
|
|
239
|
+
}
|
|
240
|
+
removedAny = true;
|
|
241
|
+
}
|
|
242
|
+
// Remove update skill
|
|
243
|
+
if (fs.existsSync(updateSkillDir)) {
|
|
244
|
+
fs.rmSync(updateSkillDir, { recursive: true, force: true });
|
|
245
|
+
if (!options.quiet) {
|
|
246
|
+
console.log(`Removed skill: ${updateSkillName}`);
|
|
247
|
+
}
|
|
248
|
+
removedAny = true;
|
|
249
|
+
}
|
|
250
|
+
if (!removedAny && !options.quiet) {
|
|
251
|
+
console.log(`No skills found for navigator "${navigatorName}"`);
|
|
252
|
+
}
|
|
253
|
+
return removedAny;
|
|
254
|
+
}
|
|
255
|
+
/**
|
|
256
|
+
* Create a skill locally in the navigator's .autonav/skills/ directory
|
|
257
|
+
*/
|
|
258
|
+
export async function createLocalSkill(navigatorPath, config, options = {}) {
|
|
259
|
+
const skillName = getSkillName(config.navigatorName);
|
|
260
|
+
const localSkillsDir = getLocalSkillsDir(navigatorPath);
|
|
261
|
+
const localSkillDir = path.join(localSkillsDir, skillName);
|
|
262
|
+
// Check if skill already exists locally
|
|
263
|
+
if (localSkillExists(navigatorPath, skillName) && !options.force) {
|
|
201
264
|
if (!options.quiet) {
|
|
202
|
-
console.log(
|
|
265
|
+
console.log(`Skill "${skillName}" already exists locally (use --force to overwrite)`);
|
|
203
266
|
}
|
|
204
267
|
return null;
|
|
205
268
|
}
|
|
206
|
-
// Ensure skills directory exists
|
|
207
|
-
fs.mkdirSync(
|
|
208
|
-
// Create skill directory
|
|
209
|
-
fs.mkdirSync(
|
|
269
|
+
// Ensure local skills directory exists
|
|
270
|
+
fs.mkdirSync(localSkillsDir, { recursive: true });
|
|
271
|
+
// Create local skill directory
|
|
272
|
+
fs.mkdirSync(localSkillDir, { recursive: true });
|
|
210
273
|
// Generate and write SKILL.md
|
|
211
274
|
const skillContent = generateSkillContent(config);
|
|
212
|
-
fs.writeFileSync(path.join(
|
|
275
|
+
fs.writeFileSync(path.join(localSkillDir, "SKILL.md"), skillContent);
|
|
213
276
|
if (!options.quiet) {
|
|
214
|
-
console.log(
|
|
277
|
+
console.log(`Created local skill: ${skillName}`);
|
|
215
278
|
}
|
|
216
|
-
return
|
|
279
|
+
return localSkillDir;
|
|
217
280
|
}
|
|
218
281
|
/**
|
|
219
|
-
*
|
|
282
|
+
* Create a symlink from global skills directory to local skill
|
|
283
|
+
*
|
|
284
|
+
* @returns SymlinkResult with status and details
|
|
220
285
|
*/
|
|
221
|
-
export function
|
|
222
|
-
const
|
|
223
|
-
const
|
|
224
|
-
|
|
286
|
+
export function symlinkSkillToGlobal(localSkillPath, skillName, options = {}) {
|
|
287
|
+
const globalSkillsDir = getGlobalSkillsDir();
|
|
288
|
+
const globalSkillDir = path.join(globalSkillsDir, skillName);
|
|
289
|
+
// Ensure global skills directory exists
|
|
290
|
+
fs.mkdirSync(globalSkillsDir, { recursive: true });
|
|
291
|
+
// Check if global skill already exists
|
|
292
|
+
if (fs.existsSync(globalSkillDir)) {
|
|
293
|
+
// Check if it's already a symlink to the correct location
|
|
294
|
+
if (isSkillSymlink(skillName)) {
|
|
295
|
+
const target = getSkillSymlinkTarget(skillName);
|
|
296
|
+
const resolvedLocal = path.resolve(localSkillPath);
|
|
297
|
+
const resolvedTarget = target ? path.resolve(path.dirname(globalSkillDir), target) : null;
|
|
298
|
+
if (resolvedTarget === resolvedLocal) {
|
|
299
|
+
if (!options.quiet) {
|
|
300
|
+
console.log(`Skill "${skillName}" already linked`);
|
|
301
|
+
}
|
|
302
|
+
return {
|
|
303
|
+
success: true,
|
|
304
|
+
action: "already_linked",
|
|
305
|
+
message: `Skill "${skillName}" already symlinked correctly`,
|
|
306
|
+
skillName,
|
|
307
|
+
localPath: localSkillPath,
|
|
308
|
+
globalPath: globalSkillDir,
|
|
309
|
+
};
|
|
310
|
+
}
|
|
311
|
+
// Symlink exists but points elsewhere
|
|
312
|
+
if (!options.force) {
|
|
313
|
+
if (!options.quiet) {
|
|
314
|
+
console.log(`Conflict: "${skillName}" symlinked to different location: ${target}`);
|
|
315
|
+
}
|
|
316
|
+
return {
|
|
317
|
+
success: false,
|
|
318
|
+
action: "conflict",
|
|
319
|
+
message: `Global skill "${skillName}" already symlinked to different location`,
|
|
320
|
+
skillName,
|
|
321
|
+
localPath: localSkillPath,
|
|
322
|
+
globalPath: globalSkillDir,
|
|
323
|
+
conflictTarget: target ?? undefined,
|
|
324
|
+
};
|
|
325
|
+
}
|
|
326
|
+
// Force: remove existing symlink
|
|
327
|
+
fs.unlinkSync(globalSkillDir);
|
|
328
|
+
}
|
|
329
|
+
else {
|
|
330
|
+
// Regular directory exists (not a symlink)
|
|
331
|
+
if (!options.force) {
|
|
332
|
+
if (!options.quiet) {
|
|
333
|
+
console.log(`Conflict: "${skillName}" exists as regular directory (not symlink)`);
|
|
334
|
+
}
|
|
335
|
+
return {
|
|
336
|
+
success: false,
|
|
337
|
+
action: "conflict",
|
|
338
|
+
message: `Global skill "${skillName}" exists as regular directory, not symlink`,
|
|
339
|
+
skillName,
|
|
340
|
+
localPath: localSkillPath,
|
|
341
|
+
globalPath: globalSkillDir,
|
|
342
|
+
};
|
|
343
|
+
}
|
|
344
|
+
// Force: remove existing directory
|
|
345
|
+
fs.rmSync(globalSkillDir, { recursive: true, force: true });
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
// Create symlink
|
|
349
|
+
try {
|
|
350
|
+
fs.symlinkSync(localSkillPath, globalSkillDir, "dir");
|
|
225
351
|
if (!options.quiet) {
|
|
226
|
-
console.log(
|
|
352
|
+
console.log(`Symlinked skill: ${skillName}`);
|
|
227
353
|
}
|
|
228
|
-
return
|
|
354
|
+
return {
|
|
355
|
+
success: true,
|
|
356
|
+
action: "created",
|
|
357
|
+
message: `Created symlink for "${skillName}"`,
|
|
358
|
+
skillName,
|
|
359
|
+
localPath: localSkillPath,
|
|
360
|
+
globalPath: globalSkillDir,
|
|
361
|
+
};
|
|
229
362
|
}
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
363
|
+
catch (error) {
|
|
364
|
+
const errorMsg = error instanceof Error ? error.message : String(error);
|
|
365
|
+
if (!options.quiet) {
|
|
366
|
+
console.error(`Failed to create symlink for "${skillName}": ${errorMsg}`);
|
|
367
|
+
}
|
|
368
|
+
return {
|
|
369
|
+
success: false,
|
|
370
|
+
action: "error",
|
|
371
|
+
message: `Failed to create symlink: ${errorMsg}`,
|
|
372
|
+
skillName,
|
|
373
|
+
localPath: localSkillPath,
|
|
374
|
+
globalPath: globalSkillDir,
|
|
375
|
+
};
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
/**
|
|
379
|
+
* Remove the global symlink for a skill (preserves local skill)
|
|
380
|
+
*/
|
|
381
|
+
export function removeSkillSymlink(skillName, options = {}) {
|
|
382
|
+
const globalSkillDir = path.join(getGlobalSkillsDir(), skillName);
|
|
383
|
+
if (!fs.existsSync(globalSkillDir)) {
|
|
384
|
+
if (!options.quiet) {
|
|
385
|
+
console.log(`No global skill "${skillName}" found`);
|
|
386
|
+
}
|
|
387
|
+
return {
|
|
388
|
+
success: true,
|
|
389
|
+
wasSymlink: false,
|
|
390
|
+
message: `No global skill "${skillName}" found`,
|
|
391
|
+
};
|
|
392
|
+
}
|
|
393
|
+
if (!isSkillSymlink(skillName)) {
|
|
394
|
+
if (!options.quiet) {
|
|
395
|
+
console.log(`Warning: "${skillName}" is not a symlink, skipping removal`);
|
|
396
|
+
}
|
|
397
|
+
return {
|
|
398
|
+
success: false,
|
|
399
|
+
wasSymlink: false,
|
|
400
|
+
message: `"${skillName}" is a regular directory, not a symlink. Manual removal required.`,
|
|
401
|
+
};
|
|
402
|
+
}
|
|
403
|
+
try {
|
|
404
|
+
fs.unlinkSync(globalSkillDir);
|
|
405
|
+
if (!options.quiet) {
|
|
406
|
+
console.log(`Removed symlink: ${skillName}`);
|
|
407
|
+
}
|
|
408
|
+
return {
|
|
409
|
+
success: true,
|
|
410
|
+
wasSymlink: true,
|
|
411
|
+
message: `Removed symlink for "${skillName}"`,
|
|
412
|
+
};
|
|
413
|
+
}
|
|
414
|
+
catch (error) {
|
|
415
|
+
const errorMsg = error instanceof Error ? error.message : String(error);
|
|
416
|
+
if (!options.quiet) {
|
|
417
|
+
console.error(`Failed to remove symlink for "${skillName}": ${errorMsg}`);
|
|
418
|
+
}
|
|
419
|
+
return {
|
|
420
|
+
success: false,
|
|
421
|
+
wasSymlink: true,
|
|
422
|
+
message: `Failed to remove symlink: ${errorMsg}`,
|
|
423
|
+
};
|
|
424
|
+
}
|
|
425
|
+
}
|
|
426
|
+
/**
|
|
427
|
+
* Create a skill locally AND symlink it globally (recommended for new navigators)
|
|
428
|
+
*
|
|
429
|
+
* This is the preferred method for creating skills as it:
|
|
430
|
+
* 1. Stores the skill in the navigator's .autonav/skills/ (version-controlled)
|
|
431
|
+
* 2. Symlinks to ~/.claude/skills/ for global discovery
|
|
432
|
+
*/
|
|
433
|
+
export async function createAndSymlinkSkill(navigatorPath, config, options = {}) {
|
|
434
|
+
// Create local skill
|
|
435
|
+
const localPath = await createLocalSkill(navigatorPath, config, options);
|
|
436
|
+
if (!localPath) {
|
|
437
|
+
return { localPath: null, symlinkResult: null };
|
|
438
|
+
}
|
|
439
|
+
// Symlink to global
|
|
440
|
+
const skillName = getSkillName(config.navigatorName);
|
|
441
|
+
const symlinkResult = symlinkSkillToGlobal(localPath, skillName, options);
|
|
442
|
+
return { localPath, symlinkResult };
|
|
443
|
+
}
|
|
444
|
+
/**
|
|
445
|
+
* Discover all local skills in a navigator
|
|
446
|
+
*/
|
|
447
|
+
export function discoverLocalSkills(navigatorPath) {
|
|
448
|
+
const localSkillsDir = getLocalSkillsDir(navigatorPath);
|
|
449
|
+
if (!fs.existsSync(localSkillsDir)) {
|
|
450
|
+
return [];
|
|
233
451
|
}
|
|
234
|
-
|
|
452
|
+
const entries = fs.readdirSync(localSkillsDir, { withFileTypes: true });
|
|
453
|
+
return entries
|
|
454
|
+
.filter((entry) => entry.isDirectory() && entry.name.startsWith("ask-"))
|
|
455
|
+
.map((entry) => entry.name);
|
|
235
456
|
}
|
|
236
457
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/skill-generator/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,MAAM,SAAS,CAAC;AAsBzB;;GAEG;AACH,MAAM,UAAU,kBAAkB;IAChC,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;AACtD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,SAAiB;IAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE,SAAS,CAAC,CAAC;IAC5D,OAAO,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;AACjC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,aAAqB;IAChD,gEAAgE;IAChE,MAAM,UAAU,GAAG,aAAa,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;IACvE,OAAO,OAAO,UAAU,EAAE,CAAC;AAC7B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAAmB;IACtD,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;IACrD,MAAM,OAAO,GAAG,MAAM,CAAC,aAAa,CAAC;IAErC,OAAO;QACD,SAAS;4BACW,MAAM,CAAC,aAAa,kCAAkC,MAAM,CAAC,WAAW,gCAAgC,MAAM,CAAC,aAAa;;;QAGhJ,MAAM,CAAC,aAAa;;;sCAGU,MAAM,CAAC,aAAa,6BAA6B,OAAO;;EAE5F,MAAM,CAAC,WAAW;;EAElB,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,cAAc,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE;EAClD,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,iBAAiB,MAAM,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC,EAAE;;;;;iBAK5C,MAAM,CAAC,aAAa,CAAC,WAAW,EAAE,eAAe,MAAM,CAAC,aAAa,CAAC,WAAW,EAAE;+BACrE,MAAM,CAAC,aAAa;;;;;;;;;;;;oBAY/B,MAAM,CAAC,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAmClC,OAAO;;;;;;MAMP,OAAO;;;;;;;iBAOI,OAAO;;;;;;;;;;;;KAYnB,MAAM,CAAC,aAAa;;;;;;;;;;;iBAWR,OAAO;;;;;;;;;MASlB,OAAO;;;;MAIP,OAAO;;;;;;MAMP,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;0BA8Ba,OAAO;;;;CAIhC,CAAC;AACF,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,MAAmB,EACnB,UAGI,EAAE;IAEN,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;IACrD,MAAM,SAAS,GAAG,kBAAkB,EAAE,CAAC;IACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IAEjD,gCAAgC;IAChC,IAAI,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QAC7C,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YACnB,OAAO,CAAC,GAAG,CAAC,cAAc,SAAS,6CAA6C,CAAC,CAAC;QACpF,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,iCAAiC;IACjC,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE7C,yBAAyB;IACzB,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE5C,8BAA8B;IAC9B,MAAM,YAAY,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAClD,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,EAAE,YAAY,CAAC,CAAC;IAEhE,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACnB,OAAO,CAAC,GAAG,CAAC,2BAA2B,SAAS,EAAE,CAAC,CAAC;IACtD,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAClC,aAAqB,EACrB,UAA+B,EAAE;IAEjC,MAAM,SAAS,GAAG,YAAY,CAAC,aAAa,CAAC,CAAC;IAC9C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE,SAAS,CAAC,CAAC;IAE5D,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7B,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YACnB,OAAO,CAAC,GAAG,CAAC,cAAc,SAAS,kBAAkB,CAAC,CAAC;QACzD,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,EAAE,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAEtD,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACnB,OAAO,CAAC,GAAG,CAAC,oBAAoB,SAAS,EAAE,CAAC,CAAC;IAC/C,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/skill-generator/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@autonav/core",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.5",
|
|
4
4
|
"description": "CLI tools and Claude SDK Adapter for Autonav navigators",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -63,10 +63,20 @@
|
|
|
63
63
|
"zod": "^3.24.1"
|
|
64
64
|
},
|
|
65
65
|
"devDependencies": {
|
|
66
|
+
"@testing-library/react": "^14.0.0",
|
|
66
67
|
"@types/node": "^20.0.0",
|
|
67
68
|
"@types/react": "^18.3.0",
|
|
68
69
|
"@types/tar": "^6.1.0",
|
|
70
|
+
"ink-testing-library": "^4.0.0",
|
|
69
71
|
"typescript": "^5.3.0",
|
|
70
72
|
"vitest": "^1.2.0"
|
|
73
|
+
},
|
|
74
|
+
"peerDependencies": {
|
|
75
|
+
"langsmith": "^0.3.0"
|
|
76
|
+
},
|
|
77
|
+
"peerDependenciesMeta": {
|
|
78
|
+
"langsmith": {
|
|
79
|
+
"optional": true
|
|
80
|
+
}
|
|
71
81
|
}
|
|
72
82
|
}
|