@autonav/core 1.4.0 → 1.6.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/autonav.d.ts +1 -0
- package/dist/cli/autonav.d.ts.map +1 -1
- package/dist/cli/autonav.js +7 -0
- package/dist/cli/autonav.js.map +1 -1
- package/dist/cli/nav-init.js +17 -3
- package/dist/cli/nav-init.js.map +1 -1
- package/dist/cli/nav-memento.d.ts +20 -0
- package/dist/cli/nav-memento.d.ts.map +1 -0
- package/dist/cli/nav-memento.js +179 -0
- package/dist/cli/nav-memento.js.map +1 -0
- package/dist/cli/nav-mend.js +7 -0
- package/dist/cli/nav-mend.js.map +1 -1
- package/dist/memento/git-operations.d.ts +95 -0
- package/dist/memento/git-operations.d.ts.map +1 -0
- package/dist/memento/git-operations.js +256 -0
- package/dist/memento/git-operations.js.map +1 -0
- package/dist/memento/index.d.ts +31 -0
- package/dist/memento/index.d.ts.map +1 -0
- package/dist/memento/index.js +38 -0
- package/dist/memento/index.js.map +1 -0
- package/dist/memento/loop.d.ts +33 -0
- package/dist/memento/loop.d.ts.map +1 -0
- package/dist/memento/loop.js +535 -0
- package/dist/memento/loop.js.map +1 -0
- package/dist/memento/matrix-animation.d.ts +77 -0
- package/dist/memento/matrix-animation.d.ts.map +1 -0
- package/dist/memento/matrix-animation.js +228 -0
- package/dist/memento/matrix-animation.js.map +1 -0
- package/dist/memento/nav-protocol.d.ts +30 -0
- package/dist/memento/nav-protocol.d.ts.map +1 -0
- package/dist/memento/nav-protocol.js +79 -0
- package/dist/memento/nav-protocol.js.map +1 -0
- package/dist/memento/prompts.d.ts +44 -0
- package/dist/memento/prompts.d.ts.map +1 -0
- package/dist/memento/prompts.js +168 -0
- package/dist/memento/prompts.js.map +1 -0
- package/dist/memento/state.d.ts +56 -0
- package/dist/memento/state.d.ts.map +1 -0
- package/dist/memento/state.js +156 -0
- package/dist/memento/state.js.map +1 -0
- package/dist/memento/types.d.ts +123 -0
- package/dist/memento/types.d.ts.map +1 -0
- package/dist/memento/types.js +30 -0
- package/dist/memento/types.js.map +1 -0
- package/dist/memento/worker-agent.d.ts +30 -0
- package/dist/memento/worker-agent.d.ts.map +1 -0
- package/dist/memento/worker-agent.js +109 -0
- package/dist/memento/worker-agent.js.map +1 -0
- package/dist/mend/index.d.ts +6 -0
- package/dist/mend/index.d.ts.map +1 -1
- package/dist/mend/index.js +92 -1
- package/dist/mend/index.js.map +1 -1
- package/dist/mend/llm-review.d.ts +18 -0
- package/dist/mend/llm-review.d.ts.map +1 -0
- package/dist/mend/llm-review.js +81 -0
- package/dist/mend/llm-review.js.map +1 -0
- package/dist/migrations/index.d.ts.map +1 -1
- package/dist/migrations/index.js +4 -0
- package/dist/migrations/index.js.map +1 -1
- package/dist/migrations/versions/v1.4.0-rfc2119-skills.d.ts +18 -0
- package/dist/migrations/versions/v1.4.0-rfc2119-skills.d.ts.map +1 -0
- package/dist/migrations/versions/v1.4.0-rfc2119-skills.js +207 -0
- package/dist/migrations/versions/v1.4.0-rfc2119-skills.js.map +1 -0
- package/dist/migrations/versions/v1.5.1-mend-instruction.d.ts +13 -0
- package/dist/migrations/versions/v1.5.1-mend-instruction.d.ts.map +1 -0
- package/dist/migrations/versions/v1.5.1-mend-instruction.js +156 -0
- package/dist/migrations/versions/v1.5.1-mend-instruction.js.map +1 -0
- package/package.json +1 -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,142 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Skill Generator
|
|
3
|
-
*
|
|
4
|
-
* Generates Claude Code skills for navigators, enabling
|
|
5
|
-
* inter-navigator communication via the "ask <navname>" pattern.
|
|
6
|
-
*
|
|
7
|
-
* Skills are stored locally in the navigator directory (.autonav/skills/)
|
|
8
|
-
* and symlinked to the global skills directory (~/.claude/skills/) for
|
|
9
|
-
* discovery by Claude Code.
|
|
10
|
-
*/
|
|
11
|
-
export interface SkillConfig {
|
|
12
|
-
/** Navigator name (used for skill name: ask-<navname>) */
|
|
13
|
-
navigatorName: string;
|
|
14
|
-
/** Absolute path to the navigator directory */
|
|
15
|
-
navigatorPath: string;
|
|
16
|
-
/** Navigator description/purpose */
|
|
17
|
-
description: string;
|
|
18
|
-
/** Topics the navigator covers */
|
|
19
|
-
scope?: string;
|
|
20
|
-
/** Who uses this navigator */
|
|
21
|
-
audience?: string;
|
|
22
|
-
}
|
|
23
|
-
/**
|
|
24
|
-
* Get the global skills directory path (~/.claude/skills/)
|
|
25
|
-
*/
|
|
26
|
-
export declare function getGlobalSkillsDir(): string;
|
|
27
|
-
/**
|
|
28
|
-
* Get the local skills directory path for a navigator (.autonav/skills/)
|
|
29
|
-
*/
|
|
30
|
-
export declare function getLocalSkillsDir(navigatorPath: string): string;
|
|
31
|
-
/**
|
|
32
|
-
* Get the full path to a local skill directory
|
|
33
|
-
*/
|
|
34
|
-
export declare function getLocalSkillPath(navigatorPath: string, skillName: string): string;
|
|
35
|
-
/**
|
|
36
|
-
* Check if a skill already exists globally
|
|
37
|
-
*/
|
|
38
|
-
export declare function skillExists(skillName: string): boolean;
|
|
39
|
-
/**
|
|
40
|
-
* Check if a skill exists locally in a navigator
|
|
41
|
-
*/
|
|
42
|
-
export declare function localSkillExists(navigatorPath: string, skillName: string): boolean;
|
|
43
|
-
/**
|
|
44
|
-
* Check if a global skill is a symlink
|
|
45
|
-
*/
|
|
46
|
-
export declare function isSkillSymlink(skillName: string): boolean;
|
|
47
|
-
/**
|
|
48
|
-
* Get the target of a global skill symlink
|
|
49
|
-
*/
|
|
50
|
-
export declare function getSkillSymlinkTarget(skillName: string): string | null;
|
|
51
|
-
/**
|
|
52
|
-
* Generate the skill name from navigator name
|
|
53
|
-
*/
|
|
54
|
-
export declare function getSkillName(navigatorName: string): string;
|
|
55
|
-
/**
|
|
56
|
-
* Generate the update skill name from navigator name
|
|
57
|
-
*/
|
|
58
|
-
export declare function getUpdateSkillName(navigatorName: string): string;
|
|
59
|
-
/**
|
|
60
|
-
* Generate the SKILL.md content for a navigator
|
|
61
|
-
*/
|
|
62
|
-
export declare function generateSkillContent(config: SkillConfig): string;
|
|
63
|
-
/**
|
|
64
|
-
* Generate the update skill content for a navigator (with write permissions)
|
|
65
|
-
*/
|
|
66
|
-
export declare function generateUpdateSkillContent(config: SkillConfig): string;
|
|
67
|
-
/**
|
|
68
|
-
* Create a global skill for a navigator
|
|
69
|
-
*
|
|
70
|
-
* @param config - Skill configuration
|
|
71
|
-
* @param options - Options for skill creation
|
|
72
|
-
* @returns Path to the created skill directory, or null if skipped
|
|
73
|
-
*/
|
|
74
|
-
export declare function createNavigatorSkill(config: SkillConfig, options?: {
|
|
75
|
-
force?: boolean;
|
|
76
|
-
quiet?: boolean;
|
|
77
|
-
}): Promise<string | null>;
|
|
78
|
-
/**
|
|
79
|
-
* Remove a navigator skill (both ask and update skills, global only)
|
|
80
|
-
*/
|
|
81
|
-
export declare function removeNavigatorSkill(navigatorName: string, options?: {
|
|
82
|
-
quiet?: boolean;
|
|
83
|
-
}): boolean;
|
|
84
|
-
export interface SymlinkResult {
|
|
85
|
-
success: boolean;
|
|
86
|
-
action: "created" | "already_linked" | "conflict" | "error";
|
|
87
|
-
message: string;
|
|
88
|
-
skillName: string;
|
|
89
|
-
localPath?: string;
|
|
90
|
-
globalPath?: string;
|
|
91
|
-
conflictTarget?: string;
|
|
92
|
-
}
|
|
93
|
-
/**
|
|
94
|
-
* Create both ask and update skills locally in the navigator's .autonav/skills/ directory
|
|
95
|
-
*/
|
|
96
|
-
export declare function createLocalSkill(navigatorPath: string, config: SkillConfig, options?: {
|
|
97
|
-
force?: boolean;
|
|
98
|
-
quiet?: boolean;
|
|
99
|
-
}): Promise<{
|
|
100
|
-
askSkillPath: string | null;
|
|
101
|
-
updateSkillPath: string | null;
|
|
102
|
-
}>;
|
|
103
|
-
/**
|
|
104
|
-
* Create a symlink from global skills directory to local skill
|
|
105
|
-
*
|
|
106
|
-
* @returns SymlinkResult with status and details
|
|
107
|
-
*/
|
|
108
|
-
export declare function symlinkSkillToGlobal(localSkillPath: string, skillName: string, options?: {
|
|
109
|
-
force?: boolean;
|
|
110
|
-
quiet?: boolean;
|
|
111
|
-
}): SymlinkResult;
|
|
112
|
-
/**
|
|
113
|
-
* Remove the global symlink for a skill (preserves local skill)
|
|
114
|
-
*/
|
|
115
|
-
export declare function removeSkillSymlink(skillName: string, options?: {
|
|
116
|
-
quiet?: boolean;
|
|
117
|
-
}): {
|
|
118
|
-
success: boolean;
|
|
119
|
-
wasSymlink: boolean;
|
|
120
|
-
message: string;
|
|
121
|
-
};
|
|
122
|
-
/**
|
|
123
|
-
* Create both skills locally AND symlink them globally (recommended for new navigators)
|
|
124
|
-
*
|
|
125
|
-
* This is the preferred method for creating skills as it:
|
|
126
|
-
* 1. Stores both ask and update skills in the navigator's .autonav/skills/ (version-controlled)
|
|
127
|
-
* 2. Symlinks both to ~/.claude/skills/ for global discovery
|
|
128
|
-
*/
|
|
129
|
-
export declare function createAndSymlinkSkill(navigatorPath: string, config: SkillConfig, options?: {
|
|
130
|
-
force?: boolean;
|
|
131
|
-
quiet?: boolean;
|
|
132
|
-
}): Promise<{
|
|
133
|
-
askSkillPath: string | null;
|
|
134
|
-
updateSkillPath: string | null;
|
|
135
|
-
askSymlinkResult: SymlinkResult | null;
|
|
136
|
-
updateSymlinkResult: SymlinkResult | null;
|
|
137
|
-
}>;
|
|
138
|
-
/**
|
|
139
|
-
* Discover all local skills in a navigator (both ask and update skills)
|
|
140
|
-
*/
|
|
141
|
-
export declare function discoverLocalSkills(navigatorPath: string): string[];
|
|
142
|
-
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/skill-generator/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -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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"}
|