@lousy-agents/cli 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (151) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +148 -0
  3. package/dist/commands/copilot-setup.d.ts +5 -0
  4. package/dist/commands/copilot-setup.d.ts.map +1 -0
  5. package/dist/commands/copilot-setup.js +97 -0
  6. package/dist/commands/copilot-setup.js.map +1 -0
  7. package/dist/commands/init.d.ts +12 -0
  8. package/dist/commands/init.d.ts.map +1 -0
  9. package/dist/commands/init.js +115 -0
  10. package/dist/commands/init.js.map +1 -0
  11. package/dist/commands/new.d.ts +11 -0
  12. package/dist/commands/new.d.ts.map +1 -0
  13. package/dist/commands/new.js +41 -0
  14. package/dist/commands/new.js.map +1 -0
  15. package/dist/entities/copilot-agent.d.ts +15 -0
  16. package/dist/entities/copilot-agent.d.ts.map +1 -0
  17. package/dist/entities/copilot-agent.js +53 -0
  18. package/dist/entities/copilot-agent.js.map +1 -0
  19. package/dist/entities/copilot-setup.d.ts +65 -0
  20. package/dist/entities/copilot-setup.d.ts.map +1 -0
  21. package/dist/entities/copilot-setup.js +6 -0
  22. package/dist/entities/copilot-setup.js.map +1 -0
  23. package/dist/entities/index.d.ts +6 -0
  24. package/dist/entities/index.d.ts.map +1 -0
  25. package/dist/entities/index.js +6 -0
  26. package/dist/entities/index.js.map +1 -0
  27. package/dist/gateways/action-version-gateway.d.ts +39 -0
  28. package/dist/gateways/action-version-gateway.d.ts.map +1 -0
  29. package/dist/gateways/action-version-gateway.js +47 -0
  30. package/dist/gateways/action-version-gateway.js.map +1 -0
  31. package/dist/gateways/agent-file-gateway.d.ts +50 -0
  32. package/dist/gateways/agent-file-gateway.d.ts.map +1 -0
  33. package/dist/gateways/agent-file-gateway.js +34 -0
  34. package/dist/gateways/agent-file-gateway.js.map +1 -0
  35. package/dist/gateways/environment-gateway.d.ts +30 -0
  36. package/dist/gateways/environment-gateway.d.ts.map +1 -0
  37. package/dist/gateways/environment-gateway.js +56 -0
  38. package/dist/gateways/environment-gateway.js.map +1 -0
  39. package/dist/gateways/file-system-utils.d.ts +8 -0
  40. package/dist/gateways/file-system-utils.d.ts.map +1 -0
  41. package/dist/gateways/file-system-utils.js +17 -0
  42. package/dist/gateways/file-system-utils.js.map +1 -0
  43. package/dist/gateways/file-system-workflow-gateway.d.ts +27 -0
  44. package/dist/gateways/file-system-workflow-gateway.d.ts.map +1 -0
  45. package/dist/gateways/file-system-workflow-gateway.js +99 -0
  46. package/dist/gateways/file-system-workflow-gateway.js.map +1 -0
  47. package/dist/gateways/index.d.ts +9 -0
  48. package/dist/gateways/index.d.ts.map +1 -0
  49. package/dist/gateways/index.js +9 -0
  50. package/dist/gateways/index.js.map +1 -0
  51. package/dist/gateways/workflow-gateway.d.ts +43 -0
  52. package/dist/gateways/workflow-gateway.d.ts.map +1 -0
  53. package/dist/gateways/workflow-gateway.js +6 -0
  54. package/dist/gateways/workflow-gateway.js.map +1 -0
  55. package/dist/index.d.ts +3 -0
  56. package/dist/index.d.ts.map +1 -0
  57. package/dist/index.js +19 -0
  58. package/dist/index.js.map +1 -0
  59. package/dist/lib/config.d.ts +27 -0
  60. package/dist/lib/config.d.ts.map +1 -0
  61. package/dist/lib/config.js +226 -0
  62. package/dist/lib/config.js.map +1 -0
  63. package/dist/lib/copilot-setup-config.d.ts +79 -0
  64. package/dist/lib/copilot-setup-config.d.ts.map +1 -0
  65. package/dist/lib/copilot-setup-config.js +119 -0
  66. package/dist/lib/copilot-setup-config.js.map +1 -0
  67. package/dist/lib/filesystem-structure.d.ts +45 -0
  68. package/dist/lib/filesystem-structure.d.ts.map +1 -0
  69. package/dist/lib/filesystem-structure.js +69 -0
  70. package/dist/lib/filesystem-structure.js.map +1 -0
  71. package/dist/lib/mcp-test-client.d.ts +43 -0
  72. package/dist/lib/mcp-test-client.d.ts.map +1 -0
  73. package/dist/lib/mcp-test-client.js +167 -0
  74. package/dist/lib/mcp-test-client.js.map +1 -0
  75. package/dist/lib/project-name-validation.d.ts +43 -0
  76. package/dist/lib/project-name-validation.d.ts.map +1 -0
  77. package/dist/lib/project-name-validation.js +131 -0
  78. package/dist/lib/project-name-validation.js.map +1 -0
  79. package/dist/mcp/index.d.ts +5 -0
  80. package/dist/mcp/index.d.ts.map +1 -0
  81. package/dist/mcp/index.js +5 -0
  82. package/dist/mcp/index.js.map +1 -0
  83. package/dist/mcp/server.d.ts +15 -0
  84. package/dist/mcp/server.d.ts.map +1 -0
  85. package/dist/mcp/server.js +120 -0
  86. package/dist/mcp/server.js.map +1 -0
  87. package/dist/mcp/tools/analyze-action-versions.d.ts +9 -0
  88. package/dist/mcp/tools/analyze-action-versions.d.ts.map +1 -0
  89. package/dist/mcp/tools/analyze-action-versions.js +81 -0
  90. package/dist/mcp/tools/analyze-action-versions.js.map +1 -0
  91. package/dist/mcp/tools/create-copilot-setup-workflow.d.ts +9 -0
  92. package/dist/mcp/tools/create-copilot-setup-workflow.d.ts.map +1 -0
  93. package/dist/mcp/tools/create-copilot-setup-workflow.js +121 -0
  94. package/dist/mcp/tools/create-copilot-setup-workflow.js.map +1 -0
  95. package/dist/mcp/tools/discover-environment.d.ts +9 -0
  96. package/dist/mcp/tools/discover-environment.d.ts.map +1 -0
  97. package/dist/mcp/tools/discover-environment.js +30 -0
  98. package/dist/mcp/tools/discover-environment.js.map +1 -0
  99. package/dist/mcp/tools/discover-workflow-setup-actions.d.ts +9 -0
  100. package/dist/mcp/tools/discover-workflow-setup-actions.d.ts.map +1 -0
  101. package/dist/mcp/tools/discover-workflow-setup-actions.js +37 -0
  102. package/dist/mcp/tools/discover-workflow-setup-actions.js.map +1 -0
  103. package/dist/mcp/tools/index.d.ts +11 -0
  104. package/dist/mcp/tools/index.d.ts.map +1 -0
  105. package/dist/mcp/tools/index.js +11 -0
  106. package/dist/mcp/tools/index.js.map +1 -0
  107. package/dist/mcp/tools/read-copilot-setup-workflow.d.ts +9 -0
  108. package/dist/mcp/tools/read-copilot-setup-workflow.d.ts.map +1 -0
  109. package/dist/mcp/tools/read-copilot-setup-workflow.js +38 -0
  110. package/dist/mcp/tools/read-copilot-setup-workflow.js.map +1 -0
  111. package/dist/mcp/tools/resolve-action-versions.d.ts +10 -0
  112. package/dist/mcp/tools/resolve-action-versions.d.ts.map +1 -0
  113. package/dist/mcp/tools/resolve-action-versions.js +61 -0
  114. package/dist/mcp/tools/resolve-action-versions.js.map +1 -0
  115. package/dist/mcp/tools/types.d.ts +67 -0
  116. package/dist/mcp/tools/types.d.ts.map +1 -0
  117. package/dist/mcp/tools/types.js +24 -0
  118. package/dist/mcp/tools/types.js.map +1 -0
  119. package/dist/mcp-server.d.ts +7 -0
  120. package/dist/mcp-server.d.ts.map +1 -0
  121. package/dist/mcp-server.js +17 -0
  122. package/dist/mcp-server.js.map +1 -0
  123. package/dist/use-cases/action-resolution.d.ts +66 -0
  124. package/dist/use-cases/action-resolution.d.ts.map +1 -0
  125. package/dist/use-cases/action-resolution.js +107 -0
  126. package/dist/use-cases/action-resolution.js.map +1 -0
  127. package/dist/use-cases/candidate-builder.d.ts +17 -0
  128. package/dist/use-cases/candidate-builder.d.ts.map +1 -0
  129. package/dist/use-cases/candidate-builder.js +67 -0
  130. package/dist/use-cases/candidate-builder.js.map +1 -0
  131. package/dist/use-cases/copilot-setup.d.ts +8 -0
  132. package/dist/use-cases/copilot-setup.d.ts.map +1 -0
  133. package/dist/use-cases/copilot-setup.js +10 -0
  134. package/dist/use-cases/copilot-setup.js.map +1 -0
  135. package/dist/use-cases/create-copilot-agent.d.ts +29 -0
  136. package/dist/use-cases/create-copilot-agent.d.ts.map +1 -0
  137. package/dist/use-cases/create-copilot-agent.js +73 -0
  138. package/dist/use-cases/create-copilot-agent.js.map +1 -0
  139. package/dist/use-cases/index.d.ts +9 -0
  140. package/dist/use-cases/index.d.ts.map +1 -0
  141. package/dist/use-cases/index.js +9 -0
  142. package/dist/use-cases/index.js.map +1 -0
  143. package/dist/use-cases/setup-step-discovery.d.ts +87 -0
  144. package/dist/use-cases/setup-step-discovery.d.ts.map +1 -0
  145. package/dist/use-cases/setup-step-discovery.js +202 -0
  146. package/dist/use-cases/setup-step-discovery.js.map +1 -0
  147. package/dist/use-cases/workflow-generator.d.ts +34 -0
  148. package/dist/use-cases/workflow-generator.d.ts.map +1 -0
  149. package/dist/use-cases/workflow-generator.js +195 -0
  150. package/dist/use-cases/workflow-generator.js.map +1 -0
  151. package/package.json +65 -0
@@ -0,0 +1,226 @@
1
+ import { readFileSync } from "node:fs";
2
+ import { dirname, join } from "node:path";
3
+ import { fileURLToPath } from "node:url";
4
+ import { loadConfig } from "c12";
5
+ import { consola } from "consola";
6
+ const __filename = fileURLToPath(import.meta.url);
7
+ const __dirname = dirname(__filename);
8
+ const PROJECT_ROOT = join(__dirname, "..", "..");
9
+ const WEBAPP_TEMPLATE_DIR = join(PROJECT_ROOT, "ui", "copilot-with-react");
10
+ /**
11
+ * Default CLI project filesystem structure
12
+ */
13
+ const DEFAULT_CLI_STRUCTURE = {
14
+ nodes: [
15
+ {
16
+ type: "directory",
17
+ path: ".github/instructions",
18
+ },
19
+ {
20
+ type: "file",
21
+ path: ".github/copilot-instructions.md",
22
+ content: "",
23
+ },
24
+ ],
25
+ };
26
+ /**
27
+ * Helper function to read template file content
28
+ * @throws Error if template file cannot be read
29
+ */
30
+ function readTemplateFile(relativePath) {
31
+ try {
32
+ return readFileSync(join(WEBAPP_TEMPLATE_DIR, relativePath), "utf-8");
33
+ }
34
+ catch (error) {
35
+ const message = error instanceof Error ? error.message : String(error);
36
+ const errorMsg = `Failed to read template file ${relativePath}: ${message}`;
37
+ consola.error(errorMsg);
38
+ throw new Error(errorMsg);
39
+ }
40
+ }
41
+ /**
42
+ * Cached webapp structure - lazy-loaded on first access
43
+ */
44
+ let cachedWebappStructure = null;
45
+ /**
46
+ * Builds the webapp project filesystem structure by reading template files
47
+ * This is called lazily only when webapp scaffolding is needed
48
+ */
49
+ function buildWebappStructure() {
50
+ if (cachedWebappStructure) {
51
+ return cachedWebappStructure;
52
+ }
53
+ cachedWebappStructure = {
54
+ nodes: [
55
+ // Root configuration files
56
+ {
57
+ type: "file",
58
+ path: "package.json",
59
+ content: readTemplateFile("package.json"),
60
+ },
61
+ {
62
+ type: "file",
63
+ path: "tsconfig.json",
64
+ content: readTemplateFile("tsconfig.json"),
65
+ },
66
+ {
67
+ type: "file",
68
+ path: "next.config.ts",
69
+ content: readTemplateFile("next.config.ts"),
70
+ },
71
+ {
72
+ type: "file",
73
+ path: "vitest.config.ts",
74
+ content: readTemplateFile("vitest.config.ts"),
75
+ },
76
+ {
77
+ type: "file",
78
+ path: "vitest.setup.ts",
79
+ content: readTemplateFile("vitest.setup.ts"),
80
+ },
81
+ {
82
+ type: "file",
83
+ path: "biome.json",
84
+ content: readTemplateFile("biome.json"),
85
+ },
86
+ {
87
+ type: "file",
88
+ path: ".editorconfig",
89
+ content: readTemplateFile(".editorconfig"),
90
+ },
91
+ {
92
+ type: "file",
93
+ path: ".nvmrc",
94
+ content: readTemplateFile(".nvmrc"),
95
+ },
96
+ {
97
+ type: "file",
98
+ path: ".yamllint",
99
+ content: readTemplateFile(".yamllint"),
100
+ },
101
+ // GitHub copilot instructions
102
+ {
103
+ type: "directory",
104
+ path: ".github",
105
+ },
106
+ {
107
+ type: "directory",
108
+ path: ".github/instructions",
109
+ },
110
+ {
111
+ type: "file",
112
+ path: ".github/copilot-instructions.md",
113
+ content: readTemplateFile(".github/copilot-instructions.md"),
114
+ },
115
+ {
116
+ type: "file",
117
+ path: ".github/instructions/test.instructions.md",
118
+ content: readTemplateFile(".github/instructions/test.instructions.md"),
119
+ },
120
+ {
121
+ type: "file",
122
+ path: ".github/instructions/spec.instructions.md",
123
+ content: readTemplateFile(".github/instructions/spec.instructions.md"),
124
+ },
125
+ {
126
+ type: "file",
127
+ path: ".github/instructions/pipeline.instructions.md",
128
+ content: readTemplateFile(".github/instructions/pipeline.instructions.md"),
129
+ },
130
+ {
131
+ type: "file",
132
+ path: ".github/instructions/software-architecture.instructions.md",
133
+ content: readTemplateFile(".github/instructions/software-architecture.instructions.md"),
134
+ },
135
+ // GitHub Issue Templates
136
+ {
137
+ type: "directory",
138
+ path: ".github/ISSUE_TEMPLATE",
139
+ },
140
+ {
141
+ type: "file",
142
+ path: ".github/ISSUE_TEMPLATE/feature-to-spec.yml",
143
+ content: readTemplateFile(".github/ISSUE_TEMPLATE/feature-to-spec.yml"),
144
+ },
145
+ // GitHub Workflows
146
+ {
147
+ type: "directory",
148
+ path: ".github/workflows",
149
+ },
150
+ {
151
+ type: "file",
152
+ path: ".github/workflows/assign-copilot.yml",
153
+ content: readTemplateFile(".github/workflows/assign-copilot.yml"),
154
+ },
155
+ // Specs directory
156
+ {
157
+ type: "directory",
158
+ path: ".github/specs",
159
+ },
160
+ {
161
+ type: "file",
162
+ path: ".github/specs/README.md",
163
+ content: readTemplateFile(".github/specs/README.md"),
164
+ },
165
+ // VSCode configuration
166
+ {
167
+ type: "directory",
168
+ path: ".vscode",
169
+ },
170
+ {
171
+ type: "file",
172
+ path: ".vscode/extensions.json",
173
+ content: readTemplateFile(".vscode/extensions.json"),
174
+ },
175
+ {
176
+ type: "file",
177
+ path: ".vscode/launch.json",
178
+ content: readTemplateFile(".vscode/launch.json"),
179
+ },
180
+ // Devcontainer configuration
181
+ {
182
+ type: "directory",
183
+ path: ".devcontainer",
184
+ },
185
+ {
186
+ type: "file",
187
+ path: ".devcontainer/devcontainer.json",
188
+ content: readTemplateFile(".devcontainer/devcontainer.json"),
189
+ },
190
+ ],
191
+ };
192
+ return cachedWebappStructure;
193
+ }
194
+ /**
195
+ * Loads the configuration for the init command
196
+ * Falls back to defaults if no configuration is found
197
+ * Note: webapp structure is lazy-loaded only when requested
198
+ */
199
+ export async function loadInitConfig() {
200
+ const { config } = await loadConfig({
201
+ name: "lousy-agents",
202
+ defaults: {
203
+ structures: {
204
+ CLI: DEFAULT_CLI_STRUCTURE,
205
+ },
206
+ },
207
+ });
208
+ return (config || {
209
+ structures: {
210
+ CLI: DEFAULT_CLI_STRUCTURE,
211
+ },
212
+ });
213
+ }
214
+ /**
215
+ * Gets the filesystem structure for a specific project type
216
+ * Lazy-loads webapp structure only when requested
217
+ */
218
+ export async function getProjectStructure(projectType) {
219
+ const config = await loadInitConfig();
220
+ // Lazy-load webapp structure only when requested
221
+ if (projectType === "webapp") {
222
+ return config.structures?.webapp || buildWebappStructure();
223
+ }
224
+ return config.structures?.[projectType];
225
+ }
226
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,79 @@
1
+ /**
2
+ * Configuration for the copilot-setup command.
3
+ * Uses c12 for configuration loading, allowing runtime customization.
4
+ */
5
+ import type { VersionFileType } from "../entities/copilot-setup.js";
6
+ /**
7
+ * Configuration for a version file mapping
8
+ */
9
+ export interface VersionFileMapping {
10
+ /**
11
+ * The filename to detect (e.g., ".nvmrc")
12
+ */
13
+ filename: string;
14
+ /**
15
+ * The version file type (e.g., "node")
16
+ */
17
+ type: VersionFileType;
18
+ }
19
+ /**
20
+ * Configuration for a setup action
21
+ */
22
+ export interface SetupActionConfig {
23
+ /**
24
+ * The action name (e.g., "actions/setup-node")
25
+ */
26
+ action: string;
27
+ /**
28
+ * The version file type this action handles
29
+ */
30
+ type: VersionFileType;
31
+ /**
32
+ * The "with" config key for version file (e.g., "node-version-file")
33
+ */
34
+ versionFileKey: string;
35
+ }
36
+ /**
37
+ * Configuration for copilot-setup command
38
+ */
39
+ export interface CopilotSetupConfig {
40
+ /**
41
+ * List of idiomatic version files to detect
42
+ */
43
+ versionFiles: VersionFileMapping[];
44
+ /**
45
+ * List of setup actions and their configuration
46
+ */
47
+ setupActions: SetupActionConfig[];
48
+ /**
49
+ * List of action patterns to detect in existing workflows
50
+ */
51
+ setupActionPatterns: string[];
52
+ }
53
+ /**
54
+ * Loads the copilot-setup configuration using c12
55
+ * Falls back to defaults if no configuration is found
56
+ */
57
+ export declare function loadCopilotSetupConfig(): Promise<CopilotSetupConfig>;
58
+ /**
59
+ * Resets the cached configuration (useful for testing)
60
+ *
61
+ * This function is retained for backwards compatibility but is a no-op
62
+ * because configuration is no longer cached at module scope.
63
+ */
64
+ export declare function resetCopilotSetupConfigCache(): void;
65
+ /**
66
+ * Gets a version file type to action mapping from config
67
+ * Returns a partial record as not all types may be configured
68
+ */
69
+ export declare function getVersionTypeToActionMap(config: CopilotSetupConfig): Partial<Record<VersionFileType, string>>;
70
+ /**
71
+ * Gets a version file type to config key mapping from config
72
+ * Returns a partial record as not all types may be configured
73
+ */
74
+ export declare function getVersionFileConfigKeyMap(config: CopilotSetupConfig): Partial<Record<VersionFileType, string>>;
75
+ /**
76
+ * Gets a filename to version type mapping from config
77
+ */
78
+ export declare function getVersionFilenameToTypeMap(config: CopilotSetupConfig): Record<string, VersionFileType>;
79
+ //# sourceMappingURL=copilot-setup-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"copilot-setup-config.d.ts","sourceRoot":"","sources":["../../src/lib/copilot-setup-config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAEpE;;GAEG;AACH,MAAM,WAAW,kBAAkB;IAC/B;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IACjB;;OAEG;IACH,IAAI,EAAE,eAAe,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAC9B;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,IAAI,EAAE,eAAe,CAAC;IACtB;;OAEG;IACH,cAAc,EAAE,MAAM,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IAC/B;;OAEG;IACH,YAAY,EAAE,kBAAkB,EAAE,CAAC;IACnC;;OAEG;IACH,YAAY,EAAE,iBAAiB,EAAE,CAAC;IAClC;;OAEG;IACH,mBAAmB,EAAE,MAAM,EAAE,CAAC;CACjC;AAkED;;;GAGG;AACH,wBAAsB,sBAAsB,IAAI,OAAO,CAAC,kBAAkB,CAAC,CAQ1E;AAED;;;;;GAKG;AACH,wBAAgB,4BAA4B,IAAI,IAAI,CAEnD;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CACrC,MAAM,EAAE,kBAAkB,GAC3B,OAAO,CAAC,MAAM,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC,CAM1C;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CACtC,MAAM,EAAE,kBAAkB,GAC3B,OAAO,CAAC,MAAM,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC,CAM1C;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CACvC,MAAM,EAAE,kBAAkB,GAC3B,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAMjC"}
@@ -0,0 +1,119 @@
1
+ /**
2
+ * Configuration for the copilot-setup command.
3
+ * Uses c12 for configuration loading, allowing runtime customization.
4
+ */
5
+ import { loadConfig } from "c12";
6
+ /**
7
+ * Default version file mappings
8
+ */
9
+ const DEFAULT_VERSION_FILES = [
10
+ { filename: ".nvmrc", type: "node" },
11
+ { filename: ".node-version", type: "node" },
12
+ { filename: ".python-version", type: "python" },
13
+ { filename: ".java-version", type: "java" },
14
+ { filename: ".ruby-version", type: "ruby" },
15
+ { filename: ".go-version", type: "go" },
16
+ ];
17
+ /**
18
+ * Default setup action configurations
19
+ */
20
+ const DEFAULT_SETUP_ACTIONS = [
21
+ {
22
+ action: "actions/setup-node",
23
+ type: "node",
24
+ versionFileKey: "node-version-file",
25
+ },
26
+ {
27
+ action: "actions/setup-python",
28
+ type: "python",
29
+ versionFileKey: "python-version-file",
30
+ },
31
+ {
32
+ action: "actions/setup-java",
33
+ type: "java",
34
+ versionFileKey: "java-version-file",
35
+ },
36
+ {
37
+ action: "actions/setup-ruby",
38
+ type: "ruby",
39
+ versionFileKey: "ruby-version-file",
40
+ },
41
+ {
42
+ action: "actions/setup-go",
43
+ type: "go",
44
+ versionFileKey: "go-version-file",
45
+ },
46
+ ];
47
+ /**
48
+ * Default setup action patterns to detect in workflows
49
+ */
50
+ const DEFAULT_SETUP_ACTION_PATTERNS = [
51
+ "actions/setup-node",
52
+ "actions/setup-python",
53
+ "actions/setup-java",
54
+ "actions/setup-go",
55
+ "actions/setup-ruby",
56
+ "jdx/mise-action",
57
+ ];
58
+ /**
59
+ * Default copilot-setup configuration
60
+ */
61
+ const DEFAULT_CONFIG = {
62
+ versionFiles: DEFAULT_VERSION_FILES,
63
+ setupActions: DEFAULT_SETUP_ACTIONS,
64
+ setupActionPatterns: DEFAULT_SETUP_ACTION_PATTERNS,
65
+ };
66
+ /**
67
+ * Loads the copilot-setup configuration using c12
68
+ * Falls back to defaults if no configuration is found
69
+ */
70
+ export async function loadCopilotSetupConfig() {
71
+ const { config } = await loadConfig({
72
+ name: "lousy-agents",
73
+ defaults: DEFAULT_CONFIG,
74
+ packageJson: "copilotSetup",
75
+ });
76
+ return config || DEFAULT_CONFIG;
77
+ }
78
+ /**
79
+ * Resets the cached configuration (useful for testing)
80
+ *
81
+ * This function is retained for backwards compatibility but is a no-op
82
+ * because configuration is no longer cached at module scope.
83
+ */
84
+ export function resetCopilotSetupConfigCache() {
85
+ // no in-memory cache to reset
86
+ }
87
+ /**
88
+ * Gets a version file type to action mapping from config
89
+ * Returns a partial record as not all types may be configured
90
+ */
91
+ export function getVersionTypeToActionMap(config) {
92
+ const map = {};
93
+ for (const action of config.setupActions) {
94
+ map[action.type] = action.action;
95
+ }
96
+ return map;
97
+ }
98
+ /**
99
+ * Gets a version file type to config key mapping from config
100
+ * Returns a partial record as not all types may be configured
101
+ */
102
+ export function getVersionFileConfigKeyMap(config) {
103
+ const map = {};
104
+ for (const action of config.setupActions) {
105
+ map[action.type] = action.versionFileKey;
106
+ }
107
+ return map;
108
+ }
109
+ /**
110
+ * Gets a filename to version type mapping from config
111
+ */
112
+ export function getVersionFilenameToTypeMap(config) {
113
+ const map = {};
114
+ for (const file of config.versionFiles) {
115
+ map[file.filename] = file.type;
116
+ }
117
+ return map;
118
+ }
119
+ //# sourceMappingURL=copilot-setup-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"copilot-setup-config.js","sourceRoot":"","sources":["../../src/lib/copilot-setup-config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Template context for processing template variables in file content
3
+ */
4
+ export interface TemplateContext {
5
+ projectName: string;
6
+ }
7
+ /**
8
+ * Represents a file to be created in the filesystem
9
+ */
10
+ export interface FileNode {
11
+ type: "file";
12
+ path: string;
13
+ content: string;
14
+ }
15
+ /**
16
+ * Represents a directory to be created in the filesystem
17
+ */
18
+ export interface DirectoryNode {
19
+ type: "directory";
20
+ path: string;
21
+ }
22
+ /**
23
+ * Union type for filesystem nodes
24
+ */
25
+ export type FilesystemNode = FileNode | DirectoryNode;
26
+ /**
27
+ * Declarative filesystem structure definition
28
+ */
29
+ export interface FilesystemStructure {
30
+ nodes: FilesystemNode[];
31
+ }
32
+ /**
33
+ * Checks if a file or directory exists
34
+ */
35
+ export declare function fileExists(path: string): Promise<boolean>;
36
+ /**
37
+ * Creates the filesystem structure defined by the given structure definition
38
+ * Preserves existing files and directories without modification
39
+ * Automatically creates parent directories for files
40
+ * @param structure The declarative filesystem structure to create
41
+ * @param targetDir The base directory where the structure should be created
42
+ * @param templateContext Optional context for processing template variables in file content
43
+ */
44
+ export declare function createFilesystemStructure(structure: FilesystemStructure, targetDir: string, templateContext?: TemplateContext): Promise<void>;
45
+ //# sourceMappingURL=filesystem-structure.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filesystem-structure.d.ts","sourceRoot":"","sources":["../../src/lib/filesystem-structure.ts"],"names":[],"mappings":"AAKA;;GAEG;AACH,MAAM,WAAW,eAAe;IAC5B,WAAW,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC1B,IAAI,EAAE,WAAW,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,aAAa,CAAC;AAEtD;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAChC,KAAK,EAAE,cAAc,EAAE,CAAC;CAC3B;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAO/D;AAsBD;;;;;;;GAOG;AACH,wBAAsB,yBAAyB,CAC3C,SAAS,EAAE,mBAAmB,EAC9B,SAAS,EAAE,MAAM,EACjB,eAAe,CAAC,EAAE,eAAe,GAClC,OAAO,CAAC,IAAI,CAAC,CA2Bf"}
@@ -0,0 +1,69 @@
1
+ import { access, mkdir, writeFile } from "node:fs/promises";
2
+ import { dirname, join } from "node:path";
3
+ import { consola } from "consola";
4
+ import { Eta } from "eta";
5
+ /**
6
+ * Checks if a file or directory exists
7
+ */
8
+ export async function fileExists(path) {
9
+ try {
10
+ await access(path);
11
+ return true;
12
+ }
13
+ catch {
14
+ return false;
15
+ }
16
+ }
17
+ /**
18
+ * Singleton Eta instance for template processing
19
+ */
20
+ const eta = new Eta();
21
+ /**
22
+ * Processes template content using Eta templating engine
23
+ * @param content The template content to process
24
+ * @param context The template context with values to substitute
25
+ * @returns The processed content with template variables replaced
26
+ */
27
+ function processTemplate(content, context) {
28
+ try {
29
+ return eta.renderString(content, context);
30
+ }
31
+ catch (error) {
32
+ const message = error instanceof Error ? error.message : String(error);
33
+ throw new Error(`Template processing failed: ${message}`);
34
+ }
35
+ }
36
+ /**
37
+ * Creates the filesystem structure defined by the given structure definition
38
+ * Preserves existing files and directories without modification
39
+ * Automatically creates parent directories for files
40
+ * @param structure The declarative filesystem structure to create
41
+ * @param targetDir The base directory where the structure should be created
42
+ * @param templateContext Optional context for processing template variables in file content
43
+ */
44
+ export async function createFilesystemStructure(structure, targetDir, templateContext) {
45
+ for (const node of structure.nodes) {
46
+ const fullPath = join(targetDir, node.path);
47
+ // Skip if already exists to preserve existing files/directories
48
+ if (await fileExists(fullPath)) {
49
+ consola.debug(`Skipping existing: ${fullPath}`);
50
+ continue;
51
+ }
52
+ if (node.type === "directory") {
53
+ await mkdir(fullPath, { recursive: true });
54
+ consola.debug(`Created directory: ${fullPath}`);
55
+ }
56
+ else if (node.type === "file") {
57
+ // Create parent directories if they don't exist
58
+ const dir = dirname(fullPath);
59
+ await mkdir(dir, { recursive: true });
60
+ // Process template if context is provided
61
+ const content = templateContext
62
+ ? processTemplate(node.content, templateContext)
63
+ : node.content;
64
+ await writeFile(fullPath, content, "utf-8");
65
+ consola.debug(`Created file: ${fullPath}`);
66
+ }
67
+ }
68
+ }
69
+ //# sourceMappingURL=filesystem-structure.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filesystem-structure.js","sourceRoot":"","sources":["../../src/lib/filesystem-structure.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAsC1B;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,IAAY;IACzC,IAAI,CAAC;QACD,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;QACnB,OAAO,IAAI,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,KAAK,CAAC;IACjB,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,GAAG,GAAG,IAAI,GAAG,EAAE,CAAC;AAEtB;;;;;GAKG;AACH,SAAS,eAAe,CAAC,OAAe,EAAE,OAAwB;IAC9D,IAAI,CAAC;QACD,OAAO,GAAG,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC9C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,MAAM,IAAI,KAAK,CAAC,+BAA+B,OAAO,EAAE,CAAC,CAAC;IAC9D,CAAC;AACL,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC3C,SAA8B,EAC9B,SAAiB,EACjB,eAAiC;IAEjC,KAAK,MAAM,IAAI,IAAI,SAAS,CAAC,KAAK,EAAE,CAAC;QACjC,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QAE5C,gEAAgE;QAChE,IAAI,MAAM,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC7B,OAAO,CAAC,KAAK,CAAC,sBAAsB,QAAQ,EAAE,CAAC,CAAC;YAChD,SAAS;QACb,CAAC;QAED,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YAC5B,MAAM,KAAK,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC3C,OAAO,CAAC,KAAK,CAAC,sBAAsB,QAAQ,EAAE,CAAC,CAAC;QACpD,CAAC;aAAM,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YAC9B,gDAAgD;YAChD,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;YAC9B,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAEtC,0CAA0C;YAC1C,MAAM,OAAO,GAAG,eAAe;gBAC3B,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,EAAE,eAAe,CAAC;gBAChD,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC;YAEnB,MAAM,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;YAC5C,OAAO,CAAC,KAAK,CAAC,iBAAiB,QAAQ,EAAE,CAAC,CAAC;QAC/C,CAAC;IACL,CAAC;AACL,CAAC"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * MCP test client for integration testing.
3
+ *
4
+ * This client communicates with an MCP server process via stdio,
5
+ * sending JSON-RPC messages and receiving responses.
6
+ */
7
+ /**
8
+ * MCP client for testing.
9
+ * Sends JSON-RPC messages to the MCP server and receives responses.
10
+ */
11
+ export declare class McpTestClient {
12
+ private process;
13
+ private messageId;
14
+ private responseBuffer;
15
+ private pendingResponses;
16
+ private isStarted;
17
+ /**
18
+ * Starts the MCP server process.
19
+ */
20
+ start(): Promise<void>;
21
+ private processResponses;
22
+ /**
23
+ * Sends a JSON-RPC request to the MCP server.
24
+ */
25
+ sendRequest(method: string, params?: unknown): Promise<unknown>;
26
+ /**
27
+ * Sends an initialize request to the MCP server.
28
+ */
29
+ initialize(): Promise<unknown>;
30
+ /**
31
+ * Lists all available tools from the MCP server.
32
+ */
33
+ listTools(): Promise<unknown>;
34
+ /**
35
+ * Calls a tool on the MCP server.
36
+ */
37
+ callTool(name: string, args: Record<string, unknown>): Promise<unknown>;
38
+ /**
39
+ * Stops the MCP server process.
40
+ */
41
+ stop(): void;
42
+ }
43
+ //# sourceMappingURL=mcp-test-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-test-client.d.ts","sourceRoot":"","sources":["../../src/lib/mcp-test-client.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAgBH;;;GAGG;AACH,qBAAa,aAAa;IACtB,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,cAAc,CAAM;IAC5B,OAAO,CAAC,gBAAgB,CAGV;IACd,OAAO,CAAC,SAAS,CAAS;IAE1B;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAwC5B,OAAO,CAAC,gBAAgB;IAkCxB;;OAEG;IACG,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IA2CrE;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC;IAQpC;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC;IAInC;;OAEG;IACG,QAAQ,CACV,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,OAAO,CAAC,OAAO,CAAC;IAInB;;OAEG;IACH,IAAI,IAAI,IAAI;CAYf"}