swallowkit 2.0.0-alpha.1 → 2.0.0-alpha.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (224) hide show
  1. package/README.ja.md +14 -0
  2. package/README.md +14 -0
  3. package/dist/cli/commands/add-auth.js +37 -6
  4. package/dist/cli/commands/add-auth.js.map +1 -1
  5. package/dist/cli/commands/configure-mcp.d.ts +12 -0
  6. package/dist/cli/commands/configure-mcp.d.ts.map +1 -0
  7. package/dist/cli/commands/configure-mcp.js +42 -0
  8. package/dist/cli/commands/configure-mcp.js.map +1 -0
  9. package/dist/cli/commands/dev.d.ts +2 -2
  10. package/dist/cli/commands/dev.d.ts.map +1 -1
  11. package/dist/cli/commands/dev.js +39 -27
  12. package/dist/cli/commands/dev.js.map +1 -1
  13. package/dist/cli/commands/init.d.ts +8 -2
  14. package/dist/cli/commands/init.d.ts.map +1 -1
  15. package/dist/cli/commands/init.js +67 -132
  16. package/dist/cli/commands/init.js.map +1 -1
  17. package/dist/cli/commands/migrations.d.ts.map +1 -1
  18. package/dist/cli/commands/migrations.js +25 -0
  19. package/dist/cli/commands/migrations.js.map +1 -1
  20. package/dist/cli/commands/provision.d.ts +5 -0
  21. package/dist/cli/commands/provision.d.ts.map +1 -1
  22. package/dist/cli/commands/provision.js +278 -55
  23. package/dist/cli/commands/provision.js.map +1 -1
  24. package/dist/cli/commands/scaffold.d.ts +4 -0
  25. package/dist/cli/commands/scaffold.d.ts.map +1 -1
  26. package/dist/cli/commands/scaffold.js +85 -3
  27. package/dist/cli/commands/scaffold.js.map +1 -1
  28. package/dist/cli/index.d.ts +2 -0
  29. package/dist/cli/index.d.ts.map +1 -1
  30. package/dist/cli/index.js +43 -5
  31. package/dist/cli/index.js.map +1 -1
  32. package/dist/core/operations/create-model.d.ts +2 -0
  33. package/dist/core/operations/create-model.d.ts.map +1 -1
  34. package/dist/core/operations/create-model.js +60 -8
  35. package/dist/core/operations/create-model.js.map +1 -1
  36. package/dist/core/operations/migration-generator.d.ts.map +1 -1
  37. package/dist/core/operations/migration-generator.js +12 -1
  38. package/dist/core/operations/migration-generator.js.map +1 -1
  39. package/dist/core/operations/model-migration.d.ts +22 -0
  40. package/dist/core/operations/model-migration.d.ts.map +1 -0
  41. package/dist/core/operations/model-migration.js +36 -0
  42. package/dist/core/operations/model-migration.js.map +1 -0
  43. package/dist/core/operations/provision-deployment.d.ts +52 -0
  44. package/dist/core/operations/provision-deployment.d.ts.map +1 -0
  45. package/dist/core/operations/provision-deployment.js +164 -0
  46. package/dist/core/operations/provision-deployment.js.map +1 -0
  47. package/dist/core/operations/provision-operations.d.ts +62 -6
  48. package/dist/core/operations/provision-operations.d.ts.map +1 -1
  49. package/dist/core/operations/provision-operations.js +653 -115
  50. package/dist/core/operations/provision-operations.js.map +1 -1
  51. package/dist/core/operations/scaffold-apply.d.ts +1 -0
  52. package/dist/core/operations/scaffold-apply.d.ts.map +1 -1
  53. package/dist/core/operations/scaffold-apply.js +1 -0
  54. package/dist/core/operations/scaffold-apply.js.map +1 -1
  55. package/dist/core/operations/scaffold-machine.d.ts +1 -0
  56. package/dist/core/operations/scaffold-machine.d.ts.map +1 -1
  57. package/dist/core/operations/scaffold-machine.js.map +1 -1
  58. package/dist/core/operations/scaffold-plan.d.ts +2 -0
  59. package/dist/core/operations/scaffold-plan.d.ts.map +1 -1
  60. package/dist/core/operations/scaffold-plan.js +3 -1
  61. package/dist/core/operations/scaffold-plan.js.map +1 -1
  62. package/dist/core/project/agent-instructions.d.ts.map +1 -1
  63. package/dist/core/project/agent-instructions.js +4 -1
  64. package/dist/core/project/agent-instructions.js.map +1 -1
  65. package/dist/core/project/boundaries.d.ts +5 -2
  66. package/dist/core/project/boundaries.d.ts.map +1 -1
  67. package/dist/core/project/boundaries.js +51 -20
  68. package/dist/core/project/boundaries.js.map +1 -1
  69. package/dist/core/project/capabilities.d.ts +10 -0
  70. package/dist/core/project/capabilities.d.ts.map +1 -1
  71. package/dist/core/project/capabilities.js +38 -6
  72. package/dist/core/project/capabilities.js.map +1 -1
  73. package/dist/core/project/home-page.d.ts +4 -0
  74. package/dist/core/project/home-page.d.ts.map +1 -0
  75. package/dist/core/project/home-page.js +113 -0
  76. package/dist/core/project/home-page.js.map +1 -0
  77. package/dist/core/project/mcp-config.d.ts +26 -0
  78. package/dist/core/project/mcp-config.d.ts.map +1 -0
  79. package/dist/core/project/mcp-config.js +117 -0
  80. package/dist/core/project/mcp-config.js.map +1 -0
  81. package/dist/core/project/react-project.d.ts +1 -1
  82. package/dist/core/project/react-project.d.ts.map +1 -1
  83. package/dist/core/project/react-project.js +46 -25
  84. package/dist/core/project/react-project.js.map +1 -1
  85. package/dist/core/project/state.d.ts +7 -0
  86. package/dist/core/project/state.d.ts.map +1 -1
  87. package/dist/core/project/state.js +86 -0
  88. package/dist/core/project/state.js.map +1 -1
  89. package/dist/core/project/workflows.d.ts.map +1 -1
  90. package/dist/core/project/workflows.js +53 -7
  91. package/dist/core/project/workflows.js.map +1 -1
  92. package/dist/core/scaffold/auth-generator.d.ts.map +1 -1
  93. package/dist/core/scaffold/auth-generator.js +26 -27
  94. package/dist/core/scaffold/auth-generator.js.map +1 -1
  95. package/dist/core/scaffold/model-parser.d.ts +23 -0
  96. package/dist/core/scaffold/model-parser.d.ts.map +1 -1
  97. package/dist/core/scaffold/model-parser.js +407 -137
  98. package/dist/core/scaffold/model-parser.js.map +1 -1
  99. package/dist/core/scaffold/native-schema-generator.d.ts +13 -0
  100. package/dist/core/scaffold/native-schema-generator.d.ts.map +1 -1
  101. package/dist/core/scaffold/native-schema-generator.js +294 -91
  102. package/dist/core/scaffold/native-schema-generator.js.map +1 -1
  103. package/dist/core/scaffold/openapi-generator.d.ts +5 -0
  104. package/dist/core/scaffold/openapi-generator.d.ts.map +1 -1
  105. package/dist/core/scaffold/openapi-generator.js +53 -3
  106. package/dist/core/scaffold/openapi-generator.js.map +1 -1
  107. package/dist/core/scaffold/ui-generator.d.ts +0 -3
  108. package/dist/core/scaffold/ui-generator.d.ts.map +1 -1
  109. package/dist/core/scaffold/ui-generator.js +68 -7
  110. package/dist/core/scaffold/ui-generator.js.map +1 -1
  111. package/dist/core/verify/index.d.ts +4 -3
  112. package/dist/core/verify/index.d.ts.map +1 -1
  113. package/dist/core/verify/index.js +122 -5
  114. package/dist/core/verify/index.js.map +1 -1
  115. package/dist/machine/contracts.d.ts +1 -0
  116. package/dist/machine/contracts.d.ts.map +1 -1
  117. package/dist/machine/errors.d.ts +3 -2
  118. package/dist/machine/errors.d.ts.map +1 -1
  119. package/dist/machine/errors.js +2 -1
  120. package/dist/machine/errors.js.map +1 -1
  121. package/dist/machine/index.d.ts.map +1 -1
  122. package/dist/machine/index.js +59 -28
  123. package/dist/machine/index.js.map +1 -1
  124. package/dist/mcp/index.d.ts +6 -4
  125. package/dist/mcp/index.d.ts.map +1 -1
  126. package/dist/mcp/index.js +210 -25
  127. package/dist/mcp/index.js.map +1 -1
  128. package/dist/mcp/version-selection.d.ts +55 -0
  129. package/dist/mcp/version-selection.d.ts.map +1 -0
  130. package/dist/mcp/version-selection.js +152 -0
  131. package/dist/mcp/version-selection.js.map +1 -0
  132. package/dist/utils/azure-cli.d.ts +56 -0
  133. package/dist/utils/azure-cli.d.ts.map +1 -0
  134. package/dist/utils/azure-cli.js +326 -0
  135. package/dist/utils/azure-cli.js.map +1 -0
  136. package/dist/utils/azure-diagnostics.d.ts +16 -0
  137. package/dist/utils/azure-diagnostics.d.ts.map +1 -0
  138. package/dist/utils/azure-diagnostics.js +68 -0
  139. package/dist/utils/azure-diagnostics.js.map +1 -0
  140. package/dist/utils/package-manager.js +2 -2
  141. package/dist/utils/package-manager.js.map +1 -1
  142. package/dist/utils/python-uv.d.ts +5 -7
  143. package/dist/utils/python-uv.d.ts.map +1 -1
  144. package/dist/utils/python-uv.js +50 -24
  145. package/dist/utils/python-uv.js.map +1 -1
  146. package/dist/utils/react-dev.d.ts +4 -0
  147. package/dist/utils/react-dev.d.ts.map +1 -0
  148. package/dist/utils/react-dev.js +35 -0
  149. package/dist/utils/react-dev.js.map +1 -0
  150. package/dist/utils/semver.d.ts +14 -0
  151. package/dist/utils/semver.d.ts.map +1 -0
  152. package/dist/utils/semver.js +61 -0
  153. package/dist/utils/semver.js.map +1 -0
  154. package/package.json +6 -3
  155. package/src/__tests__/__snapshots__/boundaries.test.ts.snap +154 -0
  156. package/src/__tests__/agent-instructions.test.ts +5 -0
  157. package/src/__tests__/agent-loop-phase34.test.ts +143 -8
  158. package/src/__tests__/auth.test.ts +9 -0
  159. package/src/__tests__/azure-cli.test.ts +202 -0
  160. package/src/__tests__/boundaries.test.ts +42 -0
  161. package/src/__tests__/csharp-schema.test.ts +261 -0
  162. package/src/__tests__/dev.test.ts +13 -6
  163. package/src/__tests__/fixtures/az wrapper.cmd +2 -0
  164. package/src/__tests__/fixtures/azure-cli.cjs +153 -0
  165. package/src/__tests__/fixtures/provision-runner.cjs +28 -0
  166. package/src/__tests__/generated-project-matrix.test.ts +789 -0
  167. package/src/__tests__/home-page.test.ts +50 -0
  168. package/src/__tests__/init.test.ts +116 -0
  169. package/src/__tests__/mcp-version.test.ts +262 -0
  170. package/src/__tests__/mcp.test.ts +120 -3
  171. package/src/__tests__/multi-auth.test.ts +115 -4
  172. package/src/__tests__/package-manager.test.ts +17 -2
  173. package/src/__tests__/plan-apply.test.ts +179 -0
  174. package/src/__tests__/provision-runtime.test.ts +722 -0
  175. package/src/__tests__/python-uv.test.ts +50 -14
  176. package/src/__tests__/python-venv.test.ts +48 -0
  177. package/src/__tests__/react-dev.test.ts +72 -0
  178. package/src/__tests__/react.test.ts +19 -0
  179. package/src/__tests__/schema-analysis.test.ts +329 -0
  180. package/src/cli/commands/add-auth.ts +36 -6
  181. package/src/cli/commands/configure-mcp.ts +54 -0
  182. package/src/cli/commands/dev.ts +40 -31
  183. package/src/cli/commands/init.ts +73 -138
  184. package/src/cli/commands/migrations.ts +22 -0
  185. package/src/cli/commands/provision.ts +294 -56
  186. package/src/cli/commands/scaffold.ts +105 -3
  187. package/src/cli/index.ts +40 -7
  188. package/src/core/operations/create-model.ts +51 -13
  189. package/src/core/operations/migration-generator.ts +14 -1
  190. package/src/core/operations/model-migration.ts +52 -0
  191. package/src/core/operations/provision-deployment.ts +183 -0
  192. package/src/core/operations/provision-operations.ts +662 -154
  193. package/src/core/operations/scaffold-apply.ts +2 -0
  194. package/src/core/operations/scaffold-machine.ts +1 -0
  195. package/src/core/operations/scaffold-plan.ts +5 -1
  196. package/src/core/project/agent-instructions.ts +4 -1
  197. package/src/core/project/agent-templates/AGENTS.md +89 -6
  198. package/src/core/project/agent-templates/CLAUDE.md +14 -1
  199. package/src/core/project/agent-templates/copilot-instructions.md +15 -1
  200. package/src/core/project/agent-templates/shared-models.instructions.md +11 -3
  201. package/src/core/project/boundaries.ts +62 -20
  202. package/src/core/project/capabilities.ts +49 -6
  203. package/src/core/project/home-page.ts +114 -0
  204. package/src/core/project/mcp-config.ts +84 -0
  205. package/src/core/project/react-project.ts +50 -28
  206. package/src/core/project/state.ts +70 -0
  207. package/src/core/project/workflows.ts +53 -7
  208. package/src/core/scaffold/auth-generator.ts +26 -27
  209. package/src/core/scaffold/model-parser.ts +413 -129
  210. package/src/core/scaffold/native-schema-generator.ts +319 -103
  211. package/src/core/scaffold/openapi-generator.ts +63 -5
  212. package/src/core/scaffold/ui-generator.ts +70 -8
  213. package/src/core/verify/index.ts +118 -6
  214. package/src/machine/contracts.ts +1 -0
  215. package/src/machine/errors.ts +4 -2
  216. package/src/machine/index.ts +65 -34
  217. package/src/mcp/index.ts +221 -31
  218. package/src/mcp/version-selection.ts +163 -0
  219. package/src/utils/azure-cli.ts +315 -0
  220. package/src/utils/azure-diagnostics.ts +75 -0
  221. package/src/utils/package-manager.ts +2 -2
  222. package/src/utils/python-uv.ts +53 -33
  223. package/src/utils/react-dev.ts +31 -0
  224. package/src/utils/semver.ts +59 -0
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ /**
3
+ * Generate only the Cosmos DB container migration for a model. Used after
4
+ * `scaffold --skip-infra`, when infrastructure changes become allowed.
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.addModelContainerMigration = addModelContainerMigration;
8
+ const scaffold_1 = require("../../cli/commands/scaffold");
9
+ const errors_1 = require("../../machine/errors");
10
+ const model_parser_1 = require("../scaffold/model-parser");
11
+ const artifacts_1 = require("../project/artifacts");
12
+ const file_session_1 = require("./file-session");
13
+ const migration_generator_1 = require("./migration-generator");
14
+ async function addModelContainerMigration(modelInput, options = {}) {
15
+ const projectRoot = options.projectRoot ?? process.cwd();
16
+ const modelInfo = await (0, model_parser_1.parseModelFile)((0, scaffold_1.resolveModelPath)(modelInput));
17
+ if (modelInfo.connectorConfig) {
18
+ throw new errors_1.MachineCommandError("connector-model-has-no-container", `${modelInfo.name} uses connector ${modelInfo.connectorConfig.connector}; connector models do not get a Cosmos DB container.`, undefined, "failed");
19
+ }
20
+ const session = new file_session_1.FileOperationSession(options.dryRun ? "collect" : "commit", projectRoot);
21
+ const migration = (0, migration_generator_1.generateModelContainerMigration)(modelInfo, session);
22
+ if (!options.dryRun) {
23
+ (0, artifacts_1.recordSessionOperations)(session.operations, {
24
+ schemaHash: modelInfo.semanticFingerprint,
25
+ sourceModel: modelInfo.name,
26
+ }, projectRoot);
27
+ }
28
+ return {
29
+ model: modelInfo.name,
30
+ dryRun: Boolean(options.dryRun),
31
+ migration: migration ? { version: migration.version, template: migration.template } : null,
32
+ ...(migration ? {} : { reason: "The container is already owned by the legacy migration baseline." }),
33
+ operations: session.operations.map((operation) => ({ path: operation.path, action: operation.action })),
34
+ };
35
+ }
36
+ //# sourceMappingURL=model-migration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-migration.js","sourceRoot":"","sources":["../../../src/core/operations/model-migration.ts"],"names":[],"mappings":";AAAA;;;GAGG;;AAiBH,gEA+BC;AA9CD,0DAA+D;AAC/D,iDAA2D;AAC3D,2DAA0D;AAC1D,oDAA+D;AAC/D,iDAAsD;AACtD,+DAAwE;AAUjE,KAAK,UAAU,0BAA0B,CAC9C,UAAkB,EAClB,UAAsD,EAAE;IAExD,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IACzD,MAAM,SAAS,GAAG,MAAM,IAAA,6BAAc,EAAC,IAAA,2BAAgB,EAAC,UAAU,CAAC,CAAC,CAAC;IACrE,IAAI,SAAS,CAAC,eAAe,EAAE,CAAC;QAC9B,MAAM,IAAI,4BAAmB,CAC3B,kCAAkC,EAClC,GAAG,SAAS,CAAC,IAAI,mBAAmB,SAAS,CAAC,eAAe,CAAC,SAAS,sDAAsD,EAC7H,SAAS,EACT,QAAQ,CACT,CAAC;IACJ,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,mCAAoB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;IAC7F,MAAM,SAAS,GAAG,IAAA,qDAA+B,EAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IACtE,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;QACpB,IAAA,mCAAuB,EAAC,OAAO,CAAC,UAAU,EAAE;YAC1C,UAAU,EAAE,SAAS,CAAC,mBAAmB;YACzC,WAAW,EAAE,SAAS,CAAC,IAAI;SAC5B,EAAE,WAAW,CAAC,CAAC;IAClB,CAAC;IAED,OAAO;QACL,KAAK,EAAE,SAAS,CAAC,IAAI;QACrB,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC;QAC/B,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,SAAS,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI;QAC1F,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,kEAAkE,EAAE,CAAC;QACpG,UAAU,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC;KACxG,CAAC;AACJ,CAAC"}
@@ -0,0 +1,52 @@
1
+ import { AzureCliDiagnostic } from "../../utils/azure-diagnostics";
2
+ export declare const DEPLOYMENT_QUERY = "{id:id,name:name,state:properties.provisioningState,correlationId:properties.correlationId,templateHash:properties.templateHash,timestamp:properties.timestamp,error:properties.error}";
3
+ export declare const DEFAULT_PROVISION_WAIT_SECONDS = 300;
4
+ export declare const MAX_PROVISION_WAIT_SECONDS = 3600;
5
+ /** Consecutive transient state-read failures tolerated while the human CLI waits for a terminal state. */
6
+ export declare const UNBOUNDED_WAIT_TRANSIENT_RETRIES = 24;
7
+ export interface DeploymentReference {
8
+ subscription: string;
9
+ resourceGroup: string;
10
+ name: string;
11
+ id?: string;
12
+ correlationId?: string;
13
+ templateHash?: string;
14
+ /** Do not mistake a previous deployment under the same name for this submission. */
15
+ previousCorrelationId?: string;
16
+ }
17
+ export interface AzureDeploymentError {
18
+ code: string;
19
+ message: string;
20
+ }
21
+ export interface DeploymentObservation {
22
+ state: "Accepted" | "Running" | "Succeeded" | "Failed" | "Canceled" | "unknown";
23
+ reference: DeploymentReference;
24
+ reason?: "not-found" | "query-failed" | "invalid-response" | "identity-changed" | "not-yet-observed" | "cancelled";
25
+ errors: AzureDeploymentError[];
26
+ diagnostic: AzureCliDiagnostic;
27
+ }
28
+ export declare function extractAzureErrors(value: unknown, secretValues?: readonly string[]): AzureDeploymentError[];
29
+ export declare function deploymentId(reference: DeploymentReference): string;
30
+ export declare function queryAzureDeployment(reference: DeploymentReference, options?: {
31
+ timeoutMs?: number;
32
+ signal?: AbortSignal;
33
+ secretValues?: readonly string[];
34
+ }): Promise<DeploymentObservation>;
35
+ export declare function waitForAzureDeployment(reference: DeploymentReference, options: {
36
+ deadline: number;
37
+ signal?: AbortSignal;
38
+ pollIntervalMs?: number;
39
+ onObservation?: (observation: DeploymentObservation) => void;
40
+ secretValues?: readonly string[];
41
+ queryTimeoutMs?: number;
42
+ /**
43
+ * Consecutive non-terminal "unknown" reads (query failure, not yet visible) to keep polling through.
44
+ * Required for an unbounded deadline so a missing deployment cannot be polled forever.
45
+ */
46
+ transientRetries?: number;
47
+ }): Promise<DeploymentObservation>;
48
+ export declare function queryDeploymentOperationErrors(reference: DeploymentReference, secretValues?: readonly string[], signal?: AbortSignal): Promise<{
49
+ errors: AzureDeploymentError[];
50
+ diagnostic: AzureCliDiagnostic;
51
+ }>;
52
+ //# sourceMappingURL=provision-deployment.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provision-deployment.d.ts","sourceRoot":"","sources":["../../../src/core/operations/provision-deployment.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAuC,MAAM,+BAA+B,CAAC;AAExG,eAAO,MAAM,gBAAgB,2LAA2L,CAAC;AACzN,eAAO,MAAM,8BAA8B,MAAM,CAAC;AAClD,eAAO,MAAM,0BAA0B,OAAQ,CAAC;AAChD,0GAA0G;AAC1G,eAAO,MAAM,gCAAgC,KAAK,CAAC;AAEnD,MAAM,WAAW,mBAAmB;IAClC,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,oFAAoF;IACpF,qBAAqB,CAAC,EAAE,MAAM,CAAC;CAChC;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,UAAU,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,UAAU,GAAG,SAAS,CAAC;IAChF,SAAS,EAAE,mBAAmB,CAAC;IAC/B,MAAM,CAAC,EAAE,WAAW,GAAG,cAAc,GAAG,kBAAkB,GAAG,kBAAkB,GAAG,kBAAkB,GAAG,WAAW,CAAC;IACnH,MAAM,EAAE,oBAAoB,EAAE,CAAC;IAC/B,UAAU,EAAE,kBAAkB,CAAC;CAChC;AAMD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,EAAE,YAAY,GAAE,SAAS,MAAM,EAAO,GAAG,oBAAoB,EAAE,CAkB/G;AAED,wBAAgB,YAAY,CAAC,SAAS,EAAE,mBAAmB,GAAG,MAAM,CAEnE;AAED,wBAAsB,oBAAoB,CACxC,SAAS,EAAE,mBAAmB,EAC9B,OAAO,GAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,WAAW,CAAC;IAAC,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CAAO,GAC3F,OAAO,CAAC,qBAAqB,CAAC,CA6ChC;AAED,wBAAsB,sBAAsB,CAC1C,SAAS,EAAE,mBAAmB,EAC9B,OAAO,EAAE;IACP,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,CAAC,WAAW,EAAE,qBAAqB,KAAK,IAAI,CAAC;IAC7D,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;OAGG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B,GACA,OAAO,CAAC,qBAAqB,CAAC,CAoChC;AAED,wBAAsB,8BAA8B,CAAC,SAAS,EAAE,mBAAmB,EAAE,YAAY,GAAE,SAAS,MAAM,EAAO,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC;IACxJ,MAAM,EAAE,oBAAoB,EAAE,CAAC;IAC/B,UAAU,EAAE,kBAAkB,CAAC;CAChC,CAAC,CAeD"}
@@ -0,0 +1,164 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.UNBOUNDED_WAIT_TRANSIENT_RETRIES = exports.MAX_PROVISION_WAIT_SECONDS = exports.DEFAULT_PROVISION_WAIT_SECONDS = exports.DEPLOYMENT_QUERY = void 0;
4
+ exports.extractAzureErrors = extractAzureErrors;
5
+ exports.deploymentId = deploymentId;
6
+ exports.queryAzureDeployment = queryAzureDeployment;
7
+ exports.waitForAzureDeployment = waitForAzureDeployment;
8
+ exports.queryDeploymentOperationErrors = queryDeploymentOperationErrors;
9
+ const azure_cli_1 = require("../../utils/azure-cli");
10
+ const azure_diagnostics_1 = require("../../utils/azure-diagnostics");
11
+ exports.DEPLOYMENT_QUERY = "{id:id,name:name,state:properties.provisioningState,correlationId:properties.correlationId,templateHash:properties.templateHash,timestamp:properties.timestamp,error:properties.error}";
12
+ exports.DEFAULT_PROVISION_WAIT_SECONDS = 300;
13
+ exports.MAX_PROVISION_WAIT_SECONDS = 3600;
14
+ /** Consecutive transient state-read failures tolerated while the human CLI waits for a terminal state. */
15
+ exports.UNBOUNDED_WAIT_TRANSIENT_RETRIES = 24;
16
+ function record(value) {
17
+ return value !== null && typeof value === "object" && !Array.isArray(value) ? value : null;
18
+ }
19
+ function extractAzureErrors(value, secretValues = []) {
20
+ const result = [];
21
+ const visit = (entry, depth) => {
22
+ if (depth > 8 || result.length >= 20)
23
+ return;
24
+ if (typeof entry === "string") {
25
+ try {
26
+ visit(JSON.parse(entry), depth + 1);
27
+ }
28
+ catch { /* Only structured Azure errors are projected. */ }
29
+ return;
30
+ }
31
+ const item = record(entry);
32
+ if (!item)
33
+ return;
34
+ if (typeof item.code === "string" && typeof item.message === "string") {
35
+ result.push({ code: (0, azure_diagnostics_1.redactAzureText)(item.code, secretValues).slice(0, 200), message: (0, azure_diagnostics_1.redactAzureText)(item.message, secretValues).slice(0, 2000) });
36
+ }
37
+ if (item.error)
38
+ visit(item.error, depth + 1);
39
+ if (Array.isArray(item.details))
40
+ item.details.forEach((detail) => visit(detail, depth + 1));
41
+ };
42
+ visit(value, 0);
43
+ return result;
44
+ }
45
+ function deploymentId(reference) {
46
+ return reference.id ?? `/subscriptions/${reference.subscription}/resourceGroups/${reference.resourceGroup}/providers/Microsoft.Resources/deployments/${reference.name}`;
47
+ }
48
+ async function queryAzureDeployment(reference, options = {}) {
49
+ const result = await (0, azure_cli_1.runAzCliAsync)([
50
+ "deployment", "group", "show", "--name", reference.name,
51
+ "--resource-group", reference.resourceGroup, "--subscription", reference.subscription,
52
+ "--query", exports.DEPLOYMENT_QUERY, "-o", "json",
53
+ ], { timeout: options.timeoutMs ?? 30000, signal: options.signal });
54
+ const diagnostic = (0, azure_diagnostics_1.azureCliDiagnostic)(result, "deployment-state", options.secretValues);
55
+ const unknown = (reason) => ({
56
+ state: "unknown", reference, reason, errors: [], diagnostic,
57
+ });
58
+ if (result.status !== 0 || result.failureKind) {
59
+ if (result.failureKind === "cancelled")
60
+ return unknown("cancelled");
61
+ return unknown(/DeploymentNotFound|ResourceGroupNotFound/i.test(`${result.stderr}\n${result.stdout}`) ? "not-found" : "query-failed");
62
+ }
63
+ if (result.stdoutTruncated)
64
+ return unknown("invalid-response");
65
+ let parsed;
66
+ try {
67
+ parsed = record(JSON.parse(result.stdout));
68
+ }
69
+ catch {
70
+ return unknown("invalid-response");
71
+ }
72
+ if (!parsed || typeof parsed.id !== "string" || typeof parsed.state !== "string" || typeof parsed.correlationId !== "string") {
73
+ return unknown("invalid-response");
74
+ }
75
+ if (parsed.id.toLowerCase() !== deploymentId(reference).toLowerCase()
76
+ || (reference.correlationId && parsed.correlationId !== reference.correlationId)
77
+ || (reference.templateHash && parsed.templateHash !== reference.templateHash)) {
78
+ return unknown("identity-changed");
79
+ }
80
+ if (reference.previousCorrelationId && parsed.correlationId === reference.previousCorrelationId) {
81
+ return unknown("not-yet-observed");
82
+ }
83
+ const states = {
84
+ accepted: "Accepted", running: "Running", creating: "Running", updating: "Running",
85
+ succeeded: "Succeeded", failed: "Failed", canceled: "Canceled", cancelled: "Canceled",
86
+ };
87
+ const state = states[parsed.state.toLowerCase()];
88
+ if (!state)
89
+ return unknown("invalid-response");
90
+ return {
91
+ state,
92
+ reference: {
93
+ ...reference,
94
+ id: parsed.id,
95
+ correlationId: parsed.correlationId,
96
+ ...(typeof parsed.templateHash === "string" ? { templateHash: parsed.templateHash } : {}),
97
+ },
98
+ errors: extractAzureErrors(parsed.error, options.secretValues),
99
+ diagnostic,
100
+ };
101
+ }
102
+ async function waitForAzureDeployment(reference, options) {
103
+ let observation;
104
+ let unknownReads = 0;
105
+ do {
106
+ const remaining = options.deadline - Date.now();
107
+ // Even when the wait budget is exhausted, one bounded read can identify an accepted submission.
108
+ observation = await queryAzureDeployment(reference, {
109
+ timeoutMs: remaining > 0 ? Math.min(options.queryTimeoutMs ?? 30000, remaining) : options.queryTimeoutMs ?? 30000,
110
+ signal: options.signal,
111
+ secretValues: options.secretValues,
112
+ });
113
+ if (observation.state !== "unknown")
114
+ reference = observation.reference;
115
+ options.onObservation?.(observation);
116
+ if (observation.state === "Succeeded" || observation.state === "Failed" || observation.state === "Canceled")
117
+ return observation;
118
+ if (observation.state === "unknown") {
119
+ unknownReads += 1;
120
+ const retryable = observation.reason === "not-yet-observed" || observation.reason === "not-found"
121
+ || (options.transientRetries !== undefined && (observation.reason === "query-failed" || observation.reason === "invalid-response"));
122
+ if (!retryable)
123
+ return observation;
124
+ if (!Number.isFinite(options.deadline) && unknownReads > (options.transientRetries ?? 0))
125
+ return observation;
126
+ }
127
+ else {
128
+ unknownReads = 0;
129
+ }
130
+ if (Date.now() >= options.deadline || options.signal?.aborted)
131
+ return observation;
132
+ await new Promise((resolve) => {
133
+ const done = () => {
134
+ clearTimeout(timer);
135
+ options.signal?.removeEventListener("abort", done);
136
+ resolve();
137
+ };
138
+ const timer = setTimeout(done, Math.min(options.pollIntervalMs ?? 5000, Math.max(options.deadline - Date.now(), 0)));
139
+ options.signal?.addEventListener("abort", done, { once: true });
140
+ if (options.signal?.aborted)
141
+ done();
142
+ });
143
+ } while (!options.signal?.aborted);
144
+ return observation;
145
+ }
146
+ async function queryDeploymentOperationErrors(reference, secretValues = [], signal) {
147
+ const result = await (0, azure_cli_1.runAzCliAsync)([
148
+ "deployment", "operation", "group", "list",
149
+ "--resource-group", reference.resourceGroup, "--name", reference.name, "--subscription", reference.subscription,
150
+ "--query", "[?properties.provisioningState=='Failed' || properties.provisioningState=='Canceled'].{error:properties.statusMessage}",
151
+ "-o", "json",
152
+ ], { timeout: 30000, signal });
153
+ const errors = [];
154
+ if (result.status === 0 && !result.failureKind && !result.stdoutTruncated) {
155
+ try {
156
+ const parsed = JSON.parse(result.stdout);
157
+ if (Array.isArray(parsed))
158
+ parsed.slice(0, 20).forEach((item) => errors.push(...extractAzureErrors(item, secretValues)));
159
+ }
160
+ catch { /* The separate diagnostic explicitly records an unreadable operations response. */ }
161
+ }
162
+ return { errors: errors.slice(0, 20), diagnostic: (0, azure_diagnostics_1.azureCliDiagnostic)(result, "deployment-operations", secretValues) };
163
+ }
164
+ //# sourceMappingURL=provision-deployment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provision-deployment.js","sourceRoot":"","sources":["../../../src/core/operations/provision-deployment.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,15 @@
1
1
  /**
2
2
  * Plan / Apply Provision — Azure プロビジョニングの事前計画と承認付き実行。
3
3
  *
4
- * - plan provision: ローカルの決定論的プリフライト(Bicep 解析・az CLI 有無)のみ。
5
- * ネットワークアクセスや az login を必要とする操作は行わない。
6
- * --what-if を明示した場合のみ az deployment group what-if を実行する。
4
+ * - plan provision: Bicep と Azure の現在の状態を確認する。リソースは変更しない。
7
5
  * - apply provision: 常に承認(--approve)必須。承認なしでは requires-human で停止する。
6
+ * - 対話的な `swallowkit provision` は同じ計画をメモリ上で作成・表示し、確認後に
7
+ * executeProvisionPlan で同じ安全確認を経て実行する(計画ファイルは保存しない)。
8
8
  */
9
+ import { AzureCliDiagnostic } from "../../utils/azure-diagnostics";
10
+ import type { MachineNextAction, MachineOperationStatus } from "../../machine/contracts";
9
11
  import { InfraInspection } from "../project/infra";
12
+ import { DeploymentObservation, DeploymentReference } from "./provision-deployment";
10
13
  import { MigrationManifest, MigrationState, ResolvedMigration } from "../project/migrations";
11
14
  export interface PlanProvisionOptions {
12
15
  resourceGroup: string;
@@ -18,8 +21,10 @@ export interface PlanProvisionOptions {
18
21
  adoptExisting?: boolean;
19
22
  baseline?: number;
20
23
  reconcile?: boolean;
24
+ /** Attach an existing, matching baseline deployment without submitting Bicep again. */
25
+ resumeDeployment?: string;
21
26
  }
22
- export type ProvisionMode = "offline" | "bootstrap" | "adoption-required" | "adopt" | "migrate" | "noop" | "reconcile";
27
+ export type ProvisionMode = "offline" | "bootstrap" | "adoption-required" | "adopt" | "migrate" | "noop" | "reconcile" | "recover";
23
28
  interface ProvisionCommand {
24
29
  file: "az";
25
30
  args: string[];
@@ -51,21 +56,72 @@ export interface ProvisionPlanData {
51
56
  requiresApproval: true;
52
57
  fingerprints: Record<string, string | null>;
53
58
  baselineSnapshotChecksum?: string;
59
+ recoveryDeployment?: DeploymentReference;
54
60
  }
55
- export declare function planProvisionOperation(options: PlanProvisionOptions): Promise<ProvisionPlanData>;
61
+ /**
62
+ * Builds the provision plan. Machine/MCP callers persist it for a later `apply provision --plan`;
63
+ * the interactive `swallowkit provision` command keeps it in memory and executes it after confirmation.
64
+ */
65
+ export declare function planProvisionOperation(options: PlanProvisionOptions, planOptions?: {
66
+ persist?: boolean;
67
+ }): Promise<ProvisionPlanData>;
56
68
  export interface ApplyProvisionOptions {
57
69
  planId: string;
58
70
  approve?: boolean;
71
+ waitSeconds?: number;
72
+ /** Human CLI: keep polling until Azure reaches a terminal state instead of using the bounded wait budget. */
73
+ waitUntilComplete?: boolean;
59
74
  }
60
75
  export interface ApplyProvisionResult {
76
+ status: MachineOperationStatus;
77
+ outcome: "succeeded" | "in-progress" | "unknown" | "partial" | "failed";
78
+ runId: string;
61
79
  planId: string;
62
80
  resourceGroup: string;
63
81
  location: string;
64
82
  swaLocation: string;
65
83
  executedCommands: string[];
66
- deploymentOutputs?: Record<string, unknown>;
67
84
  warnings: string[];
85
+ diagnostics: AzureCliDiagnostic[];
86
+ deployment?: DeploymentObservation;
87
+ nextActions: MachineNextAction[];
88
+ interrupted?: NodeJS.Signals;
89
+ }
90
+ export interface ProvisionRun {
91
+ schemaVersion: 1;
92
+ runId: string;
93
+ projectRoot: string;
94
+ plan: ProvisionPlanData;
95
+ cursor: number;
96
+ attemptedIndex?: number;
97
+ deployment?: DeploymentReference;
98
+ observation?: DeploymentObservation;
99
+ outcome: ApplyProvisionResult["outcome"];
100
+ executedCommands: string[];
101
+ warnings: string[];
102
+ diagnostics: AzureCliDiagnostic[];
103
+ updatedAt: string;
68
104
  }
105
+ export declare const INTERACTIVE_PROVISION_RETRY_HINT = "Run \"swallowkit provision\" again to review the current state.";
106
+ export declare function provisionNextActions(runId: string): MachineNextAction[];
107
+ export declare function inspectProvisionOperation(options: {
108
+ planId: string;
109
+ waitSeconds?: number;
110
+ }): Promise<ApplyProvisionResult>;
69
111
  export declare function applyProvisionOperation(options: ApplyProvisionOptions): Promise<ApplyProvisionResult>;
112
+ /**
113
+ * Runs an approved provision plan with every safety check: local files and Azure state must still
114
+ * match the reviewed preview, and each migration/tag step re-checks Azure state before it runs.
115
+ */
116
+ export declare function executeProvisionPlan(plan: ProvisionPlanData, options?: {
117
+ approve?: boolean;
118
+ retryHint?: string;
119
+ projectRoot?: string;
120
+ waitSeconds?: number;
121
+ /** Human CLI only: no overall deadline; each az call stays bounded and the checkpoint stays resumable. */
122
+ waitUntilComplete?: boolean;
123
+ signal?: AbortSignal;
124
+ pollIntervalMs?: number;
125
+ }): Promise<ApplyProvisionResult>;
70
126
  export {};
71
127
  //# sourceMappingURL=provision-operations.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"provision-operations.d.ts","sourceRoot":"","sources":["../../../src/core/operations/provision-operations.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAQH,OAAO,EAAgB,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAGjE,OAAO,EAEL,iBAAiB,EACjB,cAAc,EACd,iBAAiB,EAYlB,MAAM,uBAAuB,CAAC;AAM/B,MAAM,WAAW,oBAAoB;IACnC,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,8DAA8D;IAC9D,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,WAAW,GAAG,mBAAmB,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,GAAG,WAAW,CAAC;AAEvH,UAAU,gBAAgB;IACxB,IAAI,EAAE,IAAI,CAAC;IACX,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,IAAI,EAAE,gBAAgB,GAAG,YAAY,GAAG,WAAW,GAAG,KAAK,CAAC;IAC5D,aAAa,CAAC,EAAE,cAAc,GAAG,IAAI,CAAC;CACvC;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,WAAW,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,cAAc,EAAE,OAAO,CAAC;IACxB,IAAI,EAAE,aAAa,CAAC;IACpB,KAAK,EAAE,eAAe,CAAC;IACvB,+BAA+B;IAC/B,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,YAAY,EAAE,gBAAgB,EAAE,CAAC;IACjC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,cAAc,GAAG,IAAI,CAAC;IACpC,iBAAiB,EAAE,iBAAiB,EAAE,CAAC;IACvC,kBAAkB,CAAC,EAAE,iBAAiB,CAAC;IACvC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,4BAA4B;IAC5B,gBAAgB,EAAE,IAAI,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC;IAC5C,wBAAwB,CAAC,EAAE,MAAM,CAAC;CACnC;AAmJD,wBAAsB,sBAAsB,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAuOtG;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC5C,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AA4CD,wBAAsB,uBAAuB,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAwH3G"}
1
+ {"version":3,"file":"provision-operations.d.ts","sourceRoot":"","sources":["../../../src/core/operations/provision-operations.ts"],"names":[],"mappings":"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"}