@beignet/cli 0.0.44 → 0.0.45
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/CHANGELOG.md +13 -0
- package/README.md +59 -7
- package/dist/choices.d.ts +4 -0
- package/dist/choices.d.ts.map +1 -1
- package/dist/choices.js +9 -0
- package/dist/choices.js.map +1 -1
- package/dist/db.d.ts.map +1 -1
- package/dist/db.js +8 -4
- package/dist/db.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +13 -13
- package/dist/index.js.map +1 -1
- package/dist/inspect.js +78 -21
- package/dist/inspect.js.map +1 -1
- package/dist/lib.d.ts +4 -1
- package/dist/lib.d.ts.map +1 -1
- package/dist/lib.js +1 -1
- package/dist/lib.js.map +1 -1
- package/dist/mcp.d.ts +2 -1
- package/dist/mcp.d.ts.map +1 -1
- package/dist/mcp.js +354 -3
- package/dist/mcp.js.map +1 -1
- package/dist/operational-lifecycle.d.ts +12 -0
- package/dist/operational-lifecycle.d.ts.map +1 -0
- package/dist/operational-lifecycle.js +39 -0
- package/dist/operational-lifecycle.js.map +1 -0
- package/dist/operational-path.d.ts +3 -0
- package/dist/operational-path.d.ts.map +1 -0
- package/dist/operational-path.js +26 -0
- package/dist/operational-path.js.map +1 -0
- package/dist/operational-process.d.ts +78 -0
- package/dist/operational-process.d.ts.map +1 -0
- package/dist/operational-process.js +228 -0
- package/dist/operational-process.js.map +1 -0
- package/dist/operational-runner.d.ts +2 -0
- package/dist/operational-runner.d.ts.map +1 -0
- package/dist/operational-runner.js +168 -0
- package/dist/operational-runner.js.map +1 -0
- package/dist/outbox.d.ts +14 -6
- package/dist/outbox.d.ts.map +1 -1
- package/dist/outbox.js +140 -124
- package/dist/outbox.js.map +1 -1
- package/dist/schedule.d.ts +2 -1
- package/dist/schedule.d.ts.map +1 -1
- package/dist/schedule.js +79 -81
- package/dist/schedule.js.map +1 -1
- package/dist/task.d.ts +2 -1
- package/dist/task.d.ts.map +1 -1
- package/dist/task.js +57 -61
- package/dist/task.js.map +1 -1
- package/dist/templates/agents.d.ts.map +1 -1
- package/dist/templates/agents.js +19 -6
- package/dist/templates/agents.js.map +1 -1
- package/dist/templates/server.d.ts.map +1 -1
- package/dist/templates/server.js +9 -2
- package/dist/templates/server.js.map +1 -1
- package/dist/templates/shadcn.d.ts.map +1 -1
- package/dist/templates/shadcn.js +3 -1
- package/dist/templates/shadcn.js.map +1 -1
- package/package.json +2 -2
- package/skills/app-structure/SKILL.md +19 -6
- package/src/choices.ts +19 -0
- package/src/db.ts +8 -4
- package/src/index.ts +19 -16
- package/src/inspect.ts +114 -26
- package/src/lib.ts +27 -1
- package/src/mcp.ts +457 -2
- package/src/operational-lifecycle.ts +56 -0
- package/src/operational-path.ts +35 -0
- package/src/operational-process.ts +454 -0
- package/src/operational-runner.ts +221 -0
- package/src/outbox.ts +154 -128
- package/src/schedule.ts +84 -89
- package/src/task.ts +58 -62
- package/src/templates/agents.ts +19 -6
- package/src/templates/server.ts +9 -2
- package/src/templates/shadcn.ts +3 -1
package/dist/task.js
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
|
-
import { readFile
|
|
1
|
+
import { readFile } from "node:fs/promises";
|
|
2
2
|
import path from "node:path";
|
|
3
3
|
import { createJiti } from "jiti";
|
|
4
4
|
import { loadBeignetConfig, normalizePath } from "./config.js";
|
|
5
5
|
import { flushOperationalErrorReporter, reportOperationalFailure, } from "./operational-error-reporting.js";
|
|
6
|
+
import { runWithOperationalCleanup } from "./operational-lifecycle.js";
|
|
7
|
+
import { resolveAppOperationalModulePath } from "./operational-path.js";
|
|
6
8
|
/**
|
|
7
9
|
* Run an app-owned operational task from the app's task registry.
|
|
8
10
|
*/
|
|
@@ -10,7 +12,7 @@ export async function runAppTask(options) {
|
|
|
10
12
|
const cwd = path.resolve(options.cwd ?? process.cwd());
|
|
11
13
|
const config = await loadBeignetConfig(cwd);
|
|
12
14
|
const modulePath = normalizePath(options.modulePath ?? config.paths.tasks);
|
|
13
|
-
const rawInput =
|
|
15
|
+
const rawInput = options.input === undefined ? {} : options.input;
|
|
14
16
|
const startedAt = performance.now();
|
|
15
17
|
const taskModule = await loadTaskModule(cwd, modulePath);
|
|
16
18
|
const task = findTask(taskModule.tasks, options.name, modulePath);
|
|
@@ -27,76 +29,70 @@ export async function runAppTask(options) {
|
|
|
27
29
|
const ctx = taskModule.createTaskContext
|
|
28
30
|
? await taskModule.createTaskContext(contextArgs)
|
|
29
31
|
: {};
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
"beignet.
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
32
|
+
return runWithOperationalCleanup({
|
|
33
|
+
operation: `Task "${task.name}"`,
|
|
34
|
+
cleanupLabel: "stopTaskContext",
|
|
35
|
+
run: async () => {
|
|
36
|
+
let output;
|
|
37
|
+
try {
|
|
38
|
+
output = await runTask(task, {
|
|
39
|
+
input: parsedInput,
|
|
40
|
+
ctx,
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
catch (error) {
|
|
44
|
+
await reportOperationalFailure({
|
|
45
|
+
ctx: toOperationalContext(ctx),
|
|
46
|
+
error,
|
|
47
|
+
reportOptions: {
|
|
48
|
+
level: "error",
|
|
49
|
+
mechanism: "beignet.task.cli",
|
|
50
|
+
handled: false,
|
|
51
|
+
tags: {
|
|
52
|
+
"beignet.kind": "task",
|
|
53
|
+
"beignet.task": task.name,
|
|
54
|
+
},
|
|
55
|
+
contexts: {
|
|
56
|
+
task: {
|
|
57
|
+
name: task.name,
|
|
58
|
+
tenant: options.tenant ?? null,
|
|
59
|
+
source: "beignet-cli",
|
|
60
|
+
},
|
|
55
61
|
},
|
|
56
62
|
},
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
}
|
|
63
|
+
});
|
|
64
|
+
throw error;
|
|
65
|
+
}
|
|
66
|
+
return {
|
|
67
|
+
schemaVersion: 1,
|
|
68
|
+
name: task.name,
|
|
69
|
+
cwd,
|
|
70
|
+
modulePath,
|
|
71
|
+
input: parsedInput,
|
|
72
|
+
...(options.tenant !== undefined ? { tenant: options.tenant } : {}),
|
|
73
|
+
output,
|
|
74
|
+
durationMs: Math.round(performance.now() - startedAt),
|
|
75
|
+
};
|
|
76
|
+
},
|
|
77
|
+
cleanup: async () => {
|
|
78
|
+
await flushOperationalErrorReporter(toOperationalContext(ctx));
|
|
79
|
+
await taskModule.stopTaskContext?.(ctx, contextArgs);
|
|
80
|
+
},
|
|
81
|
+
});
|
|
76
82
|
}
|
|
77
83
|
function toOperationalContext(ctx) {
|
|
78
84
|
return typeof ctx === "object" && ctx !== null
|
|
79
85
|
? ctx
|
|
80
86
|
: {};
|
|
81
87
|
}
|
|
82
|
-
function parseTaskInputFlag(input) {
|
|
83
|
-
if (input === undefined)
|
|
84
|
-
return {};
|
|
85
|
-
if (typeof input !== "string")
|
|
86
|
-
return input;
|
|
87
|
-
try {
|
|
88
|
-
return JSON.parse(input);
|
|
89
|
-
}
|
|
90
|
-
catch (error) {
|
|
91
|
-
throw new Error(`Invalid --input JSON: ${error instanceof Error ? error.message : String(error)}`);
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
88
|
async function loadTaskModule(cwd, modulePath) {
|
|
95
|
-
|
|
89
|
+
let absolutePath;
|
|
96
90
|
try {
|
|
97
|
-
await
|
|
91
|
+
absolutePath = await resolveAppOperationalModulePath(cwd, modulePath);
|
|
98
92
|
}
|
|
99
|
-
catch {
|
|
93
|
+
catch (error) {
|
|
94
|
+
if (error.code !== "ENOENT")
|
|
95
|
+
throw error;
|
|
100
96
|
throw new Error(`Could not find app task registry at ${modulePath}. Create it with beignet make task <feature.name> or configure paths.tasks in beignet.config.ts.`);
|
|
101
97
|
}
|
|
102
98
|
const tsconfigPath = path.join(cwd, "tsconfig.json");
|
package/dist/task.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"task.js","sourceRoot":"","sources":["../src/task.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,
|
|
1
|
+
{"version":3,"file":"task.js","sourceRoot":"","sources":["../src/task.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAClC,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC/D,OAAO,EACL,6BAA6B,EAE7B,wBAAwB,GACzB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAC;AACvE,OAAO,EAAE,+BAA+B,EAAE,MAAM,uBAAuB,CAAC;AAkCxE;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,OAA0B;IAE1B,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IACvD,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,GAAG,CAAC,CAAC;IAC5C,MAAM,UAAU,GAAG,aAAa,CAAC,OAAO,CAAC,UAAU,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC3E,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;IAClE,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;IACpC,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;IACzD,MAAM,IAAI,GAAG,QAAQ,CAAC,UAAU,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IAClE,0EAA0E;IAC1E,sDAAsD;IACtD,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAC;IACxE,MAAM,WAAW,GAAG,MAAM,cAAc,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACzD,MAAM,WAAW,GAAuB;QACtC,IAAI;QACJ,QAAQ,EAAE,IAAI,CAAC,IAAI;QACnB,KAAK,EAAE,WAAW;QAClB,MAAM,EAAE,OAAO,CAAC,MAAM;KACvB,CAAC;IACF,MAAM,GAAG,GAAG,UAAU,CAAC,iBAAiB;QACtC,CAAC,CAAC,MAAM,UAAU,CAAC,iBAAiB,CAAC,WAAW,CAAC;QACjD,CAAC,CAAC,EAAE,CAAC;IAEP,OAAO,yBAAyB,CAAC;QAC/B,SAAS,EAAE,SAAS,IAAI,CAAC,IAAI,GAAG;QAChC,YAAY,EAAE,iBAAiB;QAC/B,GAAG,EAAE,KAAK,IAAI,EAAE;YACd,IAAI,MAAe,CAAC;YACpB,IAAI,CAAC;gBACH,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,EAAE;oBAC3B,KAAK,EAAE,WAAW;oBAClB,GAAG;iBACJ,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,wBAAwB,CAAC;oBAC7B,GAAG,EAAE,oBAAoB,CAAC,GAAG,CAAC;oBAC9B,KAAK;oBACL,aAAa,EAAE;wBACb,KAAK,EAAE,OAAO;wBACd,SAAS,EAAE,kBAAkB;wBAC7B,OAAO,EAAE,KAAK;wBACd,IAAI,EAAE;4BACJ,cAAc,EAAE,MAAM;4BACtB,cAAc,EAAE,IAAI,CAAC,IAAI;yBAC1B;wBACD,QAAQ,EAAE;4BACR,IAAI,EAAE;gCACJ,IAAI,EAAE,IAAI,CAAC,IAAI;gCACf,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,IAAI;gCAC9B,MAAM,EAAE,aAAa;6BACtB;yBACF;qBACF;iBACF,CAAC,CAAC;gBACH,MAAM,KAAK,CAAC;YACd,CAAC;YAED,OAAO;gBACL,aAAa,EAAE,CAAC;gBAChB,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,GAAG;gBACH,UAAU;gBACV,KAAK,EAAE,WAAW;gBAClB,GAAG,CAAC,OAAO,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACnE,MAAM;gBACN,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;aACtD,CAAC;QACJ,CAAC;QACD,OAAO,EAAE,KAAK,IAAI,EAAE;YAClB,MAAM,6BAA6B,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,CAAC;YAC/D,MAAM,UAAU,CAAC,eAAe,EAAE,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;QACvD,CAAC;KACF,CAAC,CAAC;AACL,CAAC;AAED,SAAS,oBAAoB,CAAC,GAAY;IACxC,OAAO,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI;QAC5C,CAAC,CAAE,GAAwC;QAC3C,CAAC,CAAC,EAAE,CAAC;AACT,CAAC;AAED,KAAK,UAAU,cAAc,CAC3B,GAAW,EACX,UAAkB;IAElB,IAAI,YAAoB,CAAC;IACzB,IAAI,CAAC;QACH,YAAY,GAAG,MAAM,+BAA+B,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;IACxE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;YAAE,MAAM,KAAK,CAAC;QACpE,MAAM,IAAI,KAAK,CACb,uCAAuC,UAAU,kGAAkG,CACpJ,CAAC;IACJ,CAAC;IAED,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC;IACrD,MAAM,IAAI,GAAG,UAAU,CAAC,YAAY,EAAE;QACpC,aAAa,EAAE,CAAC,MAAM,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK;KACvE,CAAC,CAAC;IAEH,OAAO,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAe,CAAC;AACzD,CAAC;AAED,SAAS,QAAQ,CACf,KAAqC,EACrC,IAAY,EACZ,UAAkB;IAElB,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,iBAAiB,UAAU,6BAA6B,CAAC,CAAC;IAC5E,CAAC;IAED,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CACrB,CAAC,SAAS,EAAwB,EAAE,CAClC,OAAO,SAAS,KAAK,QAAQ;QAC7B,SAAS,KAAK,IAAI;QACjB,SAAqB,CAAC,IAAI,KAAK,MAAM;QACrC,SAAqB,CAAC,IAAI,KAAK,IAAI;QACpC,OAAQ,SAAqB,CAAC,MAAM,KAAK,UAAU,CACtD,CAAC;IAEF,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,SAAS,GAAG,KAAK;aACpB,MAAM,CACL,CAAC,SAAS,EAAwB,EAAE,CAClC,OAAO,SAAS,KAAK,QAAQ;YAC7B,SAAS,KAAK,IAAI;YACjB,SAAqB,CAAC,IAAI,KAAK,MAAM;YACtC,OAAQ,SAAqB,CAAC,IAAI,KAAK,QAAQ,CAClD;aACA,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC;aAClC,IAAI,EAAE,CAAC;QACV,MAAM,IAAI,KAAK,CACb,SAAS,CAAC,MAAM,GAAG,CAAC;YAClB,CAAC,CAAC,iBAAiB,IAAI,uBAAuB,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;YACrE,CAAC,CAAC,iBAAiB,IAAI,kCAAkC,UAAU,GAAG,CACzE,CAAC;IACJ,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,QAAgB;IACxC,IAAI,CAAC;QACH,MAAM,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACjC,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../../src/templates/agents.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AAExE;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../../src/templates/agents.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AAExE;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,CA8LrD;AAeD;;;;GAIG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,eAAe,GAAG,MAAM,CASrD"}
|
package/dist/templates/agents.js
CHANGED
|
@@ -75,7 +75,9 @@ events, listener registration, jobs, and outbox wiring. After changing the Drizz
|
|
|
75
75
|
\`infra/db/schema/\`, run \`${cli} db generate\` then \`${cli} db migrate\`.
|
|
76
76
|
When MCP is available, use \`db_schema_sync\` for Beignet provider table
|
|
77
77
|
re-exports and \`db\` for \`generate\`, \`migrate\`, \`seed\`, or \`reset\`
|
|
78
|
-
instead of falling back to a shell.
|
|
78
|
+
instead of falling back to a shell. Use \`task_run\`, \`schedule_run\`,
|
|
79
|
+
\`outbox_inspect\`, and \`outbox_run\` for registered operational workflows
|
|
80
|
+
and outbox recovery.
|
|
79
81
|
|
|
80
82
|
## The framework already solves these
|
|
81
83
|
|
|
@@ -88,7 +90,7 @@ apps have reimplemented by accident:
|
|
|
88
90
|
| Ports outside a request — auth callbacks, module-level helpers | \`const { ports } = await getServer()\` (dynamic \`import("@/server")\` breaks module cycles). Do not construct parallel provider clients or fall back to \`console.*\` when \`ports.logger\` exists. |
|
|
89
91
|
| Routes that cannot be contracts — webhooks, third-party callbacks, streaming | \`createWebhookRoute\`, \`createPaymentWebhookRoute\`, \`createScheduleRoute\`, \`createOutboxDrainRoute\` from \`@beignet/next\`; \`server.rawRoute(...)\` for anything else. All run the hooks pipeline — never hand-enforce rate limits in a route body. |
|
|
90
92
|
| Rate limiting or idempotency on a route | Declare \`metadata.rateLimit\` / \`metadata.idempotency\` on the contract (or the \`pipeline\` option on raw routes); hooks enforce it. |
|
|
91
|
-
| Tenant-owned repository access | Pass \`TenantScope\` through app-facing repository methods and unwrap it with \`tenantScopeId(scope)\` in adapters. Raw provider-correlation lookups such as webhook customer IDs are not tenant authorization. |
|
|
93
|
+
| Tenant-owned repository access | Resolve the request tenant from membership-backed app state or provider claims the app explicitly treats as authoritative and current; never trust caller-supplied tenant IDs or unverified session fields. Pass \`TenantScope\` through app-facing repository methods and unwrap it with \`tenantScopeId(scope)\` in adapters. Raw provider-correlation lookups such as webhook customer IDs are not tenant authorization. |
|
|
92
94
|
| Route-level tests that exercise real hooks | \`createTestApp\` / \`createTestRequester\` from \`@beignet/web/testing\`. Bind the rate-limit and idempotency ports in the test app when asserting 429s or replay. |
|
|
93
95
|
| Environment configuration | \`lib/env.ts\` (\`createEnv\`), never ad-hoc \`process.env\` reads in app code. |
|
|
94
96
|
| The same lookup runs several times in one request — context, policy, use case | Wrap the repository read in \`createMemo(...)\` from \`@beignet/core/memo\` where the adapter is wired in infra. The cache lives for exactly one request; pair mutations with \`.invalidate(...)\`. Never hand-roll per-request caches. |
|
|
@@ -153,10 +155,13 @@ skill-loading block.
|
|
|
153
155
|
## MCP server
|
|
154
156
|
|
|
155
157
|
\`.mcp.json\` registers the app-local \`@beignet/cli\` bin at
|
|
156
|
-
\`./node_modules/.bin/beignet mcp\`, which exposes
|
|
157
|
-
|
|
158
|
-
\`check\`, \`db\`, \`db_schema_sync\`, \`
|
|
158
|
+
\`./node_modules/.bin/beignet mcp\`, which exposes app context, validation,
|
|
159
|
+
generation, and operations as structured tools named exactly: \`app_map\`,
|
|
160
|
+
\`explain\`, \`check\`, \`db\`, \`db_schema_sync\`, \`task_run\`,
|
|
161
|
+
\`schedule_run\`, \`outbox_inspect\`, \`outbox_run\`, \`routes\`, \`doctor\`,
|
|
159
162
|
\`doctor_fix_plan\`, \`doctor_fix\`, \`lint\`, \`make\`, \`provider_add\`.
|
|
163
|
+
It also publishes \`beignet://app/guidance\` and focused
|
|
164
|
+
\`beignet://app/features/{feature}\` resources.
|
|
160
165
|
Use \`doctor_fix_plan\` to inspect
|
|
161
166
|
stable operation IDs, hashes, exact patches, and current diagnostics before
|
|
162
167
|
passing its \`planId\` and optional \`fixIds\` to \`doctor_fix\`. Guarded
|
|
@@ -174,7 +179,15 @@ with \`generate\` and \`migrate\`; database output is bounded, commands time
|
|
|
174
179
|
out, and cancellation stops the active process tree. Treat \`seed\` and
|
|
175
180
|
especially \`reset\` as app-owned mutations. Lifecycle \`dryRun\` validates
|
|
176
181
|
and reports the script without executing it; it does not simulate SQL or data
|
|
177
|
-
changes.
|
|
182
|
+
changes. Use \`task_run\` and \`schedule_run\` for registered operational
|
|
183
|
+
workflows, \`outbox_inspect\` for read-only \`list\` and \`show\`, and
|
|
184
|
+
\`outbox_run\` for \`drain\`, \`requeue\`, \`purge\`, or \`prune\`; purge and
|
|
185
|
+
prune support \`dryRun\`. Operational commands run in isolated process trees
|
|
186
|
+
with bounded results, cancellation, and timeouts. Optional \`module\` overrides
|
|
187
|
+
must remain inside the app root where the MCP server started. Cancellation and
|
|
188
|
+
timeouts cannot roll back side effects that already completed. Inspect app
|
|
189
|
+
state before retrying an interrupted operation or one that reports a cleanup
|
|
190
|
+
failure. Clients that do not read \`.mcp.json\` can use the same command from
|
|
178
191
|
the app root; use \`${cli} mcp\` only for terminal debugging.
|
|
179
192
|
`;
|
|
180
193
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agents.js","sourceRoot":"","sources":["../../src/templates/agents.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,aAAa,EAAwB,MAAM,aAAa,CAAC;AAExE;;;;;GAKG;AACH,MAAM,UAAU,QAAQ,CAAC,GAAoB;IAC3C,MAAM,GAAG,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;IAC/B,MAAM,IAAI,GACR,GAAG,CAAC,cAAc,KAAK,KAAK;QAC1B,CAAC,CAAC,cAAc;QAChB,CAAC,CAAC,GAAG,GAAG,CAAC,cAAc,WAAW,CAAC;IACvC,MAAM,IAAI,GACR,GAAG,CAAC,cAAc,KAAK,KAAK;QAC1B,CAAC,CAAC,cAAc;QAChB,CAAC,CAAC,GAAG,GAAG,CAAC,cAAc,WAAW,CAAC;IACvC,MAAM,MAAM,GACV,GAAG,CAAC,cAAc,KAAK,KAAK;QAC1B,CAAC,CAAC,gBAAgB;QAClB,CAAC,CAAC,GAAG,GAAG,CAAC,cAAc,aAAa,CAAC;IACzC,MAAM,SAAS,GACb,GAAG,CAAC,cAAc,KAAK,KAAK;QAC1B,CAAC,CAAC,mBAAmB;QACrB,CAAC,CAAC,GAAG,GAAG,CAAC,cAAc,gBAAgB,CAAC;IAC5C,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;IACjC,MAAM,mBAAmB,GAAG,GAAG,CAAC,GAAG;QACjC,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC,yQAAyQ;YACzQ,6TAA6T;YAC7T,+SAA+S,CAAC;IACpT,MAAM,cAAc,GAAG,GAAG,CAAC,GAAG;QAC5B,CAAC,CAAC,uOAAuO;QACzO,CAAC,CAAC,wSAAwS,CAAC;IAE7S,OAAO,KAAK,GAAG,CAAC,IAAI;;;;;;;;;;;;;;;;;;;;;;;;mCAwBa,GAAG,oBAAoB,GAAG;IACzD,GAAG,uBAAuB,GAAG,uBAAuB,GAAG;IACvD,GAAG,uBAAuB,GAAG;;;;;IAK7B,GAAG;SACE,GAAG;IACR,GAAG;sCAC+B,GAAG;;;;;IAKrC,GAAG;kDAC2C,GAAG;uBAC9B,GAAG;;;8BAGI,GAAG,yBAAyB,GAAG
|
|
1
|
+
{"version":3,"file":"agents.js","sourceRoot":"","sources":["../../src/templates/agents.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,aAAa,EAAwB,MAAM,aAAa,CAAC;AAExE;;;;;GAKG;AACH,MAAM,UAAU,QAAQ,CAAC,GAAoB;IAC3C,MAAM,GAAG,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;IAC/B,MAAM,IAAI,GACR,GAAG,CAAC,cAAc,KAAK,KAAK;QAC1B,CAAC,CAAC,cAAc;QAChB,CAAC,CAAC,GAAG,GAAG,CAAC,cAAc,WAAW,CAAC;IACvC,MAAM,IAAI,GACR,GAAG,CAAC,cAAc,KAAK,KAAK;QAC1B,CAAC,CAAC,cAAc;QAChB,CAAC,CAAC,GAAG,GAAG,CAAC,cAAc,WAAW,CAAC;IACvC,MAAM,MAAM,GACV,GAAG,CAAC,cAAc,KAAK,KAAK;QAC1B,CAAC,CAAC,gBAAgB;QAClB,CAAC,CAAC,GAAG,GAAG,CAAC,cAAc,aAAa,CAAC;IACzC,MAAM,SAAS,GACb,GAAG,CAAC,cAAc,KAAK,KAAK;QAC1B,CAAC,CAAC,mBAAmB;QACrB,CAAC,CAAC,GAAG,GAAG,CAAC,cAAc,gBAAgB,CAAC;IAC5C,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;IACjC,MAAM,mBAAmB,GAAG,GAAG,CAAC,GAAG;QACjC,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC,yQAAyQ;YACzQ,6TAA6T;YAC7T,+SAA+S,CAAC;IACpT,MAAM,cAAc,GAAG,GAAG,CAAC,GAAG;QAC5B,CAAC,CAAC,uOAAuO;QACzO,CAAC,CAAC,wSAAwS,CAAC;IAE7S,OAAO,KAAK,GAAG,CAAC,IAAI;;;;;;;;;;;;;;;;;;;;;;;;mCAwBa,GAAG,oBAAoB,GAAG;IACzD,GAAG,uBAAuB,GAAG,uBAAuB,GAAG;IACvD,GAAG,uBAAuB,GAAG;;;;;IAK7B,GAAG;SACE,GAAG;IACR,GAAG;sCAC+B,GAAG;;;;;IAKrC,GAAG;kDAC2C,GAAG;uBAC9B,GAAG;;;8BAGI,GAAG,yBAAyB,GAAG;;;;;;;;;;;;;eAa9C,mBAAmB;;;;;;;;;;;;;;;;EAgBhC,GAAG;;;YAGO,GAAG;IACX,GAAG;;oDAE6C,MAAM;yCACjB,IAAI,SAAS,GAAG;IACrD,GAAG,yBAAyB,IAAI,SAAS,SAAS;;;0CAGZ,GAAG;OACtC,GAAG;;;;;;;;;;;;;EAaR,MAAM;EACN,MAAM;;;kEAG0D,cAAc;QACxE,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAwCV,GAAG;;;;;;;;;;;;;;;;;sBAiBe,GAAG;CACxB,CAAC;AACF,CAAC;AAED,SAAS,YAAY,CAAC,GAAoB;IACxC,QAAQ,GAAG,CAAC,cAAc,EAAE,CAAC;QAC3B,KAAK,KAAK;YACR,OAAO,6BAA6B,CAAC;QACvC,KAAK,MAAM;YACT,OAAO,kCAAkC,CAAC;QAC5C,KAAK,MAAM;YACT,OAAO,kCAAkC,CAAC;QAC5C;YACE,OAAO,8BAA8B,CAAC;IAC1C,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,OAAO,CAAC,IAAqB;IAC3C,OAAO,IAAI,CAAC;QACV,UAAU,EAAE;YACV,OAAO,EAAE;gBACP,OAAO,EAAE,6BAA6B;gBACtC,IAAI,EAAE,CAAC,KAAK,CAAC;aACd;SACF;KACF,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/templates/server.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,KAAK,eAAe,EACrB,MAAM,aAAa,CAAC;AAErB,wBAAgB,eAAe,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,CAuD5D;AAED,wBAAgB,KAAK,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,CA0ClD;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,CA+CvD;AAED,wBAAgB,GAAG,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,CAgEhD;AAED,wBAAgB,aAAa,IAAI,MAAM,CAStC;AAED,wBAAgB,eAAe,IAAI,MAAM,CAuBxC;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,CA0EvD;AAED,wBAAgB,MAAM,IAAI,MAAM,CA8E/B;AAED,QAAA,MAAM,KAAK;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/templates/server.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,KAAK,eAAe,EACrB,MAAM,aAAa,CAAC;AAErB,wBAAgB,eAAe,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,CAuD5D;AAED,wBAAgB,KAAK,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,CA0ClD;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,CA+CvD;AAED,wBAAgB,GAAG,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,CAgEhD;AAED,wBAAgB,aAAa,IAAI,MAAM,CAStC;AAED,wBAAgB,eAAe,IAAI,MAAM,CAuBxC;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,CA0EvD;AAED,wBAAgB,MAAM,IAAI,MAAM,CA8E/B;AAED,QAAA,MAAM,KAAK;;;;;;;;;;;;;;;;;;;;CAoYV,CAAC;AAEF,OAAO,EAAE,KAAK,IAAI,WAAW,EAAE,CAAC"}
|
package/dist/templates/server.js
CHANGED
|
@@ -580,7 +580,9 @@ export type TenantResolutionInput = {
|
|
|
580
580
|
export function resolveRequestTenant({
|
|
581
581
|
auth,
|
|
582
582
|
}: TenantResolutionInput): ActivityTenant | undefined {
|
|
583
|
-
const tenantId = auth
|
|
583
|
+
const tenantId = auth
|
|
584
|
+
? tenantIdFromAuthoritativeAuthClaims(auth)
|
|
585
|
+
: undefined;
|
|
584
586
|
|
|
585
587
|
return tenantId ? createTenant(tenantId) : undefined;
|
|
586
588
|
}
|
|
@@ -593,7 +595,12 @@ export function resolveServiceTenant(
|
|
|
593
595
|
return normalizedTenantId ? createTenant(normalizedTenantId) : undefined;
|
|
594
596
|
}
|
|
595
597
|
|
|
596
|
-
|
|
598
|
+
/**
|
|
599
|
+
* Resolve only provider-issued claims that the application treats as
|
|
600
|
+
* authoritative. Multi-tenant apps must replace this starter seam with a
|
|
601
|
+
* membership-backed lookup before authorizing tenant-owned resources.
|
|
602
|
+
*/
|
|
603
|
+
function tenantIdFromAuthoritativeAuthClaims(auth: AuthSession) {
|
|
597
604
|
return (
|
|
598
605
|
stringProperty(auth.session, "tenantId") ??
|
|
599
606
|
stringProperty(auth.session, "organizationId") ??
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/templates/server.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/templates/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shadcn.d.ts","sourceRoot":"","sources":["../../src/templates/shadcn.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"shadcn.d.ts","sourceRoot":"","sources":["../../src/templates/shadcn.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AA8hBhD,wBAAgB,mBAAmB,IAAI,YAAY,EAAE,CAcpD;AAED,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAQrD,CAAC;AAEF,eAAO,MAAM,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAGxD,CAAC"}
|
package/dist/templates/shadcn.js
CHANGED
|
@@ -179,7 +179,9 @@ const appGlobalsCss = `@import "tailwindcss";
|
|
|
179
179
|
}
|
|
180
180
|
}
|
|
181
181
|
`;
|
|
182
|
-
const uiButton = `
|
|
182
|
+
const uiButton = `"use client";
|
|
183
|
+
|
|
184
|
+
import { cva, type VariantProps } from "class-variance-authority";
|
|
183
185
|
import { Slot } from "radix-ui";
|
|
184
186
|
import type * as React from "react";
|
|
185
187
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shadcn.js","sourceRoot":"","sources":["../../src/templates/shadcn.ts"],"names":[],"mappings":"AAEA;;;;;;;;;GASG;AAEH,MAAM,aAAa,GAAG;;;;;;;CAOrB,CAAC;AAEF,MAAM,cAAc,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;CAyBtB,CAAC;AAEF,MAAM,QAAQ,GAAG;;;;;;CAMhB,CAAC;AAEF,MAAM,aAAa,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiIrB,CAAC;AAEF,MAAM,QAAQ,GAAG
|
|
1
|
+
{"version":3,"file":"shadcn.js","sourceRoot":"","sources":["../../src/templates/shadcn.ts"],"names":[],"mappings":"AAEA;;;;;;;;;GASG;AAEH,MAAM,aAAa,GAAG;;;;;;;CAOrB,CAAC;AAEF,MAAM,cAAc,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;CAyBtB,CAAC;AAEF,MAAM,QAAQ,GAAG;;;;;;CAMhB,CAAC;AAEF,MAAM,aAAa,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiIrB,CAAC;AAEF,MAAM,QAAQ,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqEhB,CAAC;AAEF,MAAM,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuGd,CAAC;AAEF,MAAM,UAAU,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgClB,CAAC;AAEF,MAAM,cAAc,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiEtB,CAAC;AAEF,MAAM,OAAO,GAAG;;;;;;;;;;;;;;;;;;;CAmBf,CAAC;AAEF,MAAM,OAAO,GAAG;;;;;;;;;;;;;;;;;;;;;;;;CAwBf,CAAC;AAEF,MAAM,WAAW,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4BnB,CAAC;AAEF,MAAM,UAAU,mBAAmB;IACjC,OAAO;QACL,EAAE,IAAI,EAAE,oBAAoB,EAAE,OAAO,EAAE,aAAa,EAAE;QACtD,EAAE,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,cAAc,EAAE;QACpD,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,QAAQ,EAAE;QAC3C,EAAE,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,aAAa,EAAE;QACnD,EAAE,IAAI,EAAE,0BAA0B,EAAE,OAAO,EAAE,QAAQ,EAAE;QACvD,EAAE,IAAI,EAAE,wBAAwB,EAAE,OAAO,EAAE,MAAM,EAAE;QACnD,EAAE,IAAI,EAAE,4BAA4B,EAAE,OAAO,EAAE,UAAU,EAAE;QAC3D,EAAE,IAAI,EAAE,iCAAiC,EAAE,OAAO,EAAE,cAAc,EAAE;QACpE,EAAE,IAAI,EAAE,yBAAyB,EAAE,OAAO,EAAE,OAAO,EAAE;QACrD,EAAE,IAAI,EAAE,yBAAyB,EAAE,OAAO,EAAE,OAAO,EAAE;QACrD,EAAE,IAAI,EAAE,6BAA6B,EAAE,OAAO,EAAE,WAAW,EAAE;KAC9D,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,kBAAkB,GAA2B;IACxD,0BAA0B,EAAE,QAAQ;IACpC,IAAI,EAAE,QAAQ;IACd,cAAc,EAAE,SAAS;IACzB,UAAU,EAAE,QAAQ;IACpB,MAAM,EAAE,QAAQ;IAChB,gBAAgB,EAAE,QAAQ;IAC1B,gBAAgB,EAAE,QAAQ;CAC3B,CAAC;AAEF,MAAM,CAAC,MAAM,qBAAqB,GAA2B;IAC3D,sBAAsB,EAAE,QAAQ;IAChC,WAAW,EAAE,QAAQ;CACtB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@beignet/cli",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.45",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "CLI for creating and maintaining Beignet apps.",
|
|
6
6
|
"main": "./dist/lib.js",
|
|
@@ -69,7 +69,7 @@
|
|
|
69
69
|
"tsx": "^4.22.4"
|
|
70
70
|
},
|
|
71
71
|
"dependencies": {
|
|
72
|
-
"@beignet/core": "^0.0.
|
|
72
|
+
"@beignet/core": "^0.0.45",
|
|
73
73
|
"@clack/prompts": "^1.5.1",
|
|
74
74
|
"@modelcontextprotocol/sdk": "^1.29.0",
|
|
75
75
|
"@stricli/core": "^1.2.7",
|
|
@@ -190,8 +190,11 @@ Generated apps register:
|
|
|
190
190
|
```
|
|
191
191
|
|
|
192
192
|
The MCP server exposes `app_map`, `explain`, `check`, `db`,
|
|
193
|
-
`db_schema_sync`, `
|
|
194
|
-
`make`, and
|
|
193
|
+
`db_schema_sync`, `task_run`, `schedule_run`, `outbox_inspect`, `outbox_run`,
|
|
194
|
+
`routes`, `doctor`, `doctor_fix_plan`, `doctor_fix`, `lint`, `make`, and
|
|
195
|
+
`provider_add`. It also publishes `beignet://app/guidance` and the
|
|
196
|
+
`beignet://app/features/{feature}` resource template for bounded app-local
|
|
197
|
+
instructions and focused feature maps.
|
|
195
198
|
`doctor_fix_plan` is read-only and returns guarded repair operation IDs,
|
|
196
199
|
hashes, patches, a plan ID, and current diagnostics; pass that ID and optional
|
|
197
200
|
`fixIds` to `doctor_fix`. Guarded apply returns the same plan metadata and
|
|
@@ -212,9 +215,18 @@ accepts `{ dialect?, tables?, output?, dryRun? }` and returns the matching
|
|
|
212
215
|
`beignet db schema sync --json` report. For lifecycle commands, `dryRun`
|
|
213
216
|
validates and reports the app-owned script without executing it; it does not
|
|
214
217
|
simulate SQL or data changes. `reset` remains environment-sensitive even
|
|
215
|
-
though the generated entrypoint has a production guard. `
|
|
216
|
-
|
|
217
|
-
|
|
218
|
+
though the generated entrypoint has a production guard. `task_run` and
|
|
219
|
+
`schedule_run` execute registered app workflows. Use `outbox_inspect` for
|
|
220
|
+
read-only `list` and `show`, and `outbox_run` for state-changing `drain`,
|
|
221
|
+
`requeue`, `purge`, and `prune`; purge and prune support `dryRun`. Operational
|
|
222
|
+
tools isolate app code, bound structured results, and stop the complete process
|
|
223
|
+
tree on request cancellation or timeout. Optional operational `module`
|
|
224
|
+
overrides must stay inside the app root where the MCP server started.
|
|
225
|
+
Cancellation and timeouts cannot roll back side effects that already
|
|
226
|
+
completed. Inspect app state before retrying an interrupted operation or one
|
|
227
|
+
that reports a cleanup failure. `doctor`, `lint`, and their JSON output match
|
|
228
|
+
the CLI's `--json` shape. Run MCP clients from the app root so the local CLI
|
|
229
|
+
version is used.
|
|
218
230
|
|
|
219
231
|
## Validation Loop
|
|
220
232
|
|
|
@@ -237,7 +249,8 @@ When MCP is available, call `check` after edits to run the full validation loop
|
|
|
237
249
|
through the app-local CLI without reconstructing these commands individually.
|
|
238
250
|
For a generated persistent resource, the complete structured workflow is
|
|
239
251
|
`app_map` → `explain` → `make` → `db_schema_sync` when provider tables changed
|
|
240
|
-
→ `db` generate → `db` migrate → `
|
|
252
|
+
→ `db` generate → `db` migrate → the relevant `task_run`, `schedule_run`, or
|
|
253
|
+
outbox tool when operational work is required → `check`.
|
|
241
254
|
|
|
242
255
|
For generated app template changes inside the Beignet monorepo, also run:
|
|
243
256
|
|
package/src/choices.ts
CHANGED
|
@@ -5,6 +5,11 @@
|
|
|
5
5
|
* templates or generators at startup.
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
+
import type {
|
|
9
|
+
OutboxMessageKind,
|
|
10
|
+
OutboxMessageStatus,
|
|
11
|
+
} from "@beignet/core/outbox";
|
|
12
|
+
|
|
8
13
|
function defineExhaustiveChoices<Choice extends string>() {
|
|
9
14
|
return <const Choices extends readonly Choice[]>(
|
|
10
15
|
choices: Exclude<Choice, Choices[number]> extends never ? Choices : never,
|
|
@@ -84,6 +89,20 @@ export const databaseSchemaTableChoices =
|
|
|
84
89
|
"idempotency",
|
|
85
90
|
"outbox",
|
|
86
91
|
]);
|
|
92
|
+
|
|
93
|
+
/** Outbox statuses accepted by CLI and MCP inspection filters. */
|
|
94
|
+
export const outboxMessageStatusChoices =
|
|
95
|
+
defineExhaustiveChoices<OutboxMessageStatus>()([
|
|
96
|
+
"pending",
|
|
97
|
+
"claimed",
|
|
98
|
+
"delivered",
|
|
99
|
+
"deadLettered",
|
|
100
|
+
]);
|
|
101
|
+
|
|
102
|
+
/** Outbox message kinds accepted by CLI and MCP inspection filters. */
|
|
103
|
+
export const outboxMessageKindChoices =
|
|
104
|
+
defineExhaustiveChoices<OutboxMessageKind>()(["event", "job"]);
|
|
105
|
+
|
|
87
106
|
/**
|
|
88
107
|
* Provider setup presets supported by `beignet provider add`.
|
|
89
108
|
*/
|
package/src/db.ts
CHANGED
|
@@ -573,6 +573,7 @@ export function spawnCommand(
|
|
|
573
573
|
return new Promise((resolve, reject) => {
|
|
574
574
|
let settled = false;
|
|
575
575
|
let timedOut = false;
|
|
576
|
+
let abortError: Error | undefined;
|
|
576
577
|
let timeout: ReturnType<typeof setTimeout> | undefined;
|
|
577
578
|
let forceKillTimeout: ReturnType<typeof setTimeout> | undefined;
|
|
578
579
|
const ownsProcessGroup = commandOwnsProcessGroup(process.platform, {
|
|
@@ -595,11 +596,10 @@ export function spawnCommand(
|
|
|
595
596
|
options.signal?.removeEventListener("abort", abort);
|
|
596
597
|
};
|
|
597
598
|
const abort = () => {
|
|
598
|
-
if (settled) return;
|
|
599
|
-
|
|
599
|
+
if (settled || abortError) return;
|
|
600
|
+
abortError = commandAbortError(options.signal);
|
|
600
601
|
terminateChild(child, "SIGKILL", ownsProcessGroup);
|
|
601
602
|
cleanup();
|
|
602
|
-
reject(commandAbortError(options.signal));
|
|
603
603
|
};
|
|
604
604
|
|
|
605
605
|
if (options.captureOutput) {
|
|
@@ -611,7 +611,7 @@ export function spawnCommand(
|
|
|
611
611
|
if (settled) return;
|
|
612
612
|
settled = true;
|
|
613
613
|
cleanup();
|
|
614
|
-
reject(error);
|
|
614
|
+
reject(abortError ?? error);
|
|
615
615
|
});
|
|
616
616
|
child.on("close", (code) => {
|
|
617
617
|
if (settled) return;
|
|
@@ -620,6 +620,10 @@ export function spawnCommand(
|
|
|
620
620
|
}
|
|
621
621
|
settled = true;
|
|
622
622
|
cleanup();
|
|
623
|
+
if (abortError) {
|
|
624
|
+
reject(abortError);
|
|
625
|
+
return;
|
|
626
|
+
}
|
|
623
627
|
resolve({
|
|
624
628
|
exitCode: timedOut ? 1 : (code ?? 1),
|
|
625
629
|
...(options.captureOutput
|
package/src/index.ts
CHANGED
|
@@ -33,6 +33,8 @@ import {
|
|
|
33
33
|
type MakeFeatureRecipe,
|
|
34
34
|
makeFeatureAddonChoices,
|
|
35
35
|
makeFeatureRecipeChoices,
|
|
36
|
+
outboxMessageKindChoices,
|
|
37
|
+
outboxMessageStatusChoices,
|
|
36
38
|
type PackageManager,
|
|
37
39
|
type ProviderPresetName,
|
|
38
40
|
packageManagerChoices,
|
|
@@ -171,21 +173,9 @@ type OutboxDrainFlags = {
|
|
|
171
173
|
cwd?: string;
|
|
172
174
|
};
|
|
173
175
|
|
|
174
|
-
type OutboxMessageStatus =
|
|
176
|
+
type OutboxMessageStatus = (typeof outboxMessageStatusChoices)[number];
|
|
175
177
|
|
|
176
|
-
type OutboxMessageKind =
|
|
177
|
-
|
|
178
|
-
const outboxMessageStatusChoices = [
|
|
179
|
-
"pending",
|
|
180
|
-
"claimed",
|
|
181
|
-
"delivered",
|
|
182
|
-
"deadLettered",
|
|
183
|
-
] as const satisfies readonly OutboxMessageStatus[];
|
|
184
|
-
|
|
185
|
-
const outboxMessageKindChoices = [
|
|
186
|
-
"event",
|
|
187
|
-
"job",
|
|
188
|
-
] as const satisfies readonly OutboxMessageKind[];
|
|
178
|
+
type OutboxMessageKind = (typeof outboxMessageKindChoices)[number];
|
|
189
179
|
|
|
190
180
|
type OutboxListFlags = {
|
|
191
181
|
json?: boolean;
|
|
@@ -294,6 +284,19 @@ const parseDate = (input: string): Date => {
|
|
|
294
284
|
}
|
|
295
285
|
return value;
|
|
296
286
|
};
|
|
287
|
+
const parseJsonFlag = (
|
|
288
|
+
input: string | undefined,
|
|
289
|
+
flag: "--input" | "--payload",
|
|
290
|
+
): unknown => {
|
|
291
|
+
if (input === undefined) return undefined;
|
|
292
|
+
try {
|
|
293
|
+
return JSON.parse(input) as unknown;
|
|
294
|
+
} catch (error) {
|
|
295
|
+
throw new Error(
|
|
296
|
+
`Invalid ${flag} JSON: ${error instanceof Error ? error.message : String(error)}`,
|
|
297
|
+
);
|
|
298
|
+
}
|
|
299
|
+
};
|
|
297
300
|
|
|
298
301
|
const createForceFlag = {
|
|
299
302
|
kind: "boolean",
|
|
@@ -1446,7 +1449,7 @@ const taskRunCommand = buildCommand<TaskRunFlags, [string], CliContext>({
|
|
|
1446
1449
|
const result = await runAppTask({
|
|
1447
1450
|
name,
|
|
1448
1451
|
cwd: flags.cwd,
|
|
1449
|
-
input: flags.input,
|
|
1452
|
+
input: parseJsonFlag(flags.input, "--input"),
|
|
1450
1453
|
tenant: flags.tenant,
|
|
1451
1454
|
modulePath: flags.module,
|
|
1452
1455
|
});
|
|
@@ -1698,7 +1701,7 @@ const scheduleRunCommand = buildCommand<ScheduleRunFlags, [string], CliContext>(
|
|
|
1698
1701
|
name,
|
|
1699
1702
|
cwd: flags.cwd,
|
|
1700
1703
|
modulePath: flags.module,
|
|
1701
|
-
payload: flags.payload,
|
|
1704
|
+
payload: parseJsonFlag(flags.payload, "--payload"),
|
|
1702
1705
|
id: flags.runId,
|
|
1703
1706
|
attempt: flags.attempt,
|
|
1704
1707
|
scheduledAt: flags.scheduledAt,
|