@aotter/mantle 0.1.0-alpha.7 → 0.1.0-alpha.8

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 (106) hide show
  1. package/README.md +68 -30
  2. package/dist/admin.d.ts +2 -0
  3. package/dist/admin.d.ts.map +1 -0
  4. package/dist/admin.js +2 -0
  5. package/dist/admin.js.map +1 -0
  6. package/dist/bun.d.ts +2 -0
  7. package/dist/bun.d.ts.map +1 -0
  8. package/dist/bun.js +2 -0
  9. package/dist/bun.js.map +1 -0
  10. package/dist/cli/create.d.ts +2 -0
  11. package/dist/cli/create.d.ts.map +1 -0
  12. package/dist/cli/create.js +243 -0
  13. package/dist/cli/create.js.map +1 -0
  14. package/dist/cli/generate.d.ts.map +1 -0
  15. package/dist/cli/generate.js +101 -0
  16. package/dist/cli/generate.js.map +1 -0
  17. package/dist/cli/harness.d.ts +3 -0
  18. package/dist/cli/harness.d.ts.map +1 -0
  19. package/dist/{harness-cli.js → cli/harness.js} +13 -8
  20. package/dist/cli/harness.js.map +1 -0
  21. package/dist/cli/main.d.ts +3 -0
  22. package/dist/cli/main.d.ts.map +1 -0
  23. package/dist/{cli.js → cli/main.js} +6 -8
  24. package/dist/cli/main.js.map +1 -0
  25. package/dist/cli/skills.d.ts +3 -0
  26. package/dist/cli/skills.d.ts.map +1 -0
  27. package/dist/{skills.js → cli/skills.js} +51 -6
  28. package/dist/cli/skills.js.map +1 -0
  29. package/dist/cli/update.d.ts.map +1 -0
  30. package/dist/{update.js → cli/update.js} +72 -46
  31. package/dist/cli/update.js.map +1 -0
  32. package/dist/codegen/emitMantleModule.d.ts +16 -0
  33. package/dist/codegen/emitMantleModule.d.ts.map +1 -0
  34. package/dist/codegen/emitMantleModule.js +217 -0
  35. package/dist/codegen/emitMantleModule.js.map +1 -0
  36. package/dist/codegen.d.ts +2 -0
  37. package/dist/codegen.d.ts.map +1 -0
  38. package/dist/codegen.js +2 -0
  39. package/dist/codegen.js.map +1 -0
  40. package/dist/provision/renderProvisionBundle.d.ts +70 -0
  41. package/dist/provision/renderProvisionBundle.d.ts.map +1 -0
  42. package/dist/provision/renderProvisionBundle.js +367 -0
  43. package/dist/provision/renderProvisionBundle.js.map +1 -0
  44. package/dist/provision.d.ts +2 -0
  45. package/dist/provision.d.ts.map +1 -0
  46. package/dist/provision.js +2 -0
  47. package/dist/provision.js.map +1 -0
  48. package/dist/vercel-libsql.d.ts +2 -0
  49. package/dist/vercel-libsql.d.ts.map +1 -0
  50. package/dist/vercel-libsql.js +2 -0
  51. package/dist/vercel-libsql.js.map +1 -0
  52. package/dist/vercel.d.ts +2 -0
  53. package/dist/vercel.d.ts.map +1 -0
  54. package/dist/vercel.js +2 -0
  55. package/dist/vercel.js.map +1 -0
  56. package/dist/web.d.ts +2 -0
  57. package/dist/web.d.ts.map +1 -0
  58. package/dist/web.js +2 -0
  59. package/dist/web.js.map +1 -0
  60. package/docs/adapter-guide.md +88 -45
  61. package/docs/adr/0001-four-atom-manifest-model.md +11 -3
  62. package/docs/adr/0007-ai-as-primary-author.md +3 -3
  63. package/docs/adr/0009-consumer-supplied-manifests.md +9 -4
  64. package/docs/adr/0011-adapter-port-spec.md +18 -4
  65. package/docs/adr/0014-auth-better-auth-and-multi-tenant-mcp.md +111 -6
  66. package/docs/adr/0018-core-starters-repository-boundary.md +22 -1
  67. package/docs/adr/0019-sealed-manifest-runtime-pipeline.md +204 -0
  68. package/docs/adr/README.md +12 -10
  69. package/docs/api-mcp-authorization.md +21 -42
  70. package/docs/assets/mantle-admin-operations.png +0 -0
  71. package/docs/assets/mantle-hero.jpg +0 -0
  72. package/docs/auth-hosting-model.md +5 -5
  73. package/docs/cloudflare-low-level-composition.md +30 -18
  74. package/docs/deferred-lifecycle-queues.md +20 -38
  75. package/docs/design-atoms.md +31 -133
  76. package/docs/labels.md +1 -1
  77. package/docs/media-uploads.md +2 -2
  78. package/docs/migration-0.1.2.md +45 -0
  79. package/docs/performance-harness.md +4 -4
  80. package/docs/release-process.md +72 -22
  81. package/docs/sealed-pipeline-ownership.md +100 -0
  82. package/package.json +84 -14
  83. package/skills/README.md +38 -7
  84. package/skills/develop/SKILL.md +7 -5
  85. package/skills/install/SKILL.md +26 -25
  86. package/skills/media-gc/SKILL.md +6 -0
  87. package/skills/plugin/SKILL.md +1 -0
  88. package/skills/provision/SKILL.md +2 -0
  89. package/skills/theme/SKILL.md +1 -0
  90. package/skills/update/SKILL.md +1 -0
  91. package/dist/cli.d.ts +0 -3
  92. package/dist/cli.d.ts.map +0 -1
  93. package/dist/cli.js.map +0 -1
  94. package/dist/generate.d.ts.map +0 -1
  95. package/dist/generate.js +0 -226
  96. package/dist/generate.js.map +0 -1
  97. package/dist/harness-cli.d.ts +0 -3
  98. package/dist/harness-cli.d.ts.map +0 -1
  99. package/dist/harness-cli.js.map +0 -1
  100. package/dist/skills.d.ts +0 -2
  101. package/dist/skills.d.ts.map +0 -1
  102. package/dist/skills.js.map +0 -1
  103. package/dist/update.d.ts.map +0 -1
  104. package/dist/update.js.map +0 -1
  105. /package/dist/{generate.d.ts → cli/generate.d.ts} +0 -0
  106. /package/dist/{update.d.ts → cli/update.d.ts} +0 -0
@@ -0,0 +1,217 @@
1
+ import { EmitTypesUseCase, manifestTypeIdentifier, validateDiagnostic, } from "@aotter/mantle-spec";
2
+ import { compileRuntimePlan } from "@aotter/mantle-runtime";
3
+ const GENERATED_NAMES = new Set([
4
+ "BootMantleRuntimeArgs",
5
+ "CoreMantleRuntime",
6
+ "CreateMantleOptions",
7
+ "RuntimePlanData",
8
+ "MantleHandlers",
9
+ "MantleViewOptions",
10
+ "RuntimeHandlerContext",
11
+ "RuntimeHandlerFn",
12
+ "bindMantle",
13
+ "bootMantleRuntime",
14
+ "createMantle",
15
+ "plan",
16
+ "sealRuntimePlan",
17
+ ]);
18
+ export function assertMantleNamespace(namespace, label = "namespace") {
19
+ if (!/^[A-Za-z_$][A-Za-z0-9_$]*$/.test(namespace) || GENERATED_NAMES.has(namespace)) {
20
+ throw new Error(`${label} must be a non-reserved TypeScript identifier; got ${JSON.stringify(namespace)}`);
21
+ }
22
+ }
23
+ /** Pure TypeScript projection of one linked and compiled Mantle revision. */
24
+ export function emitMantleModule(request) {
25
+ const namespace = request.namespace ?? "Mantle";
26
+ assertMantleNamespace(namespace);
27
+ const collision = findIdentifierCollision(request.linked);
28
+ if (collision)
29
+ return { ok: false, diagnostics: [collision] };
30
+ const compiled = compileRuntimePlan(request.linked);
31
+ if (!compiled.ok)
32
+ return { ok: false, diagnostics: compiled.diagnostics };
33
+ const plan = compiled.value;
34
+ const schemas = sortedValues(plan.schemas);
35
+ const views = sortedValues(plan.views);
36
+ const procedures = sortedValues(plan.procedures);
37
+ const triggers = sortedValues(plan.triggers);
38
+ const generatedTypes = EmitTypesUseCase.run({ linked: request.linked, namespace }).source
39
+ .replace(/^\/\/ Generated by `mantle-spec emit-types`\. Do not edit by hand\.\n\n/, "")
40
+ .trimEnd();
41
+ const handlerTypes = handlerContractLines(procedures, namespace);
42
+ return {
43
+ ok: true,
44
+ source: [
45
+ "// Generated by `mantle generate`. Do not edit by hand.",
46
+ "import { bootMantleRuntime, sealRuntimePlan } from \"@aotter/mantle/runtime\";",
47
+ "import type {",
48
+ " BootMantleRuntimeArgs,",
49
+ " HandlerContext as RuntimeHandlerContext,",
50
+ " HandlerFn as RuntimeHandlerFn,",
51
+ " MantleRuntime as CoreMantleRuntime,",
52
+ " RuntimePlanData,",
53
+ "} from \"@aotter/mantle/runtime\";",
54
+ "",
55
+ `export const plan = sealRuntimePlan(${JSON.stringify(plan, null, 2)} as const satisfies RuntimePlanData);`,
56
+ "",
57
+ generatedTypes,
58
+ "",
59
+ "export interface MantleViewOptions {",
60
+ " readonly page?: number;",
61
+ " readonly show?: number;",
62
+ " readonly ctx?: RuntimeHandlerContext;",
63
+ "}",
64
+ "",
65
+ "export type MantleHandlers<Env = unknown> = {",
66
+ ...handlerTypes,
67
+ "};",
68
+ "",
69
+ "export type CreateMantleOptions<Env = unknown> =",
70
+ " Omit<BootMantleRuntimeArgs, \"plan\" | \"handlers\"> & {",
71
+ " readonly handlers?: MantleHandlers<Env>;",
72
+ " };",
73
+ "",
74
+ "export async function createMantle<Env = unknown>(options: CreateMantleOptions<Env>) {",
75
+ " const runtime = await bootMantleRuntime({ ...options, plan });",
76
+ " return bindMantle(runtime);",
77
+ "}",
78
+ "",
79
+ "export function bindMantle(runtime: CoreMantleRuntime) {",
80
+ " if (runtime.revision !== plan.semanticFingerprint) {",
81
+ " throw new Error(`Generated Mantle revision '${plan.semanticFingerprint}' cannot bind runtime revision '${runtime.revision}'.`);",
82
+ " }",
83
+ " return {",
84
+ " runtime,",
85
+ " entries: {",
86
+ ...schemas.flatMap((schema) => schemaLines(schema.name, namespace)),
87
+ " },",
88
+ " views: {",
89
+ ...views.flatMap((view) => viewLines(view.manifest, namespace)),
90
+ " },",
91
+ " procedures: {",
92
+ ...procedures.flatMap((procedure) => procedureLines(procedure.manifest.metadata.name, namespace)),
93
+ " },",
94
+ " triggers: {",
95
+ ...triggers.map((trigger) => ` ${codegenIdentifier(trigger.name)}: ${JSON.stringify({
96
+ name: trigger.name,
97
+ source: trigger.manifest.spec.source,
98
+ target: trigger.target,
99
+ })} as const,`),
100
+ " },",
101
+ " } as const;",
102
+ "}",
103
+ "",
104
+ ].join("\n"),
105
+ };
106
+ }
107
+ function schemaLines(name, namespace) {
108
+ const id = codegenIdentifier(name);
109
+ const data = `${namespace}.Entry_${manifestTypeIdentifier(name)}`;
110
+ return [
111
+ ` ${id}: {`,
112
+ ` createDraft: (request: Omit<Parameters<CoreMantleRuntime["createDraft"]["execute"]>[0], "collection" | "data"> & { readonly data: ${data} }) =>`,
113
+ ` runtime.createDraft.execute({ ...request, collection: ${JSON.stringify(name)}, data: request.data as unknown as Record<string, unknown> }),`,
114
+ ` get: (request: Omit<Parameters<CoreMantleRuntime["getEntry"]["execute"]>[0], "collection">) =>`,
115
+ ` runtime.getEntry.execute({ ...request, collection: ${JSON.stringify(name)} }),`,
116
+ ` list: (request: Omit<Parameters<CoreMantleRuntime["listEntries"]["execute"]>[0], "collection"> = {}) =>`,
117
+ ` runtime.listEntries.execute({ ...request, collection: ${JSON.stringify(name)} }),`,
118
+ ` delete: (request: Omit<Parameters<CoreMantleRuntime["deleteEntry"]["execute"]>[0], "collection">) =>`,
119
+ ` runtime.deleteEntry.execute({ ...request, collection: ${JSON.stringify(name)} }),`,
120
+ " },",
121
+ ];
122
+ }
123
+ function viewLines(view, namespace) {
124
+ const name = view.metadata.name;
125
+ const requiredParams = (view.spec.params?.required?.length ?? 0) > 0;
126
+ const requestType = view.spec.params
127
+ ? `MantleViewOptions & { readonly params${requiredParams ? "" : "?"}: ${namespace}.ViewParams_${manifestTypeIdentifier(name)} }`
128
+ : "MantleViewOptions";
129
+ return [
130
+ ` ${codegenIdentifier(name)}: (request: ${requestType}${requiredParams ? "" : " = {}"}) =>`,
131
+ ` runtime.executeView<${namespace}.ViewRow_${manifestTypeIdentifier(name)}>({`,
132
+ ` view: ${JSON.stringify(name)},`,
133
+ " ctx: request.ctx,",
134
+ " options: {",
135
+ ...(view.spec.params ? [" params: request.params,"] : []),
136
+ " page: request.page,",
137
+ " show: request.show,",
138
+ " },",
139
+ " }),",
140
+ ];
141
+ }
142
+ function procedureLines(name, namespace) {
143
+ const typeId = manifestTypeIdentifier(name);
144
+ return [
145
+ ` ${codegenIdentifier(name)}: (input: ${namespace}.ProcInput_${typeId}, ctx: RuntimeHandlerContext) =>`,
146
+ ` runtime.invokeProcedure<${namespace}.ProcOutput_${typeId}>({`,
147
+ ` procedure: ${JSON.stringify(name)},`,
148
+ " input,",
149
+ " ctx,",
150
+ " }),",
151
+ ];
152
+ }
153
+ function handlerContractLines(procedures, namespace) {
154
+ const handlers = new Map();
155
+ for (const procedure of procedures) {
156
+ const handler = procedure.manifest.spec.handler;
157
+ if (handler.kind !== "ref")
158
+ continue;
159
+ const entries = handlers.get(handler.ref) ?? [];
160
+ entries.push(procedure.name);
161
+ handlers.set(handler.ref, entries);
162
+ }
163
+ return [...handlers]
164
+ .sort(([a], [b]) => compareText(a, b))
165
+ .map(([ref, entries]) => {
166
+ const names = entries.map(manifestTypeIdentifier).sort();
167
+ const inputs = names.map((name) => `${namespace}.ProcInput_${name}`).join(" | ");
168
+ const outputs = names.map((name) => `${namespace}.ProcOutput_${name}`).join(" | ");
169
+ return ` readonly ${JSON.stringify(ref)}: RuntimeHandlerFn<${inputs}, ${outputs}, Env>;`;
170
+ });
171
+ }
172
+ function findIdentifierCollision(linked) {
173
+ const groups = [
174
+ ["entries", linked.schemas],
175
+ ["views", linked.views],
176
+ ["procedures", linked.procedures],
177
+ ["triggers", linked.triggers],
178
+ ];
179
+ for (const [group, entries] of groups) {
180
+ const seen = new Map();
181
+ for (const entry of [...entries].sort((a, b) => compareText(a.manifest.metadata.name, b.manifest.metadata.name))) {
182
+ const name = entry.manifest.metadata.name;
183
+ const identifier = codegenIdentifier(name);
184
+ const first = seen.get(identifier);
185
+ if (!first) {
186
+ seen.set(identifier, name);
187
+ continue;
188
+ }
189
+ const source = { ...entry.source, path: "/metadata/name" };
190
+ return validateDiagnostic({
191
+ code: "CODEGEN_IDENTIFIER_COLLISION",
192
+ severity: "error",
193
+ path: `${source.sourceId}#/${source.documentIndex}/metadata/name`,
194
+ source,
195
+ value: name,
196
+ expected: `a ${group} wire name with a unique lower-camel identifier`,
197
+ candidates: [first, name],
198
+ message: `${group} wire names '${first}' and '${name}' both generate '${identifier}'.`,
199
+ });
200
+ }
201
+ }
202
+ return undefined;
203
+ }
204
+ function sortedValues(record) {
205
+ return Object.values(record).sort((a, b) => compareText(a.name, b.name));
206
+ }
207
+ function compareText(a, b) {
208
+ return a < b ? -1 : a > b ? 1 : 0;
209
+ }
210
+ function codegenIdentifier(name) {
211
+ const words = name.match(/[A-Za-z0-9]+/g) ?? [];
212
+ const joined = words.map((word, index) => index === 0
213
+ ? word[0].toLowerCase() + word.slice(1)
214
+ : word[0].toUpperCase() + word.slice(1)).join("");
215
+ return /^[A-Za-z_$]/.test(joined) ? joined : `_${joined}`;
216
+ }
217
+ //# sourceMappingURL=emitMantleModule.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emitMantleModule.js","sourceRoot":"","sources":["../../src/codegen/emitMantleModule.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export { emitMantleModule, type EmitMantleModuleRequest, type EmitMantleModuleResult, } from "./codegen/emitMantleModule.js";
2
+ //# sourceMappingURL=codegen.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codegen.d.ts","sourceRoot":"","sources":["../src/codegen.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAChB,KAAK,uBAAuB,EAC5B,KAAK,sBAAsB,GAC5B,MAAM,+BAA+B,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { emitMantleModule, } from "./codegen/emitMantleModule.js";
2
+ //# sourceMappingURL=codegen.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codegen.js","sourceRoot":"","sources":["../src/codegen.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,GAGjB,MAAM,+BAA+B,CAAC"}
@@ -0,0 +1,70 @@
1
+ export declare const PROVISION_BUNDLE_KIND = "mantle-provision-bundle";
2
+ export declare const PROVISION_BUNDLE_FORMAT_VERSION = 1;
3
+ /** Stable across releases: hosts map these to their own error surfaces. */
4
+ export type ProvisionErrorCode = "bundle_invalid" | "bundle_kind_mismatch" | "bundle_archetype_mismatch" | "bundle_too_large" | "binary_invalid" | "path_unsafe" | "path_collision" | "placeholder_unknown" | "placeholder_unresolved" | "launch_value_invalid" | "locale_unsupported" | "locale_catalog_invalid" | "manifest_invalid";
5
+ export declare class ProvisionRenderError extends Error {
6
+ readonly code: ProvisionErrorCode;
7
+ constructor(code: ProvisionErrorCode, message: string);
8
+ }
9
+ /** Bounds memory and disk before anything is materialized. */
10
+ export interface ProvisionLimits {
11
+ readonly maxFiles: number;
12
+ readonly maxTextBytes: number;
13
+ readonly maxDecodedBinaryBytes: number;
14
+ readonly maxTotalBytes: number;
15
+ }
16
+ export declare const DEFAULT_PROVISION_LIMITS: ProvisionLimits;
17
+ export interface ProvisionBundle {
18
+ readonly kind?: string;
19
+ readonly version?: string;
20
+ readonly formatVersion?: number;
21
+ readonly archetype?: string;
22
+ readonly files?: Record<string, string>;
23
+ readonly binaryFiles?: Record<string, string>;
24
+ readonly localizedFiles?: readonly string[];
25
+ }
26
+ /**
27
+ * Every placeholder a bundle may reference. A bundle placeholder outside this
28
+ * set fails as `placeholder_unknown`. Hosts that do not own a value yet (a
29
+ * local `create` has no GitHub owner) pass an empty string on purpose.
30
+ */
31
+ export declare const PROVISION_PLACEHOLDERS: readonly ["ADMIN_GITHUB_LOGIN", "AFTER_LAUNCH_SKILL_URL", "ARCHETYPE", "AUTH_MODE", "BRAND", "CANONICAL_LOCALE", "DESCRIPTION", "GITHUB_OWNER", "INSTALL_SUMMARY", "INSTALL_TIMESTAMP", "LOCALES", "PROJECT_NAME", "SITE_URL", "STARTER_REF", "TURNSTILE_SITE_KEY"];
32
+ export type ProvisionPlaceholder = (typeof PROVISION_PLACEHOLDERS)[number];
33
+ export interface LaunchValues {
34
+ readonly archetype: string;
35
+ readonly projectName: string;
36
+ readonly brand: string;
37
+ readonly description: string;
38
+ readonly locales: readonly string[];
39
+ readonly canonicalLocale: string;
40
+ readonly authMode: string;
41
+ readonly starterRef: string;
42
+ /** ISO-8601. Passed in so one input set always renders one output set. */
43
+ readonly installTimestamp: string;
44
+ readonly siteUrl?: string;
45
+ readonly githubOwner?: string;
46
+ readonly adminGithubLogin?: string;
47
+ readonly afterLaunchSkillUrl?: string;
48
+ readonly installSummary?: string;
49
+ readonly turnstileSiteKey?: string;
50
+ }
51
+ export interface RenderProvisionBundleInput {
52
+ readonly bundle: ProvisionBundle;
53
+ readonly launch: LaunchValues;
54
+ readonly limits?: ProvisionLimits;
55
+ }
56
+ export interface RenderedProject {
57
+ /** Relative POSIX path -> file text. */
58
+ readonly files: ReadonlyMap<string, string>;
59
+ /** Relative POSIX path -> canonical base64. */
60
+ readonly binaryFiles: ReadonlyMap<string, string>;
61
+ }
62
+ export declare function renderProvisionBundle(input: RenderProvisionBundleInput): RenderedProject;
63
+ /**
64
+ * Normalizes both slash styles and rejects anything that could escape the
65
+ * target. Returns the path a host will join onto its destination, so every
66
+ * rule below runs on that final string — never on the raw bundle key.
67
+ */
68
+ export declare function safeTarget(rawPath: string): string;
69
+ export declare function isCanonicalBase64(value: string): boolean;
70
+ //# sourceMappingURL=renderProvisionBundle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renderProvisionBundle.d.ts","sourceRoot":"","sources":["../../src/provision/renderProvisionBundle.ts"],"names":[],"mappings":"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"}