swallowkit 1.0.0-beta.9 → 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.
- package/README.ja.md +87 -181
- package/README.md +87 -238
- package/dist/__tests__/fixtures.d.ts +12 -0
- package/dist/__tests__/fixtures.d.ts.map +1 -1
- package/dist/__tests__/fixtures.js +101 -0
- package/dist/__tests__/fixtures.js.map +1 -1
- package/dist/cli/commands/add-auth.d.ts +15 -0
- package/dist/cli/commands/add-auth.d.ts.map +1 -0
- package/dist/cli/commands/add-auth.js +790 -0
- package/dist/cli/commands/add-auth.js.map +1 -0
- package/dist/cli/commands/add-connector.d.ts +20 -0
- package/dist/cli/commands/add-connector.d.ts.map +1 -0
- package/dist/cli/commands/add-connector.js +164 -0
- package/dist/cli/commands/add-connector.js.map +1 -0
- package/dist/cli/commands/cosmos-worktree-isolation.d.ts +25 -0
- package/dist/cli/commands/cosmos-worktree-isolation.d.ts.map +1 -0
- package/dist/cli/commands/cosmos-worktree-isolation.js +124 -0
- package/dist/cli/commands/cosmos-worktree-isolation.js.map +1 -0
- package/dist/cli/commands/create-model.d.ts +1 -4
- package/dist/cli/commands/create-model.d.ts.map +1 -1
- package/dist/cli/commands/create-model.js +20 -82
- package/dist/cli/commands/create-model.js.map +1 -1
- package/dist/cli/commands/dev-seeds.d.ts +27 -0
- package/dist/cli/commands/dev-seeds.d.ts.map +1 -1
- package/dist/cli/commands/dev-seeds.js +188 -6
- package/dist/cli/commands/dev-seeds.js.map +1 -1
- package/dist/cli/commands/dev.d.ts +30 -0
- package/dist/cli/commands/dev.d.ts.map +1 -1
- package/dist/cli/commands/dev.js +495 -129
- package/dist/cli/commands/dev.js.map +1 -1
- package/dist/cli/commands/init.d.ts +69 -1
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +788 -766
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/scaffold.d.ts +24 -3
- package/dist/cli/commands/scaffold.d.ts.map +1 -1
- package/dist/cli/commands/scaffold.js +408 -189
- package/dist/cli/commands/scaffold.js.map +1 -1
- package/dist/cli/index.d.ts +5 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +335 -58
- package/dist/cli/index.js.map +1 -1
- package/dist/core/config.d.ts +13 -3
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js +151 -8
- package/dist/core/config.js.map +1 -1
- package/dist/core/mock/connector-mock-server.d.ts +101 -0
- package/dist/core/mock/connector-mock-server.d.ts.map +1 -0
- package/dist/core/mock/connector-mock-server.js +480 -0
- package/dist/core/mock/connector-mock-server.js.map +1 -0
- package/dist/core/mock/zod-mock-generator.d.ts +14 -0
- package/dist/core/mock/zod-mock-generator.d.ts.map +1 -0
- package/dist/core/mock/zod-mock-generator.js +163 -0
- package/dist/core/mock/zod-mock-generator.js.map +1 -0
- package/dist/core/operations/auth-operations.d.ts +61 -0
- package/dist/core/operations/auth-operations.d.ts.map +1 -0
- package/dist/core/operations/auth-operations.js +272 -0
- package/dist/core/operations/auth-operations.js.map +1 -0
- package/dist/core/operations/create-model.d.ts +15 -0
- package/dist/core/operations/create-model.d.ts.map +1 -0
- package/dist/core/operations/create-model.js +185 -0
- package/dist/core/operations/create-model.js.map +1 -0
- package/dist/core/operations/file-session.d.ts +56 -0
- package/dist/core/operations/file-session.d.ts.map +1 -0
- package/dist/core/operations/file-session.js +203 -0
- package/dist/core/operations/file-session.js.map +1 -0
- package/dist/core/operations/provision-operations.d.ts +52 -0
- package/dist/core/operations/provision-operations.d.ts.map +1 -0
- package/dist/core/operations/provision-operations.js +211 -0
- package/dist/core/operations/provision-operations.js.map +1 -0
- package/dist/core/operations/runtime.d.ts +37 -0
- package/dist/core/operations/runtime.d.ts.map +1 -0
- package/dist/core/operations/runtime.js +248 -0
- package/dist/core/operations/runtime.js.map +1 -0
- package/dist/core/operations/scaffold-apply.d.ts +21 -0
- package/dist/core/operations/scaffold-apply.d.ts.map +1 -0
- package/dist/core/operations/scaffold-apply.js +57 -0
- package/dist/core/operations/scaffold-apply.js.map +1 -0
- package/dist/core/operations/scaffold-machine.d.ts +16 -0
- package/dist/core/operations/scaffold-machine.d.ts.map +1 -0
- package/dist/core/operations/scaffold-machine.js +51 -0
- package/dist/core/operations/scaffold-machine.js.map +1 -0
- package/dist/core/operations/scaffold-plan.d.ts +43 -0
- package/dist/core/operations/scaffold-plan.d.ts.map +1 -0
- package/dist/core/operations/scaffold-plan.js +187 -0
- package/dist/core/operations/scaffold-plan.js.map +1 -0
- 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 +160 -0
- package/dist/core/project/agent-instructions.js.map +1 -0
- package/dist/core/project/artifacts.d.ts +58 -0
- package/dist/core/project/artifacts.d.ts.map +1 -0
- package/dist/core/project/artifacts.js +179 -0
- package/dist/core/project/artifacts.js.map +1 -0
- package/dist/core/project/boundaries.d.ts +50 -0
- package/dist/core/project/boundaries.d.ts.map +1 -0
- package/dist/core/project/boundaries.js +117 -0
- package/dist/core/project/boundaries.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/drift.d.ts +29 -0
- package/dist/core/project/drift.d.ts.map +1 -0
- package/dist/core/project/drift.js +188 -0
- package/dist/core/project/drift.js.map +1 -0
- package/dist/core/project/infra.d.ts +49 -0
- package/dist/core/project/infra.d.ts.map +1 -0
- package/dist/core/project/infra.js +167 -0
- package/dist/core/project/infra.js.map +1 -0
- package/dist/core/project/manifest.d.ts +92 -0
- package/dist/core/project/manifest.d.ts.map +1 -0
- package/dist/core/project/manifest.js +321 -0
- package/dist/core/project/manifest.js.map +1 -0
- package/dist/core/project/state.d.ts +15 -0
- package/dist/core/project/state.d.ts.map +1 -0
- package/dist/core/project/state.js +106 -0
- package/dist/core/project/state.js.map +1 -0
- package/dist/core/project/validation.d.ts +20 -0
- package/dist/core/project/validation.d.ts.map +1 -0
- package/dist/core/project/validation.js +274 -0
- package/dist/core/project/validation.js.map +1 -0
- package/dist/core/project/workflows.d.ts +43 -0
- package/dist/core/project/workflows.d.ts.map +1 -0
- package/dist/core/project/workflows.js +299 -0
- package/dist/core/project/workflows.js.map +1 -0
- package/dist/core/scaffold/auth-generator.d.ts +63 -0
- package/dist/core/scaffold/auth-generator.d.ts.map +1 -0
- package/dist/core/scaffold/auth-generator.js +1774 -0
- package/dist/core/scaffold/auth-generator.js.map +1 -0
- package/dist/core/scaffold/connector-functions-generator.d.ts +41 -0
- package/dist/core/scaffold/connector-functions-generator.d.ts.map +1 -0
- package/dist/core/scaffold/connector-functions-generator.js +1029 -0
- package/dist/core/scaffold/connector-functions-generator.js.map +1 -0
- package/dist/core/scaffold/functions-generator.d.ts +4 -3
- package/dist/core/scaffold/functions-generator.d.ts.map +1 -1
- package/dist/core/scaffold/functions-generator.js +405 -134
- package/dist/core/scaffold/functions-generator.js.map +1 -1
- package/dist/core/scaffold/model-parser.d.ts +20 -0
- package/dist/core/scaffold/model-parser.d.ts.map +1 -1
- package/dist/core/scaffold/model-parser.js +229 -78
- package/dist/core/scaffold/model-parser.js.map +1 -1
- package/dist/core/scaffold/native-schema-generator.d.ts +19 -0
- package/dist/core/scaffold/native-schema-generator.d.ts.map +1 -0
- package/dist/core/scaffold/native-schema-generator.js +753 -0
- package/dist/core/scaffold/native-schema-generator.js.map +1 -0
- package/dist/core/scaffold/nextjs-generator.d.ts +8 -0
- package/dist/core/scaffold/nextjs-generator.d.ts.map +1 -1
- package/dist/core/scaffold/nextjs-generator.js +152 -8
- package/dist/core/scaffold/nextjs-generator.js.map +1 -1
- package/dist/core/scaffold/ui-generator.d.ts +17 -4
- package/dist/core/scaffold/ui-generator.d.ts.map +1 -1
- package/dist/core/scaffold/ui-generator.js +174 -34
- package/dist/core/scaffold/ui-generator.js.map +1 -1
- package/dist/core/verify/index.d.ts +69 -0
- package/dist/core/verify/index.d.ts.map +1 -0
- package/dist/core/verify/index.js +412 -0
- package/dist/core/verify/index.js.map +1 -0
- package/dist/machine/contracts.d.ts +24 -0
- package/dist/machine/contracts.d.ts.map +1 -0
- package/dist/machine/contracts.js +3 -0
- package/dist/machine/contracts.js.map +1 -0
- package/dist/machine/errors.d.ts +14 -0
- package/dist/machine/errors.d.ts.map +1 -0
- package/dist/machine/errors.js +42 -0
- package/dist/machine/errors.js.map +1 -0
- package/dist/machine/index.d.ts +3 -0
- package/dist/machine/index.d.ts.map +1 -0
- package/dist/machine/index.js +566 -0
- package/dist/machine/index.js.map +1 -0
- package/dist/mcp/index.d.ts +25 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +425 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/types/index.d.ts +105 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/utils/package-manager.d.ts +7 -11
- package/dist/utils/package-manager.d.ts.map +1 -1
- package/dist/utils/package-manager.js +42 -17
- package/dist/utils/package-manager.js.map +1 -1
- package/dist/utils/python-uv.d.ts +21 -0
- package/dist/utils/python-uv.d.ts.map +1 -0
- package/dist/utils/python-uv.js +111 -0
- package/dist/utils/python-uv.js.map +1 -0
- package/dist/version.d.ts +2 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +49 -0
- package/dist/version.js.map +1 -0
- package/package.json +15 -17
- package/src/__tests__/__snapshots__/functions-generator.test.ts.snap +716 -22
- package/src/__tests__/__snapshots__/nextjs-generator.test.ts.snap +19 -7
- package/src/__tests__/__snapshots__/ui-generator.test.ts.snap +20 -12
- package/src/__tests__/agent-instructions.test.ts +237 -0
- package/src/__tests__/agent-loop-phase34.test.ts +513 -0
- package/src/__tests__/auth.test.ts +770 -0
- package/src/__tests__/bff-swa-auth.test.ts +275 -0
- package/src/__tests__/config.test.ts +176 -3
- package/src/__tests__/connector-functions-generator.test.ts +288 -0
- package/src/__tests__/connector-mock-server.test.ts +459 -0
- package/src/__tests__/connector-model-bff.test.ts +162 -0
- package/src/__tests__/cosmos-worktree-isolation.test.ts +149 -0
- package/src/__tests__/dev-seeds.test.ts +124 -0
- package/src/__tests__/dev.test.ts +254 -0
- package/src/__tests__/file-session.test.ts +98 -0
- package/src/__tests__/fixtures.ts +101 -0
- package/src/__tests__/functions-generator.test.ts +137 -1
- package/src/__tests__/init.test.ts +366 -2
- package/src/__tests__/jest-globals.d.ts +8 -0
- package/src/__tests__/machine.test.ts +371 -0
- package/src/__tests__/mcp.test.ts +253 -0
- package/src/__tests__/model-parser.test.ts +142 -0
- package/src/__tests__/multi-auth.test.ts +160 -0
- package/src/__tests__/nextjs-generator.test.ts +8 -0
- package/src/__tests__/package-manager.test.ts +59 -4
- package/src/__tests__/plan-apply.test.ts +499 -0
- package/src/__tests__/python-uv.test.ts +48 -0
- package/src/__tests__/scaffold.test.ts +287 -24
- package/src/__tests__/tsconfig.json +15 -0
- package/src/__tests__/ui-generator.test.ts +104 -0
- package/src/__tests__/zod-mock-generator.test.ts +132 -0
- package/src/cli/commands/add-auth.ts +853 -0
- package/src/cli/commands/add-connector.ts +159 -0
- package/src/cli/commands/cosmos-worktree-isolation.ts +130 -0
- package/src/cli/commands/create-model.ts +21 -100
- package/src/cli/commands/dev-seeds.ts +278 -7
- package/src/cli/commands/dev.ts +607 -160
- package/src/cli/commands/init.ts +851 -786
- package/src/cli/commands/scaffold.ts +531 -236
- package/src/cli/index.ts +338 -60
- package/src/core/config.ts +145 -9
- package/src/core/mock/connector-mock-server.ts +555 -0
- package/src/core/mock/zod-mock-generator.ts +205 -0
- package/src/core/operations/auth-operations.ts +360 -0
- package/src/core/operations/create-model.ts +191 -0
- package/src/core/operations/file-session.ts +222 -0
- package/src/core/operations/provision-operations.ts +297 -0
- package/src/core/operations/runtime.ts +258 -0
- package/src/core/operations/scaffold-apply.ts +106 -0
- package/src/core/operations/scaffold-machine.ts +77 -0
- package/src/core/operations/scaffold-plan.ts +215 -0
- package/src/core/project/agent-instructions.ts +167 -0
- package/src/core/project/agent-templates/AGENTS.md +504 -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/artifacts.ts +205 -0
- package/src/core/project/boundaries.ts +170 -0
- package/src/core/project/capabilities.ts +193 -0
- package/src/core/project/drift.ts +202 -0
- package/src/core/project/infra.ts +196 -0
- package/src/core/project/manifest.ts +402 -0
- package/src/core/project/state.ts +77 -0
- package/src/core/project/validation.ts +295 -0
- package/src/core/project/workflows.ts +295 -0
- package/src/core/scaffold/auth-generator.ts +1824 -0
- package/src/core/scaffold/connector-functions-generator.ts +1133 -0
- package/src/core/scaffold/functions-generator.ts +432 -134
- package/src/core/scaffold/model-parser.ts +244 -90
- package/src/core/scaffold/native-schema-generator.ts +904 -0
- package/src/core/scaffold/nextjs-generator.ts +174 -9
- package/src/core/scaffold/ui-generator.ts +191 -36
- package/src/core/verify/index.ts +468 -0
- package/src/machine/contracts.ts +33 -0
- package/src/machine/errors.ts +45 -0
- package/src/machine/index.ts +690 -0
- package/src/mcp/index.ts +423 -0
- package/src/types/index.ts +137 -0
- package/src/utils/package-manager.ts +41 -19
- package/src/utils/python-uv.ts +96 -0
- package/src/version.ts +13 -0
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.runMachineScaffoldOperation = runMachineScaffoldOperation;
|
|
4
|
+
const scaffold_1 = require("../../cli/commands/scaffold");
|
|
5
|
+
const runtime_1 = require("./runtime");
|
|
6
|
+
function deriveErrorMessage(messages) {
|
|
7
|
+
return (0, runtime_1.deriveCapturedErrorMessage)(messages, "Scaffold failed.");
|
|
8
|
+
}
|
|
9
|
+
async function runMachineScaffoldOperation(options) {
|
|
10
|
+
const originalMachineOutput = process.env.SWALLOWKIT_MACHINE_OUTPUT;
|
|
11
|
+
process.env.SWALLOWKIT_MACHINE_OUTPUT = "1";
|
|
12
|
+
try {
|
|
13
|
+
const tracked = await (0, runtime_1.trackFileMutations)(async () => {
|
|
14
|
+
const captured = await (0, runtime_1.captureConsoleMessagesWithError)(async () => {
|
|
15
|
+
await (0, runtime_1.interceptProcessExit)(async () => {
|
|
16
|
+
await (0, scaffold_1.scaffoldCommand)(options);
|
|
17
|
+
});
|
|
18
|
+
});
|
|
19
|
+
if (captured.error) {
|
|
20
|
+
if (captured.error instanceof runtime_1.ProcessExitInterceptError) {
|
|
21
|
+
throw new Error(deriveErrorMessage(captured.messages));
|
|
22
|
+
}
|
|
23
|
+
if (captured.error instanceof Error) {
|
|
24
|
+
throw captured.error;
|
|
25
|
+
}
|
|
26
|
+
throw new Error(deriveErrorMessage(captured.messages));
|
|
27
|
+
}
|
|
28
|
+
return captured.messages;
|
|
29
|
+
});
|
|
30
|
+
return {
|
|
31
|
+
createdFiles: tracked.mutations.createdFiles,
|
|
32
|
+
updatedFiles: tracked.mutations.updatedFiles,
|
|
33
|
+
appendedFiles: tracked.mutations.appendedFiles,
|
|
34
|
+
deletedFiles: tracked.mutations.deletedFiles,
|
|
35
|
+
createdDirectories: tracked.mutations.createdDirectories,
|
|
36
|
+
diagnostics: [
|
|
37
|
+
...tracked.result.warnings.map((warning) => `warning:${warning}`),
|
|
38
|
+
...tracked.result.errors.map((error) => `error:${error}`),
|
|
39
|
+
],
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
finally {
|
|
43
|
+
if (originalMachineOutput === undefined) {
|
|
44
|
+
delete process.env.SWALLOWKIT_MACHINE_OUTPUT;
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
process.env.SWALLOWKIT_MACHINE_OUTPUT = originalMachineOutput;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=scaffold-machine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scaffold-machine.js","sourceRoot":"","sources":["../../../src/core/operations/scaffold-machine.ts"],"names":[],"mappings":";;AA6BA,kEA+CC;AA5ED,0DAA8D;AAC9D,uCAMmB;AAkBnB,SAAS,kBAAkB,CAAC,QAAkE;IAC5F,OAAO,IAAA,oCAA0B,EAAC,QAAQ,EAAE,kBAAkB,CAAC,CAAC;AAClE,CAAC;AAEM,KAAK,UAAU,2BAA2B,CAC/C,OAAwC;IAExC,MAAM,qBAAqB,GAAG,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC;IACpE,OAAO,CAAC,GAAG,CAAC,yBAAyB,GAAG,GAAG,CAAC;IAE5C,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,IAAA,4BAAkB,EAAC,KAAK,IAAI,EAAE;YAClD,MAAM,QAAQ,GAAG,MAAM,IAAA,yCAA+B,EAAC,KAAK,IAAI,EAAE;gBAChE,MAAM,IAAA,8BAAoB,EAAC,KAAK,IAAI,EAAE;oBACpC,MAAM,IAAA,0BAAe,EAAC,OAAO,CAAC,CAAC;gBACjC,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;gBACnB,IAAI,QAAQ,CAAC,KAAK,YAAY,mCAAyB,EAAE,CAAC;oBACxD,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;gBACzD,CAAC;gBAED,IAAI,QAAQ,CAAC,KAAK,YAAY,KAAK,EAAE,CAAC;oBACpC,MAAM,QAAQ,CAAC,KAAK,CAAC;gBACvB,CAAC;gBAED,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;YACzD,CAAC;YAED,OAAO,QAAQ,CAAC,QAAQ,CAAC;QAC3B,CAAC,CAAC,CAAC;QAEH,OAAO;YACL,YAAY,EAAE,OAAO,CAAC,SAAS,CAAC,YAAY;YAC5C,YAAY,EAAE,OAAO,CAAC,SAAS,CAAC,YAAY;YAC5C,aAAa,EAAE,OAAO,CAAC,SAAS,CAAC,aAAa;YAC9C,YAAY,EAAE,OAAO,CAAC,SAAS,CAAC,YAAY;YAC5C,kBAAkB,EAAE,OAAO,CAAC,SAAS,CAAC,kBAAkB;YACxD,WAAW,EAAE;gBACX,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,WAAW,OAAO,EAAE,CAAC;gBACjE,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,SAAS,KAAK,EAAE,CAAC;aAC1D;SACF,CAAC;IACJ,CAAC;YAAS,CAAC;QACT,IAAI,qBAAqB,KAAK,SAAS,EAAE,CAAC;YACxC,OAAO,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC;QAC/C,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,yBAAyB,GAAG,qBAAqB,CAAC;QAChE,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Plan Scaffold — scaffold を collect モードで実行し、書き込み予定を差分計画として返す。
|
|
3
|
+
* ディスクへの書き込みは一切行わない。
|
|
4
|
+
*/
|
|
5
|
+
import { ArtifactOwnership } from "./file-session";
|
|
6
|
+
export interface PlanScaffoldOptions {
|
|
7
|
+
model: string;
|
|
8
|
+
functionsDir?: string;
|
|
9
|
+
apiDir?: string;
|
|
10
|
+
apiOnly?: boolean;
|
|
11
|
+
}
|
|
12
|
+
export type ScaffoldPlanAction = "create" | "update" | "overwrite" | "append" | "delete" | "skip";
|
|
13
|
+
export interface ScaffoldPlanOperation {
|
|
14
|
+
path: string;
|
|
15
|
+
action: ScaffoldPlanAction;
|
|
16
|
+
ownership: ArtifactOwnership;
|
|
17
|
+
conflict: boolean;
|
|
18
|
+
conflictReason?: string;
|
|
19
|
+
}
|
|
20
|
+
export interface ScaffoldPlanData {
|
|
21
|
+
planId: string;
|
|
22
|
+
planType: "scaffold";
|
|
23
|
+
model: string;
|
|
24
|
+
options: {
|
|
25
|
+
functionsDir?: string;
|
|
26
|
+
apiDir?: string;
|
|
27
|
+
apiOnly?: boolean;
|
|
28
|
+
};
|
|
29
|
+
createdAt: string;
|
|
30
|
+
swallowkitVersion: string;
|
|
31
|
+
operations: ScaffoldPlanOperation[];
|
|
32
|
+
warnings: string[];
|
|
33
|
+
conflicts: ScaffoldPlanOperation[];
|
|
34
|
+
requiresApproval: boolean;
|
|
35
|
+
/** project-relative path -> pre-plan content hash (null = did not exist). Used for stale-plan detection. */
|
|
36
|
+
fingerprints: Record<string, string | null>;
|
|
37
|
+
}
|
|
38
|
+
export declare function planScaffoldOperation(options: PlanScaffoldOptions): Promise<ScaffoldPlanData>;
|
|
39
|
+
export declare function verifyPlanFingerprints(plan: ScaffoldPlanData, projectRoot?: string): {
|
|
40
|
+
fresh: boolean;
|
|
41
|
+
changedFiles: string[];
|
|
42
|
+
};
|
|
43
|
+
//# sourceMappingURL=scaffold-plan.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scaffold-plan.d.ts","sourceRoot":"","sources":["../../../src/core/operations/scaffold-plan.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAQH,OAAO,EACL,iBAAiB,EAIlB,MAAM,gBAAgB,CAAC;AAQxB,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,MAAM,kBAAkB,GAAG,QAAQ,GAAG,QAAQ,GAAG,WAAW,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,CAAC;AAElG,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,kBAAkB,CAAC;IAC3B,SAAS,EAAE,iBAAiB,CAAC;IAC7B,QAAQ,EAAE,OAAO,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,UAAU,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE;QACP,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,OAAO,CAAC,EAAE,OAAO,CAAC;KACnB,CAAC;IACF,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,UAAU,EAAE,qBAAqB,EAAE,CAAC;IACpC,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,SAAS,EAAE,qBAAqB,EAAE,CAAC;IACnC,gBAAgB,EAAE,OAAO,CAAC;IAC1B,4GAA4G;IAC5G,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC;CAC7C;AAgDD,wBAAsB,qBAAqB,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA8FnG;AAED,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,gBAAgB,EACtB,WAAW,GAAE,MAAsB,GAClC;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,YAAY,EAAE,MAAM,EAAE,CAAA;CAAE,CAS5C"}
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Plan Scaffold — scaffold を collect モードで実行し、書き込み予定を差分計画として返す。
|
|
4
|
+
* ディスクへの書き込みは一切行わない。
|
|
5
|
+
*/
|
|
6
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
7
|
+
if (k2 === undefined) k2 = k;
|
|
8
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
9
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
10
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
11
|
+
}
|
|
12
|
+
Object.defineProperty(o, k2, desc);
|
|
13
|
+
}) : (function(o, m, k, k2) {
|
|
14
|
+
if (k2 === undefined) k2 = k;
|
|
15
|
+
o[k2] = m[k];
|
|
16
|
+
}));
|
|
17
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
18
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
19
|
+
}) : function(o, v) {
|
|
20
|
+
o["default"] = v;
|
|
21
|
+
});
|
|
22
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
23
|
+
var ownKeys = function(o) {
|
|
24
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
25
|
+
var ar = [];
|
|
26
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
27
|
+
return ar;
|
|
28
|
+
};
|
|
29
|
+
return ownKeys(o);
|
|
30
|
+
};
|
|
31
|
+
return function (mod) {
|
|
32
|
+
if (mod && mod.__esModule) return mod;
|
|
33
|
+
var result = {};
|
|
34
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
35
|
+
__setModuleDefault(result, mod);
|
|
36
|
+
return result;
|
|
37
|
+
};
|
|
38
|
+
})();
|
|
39
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
40
|
+
exports.planScaffoldOperation = planScaffoldOperation;
|
|
41
|
+
exports.verifyPlanFingerprints = verifyPlanFingerprints;
|
|
42
|
+
const crypto = __importStar(require("crypto"));
|
|
43
|
+
const path = __importStar(require("path"));
|
|
44
|
+
const scaffold_1 = require("../../cli/commands/scaffold");
|
|
45
|
+
const version_1 = require("../../version");
|
|
46
|
+
const artifacts_1 = require("../project/artifacts");
|
|
47
|
+
const state_1 = require("../project/state");
|
|
48
|
+
const file_session_1 = require("./file-session");
|
|
49
|
+
const runtime_1 = require("./runtime");
|
|
50
|
+
function deriveScaffoldErrorMessage(messages) {
|
|
51
|
+
return (0, runtime_1.deriveCapturedErrorMessage)(messages, "Scaffold plan failed.");
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* scaffold を collect セッションで実行し、記録された操作を返す。
|
|
55
|
+
*/
|
|
56
|
+
async function collectScaffoldOperations(options) {
|
|
57
|
+
const session = new file_session_1.FileOperationSession("collect");
|
|
58
|
+
const originalMachineOutput = process.env.SWALLOWKIT_MACHINE_OUTPUT;
|
|
59
|
+
process.env.SWALLOWKIT_MACHINE_OUTPUT = "1";
|
|
60
|
+
try {
|
|
61
|
+
const captured = await (0, runtime_1.captureConsoleMessagesWithError)(async () => {
|
|
62
|
+
await (0, runtime_1.interceptProcessExit)(async () => {
|
|
63
|
+
await (0, file_session_1.runWithFileSession)(session, async () => {
|
|
64
|
+
await (0, scaffold_1.scaffoldCommand)({
|
|
65
|
+
model: options.model,
|
|
66
|
+
functionsDir: options.functionsDir,
|
|
67
|
+
apiDir: options.apiDir,
|
|
68
|
+
apiOnly: options.apiOnly,
|
|
69
|
+
});
|
|
70
|
+
});
|
|
71
|
+
});
|
|
72
|
+
});
|
|
73
|
+
if (captured.error) {
|
|
74
|
+
if (captured.error instanceof runtime_1.ProcessExitInterceptError) {
|
|
75
|
+
throw new Error(deriveScaffoldErrorMessage(captured.messages));
|
|
76
|
+
}
|
|
77
|
+
if (captured.error instanceof Error) {
|
|
78
|
+
throw captured.error;
|
|
79
|
+
}
|
|
80
|
+
throw new Error(deriveScaffoldErrorMessage(captured.messages));
|
|
81
|
+
}
|
|
82
|
+
return session;
|
|
83
|
+
}
|
|
84
|
+
finally {
|
|
85
|
+
if (originalMachineOutput === undefined) {
|
|
86
|
+
delete process.env.SWALLOWKIT_MACHINE_OUTPUT;
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
process.env.SWALLOWKIT_MACHINE_OUTPUT = originalMachineOutput;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
async function planScaffoldOperation(options) {
|
|
94
|
+
const projectRoot = process.cwd();
|
|
95
|
+
const session = await collectScaffoldOperations(options);
|
|
96
|
+
const ledger = (0, artifacts_1.loadArtifactLedger)(projectRoot);
|
|
97
|
+
const operations = [];
|
|
98
|
+
const fingerprints = { ...session.inputFingerprints };
|
|
99
|
+
const warnings = [...session.warnings];
|
|
100
|
+
for (const op of session.operations) {
|
|
101
|
+
fingerprints[op.path] = op.previousHash;
|
|
102
|
+
let action;
|
|
103
|
+
let conflict = false;
|
|
104
|
+
let conflictReason;
|
|
105
|
+
switch (op.action) {
|
|
106
|
+
case "create":
|
|
107
|
+
action = "create";
|
|
108
|
+
break;
|
|
109
|
+
case "skip":
|
|
110
|
+
action = "skip";
|
|
111
|
+
break;
|
|
112
|
+
case "append":
|
|
113
|
+
action = "append";
|
|
114
|
+
break;
|
|
115
|
+
case "delete":
|
|
116
|
+
action = "delete";
|
|
117
|
+
break;
|
|
118
|
+
case "modify": {
|
|
119
|
+
const record = ledger ? (0, artifacts_1.findArtifactRecord)(ledger, op.path) : undefined;
|
|
120
|
+
if (record && record.contentHash === op.previousHash) {
|
|
121
|
+
// 生成後に変更されていない managed ファイルの再生成 — 安全
|
|
122
|
+
action = "update";
|
|
123
|
+
}
|
|
124
|
+
else if (record) {
|
|
125
|
+
action = "overwrite";
|
|
126
|
+
conflict = true;
|
|
127
|
+
conflictReason = "modified-after-generation";
|
|
128
|
+
}
|
|
129
|
+
else {
|
|
130
|
+
action = "overwrite";
|
|
131
|
+
conflict = true;
|
|
132
|
+
conflictReason = "unknown-provenance";
|
|
133
|
+
warnings.push(`unknown-provenance: ${op.path} exists but is not tracked in .swallowkit/artifacts.json; regenerating will overwrite it.`);
|
|
134
|
+
}
|
|
135
|
+
break;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
operations.push({
|
|
139
|
+
path: op.path,
|
|
140
|
+
action,
|
|
141
|
+
ownership: op.ownership,
|
|
142
|
+
conflict,
|
|
143
|
+
...(conflictReason ? { conflictReason } : {}),
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
const conflicts = operations.filter((op) => op.conflict);
|
|
147
|
+
const planId = crypto
|
|
148
|
+
.createHash("sha256")
|
|
149
|
+
.update(JSON.stringify({
|
|
150
|
+
model: options.model,
|
|
151
|
+
options: { functionsDir: options.functionsDir, apiDir: options.apiDir, apiOnly: options.apiOnly },
|
|
152
|
+
operations: operations.map((op) => ({ path: op.path, action: op.action })),
|
|
153
|
+
fingerprints,
|
|
154
|
+
}))
|
|
155
|
+
.digest("hex")
|
|
156
|
+
.slice(0, 12);
|
|
157
|
+
const plan = {
|
|
158
|
+
planId,
|
|
159
|
+
planType: "scaffold",
|
|
160
|
+
model: options.model,
|
|
161
|
+
options: {
|
|
162
|
+
...(options.functionsDir ? { functionsDir: options.functionsDir } : {}),
|
|
163
|
+
...(options.apiDir ? { apiDir: options.apiDir } : {}),
|
|
164
|
+
...(options.apiOnly !== undefined ? { apiOnly: options.apiOnly } : {}),
|
|
165
|
+
},
|
|
166
|
+
createdAt: new Date().toISOString(),
|
|
167
|
+
swallowkitVersion: (0, version_1.getSwallowKitVersion)(),
|
|
168
|
+
operations,
|
|
169
|
+
warnings,
|
|
170
|
+
conflicts,
|
|
171
|
+
requiresApproval: conflicts.length > 0,
|
|
172
|
+
fingerprints,
|
|
173
|
+
};
|
|
174
|
+
(0, state_1.savePlanState)(plan, projectRoot);
|
|
175
|
+
return plan;
|
|
176
|
+
}
|
|
177
|
+
function verifyPlanFingerprints(plan, projectRoot = process.cwd()) {
|
|
178
|
+
const changedFiles = [];
|
|
179
|
+
for (const [relativePath, expectedHash] of Object.entries(plan.fingerprints)) {
|
|
180
|
+
const currentHash = (0, file_session_1.hashFileIfExists)(path.join(projectRoot, relativePath));
|
|
181
|
+
if (currentHash !== expectedHash) {
|
|
182
|
+
changedFiles.push(relativePath);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
return { fresh: changedFiles.length === 0, changedFiles };
|
|
186
|
+
}
|
|
187
|
+
//# sourceMappingURL=scaffold-plan.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scaffold-plan.js","sourceRoot":"","sources":["../../../src/core/operations/scaffold-plan.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { BackendLanguage } from "../../types";
|
|
2
|
+
import { PackageManager } from "../../utils/package-manager";
|
|
3
|
+
export interface AgentInstructionContext {
|
|
4
|
+
projectName: string;
|
|
5
|
+
backendLanguage: BackendLanguage;
|
|
6
|
+
packageManager: PackageManager;
|
|
7
|
+
}
|
|
8
|
+
export interface AgentInstructionDocuments {
|
|
9
|
+
agentsMd: string;
|
|
10
|
+
claudeMd: string;
|
|
11
|
+
copilotInstructions: string;
|
|
12
|
+
pathSpecificInstructions: Record<string, string>;
|
|
13
|
+
}
|
|
14
|
+
export declare const AGENT_TEMPLATE_FILES: {
|
|
15
|
+
readonly agentsMd: "AGENTS.md";
|
|
16
|
+
readonly claudeMd: "CLAUDE.md";
|
|
17
|
+
readonly copilotInstructions: "copilot-instructions.md";
|
|
18
|
+
readonly sharedModelsInstructions: "shared-models.instructions.md";
|
|
19
|
+
readonly bffRoutesInstructions: "bff-routes.instructions.md";
|
|
20
|
+
readonly azureFunctionsInstructions: "azure-functions.instructions.md";
|
|
21
|
+
};
|
|
22
|
+
export declare function readAgentInstructionTemplate(fileName: string): string;
|
|
23
|
+
export declare function buildAgentsMd(context: AgentInstructionContext): string;
|
|
24
|
+
export declare function buildClaudeMd(context: AgentInstructionContext): string;
|
|
25
|
+
export declare function buildCopilotInstructions(context: AgentInstructionContext): string;
|
|
26
|
+
export declare function buildPathSpecificInstructions(context: AgentInstructionContext): Record<string, string>;
|
|
27
|
+
export declare function buildAgentInstructionDocuments(context: AgentInstructionContext): AgentInstructionDocuments;
|
|
28
|
+
export declare function writeAgentInstructionFiles(projectDir: string, context: AgentInstructionContext): AgentInstructionDocuments;
|
|
29
|
+
//# sourceMappingURL=agent-instructions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-instructions.d.ts","sourceRoot":"","sources":["../../../src/core/project/agent-instructions.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAe,MAAM,6BAA6B,CAAC;AAE1E,MAAM,WAAW,uBAAuB;IACtC,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,eAAe,CAAC;IACjC,cAAc,EAAE,cAAc,CAAC;CAChC;AAED,MAAM,WAAW,yBAAyB;IACxC,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,wBAAwB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClD;AAED,eAAO,MAAM,oBAAoB;;;;;;;CAOvB,CAAC;AAoBX,wBAAgB,4BAA4B,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAErE;AAyDD,wBAAgB,aAAa,CAAC,OAAO,EAAE,uBAAuB,GAAG,MAAM,CAEtE;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,uBAAuB,GAAG,MAAM,CAEtE;AAED,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,uBAAuB,GAAG,MAAM,CAEjF;AAED,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,uBAAuB,GAC/B,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAexB;AAED,wBAAgB,8BAA8B,CAC5C,OAAO,EAAE,uBAAuB,GAC/B,yBAAyB,CAO3B;AAED,wBAAgB,0BAA0B,CACxC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,uBAAuB,GAC/B,yBAAyB,CAiB3B"}
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.AGENT_TEMPLATE_FILES = void 0;
|
|
37
|
+
exports.readAgentInstructionTemplate = readAgentInstructionTemplate;
|
|
38
|
+
exports.buildAgentsMd = buildAgentsMd;
|
|
39
|
+
exports.buildClaudeMd = buildClaudeMd;
|
|
40
|
+
exports.buildCopilotInstructions = buildCopilotInstructions;
|
|
41
|
+
exports.buildPathSpecificInstructions = buildPathSpecificInstructions;
|
|
42
|
+
exports.buildAgentInstructionDocuments = buildAgentInstructionDocuments;
|
|
43
|
+
exports.writeAgentInstructionFiles = writeAgentInstructionFiles;
|
|
44
|
+
const fs = __importStar(require("fs"));
|
|
45
|
+
const path = __importStar(require("path"));
|
|
46
|
+
const package_manager_1 = require("../../utils/package-manager");
|
|
47
|
+
exports.AGENT_TEMPLATE_FILES = {
|
|
48
|
+
agentsMd: "AGENTS.md",
|
|
49
|
+
claudeMd: "CLAUDE.md",
|
|
50
|
+
copilotInstructions: "copilot-instructions.md",
|
|
51
|
+
sharedModelsInstructions: "shared-models.instructions.md",
|
|
52
|
+
bffRoutesInstructions: "bff-routes.instructions.md",
|
|
53
|
+
azureFunctionsInstructions: "azure-functions.instructions.md",
|
|
54
|
+
};
|
|
55
|
+
const BACKEND_LANGUAGE_LABELS = {
|
|
56
|
+
typescript: "TypeScript",
|
|
57
|
+
csharp: "C#",
|
|
58
|
+
python: "Python",
|
|
59
|
+
};
|
|
60
|
+
function getTemplatePath(fileName) {
|
|
61
|
+
const candidates = [
|
|
62
|
+
path.join(__dirname, "agent-templates", fileName),
|
|
63
|
+
path.join(__dirname, "../../../src/core/project/agent-templates", fileName),
|
|
64
|
+
];
|
|
65
|
+
const templatePath = candidates.find((candidate) => fs.existsSync(candidate));
|
|
66
|
+
if (!templatePath) {
|
|
67
|
+
throw new Error(`Agent instruction template not found: ${fileName}`);
|
|
68
|
+
}
|
|
69
|
+
return templatePath;
|
|
70
|
+
}
|
|
71
|
+
function readAgentInstructionTemplate(fileName) {
|
|
72
|
+
return fs.readFileSync(getTemplatePath(fileName), "utf-8").replace(/\r\n/g, "\n");
|
|
73
|
+
}
|
|
74
|
+
function getFunctionsStructureLine(backendLanguage) {
|
|
75
|
+
if (backendLanguage === "typescript") {
|
|
76
|
+
return "│ └── src/ # HTTP trigger handlers with Cosmos DB bindings";
|
|
77
|
+
}
|
|
78
|
+
if (backendLanguage === "csharp") {
|
|
79
|
+
return "│ ├── Crud/ # C# HTTP trigger handlers\n│ └── generated/ # Native-generated C# schema assets";
|
|
80
|
+
}
|
|
81
|
+
return "│ ├── blueprints/ # Python HTTP trigger handlers\n│ └── generated/ # Native-generated Python schema assets";
|
|
82
|
+
}
|
|
83
|
+
function getBackendRules(backendLanguage) {
|
|
84
|
+
if (backendLanguage === "typescript") {
|
|
85
|
+
return [
|
|
86
|
+
"- All backend business logic and data access live in `functions/src/`.",
|
|
87
|
+
"- Prefer Azure Functions Cosmos DB input/output bindings for reads and writes.",
|
|
88
|
+
"- Use the Cosmos DB SDK directly only where bindings do not support the operation, such as deletes.",
|
|
89
|
+
"- Validate data against the shared Zod schemas before persistence.",
|
|
90
|
+
].join("\n");
|
|
91
|
+
}
|
|
92
|
+
return [
|
|
93
|
+
"- All backend business logic and data access live in `functions/`.",
|
|
94
|
+
`- SwallowKit derives OpenAPI and native ${BACKEND_LANGUAGE_LABELS[backendLanguage]} schema assets from the Zod source of truth.`,
|
|
95
|
+
"- Keep custom business logic in ai-authored locations identified by the current boundary contract.",
|
|
96
|
+
].join("\n");
|
|
97
|
+
}
|
|
98
|
+
function interpolateTemplate(template, context) {
|
|
99
|
+
const runCmd = (0, package_manager_1.getCommands)(context.packageManager).exec;
|
|
100
|
+
const replacements = {
|
|
101
|
+
projectName: context.projectName,
|
|
102
|
+
backendLanguageLabel: BACKEND_LANGUAGE_LABELS[context.backendLanguage],
|
|
103
|
+
functionsStructureLine: getFunctionsStructureLine(context.backendLanguage),
|
|
104
|
+
backendRules: getBackendRules(context.backendLanguage),
|
|
105
|
+
pm: context.packageManager,
|
|
106
|
+
runCmd,
|
|
107
|
+
};
|
|
108
|
+
const result = template.replace(/\{\{([A-Za-z]+)\}\}/g, (placeholder, key) => {
|
|
109
|
+
const replacement = replacements[key];
|
|
110
|
+
if (replacement === undefined) {
|
|
111
|
+
throw new Error(`Unknown Agent instruction placeholder: ${placeholder}`);
|
|
112
|
+
}
|
|
113
|
+
return replacement;
|
|
114
|
+
});
|
|
115
|
+
if (/\{\{[^}]+\}\}/.test(result)) {
|
|
116
|
+
throw new Error("Unresolved Agent instruction template placeholder");
|
|
117
|
+
}
|
|
118
|
+
return result;
|
|
119
|
+
}
|
|
120
|
+
function buildTemplate(fileName, context) {
|
|
121
|
+
return interpolateTemplate(readAgentInstructionTemplate(fileName), context);
|
|
122
|
+
}
|
|
123
|
+
function buildAgentsMd(context) {
|
|
124
|
+
return buildTemplate(exports.AGENT_TEMPLATE_FILES.agentsMd, context);
|
|
125
|
+
}
|
|
126
|
+
function buildClaudeMd(context) {
|
|
127
|
+
return buildTemplate(exports.AGENT_TEMPLATE_FILES.claudeMd, context);
|
|
128
|
+
}
|
|
129
|
+
function buildCopilotInstructions(context) {
|
|
130
|
+
return buildTemplate(exports.AGENT_TEMPLATE_FILES.copilotInstructions, context);
|
|
131
|
+
}
|
|
132
|
+
function buildPathSpecificInstructions(context) {
|
|
133
|
+
return {
|
|
134
|
+
[exports.AGENT_TEMPLATE_FILES.sharedModelsInstructions]: buildTemplate(exports.AGENT_TEMPLATE_FILES.sharedModelsInstructions, context),
|
|
135
|
+
[exports.AGENT_TEMPLATE_FILES.bffRoutesInstructions]: buildTemplate(exports.AGENT_TEMPLATE_FILES.bffRoutesInstructions, context),
|
|
136
|
+
[exports.AGENT_TEMPLATE_FILES.azureFunctionsInstructions]: buildTemplate(exports.AGENT_TEMPLATE_FILES.azureFunctionsInstructions, context),
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
function buildAgentInstructionDocuments(context) {
|
|
140
|
+
return {
|
|
141
|
+
agentsMd: buildAgentsMd(context),
|
|
142
|
+
claudeMd: buildClaudeMd(context),
|
|
143
|
+
copilotInstructions: buildCopilotInstructions(context),
|
|
144
|
+
pathSpecificInstructions: buildPathSpecificInstructions(context),
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
function writeAgentInstructionFiles(projectDir, context) {
|
|
148
|
+
const documents = buildAgentInstructionDocuments(context);
|
|
149
|
+
fs.writeFileSync(path.join(projectDir, "AGENTS.md"), documents.agentsMd, "utf-8");
|
|
150
|
+
fs.writeFileSync(path.join(projectDir, "CLAUDE.md"), documents.claudeMd, "utf-8");
|
|
151
|
+
const githubDir = path.join(projectDir, ".github");
|
|
152
|
+
const instructionsDir = path.join(githubDir, "instructions");
|
|
153
|
+
fs.mkdirSync(instructionsDir, { recursive: true });
|
|
154
|
+
fs.writeFileSync(path.join(githubDir, "copilot-instructions.md"), documents.copilotInstructions, "utf-8");
|
|
155
|
+
for (const [fileName, content] of Object.entries(documents.pathSpecificInstructions)) {
|
|
156
|
+
fs.writeFileSync(path.join(instructionsDir, fileName), content, "utf-8");
|
|
157
|
+
}
|
|
158
|
+
return documents;
|
|
159
|
+
}
|
|
160
|
+
//# sourceMappingURL=agent-instructions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-instructions.js","sourceRoot":"","sources":["../../../src/core/project/agent-instructions.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Artifact Ledger — `.swallowkit/artifacts.json`
|
|
3
|
+
*
|
|
4
|
+
* SwallowKit が生成・管理するファイルの所有権(Ownership)、内容ハッシュ、
|
|
5
|
+
* 生成元スキーマのハッシュ、Generator バージョンを記録する台帳。
|
|
6
|
+
* Git 管理を前提とし、Drift 検出と Plan の衝突判定の基礎データとなる。
|
|
7
|
+
*/
|
|
8
|
+
import { ArtifactOwnership, RecordedFileOperation } from "../operations/file-session";
|
|
9
|
+
export declare const SWALLOWKIT_ARTIFACTS_PATH: string;
|
|
10
|
+
export declare const SWALLOWKIT_ARTIFACTS_VERSION = 1;
|
|
11
|
+
export type ArtifactLastOperation = "create" | "update" | "append" | "delete";
|
|
12
|
+
export interface ArtifactRecord {
|
|
13
|
+
/** Project-relative POSIX path */
|
|
14
|
+
path: string;
|
|
15
|
+
ownership: ArtifactOwnership;
|
|
16
|
+
/** Logical generator name, e.g. "scaffold", "create-model" */
|
|
17
|
+
generator: string;
|
|
18
|
+
generatorVersion: string;
|
|
19
|
+
/** Entity name the artifact was generated from, if any */
|
|
20
|
+
sourceModel?: string;
|
|
21
|
+
/** sha256 (LF normalized) of the source model file at generation time */
|
|
22
|
+
schemaHash?: string;
|
|
23
|
+
/** sha256 (LF normalized) of the artifact content at generation time */
|
|
24
|
+
contentHash: string;
|
|
25
|
+
generatedAt: string;
|
|
26
|
+
lastOperation: ArtifactLastOperation;
|
|
27
|
+
}
|
|
28
|
+
export interface ArtifactLedger {
|
|
29
|
+
version: number;
|
|
30
|
+
swallowkitVersion: string;
|
|
31
|
+
artifacts: ArtifactRecord[];
|
|
32
|
+
}
|
|
33
|
+
export declare function loadArtifactLedger(projectRoot?: string): ArtifactLedger | null;
|
|
34
|
+
export declare function saveArtifactLedger(ledger: ArtifactLedger, projectRoot?: string): void;
|
|
35
|
+
export declare function findArtifactRecord(ledger: ArtifactLedger | null, relativePath: string): ArtifactRecord | undefined;
|
|
36
|
+
export interface RecordArtifactContext {
|
|
37
|
+
/** sha256 of the source model file, when the operation batch originates from one model */
|
|
38
|
+
schemaHash?: string;
|
|
39
|
+
/** Fallback source model name */
|
|
40
|
+
sourceModel?: string;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* セッションで記録された操作を台帳へ反映する。
|
|
44
|
+
* - skip は台帳更新しない(既存記録があれば schemaHash のみ更新)
|
|
45
|
+
* - delete は台帳からレコードを削除する
|
|
46
|
+
*/
|
|
47
|
+
export declare function recordSessionOperations(operations: RecordedFileOperation[], context?: RecordArtifactContext, projectRoot?: string): ArtifactLedger;
|
|
48
|
+
export interface InspectedArtifact extends ArtifactRecord {
|
|
49
|
+
exists: boolean;
|
|
50
|
+
/** true when the current on-disk content differs from the recorded contentHash */
|
|
51
|
+
modified: boolean;
|
|
52
|
+
}
|
|
53
|
+
export declare function inspectArtifacts(projectRoot?: string): {
|
|
54
|
+
ledgerFound: boolean;
|
|
55
|
+
swallowkitVersion: string | null;
|
|
56
|
+
artifacts: InspectedArtifact[];
|
|
57
|
+
};
|
|
58
|
+
//# sourceMappingURL=artifacts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"artifacts.d.ts","sourceRoot":"","sources":["../../../src/core/project/artifacts.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EAEtB,MAAM,4BAA4B,CAAC;AAEpC,eAAO,MAAM,yBAAyB,QAA6C,CAAC;AACpF,eAAO,MAAM,4BAA4B,IAAI,CAAC;AAE9C,MAAM,MAAM,qBAAqB,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAE9E,MAAM,WAAW,cAAc;IAC7B,kCAAkC;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,iBAAiB,CAAC;IAC7B,8DAA8D;IAC9D,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,MAAM,CAAC;IACzB,0DAA0D;IAC1D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,yEAAyE;IACzE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,wEAAwE;IACxE,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,qBAAqB,CAAC;CACtC;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,SAAS,EAAE,cAAc,EAAE,CAAC;CAC7B;AAED,wBAAgB,kBAAkB,CAAC,WAAW,GAAE,MAAsB,GAAG,cAAc,GAAG,IAAI,CAW7F;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,cAAc,EAAE,WAAW,GAAE,MAAsB,GAAG,IAAI,CASpG;AAED,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,cAAc,GAAG,IAAI,EAC7B,YAAY,EAAE,MAAM,GACnB,cAAc,GAAG,SAAS,CAE5B;AAiBD,MAAM,WAAW,qBAAqB;IACpC,0FAA0F;IAC1F,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iCAAiC;IACjC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CACrC,UAAU,EAAE,qBAAqB,EAAE,EACnC,OAAO,GAAE,qBAA0B,EACnC,WAAW,GAAE,MAAsB,GAClC,cAAc,CAgEhB;AAED,MAAM,WAAW,iBAAkB,SAAQ,cAAc;IACvD,MAAM,EAAE,OAAO,CAAC;IAChB,kFAAkF;IAClF,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,wBAAgB,gBAAgB,CAAC,WAAW,GAAE,MAAsB,GAAG;IACrE,WAAW,EAAE,OAAO,CAAC;IACrB,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,SAAS,EAAE,iBAAiB,EAAE,CAAC;CAChC,CAqBA"}
|