dino-spec 5.1.1 → 5.3.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 +51 -1
- package/dist/cli/index.js +39 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/commands/compact.d.ts +34 -0
- package/dist/commands/compact.d.ts.map +1 -0
- package/dist/commands/compact.js +120 -0
- package/dist/commands/compact.js.map +1 -0
- package/dist/commands/store/index.d.ts +1 -0
- package/dist/commands/store/index.d.ts.map +1 -1
- package/dist/commands/store/index.js +1 -0
- package/dist/commands/store/index.js.map +1 -1
- package/dist/commands/store/search.d.ts +19 -0
- package/dist/commands/store/search.d.ts.map +1 -0
- package/dist/commands/store/search.js +229 -0
- package/dist/commands/store/search.js.map +1 -0
- package/dist/core/checkpoints/checkpoint.d.ts +58 -1
- package/dist/core/checkpoints/checkpoint.d.ts.map +1 -1
- package/dist/core/checkpoints/checkpoint.js +186 -1
- package/dist/core/checkpoints/checkpoint.js.map +1 -1
- package/dist/core/checkpoints/index.d.ts +6 -1
- package/dist/core/checkpoints/index.d.ts.map +1 -1
- package/dist/core/checkpoints/index.js +6 -1
- package/dist/core/checkpoints/index.js.map +1 -1
- package/dist/core/config/constants.d.ts +10 -3
- package/dist/core/config/constants.d.ts.map +1 -1
- package/dist/core/config/constants.js +10 -3
- package/dist/core/config/constants.js.map +1 -1
- package/dist/core/config/feature-flags.d.ts +103 -0
- package/dist/core/config/feature-flags.d.ts.map +1 -0
- package/dist/core/config/feature-flags.js +122 -0
- package/dist/core/config/feature-flags.js.map +1 -0
- package/dist/core/config/index.d.ts +3 -1
- package/dist/core/config/index.d.ts.map +1 -1
- package/dist/core/config/index.js +3 -1
- package/dist/core/config/index.js.map +1 -1
- package/dist/core/examples/index.d.ts +7 -0
- package/dist/core/examples/index.d.ts.map +1 -0
- package/dist/core/examples/index.js +7 -0
- package/dist/core/examples/index.js.map +1 -0
- package/dist/core/examples/tool-examples.d.ts +45 -0
- package/dist/core/examples/tool-examples.d.ts.map +1 -0
- package/dist/core/examples/tool-examples.js +282 -0
- package/dist/core/examples/tool-examples.js.map +1 -0
- package/dist/core/intelligence/index.d.ts +3 -2
- package/dist/core/intelligence/index.d.ts.map +1 -1
- package/dist/core/intelligence/index.js +3 -2
- package/dist/core/intelligence/index.js.map +1 -1
- package/dist/core/intelligence/session-compactor.d.ts +112 -0
- package/dist/core/intelligence/session-compactor.d.ts.map +1 -0
- package/dist/core/intelligence/session-compactor.js +373 -0
- package/dist/core/intelligence/session-compactor.js.map +1 -0
- package/dist/hooks/pre-compact.d.ts +12 -2
- package/dist/hooks/pre-compact.d.ts.map +1 -1
- package/dist/hooks/pre-compact.js +54 -6
- package/dist/hooks/pre-compact.js.map +1 -1
- package/dist/hooks/user-prompt-submit.d.ts +2 -1
- package/dist/hooks/user-prompt-submit.d.ts.map +1 -1
- package/dist/hooks/user-prompt-submit.js +77 -2
- package/dist/hooks/user-prompt-submit.js.map +1 -1
- package/dist/mcp/server.d.ts +11 -3
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +147 -10
- package/dist/mcp/server.js.map +1 -1
- package/dist/store/index.d.ts +1 -1
- package/dist/store/index.d.ts.map +1 -1
- package/dist/store/index.js +1 -1
- package/dist/store/index.js.map +1 -1
- package/dist/store/remote.d.ts +10 -1
- package/dist/store/remote.d.ts.map +1 -1
- package/dist/store/remote.js +102 -3
- package/dist/store/remote.js.map +1 -1
- package/package.json +69 -68
package/README.md
CHANGED
|
@@ -20,7 +20,7 @@ When working with AI coding assistants, projects often suffer from:
|
|
|
20
20
|
- **State blindness** - No awareness of test/build/lint status
|
|
21
21
|
- **Unstructured iteration** - No clear progression from idea to implementation
|
|
22
22
|
|
|
23
|
-
**dino-spec v5.
|
|
23
|
+
**dino-spec v5.3.0** solves these with:
|
|
24
24
|
|
|
25
25
|
- **Progressive task delegation** - Automatic delegation to specialized agents with context handoffs
|
|
26
26
|
- **Progressive context loading** - Minimal initial tokens, load context on-demand via MCP resources
|
|
@@ -186,8 +186,58 @@ dino hooks list # List all available hooks
|
|
|
186
186
|
dino hooks enable <id> # Enable a specific hook
|
|
187
187
|
dino hooks disable <id> # Disable a specific hook
|
|
188
188
|
dino hooks remove # Remove all hooks
|
|
189
|
+
|
|
190
|
+
# Skill Store
|
|
191
|
+
dino store list # List installed skills
|
|
192
|
+
dino store list --remote # List available remote skills
|
|
193
|
+
dino store search # Interactive skill search and install
|
|
194
|
+
dino store install <skill> # Install a skill
|
|
195
|
+
dino store remove <skill> # Remove a skill
|
|
196
|
+
dino store sync # Refresh remote manifests
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
## Skill Store
|
|
200
|
+
|
|
201
|
+
The skill store provides a way to share and install workflow skills.
|
|
202
|
+
|
|
203
|
+
### Interactive Search
|
|
204
|
+
|
|
205
|
+
```bash
|
|
206
|
+
dino store search
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
This launches an interactive search interface where you can:
|
|
210
|
+
- Type to filter skills by name, description, or tags
|
|
211
|
+
- See which skills are already installed (✓)
|
|
212
|
+
- Select a skill to view details and install
|
|
213
|
+
- Choose installation scope (local project or global)
|
|
214
|
+
|
|
215
|
+
### Commands
|
|
216
|
+
|
|
217
|
+
| Command | Description |
|
|
218
|
+
|---------|-------------|
|
|
219
|
+
| `dino store list` | List installed skills (local project) |
|
|
220
|
+
| `dino store list -g` | List global installed skills |
|
|
221
|
+
| `dino store list --remote` | List available skills from remote store |
|
|
222
|
+
| `dino store search` | Interactive skill search and install |
|
|
223
|
+
| `dino store search --list` | Non-interactive list mode |
|
|
224
|
+
| `dino store install <skill>` | Install to local project |
|
|
225
|
+
| `dino store install <skill> -g` | Install globally |
|
|
226
|
+
| `dino store remove <skill>` | Remove from local project |
|
|
227
|
+
| `dino store sync` | Refresh remote manifests |
|
|
228
|
+
|
|
229
|
+
### Private Repositories
|
|
230
|
+
|
|
231
|
+
For private skill repositories, set a GitHub token:
|
|
232
|
+
|
|
233
|
+
```bash
|
|
234
|
+
export GITHUB_TOKEN=your_token_here
|
|
235
|
+
# or
|
|
236
|
+
export GH_TOKEN=your_token_here
|
|
189
237
|
```
|
|
190
238
|
|
|
239
|
+
The token needs `repo` scope for private repository access.
|
|
240
|
+
|
|
191
241
|
## Project Structure
|
|
192
242
|
|
|
193
243
|
After `dino init`, your project will have:
|
package/dist/cli/index.js
CHANGED
|
@@ -24,7 +24,8 @@ import { statusCommand } from '../commands/status.js';
|
|
|
24
24
|
import { refreshCommand } from '../commands/refresh.js';
|
|
25
25
|
import { hooksSetupCommand, hooksStatusCommand, hooksRemoveCommand, hooksEnableCommand, hooksDisableCommand, hooksListCommand, hooksDebugCommand, } from '../commands/hooks/index.js';
|
|
26
26
|
import { sessionReadCommand, sessionUpdateCommand } from '../commands/session.js';
|
|
27
|
-
import {
|
|
27
|
+
import { compactCommand, compactStatusCommand } from '../commands/compact.js';
|
|
28
|
+
import { storeListCommand, storeInstallCommand, storeRemoveCommand, storeSyncCommand, storeSearchCommand, listFilteredSkills, } from '../commands/store/index.js';
|
|
28
29
|
const program = new Command();
|
|
29
30
|
program
|
|
30
31
|
.name('dino')
|
|
@@ -141,6 +142,29 @@ sessionCmd
|
|
|
141
142
|
.action(async (options) => {
|
|
142
143
|
await sessionUpdateCommand(options);
|
|
143
144
|
});
|
|
145
|
+
sessionCmd
|
|
146
|
+
.command('compact')
|
|
147
|
+
.description('Intelligent session compaction (40-60% token reduction)')
|
|
148
|
+
.option('--dry-run', 'Preview compaction without applying')
|
|
149
|
+
.option('--json', 'Output as JSON')
|
|
150
|
+
.option('--threshold <tokens>', 'Token threshold to trigger compaction (default: 500)', parseInt)
|
|
151
|
+
.option('--max-notes <n>', 'Max notes to keep (default: 3)', parseInt)
|
|
152
|
+
.option('--max-changes <n>', 'Max recent changes to keep (default: 5)', parseInt)
|
|
153
|
+
.option('--max-progress <n>', 'Max progress signals to keep (default: 5)', parseInt)
|
|
154
|
+
.option('--max-blockers <n>', 'Max blockers to keep (default: 3)', parseInt)
|
|
155
|
+
.option('--no-preserve-decisions', 'Do not preserve architectural decisions')
|
|
156
|
+
.option('--no-archive', 'Do not archive compacted items')
|
|
157
|
+
.action(async (options) => {
|
|
158
|
+
await compactCommand(options);
|
|
159
|
+
});
|
|
160
|
+
sessionCmd
|
|
161
|
+
.command('compact-status')
|
|
162
|
+
.description('Check if session needs compaction')
|
|
163
|
+
.option('--json', 'Output as JSON')
|
|
164
|
+
.option('--threshold <tokens>', 'Token threshold (default: 500)', parseInt)
|
|
165
|
+
.action(async (options) => {
|
|
166
|
+
await compactStatusCommand(options);
|
|
167
|
+
});
|
|
144
168
|
// Store subcommand
|
|
145
169
|
const storeCmd = program
|
|
146
170
|
.command('store')
|
|
@@ -171,6 +195,20 @@ storeCmd
|
|
|
171
195
|
.action(async (skill, options) => {
|
|
172
196
|
await storeRemoveCommand(skill, options);
|
|
173
197
|
});
|
|
198
|
+
storeCmd
|
|
199
|
+
.command('search [query]')
|
|
200
|
+
.description('Interactive skill search and install')
|
|
201
|
+
.option('-g, --global', 'Default to global installation')
|
|
202
|
+
.option('--json', 'Output as JSON (non-interactive)')
|
|
203
|
+
.option('--list', 'List mode instead of interactive search')
|
|
204
|
+
.action(async (query, options) => {
|
|
205
|
+
if (options.list || options.json) {
|
|
206
|
+
await listFilteredSkills(query, options);
|
|
207
|
+
}
|
|
208
|
+
else {
|
|
209
|
+
await storeSearchCommand(options);
|
|
210
|
+
}
|
|
211
|
+
});
|
|
174
212
|
storeCmd
|
|
175
213
|
.command('sync')
|
|
176
214
|
.description('Refresh remote manifests and sync local registry')
|
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,EACnB,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAClF,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,kBAAkB,EAClB,gBAAgB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Compact command - v5.1.0
|
|
3
|
+
*
|
|
4
|
+
* CLI command for intelligent session compaction.
|
|
5
|
+
* Can be called directly or from pre-compact hook.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Compact command options
|
|
9
|
+
*/
|
|
10
|
+
interface CompactOptions {
|
|
11
|
+
intelligent?: boolean;
|
|
12
|
+
dryRun?: boolean;
|
|
13
|
+
json?: boolean;
|
|
14
|
+
threshold?: number;
|
|
15
|
+
maxNotes?: number;
|
|
16
|
+
maxChanges?: number;
|
|
17
|
+
maxProgress?: number;
|
|
18
|
+
maxBlockers?: number;
|
|
19
|
+
preserveDecisions?: boolean;
|
|
20
|
+
archive?: boolean;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Run intelligent session compaction
|
|
24
|
+
*/
|
|
25
|
+
export declare function compactCommand(options?: CompactOptions): Promise<void>;
|
|
26
|
+
/**
|
|
27
|
+
* Check compaction status (used by hooks to decide whether to call compact)
|
|
28
|
+
*/
|
|
29
|
+
export declare function compactStatusCommand(options?: {
|
|
30
|
+
json?: boolean;
|
|
31
|
+
threshold?: number;
|
|
32
|
+
}): Promise<void>;
|
|
33
|
+
export {};
|
|
34
|
+
//# sourceMappingURL=compact.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compact.d.ts","sourceRoot":"","sources":["../../src/commands/compact.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAYH;;GAEG;AACH,UAAU,cAAc;IACtB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAgFhF;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CAAC,OAAO,GAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CA2B9G"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Compact command - v5.1.0
|
|
3
|
+
*
|
|
4
|
+
* CLI command for intelligent session compaction.
|
|
5
|
+
* Can be called directly or from pre-compact hook.
|
|
6
|
+
*/
|
|
7
|
+
import chalk from 'chalk';
|
|
8
|
+
import { join } from 'path';
|
|
9
|
+
import { FileSystem } from '../utils/file-system.js';
|
|
10
|
+
import { DINO_DIR_NAME } from '../core/config.js';
|
|
11
|
+
import { compactSession, needsCompaction, getCompactionStats, } from '../core/intelligence/index.js';
|
|
12
|
+
/**
|
|
13
|
+
* Run intelligent session compaction
|
|
14
|
+
*/
|
|
15
|
+
export async function compactCommand(options = {}) {
|
|
16
|
+
const dinoDir = join(process.cwd(), DINO_DIR_NAME);
|
|
17
|
+
if (!(await FileSystem.exists(dinoDir))) {
|
|
18
|
+
if (!options.json) {
|
|
19
|
+
console.error(chalk.red('No .dino directory found. Run "dino init" first.'));
|
|
20
|
+
}
|
|
21
|
+
else {
|
|
22
|
+
console.log(JSON.stringify({ error: 'No .dino directory found' }));
|
|
23
|
+
}
|
|
24
|
+
process.exit(1);
|
|
25
|
+
}
|
|
26
|
+
// Check if compaction is needed
|
|
27
|
+
const threshold = options.threshold ?? 500;
|
|
28
|
+
const shouldCompact = await needsCompaction(process.cwd(), threshold);
|
|
29
|
+
if (!shouldCompact && !options.dryRun) {
|
|
30
|
+
if (options.json) {
|
|
31
|
+
console.log(JSON.stringify({ status: 'skipped', reason: 'below_threshold' }));
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
console.log(chalk.dim('[dino] Session size below threshold, no compaction needed'));
|
|
35
|
+
}
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
// Dry run - just show stats
|
|
39
|
+
if (options.dryRun) {
|
|
40
|
+
const stats = await getCompactionStats(process.cwd());
|
|
41
|
+
if (options.json) {
|
|
42
|
+
console.log(JSON.stringify({
|
|
43
|
+
status: 'dry_run',
|
|
44
|
+
...stats,
|
|
45
|
+
}));
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
console.log(chalk.bold('\nCompaction Preview\n'));
|
|
49
|
+
console.log(`Current tokens: ${chalk.yellow(stats.currentTokens)}`);
|
|
50
|
+
console.log(`Estimated after compaction: ${chalk.green(stats.estimatedAfterCompaction)}`);
|
|
51
|
+
console.log(`Estimated reduction: ${chalk.cyan(Math.round((1 - stats.estimatedAfterCompaction / stats.currentTokens) * 100))}%`);
|
|
52
|
+
console.log('');
|
|
53
|
+
console.log(`Architectural decisions to preserve: ${chalk.blue(stats.architecturalDecisions)}`);
|
|
54
|
+
console.log(`Active blockers: ${chalk.yellow(stats.blockers)}`);
|
|
55
|
+
console.log(`Progress signals: ${chalk.dim(stats.progressSignals)}`);
|
|
56
|
+
console.log('');
|
|
57
|
+
console.log(chalk.dim('Run without --dry-run to compact.'));
|
|
58
|
+
}
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
// Perform intelligent compaction
|
|
62
|
+
const result = await compactSession(process.cwd(), {
|
|
63
|
+
maxNotes: options.maxNotes ?? 3,
|
|
64
|
+
maxChanges: options.maxChanges ?? 5,
|
|
65
|
+
maxProgress: options.maxProgress ?? 5,
|
|
66
|
+
maxBlockers: options.maxBlockers ?? 3,
|
|
67
|
+
preserveDecisions: options.preserveDecisions ?? true,
|
|
68
|
+
archive: options.archive ?? true,
|
|
69
|
+
});
|
|
70
|
+
if (options.json) {
|
|
71
|
+
console.log(JSON.stringify({
|
|
72
|
+
status: 'compacted',
|
|
73
|
+
...result,
|
|
74
|
+
}));
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
console.log(chalk.green('[dino] Session compacted'));
|
|
78
|
+
console.log(chalk.dim(` Tokens: ${result.originalTokens} -> ${result.compactedTokens} (${result.reductionPercent}% reduction)`));
|
|
79
|
+
if (result.preservedDecisions.length > 0) {
|
|
80
|
+
console.log(chalk.dim(` Preserved ${result.preservedDecisions.length} architectural decision(s)`));
|
|
81
|
+
}
|
|
82
|
+
if (result.archivedItems > 0) {
|
|
83
|
+
console.log(chalk.dim(` Archived ${result.archivedItems} item(s)`));
|
|
84
|
+
}
|
|
85
|
+
if (result.deduplicatedBlockers > 0) {
|
|
86
|
+
console.log(chalk.dim(` Deduplicated ${result.deduplicatedBlockers} blocker(s)`));
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Check compaction status (used by hooks to decide whether to call compact)
|
|
92
|
+
*/
|
|
93
|
+
export async function compactStatusCommand(options = {}) {
|
|
94
|
+
const dinoDir = join(process.cwd(), DINO_DIR_NAME);
|
|
95
|
+
if (!(await FileSystem.exists(dinoDir))) {
|
|
96
|
+
if (options.json) {
|
|
97
|
+
console.log(JSON.stringify({ exists: false }));
|
|
98
|
+
}
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
const threshold = options.threshold ?? 500;
|
|
102
|
+
const stats = await getCompactionStats(process.cwd());
|
|
103
|
+
const needsCompact = stats.currentTokens > threshold;
|
|
104
|
+
if (options.json) {
|
|
105
|
+
console.log(JSON.stringify({
|
|
106
|
+
needsCompaction: needsCompact,
|
|
107
|
+
threshold,
|
|
108
|
+
...stats,
|
|
109
|
+
}));
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
if (needsCompact) {
|
|
113
|
+
console.log(chalk.yellow(`[dino] Session needs compaction (${stats.currentTokens} tokens > ${threshold} threshold)`));
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
console.log(chalk.dim(`[dino] Session OK (${stats.currentTokens} tokens)`));
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=compact.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compact.js","sourceRoot":"","sources":["../../src/commands/compact.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,4 +7,5 @@ export { storeListCommand, type ListOptions } from './list.js';
|
|
|
7
7
|
export { storeInstallCommand, type InstallOptions } from './install.js';
|
|
8
8
|
export { storeRemoveCommand, type RemoveOptions } from './remove.js';
|
|
9
9
|
export { storeSyncCommand } from './sync.js';
|
|
10
|
+
export { storeSearchCommand, listFilteredSkills, type SearchOptions } from './search.js';
|
|
10
11
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/store/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,gBAAgB,EAAE,KAAK,WAAW,EAAE,MAAM,WAAW,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,KAAK,cAAc,EAAE,MAAM,cAAc,CAAC;AACxE,OAAO,EAAE,kBAAkB,EAAE,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AACrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/store/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,gBAAgB,EAAE,KAAK,WAAW,EAAE,MAAM,WAAW,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,KAAK,cAAc,EAAE,MAAM,cAAc,CAAC;AACxE,OAAO,EAAE,kBAAkB,EAAE,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AACrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -7,4 +7,5 @@ export { storeListCommand } from './list.js';
|
|
|
7
7
|
export { storeInstallCommand } from './install.js';
|
|
8
8
|
export { storeRemoveCommand } from './remove.js';
|
|
9
9
|
export { storeSyncCommand } from './sync.js';
|
|
10
|
+
export { storeSearchCommand, listFilteredSkills } from './search.js';
|
|
10
11
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/store/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,gBAAgB,EAAoB,MAAM,WAAW,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAuB,MAAM,cAAc,CAAC;AACxE,OAAO,EAAE,kBAAkB,EAAsB,MAAM,aAAa,CAAC;AACrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/store/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,gBAAgB,EAAoB,MAAM,WAAW,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAuB,MAAM,cAAc,CAAC;AACxE,OAAO,EAAE,kBAAkB,EAAsB,MAAM,aAAa,CAAC;AACrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAsB,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Store Search Command - v1.0.0
|
|
3
|
+
*
|
|
4
|
+
* Interactive skill search and installation.
|
|
5
|
+
* Provides fuzzy search, filtering, and one-click install.
|
|
6
|
+
*/
|
|
7
|
+
export interface SearchOptions {
|
|
8
|
+
global?: boolean;
|
|
9
|
+
json?: boolean;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Interactive skill search and selection
|
|
13
|
+
*/
|
|
14
|
+
export declare function storeSearchCommand(options?: SearchOptions): Promise<void>;
|
|
15
|
+
/**
|
|
16
|
+
* List all skills with filtering (non-interactive mode)
|
|
17
|
+
*/
|
|
18
|
+
export declare function listFilteredSkills(query?: string, options?: SearchOptions): Promise<void>;
|
|
19
|
+
//# sourceMappingURL=search.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../../src/commands/store/search.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAcH,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAyCD;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAuJnF;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,KAAK,CAAC,EAAE,MAAM,EACd,OAAO,GAAE,aAAkB,GAC1B,OAAO,CAAC,IAAI,CAAC,CA8Df"}
|
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Store Search Command - v1.0.0
|
|
3
|
+
*
|
|
4
|
+
* Interactive skill search and installation.
|
|
5
|
+
* Provides fuzzy search, filtering, and one-click install.
|
|
6
|
+
*/
|
|
7
|
+
import chalk from 'chalk';
|
|
8
|
+
import { search, select, confirm } from '@inquirer/prompts';
|
|
9
|
+
import ora from 'ora';
|
|
10
|
+
import { getAllRemoteSkills, getDefaultSource, installSkill, hasGitHubAuth, isSkillInstalled, } from '../../store/index.js';
|
|
11
|
+
/**
|
|
12
|
+
* Fuzzy match a query against a skill
|
|
13
|
+
*/
|
|
14
|
+
function matchesQuery(skill, query) {
|
|
15
|
+
const lowerQuery = query.toLowerCase();
|
|
16
|
+
const searchTargets = [
|
|
17
|
+
skill.name.toLowerCase(),
|
|
18
|
+
skill.description.toLowerCase(),
|
|
19
|
+
...skill.tags.map((t) => t.toLowerCase()),
|
|
20
|
+
];
|
|
21
|
+
return searchTargets.some((target) => target.includes(lowerQuery));
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Format skill for display
|
|
25
|
+
*/
|
|
26
|
+
function formatSkillDisplay(skill, installed) {
|
|
27
|
+
const status = installed ? chalk.green(' ✓') : '';
|
|
28
|
+
const name = chalk.cyan(skill.name);
|
|
29
|
+
const version = chalk.dim(`v${skill.version}`);
|
|
30
|
+
const tags = skill.tags.length > 0 ? chalk.yellow(` [${skill.tags.join(', ')}]`) : '';
|
|
31
|
+
return `${name} ${version}${tags}${status}`;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Format skill description
|
|
35
|
+
*/
|
|
36
|
+
function formatSkillDescription(skill) {
|
|
37
|
+
return chalk.dim(skill.description);
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Interactive skill search and selection
|
|
41
|
+
*/
|
|
42
|
+
export async function storeSearchCommand(options = {}) {
|
|
43
|
+
console.log('');
|
|
44
|
+
// Check authentication status
|
|
45
|
+
const hasAuth = hasGitHubAuth();
|
|
46
|
+
if (!hasAuth) {
|
|
47
|
+
console.log(chalk.yellow(' ⚠ No GitHub token found. Private repos may not be accessible.'));
|
|
48
|
+
console.log(chalk.dim(' Set GITHUB_TOKEN or GH_TOKEN environment variable for private repos.\n'));
|
|
49
|
+
}
|
|
50
|
+
// Fetch skills with spinner
|
|
51
|
+
const fetchSpinner = ora('Fetching available skills...').start();
|
|
52
|
+
let skills;
|
|
53
|
+
let source;
|
|
54
|
+
try {
|
|
55
|
+
source = await getDefaultSource();
|
|
56
|
+
skills = await getAllRemoteSkills(false); // Force refresh, don't use cache
|
|
57
|
+
fetchSpinner.succeed(chalk.dim(`Found ${skills.length} skills from ${source.repo}`));
|
|
58
|
+
}
|
|
59
|
+
catch (error) {
|
|
60
|
+
fetchSpinner.fail(chalk.red('Failed to fetch skills'));
|
|
61
|
+
console.log(chalk.dim(` Error: ${error instanceof Error ? error.message : String(error)}\n`));
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
if (skills.length === 0) {
|
|
65
|
+
console.log(chalk.dim('\n No skills available in the store.\n'));
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
// Check installed status for each skill
|
|
69
|
+
const installedMap = new Map();
|
|
70
|
+
for (const skill of skills) {
|
|
71
|
+
const installedLocal = await isSkillInstalled(skill.name, 'local');
|
|
72
|
+
const installedGlobal = await isSkillInstalled(skill.name, 'global');
|
|
73
|
+
installedMap.set(skill.name, installedLocal || installedGlobal);
|
|
74
|
+
}
|
|
75
|
+
console.log('');
|
|
76
|
+
console.log(chalk.bold(' 🔍 Skill Store Search'));
|
|
77
|
+
console.log(chalk.dim(' Type to search by name, description, or tags'));
|
|
78
|
+
console.log(chalk.dim(' Use arrow keys to navigate, Enter to select\n'));
|
|
79
|
+
try {
|
|
80
|
+
// Interactive search with filtering
|
|
81
|
+
const selectedSkill = await search({
|
|
82
|
+
message: 'Search skills',
|
|
83
|
+
source: async (input) => {
|
|
84
|
+
const query = input?.trim() || '';
|
|
85
|
+
// Filter skills based on query
|
|
86
|
+
const filteredSkills = query
|
|
87
|
+
? skills.filter((skill) => matchesQuery(skill, query))
|
|
88
|
+
: skills;
|
|
89
|
+
// Convert to choices
|
|
90
|
+
return filteredSkills.map((skill) => ({
|
|
91
|
+
name: formatSkillDisplay(skill, installedMap.get(skill.name) || false),
|
|
92
|
+
value: skill,
|
|
93
|
+
description: formatSkillDescription(skill),
|
|
94
|
+
}));
|
|
95
|
+
},
|
|
96
|
+
});
|
|
97
|
+
if (!selectedSkill) {
|
|
98
|
+
console.log(chalk.dim('\n No skill selected.\n'));
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
// Show skill details
|
|
102
|
+
console.log('');
|
|
103
|
+
console.log(chalk.bold(` 📦 ${selectedSkill.name}`));
|
|
104
|
+
console.log(chalk.dim(` ${selectedSkill.description}`));
|
|
105
|
+
console.log(chalk.dim(` Version: ${selectedSkill.version}`));
|
|
106
|
+
if (selectedSkill.tags.length > 0) {
|
|
107
|
+
console.log(chalk.dim(` Tags: ${selectedSkill.tags.join(', ')}`));
|
|
108
|
+
}
|
|
109
|
+
console.log('');
|
|
110
|
+
// Check if already installed
|
|
111
|
+
const isInstalledLocal = await isSkillInstalled(selectedSkill.name, 'local');
|
|
112
|
+
const isInstalledGlobal = await isSkillInstalled(selectedSkill.name, 'global');
|
|
113
|
+
if (isInstalledLocal || isInstalledGlobal) {
|
|
114
|
+
const installedScope = isInstalledLocal ? 'local' : 'global';
|
|
115
|
+
console.log(chalk.green(` ✓ Already installed (${installedScope})`));
|
|
116
|
+
const reinstall = await confirm({
|
|
117
|
+
message: 'Reinstall this skill?',
|
|
118
|
+
default: false,
|
|
119
|
+
});
|
|
120
|
+
if (!reinstall) {
|
|
121
|
+
console.log('');
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
// Ask for installation scope
|
|
126
|
+
const scope = await select({
|
|
127
|
+
message: 'Install location',
|
|
128
|
+
choices: [
|
|
129
|
+
{
|
|
130
|
+
name: 'Local (project)',
|
|
131
|
+
value: 'local',
|
|
132
|
+
description: 'Install to .claude/skills/ in current project',
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
name: 'Global (user)',
|
|
136
|
+
value: 'global',
|
|
137
|
+
description: 'Install to ~/.claude/skills/ for all projects',
|
|
138
|
+
},
|
|
139
|
+
],
|
|
140
|
+
default: options.global ? 'global' : 'local',
|
|
141
|
+
});
|
|
142
|
+
// Install the skill
|
|
143
|
+
const isGlobal = scope === 'global';
|
|
144
|
+
const installSpinner = ora(`Installing ${selectedSkill.name}...`).start();
|
|
145
|
+
try {
|
|
146
|
+
const result = await installSkill(selectedSkill.name, undefined, true, // force reinstall if already installed
|
|
147
|
+
isGlobal);
|
|
148
|
+
if (result.success) {
|
|
149
|
+
installSpinner.succeed(chalk.green(result.message));
|
|
150
|
+
console.log('');
|
|
151
|
+
console.log(chalk.dim(` Version: ${result.version}`));
|
|
152
|
+
console.log(chalk.dim(` Scope: ${result.scope}`));
|
|
153
|
+
console.log('');
|
|
154
|
+
console.log(chalk.dim(` Use /${selectedSkill.name} to invoke this skill.\n`));
|
|
155
|
+
}
|
|
156
|
+
else {
|
|
157
|
+
installSpinner.fail(chalk.red(result.message ?? 'Installation failed'));
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
catch (error) {
|
|
161
|
+
installSpinner.fail(chalk.red('Installation failed'));
|
|
162
|
+
console.log(chalk.dim(` Error: ${error instanceof Error ? error.message : String(error)}\n`));
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
catch (error) {
|
|
166
|
+
// Handle user cancellation (Ctrl+C)
|
|
167
|
+
if (error instanceof Error && error.message.includes('User force closed')) {
|
|
168
|
+
console.log(chalk.dim('\n Search cancelled.\n'));
|
|
169
|
+
return;
|
|
170
|
+
}
|
|
171
|
+
throw error;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* List all skills with filtering (non-interactive mode)
|
|
176
|
+
*/
|
|
177
|
+
export async function listFilteredSkills(query, options = {}) {
|
|
178
|
+
console.log('');
|
|
179
|
+
const fetchSpinner = ora('Fetching available skills...').start();
|
|
180
|
+
let skills;
|
|
181
|
+
let source;
|
|
182
|
+
try {
|
|
183
|
+
source = await getDefaultSource();
|
|
184
|
+
skills = await getAllRemoteSkills(false);
|
|
185
|
+
fetchSpinner.succeed(chalk.dim(`Found ${skills.length} skills from ${source.repo}`));
|
|
186
|
+
}
|
|
187
|
+
catch (error) {
|
|
188
|
+
fetchSpinner.fail(chalk.red('Failed to fetch skills'));
|
|
189
|
+
console.log(chalk.dim(` Error: ${error instanceof Error ? error.message : String(error)}\n`));
|
|
190
|
+
return;
|
|
191
|
+
}
|
|
192
|
+
// Filter by query if provided
|
|
193
|
+
const filteredSkills = query
|
|
194
|
+
? skills.filter((skill) => matchesQuery(skill, query))
|
|
195
|
+
: skills;
|
|
196
|
+
if (options.json) {
|
|
197
|
+
console.log(JSON.stringify(filteredSkills, null, 2));
|
|
198
|
+
return;
|
|
199
|
+
}
|
|
200
|
+
console.log('');
|
|
201
|
+
if (query) {
|
|
202
|
+
console.log(chalk.bold(` Search Results for "${query}"\n`));
|
|
203
|
+
}
|
|
204
|
+
else {
|
|
205
|
+
console.log(chalk.bold(' Available Skills\n'));
|
|
206
|
+
}
|
|
207
|
+
if (filteredSkills.length === 0) {
|
|
208
|
+
console.log(chalk.dim(' No skills match your search.\n'));
|
|
209
|
+
return;
|
|
210
|
+
}
|
|
211
|
+
// Table header
|
|
212
|
+
console.log(chalk.dim(' ') +
|
|
213
|
+
chalk.bold('Name'.padEnd(25)) +
|
|
214
|
+
chalk.bold('Version'.padEnd(12)) +
|
|
215
|
+
chalk.bold('Tags'.padEnd(20)) +
|
|
216
|
+
chalk.bold('Description'));
|
|
217
|
+
console.log(chalk.dim(' ' + '-'.repeat(80)));
|
|
218
|
+
for (const skill of filteredSkills) {
|
|
219
|
+
const name = skill.name.padEnd(25);
|
|
220
|
+
const version = skill.version.padEnd(12);
|
|
221
|
+
const tags = (skill.tags.slice(0, 2).join(', ') || '-').padEnd(20);
|
|
222
|
+
const desc = skill.description.slice(0, 30) + (skill.description.length > 30 ? '...' : '');
|
|
223
|
+
console.log(` ${chalk.cyan(name)}${chalk.dim(version)}${chalk.yellow(tags)}${desc}`);
|
|
224
|
+
}
|
|
225
|
+
console.log('');
|
|
226
|
+
console.log(chalk.dim(` ${filteredSkills.length} skill(s) found\n`));
|
|
227
|
+
console.log(chalk.dim(' Use "dino store search" for interactive search and install.\n'));
|
|
228
|
+
}
|
|
229
|
+
//# sourceMappingURL=search.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../../src/commands/store/search.ts"],"names":[],"mappings":"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"}
|