@lunora/cli 1.0.0-alpha.46 → 1.0.0-alpha.461

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 (142) hide show
  1. package/LICENSE.md +33 -0
  2. package/README.md +3 -1
  3. package/dist/bin.mjs +3 -10
  4. package/dist/cli.d.mts +31 -0
  5. package/dist/cli.d.ts +31 -0
  6. package/dist/cli.mjs +1 -0
  7. package/dist/index.d.mts +1096 -386
  8. package/dist/index.d.ts +1096 -386
  9. package/dist/index.mjs +1 -19
  10. package/dist/packem_chunks/cli.mjs +2 -0
  11. package/dist/packem_chunks/dispatch.mjs +1 -0
  12. package/dist/packem_chunks/handler.mjs +17 -158
  13. package/dist/packem_chunks/handler10.mjs +1 -16
  14. package/dist/packem_chunks/handler11.mjs +1 -22
  15. package/dist/packem_chunks/handler12.mjs +1 -192
  16. package/dist/packem_chunks/handler13.mjs +1 -131
  17. package/dist/packem_chunks/handler14.mjs +1 -65
  18. package/dist/packem_chunks/handler15.mjs +3 -58
  19. package/dist/packem_chunks/handler16.mjs +1 -80
  20. package/dist/packem_chunks/handler17.mjs +1 -43
  21. package/dist/packem_chunks/handler18.mjs +1 -105
  22. package/dist/packem_chunks/handler19.mjs +1 -170
  23. package/dist/packem_chunks/handler2.mjs +1 -114
  24. package/dist/packem_chunks/handler20.mjs +7 -94
  25. package/dist/packem_chunks/handler21.mjs +2 -94
  26. package/dist/packem_chunks/handler22.mjs +1 -0
  27. package/dist/packem_chunks/handler23.mjs +3 -0
  28. package/dist/packem_chunks/handler24.mjs +3 -0
  29. package/dist/packem_chunks/handler25.mjs +1 -0
  30. package/dist/packem_chunks/handler26.mjs +2 -0
  31. package/dist/packem_chunks/handler27.mjs +99 -0
  32. package/dist/packem_chunks/handler28.mjs +15 -0
  33. package/dist/packem_chunks/handler29.mjs +1 -0
  34. package/dist/packem_chunks/handler3.mjs +1 -204
  35. package/dist/packem_chunks/handler30.mjs +1 -0
  36. package/dist/packem_chunks/handler4.mjs +1 -33
  37. package/dist/packem_chunks/handler5.mjs +3 -49
  38. package/dist/packem_chunks/handler6.mjs +1 -91
  39. package/dist/packem_chunks/handler7.mjs +1 -42
  40. package/dist/packem_chunks/handler8.mjs +1 -174
  41. package/dist/packem_chunks/handler9.mjs +2 -315
  42. package/dist/packem_chunks/runCodegenCommand.mjs +4 -52
  43. package/dist/packem_chunks/runDevCommand.mjs +6 -0
  44. package/dist/packem_chunks/runInitCommand.mjs +212 -1432
  45. package/dist/packem_chunks/runResetCommand.mjs +1 -41
  46. package/dist/packem_chunks/runRpcCommand.mjs +1 -68
  47. package/dist/packem_shared/DEFAULT_IMPORT_BATCH_SIZE-5xxKz-zB.mjs +1 -0
  48. package/dist/packem_shared/EXIT_CODE-DVjUgIaG.mjs +1 -0
  49. package/dist/packem_shared/admin-token-VdUnvnKW.mjs +1 -0
  50. package/dist/packem_shared/admin-url-DJB8P6Jh.mjs +1 -0
  51. package/dist/packem_shared/api-spec-lYyq4vL6.mjs +1 -0
  52. package/dist/packem_shared/binding-manifest-file-CQ1eQYy1.mjs +2 -0
  53. package/dist/packem_shared/buildRegistryIndex-Dc8D8AR6.mjs +1 -0
  54. package/dist/packem_shared/cap-error-body-YBKO32BF.mjs +1 -0
  55. package/dist/packem_shared/catalog-CahzmDLV.mjs +1 -0
  56. package/dist/packem_shared/cli-manifest-DoQ_3bzs.mjs +1 -0
  57. package/dist/packem_shared/cloudflare-credentials-BVmZnDZk.mjs +1 -0
  58. package/dist/packem_shared/codegen-error-AmH54ofi.mjs +3 -0
  59. package/dist/packem_shared/command-B6vu47iR.mjs +1 -0
  60. package/dist/packem_shared/commands-DC3ZX1yk.mjs +13 -0
  61. package/dist/packem_shared/createLogger-4TujevyB.mjs +2 -0
  62. package/dist/packem_shared/createRecordingSpawner-01ZngIwK.mjs +1 -0
  63. package/dist/packem_shared/deploy-target-resolve-BTCW1Iv4.mjs +1 -0
  64. package/dist/packem_shared/diffSnapshots-htqNZT8Q.mjs +7 -0
  65. package/dist/packem_shared/docker-DpVxvYpL.mjs +1 -0
  66. package/dist/packem_shared/free-port-DjbFhaaT.mjs +1 -0
  67. package/dist/packem_shared/health-probe-Bw9JFfIy.mjs +1 -0
  68. package/dist/packem_shared/import-DoAUdyfU.mjs +13 -0
  69. package/dist/packem_shared/index-oHZBGBwB.mjs +1 -0
  70. package/dist/packem_shared/insertSchemaExtension-CbTH3lCQ.mjs +10 -0
  71. package/dist/packem_shared/lint-ignore-report-DKZagpqk.mjs +2 -0
  72. package/dist/packem_shared/mcp-config-file-GR1Y_CVw.mjs +2 -0
  73. package/dist/packem_shared/open-url-EnKy--w-.mjs +1 -0
  74. package/dist/packem_shared/output-format-DWe_tkTR.mjs +2 -0
  75. package/dist/packem_shared/parseManifest-CwPTKdtS.mjs +1 -0
  76. package/dist/packem_shared/path-containment-CgxYZggb.mjs +1 -0
  77. package/dist/packem_shared/plan-BH4ZfiFs.mjs +5 -0
  78. package/dist/packem_shared/planDevCommand-I8-NB_CN.mjs +1 -0
  79. package/dist/packem_shared/platform-diagnostics-Cn2g6Jh-.mjs +4 -0
  80. package/dist/packem_shared/prompt-cancelled-BvsNxg_Q.mjs +1 -0
  81. package/dist/packem_shared/render-lunora-error-DUo0pA61.mjs +2 -0
  82. package/dist/packem_shared/resolve-Bdc9KEUv.mjs +5 -0
  83. package/dist/packem_shared/resolve-target-C_ZloTvd.mjs +1 -0
  84. package/dist/packem_shared/runAddCommand-CTblwN9O.mjs +1 -0
  85. package/dist/packem_shared/runDeployCommand-Tgy9tGRV.mjs +1 -0
  86. package/dist/packem_shared/runExportCommand-DiMCQ-Il.mjs +5 -0
  87. package/dist/packem_shared/runMigrateGenerateCommand-Bd2W9t1k.mjs +11 -0
  88. package/dist/packem_shared/schemaIrToSnapshot-BHuNOfgs.mjs +1 -0
  89. package/dist/packem_shared/shared-D-zCOmgY.mjs +1 -0
  90. package/dist/packem_shared/storage-BLLoZRJa.mjs +1 -0
  91. package/dist/packem_shared/tui-prompts-B3YwUhGw.mjs +4 -0
  92. package/dist/packem_shared/variables-CPYyJtsL.mjs +1 -0
  93. package/dist/packem_shared/vectorize-metadata-BVSF8z2h.mjs +2 -0
  94. package/dist/packem_shared/wrangler-name-Dsk5K1f-.mjs +1 -0
  95. package/dist/packem_shared/wrangler-secrets-DlSlWvRH.mjs +1 -0
  96. package/package.json +44 -19
  97. package/skills/README.md +36 -17
  98. package/skills/lunora/SKILL.md +158 -65
  99. package/skills/lunora-cloudflare-audit/SKILL.md +164 -0
  100. package/skills/lunora-create-package/SKILL.md +97 -84
  101. package/skills/lunora-deploy/SKILL.md +178 -105
  102. package/skills/lunora-functions/SKILL.md +367 -60
  103. package/skills/lunora-migration-helper/SKILL.md +168 -137
  104. package/skills/lunora-performance-audit/SKILL.md +137 -95
  105. package/skills/lunora-quickstart/SKILL.md +136 -136
  106. package/skills/lunora-realtime/SKILL.md +217 -97
  107. package/skills/lunora-setup-auth/SKILL.md +203 -101
  108. package/skills/lunora-setup-hyperdrive/SKILL.md +138 -109
  109. package/skills/lunora-setup-hyperdrive-global/SKILL.md +137 -92
  110. package/skills/lunora-setup-mail/SKILL.md +87 -113
  111. package/skills/lunora-setup-scheduler/SKILL.md +133 -97
  112. package/skills/lunora-setup-storage/SKILL.md +189 -95
  113. package/dist/packem_chunks/planDevCommand.mjs +0 -541
  114. package/dist/packem_chunks/runDeployCommand.mjs +0 -594
  115. package/dist/packem_chunks/runMigrateGenerateCommand.mjs +0 -397
  116. package/dist/packem_shared/COMMANDS-B0ftFD_3.mjs +0 -948
  117. package/dist/packem_shared/DEFAULT_IMPORT_BATCH_SIZE-Ck-2bU08.mjs +0 -244
  118. package/dist/packem_shared/admin-url-4UzT-CI4.mjs +0 -19
  119. package/dist/packem_shared/api-spec-CtA6ilu4.mjs +0 -13
  120. package/dist/packem_shared/buildRegistryIndex-BcYe607_.mjs +0 -38
  121. package/dist/packem_shared/codegen-error-DJG-ghs_.mjs +0 -31
  122. package/dist/packem_shared/command-D3lB_4Az.mjs +0 -19
  123. package/dist/packem_shared/commands-B-gR09Z_.mjs +0 -845
  124. package/dist/packem_shared/createLogger-B40gPzQo.mjs +0 -78
  125. package/dist/packem_shared/createRecordingSpawner-DxI3mebw.mjs +0 -43
  126. package/dist/packem_shared/detect-package-manager-DYp7n3mJ.mjs +0 -61
  127. package/dist/packem_shared/diffSnapshots-BeDvvNiF.mjs +0 -161
  128. package/dist/packem_shared/docker-hMQ97KSQ.mjs +0 -21
  129. package/dist/packem_shared/insertSchemaExtension-DAqbfr9Z.mjs +0 -64
  130. package/dist/packem_shared/open-url-Dfq6fAyT.mjs +0 -41
  131. package/dist/packem_shared/output-format-wUvAN6AL.mjs +0 -17
  132. package/dist/packem_shared/parseArgs-YXFuKdEk.mjs +0 -56
  133. package/dist/packem_shared/parseManifest--vZf2FY1.mjs +0 -94
  134. package/dist/packem_shared/prompt-cancelled-APzX1Im-.mjs +0 -9
  135. package/dist/packem_shared/resolve-target-qbsJ_5sF.mjs +0 -16
  136. package/dist/packem_shared/runAddCommand-bnY6-HKb.mjs +0 -4
  137. package/dist/packem_shared/schema-drift-gate-BtBt0as0.mjs +0 -79
  138. package/dist/packem_shared/schemaIrToSnapshot-DdsljJT-.mjs +0 -43
  139. package/dist/packem_shared/storage-BIsph-Vk.mjs +0 -84
  140. package/dist/packem_shared/tui-prompts-BjEN8XgP.mjs +0 -658
  141. package/dist/packem_shared/wrangler-name-cy4yhm9j.mjs +0 -12
  142. package/dist/packem_shared/wrangler-secrets-P2_ZUR-k.mjs +0 -47
@@ -1,79 +0,0 @@
1
- import { existsSync, readFileSync, writeFileSync } from 'node:fs';
2
- import { evaluateSchemaDrift, parseSchemaSnapshot, SchemaSnapshotParseError, serializeSchemaSnapshot } from '@lunora/codegen';
3
-
4
- const readBaseline = (snapshotPath) => {
5
- if (!existsSync(snapshotPath)) {
6
- return { status: "absent" };
7
- }
8
- let content;
9
- try {
10
- content = readFileSync(snapshotPath, "utf8");
11
- } catch {
12
- return { status: "corrupt" };
13
- }
14
- try {
15
- const snapshot = parseSchemaSnapshot(content);
16
- return snapshot === void 0 ? { status: "corrupt" } : { snapshot, status: "ok" };
17
- } catch (error) {
18
- if (error instanceof SchemaSnapshotParseError) {
19
- return { status: "corrupt" };
20
- }
21
- throw error;
22
- }
23
- };
24
- const writeBaseline = (snapshotPath, snapshot) => {
25
- writeFileSync(snapshotPath, serializeSchemaSnapshot(snapshot), "utf8");
26
- };
27
- const corruptBaselineResult = (context) => {
28
- const reason = `schema-drift gate: the committed baseline ${context.snapshotPath} is unreadable or malformed, so schema drift cannot be checked. Fix it (e.g. resolve a merge conflict in lunora/.lunora-schema.json), or pass --update-schema-baseline to regenerate it from the current schema.`;
29
- if (context.updateBaseline && !context.readOnly) {
30
- context.logger.warn(
31
- `schema baseline was unreadable; regenerating from the current schema on success (--update-schema-baseline): ${context.snapshotPath}`
32
- );
33
- return { blocked: false, changes: [], reason, rebless: context.rebless };
34
- }
35
- if (!context.readOnly) {
36
- context.logger.error(reason);
37
- }
38
- return { blocked: true, changes: [], reason };
39
- };
40
- const blockedDecisionResult = (decision, context) => {
41
- if (!context.readOnly) {
42
- context.logger.error(decision.reason);
43
- }
44
- if (context.updateBaseline && !context.readOnly) {
45
- context.logger.warn(`schema baseline will be re-blessed despite breaking drift on success (--update-schema-baseline): ${context.snapshotPath}`);
46
- return { blocked: false, changes: decision.changes, reason: decision.reason, rebless: context.rebless };
47
- }
48
- return { blocked: true, changes: decision.changes, reason: decision.reason };
49
- };
50
- const runSchemaDriftGate = (options) => {
51
- const { allowDrift, codegen, logger, readOnly = false, updateBaseline = false } = options;
52
- const snapshotPath = codegen.schemaSnapshotPath;
53
- const baseline = readBaseline(snapshotPath);
54
- const context = {
55
- logger,
56
- readOnly,
57
- rebless: () => {
58
- writeBaseline(snapshotPath, codegen.schemaSnapshot);
59
- },
60
- snapshotPath,
61
- updateBaseline
62
- };
63
- if (baseline.status === "corrupt") {
64
- return corruptBaselineResult(context);
65
- }
66
- const decision = evaluateSchemaDrift({ allowDrift, baseline: baseline.status === "ok" ? baseline.snapshot : void 0, current: codegen.schemaSnapshot });
67
- if (decision.blocked) {
68
- return blockedDecisionResult(decision, context);
69
- }
70
- if (decision.changes.length > 0) {
71
- if (!readOnly) {
72
- logger.info(decision.reason);
73
- }
74
- return { blocked: false, changes: decision.changes, reason: decision.reason, rebless: readOnly ? void 0 : context.rebless };
75
- }
76
- return { blocked: false, changes: decision.changes, reason: decision.reason };
77
- };
78
-
79
- export { runSchemaDriftGate as r };
@@ -1,43 +0,0 @@
1
- import { validatorKindToSqlType } from './diffSnapshots-BeDvvNiF.mjs';
2
-
3
- const validatorToColumn = (validator) => {
4
- if (validator.kind === "optional" && validator.inner) {
5
- return {
6
- nullable: true,
7
- sqlType: validatorKindToSqlType(validator.inner.kind)
8
- };
9
- }
10
- return {
11
- nullable: false,
12
- sqlType: validatorKindToSqlType(validator.kind)
13
- };
14
- };
15
- const isGlobal = (mode) => mode === "global";
16
- const schemaIrToSnapshot = (ir) => {
17
- const tables = {};
18
- for (const table of ir.tables) {
19
- if (!isGlobal(table.shardMode)) {
20
- continue;
21
- }
22
- const columns = {};
23
- for (const [columnName, validator] of Object.entries(table.shape)) {
24
- columns[columnName] = validatorToColumn(validator);
25
- }
26
- const indexes = {};
27
- for (const index of table.indexes) {
28
- indexes[index.name] = {
29
- fields: [...index.fields],
30
- name: index.name,
31
- unique: index.unique ?? false
32
- };
33
- }
34
- tables[table.name] = {
35
- columns,
36
- indexes,
37
- name: table.name
38
- };
39
- }
40
- return { tables, version: 1 };
41
- };
42
-
43
- export { schemaIrToSnapshot as default };
@@ -1,84 +0,0 @@
1
- import { s as setBindingField } from './commands-B-gR09Z_.mjs';
2
-
3
- const INVALID_SLUG_CHARS = /[^a-z0-9]+/u;
4
- const toKebabSlug = (input, min, max) => {
5
- let slug = input.toLowerCase().split(INVALID_SLUG_CHARS).filter(Boolean).join("-").slice(0, max);
6
- if (slug.endsWith("-")) {
7
- slug = slug.slice(0, -1);
8
- }
9
- return slug.length >= min ? slug : void 0;
10
- };
11
-
12
- const DB_BINDING = "DB";
13
- const AUTH_DB_PROMPT = "Name your D1 database (run `wrangler d1 create` to get its id, then put it in wrangler.jsonc)";
14
- const sanitizeDatabaseName = (input) => toKebabSlug(input, 1, 64);
15
- const FALLBACK_DATABASE_NAME = "lunora-db";
16
- const deriveDatabaseName = (projectName) => sanitizeDatabaseName(`${projectName}-db`) ?? FALLBACK_DATABASE_NAME;
17
- const promptDatabaseName = async (text, projectName) => {
18
- const fallback = deriveDatabaseName(projectName);
19
- return sanitizeDatabaseName(await text(AUTH_DB_PROMPT, { default: fallback, placeholder: fallback })) ?? fallback;
20
- };
21
- const withAuthDatabaseName = (manifest, name) => setBindingField(manifest, "d1_databases", { key: "binding", value: DB_BINDING }, "database_name", name);
22
-
23
- const AUTH_PROVIDER_OPTIONS = [
24
- { description: "Email + password on better-auth (default)", label: "Email & password", value: "auth" },
25
- { description: "Clerk-hosted auth", label: "Clerk", value: "auth-clerk" },
26
- { description: "Auth0 (OIDC)", label: "Auth0", value: "auth-auth0" }
27
- ];
28
- const DEFAULT_AUTH_ITEM = "auth";
29
- const promptAuthProvider = async (select) => await select("Which auth provider?", AUTH_PROVIDER_OPTIONS, { default: DEFAULT_AUTH_ITEM }) ?? DEFAULT_AUTH_ITEM;
30
- const EMAIL_ITEM = "mail";
31
- const normalizeFeature = (raw) => {
32
- const value = raw.trim();
33
- if (value === "") {
34
- return void 0;
35
- }
36
- const lower = value.toLowerCase();
37
- if (lower === "auth") {
38
- return { kind: "auth" };
39
- }
40
- if (lower === "email" || lower === "mail") {
41
- return { kind: "email" };
42
- }
43
- return { item: lower, kind: "item" };
44
- };
45
-
46
- const SEND_EMAIL_BINDING = "SEND_EMAIL";
47
- const MAIL_DESTINATION_PROMPT = "Verified destination email for production delivery (blank = set it later in wrangler.jsonc)";
48
- const isValidEmail = (value) => {
49
- const trimmed = value.trim();
50
- if (trimmed.length === 0 || trimmed.includes(" ")) {
51
- return false;
52
- }
53
- const at = trimmed.indexOf("@");
54
- if (at <= 0 || at !== trimmed.lastIndexOf("@")) {
55
- return false;
56
- }
57
- const domain = trimmed.slice(at + 1);
58
- return domain.length >= 3 && domain.includes(".") && !domain.startsWith(".") && !domain.endsWith(".");
59
- };
60
- const resolveTypedDestination = (entered, warn) => {
61
- const trimmed = entered.trim();
62
- if (trimmed === "") {
63
- return void 0;
64
- }
65
- if (!isValidEmail(trimmed)) {
66
- warn(`"${trimmed}" doesn't look like an email — leaving the placeholder; set destination_address in wrangler.jsonc.`);
67
- return void 0;
68
- }
69
- return trimmed;
70
- };
71
- const withMailDestination = (manifest, address) => setBindingField(manifest, "send_email", { key: "name", value: SEND_EMAIL_BINDING }, "destination_address", address);
72
-
73
- const UPLOADS_BINDING = "UPLOADS";
74
- const STORAGE_BUCKET_PROMPT = "Name your R2 bucket (you can rename it in wrangler.jsonc later)";
75
- const sanitizeBucketName = (input) => toKebabSlug(input, 3, 63);
76
- const FALLBACK_BUCKET_NAME = "lunora-uploads";
77
- const deriveBucketName = (projectName) => sanitizeBucketName(`${projectName}-uploads`) ?? FALLBACK_BUCKET_NAME;
78
- const promptBucketName = async (text, projectName) => {
79
- const fallback = deriveBucketName(projectName);
80
- return sanitizeBucketName(await text(STORAGE_BUCKET_PROMPT, { default: fallback, placeholder: fallback })) ?? fallback;
81
- };
82
- const withStorageBucketName = (manifest, bucketName) => setBindingField(manifest, "r2_buckets", { key: "binding", value: UPLOADS_BINDING }, "bucket_name", bucketName);
83
-
84
- export { AUTH_PROVIDER_OPTIONS as A, DEFAULT_AUTH_ITEM as D, EMAIL_ITEM as E, MAIL_DESTINATION_PROMPT as M, sanitizeDatabaseName as a, deriveDatabaseName as b, promptDatabaseName as c, deriveBucketName as d, promptAuthProvider as e, withMailDestination as f, withAuthDatabaseName as g, normalizeFeature as n, promptBucketName as p, resolveTypedDestination as r, sanitizeBucketName as s, withStorageBucketName as w };