@aotter/mantle 0.0.11-alpha.63 → 0.0.11-alpha.64
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.md +87 -12
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +52 -0
- package/dist/cli.js.map +1 -0
- package/dist/generate.d.ts +2 -0
- package/dist/generate.d.ts.map +1 -0
- package/dist/generate.js +181 -0
- package/dist/generate.js.map +1 -0
- package/dist/skills.d.ts +2 -0
- package/dist/skills.d.ts.map +1 -0
- package/dist/skills.js +80 -0
- package/dist/skills.js.map +1 -0
- package/dist/update.d.ts +2 -0
- package/dist/update.d.ts.map +1 -0
- package/dist/update.js +387 -0
- package/dist/update.js.map +1 -0
- package/docs/adr/0001-four-atom-manifest-model.md +6 -7
- package/docs/adr/0007-ai-as-primary-author.md +100 -138
- package/docs/adr/0008-structured-diagnostic-shape.md +79 -99
- package/docs/adr/0009-consumer-supplied-manifests.md +101 -228
- package/docs/adr/0012-views-as-public-rest.md +43 -15
- package/docs/adr/0014-auth-better-auth-and-multi-tenant-mcp.md +43 -17
- package/docs/adr/0018-core-starters-repository-boundary.md +155 -0
- package/docs/adr/README.md +8 -6
- package/docs/cloudflare-low-level-composition.md +94 -0
- package/docs/design-atoms.md +59 -57
- package/docs/design-references/editorial-blog-2026-05-05.md +7 -7
- package/docs/labels.md +1 -1
- package/docs/media-uploads.md +1 -1
- package/docs/release-process.md +156 -523
- package/package.json +9 -6
- package/skills/README.md +20 -16
- package/skills/develop/SKILL.md +4 -4
- package/skills/install/SKILL.md +16 -2
- package/skills/plugin/SKILL.md +1 -1
- package/skills/provision/SKILL.md +1 -1
- package/skills/theme/SKILL.md +12 -10
- package/skills/update/SKILL.md +31 -19
- package/skills/customize-design/SKILL.md +0 -215
- package/skills/extend/SKILL.md +0 -257
package/README.md
CHANGED
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
Umbrella entry for the Mantle SDK — a manifest-driven CMS for Cloudflare Workers, built around a 4-atom YAML model (Schema / View / Procedure / Trigger) where agents write config and the runtime carries the complexity.
|
|
4
4
|
|
|
5
|
-
>
|
|
5
|
+
> Mantle is prerelease software. Use this package's `package.json` as the exact
|
|
6
|
+
> installed version; APIs may change between prereleases until v0.1.0.
|
|
6
7
|
|
|
7
8
|
## Install
|
|
8
9
|
|
|
@@ -30,13 +31,84 @@ import { createCmsRuntime } from "@aotter/mantle/runtime";
|
|
|
30
31
|
import { mountServerEndpoints } from "@aotter/mantle/cloudflare";
|
|
31
32
|
```
|
|
32
33
|
|
|
33
|
-
The package also installs `mantle-harness`:
|
|
34
|
+
The package also installs `mantle` and `mantle-harness`:
|
|
34
35
|
|
|
35
36
|
```bash
|
|
37
|
+
pnpm exec mantle generate
|
|
38
|
+
pnpm exec mantle generate --check
|
|
39
|
+
pnpm exec mantle skills
|
|
40
|
+
pnpm exec mantle skills --check
|
|
41
|
+
pnpm exec mantle update --ref <immutable-starter-ref>
|
|
36
42
|
pnpm exec mantle-harness indexes --require-public
|
|
37
43
|
pnpm exec mantle-harness http --base-url http://127.0.0.1:8787 --route page=/en/example
|
|
38
44
|
```
|
|
39
45
|
|
|
46
|
+
`mantle generate` validates the YAML under `./manifests`, then writes the
|
|
47
|
+
parsed manifest module and handler declarations to `.mantle/generated/`.
|
|
48
|
+
It does not sync skills, update packages, style, provision, or deploy.
|
|
49
|
+
When manifests declare Views, the generated `site.ts` also exports
|
|
50
|
+
`bindMantleSite(runtime)`: its `views` keys, params and returned rows come from
|
|
51
|
+
those manifests, while diagnostics still come directly from `executeView`.
|
|
52
|
+
Dynamic `runtime.viewsByName` access remains available for low-level code.
|
|
53
|
+
|
|
54
|
+
```ts
|
|
55
|
+
const site = bindMantleSite(runtime);
|
|
56
|
+
const notes = await site.views["published-notes"]();
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
`mantle skills` explicitly copies the installed package's `develop`, `plugin`,
|
|
60
|
+
`theme`, and `update` skills to matching `.agent/skills/mantle-*` and
|
|
61
|
+
`.claude/skills/mantle-*` paths. Both tool layouts receive identical bytes;
|
|
62
|
+
`--check` detects drift without writing. Manifest generation never rewrites
|
|
63
|
+
agent instructions.
|
|
64
|
+
|
|
65
|
+
`mantle update` compares the recorded source bundle, a target bundle, and the
|
|
66
|
+
local project, then writes `.mantle/update-report.json`. It never applies the
|
|
67
|
+
diff. Configure `.mantle/features.json` `registry.bundleBaseUrl` with a URL
|
|
68
|
+
containing `{ref}`, or pass `--bundle-base-url` for the alpha.63 bridge. The
|
|
69
|
+
report carries the only supported metadata migration; review and apply it
|
|
70
|
+
after porting selected upstream changes.
|
|
71
|
+
|
|
72
|
+
## Conventional Cloudflare Worker
|
|
73
|
+
|
|
74
|
+
The normal Worker entry delegates Core-owned assembly to the SDK:
|
|
75
|
+
|
|
76
|
+
```ts
|
|
77
|
+
import { createMantleWorker } from "@aotter/mantle/cloudflare";
|
|
78
|
+
import { manifest } from "../.mantle/generated/site.js";
|
|
79
|
+
|
|
80
|
+
export default createMantleWorker({ manifest });
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
`createMantleWorker` owns conventional D1/KV/assets bindings, Auth, Admin,
|
|
84
|
+
manifest REST/HTTP routes, OAuth, MCP, cache safety, and rejection-safe
|
|
85
|
+
per-isolate boot. Use its single `extend` seam for application handlers and
|
|
86
|
+
new Hono routes; use the public low-level exports when the deployment does not
|
|
87
|
+
fit the conventional binding or lifecycle contract.
|
|
88
|
+
|
|
89
|
+
Extensions may add routes but may not replace Core surfaces. These paths are
|
|
90
|
+
reserved:
|
|
91
|
+
|
|
92
|
+
- `/admin` and `/admin/*`
|
|
93
|
+
- `/api/auth` and `/api/auth/*`
|
|
94
|
+
- `/api/views` and `/api/views/*`
|
|
95
|
+
- `/oauth` and `/oauth/*`
|
|
96
|
+
- `/mcp` and `/mcp/*`
|
|
97
|
+
- `/.well-known/oauth*`
|
|
98
|
+
- `/favicon.svg`
|
|
99
|
+
- global `*` and `/*` handlers
|
|
100
|
+
|
|
101
|
+
A custom Auth factory's `basePath` and exact manifest-owned method/path pairs
|
|
102
|
+
are also reserved at assembly. Static literal conflicts fail TypeScript during
|
|
103
|
+
the consumer build. Computed paths cannot be proven statically, so the facade
|
|
104
|
+
checks Hono's assembled route table and fails closed before serving requests.
|
|
105
|
+
There is no standard-route override option.
|
|
106
|
+
|
|
107
|
+
For an uncommon deployment that must own the top-level assembly, use the
|
|
108
|
+
embedded [`docs/cloudflare-low-level-composition.md`](docs/cloudflare-low-level-composition.md)
|
|
109
|
+
fixture. It composes the same public primitives without importing package
|
|
110
|
+
internals or rebuilding Mantle's adapters.
|
|
111
|
+
|
|
40
112
|
## Getting started
|
|
41
113
|
|
|
42
114
|
Give the [Mantle repo](https://github.com/aotter/mantle) to a coding agent or
|
|
@@ -47,20 +119,23 @@ materializes a local project, and verifies it before any provider work.
|
|
|
47
119
|
|
|
48
120
|
[Mantle landing](https://mantle.tools) uses the same bundles and continues
|
|
49
121
|
through private GitHub repo creation, Cloudflare deployment, and optional paid
|
|
50
|
-
hosted auth. Generated repos
|
|
51
|
-
package for repo-local use.
|
|
122
|
+
hosted auth. Generated repos project Core-owned `mantle:*` skills from their
|
|
123
|
+
installed package for repo-local use.
|
|
52
124
|
|
|
53
125
|
## Agent marketplace install
|
|
54
126
|
|
|
55
127
|
Install the Mantle Core skill bundle before working on generated repos:
|
|
56
128
|
|
|
129
|
+
Replace `<installed-version>` with the exact version from this package's
|
|
130
|
+
`package.json`. Do not point a versioned consumer at a mutable branch.
|
|
131
|
+
|
|
57
132
|
```bash
|
|
58
133
|
# Claude Code
|
|
59
|
-
/plugin marketplace add aotter/mantle
|
|
134
|
+
/plugin marketplace add aotter/mantle@v<installed-version>
|
|
60
135
|
/plugin install mantle@mantle
|
|
61
136
|
|
|
62
137
|
# Codex
|
|
63
|
-
codex plugin marketplace add aotter/mantle --ref
|
|
138
|
+
codex plugin marketplace add aotter/mantle --ref v<installed-version>
|
|
64
139
|
codex plugin add mantle@mantle
|
|
65
140
|
```
|
|
66
141
|
|
|
@@ -114,12 +189,12 @@ The `mantle-runtime` package never imports Cloudflare-specific types — adapter
|
|
|
114
189
|
- `node_modules/@aotter/mantle/skills/update/SKILL.md`
|
|
115
190
|
- `node_modules/@aotter/mantle/skills/install/SKILL.md`
|
|
116
191
|
- `node_modules/@aotter/mantle/skills/provision/SKILL.md`
|
|
117
|
-
- [
|
|
118
|
-
- [
|
|
119
|
-
- [
|
|
120
|
-
- [
|
|
121
|
-
- [
|
|
122
|
-
- [
|
|
192
|
+
- [4-atom manifest model (ADR-0001)](docs/adr/0001-four-atom-manifest-model.md)
|
|
193
|
+
- [API and MCP authorization](docs/api-mcp-authorization.md)
|
|
194
|
+
- [Deferred lifecycle Queues](docs/deferred-lifecycle-queues.md)
|
|
195
|
+
- [Schema indexes on D1](docs/schema-indexes.md)
|
|
196
|
+
- [Release process](docs/release-process.md)
|
|
197
|
+
- [Source repository](https://github.com/aotter/mantle)
|
|
123
198
|
- [Issues](https://github.com/aotter/mantle/issues)
|
|
124
199
|
|
|
125
200
|
## License
|
package/dist/cli.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
|
package/dist/cli.js
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { argv, stderr, stdout } from "node:process";
|
|
3
|
+
import { runEmitOpenapi, runEmitTypes, runIntrospect, runValidate, } from "@aotter/mantle-spec/cli";
|
|
4
|
+
import { runGenerate } from "./generate.js";
|
|
5
|
+
import { runSkills } from "./skills.js";
|
|
6
|
+
import { runUpdate } from "./update.js";
|
|
7
|
+
async function main() {
|
|
8
|
+
const command = argv[2];
|
|
9
|
+
if (!command || command === "--help" || command === "-h") {
|
|
10
|
+
stdout.write(`mantle - SDK authoring CLI
|
|
11
|
+
|
|
12
|
+
Usage: mantle <subcommand> [options]
|
|
13
|
+
|
|
14
|
+
Subcommands:
|
|
15
|
+
generate Compile manifests and handler types
|
|
16
|
+
skills Project version-matched Core skills
|
|
17
|
+
update Compare local work with provision bundles
|
|
18
|
+
validate Static manifest + handler-source validation
|
|
19
|
+
introspect Dump parsed manifest tree as JSON
|
|
20
|
+
emit-openapi Emit OpenAPI 3.1 from Triggers + Views
|
|
21
|
+
emit-types Emit TypeScript declarations from manifests
|
|
22
|
+
`);
|
|
23
|
+
return command ? 0 : 2;
|
|
24
|
+
}
|
|
25
|
+
const rest = argv.slice(3);
|
|
26
|
+
switch (command) {
|
|
27
|
+
case "generate":
|
|
28
|
+
return runGenerate(rest);
|
|
29
|
+
case "skills":
|
|
30
|
+
return runSkills(rest);
|
|
31
|
+
case "update":
|
|
32
|
+
return runUpdate(rest);
|
|
33
|
+
case "validate":
|
|
34
|
+
return runValidate(rest);
|
|
35
|
+
case "introspect":
|
|
36
|
+
return runIntrospect(rest);
|
|
37
|
+
case "emit-openapi":
|
|
38
|
+
return runEmitOpenapi(rest);
|
|
39
|
+
case "emit-types":
|
|
40
|
+
return runEmitTypes(rest);
|
|
41
|
+
default:
|
|
42
|
+
stderr.write(`Unknown subcommand: ${command}\n`);
|
|
43
|
+
return 2;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
main().then((code) => {
|
|
47
|
+
process.exitCode = code;
|
|
48
|
+
}, (error) => {
|
|
49
|
+
stderr.write(`internal error: ${error instanceof Error ? error.stack ?? error.message : String(error)}\n`);
|
|
50
|
+
process.exitCode = 2;
|
|
51
|
+
});
|
|
52
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EACL,cAAc,EACd,YAAY,EACZ,aAAa,EACb,WAAW,GACZ,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,KAAK,UAAU,IAAI;IACjB,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACxB,IAAI,CAAC,OAAO,IAAI,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QACzD,MAAM,CAAC,KAAK,CAAC;;;;;;;;;;;;CAYhB,CAAC,CAAC;QACC,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACzB,CAAC;IACD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC3B,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,UAAU;YACb,OAAO,WAAW,CAAC,IAAI,CAAC,CAAC;QAC3B,KAAK,QAAQ;YACX,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC;QACzB,KAAK,QAAQ;YACX,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC;QACzB,KAAK,UAAU;YACb,OAAO,WAAW,CAAC,IAAI,CAAC,CAAC;QAC3B,KAAK,YAAY;YACf,OAAO,aAAa,CAAC,IAAI,CAAC,CAAC;QAC7B,KAAK,cAAc;YACjB,OAAO,cAAc,CAAC,IAAI,CAAC,CAAC;QAC9B,KAAK,YAAY;YACf,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC;QAC5B;YACE,MAAM,CAAC,KAAK,CAAC,uBAAuB,OAAO,IAAI,CAAC,CAAC;YACjD,OAAO,CAAC,CAAC;IACb,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC,IAAI,CACT,CAAC,IAAI,EAAE,EAAE;IACP,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;AAC1B,CAAC,EACD,CAAC,KAAK,EAAE,EAAE;IACR,MAAM,CAAC,KAAK,CAAC,mBAAmB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC3G,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;AACvB,CAAC,CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../src/generate.ts"],"names":[],"mappings":"AAoBA,wBAAsB,WAAW,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CA0C7E"}
|
package/dist/generate.js
ADDED
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
import { mkdir, readFile, writeFile } from "node:fs/promises";
|
|
2
|
+
import { dirname, join, resolve } from "node:path";
|
|
3
|
+
import { cwd, stderr, stdout } from "node:process";
|
|
4
|
+
import { parseArgs } from "node:util";
|
|
5
|
+
import { EmitTypesUseCase, ValidateManifestsUseCase, } from "@aotter/mantle-spec";
|
|
6
|
+
import { loadManifestsFromRoot } from "@aotter/mantle-spec/cli";
|
|
7
|
+
export async function runGenerate(rawArgs) {
|
|
8
|
+
let options;
|
|
9
|
+
try {
|
|
10
|
+
const parsed = parseGenerateArgs(rawArgs);
|
|
11
|
+
if (parsed === null) {
|
|
12
|
+
printHelp();
|
|
13
|
+
return 0;
|
|
14
|
+
}
|
|
15
|
+
options = parsed;
|
|
16
|
+
}
|
|
17
|
+
catch (error) {
|
|
18
|
+
stderr.write(`${message(error)}\n`);
|
|
19
|
+
return 2;
|
|
20
|
+
}
|
|
21
|
+
const loaded = await loadManifestsFromRoot(options.manifests);
|
|
22
|
+
const validation = ValidateManifestsUseCase.run({
|
|
23
|
+
manifests: loaded.manifests,
|
|
24
|
+
filePaths: loaded.filePaths,
|
|
25
|
+
});
|
|
26
|
+
const errors = [...loaded.parseErrors, ...validation.diagnostics]
|
|
27
|
+
.filter((diagnostic) => diagnostic.severity === "error");
|
|
28
|
+
if (errors.length > 0) {
|
|
29
|
+
for (const error of errors) {
|
|
30
|
+
stderr.write(`${error.code} ${error.path}: ${error.message}\n`);
|
|
31
|
+
}
|
|
32
|
+
return 1;
|
|
33
|
+
}
|
|
34
|
+
const output = resolve(cwd(), options.output);
|
|
35
|
+
const files = new Map([
|
|
36
|
+
[join(output, "site.ts"), emitManifestModule(loaded.manifests, options.namespace)],
|
|
37
|
+
[join(output, "types.d.ts"), emitTypes(loaded.manifests, options.namespace)],
|
|
38
|
+
]);
|
|
39
|
+
let stale = false;
|
|
40
|
+
for (const [path, source] of files) {
|
|
41
|
+
stale = !(await syncText(path, source, options.check)) || stale;
|
|
42
|
+
}
|
|
43
|
+
if (stale && options.check) {
|
|
44
|
+
stderr.write("Mantle generated files are stale; run `mantle generate`.\n");
|
|
45
|
+
return 1;
|
|
46
|
+
}
|
|
47
|
+
return 0;
|
|
48
|
+
}
|
|
49
|
+
function parseGenerateArgs(rawArgs) {
|
|
50
|
+
const { values } = parseArgs({
|
|
51
|
+
args: [...rawArgs],
|
|
52
|
+
options: {
|
|
53
|
+
manifests: { type: "string" },
|
|
54
|
+
output: { type: "string", short: "o" },
|
|
55
|
+
namespace: { type: "string" },
|
|
56
|
+
check: { type: "boolean" },
|
|
57
|
+
help: { type: "boolean", short: "h" },
|
|
58
|
+
},
|
|
59
|
+
});
|
|
60
|
+
if (values.help)
|
|
61
|
+
return null;
|
|
62
|
+
const namespace = values.namespace ?? "MantleSite";
|
|
63
|
+
if (!/^[A-Za-z_$][A-Za-z0-9_$]*$/.test(namespace)) {
|
|
64
|
+
throw new Error(`--namespace must be a TypeScript identifier; got ${JSON.stringify(namespace)}`);
|
|
65
|
+
}
|
|
66
|
+
return {
|
|
67
|
+
manifests: values.manifests ?? "./manifests",
|
|
68
|
+
output: values.output ?? ".mantle/generated",
|
|
69
|
+
namespace,
|
|
70
|
+
check: values.check === true,
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
function printHelp() {
|
|
74
|
+
stdout.write(`mantle generate — compile manifests and handler types
|
|
75
|
+
|
|
76
|
+
Usage: mantle generate [options]
|
|
77
|
+
|
|
78
|
+
Options:
|
|
79
|
+
--manifests <dir> Manifest root (default: ./manifests)
|
|
80
|
+
-o, --output <dir> Generated root (default: .mantle/generated)
|
|
81
|
+
--namespace <name> Generated type namespace (default: MantleSite)
|
|
82
|
+
--check Fail without writing when output is stale
|
|
83
|
+
-h, --help This help
|
|
84
|
+
`);
|
|
85
|
+
}
|
|
86
|
+
function emitManifestModule(manifests, namespace) {
|
|
87
|
+
const views = [];
|
|
88
|
+
manifests.forEach((manifest, index) => {
|
|
89
|
+
if (manifest.kind === "View")
|
|
90
|
+
views.push({ manifest, index });
|
|
91
|
+
});
|
|
92
|
+
const notice = "// Generated by `mantle generate`. Do not edit by hand.";
|
|
93
|
+
const specImport = 'import type { Manifest } from "@aotter/mantle/spec";';
|
|
94
|
+
const declaration = `export const manifest = ${JSON.stringify(manifests, null, 2)} as const satisfies readonly Manifest[];`;
|
|
95
|
+
if (views.length === 0)
|
|
96
|
+
return [notice, specImport, "", declaration, ""].join("\n");
|
|
97
|
+
return [
|
|
98
|
+
notice,
|
|
99
|
+
'import type { CmsRuntime, HandlerContext } from "@aotter/mantle/runtime";',
|
|
100
|
+
specImport,
|
|
101
|
+
'import type * as MantleGenerated from "./types.js";',
|
|
102
|
+
"",
|
|
103
|
+
declaration,
|
|
104
|
+
"",
|
|
105
|
+
"export interface MantleViewOptions {",
|
|
106
|
+
" readonly page?: number;",
|
|
107
|
+
" readonly show?: number;",
|
|
108
|
+
" readonly ctx?: HandlerContext;",
|
|
109
|
+
"}",
|
|
110
|
+
"",
|
|
111
|
+
"export function bindMantleSite(runtime: CmsRuntime) {",
|
|
112
|
+
" return {",
|
|
113
|
+
" views: {",
|
|
114
|
+
...views.flatMap(({ manifest: view, index }) => {
|
|
115
|
+
const id = tsId(view.metadata.name);
|
|
116
|
+
const requiredParams = (view.spec.params?.required?.length ?? 0) > 0;
|
|
117
|
+
const requestType = view.spec.params
|
|
118
|
+
? `MantleViewOptions & { readonly params${requiredParams ? "" : "?"}: MantleGenerated.${namespace}.ViewParams_${id} }`
|
|
119
|
+
: "MantleViewOptions";
|
|
120
|
+
return [
|
|
121
|
+
` ${JSON.stringify(view.metadata.name)}: (request: ${requestType}${requiredParams ? "" : " = {}"}) =>`,
|
|
122
|
+
` runtime.executeView.execute<MantleGenerated.${namespace}.ViewRow_${id}>({`,
|
|
123
|
+
` view: manifest[${index}],`,
|
|
124
|
+
" ctx: request.ctx,",
|
|
125
|
+
" options: {",
|
|
126
|
+
...(view.spec.params ? [" params: request.params,"] : []),
|
|
127
|
+
" page: request.page,",
|
|
128
|
+
" show: request.show,",
|
|
129
|
+
" },",
|
|
130
|
+
" }),",
|
|
131
|
+
];
|
|
132
|
+
}),
|
|
133
|
+
" },",
|
|
134
|
+
" } as const;",
|
|
135
|
+
"}",
|
|
136
|
+
"",
|
|
137
|
+
].join("\n");
|
|
138
|
+
}
|
|
139
|
+
function emitTypes(manifests, namespace) {
|
|
140
|
+
const generated = EmitTypesUseCase.run({ manifests, namespace }).source
|
|
141
|
+
.replace("Generated by `mantle emit-types`", "Generated by `mantle generate`");
|
|
142
|
+
const procedures = manifests.filter((manifest) => manifest.kind === "Procedure" && manifest.spec.handler.kind === "ref");
|
|
143
|
+
if (procedures.length === 0)
|
|
144
|
+
return generated;
|
|
145
|
+
const handlers = new Map();
|
|
146
|
+
for (const procedure of procedures) {
|
|
147
|
+
const name = tsId(procedure.metadata.name);
|
|
148
|
+
const ref = procedure.spec.handler.kind === "ref" ? procedure.spec.handler.ref : "";
|
|
149
|
+
const types = handlers.get(ref) ?? { inputs: [], outputs: [] };
|
|
150
|
+
types.inputs.push(`${namespace}.ProcInput_${name}`);
|
|
151
|
+
types.outputs.push(`${namespace}.ProcOutput_${name}`);
|
|
152
|
+
handlers.set(ref, types);
|
|
153
|
+
}
|
|
154
|
+
return [
|
|
155
|
+
'import type { HandlerFn } from "@aotter/mantle/runtime";',
|
|
156
|
+
"",
|
|
157
|
+
generated.trimEnd(),
|
|
158
|
+
"",
|
|
159
|
+
"export type MantleHandlers<Env = unknown> = {",
|
|
160
|
+
...[...handlers].map(([ref, types]) => ` readonly ${JSON.stringify(ref)}: HandlerFn<${types.inputs.join(" | ")}, ${types.outputs.join(" | ")}, Env>;`),
|
|
161
|
+
"};",
|
|
162
|
+
"",
|
|
163
|
+
].join("\n");
|
|
164
|
+
}
|
|
165
|
+
function tsId(name) {
|
|
166
|
+
return name.replace(/[^a-zA-Z0-9_$]+/g, "_");
|
|
167
|
+
}
|
|
168
|
+
async function syncText(path, expected, check) {
|
|
169
|
+
const current = await readFile(path, "utf8").catch(() => null);
|
|
170
|
+
if (current === expected)
|
|
171
|
+
return true;
|
|
172
|
+
if (check)
|
|
173
|
+
return false;
|
|
174
|
+
await mkdir(dirname(path), { recursive: true });
|
|
175
|
+
await writeFile(path, expected, "utf8");
|
|
176
|
+
return true;
|
|
177
|
+
}
|
|
178
|
+
function message(error) {
|
|
179
|
+
return error instanceof Error ? error.message : String(error);
|
|
180
|
+
}
|
|
181
|
+
//# sourceMappingURL=generate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../src/generate.ts"],"names":[],"mappings":"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"}
|
package/dist/skills.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["../src/skills.ts"],"names":[],"mappings":"AAQA,wBAAsB,SAAS,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAgD3E"}
|
package/dist/skills.js
ADDED
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { mkdir, readFile, stat, writeFile } from "node:fs/promises";
|
|
2
|
+
import { dirname, join, relative, resolve } from "node:path";
|
|
3
|
+
import { fileURLToPath } from "node:url";
|
|
4
|
+
import { cwd, stderr, stdout } from "node:process";
|
|
5
|
+
import { parseArgs } from "node:util";
|
|
6
|
+
const PROJECT_SKILLS = ["develop", "plugin", "theme", "update"];
|
|
7
|
+
export async function runSkills(rawArgs) {
|
|
8
|
+
let check;
|
|
9
|
+
try {
|
|
10
|
+
const { values } = parseArgs({
|
|
11
|
+
args: [...rawArgs],
|
|
12
|
+
options: {
|
|
13
|
+
check: { type: "boolean" },
|
|
14
|
+
help: { type: "boolean", short: "h" },
|
|
15
|
+
},
|
|
16
|
+
});
|
|
17
|
+
if (values.help) {
|
|
18
|
+
printHelp();
|
|
19
|
+
return 0;
|
|
20
|
+
}
|
|
21
|
+
check = values.check === true;
|
|
22
|
+
}
|
|
23
|
+
catch (error) {
|
|
24
|
+
stderr.write(`${message(error)}\n`);
|
|
25
|
+
return 2;
|
|
26
|
+
}
|
|
27
|
+
try {
|
|
28
|
+
const sourceRoot = await skillSourceRoot();
|
|
29
|
+
let stale = false;
|
|
30
|
+
for (const skill of PROJECT_SKILLS) {
|
|
31
|
+
const expected = await readFile(join(sourceRoot, skill, "SKILL.md"), "utf8");
|
|
32
|
+
for (const tool of [".agent", ".claude"]) {
|
|
33
|
+
const target = resolve(cwd(), tool, "skills", `mantle-${skill}`, "SKILL.md");
|
|
34
|
+
const current = await readFile(target, "utf8").catch(() => null);
|
|
35
|
+
if (current === expected)
|
|
36
|
+
continue;
|
|
37
|
+
stale = true;
|
|
38
|
+
if (check) {
|
|
39
|
+
stderr.write(`Mantle skill is stale: ${relative(cwd(), target)}\n`);
|
|
40
|
+
continue;
|
|
41
|
+
}
|
|
42
|
+
await mkdir(dirname(target), { recursive: true });
|
|
43
|
+
await writeFile(target, expected, "utf8");
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
if (stale && check) {
|
|
47
|
+
stderr.write("Mantle skills are stale; run `mantle skills`.\n");
|
|
48
|
+
return 1;
|
|
49
|
+
}
|
|
50
|
+
if (!check)
|
|
51
|
+
stdout.write("Mantle skills projected.\n");
|
|
52
|
+
return 0;
|
|
53
|
+
}
|
|
54
|
+
catch (error) {
|
|
55
|
+
stderr.write(`mantle skills: ${message(error)}\n`);
|
|
56
|
+
return 2;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
function printHelp() {
|
|
60
|
+
stdout.write(`mantle skills — project version-matched Core skills
|
|
61
|
+
|
|
62
|
+
Usage: mantle skills [--check]
|
|
63
|
+
|
|
64
|
+
Options:
|
|
65
|
+
--check Fail without writing when projected skills are stale
|
|
66
|
+
-h, --help This help
|
|
67
|
+
`);
|
|
68
|
+
}
|
|
69
|
+
async function skillSourceRoot() {
|
|
70
|
+
const packageRoot = resolve(dirname(fileURLToPath(import.meta.url)), "..");
|
|
71
|
+
for (const candidate of [join(packageRoot, "skills"), resolve(packageRoot, "../../skills")]) {
|
|
72
|
+
if ((await stat(candidate).catch(() => null))?.isDirectory())
|
|
73
|
+
return candidate;
|
|
74
|
+
}
|
|
75
|
+
throw new Error("Core skills are missing from the installed package");
|
|
76
|
+
}
|
|
77
|
+
function message(error) {
|
|
78
|
+
return error instanceof Error ? error.message : String(error);
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=skills.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skills.js","sourceRoot":"","sources":["../src/skills.ts"],"names":[],"mappings":"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"}
|
package/dist/update.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../src/update.ts"],"names":[],"mappings":"AAwBA,wBAAsB,SAAS,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAkF3E"}
|