swallowkit 1.0.0-beta.57 → 1.0.0-beta.59
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/README.ja.md +1 -0
- package/README.md +1 -0
- package/dist/cli/commands/add-auth.d.ts +3 -1
- package/dist/cli/commands/add-auth.d.ts.map +1 -1
- package/dist/cli/commands/add-auth.js +55 -21
- package/dist/cli/commands/add-auth.js.map +1 -1
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +12 -498
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +2 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/core/operations/auth-operations.d.ts +4 -0
- package/dist/core/operations/auth-operations.d.ts.map +1 -1
- package/dist/core/operations/auth-operations.js +5 -2
- package/dist/core/operations/auth-operations.js.map +1 -1
- package/dist/core/operations/create-model.d.ts.map +1 -1
- package/dist/core/operations/create-model.js +6 -2
- package/dist/core/operations/create-model.js.map +1 -1
- package/dist/core/project/agent-instructions.d.ts +29 -0
- package/dist/core/project/agent-instructions.d.ts.map +1 -0
- package/dist/core/project/agent-instructions.js +159 -0
- package/dist/core/project/agent-instructions.js.map +1 -0
- package/dist/core/project/capabilities.d.ts +58 -0
- package/dist/core/project/capabilities.d.ts.map +1 -0
- package/dist/core/project/capabilities.js +135 -0
- package/dist/core/project/capabilities.js.map +1 -0
- package/dist/core/project/validation.d.ts.map +1 -1
- package/dist/core/project/validation.js +48 -0
- package/dist/core/project/validation.js.map +1 -1
- package/dist/core/project/workflows.d.ts.map +1 -1
- package/dist/core/project/workflows.js +46 -2
- package/dist/core/project/workflows.js.map +1 -1
- package/dist/core/scaffold/auth-generator.d.ts.map +1 -1
- package/dist/core/scaffold/auth-generator.js +6 -2
- package/dist/core/scaffold/auth-generator.js.map +1 -1
- package/dist/core/verify/index.d.ts +7 -0
- package/dist/core/verify/index.d.ts.map +1 -1
- package/dist/core/verify/index.js +69 -0
- package/dist/core/verify/index.js.map +1 -1
- package/dist/machine/index.d.ts.map +1 -1
- package/dist/machine/index.js +117 -41
- package/dist/machine/index.js.map +1 -1
- package/dist/mcp/index.d.ts.map +1 -1
- package/dist/mcp/index.js +32 -10
- package/dist/mcp/index.js.map +1 -1
- package/package.json +1 -1
- package/src/__tests__/agent-instructions.test.ts +237 -0
- package/src/__tests__/agent-loop-phase34.test.ts +66 -2
- package/src/__tests__/auth.test.ts +9 -0
- package/src/__tests__/init.test.ts +2 -0
- package/src/__tests__/machine.test.ts +15 -0
- package/src/__tests__/multi-auth.test.ts +12 -0
- package/src/__tests__/plan-apply.test.ts +38 -0
- package/src/cli/commands/add-auth.ts +59 -21
- package/src/cli/commands/init.ts +19 -525
- package/src/cli/index.ts +2 -0
- package/src/core/operations/auth-operations.ts +9 -2
- package/src/core/operations/create-model.ts +7 -2
- package/src/core/project/agent-instructions.ts +167 -0
- package/src/core/project/agent-templates/AGENTS.md +502 -0
- package/src/core/project/agent-templates/CLAUDE.md +31 -0
- package/src/core/project/agent-templates/azure-functions.instructions.md +22 -0
- package/src/core/project/agent-templates/bff-routes.instructions.md +18 -0
- package/src/core/project/agent-templates/copilot-instructions.md +27 -0
- package/src/core/project/agent-templates/shared-models.instructions.md +72 -0
- package/src/core/project/capabilities.ts +193 -0
- package/src/core/project/validation.ts +50 -0
- package/src/core/project/workflows.ts +48 -2
- package/src/core/scaffold/auth-generator.ts +7 -2
- package/src/core/verify/index.ts +76 -0
- package/src/machine/index.ts +133 -45
- package/src/mcp/index.ts +28 -10
package/dist/mcp/index.js
CHANGED
|
@@ -185,15 +185,19 @@ function buildSwallowKitToolDefinitions(runMachineCli = defaultMachineCliRunner)
|
|
|
185
185
|
},
|
|
186
186
|
{
|
|
187
187
|
name: "swallowkit_plan_scaffold",
|
|
188
|
-
description: "Compute the scaffold change plan (files to create/update/overwrite, conflicts, warnings) without writing any files.
|
|
188
|
+
description: "Compute the scaffold change plan (files to create/update/overwrite, conflicts, warnings) without writing any files. Accepts one or more models; returns a planId per model usable with swallowkit_apply_scaffold.",
|
|
189
189
|
inputSchema: z.object({
|
|
190
|
-
model: z.string(),
|
|
190
|
+
model: z.string().optional(),
|
|
191
|
+
models: z.array(z.string()).optional(),
|
|
191
192
|
functionsDir: z.string().optional(),
|
|
192
193
|
apiDir: z.string().optional(),
|
|
193
194
|
apiOnly: z.boolean().optional(),
|
|
194
195
|
}),
|
|
195
|
-
handler: async ({ model, functionsDir, apiDir, apiOnly }) => {
|
|
196
|
-
const
|
|
196
|
+
handler: async ({ model, models, functionsDir, apiDir, apiOnly }) => {
|
|
197
|
+
const targets = models && models.length > 0 ? models : model ? [model] : [];
|
|
198
|
+
if (targets.length === 0)
|
|
199
|
+
throw new Error("Provide model or models.");
|
|
200
|
+
const args = ["plan", "scaffold", ...targets];
|
|
197
201
|
if (functionsDir)
|
|
198
202
|
args.push("--functions-dir", functionsDir);
|
|
199
203
|
if (apiDir)
|
|
@@ -253,15 +257,18 @@ function buildSwallowKitToolDefinitions(runMachineCli = defaultMachineCliRunner)
|
|
|
253
257
|
},
|
|
254
258
|
{
|
|
255
259
|
name: "swallowkit_verify_project",
|
|
256
|
-
description: "Run verification checks (structure, drift, typecheck by default; build, lint, test and custom checks from swallowkit.config verify.checks are also available) and return machine-readable evidence. summary.done=true means the project passed all checks.",
|
|
260
|
+
description: "Run verification checks (structure, drift, typecheck by default; build, lint, test and custom checks from swallowkit.config verify.checks are also available) and return machine-readable evidence. summary.done=true means the project passed all checks. Set compact=true to suppress info-severity findings and keep the output small.",
|
|
257
261
|
inputSchema: z.object({
|
|
258
262
|
checks: z.array(z.string()).optional(),
|
|
263
|
+
compact: z.boolean().optional(),
|
|
259
264
|
}),
|
|
260
|
-
handler: async ({ checks }) => {
|
|
265
|
+
handler: async ({ checks, compact }) => {
|
|
261
266
|
const args = ["verify", "project"];
|
|
262
267
|
if (checks && checks.length > 0) {
|
|
263
268
|
args.push("--checks", checks.join(","));
|
|
264
269
|
}
|
|
270
|
+
if (compact)
|
|
271
|
+
args.push("--compact");
|
|
265
272
|
const response = await executeMachineCommand(args, runMachineCli);
|
|
266
273
|
return jsonTextContent(withOperationStatus(response));
|
|
267
274
|
},
|
|
@@ -290,31 +297,44 @@ function buildSwallowKitToolDefinitions(runMachineCli = defaultMachineCliRunner)
|
|
|
290
297
|
return jsonTextContent(withSwallowKitMetadata(response.data));
|
|
291
298
|
},
|
|
292
299
|
},
|
|
300
|
+
{
|
|
301
|
+
name: "swallowkit_inspect_capabilities",
|
|
302
|
+
description: "Return SwallowKit's capability contract: which declarations models support (partitionKey, authPolicy, displayName, connectorConfig, with format examples), the correct auth-introduction workflow, what generated CRUD does and does NOT guarantee (no owner scoping), how dev seeds are applied, and every machine command. Consult this before assuming SwallowKit can or cannot do something.",
|
|
303
|
+
inputSchema: z.object({}),
|
|
304
|
+
handler: async () => {
|
|
305
|
+
const response = await executeMachineCommand(["inspect", "capabilities"], runMachineCli);
|
|
306
|
+
return jsonTextContent(withSwallowKitMetadata(response.data));
|
|
307
|
+
},
|
|
308
|
+
},
|
|
293
309
|
{
|
|
294
310
|
name: "swallowkit_plan_auth",
|
|
295
|
-
description: "Compute the add-auth change plan (files to create/update/overwrite, conflicts, warnings) without writing any files. Returns a planId usable with swallowkit_apply_auth.",
|
|
311
|
+
description: "Compute the add-auth change plan (files to create/update/overwrite, conflicts, warnings) without writing any files. Returns a planId usable with swallowkit_apply_auth. Never hand-write auth.schemes in swallowkit.config; this operation owns them.",
|
|
296
312
|
inputSchema: z.object({
|
|
297
313
|
provider: z.enum(["custom-jwt", "swa", "external-token", "none"]),
|
|
298
314
|
scheme: z.string().optional(),
|
|
315
|
+
allowedProviders: z.array(z.string()).optional(),
|
|
299
316
|
}),
|
|
300
|
-
handler: async ({ provider, scheme }) => {
|
|
317
|
+
handler: async ({ provider, scheme, allowedProviders }) => {
|
|
301
318
|
const args = ["plan", "auth", "--provider", provider];
|
|
302
319
|
if (scheme)
|
|
303
320
|
args.push("--scheme", scheme);
|
|
321
|
+
if (allowedProviders && allowedProviders.length > 0)
|
|
322
|
+
args.push("--allowed-providers", allowedProviders.join(","));
|
|
304
323
|
const response = await executeMachineCommand(args, runMachineCli);
|
|
305
324
|
return jsonTextContent(withOperationStatus(response));
|
|
306
325
|
},
|
|
307
326
|
},
|
|
308
327
|
{
|
|
309
328
|
name: "swallowkit_apply_auth",
|
|
310
|
-
description: "Apply add-auth changes. Rejects stale plans and requires approve=true when user-modified files would be overwritten.",
|
|
329
|
+
description: "Apply add-auth changes. Rejects stale plans and requires approve=true when user-modified files would be overwritten. Follow the returned nextActions: policies and swa.allowedProviders are hand-edited afterwards, and external-token verifier stubs must be implemented.",
|
|
311
330
|
inputSchema: z.object({
|
|
312
331
|
provider: z.enum(["custom-jwt", "swa", "external-token", "none"]).optional(),
|
|
313
332
|
scheme: z.string().optional(),
|
|
333
|
+
allowedProviders: z.array(z.string()).optional(),
|
|
314
334
|
planId: z.string().optional(),
|
|
315
335
|
approve: z.boolean().optional(),
|
|
316
336
|
}),
|
|
317
|
-
handler: async ({ provider, scheme, planId, approve }) => {
|
|
337
|
+
handler: async ({ provider, scheme, allowedProviders, planId, approve }) => {
|
|
318
338
|
const args = ["apply", "auth"];
|
|
319
339
|
if (planId)
|
|
320
340
|
args.push("--plan", planId);
|
|
@@ -322,6 +342,8 @@ function buildSwallowKitToolDefinitions(runMachineCli = defaultMachineCliRunner)
|
|
|
322
342
|
args.push("--provider", provider);
|
|
323
343
|
if (scheme)
|
|
324
344
|
args.push("--scheme", scheme);
|
|
345
|
+
if (allowedProviders && allowedProviders.length > 0)
|
|
346
|
+
args.push("--allowed-providers", allowedProviders.join(","));
|
|
325
347
|
if (approve)
|
|
326
348
|
args.push("--approve");
|
|
327
349
|
const response = await executeMachineCommand(args, runMachineCli);
|
package/dist/mcp/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
import * as fs from "fs";
|
|
2
|
+
import * as os from "os";
|
|
3
|
+
import * as path from "path";
|
|
4
|
+
import {
|
|
5
|
+
AGENT_TEMPLATE_FILES,
|
|
6
|
+
AgentInstructionContext,
|
|
7
|
+
buildAgentsMd,
|
|
8
|
+
buildClaudeMd,
|
|
9
|
+
buildCopilotInstructions,
|
|
10
|
+
buildPathSpecificInstructions,
|
|
11
|
+
readAgentInstructionTemplate,
|
|
12
|
+
writeAgentInstructionFiles,
|
|
13
|
+
} from "../core/project/agent-instructions";
|
|
14
|
+
|
|
15
|
+
const representativeContext: AgentInstructionContext = {
|
|
16
|
+
projectName: "sample-app",
|
|
17
|
+
backendLanguage: "typescript",
|
|
18
|
+
packageManager: "npm",
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
const repositoryRoot = path.resolve(__dirname, "../..");
|
|
22
|
+
|
|
23
|
+
describe("coding-agent instruction contract", () => {
|
|
24
|
+
it("applies SwallowKit before implementation and composes with external processes", () => {
|
|
25
|
+
const agentsMd = buildAgentsMd(representativeContext);
|
|
26
|
+
|
|
27
|
+
expect(agentsMd).toContain("discovery, requirements clarification");
|
|
28
|
+
expect(agentsMd).toContain("specification, planning, ticket decomposition");
|
|
29
|
+
expect(agentsMd).toContain("not only during code generation");
|
|
30
|
+
expect(agentsMd).toContain("How SwallowKit Fits Into the Development Process");
|
|
31
|
+
expect(agentsMd).toContain("does **not** own the overall software development process");
|
|
32
|
+
expect(agentsMd).toContain("External development-process skills and SwallowKit are intended to compose");
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
it("requires inspection before questions or design instead of remembered capabilities", () => {
|
|
36
|
+
const agentsMd = buildAgentsMd(representativeContext);
|
|
37
|
+
|
|
38
|
+
expect(agentsMd).toContain("Do Not Assume SwallowKit Capabilities From Memory");
|
|
39
|
+
expect(agentsMd).toContain("Inspect Before Asking or Designing");
|
|
40
|
+
expect(agentsMd).toContain("should be answered by the agent instead of being delegated to the human");
|
|
41
|
+
expect(agentsMd).toContain("npx swallowkit machine inspect project");
|
|
42
|
+
expect(agentsMd).toContain("npx swallowkit machine inspect entities");
|
|
43
|
+
expect(agentsMd).toContain("npx swallowkit machine inspect routes");
|
|
44
|
+
expect(agentsMd).toContain("npx swallowkit machine inspect boundaries");
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
it("defines ownership, vertical slices, plan/apply, verification, and approval gates", () => {
|
|
48
|
+
const agentsMd = buildAgentsMd(representativeContext);
|
|
49
|
+
|
|
50
|
+
expect(agentsMd).toContain("### ai-authored");
|
|
51
|
+
expect(agentsMd).toContain("### deterministic");
|
|
52
|
+
expect(agentsMd).toContain("### shared");
|
|
53
|
+
expect(agentsMd).toContain("vertical slices");
|
|
54
|
+
expect(agentsMd).toContain("Do not split work into horizontal tickets");
|
|
55
|
+
expect(agentsMd).toContain("Deterministic Changes: Plan → Apply → Verify");
|
|
56
|
+
expect(agentsMd).toContain("npx swallowkit machine plan scaffold <model>");
|
|
57
|
+
expect(agentsMd).toContain("Verification Is a Completion Gate");
|
|
58
|
+
expect(agentsMd).toContain("semantic code review answers different questions");
|
|
59
|
+
expect(agentsMd).toContain("When the status is `requires-human`, stop");
|
|
60
|
+
expect(agentsMd).toContain("never bypass its\napproval gate");
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
it("uses MCP first and the package-manager-specific machine fallback", () => {
|
|
64
|
+
const npmDocument = buildAgentsMd(representativeContext);
|
|
65
|
+
const pnpmDocument = buildAgentsMd({
|
|
66
|
+
...representativeContext,
|
|
67
|
+
packageManager: "pnpm",
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
expect(npmDocument).toContain("Prefer the `swallowkit_*` MCP tools when available");
|
|
71
|
+
expect(npmDocument).toContain("npx swallowkit machine ...");
|
|
72
|
+
expect(pnpmDocument).toContain("pnpm swallowkit machine ...");
|
|
73
|
+
expect(pnpmDocument).not.toContain("npx swallowkit machine ...");
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
it("keeps Claude and Copilot as self-identifying adapters to canonical AGENTS.md", () => {
|
|
77
|
+
const adapters = [
|
|
78
|
+
buildClaudeMd(representativeContext),
|
|
79
|
+
buildCopilotInstructions(representativeContext),
|
|
80
|
+
];
|
|
81
|
+
|
|
82
|
+
for (const adapter of adapters) {
|
|
83
|
+
expect(adapter).toContain("This is a **SwallowKit** project");
|
|
84
|
+
expect(adapter).toContain("root `AGENTS.md`");
|
|
85
|
+
expect(adapter).toContain("canonical project contract");
|
|
86
|
+
expect(adapter).toContain("discovery");
|
|
87
|
+
expect(adapter).toContain("specification");
|
|
88
|
+
expect(adapter).toContain("planning");
|
|
89
|
+
expect(adapter).toContain("Never hand-edit deterministic SwallowKit-managed artifacts");
|
|
90
|
+
expect(adapter).toContain("SwallowKit verification");
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
|
|
94
|
+
it("aligns path-specific instructions with the machine plan/apply workflow", () => {
|
|
95
|
+
const instructions = buildPathSpecificInstructions(representativeContext);
|
|
96
|
+
const sharedModels = instructions[AGENT_TEMPLATE_FILES.sharedModelsInstructions];
|
|
97
|
+
|
|
98
|
+
expect(sharedModels).toContain("swallowkit-modify-model");
|
|
99
|
+
expect(sharedModels).toContain(".swallowkit/workflows/modify-model.md");
|
|
100
|
+
expect(sharedModels).toContain("inspect drift → plan scaffold → apply scaffold → verify project");
|
|
101
|
+
expect(sharedModels).toContain("Prefer the equivalent `swallowkit_*` MCP tools");
|
|
102
|
+
|
|
103
|
+
for (const content of Object.values(instructions)) {
|
|
104
|
+
expect(content).toContain("root `AGENTS.md` is the canonical contract");
|
|
105
|
+
expect(content).toMatch(/Never|never|do not/);
|
|
106
|
+
expect(content).toContain("requires-human");
|
|
107
|
+
expect(content).not.toMatch(/run `(?:npx|pnpm )?swallowkit scaffold/);
|
|
108
|
+
expect(content).not.toContain("rerunning `swallowkit scaffold`");
|
|
109
|
+
}
|
|
110
|
+
});
|
|
111
|
+
|
|
112
|
+
it("writes the generated integration files from the builders", () => {
|
|
113
|
+
const tempDir = fs.mkdtempSync(path.join(os.tmpdir(), "swallowkit-agent-docs-"));
|
|
114
|
+
try {
|
|
115
|
+
const documents = writeAgentInstructionFiles(tempDir, representativeContext);
|
|
116
|
+
expect(fs.readFileSync(path.join(tempDir, "AGENTS.md"), "utf-8")).toBe(documents.agentsMd);
|
|
117
|
+
expect(fs.readFileSync(path.join(tempDir, "CLAUDE.md"), "utf-8")).toBe(documents.claudeMd);
|
|
118
|
+
expect(
|
|
119
|
+
fs.readFileSync(path.join(tempDir, ".github", "copilot-instructions.md"), "utf-8")
|
|
120
|
+
).toBe(documents.copilotInstructions);
|
|
121
|
+
for (const [fileName, content] of Object.entries(documents.pathSpecificInstructions)) {
|
|
122
|
+
expect(
|
|
123
|
+
fs.readFileSync(path.join(tempDir, ".github", "instructions", fileName), "utf-8")
|
|
124
|
+
).toBe(content);
|
|
125
|
+
}
|
|
126
|
+
} finally {
|
|
127
|
+
fs.rmSync(tempDir, { recursive: true, force: true });
|
|
128
|
+
}
|
|
129
|
+
});
|
|
130
|
+
|
|
131
|
+
it("covers the requested model-change, new-feature, BFF, and deployment scenarios", () => {
|
|
132
|
+
const agentsMd = buildAgentsMd(representativeContext);
|
|
133
|
+
const pathInstructions = buildPathSpecificInstructions(representativeContext);
|
|
134
|
+
|
|
135
|
+
// Scenario A: existing Todo field change.
|
|
136
|
+
expect(agentsMd).toContain("For an existing model change, the normal pattern is");
|
|
137
|
+
expect(agentsMd).toContain("edit source-of-truth model");
|
|
138
|
+
expect(agentsMd).toContain("inspect drift");
|
|
139
|
+
expect(agentsMd).toContain("verify before final semantic review");
|
|
140
|
+
|
|
141
|
+
// Scenario B: new Order behavior starts with discovery and the add-model capability.
|
|
142
|
+
expect(agentsMd).toContain("requirements clarification");
|
|
143
|
+
expect(agentsMd).toContain("machine inspect entities");
|
|
144
|
+
expect(agentsMd).toContain("machine inspect routes");
|
|
145
|
+
expect(agentsMd).toContain("Use the `swallowkit-add-model` Agent Skill when available");
|
|
146
|
+
|
|
147
|
+
// Scenario C: generated BFF logic is redirected to the correct ownership zone.
|
|
148
|
+
const bff = pathInstructions[AGENT_TEMPLATE_FILES.bffRoutesInstructions];
|
|
149
|
+
const functions = pathInstructions[AGENT_TEMPLATE_FILES.azureFunctionsInstructions];
|
|
150
|
+
expect(bff).toContain("Never place business logic, database access");
|
|
151
|
+
expect(bff).toContain("Never directly edit a route reported as deterministic");
|
|
152
|
+
expect(functions).toContain("Put custom behavior only in an ai-authored location");
|
|
153
|
+
|
|
154
|
+
// Scenario D: a broad deployment request never implies provisioning approval.
|
|
155
|
+
expect(agentsMd).toContain("A broad request to deploy does not itself grant the explicit");
|
|
156
|
+
expect(agentsMd).toContain("Use the `swallowkit-provision` Agent Skill or runbook");
|
|
157
|
+
expect(agentsMd).toContain("When the status is `requires-human`, stop");
|
|
158
|
+
});
|
|
159
|
+
});
|
|
160
|
+
|
|
161
|
+
describe("coding-agent documentation synchronization", () => {
|
|
162
|
+
const englishGuidePath = path.join(repositoryRoot, "docs", "en", "coding-agent-guide.md");
|
|
163
|
+
const japaneseGuidePath = path.join(repositoryRoot, "docs", "ja", "coding-agent-guide.md");
|
|
164
|
+
|
|
165
|
+
it("publishes each complete English original directly from its canonical template", () => {
|
|
166
|
+
const englishGuide = fs.readFileSync(englishGuidePath, "utf-8");
|
|
167
|
+
const japaneseGuide = fs.readFileSync(japaneseGuidePath, "utf-8");
|
|
168
|
+
|
|
169
|
+
const expectedIncludes = [
|
|
170
|
+
"AGENTS.md",
|
|
171
|
+
"CLAUDE.md",
|
|
172
|
+
"copilot-instructions.md",
|
|
173
|
+
];
|
|
174
|
+
for (const fileName of expectedIncludes) {
|
|
175
|
+
const include = `<<< ../../src/core/project/agent-templates/${fileName}{md}`;
|
|
176
|
+
expect(englishGuide).toContain(include);
|
|
177
|
+
expect(japaneseGuide).toContain(include);
|
|
178
|
+
expect(readAgentInstructionTemplate(fileName).length).toBeGreaterThan(500);
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
expect(englishGuide).toContain("complete English templates");
|
|
182
|
+
expect(englishGuide).toContain("not\nabridged excerpts");
|
|
183
|
+
expect(japaneseGuide).toContain("抜粋ではありません");
|
|
184
|
+
});
|
|
185
|
+
|
|
186
|
+
it("keeps the Japanese AGENTS.md translation aligned by canonical section", () => {
|
|
187
|
+
const source = readAgentInstructionTemplate(AGENT_TEMPLATE_FILES.agentsMd);
|
|
188
|
+
const translation = fs.readFileSync(
|
|
189
|
+
path.join(repositoryRoot, "docs", "ja", "generated-agent-docs", "AGENTS.ja.md"),
|
|
190
|
+
"utf-8"
|
|
191
|
+
);
|
|
192
|
+
const sourceSections = [...source.matchAll(/^## (.+)$/gm)].map((match) => match[1]);
|
|
193
|
+
const translatedSourceSections = [
|
|
194
|
+
...translation.matchAll(/^<!-- source-section: (.+) -->$/gm),
|
|
195
|
+
].map((match) => match[1]);
|
|
196
|
+
|
|
197
|
+
expect(translatedSourceSections).toEqual(sourceSections);
|
|
198
|
+
});
|
|
199
|
+
|
|
200
|
+
it("exposes matching major EN/JA guide topics and both sidebar entries", () => {
|
|
201
|
+
const englishGuide = fs.readFileSync(englishGuidePath, "utf-8");
|
|
202
|
+
const japaneseGuide = fs.readFileSync(japaneseGuidePath, "utf-8");
|
|
203
|
+
const vitepressConfig = fs.readFileSync(
|
|
204
|
+
path.join(repositoryRoot, "docs", ".vitepress", "config.mts"),
|
|
205
|
+
"utf-8"
|
|
206
|
+
);
|
|
207
|
+
|
|
208
|
+
for (const topic of [
|
|
209
|
+
"Generated agent integration files",
|
|
210
|
+
"SwallowKit across the development lifecycle",
|
|
211
|
+
"Inspect before asking or designing",
|
|
212
|
+
"Responsibility boundary",
|
|
213
|
+
"Planning and ticketing",
|
|
214
|
+
"Implementation workflow",
|
|
215
|
+
"Verification versus semantic review",
|
|
216
|
+
"Human approval",
|
|
217
|
+
"Composing with external development processes",
|
|
218
|
+
]) {
|
|
219
|
+
expect(englishGuide.toLowerCase()).toContain(topic.toLowerCase());
|
|
220
|
+
}
|
|
221
|
+
for (const topic of [
|
|
222
|
+
"生成される Agent integration files",
|
|
223
|
+
"開発ライフサイクル全体での SwallowKit",
|
|
224
|
+
"質問・設計の前に inspect する",
|
|
225
|
+
"Responsibility boundary",
|
|
226
|
+
"Planning と ticketing",
|
|
227
|
+
"Implementation workflow",
|
|
228
|
+
"Verification と semantic review の違い",
|
|
229
|
+
"Human approval",
|
|
230
|
+
"外部 development process との composition",
|
|
231
|
+
]) {
|
|
232
|
+
expect(japaneseGuide).toContain(topic);
|
|
233
|
+
}
|
|
234
|
+
expect(vitepressConfig).toContain("/en/coding-agent-guide");
|
|
235
|
+
expect(vitepressConfig).toContain("/ja/coding-agent-guide");
|
|
236
|
+
});
|
|
237
|
+
});
|
|
@@ -12,7 +12,7 @@ import * as path from "path";
|
|
|
12
12
|
import * as childProcess from "child_process";
|
|
13
13
|
import { runMachineCli } from "../machine";
|
|
14
14
|
import { inspectInfra } from "../core/project/infra";
|
|
15
|
-
import { loadCustomVerifyChecks } from "../core/verify";
|
|
15
|
+
import { loadCustomVerifyChecks, compactVerifyResult, VerifyResult } from "../core/verify";
|
|
16
16
|
import { buildAgentSkills, buildWorkflowDocs, writeAgentSkills, writeWorkflowDocs } from "../core/project/workflows";
|
|
17
17
|
|
|
18
18
|
jest.mock("child_process", () => {
|
|
@@ -229,6 +229,37 @@ describe("agent loop phase 3/4", () => {
|
|
|
229
229
|
expect(fs.readFileSync(path.join(tempDir, "lib", "auth", "auth-context.tsx"), "utf-8")).not.toContain("// hand edit");
|
|
230
230
|
});
|
|
231
231
|
|
|
232
|
+
it("threads --allowed-providers into the config and generated SWA artifacts for a named scheme", async () => {
|
|
233
|
+
createProjectFixture(tempDir);
|
|
234
|
+
|
|
235
|
+
const plan = await runMachine([
|
|
236
|
+
"node", "swallowkit", "machine", "plan", "auth",
|
|
237
|
+
"--provider", "swa", "--scheme", "admin", "--allowed-providers", "github",
|
|
238
|
+
]);
|
|
239
|
+
expect(plan.response.ok).toBe(true);
|
|
240
|
+
expect(plan.response.data.allowedProviders).toEqual(["github"]);
|
|
241
|
+
|
|
242
|
+
const apply = await runMachine([
|
|
243
|
+
"node", "swallowkit", "machine", "apply", "auth", "--plan", plan.response.data.planId,
|
|
244
|
+
]);
|
|
245
|
+
expect(apply.response.ok).toBe(true);
|
|
246
|
+
|
|
247
|
+
const config = fs.readFileSync(path.join(tempDir, "swallowkit.config.js"), "utf-8");
|
|
248
|
+
expect(config).toContain("swa: { allowedProviders: ['github'] }");
|
|
249
|
+
|
|
250
|
+
const authContext = fs.readFileSync(
|
|
251
|
+
path.join(tempDir, "lib", "auth", "schemes", "admin", "auth-context.tsx"),
|
|
252
|
+
"utf-8"
|
|
253
|
+
);
|
|
254
|
+
expect(authContext).toContain("/.auth/login/github?");
|
|
255
|
+
expect(authContext).not.toContain("/.auth/login/aad");
|
|
256
|
+
|
|
257
|
+
// apply auth は「policies を定義せよ」等の後続手順を nextActions で返す
|
|
258
|
+
const descriptions = apply.response.nextActions.map((a: any) => a.description).join(" ");
|
|
259
|
+
expect(descriptions).toContain("auth.authorization.policies");
|
|
260
|
+
expect(descriptions).toContain("allowedProviders");
|
|
261
|
+
});
|
|
262
|
+
|
|
232
263
|
it("plans provision locally and always requires human approval to apply", async () => {
|
|
233
264
|
createProjectFixture(tempDir);
|
|
234
265
|
writeFile(path.join(tempDir, "infra", "main.bicep"), SAMPLE_MAIN_BICEP);
|
|
@@ -309,12 +340,43 @@ describe("agent loop phase 3/4", () => {
|
|
|
309
340
|
expect(checks[0]).toMatchObject({ id: "smoke-api", command: "node scripts/smoke.js" });
|
|
310
341
|
});
|
|
311
342
|
|
|
343
|
+
it("compactVerifyResult suppresses info findings without changing the summary", () => {
|
|
344
|
+
const result: VerifyResult = {
|
|
345
|
+
verifiedAt: new Date().toISOString(),
|
|
346
|
+
summary: { passed: 1, failed: 0, skipped: 0, errors: 0, done: true },
|
|
347
|
+
checks: [
|
|
348
|
+
{
|
|
349
|
+
id: "drift",
|
|
350
|
+
title: "Generated artifact drift",
|
|
351
|
+
status: "pass",
|
|
352
|
+
durationMs: 1,
|
|
353
|
+
fixable: true,
|
|
354
|
+
evidence: {
|
|
355
|
+
findings: [
|
|
356
|
+
{ kind: "artifact-modified", severity: "info", path: "shared/models/todo.ts", message: "expected edit", repairAction: "none" },
|
|
357
|
+
{ kind: "schema-drift", severity: "warning", path: "functions/src/todo.ts", message: "stale", repairAction: "re-plan" },
|
|
358
|
+
] as never,
|
|
359
|
+
},
|
|
360
|
+
suggestedActions: [],
|
|
361
|
+
},
|
|
362
|
+
],
|
|
363
|
+
};
|
|
364
|
+
|
|
365
|
+
const compact = compactVerifyResult(result);
|
|
366
|
+
expect(compact.summary).toEqual(result.summary);
|
|
367
|
+
expect(compact.checks[0].evidence.findings).toHaveLength(1);
|
|
368
|
+
expect(compact.checks[0].evidence.findings![0].severity).toBe("warning");
|
|
369
|
+
expect(compact.checks[0].evidence.suppressedInfoFindings).toBe(1);
|
|
370
|
+
// 元の結果は変更しない
|
|
371
|
+
expect(result.checks[0].evidence.findings).toHaveLength(2);
|
|
372
|
+
});
|
|
373
|
+
|
|
312
374
|
describe("workflow docs & agent skills", () => {
|
|
313
375
|
it("builds workflow docs including provision and an index referencing skills", () => {
|
|
314
376
|
const docs = buildWorkflowDocs("pnpm exec");
|
|
315
377
|
const fileNames = docs.map((d) => d.fileName);
|
|
316
378
|
expect(fileNames).toEqual(
|
|
317
|
-
expect.arrayContaining(["README.md", "add-model.md", "modify-model.md", "verify-and-repair.md", "provision.md"])
|
|
379
|
+
expect.arrayContaining(["README.md", "add-model.md", "modify-model.md", "add-auth.md", "verify-and-repair.md", "provision.md"])
|
|
318
380
|
);
|
|
319
381
|
const index = docs.find((d) => d.fileName === "README.md")!;
|
|
320
382
|
expect(index.content).toContain(".github/skills/");
|
|
@@ -326,6 +388,7 @@ describe("agent loop phase 3/4", () => {
|
|
|
326
388
|
expect(skills.map((s) => s.skillName)).toEqual([
|
|
327
389
|
"swallowkit-add-model",
|
|
328
390
|
"swallowkit-modify-model",
|
|
391
|
+
"swallowkit-add-auth",
|
|
329
392
|
"swallowkit-verify-repair",
|
|
330
393
|
"swallowkit-provision",
|
|
331
394
|
]);
|
|
@@ -351,6 +414,7 @@ describe("agent loop phase 3/4", () => {
|
|
|
351
414
|
expect(skillPaths).toEqual([
|
|
352
415
|
".github/skills/swallowkit-add-model/SKILL.md",
|
|
353
416
|
".github/skills/swallowkit-modify-model/SKILL.md",
|
|
417
|
+
".github/skills/swallowkit-add-auth/SKILL.md",
|
|
354
418
|
".github/skills/swallowkit-verify-repair/SKILL.md",
|
|
355
419
|
".github/skills/swallowkit-provision/SKILL.md",
|
|
356
420
|
]);
|
|
@@ -380,6 +380,15 @@ describe("SWA built-in auth generators", () => {
|
|
|
380
380
|
expect(code).toContain("satisfies AuthUser");
|
|
381
381
|
});
|
|
382
382
|
|
|
383
|
+
it("derives the login URL from allowedProviders instead of hardcoding aad", () => {
|
|
384
|
+
expect(generateSwaAuthContext()).toContain("/.auth/login/aad?");
|
|
385
|
+
const github = generateSwaAuthContext(["github"]);
|
|
386
|
+
expect(github).toContain("/.auth/login/github?");
|
|
387
|
+
expect(github).not.toContain("/.auth/login/aad");
|
|
388
|
+
// 先頭のプロバイダが既定のログイン先になる
|
|
389
|
+
expect(generateSwaAuthContext(["google", "aad"])).toContain("/.auth/login/google?");
|
|
390
|
+
});
|
|
391
|
+
|
|
383
392
|
it("forwards a normalized platform principal with /.auth/me fallback", () => {
|
|
384
393
|
const code = generateBFFCallFunctionWithSwaAuth();
|
|
385
394
|
expect(code).toContain("x-ms-client-principal");
|
|
@@ -40,6 +40,7 @@ export default nextConfig;
|
|
|
40
40
|
const updated = injectSwallowKitNextConfig(original, "sample-app");
|
|
41
41
|
|
|
42
42
|
expect(updated).toContain("output: 'standalone'");
|
|
43
|
+
expect(updated).toContain("agentRules: false");
|
|
43
44
|
expect(updated).toContain("transpilePackages: ['@sample-app/shared']");
|
|
44
45
|
expect(updated).toContain("serverExternalPackages: ['applicationinsights', 'diagnostic-channel-publishers']");
|
|
45
46
|
expect(updated).not.toContain("turbopackUseSystemTlsCerts");
|
|
@@ -57,6 +58,7 @@ module.exports = nextConfig;
|
|
|
57
58
|
const updated = injectSwallowKitNextConfig(original, "sample-app");
|
|
58
59
|
|
|
59
60
|
expect(updated).toContain("transpilePackages: ['@sample-app/shared']");
|
|
61
|
+
expect(updated).toContain("agentRules: false");
|
|
60
62
|
expect(updated).toContain("module.exports = nextConfig;");
|
|
61
63
|
});
|
|
62
64
|
|
|
@@ -216,6 +216,21 @@ describe("machine CLI", () => {
|
|
|
216
216
|
);
|
|
217
217
|
});
|
|
218
218
|
|
|
219
|
+
it("returns the framework capability contract via inspect capabilities", async () => {
|
|
220
|
+
const { response, exitCode } = await runMachine(["node", "swallowkit", "machine", "inspect", "capabilities"]);
|
|
221
|
+
|
|
222
|
+
expect(exitCode).toBe(0);
|
|
223
|
+
expect(response.ok).toBe(true);
|
|
224
|
+
expect(response.command).toBe("inspect-capabilities");
|
|
225
|
+
const declarationNames = response.data.modelDeclarations.map((declaration: { name: string }) => declaration.name);
|
|
226
|
+
expect(declarationNames).toEqual(expect.arrayContaining(["schema", "displayName", "partitionKey", "authPolicy", "connectorConfig"]));
|
|
227
|
+
const partitionKey = response.data.modelDeclarations.find((declaration: { name: string }) => declaration.name === "partitionKey");
|
|
228
|
+
expect(partitionKey.format).toContain("export const partitionKey = '/");
|
|
229
|
+
expect(response.data.authentication.rules.join(" ")).toContain("NEVER hand-write auth.schemes");
|
|
230
|
+
expect(response.data.generatedCrud.notGuaranteed.join(" ")).toContain("Owner scoping");
|
|
231
|
+
expect(response.data.seeding.applySeeds).toContain("dev --seed-env");
|
|
232
|
+
});
|
|
233
|
+
|
|
219
234
|
it("validates forbidden BFF dependencies", async () => {
|
|
220
235
|
createProjectFixture(tempDir, {
|
|
221
236
|
includeGeneratedArtifacts: true,
|
|
@@ -63,6 +63,18 @@ describe("named authentication routers", () => {
|
|
|
63
63
|
expect(generateNamedAuthRouterCSharp(swaOnly)).toContain("AllowedProviders[scheme]");
|
|
64
64
|
});
|
|
65
65
|
|
|
66
|
+
it("emits Array.Empty<string>() instead of untyped new[] { } for empty C# arrays (CS0826)", () => {
|
|
67
|
+
const emptyLists = normalizeAuthConfig({
|
|
68
|
+
schemes: { api: { provider: "external-token" } },
|
|
69
|
+
authorization: { defaultPolicy: "anonymous", policies: { apiOnly: { schemes: ["api"] } } },
|
|
70
|
+
})!;
|
|
71
|
+
const csharp = generateNamedAuthRouterCSharp(emptyLists);
|
|
72
|
+
expect(csharp).not.toMatch(/new\[\]\s*\{\s*\}/);
|
|
73
|
+
expect(csharp).toContain("Array.Empty<string>()");
|
|
74
|
+
// 非空のリストは従来通り new[] リテラル
|
|
75
|
+
expect(csharp).toContain('new[] { "api" }');
|
|
76
|
+
});
|
|
77
|
+
|
|
66
78
|
it("scaffolds named read/write guards for all Functions languages", () => {
|
|
67
79
|
const policy = { read: "adminOnly", write: "lineUserOnly" };
|
|
68
80
|
const model = createBasicModelInfo();
|
|
@@ -178,6 +178,44 @@ describe("plan / apply / drift / verify machine commands", () => {
|
|
|
178
178
|
).toBe(true);
|
|
179
179
|
});
|
|
180
180
|
|
|
181
|
+
it("plans and applies multiple models in one command (scaffold batch)", async () => {
|
|
182
|
+
createProjectFixture(tempDir);
|
|
183
|
+
writeFile(path.join(tempDir, "shared", "models", "note.ts"), createModelSource("Note"));
|
|
184
|
+
|
|
185
|
+
const plan = await runMachine(machineArgs("plan", "scaffold", "todo", "note", "--api-only"));
|
|
186
|
+
|
|
187
|
+
expect(plan.exitCode).toBe(0);
|
|
188
|
+
expect(plan.response.ok).toBe(true);
|
|
189
|
+
expect(plan.response.command).toBe("plan-scaffold");
|
|
190
|
+
expect(plan.response.status).toBe("complete");
|
|
191
|
+
expect(plan.response.data.planType).toBe("scaffold-batch");
|
|
192
|
+
expect(plan.response.data.plans).toHaveLength(2);
|
|
193
|
+
expect(plan.response.nextActions).toHaveLength(2);
|
|
194
|
+
expect(plan.response.nextActions[0].description).toContain("todo");
|
|
195
|
+
expect(plan.response.nextActions[1].description).toContain("note");
|
|
196
|
+
// 何も書き込まれていない
|
|
197
|
+
expect(fs.existsSync(path.join(tempDir, "app"))).toBe(false);
|
|
198
|
+
|
|
199
|
+
const apply = await runMachine(machineArgs("apply", "scaffold", "todo", "note", "--api-only"));
|
|
200
|
+
|
|
201
|
+
expect(apply.exitCode).toBe(0);
|
|
202
|
+
expect(apply.response.ok).toBe(true);
|
|
203
|
+
expect(apply.response.data.applyType).toBe("scaffold-batch");
|
|
204
|
+
expect(apply.response.data.results).toHaveLength(2);
|
|
205
|
+
expect(fs.existsSync(path.join(tempDir, "app", "api", "todo", "route.ts"))).toBe(true);
|
|
206
|
+
expect(fs.existsSync(path.join(tempDir, "app", "api", "note", "route.ts"))).toBe(true);
|
|
207
|
+
});
|
|
208
|
+
|
|
209
|
+
it("rejects --plan combined with multiple models", async () => {
|
|
210
|
+
createProjectFixture(tempDir);
|
|
211
|
+
|
|
212
|
+
const { response, exitCode } = await runMachine(machineArgs("apply", "scaffold", "a", "b", "--plan", "abc"));
|
|
213
|
+
|
|
214
|
+
expect(exitCode).toBe(1);
|
|
215
|
+
expect(response.ok).toBe(false);
|
|
216
|
+
expect(response.error.code).toBe("invalid-arguments");
|
|
217
|
+
});
|
|
218
|
+
|
|
181
219
|
it("applies a previously computed plan and records the artifact ledger", async () => {
|
|
182
220
|
createProjectFixture(tempDir);
|
|
183
221
|
|