@lousy-agents/cli 5.4.3 → 5.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/api/copilot-with-fastify/.github/instructions/pipeline.instructions.md +2 -2
- package/api/copilot-with-fastify/.github/instructions/software-architecture.instructions.md +1 -1
- package/api/copilot-with-fastify/.github/instructions/spec.instructions.md +3 -3
- package/api/copilot-with-fastify/.github/specs/README.md +2 -2
- package/api/copilot-with-fastify/package-lock.json +8 -8
- package/api/copilot-with-fastify/package.json +1 -1
- package/cli/copilot-with-citty/.github/instructions/pipeline.instructions.md +1 -1
- package/cli/copilot-with-citty/.github/instructions/software-architecture.instructions.md +1 -1
- package/cli/copilot-with-citty/.github/instructions/spec.instructions.md +1 -1
- package/cli/copilot-with-citty/.github/specs/README.md +2 -2
- package/cli/copilot-with-citty/package.json +1 -1
- package/dist/index.js +42 -10
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/ui/copilot-with-react/.github/instructions/pipeline.instructions.md +1 -1
- package/ui/copilot-with-react/.github/instructions/software-architecture.instructions.md +1 -1
- package/ui/copilot-with-react/.github/instructions/spec.instructions.md +3 -3
- package/ui/copilot-with-react/.github/specs/README.md +2 -2
- package/ui/copilot-with-react/package.json +1 -1
|
@@ -42,7 +42,7 @@ Before adding any action:
|
|
|
42
42
|
## Runner Requirements
|
|
43
43
|
|
|
44
44
|
| Workflow | Runner |
|
|
45
|
-
|
|
45
|
+
| ---------- | -------- |
|
|
46
46
|
| Default (all workflows) | `ubuntu-latest` |
|
|
47
47
|
| `copilot-setup-steps.yml` | May use different runners as needed |
|
|
48
48
|
|
|
@@ -118,7 +118,7 @@ Testcontainers works out of the box on `ubuntu-latest` runners since they have D
|
|
|
118
118
|
### Environment Variables
|
|
119
119
|
|
|
120
120
|
| Variable | Description | Default |
|
|
121
|
-
|
|
121
|
+
| ---------- | ------------- | --------- |
|
|
122
122
|
| `TESTCONTAINERS_RYUK_DISABLED` | Disable Ryuk container cleanup | `false` |
|
|
123
123
|
| `TESTCONTAINERS_DOCKER_SOCKET_OVERRIDE` | Override Docker socket path | auto-detected |
|
|
124
124
|
|
|
@@ -399,7 +399,7 @@ export class UserRepositoryImpl implements UserRepository {
|
|
|
399
399
|
## Import Rules Summary
|
|
400
400
|
|
|
401
401
|
| From | Entities | Use Cases | Gateways/Routes/DB | Index (Root) |
|
|
402
|
-
|
|
402
|
+
| ------ | ---------- | ----------- | ------------------- | -------------- |
|
|
403
403
|
| Entities | ✓ | ✗ | ✗ | ✗ |
|
|
404
404
|
| Use Cases | ✓ | ✓ | ✗ | ✗ |
|
|
405
405
|
| Gateways/Routes/DB | ✓ | ✓ | ✓ | ✗ |
|
|
@@ -70,7 +70,7 @@ When you create an issue with the `copilot-ready` label (applied automatically b
|
|
|
70
70
|
All acceptance criteria must use EARS (Easy Approach to Requirements Syntax) patterns:
|
|
71
71
|
|
|
72
72
|
| Pattern | Template | Use When |
|
|
73
|
-
|
|
73
|
+
| --------- | ---------- | ---------- |
|
|
74
74
|
| Ubiquitous | The `<system>` shall `<response>` | Always true, no trigger |
|
|
75
75
|
| Event-driven | When `<trigger>`, the `<system>` shall `<response>` | Responding to an event |
|
|
76
76
|
| State-driven | While `<state>`, the `<system>` shall `<response>` | Active during a condition |
|
|
@@ -136,7 +136,7 @@ Personas should be developed and maintained in a central location (e.g., `docs/p
|
|
|
136
136
|
Evaluate every feature against these value types. A feature may deliver multiple.
|
|
137
137
|
|
|
138
138
|
| Value Type | Question to Ask |
|
|
139
|
-
|
|
139
|
+
| ------------ | ----------------- |
|
|
140
140
|
| Commercial | Does this increase revenue or reduce cost of sale? |
|
|
141
141
|
| Future | Does this save time or money later? Does it reduce technical debt? |
|
|
142
142
|
| Customer | Does this increase retention or satisfaction for existing users? |
|
|
@@ -163,7 +163,7 @@ A spec has three sections that flow into each other:
|
|
|
163
163
|
## Personas
|
|
164
164
|
|
|
165
165
|
| Persona | Impact | Notes |
|
|
166
|
-
|
|
166
|
+
| --------- | -------- | ------- |
|
|
167
167
|
| <name> | Positive/Negative/Neutral | <brief explanation> |
|
|
168
168
|
|
|
169
169
|
## Value Assessment
|
|
@@ -21,7 +21,7 @@ Each spec follows this structure:
|
|
|
21
21
|
|
|
22
22
|
## Personas
|
|
23
23
|
| Persona | Impact | Notes |
|
|
24
|
-
|
|
24
|
+
| --------- | -------- | ------- |
|
|
25
25
|
|
|
26
26
|
## Value Assessment
|
|
27
27
|
- **Primary value**: <type> — <explanation>
|
|
@@ -58,7 +58,7 @@ so that I can **<outcome>**.
|
|
|
58
58
|
Use EARS (Easy Approach to Requirements Syntax) patterns:
|
|
59
59
|
|
|
60
60
|
| Pattern | Template | Use When |
|
|
61
|
-
|
|
61
|
+
| --------- | ---------- | ---------- |
|
|
62
62
|
| Ubiquitous | The `<system>` shall `<response>` | Always true |
|
|
63
63
|
| Event-driven | When `<trigger>`, the `<system>` shall `<response>` | Responding to event |
|
|
64
64
|
| State-driven | While `<state>`, the `<system>` shall `<response>` | During a condition |
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
},
|
|
19
19
|
"devDependencies": {
|
|
20
20
|
"@biomejs/biome": "2.4.8",
|
|
21
|
-
"@lousy-agents/mcp": "5.
|
|
21
|
+
"@lousy-agents/mcp": "5.5.0",
|
|
22
22
|
"@modelcontextprotocol/server-sequential-thinking": "2025.12.18",
|
|
23
23
|
"@testcontainers/postgresql": "11.13.0",
|
|
24
24
|
"@types/node": "24.12.0",
|
|
@@ -944,14 +944,14 @@
|
|
|
944
944
|
}
|
|
945
945
|
},
|
|
946
946
|
"node_modules/@lousy-agents/mcp": {
|
|
947
|
-
"version": "5.
|
|
948
|
-
"resolved": "https://registry.npmjs.org/@lousy-agents/mcp/-/mcp-5.
|
|
949
|
-
"integrity": "sha512-
|
|
947
|
+
"version": "5.5.0",
|
|
948
|
+
"resolved": "https://registry.npmjs.org/@lousy-agents/mcp/-/mcp-5.5.0.tgz",
|
|
949
|
+
"integrity": "sha512-k3fZC+VwSACJlzOAhgVdKwktk/aGKW7JgKtAHTn04e7OBgyE0tMRWU3KUykTnOyfrY1LoOqlitD2geSIsMvVIw==",
|
|
950
950
|
"dev": true,
|
|
951
951
|
"license": "MIT",
|
|
952
952
|
"dependencies": {
|
|
953
953
|
"@modelcontextprotocol/sdk": "1.27.1",
|
|
954
|
-
"yaml": "2.8.
|
|
954
|
+
"yaml": "2.8.3",
|
|
955
955
|
"zod": "4.3.6"
|
|
956
956
|
},
|
|
957
957
|
"bin": {
|
|
@@ -5846,9 +5846,9 @@
|
|
|
5846
5846
|
}
|
|
5847
5847
|
},
|
|
5848
5848
|
"node_modules/yaml": {
|
|
5849
|
-
"version": "2.8.
|
|
5850
|
-
"resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.
|
|
5851
|
-
"integrity": "sha512-
|
|
5849
|
+
"version": "2.8.3",
|
|
5850
|
+
"resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.3.tgz",
|
|
5851
|
+
"integrity": "sha512-AvbaCLOO2Otw/lW5bmh9d/WEdcDFdQp2Z2ZUH3pX9U2ihyUY0nvLv7J6TrWowklRGPYbB/IuIMfYgxaCPg5Bpg==",
|
|
5852
5852
|
"dev": true,
|
|
5853
5853
|
"license": "ISC",
|
|
5854
5854
|
"bin": {
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
},
|
|
27
27
|
"devDependencies": {
|
|
28
28
|
"@biomejs/biome": "2.4.8",
|
|
29
|
-
"@lousy-agents/mcp": "5.
|
|
29
|
+
"@lousy-agents/mcp": "5.5.0",
|
|
30
30
|
"@modelcontextprotocol/server-sequential-thinking": "2025.12.18",
|
|
31
31
|
"@testcontainers/postgresql": "11.13.0",
|
|
32
32
|
"@types/node": "24.12.0",
|
|
@@ -141,7 +141,7 @@ runMain(main);
|
|
|
141
141
|
## Import Rules Summary
|
|
142
142
|
|
|
143
143
|
| From | Entities | Use Cases | Commands/Gateways/Lib | Index (Root) |
|
|
144
|
-
|
|
144
|
+
| ------ | ---------- | ----------- | ---------------------- | -------------- |
|
|
145
145
|
| Entities | ✓ | ✗ | ✗ | ✗ |
|
|
146
146
|
| Use Cases | ✓ | ✓ | ✗ | ✗ |
|
|
147
147
|
| Commands/Gateways/Lib | ✓ | ✓ | ✓ | ✗ |
|
|
@@ -43,7 +43,7 @@ When reviewing a spec:
|
|
|
43
43
|
All acceptance criteria must use EARS (Easy Approach to Requirements Syntax) patterns:
|
|
44
44
|
|
|
45
45
|
| Pattern | Template | Use When |
|
|
46
|
-
|
|
46
|
+
| --------- | ---------- | ---------- |
|
|
47
47
|
| Ubiquitous | The `<system>` shall `<response>` | Always true, no trigger |
|
|
48
48
|
| Event-driven | When `<trigger>`, the `<system>` shall `<response>` | Responding to an event |
|
|
49
49
|
| State-driven | While `<state>`, the `<system>` shall `<response>` | Active during a condition |
|
|
@@ -21,7 +21,7 @@ Each spec follows this structure:
|
|
|
21
21
|
|
|
22
22
|
## Personas
|
|
23
23
|
| Persona | Impact | Notes |
|
|
24
|
-
|
|
24
|
+
| --------- | -------- | ------- |
|
|
25
25
|
|
|
26
26
|
## Value Assessment
|
|
27
27
|
- **Primary value**: <type> — <explanation>
|
|
@@ -58,7 +58,7 @@ so that I can **<outcome>**.
|
|
|
58
58
|
Use EARS (Easy Approach to Requirements Syntax) patterns:
|
|
59
59
|
|
|
60
60
|
| Pattern | Template | Use When |
|
|
61
|
-
|
|
61
|
+
| --------- | ---------- | ---------- |
|
|
62
62
|
| Ubiquitous | The `<system>` shall `<response>` | Always true |
|
|
63
63
|
| Event-driven | When `<trigger>`, the `<system>` shall `<response>` | Responding to event |
|
|
64
64
|
| State-driven | While `<state>`, the `<system>` shall `<response>` | During a condition |
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
},
|
|
21
21
|
"devDependencies": {
|
|
22
22
|
"@biomejs/biome": "2.4.8",
|
|
23
|
-
"@lousy-agents/mcp": "5.
|
|
23
|
+
"@lousy-agents/mcp": "5.5.0",
|
|
24
24
|
"@modelcontextprotocol/server-sequential-thinking": "2025.12.18",
|
|
25
25
|
"@types/node": "24.12.0",
|
|
26
26
|
"@upstash/context7-mcp": "2.1.4",
|
package/dist/index.js
CHANGED
|
@@ -1137,19 +1137,26 @@ function composeNode(ctx, token, props, onError) {
|
|
|
1137
1137
|
case 'block-map':
|
|
1138
1138
|
case 'block-seq':
|
|
1139
1139
|
case 'flow-collection':
|
|
1140
|
-
|
|
1141
|
-
|
|
1142
|
-
|
|
1140
|
+
try {
|
|
1141
|
+
node = composeCollection.composeCollection(CN, ctx, token, props, onError);
|
|
1142
|
+
if (anchor)
|
|
1143
|
+
node.anchor = anchor.source.substring(1);
|
|
1144
|
+
}
|
|
1145
|
+
catch (error) {
|
|
1146
|
+
// Almost certainly here due to a stack overflow
|
|
1147
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
1148
|
+
onError(token, 'RESOURCE_EXHAUSTION', message);
|
|
1149
|
+
}
|
|
1143
1150
|
break;
|
|
1144
1151
|
default: {
|
|
1145
1152
|
const message = token.type === 'error'
|
|
1146
1153
|
? token.message
|
|
1147
1154
|
: `Unsupported token (type: ${token.type})`;
|
|
1148
1155
|
onError(token, 'UNEXPECTED_TOKEN', message);
|
|
1149
|
-
node = composeEmptyNode(ctx, token.offset, undefined, null, props, onError);
|
|
1150
1156
|
isSrcToken = false;
|
|
1151
1157
|
}
|
|
1152
1158
|
}
|
|
1159
|
+
node ?? (node = composeEmptyNode(ctx, token.offset, undefined, null, props, onError));
|
|
1153
1160
|
if (anchor && node.anchor === '')
|
|
1154
1161
|
onError(anchor, 'BAD_ALIAS', 'Anchor cannot be an empty string');
|
|
1155
1162
|
if (atKey &&
|
|
@@ -8123,6 +8130,7 @@ function createStringifyContext(doc, options) {
|
|
|
8123
8130
|
nullStr: 'null',
|
|
8124
8131
|
simpleKeys: false,
|
|
8125
8132
|
singleQuote: null,
|
|
8133
|
+
trailingComma: false,
|
|
8126
8134
|
trueStr: 'true',
|
|
8127
8135
|
verifyAliasOrder: true
|
|
8128
8136
|
}, doc.schema.toStringOptions, options);
|
|
@@ -8340,12 +8348,22 @@ function stringifyFlowCollection({ items }, ctx, { flowChars, itemIndent }) {
|
|
|
8340
8348
|
if (comment)
|
|
8341
8349
|
reqNewline = true;
|
|
8342
8350
|
let str = stringify.stringify(item, itemCtx, () => (comment = null));
|
|
8343
|
-
|
|
8351
|
+
reqNewline || (reqNewline = lines.length > linesAtValue || str.includes('\n'));
|
|
8352
|
+
if (i < items.length - 1) {
|
|
8344
8353
|
str += ',';
|
|
8354
|
+
}
|
|
8355
|
+
else if (ctx.options.trailingComma) {
|
|
8356
|
+
if (ctx.options.lineWidth > 0) {
|
|
8357
|
+
reqNewline || (reqNewline = lines.reduce((sum, line) => sum + line.length + 2, 2) +
|
|
8358
|
+
(str.length + 2) >
|
|
8359
|
+
ctx.options.lineWidth);
|
|
8360
|
+
}
|
|
8361
|
+
if (reqNewline) {
|
|
8362
|
+
str += ',';
|
|
8363
|
+
}
|
|
8364
|
+
}
|
|
8345
8365
|
if (comment)
|
|
8346
8366
|
str += stringifyComment.lineComment(str, itemIndent, commentString(comment));
|
|
8347
|
-
if (!reqNewline && (lines.length > linesAtValue || str.includes('\n')))
|
|
8348
|
-
reqNewline = true;
|
|
8349
8367
|
lines.push(str);
|
|
8350
8368
|
linesAtValue = lines.length;
|
|
8351
8369
|
}
|
|
@@ -33416,11 +33434,25 @@ var dist = __webpack_require__(3519);
|
|
|
33416
33434
|
|
|
33417
33435
|
|
|
33418
33436
|
|
|
33437
|
+
/**
|
|
33438
|
+
* Skill directory locations to search for SKILL.md files.
|
|
33439
|
+
*/ const SKILL_DIRECTORIES = [
|
|
33440
|
+
(0,external_node_path_.join)(".github", "skills"),
|
|
33441
|
+
(0,external_node_path_.join)(".claude", "skills")
|
|
33442
|
+
];
|
|
33419
33443
|
/**
|
|
33420
33444
|
* File system implementation of the skill lint gateway.
|
|
33421
33445
|
*/ class FileSystemSkillLintGateway {
|
|
33422
33446
|
async discoverSkills(targetDir) {
|
|
33423
|
-
const
|
|
33447
|
+
const skills = [];
|
|
33448
|
+
for (const relativeDir of SKILL_DIRECTORIES){
|
|
33449
|
+
const skillsDir = (0,external_node_path_.join)(targetDir, relativeDir);
|
|
33450
|
+
const discovered = await this.discoverSkillsInDir(skillsDir);
|
|
33451
|
+
skills.push(...discovered);
|
|
33452
|
+
}
|
|
33453
|
+
return skills;
|
|
33454
|
+
}
|
|
33455
|
+
async discoverSkillsInDir(skillsDir) {
|
|
33424
33456
|
if (!await file_system_utils_fileExists(skillsDir)) {
|
|
33425
33457
|
return [];
|
|
33426
33458
|
}
|
|
@@ -56704,7 +56736,7 @@ function hasFrontmatterDelimiters(content) {
|
|
|
56704
56736
|
args: {
|
|
56705
56737
|
skills: {
|
|
56706
56738
|
type: "boolean",
|
|
56707
|
-
description: "Lint skill frontmatter in .github/skills/",
|
|
56739
|
+
description: "Lint skill frontmatter in .github/skills/ and .claude/skills/",
|
|
56708
56740
|
default: false
|
|
56709
56741
|
},
|
|
56710
56742
|
agents: {
|
|
@@ -56926,7 +56958,7 @@ You are a ${normalizedName} agent specialized in {domain/responsibility}.
|
|
|
56926
56958
|
|
|
56927
56959
|
;// CONCATENATED MODULE: ../core/src/entities/skill.ts
|
|
56928
56960
|
/**
|
|
56929
|
-
* Core domain entity for GitHub Copilot
|
|
56961
|
+
* Core domain entity for agent skills (GitHub Copilot and Claude Code).
|
|
56930
56962
|
* Handles name normalization, SKILL.md content generation, and lint types.
|
|
56931
56963
|
*/ /**
|
|
56932
56964
|
* Severity levels for skill lint diagnostics.
|