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.
- package/README.ja.md +14 -0
- package/README.md +14 -0
- package/dist/cli/commands/add-auth.js +37 -6
- package/dist/cli/commands/add-auth.js.map +1 -1
- package/dist/cli/commands/configure-mcp.d.ts +12 -0
- package/dist/cli/commands/configure-mcp.d.ts.map +1 -0
- package/dist/cli/commands/configure-mcp.js +42 -0
- package/dist/cli/commands/configure-mcp.js.map +1 -0
- package/dist/cli/commands/dev.d.ts +2 -2
- package/dist/cli/commands/dev.d.ts.map +1 -1
- package/dist/cli/commands/dev.js +39 -27
- package/dist/cli/commands/dev.js.map +1 -1
- package/dist/cli/commands/init.d.ts +8 -2
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +67 -132
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/migrations.d.ts.map +1 -1
- package/dist/cli/commands/migrations.js +25 -0
- package/dist/cli/commands/migrations.js.map +1 -1
- package/dist/cli/commands/provision.d.ts +5 -0
- package/dist/cli/commands/provision.d.ts.map +1 -1
- package/dist/cli/commands/provision.js +278 -55
- package/dist/cli/commands/provision.js.map +1 -1
- package/dist/cli/commands/scaffold.d.ts +4 -0
- package/dist/cli/commands/scaffold.d.ts.map +1 -1
- package/dist/cli/commands/scaffold.js +85 -3
- package/dist/cli/commands/scaffold.js.map +1 -1
- package/dist/cli/index.d.ts +2 -0
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +43 -5
- package/dist/cli/index.js.map +1 -1
- package/dist/core/operations/create-model.d.ts +2 -0
- package/dist/core/operations/create-model.d.ts.map +1 -1
- package/dist/core/operations/create-model.js +60 -8
- package/dist/core/operations/create-model.js.map +1 -1
- package/dist/core/operations/migration-generator.d.ts.map +1 -1
- package/dist/core/operations/migration-generator.js +12 -1
- package/dist/core/operations/migration-generator.js.map +1 -1
- package/dist/core/operations/model-migration.d.ts +22 -0
- package/dist/core/operations/model-migration.d.ts.map +1 -0
- package/dist/core/operations/model-migration.js +36 -0
- package/dist/core/operations/model-migration.js.map +1 -0
- package/dist/core/operations/provision-deployment.d.ts +52 -0
- package/dist/core/operations/provision-deployment.d.ts.map +1 -0
- package/dist/core/operations/provision-deployment.js +164 -0
- package/dist/core/operations/provision-deployment.js.map +1 -0
- package/dist/core/operations/provision-operations.d.ts +62 -6
- package/dist/core/operations/provision-operations.d.ts.map +1 -1
- package/dist/core/operations/provision-operations.js +653 -115
- package/dist/core/operations/provision-operations.js.map +1 -1
- package/dist/core/operations/scaffold-apply.d.ts +1 -0
- package/dist/core/operations/scaffold-apply.d.ts.map +1 -1
- package/dist/core/operations/scaffold-apply.js +1 -0
- package/dist/core/operations/scaffold-apply.js.map +1 -1
- package/dist/core/operations/scaffold-machine.d.ts +1 -0
- package/dist/core/operations/scaffold-machine.d.ts.map +1 -1
- package/dist/core/operations/scaffold-machine.js.map +1 -1
- package/dist/core/operations/scaffold-plan.d.ts +2 -0
- package/dist/core/operations/scaffold-plan.d.ts.map +1 -1
- package/dist/core/operations/scaffold-plan.js +3 -1
- package/dist/core/operations/scaffold-plan.js.map +1 -1
- package/dist/core/project/agent-instructions.d.ts.map +1 -1
- package/dist/core/project/agent-instructions.js +4 -1
- package/dist/core/project/agent-instructions.js.map +1 -1
- package/dist/core/project/boundaries.d.ts +5 -2
- package/dist/core/project/boundaries.d.ts.map +1 -1
- package/dist/core/project/boundaries.js +51 -20
- package/dist/core/project/boundaries.js.map +1 -1
- package/dist/core/project/capabilities.d.ts +10 -0
- package/dist/core/project/capabilities.d.ts.map +1 -1
- package/dist/core/project/capabilities.js +38 -6
- package/dist/core/project/capabilities.js.map +1 -1
- package/dist/core/project/home-page.d.ts +4 -0
- package/dist/core/project/home-page.d.ts.map +1 -0
- package/dist/core/project/home-page.js +113 -0
- package/dist/core/project/home-page.js.map +1 -0
- package/dist/core/project/mcp-config.d.ts +26 -0
- package/dist/core/project/mcp-config.d.ts.map +1 -0
- package/dist/core/project/mcp-config.js +117 -0
- package/dist/core/project/mcp-config.js.map +1 -0
- package/dist/core/project/react-project.d.ts +1 -1
- package/dist/core/project/react-project.d.ts.map +1 -1
- package/dist/core/project/react-project.js +46 -25
- package/dist/core/project/react-project.js.map +1 -1
- package/dist/core/project/state.d.ts +7 -0
- package/dist/core/project/state.d.ts.map +1 -1
- package/dist/core/project/state.js +86 -0
- package/dist/core/project/state.js.map +1 -1
- package/dist/core/project/workflows.d.ts.map +1 -1
- package/dist/core/project/workflows.js +53 -7
- 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 +26 -27
- package/dist/core/scaffold/auth-generator.js.map +1 -1
- package/dist/core/scaffold/model-parser.d.ts +23 -0
- package/dist/core/scaffold/model-parser.d.ts.map +1 -1
- package/dist/core/scaffold/model-parser.js +407 -137
- package/dist/core/scaffold/model-parser.js.map +1 -1
- package/dist/core/scaffold/native-schema-generator.d.ts +13 -0
- package/dist/core/scaffold/native-schema-generator.d.ts.map +1 -1
- package/dist/core/scaffold/native-schema-generator.js +294 -91
- package/dist/core/scaffold/native-schema-generator.js.map +1 -1
- package/dist/core/scaffold/openapi-generator.d.ts +5 -0
- package/dist/core/scaffold/openapi-generator.d.ts.map +1 -1
- package/dist/core/scaffold/openapi-generator.js +53 -3
- package/dist/core/scaffold/openapi-generator.js.map +1 -1
- package/dist/core/scaffold/ui-generator.d.ts +0 -3
- package/dist/core/scaffold/ui-generator.d.ts.map +1 -1
- package/dist/core/scaffold/ui-generator.js +68 -7
- package/dist/core/scaffold/ui-generator.js.map +1 -1
- package/dist/core/verify/index.d.ts +4 -3
- package/dist/core/verify/index.d.ts.map +1 -1
- package/dist/core/verify/index.js +122 -5
- package/dist/core/verify/index.js.map +1 -1
- package/dist/machine/contracts.d.ts +1 -0
- package/dist/machine/contracts.d.ts.map +1 -1
- package/dist/machine/errors.d.ts +3 -2
- package/dist/machine/errors.d.ts.map +1 -1
- package/dist/machine/errors.js +2 -1
- package/dist/machine/errors.js.map +1 -1
- package/dist/machine/index.d.ts.map +1 -1
- package/dist/machine/index.js +59 -28
- package/dist/machine/index.js.map +1 -1
- package/dist/mcp/index.d.ts +6 -4
- package/dist/mcp/index.d.ts.map +1 -1
- package/dist/mcp/index.js +210 -25
- package/dist/mcp/index.js.map +1 -1
- package/dist/mcp/version-selection.d.ts +55 -0
- package/dist/mcp/version-selection.d.ts.map +1 -0
- package/dist/mcp/version-selection.js +152 -0
- package/dist/mcp/version-selection.js.map +1 -0
- package/dist/utils/azure-cli.d.ts +56 -0
- package/dist/utils/azure-cli.d.ts.map +1 -0
- package/dist/utils/azure-cli.js +326 -0
- package/dist/utils/azure-cli.js.map +1 -0
- package/dist/utils/azure-diagnostics.d.ts +16 -0
- package/dist/utils/azure-diagnostics.d.ts.map +1 -0
- package/dist/utils/azure-diagnostics.js +68 -0
- package/dist/utils/azure-diagnostics.js.map +1 -0
- package/dist/utils/package-manager.js +2 -2
- package/dist/utils/package-manager.js.map +1 -1
- package/dist/utils/python-uv.d.ts +5 -7
- package/dist/utils/python-uv.d.ts.map +1 -1
- package/dist/utils/python-uv.js +50 -24
- package/dist/utils/python-uv.js.map +1 -1
- package/dist/utils/react-dev.d.ts +4 -0
- package/dist/utils/react-dev.d.ts.map +1 -0
- package/dist/utils/react-dev.js +35 -0
- package/dist/utils/react-dev.js.map +1 -0
- package/dist/utils/semver.d.ts +14 -0
- package/dist/utils/semver.d.ts.map +1 -0
- package/dist/utils/semver.js +61 -0
- package/dist/utils/semver.js.map +1 -0
- package/package.json +6 -3
- package/src/__tests__/__snapshots__/boundaries.test.ts.snap +154 -0
- package/src/__tests__/agent-instructions.test.ts +5 -0
- package/src/__tests__/agent-loop-phase34.test.ts +143 -8
- package/src/__tests__/auth.test.ts +9 -0
- package/src/__tests__/azure-cli.test.ts +202 -0
- package/src/__tests__/boundaries.test.ts +42 -0
- package/src/__tests__/csharp-schema.test.ts +261 -0
- package/src/__tests__/dev.test.ts +13 -6
- package/src/__tests__/fixtures/az wrapper.cmd +2 -0
- package/src/__tests__/fixtures/azure-cli.cjs +153 -0
- package/src/__tests__/fixtures/provision-runner.cjs +28 -0
- package/src/__tests__/generated-project-matrix.test.ts +789 -0
- package/src/__tests__/home-page.test.ts +50 -0
- package/src/__tests__/init.test.ts +116 -0
- package/src/__tests__/mcp-version.test.ts +262 -0
- package/src/__tests__/mcp.test.ts +120 -3
- package/src/__tests__/multi-auth.test.ts +115 -4
- package/src/__tests__/package-manager.test.ts +17 -2
- package/src/__tests__/plan-apply.test.ts +179 -0
- package/src/__tests__/provision-runtime.test.ts +722 -0
- package/src/__tests__/python-uv.test.ts +50 -14
- package/src/__tests__/python-venv.test.ts +48 -0
- package/src/__tests__/react-dev.test.ts +72 -0
- package/src/__tests__/react.test.ts +19 -0
- package/src/__tests__/schema-analysis.test.ts +329 -0
- package/src/cli/commands/add-auth.ts +36 -6
- package/src/cli/commands/configure-mcp.ts +54 -0
- package/src/cli/commands/dev.ts +40 -31
- package/src/cli/commands/init.ts +73 -138
- package/src/cli/commands/migrations.ts +22 -0
- package/src/cli/commands/provision.ts +294 -56
- package/src/cli/commands/scaffold.ts +105 -3
- package/src/cli/index.ts +40 -7
- package/src/core/operations/create-model.ts +51 -13
- package/src/core/operations/migration-generator.ts +14 -1
- package/src/core/operations/model-migration.ts +52 -0
- package/src/core/operations/provision-deployment.ts +183 -0
- package/src/core/operations/provision-operations.ts +662 -154
- package/src/core/operations/scaffold-apply.ts +2 -0
- package/src/core/operations/scaffold-machine.ts +1 -0
- package/src/core/operations/scaffold-plan.ts +5 -1
- package/src/core/project/agent-instructions.ts +4 -1
- package/src/core/project/agent-templates/AGENTS.md +89 -6
- package/src/core/project/agent-templates/CLAUDE.md +14 -1
- package/src/core/project/agent-templates/copilot-instructions.md +15 -1
- package/src/core/project/agent-templates/shared-models.instructions.md +11 -3
- package/src/core/project/boundaries.ts +62 -20
- package/src/core/project/capabilities.ts +49 -6
- package/src/core/project/home-page.ts +114 -0
- package/src/core/project/mcp-config.ts +84 -0
- package/src/core/project/react-project.ts +50 -28
- package/src/core/project/state.ts +70 -0
- package/src/core/project/workflows.ts +53 -7
- package/src/core/scaffold/auth-generator.ts +26 -27
- package/src/core/scaffold/model-parser.ts +413 -129
- package/src/core/scaffold/native-schema-generator.ts +319 -103
- package/src/core/scaffold/openapi-generator.ts +63 -5
- package/src/core/scaffold/ui-generator.ts +70 -8
- package/src/core/verify/index.ts +118 -6
- package/src/machine/contracts.ts +1 -0
- package/src/machine/errors.ts +4 -2
- package/src/machine/index.ts +65 -34
- package/src/mcp/index.ts +221 -31
- package/src/mcp/version-selection.ts +163 -0
- package/src/utils/azure-cli.ts +315 -0
- package/src/utils/azure-diagnostics.ts +75 -0
- package/src/utils/package-manager.ts +2 -2
- package/src/utils/python-uv.ts +53 -33
- package/src/utils/react-dev.ts +31 -0
- package/src/utils/semver.ts +59 -0
|
@@ -47,6 +47,18 @@ function inspectCapabilities() {
|
|
|
47
47
|
required: false,
|
|
48
48
|
description: "Role-based access control metadata applied to the generated CRUD Functions. `roles` guards all operations; `read`/`write` guard per-operation; `policy` references a named authorization policy from swallowkit.config auth.authorization.policies.",
|
|
49
49
|
format: "export const authPolicy = { roles: ['admin'] };\n// or per-operation:\nexport const authPolicy = { read: ['user'], write: ['admin'] };\n// or a named policy:\nexport const authPolicy = { policy: 'adminOnly' };",
|
|
50
|
+
notes: [
|
|
51
|
+
"An explicit authPolicy without configured authentication blocks plan/apply/generate scaffold with auth-policy-without-auth before any artifacts are written. Run plan auth, apply auth, then re-plan scaffold. An empty {} declaration keeps the existing behavior: no explicit policy.",
|
|
52
|
+
"With named auth.schemes, define auth.authorization.policies selecting schemes and roles, then reference them via policy or read/write names. A role-only declaration cannot select a named scheme and blocks with auth-policy-requires-named-policy; it is supported by legacy single-provider authentication.",
|
|
53
|
+
"Conversely, single-provider authentication (auth.provider) supports role lists only. Referencing a named policy (authPolicy.policy, read/write names, or a named auth.authorization.defaultPolicy) blocks with auth-named-policy-requires-named-scheme; add a named scheme first.",
|
|
54
|
+
],
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
name: "references",
|
|
58
|
+
required: false,
|
|
59
|
+
description: "Explicit foreign keys used by generated UI lookups. Without it, a string field named <model>Id is treated as a foreign key only when shared/models contains that model (userId -> User only if user.ts exists). Map a field to false to disable inference. References to missing models are ignored with a reference-model-not-found warning.",
|
|
60
|
+
format: "export const references = { authorId: 'User', legacyId: false };",
|
|
61
|
+
notes: ["Only single string id fields can reference a model.", "No lookup UI, fetch, or OpenAPI reference is generated for fields that do not reference an existing model."],
|
|
50
62
|
},
|
|
51
63
|
{
|
|
52
64
|
name: "connectorConfig",
|
|
@@ -109,14 +121,23 @@ function inspectCapabilities() {
|
|
|
109
121
|
],
|
|
110
122
|
notGuaranteed: [
|
|
111
123
|
"Owner scoping: generated CRUD does NOT restrict rows to the authenticated principal. Any authenticated caller passing the policy can read/write any document.",
|
|
124
|
+
"Without authentication, plan scaffold reports user-scoped-data-without-auth when the partition key or an owner-like field (userId, learnerId, ownerId, ...) suggests per-user data.",
|
|
112
125
|
],
|
|
113
126
|
guidance: [
|
|
114
|
-
"For multi-user data where users may only touch their own records, add ai-authored custom endpoints that derive the scoping key (e.g. learnerId) from the verified principal — never from the request body — and restrict generated write endpoints to admin roles or disable them.",
|
|
127
|
+
"Configure authentication via plan/apply auth before declaring authPolicy. For multi-user data where users may only touch their own records, add ai-authored custom endpoints that derive the scoping key (e.g. learnerId) from the verified principal — never from the request body — and restrict generated write endpoints to admin roles or disable them.",
|
|
115
128
|
],
|
|
116
129
|
},
|
|
117
130
|
sharedModels: {
|
|
118
131
|
idFieldRule: "id: z.string() (required). createdAt/updatedAt: z.string().optional(). The backend owns their values.",
|
|
119
|
-
|
|
132
|
+
nativeSchemaMapping: [
|
|
133
|
+
"C#/Python schema assets derive types from Zod, never from field names: z.string() -> string/str (including createdAt/updatedAt).",
|
|
134
|
+
"Date types only when declared: z.iso.datetime() -> DateTime/datetime, z.iso.date() -> DateOnly/date, z.date() -> DateTime/datetime.",
|
|
135
|
+
"z.number() -> double / float|int; z.number().int() or z.int() -> long / int.",
|
|
136
|
+
"Inline z.object({...}) fields become named classes <Model><Field> (e.g. ProbeItemNested); imported model schemas keep their own class.",
|
|
137
|
+
"min/max/length/nonempty/regex/int/gt/gte/lt/lte/positive/nonnegative and array min/max are enforced by C# IValidatableObject.Validate and Python Field bounds/validators. Regexes use search semantics like Zod.",
|
|
138
|
+
"String formats (email/uuid/url), refinements, and transforms are not re-implemented natively; the BFF Zod schemas remain the authoritative validation.",
|
|
139
|
+
],
|
|
140
|
+
buildNote: "create-model and plan/apply scaffold append missing model exports to shared/index.ts, including manually authored models. Manual exports are allowed (no markers); existing content is preserved. verify typecheck resolves the shared package from its built dist/. SwallowKit rebuilds shared automatically during verify; when typechecking manually, build shared first.",
|
|
120
141
|
},
|
|
121
142
|
seeding: {
|
|
122
143
|
createTemplates: "swallowkit create-dev-seeds <environment> — writes dev-seeds/<environment>/<model>.json templates.",
|
|
@@ -124,18 +145,29 @@ function inspectCapabilities() {
|
|
|
124
145
|
notes: ["Editing dev-seeds/*.json alone does nothing; seeds are only applied via dev --seed-env."],
|
|
125
146
|
},
|
|
126
147
|
machineCommands: [
|
|
127
|
-
"inspect project | entities | routes | artifacts | boundaries | infra | drift | capabilities",
|
|
148
|
+
"inspect project | entities | routes | artifacts | boundaries | infra | drift | capabilities; inspect provision --plan <runId> [--wait-seconds <0-3600>]",
|
|
128
149
|
"validate project",
|
|
129
150
|
"generate model <names...> | generate scaffold <model>",
|
|
130
|
-
"plan scaffold <models...> | plan auth --provider <p> [--scheme <name>] [--allowed-providers <csv>] | plan provision -g <rg> --location <loc> --swa-location <loc> [--adopt-existing --baseline 0 --what-if] [--reconcile --what-if]",
|
|
131
|
-
"apply scaffold [models...] --plan <id> [--approve] | apply auth --plan <id> [--approve] | apply provision --plan <id> --approve",
|
|
151
|
+
"plan scaffold <models...> [--api-only] [--skip-infra] | plan auth --provider <p> [--scheme <name>] [--allowed-providers <csv>] | plan provision -g <rg> --location <loc> --swa-location <loc> [--adopt-existing --baseline 0 --what-if] [--reconcile --what-if] [--resume-deployment <name>]",
|
|
152
|
+
"apply scaffold [models...] --plan <id> [--approve] [--skip-infra] | apply auth --plan <id> [--approve] | apply provision --plan <id> --approve [--wait-seconds <0-3600>] (also resumes the same execution checkpoint)",
|
|
132
153
|
"verify project [--checks <ids>] [--compact]",
|
|
133
154
|
"explain failure [--check <id>]",
|
|
155
|
+
"(regular CLI) migrations add-model <model> [--dry-run] — generate only the container migration after scaffold --skip-infra",
|
|
156
|
+
"(regular CLI) configure-mcp [--version auto|latest|<semver>] — re-select the MCP launcher version in .mcp.json",
|
|
134
157
|
],
|
|
158
|
+
provisioning: {
|
|
159
|
+
execution: "Submit Bicep once with az deployment group create --no-wait, then bounded state polling (default 300 seconds, configurable 0-3600) for machine/MCP; the human `swallowkit provision` command waits until Azure reaches a terminal state. Azure CLI invocations are bounded separately. Warning-only stderr with exit 0 is not a failure; output capture limits do not terminate az.",
|
|
160
|
+
completion: "status complete/outcome succeeded requires Azure Succeeded plus verified migration tags and local ledger completion. Running/Accepted -> in-progress; unreadable/not-found state -> blocked/outcome unknown; bookkeeping interruption after Azure Succeeded -> blocked/outcome partial; Failed/Canceled -> failed with Azure causes.",
|
|
161
|
+
tracking: "Approved runs persist before Azure writes under .swallowkit/state/provision/. runId equals the original planId and preserves the subscription, RG, deployment ID/correlation, fingerprints and migration state. inspect provision is read-only; apply provision --plan resumes without re-submitting attempted deployments. Ctrl+C/termination may leave Azure running; never cancel/delete without explicit consent.",
|
|
162
|
+
recovery: "For an older untracked baseline, plan provision --resume-deployment <name> compares the existing ARM template and non-secure parameters to the local Bicep/parameters. It observes that deployment and only tags/records it after Succeeded. Mismatches, unreadable evidence, secure parameters or non-baseline migrations block; do not use reconcile just to repair bookkeeping.",
|
|
163
|
+
diagnostics: "Machine/MCP results include bounded/redacted stdout/stderr, omitted-output flags, exit code, signal, failure kind, elapsed time and deployment identity, but no deployment outputs. Normal CLI shows named resource information and CI/CD setup guidance after success. Never print --debug output, keys, tokens or connection strings.",
|
|
164
|
+
approval: "Machine/MCP initial apply and every resume require explicit human approval. A human invoking normal provision or provision --resume explicitly requests execution without another confirmation prompt. Agents must not switch to normal CLI to bypass approval. A passing local command or an ok envelope is not proof of completed Azure provisioning; inspect status, outcome and nextActions.",
|
|
165
|
+
},
|
|
135
166
|
verifyChecks: {
|
|
136
|
-
defaultChecks: ["structure", "drift", "typecheck"],
|
|
167
|
+
defaultChecks: ["structure", "drift", "typecheck", "backend-build"],
|
|
137
168
|
optInChecks: ["build", "lint", "test"],
|
|
138
169
|
customChecks: "swallowkit.config verify.checks: [{ id, command, title?, timeoutMs? }]",
|
|
170
|
+
backendBuild: "Runs dotnet build in functions/ (C#), the project tsc --noEmit (TypeScript), or Python 3 compileall (syntax only, using functions/.venv before PATH). Missing toolchains are skip with a reason, not proof of validation. Root build scripts do not replace backend-build; use --checks \"structure,drift,typecheck,backend-build,build\" for both.",
|
|
139
171
|
},
|
|
140
172
|
};
|
|
141
173
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"capabilities.js","sourceRoot":"","sources":["../../../src/core/project/capabilities.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;
|
|
1
|
+
{"version":3,"file":"capabilities.js","sourceRoot":"","sources":["../../../src/core/project/capabilities.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"home-page.d.ts","sourceRoot":"","sources":["../../../src/core/project/home-page.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,cAAc,EAAe,MAAM,6BAA6B,CAAC;AAG1E,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,iBAAiB,EAC3B,EAAE,EAAE,cAAc,GACjB,MAAM,CA0GR"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.buildHomePage = buildHomePage;
|
|
4
|
+
const package_manager_1 = require("../../utils/package-manager");
|
|
5
|
+
const react_ui_generator_1 = require("../scaffold/react-ui-generator");
|
|
6
|
+
function buildHomePage(frontend, pm) {
|
|
7
|
+
const framework = frontend === "react" ? "React" : "Next.js";
|
|
8
|
+
const page = `import { useState } from 'react';
|
|
9
|
+
import Link from 'next/link';
|
|
10
|
+
import { scaffoldConfig } from '@/lib/scaffold-config';
|
|
11
|
+
|
|
12
|
+
export default function Home() {
|
|
13
|
+
const [greetingStatus, setGreetingStatus] = useState<'idle' | 'loading' | 'success' | 'error'>('idle');
|
|
14
|
+
const [message, setMessage] = useState('');
|
|
15
|
+
|
|
16
|
+
const testConnection = async () => {
|
|
17
|
+
setGreetingStatus('loading');
|
|
18
|
+
try {
|
|
19
|
+
const response = await fetch('/api/greet?name=SwallowKit');
|
|
20
|
+
const data = await response.json();
|
|
21
|
+
if (!response.ok) {
|
|
22
|
+
throw new Error(data.error || \`Server error: \${response.status}\`);
|
|
23
|
+
}
|
|
24
|
+
setMessage(data.message);
|
|
25
|
+
setGreetingStatus('success');
|
|
26
|
+
} catch (error) {
|
|
27
|
+
setMessage(error instanceof Error ? error.message : 'Failed to connect to Azure Functions');
|
|
28
|
+
setGreetingStatus('error');
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
return (
|
|
33
|
+
<div className="min-h-screen bg-gradient-to-br from-blue-50 to-indigo-50 dark:from-gray-900 dark:to-gray-800">
|
|
34
|
+
<div className="container mx-auto px-4 py-12">
|
|
35
|
+
<header className="text-center mb-16">
|
|
36
|
+
<h1 className="text-5xl font-bold text-gray-800 dark:text-white mb-4">
|
|
37
|
+
Welcome to SwallowKit
|
|
38
|
+
</h1>
|
|
39
|
+
<p className="text-xl text-gray-600 dark:text-gray-400">
|
|
40
|
+
${framework} on Azure Static Web Apps + Functions + Cosmos DB — Zod schema sharing
|
|
41
|
+
</p>
|
|
42
|
+
</header>
|
|
43
|
+
|
|
44
|
+
<section className="max-w-2xl mx-auto mb-12">
|
|
45
|
+
<div className="bg-white dark:bg-gray-800 rounded-xl p-8 border border-gray-200 dark:border-gray-700">
|
|
46
|
+
<h2 className="text-2xl font-semibold mb-4 text-gray-900 dark:text-gray-100">
|
|
47
|
+
Test BFF → Functions Connection
|
|
48
|
+
</h2>
|
|
49
|
+
<button
|
|
50
|
+
onClick={testConnection}
|
|
51
|
+
disabled={greetingStatus === 'loading'}
|
|
52
|
+
className="px-6 py-3 bg-blue-600 hover:bg-blue-700 disabled:bg-gray-400 text-white rounded-lg font-medium transition-colors"
|
|
53
|
+
>
|
|
54
|
+
{greetingStatus === 'loading' ? 'Testing...' : 'Test Connection'}
|
|
55
|
+
</button>
|
|
56
|
+
{greetingStatus === 'success' && (
|
|
57
|
+
<div role="status" className="mt-4 p-4 bg-green-50 dark:bg-green-900/20 border border-green-200 dark:border-green-800 rounded-lg">
|
|
58
|
+
<p className="text-green-800 dark:text-green-200 font-medium">✅ Connection successful!</p>
|
|
59
|
+
<p className="text-green-700 dark:text-green-300 text-sm mt-1">{message}</p>
|
|
60
|
+
</div>
|
|
61
|
+
)}
|
|
62
|
+
{greetingStatus === 'error' && (
|
|
63
|
+
<div role="alert" className="mt-4 p-4 bg-red-50 dark:bg-red-900/20 border border-red-200 dark:border-red-800 rounded-lg">
|
|
64
|
+
<p className="text-red-800 dark:text-red-200 font-medium">❌ Connection failed</p>
|
|
65
|
+
<p className="text-red-700 dark:text-red-300 text-sm mt-1">{message}</p>
|
|
66
|
+
</div>
|
|
67
|
+
)}
|
|
68
|
+
</div>
|
|
69
|
+
</section>
|
|
70
|
+
|
|
71
|
+
{scaffoldConfig.models.length > 0 ? (
|
|
72
|
+
<section className="max-w-6xl mx-auto">
|
|
73
|
+
<h2 className="text-3xl font-bold mb-8 text-gray-900 dark:text-gray-100">Your Models</h2>
|
|
74
|
+
<div className="grid gap-6 grid-cols-1 md:grid-cols-2 lg:grid-cols-3">
|
|
75
|
+
{scaffoldConfig.models.map((model) => (
|
|
76
|
+
<Link
|
|
77
|
+
key={model.name}
|
|
78
|
+
href={model.path}
|
|
79
|
+
className="block p-8 bg-white dark:bg-gray-800 border border-gray-200 dark:border-gray-700 rounded-xl hover:shadow-lg hover:border-blue-400 dark:hover:border-blue-600 transition-all"
|
|
80
|
+
>
|
|
81
|
+
<h3 className="text-2xl font-semibold mb-2 text-gray-900 dark:text-gray-100">{model.label}</h3>
|
|
82
|
+
<p className="text-gray-600 dark:text-gray-400">Manage {model.label.toLowerCase()}</p>
|
|
83
|
+
</Link>
|
|
84
|
+
))}
|
|
85
|
+
</div>
|
|
86
|
+
</section>
|
|
87
|
+
) : (
|
|
88
|
+
<section className="max-w-2xl mx-auto text-center">
|
|
89
|
+
<div className="bg-white dark:bg-gray-800 rounded-xl p-12 border border-gray-200 dark:border-gray-700">
|
|
90
|
+
<h2 className="text-2xl font-semibold mb-4 text-gray-900 dark:text-gray-100">Get Started</h2>
|
|
91
|
+
<p className="text-gray-600 dark:text-gray-400 mb-6">
|
|
92
|
+
Create your first model with Zod and generate CRUD operations automatically.
|
|
93
|
+
</p>
|
|
94
|
+
<code className="block bg-gray-100 dark:bg-gray-900 p-4 rounded text-left text-sm">
|
|
95
|
+
${(0, package_manager_1.getCommands)(pm).exec} swallowkit scaffold shared/models/your-model.ts
|
|
96
|
+
</code>
|
|
97
|
+
</div>
|
|
98
|
+
</section>
|
|
99
|
+
)}
|
|
100
|
+
|
|
101
|
+
<footer className="mt-16 text-center text-gray-600 dark:text-gray-400 text-sm">
|
|
102
|
+
<p>Built with SwallowKit</p>
|
|
103
|
+
</footer>
|
|
104
|
+
</div>
|
|
105
|
+
</div>
|
|
106
|
+
);
|
|
107
|
+
}
|
|
108
|
+
`;
|
|
109
|
+
return frontend === "react"
|
|
110
|
+
? (0, react_ui_generator_1.adaptReactPage)(page)
|
|
111
|
+
: `'use client'\n\nexport const dynamic = 'force-dynamic';\n\n${page}`;
|
|
112
|
+
}
|
|
113
|
+
//# sourceMappingURL=home-page.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"home-page.js","sourceRoot":"","sources":["../../../src/core/project/home-page.ts"],"names":[],"mappings":";;AAIA,sCA6GC;AAhHD,iEAA0E;AAC1E,uEAAgE;AAEhE,SAAgB,aAAa,CAC3B,QAA2B,EAC3B,EAAkB;IAElB,MAAM,SAAS,GAAG,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;IAC7D,MAAM,IAAI,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAgCD,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAuDL,IAAA,6BAAW,EAAC,EAAE,CAAC,CAAC,IAAI;;;;;;;;;;;;;CAarC,CAAC;IACA,OAAO,QAAQ,KAAK,OAAO;QACzB,CAAC,CAAC,IAAA,mCAAc,EAAC,IAAI,CAAC;QACtB,CAAC,CAAC,8DAA8D,IAAI,EAAE,CAAC;AAC3E,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Project-scoped MCP launcher version management.
|
|
3
|
+
*
|
|
4
|
+
* `.mcp.json` intentionally resolves `swallowkit@latest` so that projects created
|
|
5
|
+
* with older releases still get the current stable tools. A prerelease project can
|
|
6
|
+
* be newer than `latest`; in that case the launcher is pinned to the project
|
|
7
|
+
* version until a stable release that understands project-aware delegation catches up.
|
|
8
|
+
*/
|
|
9
|
+
export declare const MCP_CONFIG_PATH = ".mcp.json";
|
|
10
|
+
export declare const MCP_VERSION_ENV = "SWALLOWKIT_MCP_VERSION";
|
|
11
|
+
export declare const MCP_LATEST = "latest";
|
|
12
|
+
export interface McpPinDecision {
|
|
13
|
+
version: string;
|
|
14
|
+
reason: string;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Decide the SWALLOWKIT_MCP_VERSION value for a project that uses `projectVersion`.
|
|
18
|
+
* Uses `latest` unless the project version is newer than the published `latest`.
|
|
19
|
+
* When the registry could not be reached, prereleases are pinned conservatively.
|
|
20
|
+
*/
|
|
21
|
+
export declare function resolveMcpPinVersion(projectVersion: string, publishedLatest: string | null): McpPinDecision;
|
|
22
|
+
export declare function lookupPublishedLatestVersion(packageName: string, timeoutMs?: number): string | null;
|
|
23
|
+
export declare function readMcpConfigVersion(projectDir: string): string | null;
|
|
24
|
+
/** Update only the SwallowKit MCP version in .mcp.json, preserving all other content. */
|
|
25
|
+
export declare function writeMcpConfigVersion(projectDir: string, version: string): void;
|
|
26
|
+
//# sourceMappingURL=mcp-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-config.d.ts","sourceRoot":"","sources":["../../../src/core/project/mcp-config.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAQH,eAAO,MAAM,eAAe,cAAc,CAAC;AAC3C,eAAO,MAAM,eAAe,2BAA2B,CAAC;AACxD,eAAO,MAAM,UAAU,WAAW,CAAC;AAEnC,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,cAAc,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,IAAI,GAAG,cAAc,CAa3G;AAED,wBAAgB,4BAA4B,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,SAAQ,GAAG,MAAM,GAAG,IAAI,CAYlG;AAED,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAUtE;AAED,yFAAyF;AACzF,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAY/E"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Project-scoped MCP launcher version management.
|
|
4
|
+
*
|
|
5
|
+
* `.mcp.json` intentionally resolves `swallowkit@latest` so that projects created
|
|
6
|
+
* with older releases still get the current stable tools. A prerelease project can
|
|
7
|
+
* be newer than `latest`; in that case the launcher is pinned to the project
|
|
8
|
+
* version until a stable release that understands project-aware delegation catches up.
|
|
9
|
+
*/
|
|
10
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
11
|
+
if (k2 === undefined) k2 = k;
|
|
12
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
13
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
14
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
15
|
+
}
|
|
16
|
+
Object.defineProperty(o, k2, desc);
|
|
17
|
+
}) : (function(o, m, k, k2) {
|
|
18
|
+
if (k2 === undefined) k2 = k;
|
|
19
|
+
o[k2] = m[k];
|
|
20
|
+
}));
|
|
21
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
22
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
23
|
+
}) : function(o, v) {
|
|
24
|
+
o["default"] = v;
|
|
25
|
+
});
|
|
26
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
27
|
+
var ownKeys = function(o) {
|
|
28
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
29
|
+
var ar = [];
|
|
30
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
31
|
+
return ar;
|
|
32
|
+
};
|
|
33
|
+
return ownKeys(o);
|
|
34
|
+
};
|
|
35
|
+
return function (mod) {
|
|
36
|
+
if (mod && mod.__esModule) return mod;
|
|
37
|
+
var result = {};
|
|
38
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
39
|
+
__setModuleDefault(result, mod);
|
|
40
|
+
return result;
|
|
41
|
+
};
|
|
42
|
+
})();
|
|
43
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
44
|
+
exports.MCP_LATEST = exports.MCP_VERSION_ENV = exports.MCP_CONFIG_PATH = void 0;
|
|
45
|
+
exports.resolveMcpPinVersion = resolveMcpPinVersion;
|
|
46
|
+
exports.lookupPublishedLatestVersion = lookupPublishedLatestVersion;
|
|
47
|
+
exports.readMcpConfigVersion = readMcpConfigVersion;
|
|
48
|
+
exports.writeMcpConfigVersion = writeMcpConfigVersion;
|
|
49
|
+
const child_process_1 = require("child_process");
|
|
50
|
+
const fs = __importStar(require("fs"));
|
|
51
|
+
const os = __importStar(require("os"));
|
|
52
|
+
const path = __importStar(require("path"));
|
|
53
|
+
const semver_1 = require("../../utils/semver");
|
|
54
|
+
exports.MCP_CONFIG_PATH = ".mcp.json";
|
|
55
|
+
exports.MCP_VERSION_ENV = "SWALLOWKIT_MCP_VERSION";
|
|
56
|
+
exports.MCP_LATEST = "latest";
|
|
57
|
+
/**
|
|
58
|
+
* Decide the SWALLOWKIT_MCP_VERSION value for a project that uses `projectVersion`.
|
|
59
|
+
* Uses `latest` unless the project version is newer than the published `latest`.
|
|
60
|
+
* When the registry could not be reached, prereleases are pinned conservatively.
|
|
61
|
+
*/
|
|
62
|
+
function resolveMcpPinVersion(projectVersion, publishedLatest) {
|
|
63
|
+
if (!(0, semver_1.parseSemver)(projectVersion)) {
|
|
64
|
+
return { version: exports.MCP_LATEST, reason: `Project version ${projectVersion} is not a valid semantic version.` };
|
|
65
|
+
}
|
|
66
|
+
if (publishedLatest && (0, semver_1.parseSemver)(publishedLatest)) {
|
|
67
|
+
const comparison = (0, semver_1.compareSemver)(projectVersion, publishedLatest);
|
|
68
|
+
return comparison > 0
|
|
69
|
+
? { version: projectVersion, reason: `Project version ${projectVersion} is newer than published latest ${publishedLatest}.` }
|
|
70
|
+
: { version: exports.MCP_LATEST, reason: `Published latest ${publishedLatest} is the same as or newer than project version ${projectVersion}.` };
|
|
71
|
+
}
|
|
72
|
+
return (0, semver_1.isPrerelease)(projectVersion)
|
|
73
|
+
? { version: projectVersion, reason: `Published latest is unknown; prerelease ${projectVersion} is pinned so MCP matches the project.` }
|
|
74
|
+
: { version: exports.MCP_LATEST, reason: "Published latest is unknown; stable projects keep latest." };
|
|
75
|
+
}
|
|
76
|
+
function lookupPublishedLatestVersion(packageName, timeoutMs = 15000) {
|
|
77
|
+
// Run outside the project so its devEngines/packageManager policy does not reject npm.
|
|
78
|
+
const result = (0, child_process_1.spawnSync)("npm", ["view", `${packageName}@latest`, "version"], {
|
|
79
|
+
cwd: os.tmpdir(),
|
|
80
|
+
encoding: "utf8",
|
|
81
|
+
timeout: timeoutMs,
|
|
82
|
+
shell: process.platform === "win32",
|
|
83
|
+
stdio: ["ignore", "pipe", "ignore"],
|
|
84
|
+
});
|
|
85
|
+
if (result.error || result.status !== 0)
|
|
86
|
+
return null;
|
|
87
|
+
const version = String(result.stdout).trim().split(/\s+/).pop() ?? "";
|
|
88
|
+
return (0, semver_1.parseSemver)(version) ? version : null;
|
|
89
|
+
}
|
|
90
|
+
function readMcpConfigVersion(projectDir) {
|
|
91
|
+
const configPath = path.join(projectDir, exports.MCP_CONFIG_PATH);
|
|
92
|
+
if (!fs.existsSync(configPath))
|
|
93
|
+
return null;
|
|
94
|
+
try {
|
|
95
|
+
const config = JSON.parse(fs.readFileSync(configPath, "utf8"));
|
|
96
|
+
const value = config?.mcpServers?.swallowkit?.env?.[exports.MCP_VERSION_ENV];
|
|
97
|
+
return typeof value === "string" ? value : null;
|
|
98
|
+
}
|
|
99
|
+
catch {
|
|
100
|
+
return null;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
/** Update only the SwallowKit MCP version in .mcp.json, preserving all other content. */
|
|
104
|
+
function writeMcpConfigVersion(projectDir, version) {
|
|
105
|
+
const configPath = path.join(projectDir, exports.MCP_CONFIG_PATH);
|
|
106
|
+
if (!fs.existsSync(configPath)) {
|
|
107
|
+
throw new Error(`${exports.MCP_CONFIG_PATH} was not found. Run this command from a SwallowKit project root.`);
|
|
108
|
+
}
|
|
109
|
+
const config = JSON.parse(fs.readFileSync(configPath, "utf8"));
|
|
110
|
+
const server = config?.mcpServers?.swallowkit;
|
|
111
|
+
if (!server || typeof server !== "object") {
|
|
112
|
+
throw new Error(`${exports.MCP_CONFIG_PATH} does not define mcpServers.swallowkit.`);
|
|
113
|
+
}
|
|
114
|
+
server.env = { ...(server.env ?? {}), [exports.MCP_VERSION_ENV]: version };
|
|
115
|
+
fs.writeFileSync(configPath, `${JSON.stringify(config, null, 2)}\n`);
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=mcp-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-config.js","sourceRoot":"","sources":["../../../src/core/project/mcp-config.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsBH,oDAaC;AAED,oEAYC;AAED,oDAUC;AAGD,sDAYC;AA1ED,iDAA0C;AAC1C,uCAAyB;AACzB,uCAAyB;AACzB,2CAA6B;AAC7B,+CAA8E;AAEjE,QAAA,eAAe,GAAG,WAAW,CAAC;AAC9B,QAAA,eAAe,GAAG,wBAAwB,CAAC;AAC3C,QAAA,UAAU,GAAG,QAAQ,CAAC;AAOnC;;;;GAIG;AACH,SAAgB,oBAAoB,CAAC,cAAsB,EAAE,eAA8B;IACzF,IAAI,CAAC,IAAA,oBAAW,EAAC,cAAc,CAAC,EAAE,CAAC;QACjC,OAAO,EAAE,OAAO,EAAE,kBAAU,EAAE,MAAM,EAAE,mBAAmB,cAAc,mCAAmC,EAAE,CAAC;IAC/G,CAAC;IACD,IAAI,eAAe,IAAI,IAAA,oBAAW,EAAC,eAAe,CAAC,EAAE,CAAC;QACpD,MAAM,UAAU,GAAG,IAAA,sBAAa,EAAC,cAAc,EAAE,eAAe,CAAE,CAAC;QACnE,OAAO,UAAU,GAAG,CAAC;YACnB,CAAC,CAAC,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,mBAAmB,cAAc,mCAAmC,eAAe,GAAG,EAAE;YAC7H,CAAC,CAAC,EAAE,OAAO,EAAE,kBAAU,EAAE,MAAM,EAAE,oBAAoB,eAAe,iDAAiD,cAAc,GAAG,EAAE,CAAC;IAC7I,CAAC;IACD,OAAO,IAAA,qBAAY,EAAC,cAAc,CAAC;QACjC,CAAC,CAAC,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,2CAA2C,cAAc,wCAAwC,EAAE;QACxI,CAAC,CAAC,EAAE,OAAO,EAAE,kBAAU,EAAE,MAAM,EAAE,2DAA2D,EAAE,CAAC;AACnG,CAAC;AAED,SAAgB,4BAA4B,CAAC,WAAmB,EAAE,SAAS,GAAG,KAAK;IACjF,uFAAuF;IACvF,MAAM,MAAM,GAAG,IAAA,yBAAS,EAAC,KAAK,EAAE,CAAC,MAAM,EAAE,GAAG,WAAW,SAAS,EAAE,SAAS,CAAC,EAAE;QAC5E,GAAG,EAAE,EAAE,CAAC,MAAM,EAAE;QAChB,QAAQ,EAAE,MAAM;QAChB,OAAO,EAAE,SAAS;QAClB,KAAK,EAAE,OAAO,CAAC,QAAQ,KAAK,OAAO;QACnC,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC;KACpC,CAAC,CAAC;IACH,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACrD,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;IACtE,OAAO,IAAA,oBAAW,EAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;AAC/C,CAAC;AAED,SAAgB,oBAAoB,CAAC,UAAkB;IACrD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,uBAAe,CAAC,CAAC;IAC1D,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC;QAAE,OAAO,IAAI,CAAC;IAC5C,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;QAC/D,MAAM,KAAK,GAAG,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC,uBAAe,CAAC,CAAC;QACrE,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;IAClD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,yFAAyF;AACzF,SAAgB,qBAAqB,CAAC,UAAkB,EAAE,OAAe;IACvE,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,uBAAe,CAAC,CAAC;IAC1D,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CAAC,GAAG,uBAAe,kEAAkE,CAAC,CAAC;IACxG,CAAC;IACD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;IAC/D,MAAM,MAAM,GAAG,MAAM,EAAE,UAAU,EAAE,UAAU,CAAC;IAC9C,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC1C,MAAM,IAAI,KAAK,CAAC,GAAG,uBAAe,yCAAyC,CAAC,CAAC;IAC/E,CAAC;IACD,MAAM,CAAC,GAAG,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,CAAC,uBAAe,CAAC,EAAE,OAAO,EAAE,CAAC;IACnE,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;AACvE,CAAC"}
|
|
@@ -17,7 +17,7 @@ export declare function buildReactSwaConfig(): {
|
|
|
17
17
|
"X-Frame-Options": string;
|
|
18
18
|
};
|
|
19
19
|
};
|
|
20
|
-
export declare function createReactProject(projectDir: string, projectName: string): void;
|
|
20
|
+
export declare function createReactProject(projectDir: string, projectName: string, pm?: PackageManager): void;
|
|
21
21
|
export declare function createReactBffProject(projectDir: string, projectName: string, pm: PackageManager): void;
|
|
22
22
|
export declare function buildReactBffBuildSource(): string;
|
|
23
23
|
export declare function buildReactReadme(projectName: string, pm: PackageManager, backend: BackendLanguage): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"react-project.d.ts","sourceRoot":"","sources":["../../../src/core/project/react-project.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"react-project.d.ts","sourceRoot":"","sources":["../../../src/core/project/react-project.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAI9C,OAAO,EACL,cAAc,EAIf,MAAM,6BAA6B,CAAC;AAiBrC,wBAAgB,mBAAmB;;;;;;;;;;;;;;;;EAkBlC;AAED,wBAAgB,kBAAkB,CAChC,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACnB,EAAE,GAAE,cAAuB,GAC1B,IAAI,CAyKN;AAED,wBAAgB,qBAAqB,CACnC,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACnB,EAAE,EAAE,cAAc,GACjB,IAAI,CAqGN;AAED,wBAAgB,wBAAwB,IAAI,MAAM,CAkBjD;AAED,wBAAgB,gBAAgB,CAC9B,WAAW,EAAE,MAAM,EACnB,EAAE,EAAE,cAAc,EAClB,OAAO,EAAE,eAAe,GACvB,MAAM,CA8ER;AAgBD,wBAAgB,2BAA2B,CAAC,EAAE,EAAE,cAAc,GAAG,MAAM,CA4CtE;AAED,wBAAgB,0BAA0B,CAAC,EAAE,EAAE,cAAc,GAAG,MAAM,CAkCrE"}
|
|
@@ -42,6 +42,9 @@ exports.buildReactGitHubSwaWorkflow = buildReactGitHubSwaWorkflow;
|
|
|
42
42
|
exports.buildReactAzureSwaPipeline = buildReactAzureSwaPipeline;
|
|
43
43
|
const fs = __importStar(require("fs"));
|
|
44
44
|
const path = __importStar(require("path"));
|
|
45
|
+
const react_dev_1 = require("../../utils/react-dev");
|
|
46
|
+
const python_uv_1 = require("../../utils/python-uv");
|
|
47
|
+
const home_page_1 = require("./home-page");
|
|
45
48
|
const package_manager_1 = require("../../utils/package-manager");
|
|
46
49
|
const react_bff_generator_1 = require("../scaffold/react-bff-generator");
|
|
47
50
|
function write(projectDir, relativePath, content) {
|
|
@@ -68,7 +71,7 @@ function buildReactSwaConfig() {
|
|
|
68
71
|
},
|
|
69
72
|
};
|
|
70
73
|
}
|
|
71
|
-
function createReactProject(projectDir, projectName) {
|
|
74
|
+
function createReactProject(projectDir, projectName, pm = "pnpm") {
|
|
72
75
|
write(projectDir, "package.json", JSON.stringify({
|
|
73
76
|
name: projectName,
|
|
74
77
|
version: "0.1.0",
|
|
@@ -120,14 +123,18 @@ export default defineConfig({
|
|
|
120
123
|
'@': fileURLToPath(new URL('.', import.meta.url)),
|
|
121
124
|
'@${projectName}/shared': fileURLToPath(new URL('./shared/index.ts', import.meta.url)),
|
|
122
125
|
} },
|
|
123
|
-
server: {
|
|
126
|
+
server: {
|
|
127
|
+
port: 3000,
|
|
128
|
+
strictPort: true,
|
|
129
|
+
watch: { ignored: ${(0, react_dev_1.buildReactDevWatchIgnoredSource)("fileURLToPath(new URL('.', import.meta.url))")} },
|
|
130
|
+
},
|
|
124
131
|
build: { outDir: 'dist' },
|
|
125
132
|
});
|
|
126
133
|
`);
|
|
127
134
|
write(projectDir, "index.html", `<!doctype html>
|
|
128
|
-
<html lang="en">
|
|
135
|
+
<html lang="en" class="h-full antialiased">
|
|
129
136
|
<head><meta charset="UTF-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>SwallowKit</title></head>
|
|
130
|
-
<body><div id="root"></div><script type="module" src="/src/main.tsx"></script></body>
|
|
137
|
+
<body class="min-h-full flex flex-col"><div id="root" class="flex flex-1 flex-col"></div><script type="module" src="/src/main.tsx"></script></body>
|
|
131
138
|
</html>
|
|
132
139
|
`);
|
|
133
140
|
write(projectDir, "src\\main.tsx", `import { StrictMode } from 'react';
|
|
@@ -156,30 +163,33 @@ export default function App() {
|
|
|
156
163
|
]);
|
|
157
164
|
}
|
|
158
165
|
`);
|
|
159
|
-
write(projectDir, "src\\Home.tsx",
|
|
160
|
-
|
|
161
|
-
import { scaffoldConfig } from '@/lib/scaffold-config';
|
|
166
|
+
write(projectDir, "src\\Home.tsx", (0, home_page_1.buildHomePage)("react", pm));
|
|
167
|
+
write(projectDir, "src\\style.css", `@import "tailwindcss";
|
|
162
168
|
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
169
|
+
:root {
|
|
170
|
+
--background: #ffffff;
|
|
171
|
+
--foreground: #171717;
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
@theme inline {
|
|
175
|
+
--color-background: var(--background);
|
|
176
|
+
--color-foreground: var(--foreground);
|
|
177
|
+
--font-sans: Arial, Helvetica, sans-serif;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
@media (prefers-color-scheme: dark) {
|
|
181
|
+
:root {
|
|
182
|
+
--background: #0a0a0a;
|
|
183
|
+
--foreground: #ededed;
|
|
172
184
|
}
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
</main>;
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
body {
|
|
188
|
+
background: var(--background);
|
|
189
|
+
color: var(--foreground);
|
|
190
|
+
font-family: Arial, Helvetica, sans-serif;
|
|
180
191
|
}
|
|
181
192
|
`);
|
|
182
|
-
write(projectDir, "src\\style.css", '@import "tailwindcss";\n');
|
|
183
193
|
write(projectDir, "lib\\scaffold-config.ts", `export interface ScaffoldModel { name: string; path: string; label: string; }
|
|
184
194
|
export const scaffoldConfig = {
|
|
185
195
|
models: [] as ScaffoldModel[]
|
|
@@ -292,6 +302,17 @@ The BFF stays separate even with \`--no-functions\`; \`--no-swa\` starts only th
|
|
|
292
302
|
direct Vite/BFF servers (no same-origin API routing or SWA authentication).
|
|
293
303
|
Core Tools v4 must already be available. Start Cosmos DB Emulator manually if
|
|
294
304
|
this application needs Cosmos; SwallowKit never starts it.
|
|
305
|
+
${backend === "python" ? `
|
|
306
|
+
Python environments use normal uv discovery and user settings, including installed
|
|
307
|
+
Python, \`.python-version\`, and \`UV_PYTHON\`. Local Python is not pinned to the Azure
|
|
308
|
+
deployment runtime (${python_uv_1.DEFAULT_AZURE_PYTHON_VERSION}). Functions uses \`functions/.venv\`; scaffold uses
|
|
309
|
+
\`functions/.codegen-venv\`. Existing environments are never cleared automatically.
|
|
310
|
+
When switching interpreters, explicitly recreate them with uv. Do not disable
|
|
311
|
+
Windows application-control policy to run an unsigned interpreter.
|
|
312
|
+
` : backend === "csharp" ? `
|
|
313
|
+
The .NET isolated backend starts with \`dotnet run\` so extensions are loaded from
|
|
314
|
+
the build output. Vite does not watch \`functions/\` or \`bff/\` build artifacts.
|
|
315
|
+
` : ""}
|
|
295
316
|
|
|
296
317
|
Local BFF settings live in \`bff/local.settings.json\` (gitignored). Backend settings
|
|
297
318
|
live in \`functions/local.settings.json\`. Keep their secrets out of source control.
|
|
@@ -302,7 +323,7 @@ live in \`functions/local.settings.json\`. Keep their secrets out of source cont
|
|
|
302
323
|
\`\`\`sh
|
|
303
324
|
${pm} run build
|
|
304
325
|
${cmd.exec} swallowkit machine verify project
|
|
305
|
-
${cmd.exec} swallowkit machine verify project --checks structure,drift,typecheck,build
|
|
326
|
+
${cmd.exec} swallowkit machine verify project --checks "structure,drift,typecheck,backend-build,build"
|
|
306
327
|
\`\`\`
|
|
307
328
|
|
|
308
329
|
The build compiles shared schemas, checks the SPA, builds static assets, and
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"react-project.js","sourceRoot":"","sources":["../../../src/core/project/react-project.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"react-project.js","sourceRoot":"","sources":["../../../src/core/project/react-project.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,6 +10,13 @@ export declare function savePlanState<TPlan extends {
|
|
|
10
10
|
}>(plan: TPlan, projectRoot?: string): void;
|
|
11
11
|
export declare function loadPlanState<TPlan>(planId: string, projectRoot?: string): TPlan | null;
|
|
12
12
|
export declare function deletePlanState(planId: string, projectRoot?: string): void;
|
|
13
|
+
export declare function saveProvisionRun<T extends {
|
|
14
|
+
runId: string;
|
|
15
|
+
}>(run: T, projectRoot?: string): void;
|
|
16
|
+
export declare function loadProvisionRun<T>(runId: string, projectRoot?: string): T | null;
|
|
17
|
+
export declare function listProvisionRuns<T>(projectRoot?: string): T[];
|
|
18
|
+
/** A live local executor must not share an Azure target with another executor. */
|
|
19
|
+
export declare function lockProvisionTarget(key: string, projectRoot?: string): () => void;
|
|
13
20
|
export declare function saveLastVerifyState(result: unknown, projectRoot?: string): void;
|
|
14
21
|
export declare function loadLastVerifyState<TResult>(projectRoot?: string): TResult | null;
|
|
15
22
|
//# sourceMappingURL=state.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../../src/core/project/state.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,eAAO,MAAM,oBAAoB,QAAoC,CAAC;AAqBtE,wBAAgB,aAAa,CAAC,KAAK,SAAS;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,EAC5D,IAAI,EAAE,KAAK,EACX,WAAW,GAAE,MAAsB,GAClC,IAAI,CAGN;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAE,MAAsB,GAAG,KAAK,GAAG,IAAI,CAWtG;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,GAAE,MAAsB,GAAG,IAAI,CAKzF;AAID,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,OAAO,EAAE,WAAW,GAAE,MAAsB,GAAG,IAAI,CAG9F;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,WAAW,GAAE,MAAsB,GAAG,OAAO,GAAG,IAAI,CAUhG"}
|
|
1
|
+
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../../src/core/project/state.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,eAAO,MAAM,oBAAoB,QAAoC,CAAC;AAqBtE,wBAAgB,aAAa,CAAC,KAAK,SAAS;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,EAC5D,IAAI,EAAE,KAAK,EACX,WAAW,GAAE,MAAsB,GAClC,IAAI,CAGN;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAE,MAAsB,GAAG,KAAK,GAAG,IAAI,CAWtG;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,GAAE,MAAsB,GAAG,IAAI,CAKzF;AAOD,wBAAgB,gBAAgB,CAAC,CAAC,SAAS;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,EAAE,GAAG,EAAE,CAAC,EAAE,WAAW,GAAE,MAAsB,GAAG,IAAI,CAO/G;AAED,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,GAAE,MAAsB,GAAG,CAAC,GAAG,IAAI,CAKhG;AAED,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,WAAW,GAAE,MAAsB,GAAG,CAAC,EAAE,CAK7E;AAED,kFAAkF;AAClF,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,GAAE,MAAsB,GAAG,MAAM,IAAI,CAuChG;AAID,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,OAAO,EAAE,WAAW,GAAE,MAAsB,GAAG,IAAI,CAG9F;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,WAAW,GAAE,MAAsB,GAAG,OAAO,GAAG,IAAI,CAUhG"}
|