create-stitchkit 0.6.8 → 0.6.10

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 CHANGED
@@ -12,6 +12,28 @@ step is overwritten by the next release.
12
12
 
13
13
  ## [Unreleased]
14
14
 
15
+ ## [0.6.10] - 2026-10-05
16
+
17
+ ### Changed
18
+
19
+ - Generated projects track Stitchkit `^0.105.0`. The template's query-client test
20
+ builds its `ApiError` values with named options (`{ status: 500 }`), which 0.105
21
+ requires; a project that upgrades its own Stitchkit past 0.104 migrates the same
22
+ way (see Stitchkit's upgrading guide).
23
+ - The Telegram-bot template's journal no longer passes a token pattern: with
24
+ Stitchkit 0.101 every logger masks a bot token by shape and keeps the bot's
25
+ id (`123456:[redacted]`), and an error's own fields reach the line.
26
+
27
+ ## [0.6.9] — 2026-09-29
28
+
29
+ ### Changed
30
+
31
+ - Generated projects track Stitchkit `^0.100.3`, which adds Telegram screens,
32
+ message markup, webhook ownership and durable update intake, and keyboard
33
+ layers for React.
34
+ - Generated projects pin `packageManager: bun@1.4.2`, the current Bun, in the
35
+ full-stack, agent and Telegram-bot templates.
36
+
15
37
  ## [0.6.8] — 2026-09-28
16
38
 
17
39
  ### Changed
package/dist/cli.js CHANGED
@@ -197,8 +197,8 @@ function createApplicationIdentity(destination, displayName) {
197
197
  }
198
198
  });
199
199
  }
200
- function withIdentity(declaration2, identity) {
201
- const copied = parseProjectDeclaration(declaration2);
200
+ function withIdentity(declaration, identity) {
201
+ const copied = parseProjectDeclaration(declaration);
202
202
  return parseProjectDeclaration({ ...copied, identity });
203
203
  }
204
204
 
@@ -425,13 +425,13 @@ async function scaffoldProject(templateDirectory, destination, options = {}) {
425
425
  await rm(join(resolvedDestination, "bun.lock"), { force: true });
426
426
  }
427
427
  const declarationPath = join(resolvedDestination, "project.json");
428
- const declaration2 = withIdentity(JSON.parse(await readFile(declarationPath, "utf8")), identity);
429
- await writeFile(declarationPath, `${JSON.stringify(declaration2, undefined, 2)}
428
+ const declaration = withIdentity(JSON.parse(await readFile(declarationPath, "utf8")), identity);
429
+ await writeFile(declarationPath, `${JSON.stringify(declaration, undefined, 2)}
430
430
  `);
431
431
  if (options.identityModule !== false) {
432
432
  const identityPath = join(resolvedDestination, APP_IDENTITY_PATH);
433
433
  await mkdir(dirname(identityPath), { recursive: true });
434
- await writeFile(identityPath, renderAppIdentityModule(declaration2.identity));
434
+ await writeFile(identityPath, renderAppIdentityModule(declaration.identity));
435
435
  }
436
436
  const manifestPath = join(resolvedDestination, "package.json");
437
437
  const manifest = RootManifestSchema.parse(JSON.parse(await readFile(manifestPath, "utf8")));
@@ -548,10 +548,10 @@ if (import.meta.main) {
548
548
  }
549
549
  async function roleAddresses(destination) {
550
550
  try {
551
- const declaration2 = parseProjectDeclaration(JSON.parse(await readFile2(join2(destination, "project.json"), "utf8")));
551
+ const declaration = parseProjectDeclaration(JSON.parse(await readFile2(join2(destination, "project.json"), "utf8")));
552
552
  const environment = readEnvironmentExample(await readFile2(join2(destination, ".env.example"), "utf8"));
553
553
  const host = environment.BIND_HOST ?? "127.0.0.1";
554
- return declaration2.roles.flatMap((role) => {
554
+ return declaration.roles.flatMap((role) => {
555
555
  const port = role.listener && environment[role.listener.portVariable];
556
556
  if (!role.listener || !port)
557
557
  return [];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-stitchkit",
3
- "version": "0.6.8",
3
+ "version": "0.6.10",
4
4
  "description": "Create a production-shaped Stitchkit application",
5
5
  "license": "MIT",
6
6
  "author": "Max Listov <maxlistov@gmail.com>",
@@ -84,11 +84,11 @@
84
84
  "@types/react": "^19.3.0",
85
85
  "ai": "^7.0.111",
86
86
  "react": "^19.3.0",
87
- "stitchkit": "0.100.1",
87
+ "stitchkit": "0.105.0",
88
88
  "typescript": "^7.0.2"
89
89
  },
90
90
  "engines": {
91
91
  "bun": ">=1.2.0"
92
92
  },
93
- "packageManager": "bun@1.3.14"
93
+ "packageManager": "bun@1.4.2"
94
94
  }
package/template/bun.lock CHANGED
@@ -145,7 +145,7 @@
145
145
  "zod": "4.6.5",
146
146
  },
147
147
  "catalog": {
148
- "stitchkit": "^0.100.1",
148
+ "stitchkit": "^0.105.0",
149
149
  },
150
150
  "packages": {
151
151
  "@ai-sdk/gateway": ["@ai-sdk/gateway@4.0.89", "", { "dependencies": { "@ai-sdk/provider": "4.0.17", "@ai-sdk/provider-utils": "5.0.45", "@vercel/oidc": "3.2.0" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-n0Q88UUASYQBGK3Ogs9pCe8h3ZXeTHFSuGOLBJAyH73MVGNKUv9w8EJX2f340WUF3eDWWOV305gO7YBpSCPblA=="],
@@ -1128,7 +1128,7 @@
1128
1128
 
1129
1129
  "std-env": ["std-env@3.10.0", "", {}, "sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg=="],
1130
1130
 
1131
- "stitchkit": ["stitchkit@0.100.1", "", { "dependencies": { "ky": "^2.1.0" }, "peerDependencies": { "@modelcontextprotocol/ext-apps": "^1.7.2 || ^2.0.0", "@modelcontextprotocol/server": "^2.0.0", "@openrouter/ai-sdk-provider": "^3.1.0", "@opentelemetry/api": "^1.9.0", "@socket.io/bun-engine": "^0.1.2", "@socket.io/component-emitter": "^3.1.2", "@tanstack/react-query": ">=5", "@types/bun": "^1.4.2", "ai": "^7.0.107", "google-auth-library": "^11.1.0", "grammy": "^1.46.0", "maxmind": "^5.0.7", "react": ">=18", "react-query-kit": "^3.3.3", "socket.io": "^4.8.3", "socket.io-client": "^4.8.3", "srvx": "^0.12.5 || ^1.0.5", "zod": "^4.6.5" }, "optionalPeers": ["@modelcontextprotocol/ext-apps", "@modelcontextprotocol/server", "@openrouter/ai-sdk-provider", "@opentelemetry/api", "@socket.io/bun-engine", "@socket.io/component-emitter", "@tanstack/react-query", "@types/bun", "ai", "google-auth-library", "grammy", "maxmind", "react", "react-query-kit", "socket.io", "socket.io-client", "srvx"], "bin": { "stitchkit": "dist/entrypoints/bin/upgrade-cli.js" } }, "sha512-zpJEfRl2xe/2JzxyIuxuZrFBe/i2mtEZTa3p+wZNbN6L3wFlP7GfK2ak6MLwikuLYtbmB2N4qGKEcA7qTEMA/Q=="],
1131
+ "stitchkit": ["stitchkit@0.105.0", "", { "dependencies": { "ky": "^2.1.0" }, "peerDependencies": { "@modelcontextprotocol/ext-apps": "^1.7.2 || ^2.0.0", "@modelcontextprotocol/server": "^2.0.0", "@openrouter/ai-sdk-provider": "^3.1.0", "@opentelemetry/api": "^1.9.0", "@socket.io/bun-engine": "^0.1.2", "@socket.io/component-emitter": "^3.1.2", "@tanstack/react-query": ">=5", "@types/bun": "^1.4.2", "ai": "^7.0.107", "google-auth-library": "^11.1.0", "grammy": "^1.46.0", "maxmind": "^5.0.7", "react": ">=18", "react-query-kit": "^3.3.3", "socket.io": "^4.8.3", "socket.io-client": "^4.8.3", "srvx": "^0.12.5 || ^1.0.5", "zod": "^4.6.5" }, "optionalPeers": ["@modelcontextprotocol/ext-apps", "@modelcontextprotocol/server", "@openrouter/ai-sdk-provider", "@opentelemetry/api", "@socket.io/bun-engine", "@socket.io/component-emitter", "@tanstack/react-query", "@types/bun", "ai", "google-auth-library", "grammy", "maxmind", "react", "react-query-kit", "socket.io", "socket.io-client", "srvx"], "bin": { "stitchkit": "dist/entrypoints/bin/upgrade-cli.js" } }, "sha512-iYq2EuG3VS3fbtw92C/5MzSCSzwRss6UZI8QVJZhAojMxGFV2f/kpQpnCygHmeEPSHQNw+eWdzP6TVApMj5QPw=="],
1132
1132
 
1133
1133
  "stringify-entities": ["stringify-entities@4.0.4", "", { "dependencies": { "character-entities-html4": "^2.0.0", "character-entities-legacy": "^3.0.0" } }, "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg=="],
1134
1134
 
@@ -7,7 +7,7 @@
7
7
  "packages/*"
8
8
  ],
9
9
  "catalog": {
10
- "stitchkit": "^0.100.1"
10
+ "stitchkit": "^0.105.0"
11
11
  },
12
12
  "overrides": {
13
13
  "@playwright/test": "1.63.0",
@@ -64,5 +64,5 @@
64
64
  "bun": ">=1.2.0",
65
65
  "node": ">=22"
66
66
  },
67
- "packageManager": "bun@1.3.14"
67
+ "packageManager": "bun@1.4.2"
68
68
  }
@@ -28,7 +28,7 @@ describe('query dehydration policy', () => {
28
28
  const defaults = getQueryClient().getDefaultOptions();
29
29
  const retry = defaults.queries?.retry;
30
30
  if (typeof retry !== 'function') throw new Error('query retry policy is required');
31
- const serverFailure = new ApiError('INTERNAL_SERVER_ERROR', 500);
31
+ const serverFailure = new ApiError('INTERNAL_SERVER_ERROR', { status: 500 });
32
32
  expect(retry(0, serverFailure)).toBe(true);
33
33
  expect(retry(1, serverFailure)).toBe(false);
34
34
  expect(defaults.mutations?.retry).toBe(false);
@@ -39,7 +39,7 @@ describe('query dehydration policy', () => {
39
39
  const retry = defaults.queries?.retry;
40
40
  if (typeof retry !== 'function') throw new Error('query retry policy is required');
41
41
  for (const code of ['UNAUTHORIZED', 'FORBIDDEN', 'VALIDATION_ERROR']) {
42
- expect(retry(0, new ApiError(code, 401))).toBe(false);
42
+ expect(retry(0, new ApiError(code, { status: 401 }))).toBe(false);
43
43
  }
44
44
  });
45
45
  });
@@ -32,5 +32,5 @@
32
32
  "engines": {
33
33
  "bun": ">=1.3.0"
34
34
  },
35
- "packageManager": "bun@1.3.14"
35
+ "packageManager": "bun@1.4.2"
36
36
  }
@@ -26,5 +26,5 @@
26
26
  "engines": {
27
27
  "bun": ">=1.3.0"
28
28
  },
29
- "packageManager": "bun@1.3.14"
29
+ "packageManager": "bun@1.4.2"
30
30
  }
@@ -1,18 +1,15 @@
1
1
  import { createJsonLogger } from 'stitchkit/observability';
2
- import { TELEGRAM_BOT_TOKEN_PATTERN } from 'stitchkit/telegram';
3
2
  import type { Env } from './env';
4
3
 
5
4
  /**
6
5
  * The process journal: one JSON line per event on standard output. An `Error`
7
- * under any key keeps its name, message, stack and cause, and a bot token
8
- * inside a URL or an error message is masked. A line with `"level":50` is an
9
- * error — the one contract a supervisor reading the journal relies on.
6
+ * under any key keeps its name, message, stack, cause and own fields, and a bot
7
+ * token inside a URL or an error message is masked to `<bot id>:[redacted]`. A
8
+ * line with `"level":50` is an error — the one contract a supervisor reading
9
+ * the journal relies on.
10
10
  */
11
11
  export function createLog(env: Pick<Env, 'LOG_LEVEL'>) {
12
- return createJsonLogger({
13
- level: env.LOG_LEVEL,
14
- sensitiveUrlPatterns: [TELEGRAM_BOT_TOKEN_PATTERN],
15
- });
12
+ return createJsonLogger({ level: env.LOG_LEVEL });
16
13
  }
17
14
 
18
15
  export type Log = ReturnType<typeof createLog>;