@lousy-agents/cli 1.0.6 → 1.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/api/copilot-with-fastify/.devcontainer/devcontainer.json +90 -0
- package/api/copilot-with-fastify/.editorconfig +16 -0
- package/api/copilot-with-fastify/.github/ISSUE_TEMPLATE/feature-to-spec.yml +55 -0
- package/api/copilot-with-fastify/.github/copilot-instructions.md +387 -0
- package/api/copilot-with-fastify/.github/instructions/pipeline.instructions.md +149 -0
- package/api/copilot-with-fastify/.github/instructions/software-architecture.instructions.md +430 -0
- package/api/copilot-with-fastify/.github/instructions/spec.instructions.md +411 -0
- package/api/copilot-with-fastify/.github/instructions/test.instructions.md +268 -0
- package/api/copilot-with-fastify/.github/specs/README.md +84 -0
- package/api/copilot-with-fastify/.github/workflows/assign-copilot.yml +59 -0
- package/api/copilot-with-fastify/.github/workflows/ci.yml +88 -0
- package/api/copilot-with-fastify/.nvmrc +1 -0
- package/api/copilot-with-fastify/.vscode/extensions.json +14 -0
- package/api/copilot-with-fastify/.vscode/launch.json +30 -0
- package/api/copilot-with-fastify/.vscode/mcp.json +19 -0
- package/api/copilot-with-fastify/.yamllint +18 -0
- package/api/copilot-with-fastify/biome.json +31 -0
- package/api/copilot-with-fastify/package.json +37 -0
- package/api/copilot-with-fastify/tsconfig.json +34 -0
- package/api/copilot-with-fastify/vitest.config.ts +21 -0
- package/api/copilot-with-fastify/vitest.integration.config.ts +18 -0
- package/api/copilot-with-fastify/vitest.setup.ts +5 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +41 -18
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/new.d.ts +11 -1
- package/dist/commands/new.d.ts.map +1 -1
- package/dist/commands/new.js +58 -5
- package/dist/commands/new.js.map +1 -1
- package/dist/entities/index.d.ts +1 -0
- package/dist/entities/index.d.ts.map +1 -1
- package/dist/entities/index.js +1 -0
- package/dist/entities/index.js.map +1 -1
- package/dist/entities/skill.d.ts +15 -0
- package/dist/entities/skill.d.ts.map +1 -0
- package/dist/entities/skill.js +63 -0
- package/dist/entities/skill.js.map +1 -0
- package/dist/gateways/index.d.ts +1 -0
- package/dist/gateways/index.d.ts.map +1 -1
- package/dist/gateways/index.js +1 -0
- package/dist/gateways/index.js.map +1 -1
- package/dist/gateways/skill-file-gateway.d.ts +59 -0
- package/dist/gateways/skill-file-gateway.d.ts.map +1 -0
- package/dist/gateways/skill-file-gateway.js +37 -0
- package/dist/gateways/skill-file-gateway.js.map +1 -0
- package/dist/lib/config.d.ts +1 -1
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +177 -3
- package/dist/lib/config.js.map +1 -1
- package/dist/use-cases/create-skill.d.ts +30 -0
- package/dist/use-cases/create-skill.d.ts.map +1 -0
- package/dist/use-cases/create-skill.js +75 -0
- package/dist/use-cases/create-skill.js.map +1 -0
- package/dist/use-cases/index.d.ts +1 -0
- package/dist/use-cases/index.d.ts.map +1 -1
- package/dist/use-cases/index.js +1 -0
- package/dist/use-cases/index.js.map +1 -1
- package/package.json +4 -3
package/dist/commands/new.js
CHANGED
|
@@ -1,31 +1,84 @@
|
|
|
1
1
|
import { defineCommand } from "citty";
|
|
2
2
|
import { consola } from "consola";
|
|
3
3
|
import { createAgentFileGateway } from "../gateways/agent-file-gateway.js";
|
|
4
|
+
import { createSkillFileGateway } from "../gateways/skill-file-gateway.js";
|
|
4
5
|
import { CreateCopilotAgentUseCase } from "../use-cases/create-copilot-agent.js";
|
|
5
|
-
|
|
6
|
+
import { CreateSkillUseCase } from "../use-cases/create-skill.js";
|
|
7
|
+
const copilotAgentArgs = {
|
|
6
8
|
"copilot-agent": {
|
|
7
9
|
type: "string",
|
|
8
10
|
description: "Create a new GitHub Copilot custom agent with the specified name. Example: lousy-agents new --copilot-agent security",
|
|
9
11
|
},
|
|
10
12
|
};
|
|
13
|
+
const skillArgs = {
|
|
14
|
+
name: {
|
|
15
|
+
type: "positional",
|
|
16
|
+
description: "The name of the skill to create. Example: lousy-agents new skill github-actions-debug",
|
|
17
|
+
required: true,
|
|
18
|
+
},
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* The `skill` subcommand for creating Agent Skills
|
|
22
|
+
*/
|
|
23
|
+
export const skillCommand = defineCommand({
|
|
24
|
+
meta: {
|
|
25
|
+
name: "skill",
|
|
26
|
+
description: "Create a new GitHub Copilot Agent Skill. Example: lousy-agents new skill github-actions-debug",
|
|
27
|
+
},
|
|
28
|
+
args: skillArgs,
|
|
29
|
+
run: async (context) => {
|
|
30
|
+
// Support dependency injection for testing via context.data
|
|
31
|
+
const targetDir = typeof context.data?.targetDir === "string"
|
|
32
|
+
? context.data.targetDir
|
|
33
|
+
: process.cwd();
|
|
34
|
+
const skillName = context.args.name;
|
|
35
|
+
if (!skillName) {
|
|
36
|
+
throw new Error("Missing required argument: <name>. Example: lousy-agents new skill github-actions-debug");
|
|
37
|
+
}
|
|
38
|
+
// Create the use case with the file system gateway
|
|
39
|
+
const gateway = createSkillFileGateway();
|
|
40
|
+
const useCase = new CreateSkillUseCase(gateway);
|
|
41
|
+
// Execute the use case
|
|
42
|
+
const result = await useCase.execute(targetDir, skillName);
|
|
43
|
+
if (!result.success) {
|
|
44
|
+
throw new Error(result.error);
|
|
45
|
+
}
|
|
46
|
+
consola.success(`Created Agent Skill: ${result.skillFilePath}`);
|
|
47
|
+
},
|
|
48
|
+
});
|
|
11
49
|
/**
|
|
12
50
|
* The `new` command for scaffolding new resources.
|
|
13
|
-
*
|
|
51
|
+
* Supports creating Copilot custom agents and Agent Skills.
|
|
14
52
|
*/
|
|
15
53
|
export const newCommand = defineCommand({
|
|
16
54
|
meta: {
|
|
17
55
|
name: "new",
|
|
18
|
-
description: "Create new resources (e.g., Copilot agents)",
|
|
56
|
+
description: "Create new resources (e.g., Copilot agents, skills). Use 'new skill <name>' to create an Agent Skill.",
|
|
57
|
+
},
|
|
58
|
+
args: copilotAgentArgs,
|
|
59
|
+
subCommands: {
|
|
60
|
+
skill: skillCommand,
|
|
19
61
|
},
|
|
20
|
-
args: newArgs,
|
|
21
62
|
run: async (context) => {
|
|
63
|
+
// citty runs both the subcommand's run function and the parent's run function.
|
|
64
|
+
// We need to detect when a subcommand was invoked and exit early to avoid
|
|
65
|
+
// throwing an error for missing --copilot-agent option.
|
|
66
|
+
const subCommand = context.rawArgs[0];
|
|
67
|
+
if (subCommand === "skill") {
|
|
68
|
+
return; // Subcommand was handled by skillCommand.run
|
|
69
|
+
}
|
|
22
70
|
// Support dependency injection for testing via context.data
|
|
23
71
|
const targetDir = typeof context.data?.targetDir === "string"
|
|
24
72
|
? context.data.targetDir
|
|
25
73
|
: process.cwd();
|
|
26
74
|
const copilotAgentName = context.args["copilot-agent"];
|
|
27
75
|
if (!copilotAgentName) {
|
|
28
|
-
throw new Error("Missing required option
|
|
76
|
+
throw new Error("Missing required option. Use one of:\n" +
|
|
77
|
+
" --copilot-agent <name> Create a Copilot custom agent\n" +
|
|
78
|
+
" skill <name> Create an Agent Skill\n\n" +
|
|
79
|
+
"Examples:\n" +
|
|
80
|
+
" lousy-agents new --copilot-agent security\n" +
|
|
81
|
+
" lousy-agents new skill github-actions-debug");
|
|
29
82
|
}
|
|
30
83
|
// Create the use case with the file system gateway
|
|
31
84
|
const gateway = createAgentFileGateway();
|
package/dist/commands/new.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"new.js","sourceRoot":"","sources":["../../src/commands/new.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAC3E,OAAO,EAAE,yBAAyB,EAAE,MAAM,sCAAsC,CAAC;
|
|
1
|
+
{"version":3,"file":"new.js","sourceRoot":"","sources":["../../src/commands/new.ts"],"names":[],"mappings":"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"}
|
package/dist/entities/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/entities/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/entities/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,YAAY,CAAC"}
|
package/dist/entities/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/entities/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/entities/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,YAAY,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Core domain entity for GitHub Copilot Agent Skills.
|
|
3
|
+
* Handles name normalization and SKILL.md content generation.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Normalizes a skill name to lowercase with hyphens.
|
|
7
|
+
* Handles spaces, mixed case, multiple spaces, and leading/trailing spaces.
|
|
8
|
+
*/
|
|
9
|
+
export declare function normalizeSkillName(name: string): string;
|
|
10
|
+
/**
|
|
11
|
+
* Generates the SKILL.md content for a Copilot Agent Skill.
|
|
12
|
+
* Includes YAML frontmatter, documentation link, and example structure.
|
|
13
|
+
*/
|
|
14
|
+
export declare function generateSkillContent(skillName: string): string;
|
|
15
|
+
//# sourceMappingURL=skill.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill.d.ts","sourceRoot":"","sources":["../../src/entities/skill.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CA+C9D"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Core domain entity for GitHub Copilot Agent Skills.
|
|
3
|
+
* Handles name normalization and SKILL.md content generation.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Normalizes a skill name to lowercase with hyphens.
|
|
7
|
+
* Handles spaces, mixed case, multiple spaces, and leading/trailing spaces.
|
|
8
|
+
*/
|
|
9
|
+
export function normalizeSkillName(name) {
|
|
10
|
+
return name.trim().toLowerCase().replace(/\s+/g, "-");
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Generates the SKILL.md content for a Copilot Agent Skill.
|
|
14
|
+
* Includes YAML frontmatter, documentation link, and example structure.
|
|
15
|
+
*/
|
|
16
|
+
export function generateSkillContent(skillName) {
|
|
17
|
+
const normalizedName = normalizeSkillName(skillName);
|
|
18
|
+
return `---
|
|
19
|
+
name: ${normalizedName}
|
|
20
|
+
description: Brief description of what this skill does and when Copilot should use it
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
<!--
|
|
24
|
+
This is a GitHub Copilot Agent Skill for repository-level use.
|
|
25
|
+
Learn more: https://docs.github.com/en/copilot/concepts/agents/about-agent-skills
|
|
26
|
+
-->
|
|
27
|
+
|
|
28
|
+
# ${normalizedName}
|
|
29
|
+
|
|
30
|
+
{Brief description of what this skill teaches Copilot to do}
|
|
31
|
+
|
|
32
|
+
## When to Use This Skill
|
|
33
|
+
|
|
34
|
+
Copilot should use this skill when:
|
|
35
|
+
|
|
36
|
+
- {Trigger condition 1}
|
|
37
|
+
- {Trigger condition 2}
|
|
38
|
+
- {Trigger condition 3}
|
|
39
|
+
|
|
40
|
+
## Instructions
|
|
41
|
+
|
|
42
|
+
{Detailed step-by-step instructions for Copilot to follow}
|
|
43
|
+
|
|
44
|
+
1. {Step 1}
|
|
45
|
+
2. {Step 2}
|
|
46
|
+
3. {Step 3}
|
|
47
|
+
|
|
48
|
+
## Guidelines
|
|
49
|
+
|
|
50
|
+
- {Guideline or best practice}
|
|
51
|
+
- {Guideline or best practice}
|
|
52
|
+
- {Guideline or best practice}
|
|
53
|
+
|
|
54
|
+
## Examples
|
|
55
|
+
|
|
56
|
+
{Examples of inputs and expected outputs or behaviors}
|
|
57
|
+
|
|
58
|
+
### Example 1: {Title}
|
|
59
|
+
|
|
60
|
+
{Description of the example scenario and expected behavior}
|
|
61
|
+
`;
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=skill.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill.js","sourceRoot":"","sources":["../../src/entities/skill.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC3C,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAC1D,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,SAAiB;IAClD,MAAM,cAAc,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAAC;IAErD,OAAO;QACH,cAAc;;;;;;;;;IASlB,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiCjB,CAAC;AACF,CAAC"}
|
package/dist/gateways/index.d.ts
CHANGED
|
@@ -5,5 +5,6 @@ export * from "./action-version-gateway.js";
|
|
|
5
5
|
export * from "./agent-file-gateway.js";
|
|
6
6
|
export * from "./environment-gateway.js";
|
|
7
7
|
export * from "./file-system-utils.js";
|
|
8
|
+
export * from "./skill-file-gateway.js";
|
|
8
9
|
export * from "./workflow-gateway.js";
|
|
9
10
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/gateways/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,cAAc,6BAA6B,CAAC;AAC5C,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/gateways/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,cAAc,6BAA6B,CAAC;AAC5C,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC"}
|
package/dist/gateways/index.js
CHANGED
|
@@ -5,5 +5,6 @@ export * from "./action-version-gateway.js";
|
|
|
5
5
|
export * from "./agent-file-gateway.js";
|
|
6
6
|
export * from "./environment-gateway.js";
|
|
7
7
|
export * from "./file-system-utils.js";
|
|
8
|
+
export * from "./skill-file-gateway.js";
|
|
8
9
|
export * from "./workflow-gateway.js";
|
|
9
10
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/gateways/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,cAAc,6BAA6B,CAAC;AAC5C,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/gateways/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,cAAc,6BAA6B,CAAC;AAC5C,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Gateway for skill file system operations.
|
|
3
|
+
* This module abstracts file system access for Copilot Agent Skill files.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Interface for skill file gateway
|
|
7
|
+
* Allows for different implementations (file system, mock, etc.)
|
|
8
|
+
*/
|
|
9
|
+
export interface SkillFileGateway {
|
|
10
|
+
/**
|
|
11
|
+
* Checks if a skill directory already exists
|
|
12
|
+
* @param targetDir The root directory of the repository
|
|
13
|
+
* @param skillName The normalized name of the skill
|
|
14
|
+
* @returns true if the skill directory exists
|
|
15
|
+
*/
|
|
16
|
+
skillDirectoryExists(targetDir: string, skillName: string): Promise<boolean>;
|
|
17
|
+
/**
|
|
18
|
+
* Ensures the .github/skills/<name> directory exists
|
|
19
|
+
* @param targetDir The root directory of the repository
|
|
20
|
+
* @param skillName The normalized name of the skill
|
|
21
|
+
*/
|
|
22
|
+
ensureSkillDirectory(targetDir: string, skillName: string): Promise<void>;
|
|
23
|
+
/**
|
|
24
|
+
* Writes content to a SKILL.md file
|
|
25
|
+
* @param targetDir The root directory of the repository
|
|
26
|
+
* @param skillName The normalized name of the skill
|
|
27
|
+
* @param content The content to write to the file
|
|
28
|
+
*/
|
|
29
|
+
writeSkillFile(targetDir: string, skillName: string, content: string): Promise<void>;
|
|
30
|
+
/**
|
|
31
|
+
* Returns the full path to a skill directory
|
|
32
|
+
* @param targetDir The root directory of the repository
|
|
33
|
+
* @param skillName The normalized name of the skill
|
|
34
|
+
* @returns The full path to the skill directory
|
|
35
|
+
*/
|
|
36
|
+
getSkillDirectoryPath(targetDir: string, skillName: string): string;
|
|
37
|
+
/**
|
|
38
|
+
* Returns the full path to a SKILL.md file
|
|
39
|
+
* @param targetDir The root directory of the repository
|
|
40
|
+
* @param skillName The normalized name of the skill
|
|
41
|
+
* @returns The full path to the SKILL.md file
|
|
42
|
+
*/
|
|
43
|
+
getSkillFilePath(targetDir: string, skillName: string): string;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* File system implementation of the skill file gateway
|
|
47
|
+
*/
|
|
48
|
+
export declare class FileSystemSkillFileGateway implements SkillFileGateway {
|
|
49
|
+
getSkillDirectoryPath(targetDir: string, skillName: string): string;
|
|
50
|
+
getSkillFilePath(targetDir: string, skillName: string): string;
|
|
51
|
+
skillDirectoryExists(targetDir: string, skillName: string): Promise<boolean>;
|
|
52
|
+
ensureSkillDirectory(targetDir: string, skillName: string): Promise<void>;
|
|
53
|
+
writeSkillFile(targetDir: string, skillName: string, content: string): Promise<void>;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Creates and returns the default skill file gateway
|
|
57
|
+
*/
|
|
58
|
+
export declare function createSkillFileGateway(): SkillFileGateway;
|
|
59
|
+
//# sourceMappingURL=skill-file-gateway.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-file-gateway.d.ts","sourceRoot":"","sources":["../../src/gateways/skill-file-gateway.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC7B;;;;;OAKG;IACH,oBAAoB,CAChB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAClB,OAAO,CAAC,OAAO,CAAC,CAAC;IAEpB;;;;OAIG;IACH,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE1E;;;;;OAKG;IACH,cAAc,CACV,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjB;;;;;OAKG;IACH,qBAAqB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC;IAEpE;;;;;OAKG;IACH,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC;CAClE;AAED;;GAEG;AACH,qBAAa,0BAA2B,YAAW,gBAAgB;IAC/D,qBAAqB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM;IAInE,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM;IAOxD,oBAAoB,CACtB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAClB,OAAO,CAAC,OAAO,CAAC;IAKb,oBAAoB,CACtB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAClB,OAAO,CAAC,IAAI,CAAC;IAKV,cAAc,CAChB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC;CAInB;AAED;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,gBAAgB,CAEzD"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Gateway for skill file system operations.
|
|
3
|
+
* This module abstracts file system access for Copilot Agent Skill files.
|
|
4
|
+
*/
|
|
5
|
+
import { mkdir, writeFile } from "node:fs/promises";
|
|
6
|
+
import { join } from "node:path";
|
|
7
|
+
import { fileExists } from "./file-system-utils.js";
|
|
8
|
+
/**
|
|
9
|
+
* File system implementation of the skill file gateway
|
|
10
|
+
*/
|
|
11
|
+
export class FileSystemSkillFileGateway {
|
|
12
|
+
getSkillDirectoryPath(targetDir, skillName) {
|
|
13
|
+
return join(targetDir, ".github", "skills", skillName);
|
|
14
|
+
}
|
|
15
|
+
getSkillFilePath(targetDir, skillName) {
|
|
16
|
+
return join(this.getSkillDirectoryPath(targetDir, skillName), "SKILL.md");
|
|
17
|
+
}
|
|
18
|
+
async skillDirectoryExists(targetDir, skillName) {
|
|
19
|
+
const dirPath = this.getSkillDirectoryPath(targetDir, skillName);
|
|
20
|
+
return fileExists(dirPath);
|
|
21
|
+
}
|
|
22
|
+
async ensureSkillDirectory(targetDir, skillName) {
|
|
23
|
+
const skillDir = this.getSkillDirectoryPath(targetDir, skillName);
|
|
24
|
+
await mkdir(skillDir, { recursive: true });
|
|
25
|
+
}
|
|
26
|
+
async writeSkillFile(targetDir, skillName, content) {
|
|
27
|
+
const filePath = this.getSkillFilePath(targetDir, skillName);
|
|
28
|
+
await writeFile(filePath, content, { encoding: "utf-8" });
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Creates and returns the default skill file gateway
|
|
33
|
+
*/
|
|
34
|
+
export function createSkillFileGateway() {
|
|
35
|
+
return new FileSystemSkillFileGateway();
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=skill-file-gateway.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-file-gateway.js","sourceRoot":"","sources":["../../src/gateways/skill-file-gateway.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAsDpD;;GAEG;AACH,MAAM,OAAO,0BAA0B;IACnC,qBAAqB,CAAC,SAAiB,EAAE,SAAiB;QACtD,OAAO,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;IAC3D,CAAC;IAED,gBAAgB,CAAC,SAAiB,EAAE,SAAiB;QACjD,OAAO,IAAI,CACP,IAAI,CAAC,qBAAqB,CAAC,SAAS,EAAE,SAAS,CAAC,EAChD,UAAU,CACb,CAAC;IACN,CAAC;IAED,KAAK,CAAC,oBAAoB,CACtB,SAAiB,EACjB,SAAiB;QAEjB,MAAM,OAAO,GAAG,IAAI,CAAC,qBAAqB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QACjE,OAAO,UAAU,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC;IAED,KAAK,CAAC,oBAAoB,CACtB,SAAiB,EACjB,SAAiB;QAEjB,MAAM,QAAQ,GAAG,IAAI,CAAC,qBAAqB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QAClE,MAAM,KAAK,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/C,CAAC;IAED,KAAK,CAAC,cAAc,CAChB,SAAiB,EACjB,SAAiB,EACjB,OAAe;QAEf,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QAC7D,MAAM,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;IAC9D,CAAC;CACJ;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB;IAClC,OAAO,IAAI,0BAA0B,EAAE,CAAC;AAC5C,CAAC"}
|
package/dist/lib/config.d.ts
CHANGED
|
@@ -21,7 +21,7 @@ export interface LousyAgentsConfig {
|
|
|
21
21
|
export declare function loadInitConfig(): Promise<LousyAgentsConfig>;
|
|
22
22
|
/**
|
|
23
23
|
* Gets the filesystem structure for a specific project type
|
|
24
|
-
* Lazy-loads webapp
|
|
24
|
+
* Lazy-loads webapp and REST API structures only when requested
|
|
25
25
|
*/
|
|
26
26
|
export declare function getProjectStructure(projectType: "CLI" | "webapp" | "REST API" | "GraphQL API"): Promise<FilesystemStructure | undefined>;
|
|
27
27
|
//# sourceMappingURL=config.d.ts.map
|
package/dist/lib/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAQrE;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAC9B;;OAEG;IACH,UAAU,CAAC,EAAE;QACT,GAAG,CAAC,EAAE,mBAAmB,CAAC;QAC1B,MAAM,CAAC,EAAE,mBAAmB,CAAC;QAC7B,UAAU,CAAC,EAAE,mBAAmB,CAAC;QACjC,aAAa,CAAC,EAAE,mBAAmB,CAAC;KACvC,CAAC;CACL;AA8YD;;;;GAIG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,iBAAiB,CAAC,CAiBjE;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CACrC,WAAW,EAAE,KAAK,GAAG,QAAQ,GAAG,UAAU,GAAG,aAAa,GAC3D,OAAO,CAAC,mBAAmB,GAAG,SAAS,CAAC,CAc1C"}
|
package/dist/lib/config.js
CHANGED
|
@@ -7,6 +7,7 @@ const __filename = fileURLToPath(import.meta.url);
|
|
|
7
7
|
const __dirname = dirname(__filename);
|
|
8
8
|
const PROJECT_ROOT = join(__dirname, "..", "..");
|
|
9
9
|
const WEBAPP_TEMPLATE_DIR = join(PROJECT_ROOT, "ui", "copilot-with-react");
|
|
10
|
+
const RESTAPI_TEMPLATE_DIR = join(PROJECT_ROOT, "api", "copilot-with-fastify");
|
|
10
11
|
/**
|
|
11
12
|
* Default CLI project filesystem structure
|
|
12
13
|
*/
|
|
@@ -27,9 +28,9 @@ const DEFAULT_CLI_STRUCTURE = {
|
|
|
27
28
|
* Helper function to read template file content
|
|
28
29
|
* @throws Error if template file cannot be read
|
|
29
30
|
*/
|
|
30
|
-
function readTemplateFile(relativePath) {
|
|
31
|
+
function readTemplateFile(relativePath, templateDir = WEBAPP_TEMPLATE_DIR) {
|
|
31
32
|
try {
|
|
32
|
-
return readFileSync(join(
|
|
33
|
+
return readFileSync(join(templateDir, relativePath), "utf-8");
|
|
33
34
|
}
|
|
34
35
|
catch (error) {
|
|
35
36
|
const message = error instanceof Error ? error.message : String(error);
|
|
@@ -191,6 +192,175 @@ function buildWebappStructure() {
|
|
|
191
192
|
};
|
|
192
193
|
return cachedWebappStructure;
|
|
193
194
|
}
|
|
195
|
+
/**
|
|
196
|
+
* Cached REST API structure - lazy-loaded on first access
|
|
197
|
+
*/
|
|
198
|
+
let cachedRestApiStructure = null;
|
|
199
|
+
/**
|
|
200
|
+
* Helper function to read REST API template files
|
|
201
|
+
*/
|
|
202
|
+
function readRestApiTemplateFile(relativePath) {
|
|
203
|
+
return readTemplateFile(relativePath, RESTAPI_TEMPLATE_DIR);
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Builds the REST API project filesystem structure by reading template files
|
|
207
|
+
* This is called lazily only when REST API scaffolding is needed
|
|
208
|
+
*/
|
|
209
|
+
function buildRestApiStructure() {
|
|
210
|
+
if (cachedRestApiStructure) {
|
|
211
|
+
return cachedRestApiStructure;
|
|
212
|
+
}
|
|
213
|
+
cachedRestApiStructure = {
|
|
214
|
+
nodes: [
|
|
215
|
+
// Root configuration files
|
|
216
|
+
{
|
|
217
|
+
type: "file",
|
|
218
|
+
path: "package.json",
|
|
219
|
+
content: readRestApiTemplateFile("package.json"),
|
|
220
|
+
},
|
|
221
|
+
{
|
|
222
|
+
type: "file",
|
|
223
|
+
path: "tsconfig.json",
|
|
224
|
+
content: readRestApiTemplateFile("tsconfig.json"),
|
|
225
|
+
},
|
|
226
|
+
{
|
|
227
|
+
type: "file",
|
|
228
|
+
path: "vitest.config.ts",
|
|
229
|
+
content: readRestApiTemplateFile("vitest.config.ts"),
|
|
230
|
+
},
|
|
231
|
+
{
|
|
232
|
+
type: "file",
|
|
233
|
+
path: "vitest.integration.config.ts",
|
|
234
|
+
content: readRestApiTemplateFile("vitest.integration.config.ts"),
|
|
235
|
+
},
|
|
236
|
+
{
|
|
237
|
+
type: "file",
|
|
238
|
+
path: "vitest.setup.ts",
|
|
239
|
+
content: readRestApiTemplateFile("vitest.setup.ts"),
|
|
240
|
+
},
|
|
241
|
+
{
|
|
242
|
+
type: "file",
|
|
243
|
+
path: "biome.json",
|
|
244
|
+
content: readRestApiTemplateFile("biome.json"),
|
|
245
|
+
},
|
|
246
|
+
{
|
|
247
|
+
type: "file",
|
|
248
|
+
path: ".editorconfig",
|
|
249
|
+
content: readRestApiTemplateFile(".editorconfig"),
|
|
250
|
+
},
|
|
251
|
+
{
|
|
252
|
+
type: "file",
|
|
253
|
+
path: ".nvmrc",
|
|
254
|
+
content: readRestApiTemplateFile(".nvmrc"),
|
|
255
|
+
},
|
|
256
|
+
{
|
|
257
|
+
type: "file",
|
|
258
|
+
path: ".yamllint",
|
|
259
|
+
content: readRestApiTemplateFile(".yamllint"),
|
|
260
|
+
},
|
|
261
|
+
// GitHub copilot instructions
|
|
262
|
+
{
|
|
263
|
+
type: "directory",
|
|
264
|
+
path: ".github",
|
|
265
|
+
},
|
|
266
|
+
{
|
|
267
|
+
type: "directory",
|
|
268
|
+
path: ".github/instructions",
|
|
269
|
+
},
|
|
270
|
+
{
|
|
271
|
+
type: "file",
|
|
272
|
+
path: ".github/copilot-instructions.md",
|
|
273
|
+
content: readRestApiTemplateFile(".github/copilot-instructions.md"),
|
|
274
|
+
},
|
|
275
|
+
{
|
|
276
|
+
type: "file",
|
|
277
|
+
path: ".github/instructions/test.instructions.md",
|
|
278
|
+
content: readRestApiTemplateFile(".github/instructions/test.instructions.md"),
|
|
279
|
+
},
|
|
280
|
+
{
|
|
281
|
+
type: "file",
|
|
282
|
+
path: ".github/instructions/spec.instructions.md",
|
|
283
|
+
content: readRestApiTemplateFile(".github/instructions/spec.instructions.md"),
|
|
284
|
+
},
|
|
285
|
+
{
|
|
286
|
+
type: "file",
|
|
287
|
+
path: ".github/instructions/pipeline.instructions.md",
|
|
288
|
+
content: readRestApiTemplateFile(".github/instructions/pipeline.instructions.md"),
|
|
289
|
+
},
|
|
290
|
+
{
|
|
291
|
+
type: "file",
|
|
292
|
+
path: ".github/instructions/software-architecture.instructions.md",
|
|
293
|
+
content: readRestApiTemplateFile(".github/instructions/software-architecture.instructions.md"),
|
|
294
|
+
},
|
|
295
|
+
// GitHub Issue Templates
|
|
296
|
+
{
|
|
297
|
+
type: "directory",
|
|
298
|
+
path: ".github/ISSUE_TEMPLATE",
|
|
299
|
+
},
|
|
300
|
+
{
|
|
301
|
+
type: "file",
|
|
302
|
+
path: ".github/ISSUE_TEMPLATE/feature-to-spec.yml",
|
|
303
|
+
content: readRestApiTemplateFile(".github/ISSUE_TEMPLATE/feature-to-spec.yml"),
|
|
304
|
+
},
|
|
305
|
+
// GitHub Workflows
|
|
306
|
+
{
|
|
307
|
+
type: "directory",
|
|
308
|
+
path: ".github/workflows",
|
|
309
|
+
},
|
|
310
|
+
{
|
|
311
|
+
type: "file",
|
|
312
|
+
path: ".github/workflows/assign-copilot.yml",
|
|
313
|
+
content: readRestApiTemplateFile(".github/workflows/assign-copilot.yml"),
|
|
314
|
+
},
|
|
315
|
+
{
|
|
316
|
+
type: "file",
|
|
317
|
+
path: ".github/workflows/ci.yml",
|
|
318
|
+
content: readRestApiTemplateFile(".github/workflows/ci.yml"),
|
|
319
|
+
},
|
|
320
|
+
// Specs directory
|
|
321
|
+
{
|
|
322
|
+
type: "directory",
|
|
323
|
+
path: ".github/specs",
|
|
324
|
+
},
|
|
325
|
+
{
|
|
326
|
+
type: "file",
|
|
327
|
+
path: ".github/specs/README.md",
|
|
328
|
+
content: readRestApiTemplateFile(".github/specs/README.md"),
|
|
329
|
+
},
|
|
330
|
+
// VSCode configuration
|
|
331
|
+
{
|
|
332
|
+
type: "directory",
|
|
333
|
+
path: ".vscode",
|
|
334
|
+
},
|
|
335
|
+
{
|
|
336
|
+
type: "file",
|
|
337
|
+
path: ".vscode/extensions.json",
|
|
338
|
+
content: readRestApiTemplateFile(".vscode/extensions.json"),
|
|
339
|
+
},
|
|
340
|
+
{
|
|
341
|
+
type: "file",
|
|
342
|
+
path: ".vscode/launch.json",
|
|
343
|
+
content: readRestApiTemplateFile(".vscode/launch.json"),
|
|
344
|
+
},
|
|
345
|
+
{
|
|
346
|
+
type: "file",
|
|
347
|
+
path: ".vscode/mcp.json",
|
|
348
|
+
content: readRestApiTemplateFile(".vscode/mcp.json"),
|
|
349
|
+
},
|
|
350
|
+
// Devcontainer configuration
|
|
351
|
+
{
|
|
352
|
+
type: "directory",
|
|
353
|
+
path: ".devcontainer",
|
|
354
|
+
},
|
|
355
|
+
{
|
|
356
|
+
type: "file",
|
|
357
|
+
path: ".devcontainer/devcontainer.json",
|
|
358
|
+
content: readRestApiTemplateFile(".devcontainer/devcontainer.json"),
|
|
359
|
+
},
|
|
360
|
+
],
|
|
361
|
+
};
|
|
362
|
+
return cachedRestApiStructure;
|
|
363
|
+
}
|
|
194
364
|
/**
|
|
195
365
|
* Loads the configuration for the init command
|
|
196
366
|
* Falls back to defaults if no configuration is found
|
|
@@ -213,7 +383,7 @@ export async function loadInitConfig() {
|
|
|
213
383
|
}
|
|
214
384
|
/**
|
|
215
385
|
* Gets the filesystem structure for a specific project type
|
|
216
|
-
* Lazy-loads webapp
|
|
386
|
+
* Lazy-loads webapp and REST API structures only when requested
|
|
217
387
|
*/
|
|
218
388
|
export async function getProjectStructure(projectType) {
|
|
219
389
|
const config = await loadInitConfig();
|
|
@@ -221,6 +391,10 @@ export async function getProjectStructure(projectType) {
|
|
|
221
391
|
if (projectType === "webapp") {
|
|
222
392
|
return config.structures?.webapp || buildWebappStructure();
|
|
223
393
|
}
|
|
394
|
+
// Lazy-load REST API structure only when requested
|
|
395
|
+
if (projectType === "REST API") {
|
|
396
|
+
return config.structures?.["REST API"] || buildRestApiStructure();
|
|
397
|
+
}
|
|
224
398
|
return config.structures?.[projectType];
|
|
225
399
|
}
|
|
226
400
|
//# sourceMappingURL=config.js.map
|
package/dist/lib/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,KAAK,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAGlC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AACtC,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AACjD,MAAM,mBAAmB,GAAG,IAAI,CAAC,YAAY,EAAE,IAAI,EAAE,oBAAoB,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Use case for creating GitHub Copilot Agent Skills.
|
|
3
|
+
* Orchestrates entity logic with gateway operations.
|
|
4
|
+
*/
|
|
5
|
+
import type { SkillFileGateway } from "../gateways/skill-file-gateway.js";
|
|
6
|
+
/**
|
|
7
|
+
* Result of the create skill operation
|
|
8
|
+
*/
|
|
9
|
+
export interface CreateSkillResult {
|
|
10
|
+
success: boolean;
|
|
11
|
+
normalizedName?: string;
|
|
12
|
+
skillDirectoryPath?: string;
|
|
13
|
+
skillFilePath?: string;
|
|
14
|
+
error?: string;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Use case for creating a new Agent Skill
|
|
18
|
+
*/
|
|
19
|
+
export declare class CreateSkillUseCase {
|
|
20
|
+
private readonly gateway;
|
|
21
|
+
constructor(gateway: SkillFileGateway);
|
|
22
|
+
/**
|
|
23
|
+
* Executes the create skill operation
|
|
24
|
+
* @param targetDir The root directory of the repository
|
|
25
|
+
* @param skillName The name of the skill to create
|
|
26
|
+
* @returns Result of the operation
|
|
27
|
+
*/
|
|
28
|
+
execute(targetDir: string, skillName: string): Promise<CreateSkillResult>;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=create-skill.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-skill.d.ts","sourceRoot":"","sources":["../../src/use-cases/create-skill.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAe1E;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,qBAAa,kBAAkB;IACf,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,gBAAgB;IAEtD;;;;;OAKG;IACG,OAAO,CACT,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAClB,OAAO,CAAC,iBAAiB,CAAC;CA6DhC"}
|