@autonav/core 1.6.0 → 1.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/dist/adapter/index.d.ts +3 -3
- package/dist/adapter/index.d.ts.map +1 -1
- package/dist/adapter/index.js +3 -3
- package/dist/adapter/index.js.map +1 -1
- package/dist/adapter/navigator-adapter.d.ts +196 -0
- package/dist/adapter/navigator-adapter.d.ts.map +1 -0
- package/dist/adapter/navigator-adapter.js +579 -0
- package/dist/adapter/navigator-adapter.js.map +1 -0
- package/dist/cli/autonav.d.ts +2 -6
- package/dist/cli/autonav.d.ts.map +1 -1
- package/dist/cli/autonav.js +32 -53
- package/dist/cli/autonav.js.map +1 -1
- package/dist/cli/nav-chat.d.ts +2 -1
- package/dist/cli/nav-chat.d.ts.map +1 -1
- package/dist/cli/nav-chat.js +32 -3
- package/dist/cli/nav-chat.js.map +1 -1
- package/dist/cli/nav-init.d.ts +2 -1
- package/dist/cli/nav-init.d.ts.map +1 -1
- package/dist/cli/nav-init.js +12 -4
- package/dist/cli/nav-init.js.map +1 -1
- package/dist/cli/nav-install.d.ts +2 -1
- package/dist/cli/nav-install.d.ts.map +1 -1
- package/dist/cli/nav-install.js +4 -2
- package/dist/cli/nav-install.js.map +1 -1
- package/dist/cli/nav-memento.d.ts +3 -2
- package/dist/cli/nav-memento.d.ts.map +1 -1
- package/dist/cli/nav-memento.js +12 -6
- package/dist/cli/nav-memento.js.map +1 -1
- package/dist/cli/nav-mend.d.ts +2 -1
- package/dist/cli/nav-mend.d.ts.map +1 -1
- package/dist/cli/nav-mend.js +4 -1
- package/dist/cli/nav-mend.js.map +1 -1
- package/dist/cli/nav-migrate.d.ts +2 -1
- package/dist/cli/nav-migrate.d.ts.map +1 -1
- package/dist/cli/nav-migrate.js +2 -6
- package/dist/cli/nav-migrate.js.map +1 -1
- package/dist/cli/nav-query.d.ts +2 -1
- package/dist/cli/nav-query.d.ts.map +1 -1
- package/dist/cli/nav-query.js +12 -6
- package/dist/cli/nav-query.js.map +1 -1
- package/dist/cli/nav-standup.d.ts +18 -0
- package/dist/cli/nav-standup.d.ts.map +1 -0
- package/dist/cli/nav-standup.js +151 -0
- package/dist/cli/nav-standup.js.map +1 -0
- package/dist/cli/nav-uninstall.d.ts +2 -1
- package/dist/cli/nav-uninstall.d.ts.map +1 -1
- package/dist/cli/nav-uninstall.js +4 -2
- package/dist/cli/nav-uninstall.js.map +1 -1
- package/dist/cli/nav-update.d.ts +2 -1
- package/dist/cli/nav-update.d.ts.map +1 -1
- package/dist/cli/nav-update.js +11 -6
- package/dist/cli/nav-update.js.map +1 -1
- package/dist/conversation/App.d.ts +9 -2
- package/dist/conversation/App.d.ts.map +1 -1
- package/dist/conversation/App.js +304 -111
- package/dist/conversation/App.js.map +1 -1
- package/dist/conversation/index.d.ts +5 -0
- package/dist/conversation/index.d.ts.map +1 -1
- package/dist/conversation/index.js +17 -2
- package/dist/conversation/index.js.map +1 -1
- package/dist/harness/chibi-harness.d.ts +36 -0
- package/dist/harness/chibi-harness.d.ts.map +1 -0
- package/dist/harness/chibi-harness.js +383 -0
- package/dist/harness/chibi-harness.js.map +1 -0
- package/dist/harness/chibi-plugins/get_plugin_config +64 -0
- package/dist/harness/chibi-plugins/query_navigator +114 -0
- package/dist/harness/chibi-plugins/submit_answer +38 -0
- package/dist/harness/chibi-plugins/update_plugin_config +91 -0
- package/dist/harness/claude-code-harness.d.ts +24 -0
- package/dist/harness/claude-code-harness.d.ts.map +1 -0
- package/dist/harness/claude-code-harness.js +242 -0
- package/dist/harness/claude-code-harness.js.map +1 -0
- package/dist/harness/ephemeral-home.d.ts +34 -0
- package/dist/harness/ephemeral-home.d.ts.map +1 -0
- package/dist/harness/ephemeral-home.js +56 -0
- package/dist/harness/ephemeral-home.js.map +1 -0
- package/dist/harness/factory.d.ts +47 -0
- package/dist/harness/factory.d.ts.map +1 -0
- package/dist/harness/factory.js +84 -0
- package/dist/harness/factory.js.map +1 -0
- package/dist/harness/helpers.d.ts +58 -0
- package/dist/harness/helpers.d.ts.map +1 -0
- package/dist/harness/helpers.js +78 -0
- package/dist/harness/helpers.js.map +1 -0
- package/dist/harness/index.d.ts +14 -0
- package/dist/harness/index.d.ts.map +1 -0
- package/dist/harness/index.js +13 -0
- package/dist/harness/index.js.map +1 -0
- package/dist/harness/opencode-harness.d.ts +79 -0
- package/dist/harness/opencode-harness.d.ts.map +1 -0
- package/dist/harness/opencode-harness.js +537 -0
- package/dist/harness/opencode-harness.js.map +1 -0
- package/dist/harness/opencode-tools/get_plugin_config.ts +72 -0
- package/dist/harness/opencode-tools/query_navigator.ts +126 -0
- package/dist/harness/opencode-tools/submit_answer.ts +40 -0
- package/dist/harness/opencode-tools/update_plugin_config.ts +105 -0
- package/dist/harness/sandbox.d.ts +59 -0
- package/dist/harness/sandbox.d.ts.map +1 -0
- package/dist/harness/sandbox.js +152 -0
- package/dist/harness/sandbox.js.map +1 -0
- package/dist/harness/tool-server.d.ts +50 -0
- package/dist/harness/tool-server.d.ts.map +1 -0
- package/dist/harness/tool-server.js +27 -0
- package/dist/harness/tool-server.js.map +1 -0
- package/dist/harness/types.d.ts +168 -0
- package/dist/harness/types.d.ts.map +1 -0
- package/dist/harness/types.js +12 -0
- package/dist/harness/types.js.map +1 -0
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -2
- package/dist/index.js.map +1 -1
- package/dist/interview/App.d.ts +4 -2
- package/dist/interview/App.d.ts.map +1 -1
- package/dist/interview/App.js +36 -56
- package/dist/interview/App.js.map +1 -1
- package/dist/interview/index.d.ts +3 -0
- package/dist/interview/index.d.ts.map +1 -1
- package/dist/interview/index.js +1 -0
- package/dist/interview/index.js.map +1 -1
- package/dist/interview/prompts.d.ts +3 -1
- package/dist/interview/prompts.d.ts.map +1 -1
- package/dist/interview/prompts.js +5 -1
- package/dist/interview/prompts.js.map +1 -1
- package/dist/interview/ui/ChatBanner.d.ts +17 -0
- package/dist/interview/ui/ChatBanner.d.ts.map +1 -0
- package/dist/interview/ui/ChatBanner.js +30 -0
- package/dist/interview/ui/ChatBanner.js.map +1 -0
- package/dist/interview/ui/ChatInput.d.ts +36 -0
- package/dist/interview/ui/ChatInput.d.ts.map +1 -0
- package/dist/interview/ui/ChatInput.js +304 -0
- package/dist/interview/ui/ChatInput.js.map +1 -0
- package/dist/interview/ui/MarkdownText.d.ts +13 -0
- package/dist/interview/ui/MarkdownText.d.ts.map +1 -0
- package/dist/interview/ui/MarkdownText.js +107 -0
- package/dist/interview/ui/MarkdownText.js.map +1 -0
- package/dist/interview/ui/index.d.ts +3 -0
- package/dist/interview/ui/index.d.ts.map +1 -1
- package/dist/interview/ui/index.js +3 -0
- package/dist/interview/ui/index.js.map +1 -1
- package/dist/memento/implementer-agent.d.ts +31 -0
- package/dist/memento/implementer-agent.d.ts.map +1 -0
- package/dist/memento/implementer-agent.js +95 -0
- package/dist/memento/implementer-agent.js.map +1 -0
- package/dist/memento/index.d.ts +6 -5
- package/dist/memento/index.d.ts.map +1 -1
- package/dist/memento/index.js +7 -5
- package/dist/memento/index.js.map +1 -1
- package/dist/memento/loop.d.ts +6 -5
- package/dist/memento/loop.d.ts.map +1 -1
- package/dist/memento/loop.js +872 -180
- package/dist/memento/loop.js.map +1 -1
- package/dist/memento/matrix-animation.d.ts +26 -0
- package/dist/memento/matrix-animation.d.ts.map +1 -1
- package/dist/memento/matrix-animation.js +93 -18
- package/dist/memento/matrix-animation.js.map +1 -1
- package/dist/memento/nav-protocol.d.ts +2 -2
- package/dist/memento/nav-protocol.d.ts.map +1 -1
- package/dist/memento/nav-protocol.js +39 -43
- package/dist/memento/nav-protocol.js.map +1 -1
- package/dist/memento/prompts.d.ts +21 -8
- package/dist/memento/prompts.d.ts.map +1 -1
- package/dist/memento/prompts.js +79 -39
- package/dist/memento/prompts.js.map +1 -1
- package/dist/memento/rate-limit.d.ts +85 -0
- package/dist/memento/rate-limit.d.ts.map +1 -0
- package/dist/memento/rate-limit.js +221 -0
- package/dist/memento/rate-limit.js.map +1 -0
- package/dist/memento/types.d.ts +6 -6
- package/dist/memento/types.d.ts.map +1 -1
- package/dist/memento/types.js +3 -3
- package/dist/memento/worker-agent.d.ts +4 -1
- package/dist/memento/worker-agent.d.ts.map +1 -1
- package/dist/memento/worker-agent.js +38 -54
- package/dist/memento/worker-agent.js.map +1 -1
- package/dist/registry.d.ts +35 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/registry.js +87 -0
- package/dist/registry.js.map +1 -0
- package/dist/repo-analyzer/index.d.ts +2 -1
- package/dist/repo-analyzer/index.d.ts.map +1 -1
- package/dist/repo-analyzer/index.js +6 -17
- package/dist/repo-analyzer/index.js.map +1 -1
- package/dist/skill-generator/index.d.ts +142 -0
- package/dist/skill-generator/index.d.ts.map +1 -0
- package/dist/skill-generator/index.js +510 -0
- package/dist/skill-generator/index.js.map +1 -0
- package/dist/standup/config.d.ts +19 -0
- package/dist/standup/config.d.ts.map +1 -0
- package/dist/standup/config.js +42 -0
- package/dist/standup/config.js.map +1 -0
- package/dist/standup/index.d.ts +24 -0
- package/dist/standup/index.d.ts.map +1 -0
- package/dist/standup/index.js +29 -0
- package/dist/standup/index.js.map +1 -0
- package/dist/standup/loop.d.ts +36 -0
- package/dist/standup/loop.d.ts.map +1 -0
- package/dist/standup/loop.js +508 -0
- package/dist/standup/loop.js.map +1 -0
- package/dist/standup/prompts.d.ts +62 -0
- package/dist/standup/prompts.d.ts.map +1 -0
- package/dist/standup/prompts.js +211 -0
- package/dist/standup/prompts.js.map +1 -0
- package/dist/standup/standup-protocol.d.ts +33 -0
- package/dist/standup/standup-protocol.d.ts.map +1 -0
- package/dist/standup/standup-protocol.js +189 -0
- package/dist/standup/standup-protocol.js.map +1 -0
- package/dist/standup/types.d.ts +185 -0
- package/dist/standup/types.d.ts.map +1 -0
- package/dist/standup/types.js +67 -0
- package/dist/standup/types.js.map +1 -0
- package/dist/templates/.gitignore.template +26 -0
- package/dist/templates/CLAUDE-pack.md.template +114 -0
- package/dist/templates/CLAUDE.md.template +153 -0
- package/dist/templates/README.md.template +174 -0
- package/dist/templates/config-pack.json.template +16 -0
- package/dist/templates/config.json.template +11 -0
- package/dist/templates/index.d.ts +22 -0
- package/dist/templates/index.d.ts.map +1 -0
- package/dist/templates/index.js +32 -0
- package/dist/templates/index.js.map +1 -0
- package/dist/templates/plugins.json.template +33 -0
- package/dist/templates/system-configuration.md.template +70 -0
- package/dist/tools/cross-nav.d.ts +21 -0
- package/dist/tools/cross-nav.d.ts.map +1 -0
- package/dist/tools/cross-nav.js +93 -0
- package/dist/tools/cross-nav.js.map +1 -0
- package/dist/tools/index.d.ts +1 -0
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +1 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/related-navs-config.d.ts +15 -0
- package/dist/tools/related-navs-config.d.ts.map +1 -0
- package/dist/tools/related-navs-config.js +132 -0
- package/dist/tools/related-navs-config.js.map +1 -0
- package/dist/tools/related-navs.d.ts +23 -0
- package/dist/tools/related-navs.d.ts.map +1 -0
- package/dist/tools/related-navs.js +107 -0
- package/dist/tools/related-navs.js.map +1 -0
- package/dist/tools/response.d.ts +3 -2
- package/dist/tools/response.d.ts.map +1 -1
- package/dist/tools/response.js +7 -11
- package/dist/tools/response.js.map +1 -1
- package/dist/tools/self-config.d.ts +2 -1
- package/dist/tools/self-config.d.ts.map +1 -1
- package/dist/tools/self-config.js +5 -9
- package/dist/tools/self-config.js.map +1 -1
- package/package.json +4 -1
- package/dist/memento/state.d.ts +0 -56
- package/dist/memento/state.d.ts.map +0 -1
- package/dist/memento/state.js +0 -156
- package/dist/memento/state.js.map +0 -1
- package/dist/migrations/versions/v1.4.0-rfc2119-skills.d.ts +0 -18
- package/dist/migrations/versions/v1.4.0-rfc2119-skills.d.ts.map +0 -1
- package/dist/migrations/versions/v1.4.0-rfc2119-skills.js +0 -207
- package/dist/migrations/versions/v1.4.0-rfc2119-skills.js.map +0 -1
|
@@ -0,0 +1,510 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/skill-generator/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Standup Config Utilities
|
|
3
|
+
*
|
|
4
|
+
* Global config directory resolution and standup directory creation.
|
|
5
|
+
* Establishes a global autonav config pattern reusable by future commands.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Resolve the global autonav config directory.
|
|
9
|
+
*
|
|
10
|
+
* Priority: explicit override > AUTONAV_CONFIG_DIR env var > ~/.config/autonav/
|
|
11
|
+
*/
|
|
12
|
+
export declare function resolveConfigDir(override?: string): string;
|
|
13
|
+
/**
|
|
14
|
+
* Create a timestamped standup directory with reports/ and sync/ subdirs.
|
|
15
|
+
*
|
|
16
|
+
* @returns The path to the created standup directory
|
|
17
|
+
*/
|
|
18
|
+
export declare function createStandupDir(configDir: string): string;
|
|
19
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/standup/config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAW1D;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAe1D"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Standup Config Utilities
|
|
3
|
+
*
|
|
4
|
+
* Global config directory resolution and standup directory creation.
|
|
5
|
+
* Establishes a global autonav config pattern reusable by future commands.
|
|
6
|
+
*/
|
|
7
|
+
import * as fs from "node:fs";
|
|
8
|
+
import * as path from "node:path";
|
|
9
|
+
import * as os from "node:os";
|
|
10
|
+
/**
|
|
11
|
+
* Resolve the global autonav config directory.
|
|
12
|
+
*
|
|
13
|
+
* Priority: explicit override > AUTONAV_CONFIG_DIR env var > ~/.config/autonav/
|
|
14
|
+
*/
|
|
15
|
+
export function resolveConfigDir(override) {
|
|
16
|
+
if (override) {
|
|
17
|
+
return path.resolve(override);
|
|
18
|
+
}
|
|
19
|
+
const envDir = process.env.AUTONAV_CONFIG_DIR;
|
|
20
|
+
if (envDir) {
|
|
21
|
+
return path.resolve(envDir);
|
|
22
|
+
}
|
|
23
|
+
return path.join(os.homedir(), ".config", "autonav");
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Create a timestamped standup directory with reports/ and sync/ subdirs.
|
|
27
|
+
*
|
|
28
|
+
* @returns The path to the created standup directory
|
|
29
|
+
*/
|
|
30
|
+
export function createStandupDir(configDir) {
|
|
31
|
+
const standupsDir = path.join(configDir, "standups");
|
|
32
|
+
// ISO timestamp with colons replaced by hyphens for filesystem safety
|
|
33
|
+
const timestamp = new Date()
|
|
34
|
+
.toISOString()
|
|
35
|
+
.replace(/:/g, "-")
|
|
36
|
+
.replace(/\.\d{3}Z$/, "");
|
|
37
|
+
const standupDir = path.join(standupsDir, timestamp);
|
|
38
|
+
fs.mkdirSync(path.join(standupDir, "reports"), { recursive: true });
|
|
39
|
+
fs.mkdirSync(path.join(standupDir, "sync"), { recursive: true });
|
|
40
|
+
return standupDir;
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/standup/config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAE9B;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,QAAiB;IAChD,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAChC,CAAC;IAED,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;IAC9C,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC9B,CAAC;IAED,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;AACvD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,SAAiB;IAChD,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IAErD,sEAAsE;IACtE,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE;SACzB,WAAW,EAAE;SACb,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC;SAClB,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IAE5B,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;IAErD,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACpE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAEjE,OAAO,UAAU,CAAC;AACpB,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Standup Module
|
|
3
|
+
*
|
|
4
|
+
* Multi-navigator stand-up mode that orchestrates parallel status reports
|
|
5
|
+
* and sequential blocker sync across multiple navigators.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```typescript
|
|
9
|
+
* import { runStandup } from './standup';
|
|
10
|
+
*
|
|
11
|
+
* const result = await runStandup(
|
|
12
|
+
* ['./nav-a', './nav-b', './nav-c'],
|
|
13
|
+
* { verbose: true, model: 'claude-sonnet-4-5' }
|
|
14
|
+
* );
|
|
15
|
+
*
|
|
16
|
+
* console.log(`Standup output: ${result.standupDir}`);
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
export { type Blocker, type StatusReport, type BlockerResolution, type SyncResponse, type StandupOptions, type StandupResult, BlockerSchema, StatusReportSchema, BlockerResolutionSchema, SyncResponseSchema, } from "./types.js";
|
|
20
|
+
export { resolveConfigDir, createStandupDir } from "./config.js";
|
|
21
|
+
export { createReportProtocolTools, createSyncProtocolTools, SUBMIT_STATUS_REPORT_TOOL, SUBMIT_SYNC_RESPONSE_TOOL, } from "./standup-protocol.js";
|
|
22
|
+
export { buildReportSystemPrompt, buildReportPrompt, buildSyncSystemPrompt, buildSyncPrompt, type NavigatorIdentity, } from "./prompts.js";
|
|
23
|
+
export { runStandup, loadNavForStandup } from "./loop.js";
|
|
24
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/standup/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAGH,OAAO,EACL,KAAK,OAAO,EACZ,KAAK,YAAY,EACjB,KAAK,iBAAiB,EACtB,KAAK,YAAY,EACjB,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,aAAa,EACb,kBAAkB,EAClB,uBAAuB,EACvB,kBAAkB,GACnB,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAGjE,OAAO,EACL,yBAAyB,EACzB,uBAAuB,EACvB,yBAAyB,EACzB,yBAAyB,GAC1B,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EACL,uBAAuB,EACvB,iBAAiB,EACjB,qBAAqB,EACrB,eAAe,EACf,KAAK,iBAAiB,GACvB,MAAM,cAAc,CAAC;AAGtB,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Standup Module
|
|
3
|
+
*
|
|
4
|
+
* Multi-navigator stand-up mode that orchestrates parallel status reports
|
|
5
|
+
* and sequential blocker sync across multiple navigators.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```typescript
|
|
9
|
+
* import { runStandup } from './standup';
|
|
10
|
+
*
|
|
11
|
+
* const result = await runStandup(
|
|
12
|
+
* ['./nav-a', './nav-b', './nav-c'],
|
|
13
|
+
* { verbose: true, model: 'claude-sonnet-4-5' }
|
|
14
|
+
* );
|
|
15
|
+
*
|
|
16
|
+
* console.log(`Standup output: ${result.standupDir}`);
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
// Types
|
|
20
|
+
export { BlockerSchema, StatusReportSchema, BlockerResolutionSchema, SyncResponseSchema, } from "./types.js";
|
|
21
|
+
// Config
|
|
22
|
+
export { resolveConfigDir, createStandupDir } from "./config.js";
|
|
23
|
+
// Protocol
|
|
24
|
+
export { createReportProtocolTools, createSyncProtocolTools, SUBMIT_STATUS_REPORT_TOOL, SUBMIT_SYNC_RESPONSE_TOOL, } from "./standup-protocol.js";
|
|
25
|
+
// Prompts
|
|
26
|
+
export { buildReportSystemPrompt, buildReportPrompt, buildSyncSystemPrompt, buildSyncPrompt, } from "./prompts.js";
|
|
27
|
+
// Main loop
|
|
28
|
+
export { runStandup, loadNavForStandup } from "./loop.js";
|
|
29
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/standup/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,QAAQ;AACR,OAAO,EAOL,aAAa,EACb,kBAAkB,EAClB,uBAAuB,EACvB,kBAAkB,GACnB,MAAM,YAAY,CAAC;AAEpB,SAAS;AACT,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEjE,WAAW;AACX,OAAO,EACL,yBAAyB,EACzB,uBAAuB,EACvB,yBAAyB,EACzB,yBAAyB,GAC1B,MAAM,uBAAuB,CAAC;AAE/B,UAAU;AACV,OAAO,EACL,uBAAuB,EACvB,iBAAiB,EACjB,qBAAqB,EACrB,eAAe,GAEhB,MAAM,cAAc,CAAC;AAEtB,YAAY;AACZ,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC"}
|