@speclife/core 0.9.2 → 0.11.1
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/completions/bash-generator.d.ts +13 -0
- package/dist/completions/bash-generator.d.ts.map +1 -0
- package/dist/completions/bash-generator.js +148 -0
- package/dist/completions/bash-generator.js.map +1 -0
- package/dist/completions/commands.d.ts +14 -0
- package/dist/completions/commands.d.ts.map +1 -0
- package/dist/completions/commands.js +114 -0
- package/dist/completions/commands.js.map +1 -0
- package/dist/completions/fish-generator.d.ts +15 -0
- package/dist/completions/fish-generator.d.ts.map +1 -0
- package/dist/completions/fish-generator.js +152 -0
- package/dist/completions/fish-generator.js.map +1 -0
- package/dist/completions/index.d.ts +34 -0
- package/dist/completions/index.d.ts.map +1 -0
- package/dist/completions/index.js +52 -0
- package/dist/completions/index.js.map +1 -0
- package/dist/completions/types.d.ts +61 -0
- package/dist/completions/types.d.ts.map +1 -0
- package/dist/completions/types.js +5 -0
- package/dist/completions/types.js.map +1 -0
- package/dist/completions/zsh-generator.d.ts +16 -0
- package/dist/completions/zsh-generator.d.ts.map +1 -0
- package/dist/completions/zsh-generator.js +199 -0
- package/dist/completions/zsh-generator.js.map +1 -0
- package/dist/configurators/antigravity.d.ts +22 -0
- package/dist/configurators/antigravity.d.ts.map +1 -0
- package/dist/configurators/antigravity.js +100 -0
- package/dist/configurators/antigravity.js.map +1 -0
- package/dist/configurators/base.d.ts +67 -0
- package/dist/configurators/base.d.ts.map +1 -0
- package/dist/configurators/base.js +18 -0
- package/dist/configurators/base.js.map +1 -0
- package/dist/configurators/claude-code.d.ts +16 -0
- package/dist/configurators/claude-code.d.ts.map +1 -0
- package/dist/configurators/claude-code.js +91 -0
- package/dist/configurators/claude-code.js.map +1 -0
- package/dist/configurators/cursor.d.ts +17 -0
- package/dist/configurators/cursor.d.ts.map +1 -0
- package/dist/configurators/cursor.js +140 -0
- package/dist/configurators/cursor.js.map +1 -0
- package/dist/configurators/detector.d.ts +36 -0
- package/dist/configurators/detector.d.ts.map +1 -0
- package/dist/configurators/detector.js +131 -0
- package/dist/configurators/detector.js.map +1 -0
- package/dist/configurators/gemini.d.ts +17 -0
- package/dist/configurators/gemini.d.ts.map +1 -0
- package/dist/configurators/gemini.js +92 -0
- package/dist/configurators/gemini.js.map +1 -0
- package/dist/configurators/index.d.ts +20 -0
- package/dist/configurators/index.d.ts.map +1 -0
- package/dist/configurators/index.js +43 -0
- package/dist/configurators/index.js.map +1 -0
- package/dist/configurators/qwen.d.ts +18 -0
- package/dist/configurators/qwen.d.ts.map +1 -0
- package/dist/configurators/qwen.js +141 -0
- package/dist/configurators/qwen.js.map +1 -0
- package/dist/configurators/registry.d.ts +55 -0
- package/dist/configurators/registry.d.ts.map +1 -0
- package/dist/configurators/registry.js +82 -0
- package/dist/configurators/registry.js.map +1 -0
- package/dist/configurators/vscode.d.ts +18 -0
- package/dist/configurators/vscode.d.ts.map +1 -0
- package/dist/configurators/vscode.js +142 -0
- package/dist/configurators/vscode.js.map +1 -0
- package/dist/configurators/windsurf.d.ts +17 -0
- package/dist/configurators/windsurf.d.ts.map +1 -0
- package/dist/configurators/windsurf.js +89 -0
- package/dist/configurators/windsurf.js.map +1 -0
- package/dist/global-config.d.ts +76 -0
- package/dist/global-config.d.ts.map +1 -0
- package/dist/global-config.js +212 -0
- package/dist/global-config.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -1
- package/dist/utils/index.d.ts +2 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +2 -0
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/progress.d.ts +77 -0
- package/dist/utils/progress.d.ts.map +1 -0
- package/dist/utils/progress.js +83 -0
- package/dist/utils/progress.js.map +1 -0
- package/dist/utils/task-progress.d.ts +72 -0
- package/dist/utils/task-progress.d.ts.map +1 -0
- package/dist/utils/task-progress.js +165 -0
- package/dist/utils/task-progress.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bash completion script generator
|
|
3
|
+
*/
|
|
4
|
+
import type { CompletionGenerator, CommandDef } from './types.js';
|
|
5
|
+
export declare class BashGenerator implements CompletionGenerator {
|
|
6
|
+
readonly shell: "bash";
|
|
7
|
+
generate(commands: CommandDef[]): string;
|
|
8
|
+
getInstallInstructions(): string;
|
|
9
|
+
private generateCommandCase;
|
|
10
|
+
private generateArgCompletion;
|
|
11
|
+
private generateValueCompletion;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=bash-generator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bash-generator.d.ts","sourceRoot":"","sources":["../../src/completions/bash-generator.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,UAAU,EAAqB,MAAM,YAAY,CAAC;AAGrF,qBAAa,aAAc,YAAW,mBAAmB;IACvD,QAAQ,CAAC,KAAK,EAAG,MAAM,CAAU;IAEjC,QAAQ,CAAC,QAAQ,EAAE,UAAU,EAAE,GAAG,MAAM;IAgDxC,sBAAsB,IAAI,MAAM;IAShC,OAAO,CAAC,mBAAmB;IA6B3B,OAAO,CAAC,qBAAqB;IAiD7B,OAAO,CAAC,uBAAuB;CAiBhC"}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bash completion script generator
|
|
3
|
+
*/
|
|
4
|
+
import { getConfigKeys } from './commands.js';
|
|
5
|
+
export class BashGenerator {
|
|
6
|
+
shell = 'bash';
|
|
7
|
+
generate(commands) {
|
|
8
|
+
const lines = [
|
|
9
|
+
'# Bash completion for speclife',
|
|
10
|
+
'# Generated by speclife completion bash',
|
|
11
|
+
'',
|
|
12
|
+
'_speclife_complete_change_id() {',
|
|
13
|
+
' local changes',
|
|
14
|
+
' changes=$(speclife list --json 2>/dev/null | grep -o \'"id":"[^"]*"\' | cut -d\'"\' -f4)',
|
|
15
|
+
' COMPREPLY=($(compgen -W "$changes" -- "${COMP_WORDS[COMP_CWORD]}"))',
|
|
16
|
+
'}',
|
|
17
|
+
'',
|
|
18
|
+
'_speclife_complete_config_key() {',
|
|
19
|
+
` local keys="${getConfigKeys().join(' ')}"`,
|
|
20
|
+
' COMPREPLY=($(compgen -W "$keys" -- "${COMP_WORDS[COMP_CWORD]}"))',
|
|
21
|
+
'}',
|
|
22
|
+
'',
|
|
23
|
+
'_speclife() {',
|
|
24
|
+
' local cur prev words cword',
|
|
25
|
+
' _init_completion || return',
|
|
26
|
+
'',
|
|
27
|
+
' local commands="' + commands.map(c => c.name).join(' ') + '"',
|
|
28
|
+
'',
|
|
29
|
+
' # Handle first argument (main command)',
|
|
30
|
+
' if [[ $cword -eq 1 ]]; then',
|
|
31
|
+
' COMPREPLY=($(compgen -W "$commands" -- "$cur"))',
|
|
32
|
+
' return',
|
|
33
|
+
' fi',
|
|
34
|
+
'',
|
|
35
|
+
' local cmd="${words[1]}"',
|
|
36
|
+
'',
|
|
37
|
+
];
|
|
38
|
+
// Generate case for each command
|
|
39
|
+
lines.push(' case "$cmd" in');
|
|
40
|
+
for (const cmd of commands) {
|
|
41
|
+
lines.push(...this.generateCommandCase(cmd));
|
|
42
|
+
}
|
|
43
|
+
lines.push(' esac');
|
|
44
|
+
lines.push('}');
|
|
45
|
+
lines.push('');
|
|
46
|
+
lines.push('complete -F _speclife speclife');
|
|
47
|
+
lines.push('');
|
|
48
|
+
return lines.join('\n');
|
|
49
|
+
}
|
|
50
|
+
getInstallInstructions() {
|
|
51
|
+
return `# Add to your ~/.bashrc or ~/.bash_profile:
|
|
52
|
+
speclife completion bash >> ~/.bashrc
|
|
53
|
+
source ~/.bashrc
|
|
54
|
+
|
|
55
|
+
# Or install system-wide (requires sudo):
|
|
56
|
+
speclife completion bash | sudo tee /etc/bash_completion.d/speclife`;
|
|
57
|
+
}
|
|
58
|
+
generateCommandCase(cmd) {
|
|
59
|
+
const lines = [];
|
|
60
|
+
lines.push(` ${cmd.name})`);
|
|
61
|
+
if (cmd.subcommands && cmd.subcommands.length > 0) {
|
|
62
|
+
lines.push(' if [[ $cword -eq 2 ]]; then');
|
|
63
|
+
lines.push(` COMPREPLY=($(compgen -W "${cmd.subcommands.map(s => s.name).join(' ')}" -- "$cur"))`);
|
|
64
|
+
lines.push(' return');
|
|
65
|
+
lines.push(' fi');
|
|
66
|
+
lines.push(' local subcmd="${words[2]}"');
|
|
67
|
+
lines.push(' case "$subcmd" in');
|
|
68
|
+
for (const sub of cmd.subcommands) {
|
|
69
|
+
lines.push(` ${sub.name})`);
|
|
70
|
+
lines.push(...this.generateArgCompletion(sub.args ?? [], sub.options ?? [], 6));
|
|
71
|
+
lines.push(' ;;');
|
|
72
|
+
}
|
|
73
|
+
lines.push(' esac');
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
lines.push(...this.generateArgCompletion(cmd.args ?? [], cmd.options ?? [], 4));
|
|
77
|
+
}
|
|
78
|
+
lines.push(' ;;');
|
|
79
|
+
return lines;
|
|
80
|
+
}
|
|
81
|
+
generateArgCompletion(args, options, indent) {
|
|
82
|
+
const pad = ' '.repeat(indent);
|
|
83
|
+
const lines = [];
|
|
84
|
+
// Collect all options
|
|
85
|
+
const optionWords = options.flatMap(o => [o.short, o.long].filter(Boolean)).join(' ');
|
|
86
|
+
// Handle option completions
|
|
87
|
+
if (options.length > 0) {
|
|
88
|
+
lines.push(`${pad}case "$prev" in`);
|
|
89
|
+
for (const opt of options.filter(o => o.takesValue)) {
|
|
90
|
+
const pattern = [opt.short, opt.long].filter(Boolean).join('|');
|
|
91
|
+
lines.push(`${pad} ${pattern})`);
|
|
92
|
+
lines.push(...this.generateValueCompletion(opt, indent + 4));
|
|
93
|
+
lines.push(`${pad} return`);
|
|
94
|
+
lines.push(`${pad} ;;`);
|
|
95
|
+
}
|
|
96
|
+
lines.push(`${pad}esac`);
|
|
97
|
+
}
|
|
98
|
+
// If current word starts with -, complete options
|
|
99
|
+
lines.push(`${pad}if [[ "$cur" == -* ]]; then`);
|
|
100
|
+
lines.push(`${pad} COMPREPLY=($(compgen -W "${optionWords}" -- "$cur"))`);
|
|
101
|
+
lines.push(`${pad} return`);
|
|
102
|
+
lines.push(`${pad}fi`);
|
|
103
|
+
// Otherwise complete positional args
|
|
104
|
+
for (const arg of args) {
|
|
105
|
+
if (arg.completion === 'change-id') {
|
|
106
|
+
lines.push(`${pad}_speclife_complete_change_id`);
|
|
107
|
+
break;
|
|
108
|
+
}
|
|
109
|
+
else if (arg.completion === 'config-key') {
|
|
110
|
+
lines.push(`${pad}_speclife_complete_config_key`);
|
|
111
|
+
break;
|
|
112
|
+
}
|
|
113
|
+
else if (arg.completion === 'static' && arg.staticValues) {
|
|
114
|
+
lines.push(`${pad}COMPREPLY=($(compgen -W "${arg.staticValues.join(' ')}" -- "$cur"))`);
|
|
115
|
+
break;
|
|
116
|
+
}
|
|
117
|
+
else if (arg.completion === 'file') {
|
|
118
|
+
lines.push(`${pad}COMPREPLY=($(compgen -f -- "$cur"))`);
|
|
119
|
+
break;
|
|
120
|
+
}
|
|
121
|
+
else if (arg.completion === 'directory') {
|
|
122
|
+
lines.push(`${pad}COMPREPLY=($(compgen -d -- "$cur"))`);
|
|
123
|
+
break;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
return lines;
|
|
127
|
+
}
|
|
128
|
+
generateValueCompletion(opt, indent) {
|
|
129
|
+
const pad = ' '.repeat(indent);
|
|
130
|
+
if (opt.valueCompletion === 'static' && opt.staticValues) {
|
|
131
|
+
return [`${pad}COMPREPLY=($(compgen -W "${opt.staticValues.join(' ')}" -- "$cur"))`];
|
|
132
|
+
}
|
|
133
|
+
else if (opt.valueCompletion === 'change-id') {
|
|
134
|
+
return [`${pad}_speclife_complete_change_id`];
|
|
135
|
+
}
|
|
136
|
+
else if (opt.valueCompletion === 'config-key') {
|
|
137
|
+
return [`${pad}_speclife_complete_config_key`];
|
|
138
|
+
}
|
|
139
|
+
else if (opt.valueCompletion === 'file') {
|
|
140
|
+
return [`${pad}COMPREPLY=($(compgen -f -- "$cur"))`];
|
|
141
|
+
}
|
|
142
|
+
else if (opt.valueCompletion === 'directory') {
|
|
143
|
+
return [`${pad}COMPREPLY=($(compgen -d -- "$cur"))`];
|
|
144
|
+
}
|
|
145
|
+
return [];
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
//# sourceMappingURL=bash-generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bash-generator.js","sourceRoot":"","sources":["../../src/completions/bash-generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Command definitions for completion generation
|
|
3
|
+
*/
|
|
4
|
+
import type { CommandDef } from './types.js';
|
|
5
|
+
/**
|
|
6
|
+
* Get all speclife command definitions
|
|
7
|
+
* Used to generate shell completions
|
|
8
|
+
*/
|
|
9
|
+
export declare function getCommandDefinitions(): CommandDef[];
|
|
10
|
+
/**
|
|
11
|
+
* Get config keys for completion
|
|
12
|
+
*/
|
|
13
|
+
export declare function getConfigKeys(): string[];
|
|
14
|
+
//# sourceMappingURL=commands.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../src/completions/commands.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C;;;GAGG;AACH,wBAAgB,qBAAqB,IAAI,UAAU,EAAE,CA4FpD;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,MAAM,EAAE,CASxC"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Command definitions for completion generation
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Get all speclife command definitions
|
|
6
|
+
* Used to generate shell completions
|
|
7
|
+
*/
|
|
8
|
+
export function getCommandDefinitions() {
|
|
9
|
+
return [
|
|
10
|
+
{
|
|
11
|
+
name: 'init',
|
|
12
|
+
options: [
|
|
13
|
+
{ long: '--force', short: '-f', description: 'Overwrite existing configuration' },
|
|
14
|
+
{ long: '--tools', description: 'Tools to configure (comma-separated)', takesValue: true, valueCompletion: 'static', staticValues: ['cursor', 'claude-code', 'vscode', 'windsurf'] },
|
|
15
|
+
{ long: '--no-interactive', description: 'Run without prompts' },
|
|
16
|
+
{ long: '--yes', short: '-y', description: 'Accept all defaults' },
|
|
17
|
+
],
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
name: 'worktree',
|
|
21
|
+
subcommands: [
|
|
22
|
+
{
|
|
23
|
+
name: 'create',
|
|
24
|
+
args: [{ name: 'change-id', completion: 'none' }],
|
|
25
|
+
options: [
|
|
26
|
+
{ long: '--skip-bootstrap', description: 'Skip environment bootstrapping' },
|
|
27
|
+
],
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
name: 'rm',
|
|
31
|
+
args: [{ name: 'change-id', completion: 'change-id' }],
|
|
32
|
+
options: [
|
|
33
|
+
{ long: '--force', short: '-f', description: 'Force removal' },
|
|
34
|
+
],
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
name: 'list',
|
|
38
|
+
options: [
|
|
39
|
+
{ long: '--json', description: 'Output as JSON' },
|
|
40
|
+
],
|
|
41
|
+
},
|
|
42
|
+
],
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
name: 'status',
|
|
46
|
+
args: [{ name: 'change-id', completion: 'change-id', optional: true }],
|
|
47
|
+
options: [
|
|
48
|
+
{ long: '--json', description: 'Output as JSON' },
|
|
49
|
+
],
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
name: 'list',
|
|
53
|
+
options: [
|
|
54
|
+
{ long: '--json', description: 'Output as JSON' },
|
|
55
|
+
{ long: '--compact', description: 'Compact output' },
|
|
56
|
+
{ long: '--sort', description: 'Sort order', takesValue: true, valueCompletion: 'static', staticValues: ['activity', 'progress', 'name'] },
|
|
57
|
+
{ long: '--status', description: 'Filter by status', takesValue: true, valueCompletion: 'static', staticValues: ['draft', 'ready', 'merged', 'closed', 'local'] },
|
|
58
|
+
],
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
name: 'view',
|
|
62
|
+
options: [
|
|
63
|
+
{ long: '--json', description: 'Output as JSON' },
|
|
64
|
+
],
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
name: 'completion',
|
|
68
|
+
args: [{ name: 'shell', completion: 'static', staticValues: ['bash', 'zsh', 'fish'] }],
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
name: 'config',
|
|
72
|
+
subcommands: [
|
|
73
|
+
{ name: 'path' },
|
|
74
|
+
{ name: 'list', options: [{ long: '--json', description: 'Output as JSON' }] },
|
|
75
|
+
{ name: 'get', args: [{ name: 'key', completion: 'config-key' }] },
|
|
76
|
+
{ name: 'set', args: [{ name: 'key', completion: 'config-key' }, { name: 'value', completion: 'none' }] },
|
|
77
|
+
{ name: 'unset', args: [{ name: 'key', completion: 'config-key' }] },
|
|
78
|
+
{ name: 'reset' },
|
|
79
|
+
{ name: 'edit' },
|
|
80
|
+
],
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
name: 'validate',
|
|
84
|
+
args: [{ name: 'change-id', completion: 'change-id', optional: true }],
|
|
85
|
+
options: [
|
|
86
|
+
{ long: '--json', description: 'Output as JSON' },
|
|
87
|
+
{ long: '--strict', description: 'Fail on warnings' },
|
|
88
|
+
],
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
name: 'update',
|
|
92
|
+
options: [
|
|
93
|
+
{ long: '--force', short: '-f', description: 'Overwrite customizations' },
|
|
94
|
+
],
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
name: 'version',
|
|
98
|
+
},
|
|
99
|
+
];
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Get config keys for completion
|
|
103
|
+
*/
|
|
104
|
+
export function getConfigKeys() {
|
|
105
|
+
return [
|
|
106
|
+
'aiProvider',
|
|
107
|
+
'aiModel',
|
|
108
|
+
'defaultEditor',
|
|
109
|
+
'preferences.colors',
|
|
110
|
+
'preferences.spinners',
|
|
111
|
+
'preferences.outputFormat',
|
|
112
|
+
];
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=commands.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/completions/commands.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Fish completion script generator
|
|
3
|
+
*/
|
|
4
|
+
import type { CompletionGenerator, CommandDef } from './types.js';
|
|
5
|
+
export declare class FishGenerator implements CompletionGenerator {
|
|
6
|
+
readonly shell: "fish";
|
|
7
|
+
generate(commands: CommandDef[]): string;
|
|
8
|
+
getInstallInstructions(): string;
|
|
9
|
+
private getCommandDescription;
|
|
10
|
+
private generateCommandCompletions;
|
|
11
|
+
private getSubcommandDescription;
|
|
12
|
+
private generateOptions;
|
|
13
|
+
private generateArgs;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=fish-generator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fish-generator.d.ts","sourceRoot":"","sources":["../../src/completions/fish-generator.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,UAAU,EAAa,MAAM,YAAY,CAAC;AAG7E,qBAAa,aAAc,YAAW,mBAAmB;IACvD,QAAQ,CAAC,KAAK,EAAG,MAAM,CAAU;IAEjC,QAAQ,CAAC,QAAQ,EAAE,UAAU,EAAE,GAAG,MAAM;IAoCxC,sBAAsB,IAAI,MAAM;IAShC,OAAO,CAAC,qBAAqB;IAgB7B,OAAO,CAAC,0BAA0B;IA0BlC,OAAO,CAAC,wBAAwB;IAoBhC,OAAO,CAAC,eAAe;IAgCvB,OAAO,CAAC,YAAY;CAmBrB"}
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Fish completion script generator
|
|
3
|
+
*/
|
|
4
|
+
import { getConfigKeys } from './commands.js';
|
|
5
|
+
export class FishGenerator {
|
|
6
|
+
shell = 'fish';
|
|
7
|
+
generate(commands) {
|
|
8
|
+
const lines = [
|
|
9
|
+
'# Fish completion for speclife',
|
|
10
|
+
'# Generated by speclife completion fish',
|
|
11
|
+
'',
|
|
12
|
+
'# Disable file completion by default',
|
|
13
|
+
'complete -c speclife -f',
|
|
14
|
+
'',
|
|
15
|
+
'# Helper functions',
|
|
16
|
+
'function __speclife_change_ids',
|
|
17
|
+
' speclife list --json 2>/dev/null | string match -r \'"id":"[^"]*"\' | string replace -r \'"id":"([^"]*)"\' \'$1\'',
|
|
18
|
+
'end',
|
|
19
|
+
'',
|
|
20
|
+
'function __speclife_config_keys',
|
|
21
|
+
` echo "${getConfigKeys().join('\\n')}"`,
|
|
22
|
+
'end',
|
|
23
|
+
'',
|
|
24
|
+
'# Main commands',
|
|
25
|
+
];
|
|
26
|
+
for (const cmd of commands) {
|
|
27
|
+
const desc = this.getCommandDescription(cmd);
|
|
28
|
+
lines.push(`complete -c speclife -n "__fish_use_subcommand" -a "${cmd.name}" -d "${desc}"`);
|
|
29
|
+
}
|
|
30
|
+
lines.push('');
|
|
31
|
+
for (const cmd of commands) {
|
|
32
|
+
lines.push(`# ${cmd.name} subcommands and options`);
|
|
33
|
+
lines.push(...this.generateCommandCompletions(cmd));
|
|
34
|
+
lines.push('');
|
|
35
|
+
}
|
|
36
|
+
return lines.join('\n');
|
|
37
|
+
}
|
|
38
|
+
getInstallInstructions() {
|
|
39
|
+
return `# Save to Fish completions directory:
|
|
40
|
+
speclife completion fish > ~/.config/fish/completions/speclife.fish
|
|
41
|
+
|
|
42
|
+
# Or use mkdir if directory doesn't exist:
|
|
43
|
+
mkdir -p ~/.config/fish/completions
|
|
44
|
+
speclife completion fish > ~/.config/fish/completions/speclife.fish`;
|
|
45
|
+
}
|
|
46
|
+
getCommandDescription(cmd) {
|
|
47
|
+
const descriptions = {
|
|
48
|
+
init: 'Initialize SpecLife in this project',
|
|
49
|
+
worktree: 'Manage git worktrees',
|
|
50
|
+
status: 'Show change status',
|
|
51
|
+
list: 'List all changes',
|
|
52
|
+
view: 'Show dashboard view',
|
|
53
|
+
completion: 'Generate shell completions',
|
|
54
|
+
config: 'Manage configuration',
|
|
55
|
+
validate: 'Validate change spec',
|
|
56
|
+
update: 'Update managed files',
|
|
57
|
+
version: 'Show version',
|
|
58
|
+
};
|
|
59
|
+
return descriptions[cmd.name] ?? cmd.name;
|
|
60
|
+
}
|
|
61
|
+
generateCommandCompletions(cmd) {
|
|
62
|
+
const lines = [];
|
|
63
|
+
const condition = `__fish_seen_subcommand_from ${cmd.name}`;
|
|
64
|
+
if (cmd.subcommands && cmd.subcommands.length > 0) {
|
|
65
|
+
// Add subcommand completions
|
|
66
|
+
for (const sub of cmd.subcommands) {
|
|
67
|
+
const desc = this.getSubcommandDescription(cmd.name, sub.name);
|
|
68
|
+
lines.push(`complete -c speclife -n "${condition}; and not __fish_seen_subcommand_from ${cmd.subcommands.map(s => s.name).join(' ')}" -a "${sub.name}" -d "${desc}"`);
|
|
69
|
+
}
|
|
70
|
+
// Add options for each subcommand
|
|
71
|
+
for (const sub of cmd.subcommands) {
|
|
72
|
+
const subCondition = `${condition}; and __fish_seen_subcommand_from ${sub.name}`;
|
|
73
|
+
lines.push(...this.generateOptions(sub.options ?? [], subCondition));
|
|
74
|
+
lines.push(...this.generateArgs(sub, subCondition));
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
// Add options for the command
|
|
79
|
+
lines.push(...this.generateOptions(cmd.options ?? [], condition));
|
|
80
|
+
lines.push(...this.generateArgs(cmd, condition));
|
|
81
|
+
}
|
|
82
|
+
return lines;
|
|
83
|
+
}
|
|
84
|
+
getSubcommandDescription(cmd, sub) {
|
|
85
|
+
const descriptions = {
|
|
86
|
+
worktree: {
|
|
87
|
+
create: 'Create a worktree for a change',
|
|
88
|
+
rm: 'Remove a worktree',
|
|
89
|
+
list: 'List all worktrees',
|
|
90
|
+
},
|
|
91
|
+
config: {
|
|
92
|
+
path: 'Show config file path',
|
|
93
|
+
list: 'List all config values',
|
|
94
|
+
get: 'Get a config value',
|
|
95
|
+
set: 'Set a config value',
|
|
96
|
+
unset: 'Remove a config value',
|
|
97
|
+
reset: 'Reset to defaults',
|
|
98
|
+
edit: 'Open config in editor',
|
|
99
|
+
},
|
|
100
|
+
};
|
|
101
|
+
return descriptions[cmd]?.[sub] ?? sub;
|
|
102
|
+
}
|
|
103
|
+
generateOptions(options, condition) {
|
|
104
|
+
const lines = [];
|
|
105
|
+
for (const opt of options) {
|
|
106
|
+
let completion = `complete -c speclife -n "${condition}"`;
|
|
107
|
+
if (opt.short) {
|
|
108
|
+
completion += ` -s ${opt.short.replace('-', '')}`;
|
|
109
|
+
}
|
|
110
|
+
if (opt.long) {
|
|
111
|
+
completion += ` -l ${opt.long.replace('--', '')}`;
|
|
112
|
+
}
|
|
113
|
+
completion += ` -d "${opt.description}"`;
|
|
114
|
+
if (opt.takesValue) {
|
|
115
|
+
completion += ' -r';
|
|
116
|
+
if (opt.valueCompletion === 'static' && opt.staticValues) {
|
|
117
|
+
completion += ` -a "${opt.staticValues.join(' ')}"`;
|
|
118
|
+
}
|
|
119
|
+
else if (opt.valueCompletion === 'change-id') {
|
|
120
|
+
completion += ' -a "(__speclife_change_ids)"';
|
|
121
|
+
}
|
|
122
|
+
else if (opt.valueCompletion === 'config-key') {
|
|
123
|
+
completion += ' -a "(__speclife_config_keys)"';
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
lines.push(completion);
|
|
127
|
+
}
|
|
128
|
+
return lines;
|
|
129
|
+
}
|
|
130
|
+
generateArgs(cmd, condition) {
|
|
131
|
+
const lines = [];
|
|
132
|
+
for (const arg of cmd.args ?? []) {
|
|
133
|
+
if (arg.completion === 'change-id') {
|
|
134
|
+
lines.push(`complete -c speclife -n "${condition}" -a "(__speclife_change_ids)"`);
|
|
135
|
+
}
|
|
136
|
+
else if (arg.completion === 'config-key') {
|
|
137
|
+
lines.push(`complete -c speclife -n "${condition}" -a "(__speclife_config_keys)"`);
|
|
138
|
+
}
|
|
139
|
+
else if (arg.completion === 'static' && arg.staticValues) {
|
|
140
|
+
lines.push(`complete -c speclife -n "${condition}" -a "${arg.staticValues.join(' ')}"`);
|
|
141
|
+
}
|
|
142
|
+
else if (arg.completion === 'file') {
|
|
143
|
+
lines.push(`complete -c speclife -n "${condition}" -F`);
|
|
144
|
+
}
|
|
145
|
+
else if (arg.completion === 'directory') {
|
|
146
|
+
lines.push(`complete -c speclife -n "${condition}" -a "(__fish_complete_directories)"`);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
return lines;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
//# sourceMappingURL=fish-generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fish-generator.js","sourceRoot":"","sources":["../../src/completions/fish-generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shell completion system
|
|
3
|
+
* Generates completion scripts for bash, zsh, and fish
|
|
4
|
+
*/
|
|
5
|
+
export type { Shell, CompletionType, CommandDef, OptionDef, ArgDef, CompletionGenerator } from './types.js';
|
|
6
|
+
export { getCommandDefinitions, getConfigKeys } from './commands.js';
|
|
7
|
+
export { BashGenerator } from './bash-generator.js';
|
|
8
|
+
export { ZshGenerator } from './zsh-generator.js';
|
|
9
|
+
export { FishGenerator } from './fish-generator.js';
|
|
10
|
+
import type { Shell, CompletionGenerator } from './types.js';
|
|
11
|
+
/**
|
|
12
|
+
* Get a completion generator for a shell
|
|
13
|
+
* @param shell Target shell
|
|
14
|
+
* @returns Completion generator
|
|
15
|
+
*/
|
|
16
|
+
export declare function getGenerator(shell: Shell): CompletionGenerator;
|
|
17
|
+
/**
|
|
18
|
+
* Generate completion script for a shell
|
|
19
|
+
* @param shell Target shell
|
|
20
|
+
* @returns Shell script for completions
|
|
21
|
+
*/
|
|
22
|
+
export declare function generateCompletions(shell: Shell): string;
|
|
23
|
+
/**
|
|
24
|
+
* Get installation instructions for a shell
|
|
25
|
+
* @param shell Target shell
|
|
26
|
+
* @returns Human-readable installation instructions
|
|
27
|
+
*/
|
|
28
|
+
export declare function getInstallInstructions(shell: Shell): string;
|
|
29
|
+
/**
|
|
30
|
+
* Get list of supported shells
|
|
31
|
+
* @returns Array of shell names
|
|
32
|
+
*/
|
|
33
|
+
export declare function getSupportedShells(): Shell[];
|
|
34
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/completions/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,YAAY,EAAE,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAE5G,OAAO,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,OAAO,KAAK,EAAE,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAa7D;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,KAAK,GAAG,mBAAmB,CAE9D;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAIxD;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAE3D;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,IAAI,KAAK,EAAE,CAE5C"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shell completion system
|
|
3
|
+
* Generates completion scripts for bash, zsh, and fish
|
|
4
|
+
*/
|
|
5
|
+
export { getCommandDefinitions, getConfigKeys } from './commands.js';
|
|
6
|
+
export { BashGenerator } from './bash-generator.js';
|
|
7
|
+
export { ZshGenerator } from './zsh-generator.js';
|
|
8
|
+
export { FishGenerator } from './fish-generator.js';
|
|
9
|
+
import { BashGenerator } from './bash-generator.js';
|
|
10
|
+
import { ZshGenerator } from './zsh-generator.js';
|
|
11
|
+
import { FishGenerator } from './fish-generator.js';
|
|
12
|
+
import { getCommandDefinitions } from './commands.js';
|
|
13
|
+
/** Map of shells to their generators */
|
|
14
|
+
const generators = {
|
|
15
|
+
bash: new BashGenerator(),
|
|
16
|
+
zsh: new ZshGenerator(),
|
|
17
|
+
fish: new FishGenerator(),
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* Get a completion generator for a shell
|
|
21
|
+
* @param shell Target shell
|
|
22
|
+
* @returns Completion generator
|
|
23
|
+
*/
|
|
24
|
+
export function getGenerator(shell) {
|
|
25
|
+
return generators[shell];
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Generate completion script for a shell
|
|
29
|
+
* @param shell Target shell
|
|
30
|
+
* @returns Shell script for completions
|
|
31
|
+
*/
|
|
32
|
+
export function generateCompletions(shell) {
|
|
33
|
+
const generator = getGenerator(shell);
|
|
34
|
+
const commands = getCommandDefinitions();
|
|
35
|
+
return generator.generate(commands);
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Get installation instructions for a shell
|
|
39
|
+
* @param shell Target shell
|
|
40
|
+
* @returns Human-readable installation instructions
|
|
41
|
+
*/
|
|
42
|
+
export function getInstallInstructions(shell) {
|
|
43
|
+
return getGenerator(shell).getInstallInstructions();
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Get list of supported shells
|
|
47
|
+
* @returns Array of shell names
|
|
48
|
+
*/
|
|
49
|
+
export function getSupportedShells() {
|
|
50
|
+
return ['bash', 'zsh', 'fish'];
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/completions/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAGpD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAEtD,wCAAwC;AACxC,MAAM,UAAU,GAAuC;IACrD,IAAI,EAAE,IAAI,aAAa,EAAE;IACzB,GAAG,EAAE,IAAI,YAAY,EAAE;IACvB,IAAI,EAAE,IAAI,aAAa,EAAE;CAC1B,CAAC;AAEF;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,KAAY;IACvC,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC;AAC3B,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAY;IAC9C,MAAM,SAAS,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;IACtC,MAAM,QAAQ,GAAG,qBAAqB,EAAE,CAAC;IACzC,OAAO,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AACtC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CAAC,KAAY;IACjD,OAAO,YAAY,CAAC,KAAK,CAAC,CAAC,sBAAsB,EAAE,CAAC;AACtD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB;IAChC,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;AACjC,CAAC"}
|