create-relkit 0.1.0 → 0.3.0
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/dist/generate-files.d.ts.map +1 -1
- package/dist/generate-files.js +32 -2
- package/dist/generate-files.js.map +1 -1
- package/dist/options.d.ts +1 -1
- package/dist/options.d.ts.map +1 -1
- package/dist/options.js +3 -3
- package/dist/options.js.map +1 -1
- package/dist/templates/default/README.md +1 -1
- package/dist/templates/default/v1/agent/README.md +4 -5
- package/dist/templates/default/v1/agent/package.json +5 -7
- package/dist/templates/default/v1/agent/relkit.config.ts +18 -16
- package/dist/templates/default/v1/agent/tests/fixtures/mcp-options.ts +2 -2
- package/dist/templates/default/v1/agent/tests/integration/hello.route.test.ts +6 -1
- package/dist/templates/default/v1/agent/tsconfig.json +0 -1
- package/dist/templates/default/v1/api/.env.example +0 -3
- package/dist/templates/default/v1/api/README.md +2 -4
- package/dist/templates/default/v1/api/package.json +4 -8
- package/dist/templates/default/v1/api/relkit.config.ts +5 -13
- package/dist/templates/default/v1/api/src/orders/functions/create-order.function.ts +1 -7
- package/dist/templates/default/v1/api/src/orders/service.ts +0 -2
- package/dist/templates/default/v1/api/src/platform/env.ts +0 -3
- package/dist/templates/default/v1/api/tests/integration/orders.route.test.ts +0 -3
- package/dist/templates/default/v1/api/tests/unit/orders.function.test.ts +6 -21
- package/dist/templates/default/v1/api/tsconfig.json +0 -1
- package/dist/templates/default/v1/minimal/README.md +2 -3
- package/dist/templates/default/v1/minimal/package.json +4 -7
- package/dist/templates/default/v1/minimal/relkit.config.ts +5 -4
- package/dist/templates/default/v1/minimal/tsconfig.json +0 -1
- package/package.json +1 -1
- package/dist/templates/default/v1/api/src/orders/events/order-created.event.ts +0 -18
- package/dist/templates/default/v1/api/src/orders/functions/order-audit.function.ts +0 -15
- package/dist/templates/default/v1/api/src/orders/functions/order-confirmation.function.ts +0 -15
- package/dist/templates/default/v1/api/tests/integration/order-events.test.ts +0 -63
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate-files.d.ts","sourceRoot":"","sources":["../src/generate-files.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAKlD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC3B;AAED,wBAAsB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAiBhF;AAED,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"generate-files.d.ts","sourceRoot":"","sources":["../src/generate-files.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAKlD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC3B;AAED,wBAAsB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAiBhF;AAED,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAc1F;AAyCD,6FAA6F;AAC7F,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,kBAAkB,CAAC,CAmB7B;AAED,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CASjE;AAED,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAWxF;AAED,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAc5F;AAED,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAUhE;AAED,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,SAAO,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAUtF;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAM9C"}
|
package/dist/generate-files.js
CHANGED
|
@@ -23,10 +23,40 @@ export async function copyTemplate(source, target) {
|
|
|
23
23
|
export async function customizeProject(root, options) {
|
|
24
24
|
await replaceOnce(join(root, "package.json"), '"name": "my-app"', `"name": ${JSON.stringify(options.name)}`);
|
|
25
25
|
await replaceOnce(join(root, "README.md"), "# my-app", `# ${options.name}`);
|
|
26
|
-
await replaceOnce(join(root, "relkit.config.ts"), "export default
|
|
26
|
+
await replaceOnce(join(root, "relkit.config.ts"), "export default defineApp({", `export default defineApp({\n id: ${JSON.stringify(projectId(options.name))},`);
|
|
27
|
+
await customizeDeployment(root, options);
|
|
27
28
|
if (!options.examples)
|
|
28
29
|
await removeExamples(root);
|
|
29
30
|
}
|
|
31
|
+
async function customizeDeployment(root, options) {
|
|
32
|
+
const configPath = join(root, "relkit.config.ts");
|
|
33
|
+
const imports = [
|
|
34
|
+
...(options.cloud === "aws" ? ['import "@relkit/aws";'] : []),
|
|
35
|
+
...(options.deploy === "pulumi" ? ['import "@relkit/pulumi";'] : []),
|
|
36
|
+
].join("\n");
|
|
37
|
+
await replaceOnce(configPath, "// relkit:create:deployment-imports", imports);
|
|
38
|
+
await replaceOnce(configPath, " // relkit:create:deployment", options.cloud === "aws" && options.deploy === "pulumi"
|
|
39
|
+
? ' deployment: { engine: "pulumi", host: "aws" },'
|
|
40
|
+
: "");
|
|
41
|
+
const manifestPath = join(root, "package.json");
|
|
42
|
+
const manifest = JSON.parse(await readFile(manifestPath, "utf8"));
|
|
43
|
+
const version = manifest.dependencies["@relkit/app"];
|
|
44
|
+
if (options.cloud === "aws")
|
|
45
|
+
manifest.dependencies["@relkit/aws"] = version;
|
|
46
|
+
if (options.deploy === "pulumi")
|
|
47
|
+
manifest.dependencies["@relkit/pulumi"] = version;
|
|
48
|
+
if (options.cloud === "aws" && options.deploy === "pulumi") {
|
|
49
|
+
manifest.scripts["deploy:preview"] = "relkit deploy preview";
|
|
50
|
+
manifest.scripts.deploy = "relkit deploy up";
|
|
51
|
+
}
|
|
52
|
+
manifest.scripts = sorted(manifest.scripts);
|
|
53
|
+
manifest.dependencies = sorted(manifest.dependencies);
|
|
54
|
+
await writeFile(manifestPath, `${JSON.stringify(manifest, null, 2)}\n`, "utf8");
|
|
55
|
+
await chmod(manifestPath, FILE_MODE);
|
|
56
|
+
}
|
|
57
|
+
function sorted(values) {
|
|
58
|
+
return Object.fromEntries(Object.entries(values).sort(([left], [right]) => left.localeCompare(right)));
|
|
59
|
+
}
|
|
30
60
|
/** Removes only a verified mkdtemp sibling; broad or unresolved paths are never recursed. */
|
|
31
61
|
export async function cleanupStagedProject(stage, destination) {
|
|
32
62
|
if (stage === undefined)
|
|
@@ -107,7 +137,7 @@ export function projectId(name) {
|
|
|
107
137
|
.replace(/^@/, "")
|
|
108
138
|
.replace("/", "-")
|
|
109
139
|
.replace(/[^A-Za-z0-9._-]+/g, "-");
|
|
110
|
-
return value.replace(/^[._-]
|
|
140
|
+
return value.replace(/^[._-]+/, "").replace(/(?<![._-])[._-]+$/, "") || "app";
|
|
111
141
|
}
|
|
112
142
|
function compareNames(left, right) {
|
|
113
143
|
return left.name < right.name ? -1 : left.name > right.name ? 1 : 0;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate-files.js","sourceRoot":"","sources":["../src/generate-files.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACjG,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACvE,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAGrD,MAAM,SAAS,GAAG,KAAK,CAAC;AACxB,MAAM,cAAc,GAAG,KAAK,CAAC;AAO7B,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,MAAc,EAAE,MAAc;IAC/D,MAAM,KAAK,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAAC;IAC/D,MAAM,KAAK,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IACpC,MAAM,OAAO,GAAG,CAAC,MAAM,OAAO,CAAC,MAAM,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACpF,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QACtC,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAChF,IAAI,KAAK,CAAC,WAAW,EAAE;YAAE,MAAM,YAAY,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;aACjD,IAAI,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;YACxB,MAAM,SAAS,CAAC,EAAE,EAAE,MAAM,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;YAC/D,MAAM,KAAK,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;QAC7B,CAAC;;YACC,MAAM,IAAI,oBAAoB,CAC5B,gCAAgC,EAChC,yCAAyC,CAC1C,CAAC;IACN,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,IAAY,EAAE,OAAsB;IACzE,MAAM,WAAW,CACf,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC,EAC1B,kBAAkB,EAClB,WAAW,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAC1C,CAAC;IACF,MAAM,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,EAAE,UAAU,EAAE,KAAK,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IAC5E,MAAM,WAAW,CACf,IAAI,CAAC,IAAI,EAAE,kBAAkB,CAAC,EAC9B,+BAA+B,EAC/B,
|
|
1
|
+
{"version":3,"file":"generate-files.js","sourceRoot":"","sources":["../src/generate-files.ts"],"names":[],"mappings":"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"}
|
package/dist/options.d.ts
CHANGED
|
@@ -33,6 +33,6 @@ export declare class CreateOptionsError extends Error {
|
|
|
33
33
|
readonly code: "RELKIT_CREATE_USAGE";
|
|
34
34
|
constructor(message: string);
|
|
35
35
|
}
|
|
36
|
-
/** Parses
|
|
36
|
+
/** Parses non-interactive create flags and applies the cloud-free defaults. */
|
|
37
37
|
export declare function normalizeCreateOptions(args: readonly string[], context?: CreateOptionsContext): CreateOptions;
|
|
38
38
|
//# sourceMappingURL=options.d.ts.map
|
package/dist/options.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,gBAAgB,sCAAuC,CAAC;AACrE,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE/D,eAAO,MAAM,aAAa,0BAA2B,CAAC;AACtD,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC;AAEzD,eAAO,MAAM,kBAAkB,6BAA8B,CAAC;AAC9D,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEnE,eAAO,MAAM,sBAAsB;cACV,cAAc;
|
|
1
|
+
{"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,gBAAgB,sCAAuC,CAAC;AACrE,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE/D,eAAO,MAAM,aAAa,0BAA2B,CAAC;AACtD,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC;AAEzD,eAAO,MAAM,kBAAkB,6BAA8B,CAAC;AAC9D,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEnE,eAAO,MAAM,sBAAsB;cACV,cAAc;WACpB,WAAW;YACV,gBAAgB;aACjB,OAAO;SACX,OAAO;cACF,OAAO;yBACK,OAAO;UACtB,OAAO;EACtB,CAAC;AAEH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;IAClC,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC;IAClC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,mBAAmB,EAAE,OAAO,CAAC;IACtC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,qBAAa,kBAAmB,SAAQ,KAAK;IAC3C,QAAQ,CAAC,IAAI,EAAG,qBAAqB,CAAU;gBAEnC,OAAO,EAAE,MAAM;CAI5B;AAED,+EAA+E;AAC/E,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,OAAO,GAAE,oBAAyB,GACjC,aAAa,CAyDf"}
|
package/dist/options.js
CHANGED
|
@@ -3,8 +3,8 @@ export const CREATE_CLOUDS = ["aws", "none"];
|
|
|
3
3
|
export const CREATE_DEPLOYMENTS = ["pulumi", "none"];
|
|
4
4
|
export const CREATE_OPTION_DEFAULTS = Object.freeze({
|
|
5
5
|
template: "minimal",
|
|
6
|
-
cloud: "
|
|
7
|
-
deploy: "
|
|
6
|
+
cloud: "none",
|
|
7
|
+
deploy: "none",
|
|
8
8
|
install: true,
|
|
9
9
|
git: true,
|
|
10
10
|
examples: true,
|
|
@@ -18,7 +18,7 @@ export class CreateOptionsError extends Error {
|
|
|
18
18
|
this.name = "CreateOptionsError";
|
|
19
19
|
}
|
|
20
20
|
}
|
|
21
|
-
/** Parses
|
|
21
|
+
/** Parses non-interactive create flags and applies the cloud-free defaults. */
|
|
22
22
|
export function normalizeCreateOptions(args, context = {}) {
|
|
23
23
|
let name;
|
|
24
24
|
let directory;
|
package/dist/options.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"options.js","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,SAAS,EAAE,KAAK,EAAE,OAAO,CAAU,CAAC;AAGrE,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,KAAK,EAAE,MAAM,CAAU,CAAC;AAGtD,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAU,CAAC;AAG9D,MAAM,CAAC,MAAM,sBAAsB,GAAG,MAAM,CAAC,MAAM,CAAC;IAClD,QAAQ,EAAE,SAA2B;IACrC,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"options.js","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,6 +8,6 @@ scaffolder:
|
|
|
8
8
|
- `agent` — the minimal example plus a read-only tool and agent descriptor.
|
|
9
9
|
|
|
10
10
|
Each variant is self-contained and can be copied as a project root. It uses
|
|
11
|
-
the current checked-in RelKit package version (`0.
|
|
11
|
+
the current checked-in RelKit package version (`0.3.0`), Bun `1.3.10`, and
|
|
12
12
|
TypeScript `5.9.3`. The generator owns project-name substitution and later
|
|
13
13
|
installation/Git behavior.
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
# my-app
|
|
2
2
|
|
|
3
3
|
A RelKit TypeScript/Bun project with the minimal HTTP example and a bounded
|
|
4
|
-
agent backed by a function-derived read-only tool. Tests use deterministic
|
|
5
|
-
|
|
4
|
+
agent backed by a function-derived read-only tool. Tests use a deterministic
|
|
5
|
+
scripted model, while production resolves the selected AI SDK profile.
|
|
6
6
|
|
|
7
|
-
The agent may omit `model` to use the configured
|
|
8
|
-
|
|
9
|
-
environment references in `modelProviders`.
|
|
7
|
+
The agent may omit `model` to use the configured default profile. OpenAI and
|
|
8
|
+
Anthropic credentials remain named binding-local values.
|
|
10
9
|
|
|
11
10
|
## Commands
|
|
12
11
|
|
|
@@ -12,18 +12,16 @@
|
|
|
12
12
|
"test:integration": "bun test tests/integration",
|
|
13
13
|
"build": "relkit build",
|
|
14
14
|
"start": "relkit start",
|
|
15
|
-
"graph": "relkit graph print"
|
|
16
|
-
"deploy:preview": "relkit deploy preview",
|
|
17
|
-
"deploy": "relkit deploy up"
|
|
15
|
+
"graph": "relkit graph print"
|
|
18
16
|
},
|
|
19
17
|
"dependencies": {
|
|
20
|
-
"@relkit/
|
|
21
|
-
"@relkit/
|
|
18
|
+
"@relkit/ai-sdk": "0.3.0",
|
|
19
|
+
"@relkit/app": "0.3.0"
|
|
22
20
|
},
|
|
23
21
|
"devDependencies": {
|
|
24
22
|
"@types/bun": "1.3.10",
|
|
25
|
-
"@relkit/cli": "0.
|
|
26
|
-
"@relkit/testing": "0.
|
|
23
|
+
"@relkit/cli": "0.3.0",
|
|
24
|
+
"@relkit/testing": "0.3.0",
|
|
27
25
|
"typescript": "5.9.3"
|
|
28
26
|
}
|
|
29
27
|
}
|
|
@@ -1,23 +1,25 @@
|
|
|
1
|
-
import { aiSdk
|
|
1
|
+
import { aiSdk } from "@relkit/ai-sdk";
|
|
2
|
+
import { defineApp, env as binding } from "@relkit/app/config";
|
|
2
3
|
import env from "@app/platform/env.js";
|
|
4
|
+
// relkit:create:deployment-imports
|
|
3
5
|
|
|
4
|
-
export default
|
|
6
|
+
export default defineApp({
|
|
5
7
|
env,
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
),
|
|
8
|
+
model: {
|
|
9
|
+
openai: aiSdk({
|
|
10
|
+
provider: "openai",
|
|
11
|
+
defaultModel: "gpt-5-mini",
|
|
12
|
+
apiKey: binding.secret("OPENAI_API_KEY"),
|
|
13
|
+
}),
|
|
14
|
+
anthropic: aiSdk({
|
|
15
|
+
provider: "anthropic",
|
|
16
|
+
defaultModel: "claude-sonnet-4-5",
|
|
17
|
+
apiKey: binding.secret("ANTHROPIC_API_KEY"),
|
|
18
|
+
}),
|
|
18
19
|
},
|
|
19
|
-
|
|
20
|
+
defaults: { model: "openai" },
|
|
21
|
+
telemetry: { redaction: { mode: "development-redacted", maxBytes: 65_536 } },
|
|
20
22
|
server: { port: 3000, maxBodyBytes: 1_048_576 },
|
|
21
23
|
inspector: { port: 3210 },
|
|
22
|
-
|
|
24
|
+
// relkit:create:deployment
|
|
23
25
|
});
|
|
@@ -12,10 +12,10 @@ export const privateLookup = hello.asTool({
|
|
|
12
12
|
});
|
|
13
13
|
// #endregion private-tool
|
|
14
14
|
|
|
15
|
-
import {
|
|
15
|
+
import { defineApp } from "@relkit/app/config";
|
|
16
16
|
import env from "@app/platform/env.js";
|
|
17
17
|
|
|
18
|
-
export const mcpDisabled =
|
|
18
|
+
export const mcpDisabled = defineApp({
|
|
19
19
|
env,
|
|
20
20
|
// #region disable-mcp
|
|
21
21
|
server: {
|
|
@@ -2,7 +2,12 @@ import { afterAll, expect, test } from "bun:test";
|
|
|
2
2
|
import { createTestApplication } from "@relkit/testing";
|
|
3
3
|
import config from "../../relkit.config.js";
|
|
4
4
|
|
|
5
|
-
const
|
|
5
|
+
const model = {
|
|
6
|
+
resolveModel: (selector = "test:model") => ({ id: selector, model: {} }),
|
|
7
|
+
};
|
|
8
|
+
const testApp = await createTestApplication(config, {
|
|
9
|
+
providers: { model: { openai: model, anthropic: model } },
|
|
10
|
+
});
|
|
6
11
|
|
|
7
12
|
test("GET /hello", async () => {
|
|
8
13
|
const response = await testApp.http.request("/hello?name=Mustafa");
|
|
@@ -19,7 +19,5 @@ bun run build
|
|
|
19
19
|
The example routes are `GET /hello?name=RelKit`, `POST /echo` with a JSON
|
|
20
20
|
`message` field, and `POST /orders` with `{ orderId, sku, quantity }`.
|
|
21
21
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
fail without rolling back the other, and delivery is not a transaction or a
|
|
25
|
-
promise of simultaneous execution.
|
|
22
|
+
The default project needs no Docker daemon, cloud account, or deployment
|
|
23
|
+
credentials.
|
|
@@ -12,19 +12,15 @@
|
|
|
12
12
|
"test:integration": "bun test tests/integration",
|
|
13
13
|
"build": "relkit build",
|
|
14
14
|
"start": "relkit start",
|
|
15
|
-
"graph": "relkit graph print"
|
|
16
|
-
"deploy:preview": "relkit deploy preview",
|
|
17
|
-
"deploy": "relkit deploy up"
|
|
15
|
+
"graph": "relkit graph print"
|
|
18
16
|
},
|
|
19
17
|
"dependencies": {
|
|
20
|
-
"@relkit/app": "0.
|
|
21
|
-
"@relkit/providers-standard": "0.1.0"
|
|
18
|
+
"@relkit/app": "0.3.0"
|
|
22
19
|
},
|
|
23
20
|
"devDependencies": {
|
|
24
21
|
"@types/bun": "1.3.10",
|
|
25
|
-
"@relkit/cli": "0.
|
|
26
|
-
"@relkit/
|
|
27
|
-
"@relkit/testing": "0.1.0",
|
|
22
|
+
"@relkit/cli": "0.3.0",
|
|
23
|
+
"@relkit/testing": "0.3.0",
|
|
28
24
|
"typescript": "5.9.3"
|
|
29
25
|
}
|
|
30
26
|
}
|
|
@@ -1,19 +1,11 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { defineApp } from "@relkit/app/config";
|
|
2
2
|
import env from "@app/platform/env.js";
|
|
3
|
+
// relkit:create:deployment-imports
|
|
3
4
|
|
|
4
|
-
export default
|
|
5
|
+
export default defineApp({
|
|
5
6
|
env,
|
|
6
|
-
|
|
7
|
-
default: managed(
|
|
8
|
-
eventBridge({
|
|
9
|
-
region: env.EVENT_REGION,
|
|
10
|
-
endpoint: env.EVENT_ENDPOINT,
|
|
11
|
-
busName: env.EVENT_BUS_NAME,
|
|
12
|
-
}),
|
|
13
|
-
),
|
|
14
|
-
},
|
|
15
|
-
telemetry: { bodyCapture: { mode: "off" } },
|
|
7
|
+
telemetry: { redaction: { mode: "development-redacted", maxBytes: 65_536 } },
|
|
16
8
|
server: { port: 3000, maxBodyBytes: 1_048_576 },
|
|
17
9
|
inspector: { port: 3210 },
|
|
18
|
-
|
|
10
|
+
// relkit:create:deployment
|
|
19
11
|
});
|
|
@@ -18,10 +18,7 @@ const createOrder = defineFunction({
|
|
|
18
18
|
input: orderInput,
|
|
19
19
|
output: orderOutput,
|
|
20
20
|
|
|
21
|
-
|
|
22
|
-
publishes: ["orders.created"],
|
|
23
|
-
|
|
24
|
-
handler: async (input, context) => {
|
|
21
|
+
handler: async (input) => {
|
|
25
22
|
const { totalCents } = await priceOrder.invoke({ quantity: input.quantity });
|
|
26
23
|
const order = {
|
|
27
24
|
orderId: input.orderId,
|
|
@@ -29,9 +26,6 @@ const createOrder = defineFunction({
|
|
|
29
26
|
totalCents,
|
|
30
27
|
};
|
|
31
28
|
|
|
32
|
-
// Let subscribers react to the new order.
|
|
33
|
-
await context.events["orders.created"].publish(order);
|
|
34
|
-
|
|
35
29
|
return order;
|
|
36
30
|
},
|
|
37
31
|
});
|
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
import { defineService } from "@relkit/app/services";
|
|
2
2
|
import createOrder from "@app/orders/functions/create-order.function.js";
|
|
3
3
|
import priceOrder from "@app/orders/functions/price-order.function.js";
|
|
4
|
-
import orderCreated from "@app/orders/events/order-created.event.js";
|
|
5
4
|
|
|
6
5
|
export default defineService({
|
|
7
6
|
functions: { createOrder, priceOrder },
|
|
8
|
-
events: { orderCreated },
|
|
9
7
|
});
|
|
@@ -2,7 +2,4 @@ import { defineEnv, env } from "@relkit/app/config";
|
|
|
2
2
|
|
|
3
3
|
export default defineEnv({
|
|
4
4
|
LOG_LEVEL: env.literal("trace", "debug", "info", "warn", "error").default("info"),
|
|
5
|
-
EVENT_REGION: env.string().default("us-east-1"),
|
|
6
|
-
EVENT_ENDPOINT: env.url().requiredIn("development", "production"),
|
|
7
|
-
EVENT_BUS_NAME: env.string().requiredIn("development", "production"),
|
|
8
5
|
});
|
|
@@ -3,9 +3,6 @@ import { createTestApplication } from "@relkit/testing";
|
|
|
3
3
|
import config from "../../relkit.config.js";
|
|
4
4
|
|
|
5
5
|
const testApp = await createTestApplication(config);
|
|
6
|
-
testApp.fakes.setClient("events", "orders.created", {
|
|
7
|
-
publish: async () => ({ accepted: true, instanceId: "event-1" }),
|
|
8
|
-
});
|
|
9
6
|
|
|
10
7
|
test("POST /orders", async () => {
|
|
11
8
|
const response = await testApp.http.request("/orders", {
|
|
@@ -1,28 +1,13 @@
|
|
|
1
1
|
import { expect, test } from "bun:test";
|
|
2
2
|
import { invokeFunction } from "@relkit/testing";
|
|
3
3
|
import orders from "@app/orders/service.js";
|
|
4
|
-
import { bindFunctionEvents } from "@relkit/app/events";
|
|
5
|
-
import orderCreated from "@app/orders/events/order-created.event.js";
|
|
6
4
|
|
|
7
|
-
test("createOrder invokes pricing
|
|
8
|
-
const
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
clients: {
|
|
14
|
-
events: {
|
|
15
|
-
"orders.created": {
|
|
16
|
-
publish: async (payload: unknown) => {
|
|
17
|
-
published.push(payload);
|
|
18
|
-
return { accepted: true, instanceId: "event-1" };
|
|
19
|
-
},
|
|
20
|
-
},
|
|
21
|
-
},
|
|
22
|
-
},
|
|
23
|
-
},
|
|
24
|
-
);
|
|
5
|
+
test("createOrder invokes pricing", async () => {
|
|
6
|
+
const result = await invokeFunction(orders.createOrder, {
|
|
7
|
+
orderId: "order-1",
|
|
8
|
+
sku: "book",
|
|
9
|
+
quantity: 3,
|
|
10
|
+
});
|
|
25
11
|
|
|
26
12
|
expect(result).toEqual({ orderId: "order-1", sku: "book", totalCents: 300 });
|
|
27
|
-
expect(published).toEqual([{ orderId: "order-1", sku: "book", totalCents: 300 }]);
|
|
28
13
|
});
|
|
@@ -14,6 +14,5 @@ bun run typecheck
|
|
|
14
14
|
bun run build
|
|
15
15
|
```
|
|
16
16
|
|
|
17
|
-
The example route is `GET /hello?name=RelKit`.
|
|
18
|
-
|
|
19
|
-
the configured AWS provider set.
|
|
17
|
+
The example route is `GET /hello?name=RelKit`. The default project needs no
|
|
18
|
+
Docker daemon, cloud account, or deployment credentials.
|
|
@@ -12,18 +12,15 @@
|
|
|
12
12
|
"test:integration": "bun test tests/integration",
|
|
13
13
|
"build": "relkit build",
|
|
14
14
|
"start": "relkit start",
|
|
15
|
-
"graph": "relkit graph print"
|
|
16
|
-
"deploy:preview": "relkit deploy preview",
|
|
17
|
-
"deploy": "relkit deploy up"
|
|
15
|
+
"graph": "relkit graph print"
|
|
18
16
|
},
|
|
19
17
|
"dependencies": {
|
|
20
|
-
"@relkit/app": "0.
|
|
21
|
-
"@relkit/providers-standard": "0.1.0"
|
|
18
|
+
"@relkit/app": "0.3.0"
|
|
22
19
|
},
|
|
23
20
|
"devDependencies": {
|
|
24
21
|
"@types/bun": "1.3.10",
|
|
25
|
-
"@relkit/cli": "0.
|
|
26
|
-
"@relkit/testing": "0.
|
|
22
|
+
"@relkit/cli": "0.3.0",
|
|
23
|
+
"@relkit/testing": "0.3.0",
|
|
27
24
|
"typescript": "5.9.3"
|
|
28
25
|
}
|
|
29
26
|
}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { defineApp } from "@relkit/app/config";
|
|
2
2
|
import env from "@app/platform/env.js";
|
|
3
|
+
// relkit:create:deployment-imports
|
|
3
4
|
|
|
4
|
-
export default
|
|
5
|
+
export default defineApp({
|
|
5
6
|
env,
|
|
6
|
-
telemetry: {
|
|
7
|
+
telemetry: { redaction: { mode: "development-redacted", maxBytes: 65_536 } },
|
|
7
8
|
server: { port: 3000, maxBodyBytes: 1_048_576 },
|
|
8
9
|
inspector: { port: 3210 },
|
|
9
|
-
|
|
10
|
+
// relkit:create:deployment
|
|
10
11
|
});
|
package/package.json
CHANGED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import { defineEvent } from "@relkit/app/events";
|
|
2
|
-
import { z } from "@relkit/app/schema";
|
|
3
|
-
|
|
4
|
-
const orderCreated = defineEvent({
|
|
5
|
-
id: "orders.created",
|
|
6
|
-
version: 1,
|
|
7
|
-
|
|
8
|
-
// Data every subscriber receives when an order is created.
|
|
9
|
-
input: z.object({
|
|
10
|
-
orderId: z.string().min(1),
|
|
11
|
-
sku: z.string().min(1),
|
|
12
|
-
totalCents: z.number().int().nonnegative(),
|
|
13
|
-
}),
|
|
14
|
-
|
|
15
|
-
title: "Order created",
|
|
16
|
-
});
|
|
17
|
-
|
|
18
|
-
export default orderCreated;
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { defineEventFunction } from "@relkit/app/events";
|
|
2
|
-
|
|
3
|
-
const orderAudit = defineEventFunction({
|
|
4
|
-
id: "orders.audit",
|
|
5
|
-
event: "orders.created",
|
|
6
|
-
handler: async (payload, context) => {
|
|
7
|
-
context.log.info("order.audit.recorded", {
|
|
8
|
-
orderId: payload.orderId,
|
|
9
|
-
sku: payload.sku,
|
|
10
|
-
totalCents: payload.totalCents,
|
|
11
|
-
});
|
|
12
|
-
},
|
|
13
|
-
});
|
|
14
|
-
|
|
15
|
-
export default orderAudit;
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { defineEventFunction } from "@relkit/app/events";
|
|
2
|
-
|
|
3
|
-
const orderConfirmation = defineEventFunction({
|
|
4
|
-
id: "orders.confirmation",
|
|
5
|
-
event: "orders.created",
|
|
6
|
-
|
|
7
|
-
handler: async (payload, context) => {
|
|
8
|
-
// Replace this log with your email-sending code.
|
|
9
|
-
context.log.info("order.confirmation.requested", {
|
|
10
|
-
orderId: payload.orderId,
|
|
11
|
-
});
|
|
12
|
-
},
|
|
13
|
-
});
|
|
14
|
-
|
|
15
|
-
export default orderConfirmation;
|
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
import { expect, test } from "bun:test";
|
|
2
|
-
import { bindFunctionEvents } from "@relkit/app/events";
|
|
3
|
-
import { createTestEvent, invokeFunction } from "@relkit/testing";
|
|
4
|
-
import orderCreated from "@app/orders/events/order-created.event.js";
|
|
5
|
-
import orderAudit from "@app/orders/functions/order-audit.function.js";
|
|
6
|
-
import orderConfirmation from "@app/orders/functions/order-confirmation.function.js";
|
|
7
|
-
import orders from "@app/orders/service.js";
|
|
8
|
-
|
|
9
|
-
const retry = {
|
|
10
|
-
maxAttempts: 1,
|
|
11
|
-
initialDelayMs: 0,
|
|
12
|
-
maxDelayMs: 0,
|
|
13
|
-
multiplier: 1,
|
|
14
|
-
jitter: "none" as const,
|
|
15
|
-
};
|
|
16
|
-
|
|
17
|
-
test("order.created fans out deterministic independent deliveries", async () => {
|
|
18
|
-
const confirmationTarget = orderConfirmation;
|
|
19
|
-
const auditTarget = orderAudit;
|
|
20
|
-
const failingAuditTarget = {
|
|
21
|
-
...auditTarget,
|
|
22
|
-
handler: async (...args: Parameters<typeof auditTarget.handler>) => {
|
|
23
|
-
await auditTarget.handler(...args);
|
|
24
|
-
throw new Error("audit listener test failure");
|
|
25
|
-
},
|
|
26
|
-
};
|
|
27
|
-
const event = await createTestEvent({
|
|
28
|
-
event: orderCreated,
|
|
29
|
-
triggers: [
|
|
30
|
-
{ id: orderConfirmation.id, target: confirmationTarget, retry },
|
|
31
|
-
{ id: orderAudit.id, target: failingAuditTarget, retry },
|
|
32
|
-
],
|
|
33
|
-
});
|
|
34
|
-
|
|
35
|
-
try {
|
|
36
|
-
await expect(
|
|
37
|
-
invokeFunction(
|
|
38
|
-
bindFunctionEvents(orders.createOrder, undefined, [orderCreated]),
|
|
39
|
-
{ orderId: "order-1", sku: "book", quantity: 3 },
|
|
40
|
-
{ clients: { events: { "orders.created": event.provider } } },
|
|
41
|
-
),
|
|
42
|
-
).resolves.toEqual({ orderId: "order-1", sku: "book", totalCents: 300 });
|
|
43
|
-
|
|
44
|
-
await expect(event.drain()).resolves.toMatchObject([
|
|
45
|
-
{
|
|
46
|
-
triggerId: "orders.audit",
|
|
47
|
-
status: "failed",
|
|
48
|
-
state: "dead-lettered",
|
|
49
|
-
attempt: 1,
|
|
50
|
-
},
|
|
51
|
-
{
|
|
52
|
-
triggerId: "orders.confirmation",
|
|
53
|
-
status: "completed",
|
|
54
|
-
state: "completed",
|
|
55
|
-
attempt: 1,
|
|
56
|
-
},
|
|
57
|
-
]);
|
|
58
|
-
expect(event.completed("orders.confirmation")).toBe(1);
|
|
59
|
-
expect(event.completed("orders.audit")).toBe(0);
|
|
60
|
-
} finally {
|
|
61
|
-
await event.close();
|
|
62
|
-
}
|
|
63
|
-
});
|