lightspec 0.1.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/LICENSE +22 -0
- package/README.md +435 -0
- package/bin/lightspec.js +3 -0
- package/dist/cli/index.d.ts +2 -0
- package/dist/cli/index.js +361 -0
- package/dist/commands/change.d.ts +35 -0
- package/dist/commands/change.js +277 -0
- package/dist/commands/completion.d.ts +72 -0
- package/dist/commands/completion.js +257 -0
- package/dist/commands/config.d.ts +8 -0
- package/dist/commands/config.js +198 -0
- package/dist/commands/feedback.d.ts +9 -0
- package/dist/commands/feedback.js +183 -0
- package/dist/commands/show.d.ts +14 -0
- package/dist/commands/show.js +132 -0
- package/dist/commands/spec.d.ts +15 -0
- package/dist/commands/spec.js +225 -0
- package/dist/commands/validate.d.ts +24 -0
- package/dist/commands/validate.js +294 -0
- package/dist/core/archive.d.ts +11 -0
- package/dist/core/archive.js +280 -0
- package/dist/core/completions/command-registry.d.ts +7 -0
- package/dist/core/completions/command-registry.js +456 -0
- package/dist/core/completions/completion-provider.d.ts +60 -0
- package/dist/core/completions/completion-provider.js +102 -0
- package/dist/core/completions/factory.d.ts +64 -0
- package/dist/core/completions/factory.js +75 -0
- package/dist/core/completions/generators/bash-generator.d.ts +32 -0
- package/dist/core/completions/generators/bash-generator.js +174 -0
- package/dist/core/completions/generators/fish-generator.d.ts +32 -0
- package/dist/core/completions/generators/fish-generator.js +157 -0
- package/dist/core/completions/generators/powershell-generator.d.ts +33 -0
- package/dist/core/completions/generators/powershell-generator.js +207 -0
- package/dist/core/completions/generators/zsh-generator.d.ts +44 -0
- package/dist/core/completions/generators/zsh-generator.js +250 -0
- package/dist/core/completions/installers/bash-installer.d.ts +87 -0
- package/dist/core/completions/installers/bash-installer.js +318 -0
- package/dist/core/completions/installers/fish-installer.d.ts +43 -0
- package/dist/core/completions/installers/fish-installer.js +143 -0
- package/dist/core/completions/installers/powershell-installer.d.ts +88 -0
- package/dist/core/completions/installers/powershell-installer.js +327 -0
- package/dist/core/completions/installers/zsh-installer.d.ts +125 -0
- package/dist/core/completions/installers/zsh-installer.js +449 -0
- package/dist/core/completions/templates/bash-templates.d.ts +6 -0
- package/dist/core/completions/templates/bash-templates.js +24 -0
- package/dist/core/completions/templates/fish-templates.d.ts +7 -0
- package/dist/core/completions/templates/fish-templates.js +39 -0
- package/dist/core/completions/templates/powershell-templates.d.ts +6 -0
- package/dist/core/completions/templates/powershell-templates.js +25 -0
- package/dist/core/completions/templates/zsh-templates.d.ts +6 -0
- package/dist/core/completions/templates/zsh-templates.js +36 -0
- package/dist/core/completions/types.d.ts +79 -0
- package/dist/core/completions/types.js +2 -0
- package/dist/core/config-prompts.d.ts +9 -0
- package/dist/core/config-prompts.js +34 -0
- package/dist/core/config-schema.d.ts +76 -0
- package/dist/core/config-schema.js +200 -0
- package/dist/core/config.d.ts +16 -0
- package/dist/core/config.js +30 -0
- package/dist/core/configurators/agents.d.ts +8 -0
- package/dist/core/configurators/agents.js +15 -0
- package/dist/core/configurators/base.d.ts +7 -0
- package/dist/core/configurators/base.js +2 -0
- package/dist/core/configurators/claude.d.ts +8 -0
- package/dist/core/configurators/claude.js +15 -0
- package/dist/core/configurators/cline.d.ts +8 -0
- package/dist/core/configurators/cline.js +15 -0
- package/dist/core/configurators/codebuddy.d.ts +8 -0
- package/dist/core/configurators/codebuddy.js +15 -0
- package/dist/core/configurators/costrict.d.ts +8 -0
- package/dist/core/configurators/costrict.js +15 -0
- package/dist/core/configurators/iflow.d.ts +8 -0
- package/dist/core/configurators/iflow.js +15 -0
- package/dist/core/configurators/qoder.d.ts +30 -0
- package/dist/core/configurators/qoder.js +42 -0
- package/dist/core/configurators/qwen.d.ts +24 -0
- package/dist/core/configurators/qwen.js +37 -0
- package/dist/core/configurators/registry.d.ts +9 -0
- package/dist/core/configurators/registry.js +43 -0
- package/dist/core/configurators/slash/amazon-q.d.ts +9 -0
- package/dist/core/configurators/slash/amazon-q.js +46 -0
- package/dist/core/configurators/slash/antigravity.d.ts +9 -0
- package/dist/core/configurators/slash/antigravity.js +23 -0
- package/dist/core/configurators/slash/auggie.d.ts +9 -0
- package/dist/core/configurators/slash/auggie.js +31 -0
- package/dist/core/configurators/slash/base.d.ts +19 -0
- package/dist/core/configurators/slash/base.js +69 -0
- package/dist/core/configurators/slash/claude.d.ts +9 -0
- package/dist/core/configurators/slash/claude.js +37 -0
- package/dist/core/configurators/slash/cline.d.ts +9 -0
- package/dist/core/configurators/slash/cline.js +23 -0
- package/dist/core/configurators/slash/codebuddy.d.ts +9 -0
- package/dist/core/configurators/slash/codebuddy.js +34 -0
- package/dist/core/configurators/slash/codex.d.ts +14 -0
- package/dist/core/configurators/slash/codex.js +109 -0
- package/dist/core/configurators/slash/continue.d.ts +9 -0
- package/dist/core/configurators/slash/continue.js +46 -0
- package/dist/core/configurators/slash/costrict.d.ts +9 -0
- package/dist/core/configurators/slash/costrict.js +31 -0
- package/dist/core/configurators/slash/crush.d.ts +9 -0
- package/dist/core/configurators/slash/crush.js +37 -0
- package/dist/core/configurators/slash/cursor.d.ts +9 -0
- package/dist/core/configurators/slash/cursor.js +37 -0
- package/dist/core/configurators/slash/factory.d.ts +10 -0
- package/dist/core/configurators/slash/factory.js +35 -0
- package/dist/core/configurators/slash/gemini.d.ts +9 -0
- package/dist/core/configurators/slash/gemini.js +22 -0
- package/dist/core/configurators/slash/github-copilot.d.ts +9 -0
- package/dist/core/configurators/slash/github-copilot.js +34 -0
- package/dist/core/configurators/slash/iflow.d.ts +9 -0
- package/dist/core/configurators/slash/iflow.js +37 -0
- package/dist/core/configurators/slash/kilocode.d.ts +9 -0
- package/dist/core/configurators/slash/kilocode.js +17 -0
- package/dist/core/configurators/slash/opencode.d.ts +12 -0
- package/dist/core/configurators/slash/opencode.js +72 -0
- package/dist/core/configurators/slash/qoder.d.ts +35 -0
- package/dist/core/configurators/slash/qoder.js +76 -0
- package/dist/core/configurators/slash/qwen.d.ts +32 -0
- package/dist/core/configurators/slash/qwen.js +49 -0
- package/dist/core/configurators/slash/registry.d.ts +8 -0
- package/dist/core/configurators/slash/registry.js +78 -0
- package/dist/core/configurators/slash/roocode.d.ts +9 -0
- package/dist/core/configurators/slash/roocode.js +23 -0
- package/dist/core/configurators/slash/toml-base.d.ts +10 -0
- package/dist/core/configurators/slash/toml-base.js +53 -0
- package/dist/core/configurators/slash/windsurf.d.ts +9 -0
- package/dist/core/configurators/slash/windsurf.js +23 -0
- package/dist/core/converters/json-converter.d.ts +6 -0
- package/dist/core/converters/json-converter.js +51 -0
- package/dist/core/global-config.d.ts +39 -0
- package/dist/core/global-config.js +115 -0
- package/dist/core/index.d.ts +2 -0
- package/dist/core/index.js +3 -0
- package/dist/core/init.d.ts +52 -0
- package/dist/core/init.js +644 -0
- package/dist/core/list.d.ts +9 -0
- package/dist/core/list.js +171 -0
- package/dist/core/parsers/change-parser.d.ts +13 -0
- package/dist/core/parsers/change-parser.js +193 -0
- package/dist/core/parsers/markdown-parser.d.ts +22 -0
- package/dist/core/parsers/markdown-parser.js +187 -0
- package/dist/core/parsers/requirement-blocks.d.ts +37 -0
- package/dist/core/parsers/requirement-blocks.js +201 -0
- package/dist/core/project-config.d.ts +64 -0
- package/dist/core/project-config.js +223 -0
- package/dist/core/schemas/base.schema.d.ts +13 -0
- package/dist/core/schemas/base.schema.js +13 -0
- package/dist/core/schemas/change.schema.d.ts +73 -0
- package/dist/core/schemas/change.schema.js +31 -0
- package/dist/core/schemas/index.d.ts +4 -0
- package/dist/core/schemas/index.js +4 -0
- package/dist/core/schemas/spec.schema.d.ts +18 -0
- package/dist/core/schemas/spec.schema.js +15 -0
- package/dist/core/specs-apply.d.ts +73 -0
- package/dist/core/specs-apply.js +384 -0
- package/dist/core/styles/palette.d.ts +7 -0
- package/dist/core/styles/palette.js +8 -0
- package/dist/core/templates/agents-root-stub.d.ts +2 -0
- package/dist/core/templates/agents-root-stub.js +17 -0
- package/dist/core/templates/agents-template.d.ts +2 -0
- package/dist/core/templates/agents-template.js +458 -0
- package/dist/core/templates/claude-template.d.ts +2 -0
- package/dist/core/templates/claude-template.js +2 -0
- package/dist/core/templates/cline-template.d.ts +2 -0
- package/dist/core/templates/cline-template.js +2 -0
- package/dist/core/templates/costrict-template.d.ts +2 -0
- package/dist/core/templates/costrict-template.js +2 -0
- package/dist/core/templates/index.d.ts +17 -0
- package/dist/core/templates/index.js +37 -0
- package/dist/core/templates/project-template.d.ts +8 -0
- package/dist/core/templates/project-template.js +32 -0
- package/dist/core/templates/slash-command-templates.d.ts +4 -0
- package/dist/core/templates/slash-command-templates.js +49 -0
- package/dist/core/update.d.ts +4 -0
- package/dist/core/update.js +88 -0
- package/dist/core/validation/constants.d.ts +34 -0
- package/dist/core/validation/constants.js +40 -0
- package/dist/core/validation/types.d.ts +18 -0
- package/dist/core/validation/types.js +2 -0
- package/dist/core/validation/validator.d.ts +33 -0
- package/dist/core/validation/validator.js +409 -0
- package/dist/core/view.d.ts +8 -0
- package/dist/core/view.js +168 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.js +3 -0
- package/dist/telemetry/config.d.ts +32 -0
- package/dist/telemetry/config.js +68 -0
- package/dist/telemetry/index.d.ts +31 -0
- package/dist/telemetry/index.js +103 -0
- package/dist/utils/file-system.d.ts +25 -0
- package/dist/utils/file-system.js +218 -0
- package/dist/utils/interactive.d.ts +18 -0
- package/dist/utils/interactive.js +21 -0
- package/dist/utils/item-discovery.d.ts +4 -0
- package/dist/utils/item-discovery.js +72 -0
- package/dist/utils/match.d.ts +3 -0
- package/dist/utils/match.js +22 -0
- package/dist/utils/shell-detection.d.ts +20 -0
- package/dist/utils/shell-detection.js +41 -0
- package/dist/utils/task-progress.d.ts +8 -0
- package/dist/utils/task-progress.js +36 -0
- package/package.json +82 -0
- package/scripts/postinstall.js +147 -0
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Qwen Code configurator for LightSpec integration.
|
|
3
|
+
* This class handles the configuration of Qwen Code as an AI tool within LightSpec.
|
|
4
|
+
*
|
|
5
|
+
* @implements {ToolConfigurator}
|
|
6
|
+
*/
|
|
7
|
+
import path from 'path';
|
|
8
|
+
import { FileSystemUtils } from '../../utils/file-system.js';
|
|
9
|
+
import { TemplateManager } from '../templates/index.js';
|
|
10
|
+
import { LIGHTSPEC_MARKERS } from '../config.js';
|
|
11
|
+
/**
|
|
12
|
+
* QwenConfigurator class provides integration with Qwen Code
|
|
13
|
+
* by creating and managing the necessary configuration files.
|
|
14
|
+
* Currently configures the QWEN.md file with LightSpec instructions.
|
|
15
|
+
*/
|
|
16
|
+
export class QwenConfigurator {
|
|
17
|
+
/** Display name for the Qwen Code tool */
|
|
18
|
+
name = 'Qwen Code';
|
|
19
|
+
/** Configuration file name for Qwen Code */
|
|
20
|
+
configFileName = 'QWEN.md';
|
|
21
|
+
/** Availability status for the Qwen Code tool */
|
|
22
|
+
isAvailable = true;
|
|
23
|
+
/**
|
|
24
|
+
* Configures the Qwen Code integration by creating or updating the QWEN.md file
|
|
25
|
+
* with LightSpec instructions and markers.
|
|
26
|
+
*
|
|
27
|
+
* @param {string} projectPath - The path to the project root
|
|
28
|
+
* @param {string} _lightspecDir - The path to the lightspec directory (unused)
|
|
29
|
+
* @returns {Promise<void>} A promise that resolves when configuration is complete
|
|
30
|
+
*/
|
|
31
|
+
async configure(projectPath, _lightspecDir) {
|
|
32
|
+
const filePath = path.join(projectPath, this.configFileName);
|
|
33
|
+
const content = TemplateManager.getAgentsStandardTemplate();
|
|
34
|
+
await FileSystemUtils.updateFileWithMarkers(filePath, content, LIGHTSPEC_MARKERS.start, LIGHTSPEC_MARKERS.end);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=qwen.js.map
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { ToolConfigurator } from './base.js';
|
|
2
|
+
export declare class ToolRegistry {
|
|
3
|
+
private static tools;
|
|
4
|
+
static register(tool: ToolConfigurator): void;
|
|
5
|
+
static get(toolId: string): ToolConfigurator | undefined;
|
|
6
|
+
static getAll(): ToolConfigurator[];
|
|
7
|
+
static getAvailable(): ToolConfigurator[];
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { ClaudeConfigurator } from './claude.js';
|
|
2
|
+
import { ClineConfigurator } from './cline.js';
|
|
3
|
+
import { CodeBuddyConfigurator } from './codebuddy.js';
|
|
4
|
+
import { CostrictConfigurator } from './costrict.js';
|
|
5
|
+
import { QoderConfigurator } from './qoder.js';
|
|
6
|
+
import { IflowConfigurator } from './iflow.js';
|
|
7
|
+
import { AgentsStandardConfigurator } from './agents.js';
|
|
8
|
+
import { QwenConfigurator } from './qwen.js';
|
|
9
|
+
export class ToolRegistry {
|
|
10
|
+
static tools = new Map();
|
|
11
|
+
static {
|
|
12
|
+
const claudeConfigurator = new ClaudeConfigurator();
|
|
13
|
+
const clineConfigurator = new ClineConfigurator();
|
|
14
|
+
const codeBuddyConfigurator = new CodeBuddyConfigurator();
|
|
15
|
+
const costrictConfigurator = new CostrictConfigurator();
|
|
16
|
+
const qoderConfigurator = new QoderConfigurator();
|
|
17
|
+
const iflowConfigurator = new IflowConfigurator();
|
|
18
|
+
const agentsConfigurator = new AgentsStandardConfigurator();
|
|
19
|
+
const qwenConfigurator = new QwenConfigurator();
|
|
20
|
+
// Register with the ID that matches the checkbox value
|
|
21
|
+
this.tools.set('claude', claudeConfigurator);
|
|
22
|
+
this.tools.set('cline', clineConfigurator);
|
|
23
|
+
this.tools.set('codebuddy', codeBuddyConfigurator);
|
|
24
|
+
this.tools.set('costrict', costrictConfigurator);
|
|
25
|
+
this.tools.set('qoder', qoderConfigurator);
|
|
26
|
+
this.tools.set('iflow', iflowConfigurator);
|
|
27
|
+
this.tools.set('agents', agentsConfigurator);
|
|
28
|
+
this.tools.set('qwen', qwenConfigurator);
|
|
29
|
+
}
|
|
30
|
+
static register(tool) {
|
|
31
|
+
this.tools.set(tool.name.toLowerCase().replace(/\s+/g, '-'), tool);
|
|
32
|
+
}
|
|
33
|
+
static get(toolId) {
|
|
34
|
+
return this.tools.get(toolId);
|
|
35
|
+
}
|
|
36
|
+
static getAll() {
|
|
37
|
+
return Array.from(this.tools.values());
|
|
38
|
+
}
|
|
39
|
+
static getAvailable() {
|
|
40
|
+
return this.getAll().filter(tool => tool.isAvailable);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { SlashCommandConfigurator } from './base.js';
|
|
2
|
+
import { SlashCommandId } from '../../templates/index.js';
|
|
3
|
+
export declare class AmazonQSlashCommandConfigurator extends SlashCommandConfigurator {
|
|
4
|
+
readonly toolId = "amazon-q";
|
|
5
|
+
readonly isAvailable = true;
|
|
6
|
+
protected getRelativePath(id: SlashCommandId): string;
|
|
7
|
+
protected getFrontmatter(id: SlashCommandId): string;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=amazon-q.d.ts.map
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { SlashCommandConfigurator } from './base.js';
|
|
2
|
+
const FILE_PATHS = {
|
|
3
|
+
proposal: '.amazonq/prompts/lightspec-proposal.md',
|
|
4
|
+
apply: '.amazonq/prompts/lightspec-apply.md',
|
|
5
|
+
archive: '.amazonq/prompts/lightspec-archive.md'
|
|
6
|
+
};
|
|
7
|
+
const FRONTMATTER = {
|
|
8
|
+
proposal: `---
|
|
9
|
+
description: Scaffold a new LightSpec change and validate strictly.
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
The user has requested the following change proposal. Use the lightspec instructions to create their change proposal.
|
|
13
|
+
|
|
14
|
+
<UserRequest>
|
|
15
|
+
$ARGUMENTS
|
|
16
|
+
</UserRequest>`,
|
|
17
|
+
apply: `---
|
|
18
|
+
description: Implement an approved LightSpec change and keep tasks in sync.
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
The user wants to apply the following change. Use the lightspec instructions to implement the approved change.
|
|
22
|
+
|
|
23
|
+
<ChangeId>
|
|
24
|
+
$ARGUMENTS
|
|
25
|
+
</ChangeId>`,
|
|
26
|
+
archive: `---
|
|
27
|
+
description: Archive a deployed LightSpec change and update specs.
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
The user wants to archive the following deployed change. Use the lightspec instructions to archive the change and update specs.
|
|
31
|
+
|
|
32
|
+
<ChangeId>
|
|
33
|
+
$ARGUMENTS
|
|
34
|
+
</ChangeId>`
|
|
35
|
+
};
|
|
36
|
+
export class AmazonQSlashCommandConfigurator extends SlashCommandConfigurator {
|
|
37
|
+
toolId = 'amazon-q';
|
|
38
|
+
isAvailable = true;
|
|
39
|
+
getRelativePath(id) {
|
|
40
|
+
return FILE_PATHS[id];
|
|
41
|
+
}
|
|
42
|
+
getFrontmatter(id) {
|
|
43
|
+
return FRONTMATTER[id];
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=amazon-q.js.map
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { SlashCommandConfigurator } from './base.js';
|
|
2
|
+
import { SlashCommandId } from '../../templates/index.js';
|
|
3
|
+
export declare class AntigravitySlashCommandConfigurator extends SlashCommandConfigurator {
|
|
4
|
+
readonly toolId = "antigravity";
|
|
5
|
+
readonly isAvailable = true;
|
|
6
|
+
protected getRelativePath(id: SlashCommandId): string;
|
|
7
|
+
protected getFrontmatter(id: SlashCommandId): string | undefined;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=antigravity.d.ts.map
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { SlashCommandConfigurator } from './base.js';
|
|
2
|
+
const FILE_PATHS = {
|
|
3
|
+
proposal: '.agent/workflows/lightspec-proposal.md',
|
|
4
|
+
apply: '.agent/workflows/lightspec-apply.md',
|
|
5
|
+
archive: '.agent/workflows/lightspec-archive.md'
|
|
6
|
+
};
|
|
7
|
+
const DESCRIPTIONS = {
|
|
8
|
+
proposal: 'Scaffold a new LightSpec change and validate strictly.',
|
|
9
|
+
apply: 'Implement an approved LightSpec change and keep tasks in sync.',
|
|
10
|
+
archive: 'Archive a deployed LightSpec change and update specs.'
|
|
11
|
+
};
|
|
12
|
+
export class AntigravitySlashCommandConfigurator extends SlashCommandConfigurator {
|
|
13
|
+
toolId = 'antigravity';
|
|
14
|
+
isAvailable = true;
|
|
15
|
+
getRelativePath(id) {
|
|
16
|
+
return FILE_PATHS[id];
|
|
17
|
+
}
|
|
18
|
+
getFrontmatter(id) {
|
|
19
|
+
const description = DESCRIPTIONS[id];
|
|
20
|
+
return `---\ndescription: ${description}\n---`;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=antigravity.js.map
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { SlashCommandConfigurator } from './base.js';
|
|
2
|
+
import { SlashCommandId } from '../../templates/index.js';
|
|
3
|
+
export declare class AuggieSlashCommandConfigurator extends SlashCommandConfigurator {
|
|
4
|
+
readonly toolId = "auggie";
|
|
5
|
+
readonly isAvailable = true;
|
|
6
|
+
protected getRelativePath(id: SlashCommandId): string;
|
|
7
|
+
protected getFrontmatter(id: SlashCommandId): string;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=auggie.d.ts.map
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { SlashCommandConfigurator } from './base.js';
|
|
2
|
+
const FILE_PATHS = {
|
|
3
|
+
proposal: '.augment/commands/lightspec-proposal.md',
|
|
4
|
+
apply: '.augment/commands/lightspec-apply.md',
|
|
5
|
+
archive: '.augment/commands/lightspec-archive.md'
|
|
6
|
+
};
|
|
7
|
+
const FRONTMATTER = {
|
|
8
|
+
proposal: `---
|
|
9
|
+
description: Scaffold a new LightSpec change and validate strictly.
|
|
10
|
+
argument-hint: feature description or request
|
|
11
|
+
---`,
|
|
12
|
+
apply: `---
|
|
13
|
+
description: Implement an approved LightSpec change and keep tasks in sync.
|
|
14
|
+
argument-hint: change-id
|
|
15
|
+
---`,
|
|
16
|
+
archive: `---
|
|
17
|
+
description: Archive a deployed LightSpec change and update specs.
|
|
18
|
+
argument-hint: change-id
|
|
19
|
+
---`
|
|
20
|
+
};
|
|
21
|
+
export class AuggieSlashCommandConfigurator extends SlashCommandConfigurator {
|
|
22
|
+
toolId = 'auggie';
|
|
23
|
+
isAvailable = true;
|
|
24
|
+
getRelativePath(id) {
|
|
25
|
+
return FILE_PATHS[id];
|
|
26
|
+
}
|
|
27
|
+
getFrontmatter(id) {
|
|
28
|
+
return FRONTMATTER[id];
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=auggie.js.map
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { SlashCommandId } from '../../templates/index.js';
|
|
2
|
+
export interface SlashCommandTarget {
|
|
3
|
+
id: SlashCommandId;
|
|
4
|
+
path: string;
|
|
5
|
+
kind: 'slash';
|
|
6
|
+
}
|
|
7
|
+
export declare abstract class SlashCommandConfigurator {
|
|
8
|
+
abstract readonly toolId: string;
|
|
9
|
+
abstract readonly isAvailable: boolean;
|
|
10
|
+
getTargets(): SlashCommandTarget[];
|
|
11
|
+
generateAll(projectPath: string, _lightspecDir: string): Promise<string[]>;
|
|
12
|
+
updateExisting(projectPath: string, _lightspecDir: string): Promise<string[]>;
|
|
13
|
+
protected abstract getRelativePath(id: SlashCommandId): string;
|
|
14
|
+
protected abstract getFrontmatter(id: SlashCommandId): string | undefined;
|
|
15
|
+
protected getBody(id: SlashCommandId): string;
|
|
16
|
+
resolveAbsolutePath(projectPath: string, id: SlashCommandId): string;
|
|
17
|
+
protected updateBody(filePath: string, body: string): Promise<void>;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=base.d.ts.map
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { FileSystemUtils } from '../../../utils/file-system.js';
|
|
2
|
+
import { TemplateManager } from '../../templates/index.js';
|
|
3
|
+
import { LIGHTSPEC_MARKERS } from '../../config.js';
|
|
4
|
+
const ALL_COMMANDS = ['proposal', 'apply', 'archive'];
|
|
5
|
+
export class SlashCommandConfigurator {
|
|
6
|
+
getTargets() {
|
|
7
|
+
return ALL_COMMANDS.map((id) => ({
|
|
8
|
+
id,
|
|
9
|
+
path: this.getRelativePath(id),
|
|
10
|
+
kind: 'slash'
|
|
11
|
+
}));
|
|
12
|
+
}
|
|
13
|
+
async generateAll(projectPath, _lightspecDir) {
|
|
14
|
+
const createdOrUpdated = [];
|
|
15
|
+
for (const target of this.getTargets()) {
|
|
16
|
+
const body = this.getBody(target.id);
|
|
17
|
+
const filePath = FileSystemUtils.joinPath(projectPath, target.path);
|
|
18
|
+
if (await FileSystemUtils.fileExists(filePath)) {
|
|
19
|
+
await this.updateBody(filePath, body);
|
|
20
|
+
}
|
|
21
|
+
else {
|
|
22
|
+
const frontmatter = this.getFrontmatter(target.id);
|
|
23
|
+
const sections = [];
|
|
24
|
+
if (frontmatter) {
|
|
25
|
+
sections.push(frontmatter.trim());
|
|
26
|
+
}
|
|
27
|
+
sections.push(`${LIGHTSPEC_MARKERS.start}\n${body}\n${LIGHTSPEC_MARKERS.end}`);
|
|
28
|
+
const content = sections.join('\n') + '\n';
|
|
29
|
+
await FileSystemUtils.writeFile(filePath, content);
|
|
30
|
+
}
|
|
31
|
+
createdOrUpdated.push(target.path);
|
|
32
|
+
}
|
|
33
|
+
return createdOrUpdated;
|
|
34
|
+
}
|
|
35
|
+
async updateExisting(projectPath, _lightspecDir) {
|
|
36
|
+
const updated = [];
|
|
37
|
+
for (const target of this.getTargets()) {
|
|
38
|
+
const filePath = FileSystemUtils.joinPath(projectPath, target.path);
|
|
39
|
+
if (await FileSystemUtils.fileExists(filePath)) {
|
|
40
|
+
const body = this.getBody(target.id);
|
|
41
|
+
await this.updateBody(filePath, body);
|
|
42
|
+
updated.push(target.path);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return updated;
|
|
46
|
+
}
|
|
47
|
+
getBody(id) {
|
|
48
|
+
return TemplateManager.getSlashCommandBody(id).trim();
|
|
49
|
+
}
|
|
50
|
+
// Resolve absolute path for a given slash command target. Subclasses may override
|
|
51
|
+
// to redirect to tool-specific locations (e.g., global directories).
|
|
52
|
+
resolveAbsolutePath(projectPath, id) {
|
|
53
|
+
const rel = this.getRelativePath(id);
|
|
54
|
+
return FileSystemUtils.joinPath(projectPath, rel);
|
|
55
|
+
}
|
|
56
|
+
async updateBody(filePath, body) {
|
|
57
|
+
const content = await FileSystemUtils.readFile(filePath);
|
|
58
|
+
const startIndex = content.indexOf(LIGHTSPEC_MARKERS.start);
|
|
59
|
+
const endIndex = content.indexOf(LIGHTSPEC_MARKERS.end);
|
|
60
|
+
if (startIndex === -1 || endIndex === -1 || endIndex <= startIndex) {
|
|
61
|
+
throw new Error(`Missing LightSpec markers in ${filePath}`);
|
|
62
|
+
}
|
|
63
|
+
const before = content.slice(0, startIndex + LIGHTSPEC_MARKERS.start.length);
|
|
64
|
+
const after = content.slice(endIndex);
|
|
65
|
+
const updatedContent = `${before}\n${body}\n${after}`;
|
|
66
|
+
await FileSystemUtils.writeFile(filePath, updatedContent);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=base.js.map
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { SlashCommandConfigurator } from './base.js';
|
|
2
|
+
import { SlashCommandId } from '../../templates/index.js';
|
|
3
|
+
export declare class ClaudeSlashCommandConfigurator extends SlashCommandConfigurator {
|
|
4
|
+
readonly toolId = "claude";
|
|
5
|
+
readonly isAvailable = true;
|
|
6
|
+
protected getRelativePath(id: SlashCommandId): string;
|
|
7
|
+
protected getFrontmatter(id: SlashCommandId): string;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=claude.d.ts.map
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { SlashCommandConfigurator } from './base.js';
|
|
2
|
+
const FILE_PATHS = {
|
|
3
|
+
proposal: '.claude/commands/lightspec/proposal.md',
|
|
4
|
+
apply: '.claude/commands/lightspec/apply.md',
|
|
5
|
+
archive: '.claude/commands/lightspec/archive.md'
|
|
6
|
+
};
|
|
7
|
+
const FRONTMATTER = {
|
|
8
|
+
proposal: `---
|
|
9
|
+
name: LightSpec: Proposal
|
|
10
|
+
description: Scaffold a new LightSpec change and validate strictly.
|
|
11
|
+
category: LightSpec
|
|
12
|
+
tags: [lightspec, change]
|
|
13
|
+
---`,
|
|
14
|
+
apply: `---
|
|
15
|
+
name: LightSpec: Apply
|
|
16
|
+
description: Implement an approved LightSpec change and keep tasks in sync.
|
|
17
|
+
category: LightSpec
|
|
18
|
+
tags: [lightspec, apply]
|
|
19
|
+
---`,
|
|
20
|
+
archive: `---
|
|
21
|
+
name: LightSpec: Archive
|
|
22
|
+
description: Archive a deployed LightSpec change and update specs.
|
|
23
|
+
category: LightSpec
|
|
24
|
+
tags: [lightspec, archive]
|
|
25
|
+
---`
|
|
26
|
+
};
|
|
27
|
+
export class ClaudeSlashCommandConfigurator extends SlashCommandConfigurator {
|
|
28
|
+
toolId = 'claude';
|
|
29
|
+
isAvailable = true;
|
|
30
|
+
getRelativePath(id) {
|
|
31
|
+
return FILE_PATHS[id];
|
|
32
|
+
}
|
|
33
|
+
getFrontmatter(id) {
|
|
34
|
+
return FRONTMATTER[id];
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=claude.js.map
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { SlashCommandConfigurator } from './base.js';
|
|
2
|
+
import { SlashCommandId } from '../../templates/index.js';
|
|
3
|
+
export declare class ClineSlashCommandConfigurator extends SlashCommandConfigurator {
|
|
4
|
+
readonly toolId = "cline";
|
|
5
|
+
readonly isAvailable = true;
|
|
6
|
+
protected getRelativePath(id: SlashCommandId): string;
|
|
7
|
+
protected getFrontmatter(id: SlashCommandId): string | undefined;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=cline.d.ts.map
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { SlashCommandConfigurator } from './base.js';
|
|
2
|
+
const FILE_PATHS = {
|
|
3
|
+
proposal: '.clinerules/workflows/lightspec-proposal.md',
|
|
4
|
+
apply: '.clinerules/workflows/lightspec-apply.md',
|
|
5
|
+
archive: '.clinerules/workflows/lightspec-archive.md'
|
|
6
|
+
};
|
|
7
|
+
export class ClineSlashCommandConfigurator extends SlashCommandConfigurator {
|
|
8
|
+
toolId = 'cline';
|
|
9
|
+
isAvailable = true;
|
|
10
|
+
getRelativePath(id) {
|
|
11
|
+
return FILE_PATHS[id];
|
|
12
|
+
}
|
|
13
|
+
getFrontmatter(id) {
|
|
14
|
+
const descriptions = {
|
|
15
|
+
proposal: 'Scaffold a new LightSpec change and validate strictly.',
|
|
16
|
+
apply: 'Implement an approved LightSpec change and keep tasks in sync.',
|
|
17
|
+
archive: 'Archive a deployed LightSpec change and update specs.'
|
|
18
|
+
};
|
|
19
|
+
const description = descriptions[id];
|
|
20
|
+
return `# LightSpec: ${id.charAt(0).toUpperCase() + id.slice(1)}\n\n${description}`;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=cline.js.map
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { SlashCommandConfigurator } from './base.js';
|
|
2
|
+
import { SlashCommandId } from '../../templates/index.js';
|
|
3
|
+
export declare class CodeBuddySlashCommandConfigurator extends SlashCommandConfigurator {
|
|
4
|
+
readonly toolId = "codebuddy";
|
|
5
|
+
readonly isAvailable = true;
|
|
6
|
+
protected getRelativePath(id: SlashCommandId): string;
|
|
7
|
+
protected getFrontmatter(id: SlashCommandId): string;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=codebuddy.d.ts.map
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { SlashCommandConfigurator } from './base.js';
|
|
2
|
+
const FILE_PATHS = {
|
|
3
|
+
proposal: '.codebuddy/commands/lightspec/proposal.md',
|
|
4
|
+
apply: '.codebuddy/commands/lightspec/apply.md',
|
|
5
|
+
archive: '.codebuddy/commands/lightspec/archive.md'
|
|
6
|
+
};
|
|
7
|
+
const FRONTMATTER = {
|
|
8
|
+
proposal: `---
|
|
9
|
+
name: LightSpec: Proposal
|
|
10
|
+
description: "Scaffold a new LightSpec change and validate strictly."
|
|
11
|
+
argument-hint: "[feature description or request]"
|
|
12
|
+
---`,
|
|
13
|
+
apply: `---
|
|
14
|
+
name: LightSpec: Apply
|
|
15
|
+
description: "Implement an approved LightSpec change and keep tasks in sync."
|
|
16
|
+
argument-hint: "[change-id]"
|
|
17
|
+
---`,
|
|
18
|
+
archive: `---
|
|
19
|
+
name: LightSpec: Archive
|
|
20
|
+
description: "Archive a deployed LightSpec change and update specs."
|
|
21
|
+
argument-hint: "[change-id]"
|
|
22
|
+
---`
|
|
23
|
+
};
|
|
24
|
+
export class CodeBuddySlashCommandConfigurator extends SlashCommandConfigurator {
|
|
25
|
+
toolId = 'codebuddy';
|
|
26
|
+
isAvailable = true;
|
|
27
|
+
getRelativePath(id) {
|
|
28
|
+
return FILE_PATHS[id];
|
|
29
|
+
}
|
|
30
|
+
getFrontmatter(id) {
|
|
31
|
+
return FRONTMATTER[id];
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=codebuddy.js.map
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { SlashCommandConfigurator } from "./base.js";
|
|
2
|
+
import { SlashCommandId } from "../../templates/index.js";
|
|
3
|
+
export declare class CodexSlashCommandConfigurator extends SlashCommandConfigurator {
|
|
4
|
+
readonly toolId = "codex";
|
|
5
|
+
readonly isAvailable = true;
|
|
6
|
+
protected getRelativePath(id: SlashCommandId): string;
|
|
7
|
+
protected getFrontmatter(id: SlashCommandId): string | undefined;
|
|
8
|
+
private getGlobalPromptsDir;
|
|
9
|
+
generateAll(projectPath: string, _lightspecDir: string): Promise<string[]>;
|
|
10
|
+
updateExisting(projectPath: string, _lightspecDir: string): Promise<string[]>;
|
|
11
|
+
private updateFullFile;
|
|
12
|
+
resolveAbsolutePath(_projectPath: string, id: SlashCommandId): string;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=codex.d.ts.map
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import path from "path";
|
|
2
|
+
import os from "os";
|
|
3
|
+
import { SlashCommandConfigurator } from "./base.js";
|
|
4
|
+
import { TemplateManager } from "../../templates/index.js";
|
|
5
|
+
import { FileSystemUtils } from "../../../utils/file-system.js";
|
|
6
|
+
import { LIGHTSPEC_MARKERS } from "../../config.js";
|
|
7
|
+
// Use POSIX-style paths for consistent logging across platforms.
|
|
8
|
+
const FILE_PATHS = {
|
|
9
|
+
proposal: ".codex/prompts/lightspec-proposal.md",
|
|
10
|
+
apply: ".codex/prompts/lightspec-apply.md",
|
|
11
|
+
archive: ".codex/prompts/lightspec-archive.md",
|
|
12
|
+
};
|
|
13
|
+
export class CodexSlashCommandConfigurator extends SlashCommandConfigurator {
|
|
14
|
+
toolId = "codex";
|
|
15
|
+
isAvailable = true;
|
|
16
|
+
getRelativePath(id) {
|
|
17
|
+
return FILE_PATHS[id];
|
|
18
|
+
}
|
|
19
|
+
getFrontmatter(id) {
|
|
20
|
+
// Codex supports YAML frontmatter with description and argument-hint fields,
|
|
21
|
+
// plus $ARGUMENTS to capture all arguments as a single string.
|
|
22
|
+
const frontmatter = {
|
|
23
|
+
proposal: `---
|
|
24
|
+
description: Scaffold a new LightSpec change and validate strictly.
|
|
25
|
+
argument-hint: request or feature description
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
$ARGUMENTS`,
|
|
29
|
+
apply: `---
|
|
30
|
+
description: Implement an approved LightSpec change and keep tasks in sync.
|
|
31
|
+
argument-hint: change-id
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
$ARGUMENTS`,
|
|
35
|
+
archive: `---
|
|
36
|
+
description: Archive a deployed LightSpec change and update specs.
|
|
37
|
+
argument-hint: change-id
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
$ARGUMENTS`,
|
|
41
|
+
};
|
|
42
|
+
return frontmatter[id];
|
|
43
|
+
}
|
|
44
|
+
getGlobalPromptsDir() {
|
|
45
|
+
const home = (process.env.CODEX_HOME && process.env.CODEX_HOME.trim())
|
|
46
|
+
? process.env.CODEX_HOME.trim()
|
|
47
|
+
: FileSystemUtils.joinPath(os.homedir(), ".codex");
|
|
48
|
+
return FileSystemUtils.joinPath(home, "prompts");
|
|
49
|
+
}
|
|
50
|
+
// Codex discovers prompts globally. Generate directly in the global directory
|
|
51
|
+
// and wrap shared body with markers.
|
|
52
|
+
async generateAll(projectPath, _lightspecDir) {
|
|
53
|
+
const createdOrUpdated = [];
|
|
54
|
+
for (const target of this.getTargets()) {
|
|
55
|
+
const body = TemplateManager.getSlashCommandBody(target.id).trim();
|
|
56
|
+
const promptsDir = this.getGlobalPromptsDir();
|
|
57
|
+
const filePath = FileSystemUtils.joinPath(promptsDir, path.basename(target.path));
|
|
58
|
+
await FileSystemUtils.createDirectory(path.dirname(filePath));
|
|
59
|
+
if (await FileSystemUtils.fileExists(filePath)) {
|
|
60
|
+
await this.updateFullFile(filePath, target.id, body);
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
const frontmatter = this.getFrontmatter(target.id);
|
|
64
|
+
const sections = [];
|
|
65
|
+
if (frontmatter)
|
|
66
|
+
sections.push(frontmatter.trim());
|
|
67
|
+
sections.push(`${LIGHTSPEC_MARKERS.start}\n${body}\n${LIGHTSPEC_MARKERS.end}`);
|
|
68
|
+
await FileSystemUtils.writeFile(filePath, sections.join("\n") + "\n");
|
|
69
|
+
}
|
|
70
|
+
createdOrUpdated.push(target.path);
|
|
71
|
+
}
|
|
72
|
+
return createdOrUpdated;
|
|
73
|
+
}
|
|
74
|
+
async updateExisting(projectPath, _lightspecDir) {
|
|
75
|
+
const updated = [];
|
|
76
|
+
for (const target of this.getTargets()) {
|
|
77
|
+
const promptsDir = this.getGlobalPromptsDir();
|
|
78
|
+
const filePath = FileSystemUtils.joinPath(promptsDir, path.basename(target.path));
|
|
79
|
+
if (await FileSystemUtils.fileExists(filePath)) {
|
|
80
|
+
const body = TemplateManager.getSlashCommandBody(target.id).trim();
|
|
81
|
+
await this.updateFullFile(filePath, target.id, body);
|
|
82
|
+
updated.push(target.path);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
return updated;
|
|
86
|
+
}
|
|
87
|
+
// Update both frontmatter and body in an existing file
|
|
88
|
+
async updateFullFile(filePath, id, body) {
|
|
89
|
+
const content = await FileSystemUtils.readFile(filePath);
|
|
90
|
+
const startIndex = content.indexOf(LIGHTSPEC_MARKERS.start);
|
|
91
|
+
if (startIndex === -1) {
|
|
92
|
+
throw new Error(`Missing LightSpec start marker in ${filePath}`);
|
|
93
|
+
}
|
|
94
|
+
// Replace everything before the start marker with the new frontmatter
|
|
95
|
+
const frontmatter = this.getFrontmatter(id);
|
|
96
|
+
const sections = [];
|
|
97
|
+
if (frontmatter)
|
|
98
|
+
sections.push(frontmatter.trim());
|
|
99
|
+
sections.push(`${LIGHTSPEC_MARKERS.start}\n${body}\n${LIGHTSPEC_MARKERS.end}`);
|
|
100
|
+
await FileSystemUtils.writeFile(filePath, sections.join("\n") + "\n");
|
|
101
|
+
}
|
|
102
|
+
// Resolve to the global prompts location for configuration detection
|
|
103
|
+
resolveAbsolutePath(_projectPath, id) {
|
|
104
|
+
const promptsDir = this.getGlobalPromptsDir();
|
|
105
|
+
const fileName = path.basename(FILE_PATHS[id]);
|
|
106
|
+
return FileSystemUtils.joinPath(promptsDir, fileName);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=codex.js.map
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { SlashCommandConfigurator } from './base.js';
|
|
2
|
+
import { SlashCommandId } from '../../templates/index.js';
|
|
3
|
+
export declare class ContinueSlashCommandConfigurator extends SlashCommandConfigurator {
|
|
4
|
+
readonly toolId = "continue";
|
|
5
|
+
readonly isAvailable = true;
|
|
6
|
+
protected getRelativePath(id: SlashCommandId): string;
|
|
7
|
+
protected getFrontmatter(id: SlashCommandId): string;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=continue.d.ts.map
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { SlashCommandConfigurator } from './base.js';
|
|
2
|
+
const FILE_PATHS = {
|
|
3
|
+
proposal: '.continue/prompts/lightspec-proposal.prompt',
|
|
4
|
+
apply: '.continue/prompts/lightspec-apply.prompt',
|
|
5
|
+
archive: '.continue/prompts/lightspec-archive.prompt'
|
|
6
|
+
};
|
|
7
|
+
/*
|
|
8
|
+
* Continue .prompt format requires YAML frontmatter:
|
|
9
|
+
* ---
|
|
10
|
+
* name: commandName
|
|
11
|
+
* description: description
|
|
12
|
+
* invokable: true
|
|
13
|
+
* ---
|
|
14
|
+
* Body...
|
|
15
|
+
*
|
|
16
|
+
* The 'invokable: true' field is required to make the prompt available as a slash command.
|
|
17
|
+
* We use 'lightspec-proposal' as the name so the command becomes /lightspec-proposal.
|
|
18
|
+
*/
|
|
19
|
+
const FRONTMATTER = {
|
|
20
|
+
proposal: `---
|
|
21
|
+
name: lightspec-proposal
|
|
22
|
+
description: Scaffold a new LightSpec change and validate strictly.
|
|
23
|
+
invokable: true
|
|
24
|
+
---`,
|
|
25
|
+
apply: `---
|
|
26
|
+
name: lightspec-apply
|
|
27
|
+
description: Implement an approved LightSpec change and keep tasks in sync.
|
|
28
|
+
invokable: true
|
|
29
|
+
---`,
|
|
30
|
+
archive: `---
|
|
31
|
+
name: lightspec-archive
|
|
32
|
+
description: Archive a deployed LightSpec change and update specs.
|
|
33
|
+
invokable: true
|
|
34
|
+
---`
|
|
35
|
+
};
|
|
36
|
+
export class ContinueSlashCommandConfigurator extends SlashCommandConfigurator {
|
|
37
|
+
toolId = 'continue';
|
|
38
|
+
isAvailable = true;
|
|
39
|
+
getRelativePath(id) {
|
|
40
|
+
return FILE_PATHS[id];
|
|
41
|
+
}
|
|
42
|
+
getFrontmatter(id) {
|
|
43
|
+
return FRONTMATTER[id];
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=continue.js.map
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { SlashCommandConfigurator } from './base.js';
|
|
2
|
+
import { SlashCommandId } from '../../templates/index.js';
|
|
3
|
+
export declare class CostrictSlashCommandConfigurator extends SlashCommandConfigurator {
|
|
4
|
+
readonly toolId = "costrict";
|
|
5
|
+
readonly isAvailable = true;
|
|
6
|
+
protected getRelativePath(id: SlashCommandId): string;
|
|
7
|
+
protected getFrontmatter(id: SlashCommandId): string | undefined;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=costrict.d.ts.map
|