@agent-native/core 0.176.3-nightly-20260901181437 → 0.176.3

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.
@@ -3,6 +3,12 @@
3
3
  All notable user-facing changes to Agent-Native Analytics are documented here. Open it any
4
4
  time from the command menu (Cmd+K → "What's new") or from Settings.
5
5
 
6
+ ## 2026-08-31
7
+
8
+ ### Improved
9
+
10
+ - Per-app auth pages show a product preview and learn-more link
11
+
6
12
  ## 2026-08-29
7
13
 
8
14
  ### Added
@@ -3,6 +3,24 @@
3
3
  All notable user-facing changes to Agent-Native Calendar are documented here. Open it any
4
4
  time from the command menu (Cmd+K → "What's new") or from Settings.
5
5
 
6
+ ## 2026-09-01
7
+
8
+ ### Improved
9
+
10
+ - Signed-in coworkers now see their own calendar conflicts and booking details are prefilled.
11
+
12
+ ## 2026-08-31
13
+
14
+ ### Improved
15
+
16
+ - Lower-contrast scrollbars keep desktop surfaces calm
17
+ - Per-app auth pages show a product preview and learn-more link
18
+
19
+ ### Fixed
20
+
21
+ - Booking link availability aligns with its tabs
22
+ - Calendar no longer shows duplicate agent controls on Home and can remove saved Google Meet links
23
+
6
24
  ## 2026-08-29
7
25
 
8
26
  ### Improved
@@ -56,7 +56,7 @@ Upload the generated artifact (the version matches `public/manifest.json`; the
56
56
  Chrome Web Store requires each upload to use a higher version than the last):
57
57
 
58
58
  ```txt
59
- templates/clips/chrome-extension/releases/clips-chrome-extension-0.1.19.zip
59
+ templates/clips/chrome-extension/releases/clips-chrome-extension-0.1.21.zip
60
60
  ```
61
61
 
62
62
  ## Web App Rollout Gate
@@ -2,7 +2,7 @@
2
2
  "manifest_version": 3,
3
3
  "name": "Agent-Native Clips",
4
4
  "short_name": "Clips",
5
- "version": "0.1.19",
5
+ "version": "0.1.21",
6
6
  "description": "Start Clips recordings from Chrome, capture optional diagnostics, and preview Clips links on GitHub and Jira.",
7
7
  "minimum_chrome_version": "116",
8
8
  "action": {
@@ -17,7 +17,7 @@ export function recordingShareUrl(
17
17
  });
18
18
  }
19
19
 
20
- async function writeClipboardText(text: string): Promise<boolean> {
20
+ export async function writeClipboardText(text: string): Promise<boolean> {
21
21
  // Rust-side write first: at recording-stop time the popover webview is
22
22
  // usually not focused, and `navigator.clipboard.writeText` rejects with
23
23
  // `NotAllowedError: Document is not focused` in exactly that case.
@@ -7,6 +7,7 @@ import {
7
7
  IconLoader2,
8
8
  IconPlayerPauseFilled,
9
9
  IconPlayerPlayFilled,
10
+ IconShare,
10
11
  IconX,
11
12
  } from "@tabler/icons-react";
12
13
  import { invoke } from "@tauri-apps/api/core";
@@ -34,6 +35,7 @@ import {
34
35
  streamMeetingAsk,
35
36
  } from "../lib/meeting-ask";
36
37
  import { isDirectPillClick, type ScreenPoint } from "../lib/pill-interaction";
38
+ import { writeClipboardText } from "../lib/recording-link";
37
39
  import { speakerFor, type TranscriptLine } from "../lib/transcription-engine";
38
40
  import { loadStoredServerUrl } from "../lib/url";
39
41
  import { AskSteps } from "./ask-steps";
@@ -727,7 +729,7 @@ export function MeetingPill() {
727
729
  .map((l) => `${speakerFor(l.source)}: ${l.text}`)
728
730
  .join("\n");
729
731
  try {
730
- await navigator.clipboard.writeText(text);
732
+ if (!(await writeClipboardText(text))) return;
731
733
  setTranscriptCopied(true);
732
734
  setTimeout(() => setTranscriptCopied(false), 1500);
733
735
  } catch {
@@ -1291,6 +1293,35 @@ export function MeetingPill() {
1291
1293
  )}
1292
1294
  </button>
1293
1295
  ) : null}
1296
+ {finished ? (
1297
+ <>
1298
+ <button
1299
+ type="button"
1300
+ data-no-drag
1301
+ className="pill-copy-btn"
1302
+ onClick={handleCopyTranscript}
1303
+ disabled={!hasTranscriptLines}
1304
+ aria-label="Copy transcript"
1305
+ title="Copy transcript"
1306
+ >
1307
+ {transcriptCopied ? (
1308
+ <IconCheck size={14} />
1309
+ ) : (
1310
+ <IconCopy size={14} />
1311
+ )}
1312
+ </button>
1313
+ <button
1314
+ type="button"
1315
+ onClick={() => closeFinished(true)}
1316
+ data-no-drag
1317
+ className="pill-copy-btn"
1318
+ aria-label="Share meeting"
1319
+ title="Share meeting"
1320
+ >
1321
+ <IconShare size={15} />
1322
+ </button>
1323
+ </>
1324
+ ) : null}
1294
1325
  {finished ? (
1295
1326
  <button
1296
1327
  type="button"
@@ -3,6 +3,12 @@
3
3
  All notable user-facing changes to Agent-Native Content are documented here. Open it any
4
4
  time from the command menu (Cmd+K → "What's new").
5
5
 
6
+ ## 2026-08-28
7
+
8
+ ### Fixed
9
+
10
+ - Delegated Content requests now stay on Content's own actions for every authorized caller, including managed Slack channels.
11
+
6
12
  ## 2026-08-26
7
13
 
8
14
  ### Fixed
@@ -3,6 +3,12 @@
3
3
  All notable user-facing changes to Design are documented here. Open it any time
4
4
  from the command menu (Cmd+K → "What's new") or from Settings.
5
5
 
6
+ ## 2026-09-01
7
+
8
+ ### Fixed
9
+
10
+ - The Share button stays inside the editor's right panel. At the panel's default width the action row was wider than the panel, so Share was clipped at the window edge; Add to Context now collapses to an icon with a tooltip when the panel is narrow, and the whole row fits.
11
+
6
12
  ## 2026-08-28
7
13
 
8
14
  ### Added
@@ -3,6 +3,12 @@
3
3
  All notable user-facing changes to Agent-Native Dispatch are documented here. Open it any
4
4
  time from the command menu (Cmd+K → "What's new").
5
5
 
6
+ ## 2026-08-31
7
+
8
+ ### Improved
9
+
10
+ - Dispatch sign-in now shows its product preview and learn-more link
11
+
6
12
  ## 2026-08-26
7
13
 
8
14
  ### Fixed
@@ -3,6 +3,20 @@
3
3
  All notable user-facing changes to Chat are documented here. Open it any
4
4
  time from the command menu (Cmd+K → "What's new").
5
5
 
6
+ ## 2026-08-31
7
+
8
+ ### Improved
9
+
10
+ - Audit runs now show what was added to the inbox, what the job worked on, and which actions it took.
11
+
12
+ ### Fixed
13
+
14
+ - The connect banner now opens the workspace Dispatch host, and a vault outage no longer looks like a missing Slack connection.
15
+ - Creating or editing a Slack, GitHub, or Sentry job now shows a Dispatch connect banner above Run when that source is missing, and Create stays off until the channel, repo, or Sentry slugs are filled.
16
+ - Creating a Slack, GitHub, or Sentry job now works when the token is already in the vault, not only when Dispatch Integrations is connected.
17
+ - You can disable a Slack, GitHub, or Sentry job even when that connector is missing or the vault is down.
18
+ - Inbox and Audit stay usable when a connector lookup fails, and disabled job drafts can still set a destination.
19
+
6
20
  ## 2026-08-29
7
21
 
8
22
  ### Added
@@ -1,4 +1,5 @@
1
1
  import { z } from "zod";
2
2
  export declare const runtimeConfig: z.ZodObject<{
3
3
  agentChatStreaming: z.ZodDefault<z.ZodBoolean>;
4
+ databaseUrlUnpooled: z.ZodOptional<z.ZodString>;
4
5
  }, z.core.$strip>;
@@ -4,4 +4,13 @@ export const runtimeConfig = z.object({
4
4
  env: "AGENT_NATIVE_AGENT_CHAT_STREAM_RUNTIME",
5
5
  doc: "Run the dedicated Nitro agent-chat response-streaming route used by an AWS Lambda Function URL.",
6
6
  }),
7
+ databaseUrlUnpooled: z
8
+ .string()
9
+ .trim()
10
+ .min(1)
11
+ .optional()
12
+ .meta({
13
+ env: ["NETLIFY_DATABASE_URL_UNPOOLED", "DATABASE_URL_UNPOOLED"],
14
+ doc: "Direct database URL for request-time clients when a serverless connection pooler is unavailable.",
15
+ }),
7
16
  });
@@ -100,6 +100,7 @@ export declare const appConfigSchema: z.ZodObject<{
100
100
  }, z.core.$strip>>;
101
101
  runtime: z.ZodPrefault<z.ZodObject<{
102
102
  agentChatStreaming: z.ZodDefault<z.ZodBoolean>;
103
+ databaseUrlUnpooled: z.ZodOptional<z.ZodString>;
103
104
  }, z.core.$strip>>;
104
105
  workspace: z.ZodPrefault<z.ZodObject<{
105
106
  isWorkspace: z.ZodOptional<z.ZodBoolean>;
@@ -13,8 +13,8 @@
13
13
  * Body: { json: any, fieldName?: string, type?: "map"|"array", requestSource?: string }
14
14
  */
15
15
  export declare const postCollabJson: import("h3").EventHandlerWithFetch<import("h3").EventHandlerRequest, Promise<{
16
- ok?: undefined;
17
16
  error: string;
17
+ ok?: undefined;
18
18
  } | {
19
19
  error?: undefined;
20
20
  ok: boolean;
@@ -50,6 +50,16 @@ export declare function getCloudflareD1Binding(): unknown;
50
50
  * `MAIL_DATABASE_URL=postgres://...` in the shared env.
51
51
  */
52
52
  export declare function getDatabaseUrl(fallback?: string): string;
53
+ /**
54
+ * Resolve the URL used by request-time database clients.
55
+ *
56
+ * A serverless Neon pooler can stall while the direct endpoint remains
57
+ * healthy, leaving auth and the first app query on the loading screen. Use an
58
+ * explicit unpooled URL when supplied; otherwise derive the direct endpoint
59
+ * for serverless runtimes. Keep getDatabaseUrl pooled for scripts and release
60
+ * checks that intentionally inspect the configured deployment value.
61
+ */
62
+ export declare function getRuntimeDatabaseUrl(fallback?: string): string;
53
63
  /** Same per-app resolution for DATABASE_AUTH_TOKEN (used by Turso/libsql). */
54
64
  export declare function getDatabaseAuthToken(): string | undefined;
55
65
  /**
package/dist/db/client.js CHANGED
@@ -9,6 +9,7 @@ import path from "path";
9
9
  * (dynamic import) so this module can be loaded in any runtime (Node.js,
10
10
  * Cloudflare Workers, edge) without failing on missing native deps.
11
11
  */
12
+ import { getAppConfig } from "../app-config/index.js";
12
13
  import { isMigrationAuthorizedRuntime } from "./migration-runtime.js";
13
14
  import { beginDatabaseOperation, recordDatabaseRetry, } from "./request-telemetry.js";
14
15
  const recyclingPostgresPools = new WeakSet();
@@ -19,6 +20,10 @@ export function getCloudflareD1Binding() {
19
20
  const runtime = globalThis;
20
21
  return runtime.__cf_env?.DB ?? runtime.__env__?.DB;
21
22
  }
23
+ function hasCloudflareRuntimeBinding() {
24
+ const runtime = globalThis;
25
+ return runtime.__cf_env !== undefined || runtime.__env__ !== undefined;
26
+ }
22
27
  // ---------------------------------------------------------------------------
23
28
  // Per-app DATABASE_URL resolution
24
29
  // ---------------------------------------------------------------------------
@@ -43,6 +48,39 @@ export function getDatabaseUrl(fallback = "") {
43
48
  }
44
49
  return (process.env.DATABASE_URL || process.env.NETLIFY_DATABASE_URL || fallback);
45
50
  }
51
+ function getConfiguredUnpooledDatabaseUrl() {
52
+ return (getConfiguredAppDatabaseUrl("DATABASE_URL_UNPOOLED") ||
53
+ getAppConfig().runtime.databaseUrlUnpooled);
54
+ }
55
+ function getConfiguredAppDatabaseUrl(suffix) {
56
+ const appName = getAppEnvPrefix();
57
+ return appName ? process.env[`${appName}_${suffix}`] : undefined;
58
+ }
59
+ function stripNeonPooler(url) {
60
+ return url.replace(/-pooler(\.[a-z0-9.-]+\.neon\.tech)/, "$1");
61
+ }
62
+ /**
63
+ * Resolve the URL used by request-time database clients.
64
+ *
65
+ * A serverless Neon pooler can stall while the direct endpoint remains
66
+ * healthy, leaving auth and the first app query on the loading screen. Use an
67
+ * explicit unpooled URL when supplied; otherwise derive the direct endpoint
68
+ * for serverless runtimes. Keep getDatabaseUrl pooled for scripts and release
69
+ * checks that intentionally inspect the configured deployment value.
70
+ */
71
+ export function getRuntimeDatabaseUrl(fallback = "") {
72
+ const appUnpooled = getConfiguredAppDatabaseUrl("DATABASE_URL_UNPOOLED");
73
+ if (appUnpooled)
74
+ return stripNeonPooler(appUnpooled);
75
+ const appUrl = getConfiguredAppDatabaseUrl("DATABASE_URL");
76
+ if (appUrl)
77
+ return isServerlessRuntime() ? stripNeonPooler(appUrl) : appUrl;
78
+ const unpooled = getAppConfig().runtime.databaseUrlUnpooled;
79
+ if (unpooled)
80
+ return stripNeonPooler(unpooled);
81
+ const url = getDatabaseUrl(fallback);
82
+ return isServerlessRuntime() ? stripNeonPooler(url) : url;
83
+ }
46
84
  /** Same per-app resolution for DATABASE_AUTH_TOKEN (used by Turso/libsql). */
47
85
  export function getDatabaseAuthToken() {
48
86
  const appName = process.env.APP_NAME?.toUpperCase().replace(/-/g, "_");
@@ -67,21 +105,14 @@ function getAppEnvPrefix() {
67
105
  * Non-Neon URLs and already-direct Neon URLs are returned unchanged.
68
106
  */
69
107
  export function getMigrationDatabaseUrl() {
70
- const appName = getAppEnvPrefix();
71
- const appUnpooled = appName
72
- ? process.env[`${appName}_DATABASE_URL_UNPOOLED`]
73
- : undefined;
74
- const url = appUnpooled ||
75
- process.env.NETLIFY_DATABASE_URL_UNPOOLED ||
76
- process.env.DATABASE_URL_UNPOOLED ||
77
- getDatabaseUrl();
108
+ const url = getConfiguredUnpooledDatabaseUrl() || getDatabaseUrl();
78
109
  // Neon pooler hostname: ep-<id>-pooler.<region>.<cloud>.neon.tech
79
110
  // Direct hostname: ep-<id>.<region>.<cloud>.neon.tech
80
111
  // The region between `-pooler.` and `.neon.tech` can contain multiple
81
112
  // dot-separated labels (e.g. `c-7.us-east-1.aws`), so the matched segment
82
113
  // must allow dots — `[a-z0-9.-]+` — not just a single label. Anchoring on the
83
114
  // stable `.neon.tech` suffix keeps this from touching non-Neon hosts.
84
- return url.replace(/-pooler(\.[a-z0-9.-]+\.neon\.tech)/, "$1");
115
+ return stripNeonPooler(url);
85
116
  }
86
117
  export function isLocalSqliteUrl(url) {
87
118
  return url === "" || url.startsWith("file:") || !url.includes("://");
@@ -346,8 +377,8 @@ let _dialect;
346
377
  export function getDialect() {
347
378
  if (_dialect !== undefined)
348
379
  return _dialect;
349
- // DATABASE_URL takes priority over D1 when set.
350
- const url = getDatabaseUrl();
380
+ // The effective runtime URL takes priority over D1 when set.
381
+ const url = getRuntimeDatabaseUrl();
351
382
  if (url.startsWith("postgres://") ||
352
383
  url.startsWith("postgresql://") ||
353
384
  isPgliteUrl(url)) {
@@ -398,11 +429,11 @@ function dialectForConfig(config) {
398
429
  * would read and write each other's settings, oauth tokens, and app state.
399
430
  */
400
431
  export function isLocalDatabase() {
401
- if (isPgliteUrl(getDatabaseUrl()))
432
+ const url = getRuntimeDatabaseUrl();
433
+ if (isPgliteUrl(url))
402
434
  return true;
403
435
  if (getDialect() !== "sqlite")
404
436
  return false;
405
- const url = getDatabaseUrl();
406
437
  return url === "" || url.startsWith("file:");
407
438
  }
408
439
  /** Returns BIGINT for Postgres (64-bit), INTEGER for SQLite (already 64-bit). */
@@ -768,7 +799,8 @@ export function isServerlessRuntime() {
768
799
  !!process.env.VERCEL ||
769
800
  !!process.env.AWS_LAMBDA_FUNCTION_NAME ||
770
801
  !!process.env.LAMBDA_TASK_ROOT ||
771
- !!process.env.CF_PAGES);
802
+ !!process.env.CF_PAGES ||
803
+ hasCloudflareRuntimeBinding());
772
804
  }
773
805
  /**
774
806
  * True for production serverless execution contexts. Netlify also exposes
@@ -1681,7 +1713,7 @@ async function initClient() {
1681
1713
  if (_exec)
1682
1714
  return;
1683
1715
  const dialect = getDialect();
1684
- const url = getDatabaseUrl("file:./data/app.db");
1716
+ const url = getRuntimeDatabaseUrl("file:./data/app.db");
1685
1717
  _exec = await createDbExecInternal({
1686
1718
  url,
1687
1719
  authToken: getDatabaseAuthToken(),
@@ -1,6 +1,6 @@
1
1
  import { AsyncLocalStorage } from "node:async_hooks";
2
2
  import { drizzle as drizzleD1 } from "drizzle-orm/d1";
3
- import { getDialect, getCloudflareD1Binding, getDatabaseUrl, getDatabaseAuthToken, isLocalSqliteUrl, isPgliteUrl, isConnectionError, getPgliteClient, loadPgliteDrizzle, prepareLocalSqliteUrl, sqliteFilenameFromUrl, pgPoolOptions, neonPoolOptions, guardNeonPool, withDbTimeout, retryOnConnectionError, dbOpTimeoutMs, sharedDbPool, onSharedDbPoolsClosed, onSharedDbPoolReplaced, } from "./client.js";
3
+ import { getDialect, getCloudflareD1Binding, getRuntimeDatabaseUrl, getDatabaseAuthToken, isLocalSqliteUrl, isPgliteUrl, isConnectionError, getPgliteClient, loadPgliteDrizzle, prepareLocalSqliteUrl, sqliteFilenameFromUrl, pgPoolOptions, neonPoolOptions, guardNeonPool, withDbTimeout, retryOnConnectionError, dbOpTimeoutMs, sharedDbPool, onSharedDbPoolsClosed, onSharedDbPoolReplaced, } from "./client.js";
4
4
  // Lazy driver loaders — cached promises so dynamic import only runs once.
5
5
  let _pgDrizzle;
6
6
  function getPgDrizzle() {
@@ -424,7 +424,7 @@ export function createGetDb(schema) {
424
424
  function startInit() {
425
425
  if (_dbReady)
426
426
  return _dbReady;
427
- const url = getDatabaseUrl("file:./data/app.db");
427
+ const url = getRuntimeDatabaseUrl("file:./data/app.db");
428
428
  const dialect = getDialect();
429
429
  // D1 only if dialect detected it (DATABASE_URL takes priority)
430
430
  if (dialect === "d1") {
@@ -22,6 +22,6 @@ export declare function createDb(config: DbConfig): Promise<(import("drizzle-orm
22
22
  export type DrizzleDb = Awaited<ReturnType<typeof createDb>>;
23
23
  export { createGetDb } from "./create-get-db.js";
24
24
  export { deferMigration, MIGRATION_DEFERRED, runMigrations, withMigrationRuntime, type MigrationEntry, type MigrationRunResult, type MigrationSource, type MigrationSql, } from "./migrations.js";
25
- export { getDbExec, createDbExec, getDatabaseUrl, getDialect, isLocalDatabase, isPostgres, assertSchemaMutationAllowed, isSchemaMutationStatement, isProductionServerlessFunctionRuntime, intType, closeDbExec, type DbExec, type DbExecConfig, type DbExecQuery, type DbExecStatement, type Dialect, } from "./client.js";
25
+ export { getDbExec, createDbExec, getDatabaseUrl, getRuntimeDatabaseUrl, getDialect, isLocalDatabase, isPostgres, assertSchemaMutationAllowed, isSchemaMutationStatement, isProductionServerlessFunctionRuntime, intType, closeDbExec, type DbExec, type DbExecConfig, type DbExecQuery, type DbExecStatement, type Dialect, } from "./client.js";
26
26
  export { table, text, integer, now } from "./schema.js";
27
27
  export { ensureAdditiveColumns, type EnsureAdditiveColumnsOptions, type EnsureAdditiveColumnsResult, type EnsureAdditiveColumnsLogger, } from "./ensure-additive-columns.js";
package/dist/db/index.js CHANGED
@@ -21,6 +21,6 @@ export async function createDb(config) {
21
21
  }
22
22
  export { createGetDb } from "./create-get-db.js";
23
23
  export { deferMigration, MIGRATION_DEFERRED, runMigrations, withMigrationRuntime, } from "./migrations.js";
24
- export { getDbExec, createDbExec, getDatabaseUrl, getDialect, isLocalDatabase, isPostgres, assertSchemaMutationAllowed, isSchemaMutationStatement, isProductionServerlessFunctionRuntime, intType, closeDbExec, } from "./client.js";
24
+ export { getDbExec, createDbExec, getDatabaseUrl, getRuntimeDatabaseUrl, getDialect, isLocalDatabase, isPostgres, assertSchemaMutationAllowed, isSchemaMutationStatement, isProductionServerlessFunctionRuntime, intType, closeDbExec, } from "./client.js";
25
25
  export { table, text, integer, now } from "./schema.js";
26
26
  export { ensureAdditiveColumns, } from "./ensure-additive-columns.js";
@@ -1,5 +1,5 @@
1
1
  import { createHash } from "node:crypto";
2
- import { getDatabaseUrl, getDialect, getDbExec, } from "./client.js";
2
+ import { getDialect, getDbExec, getRuntimeDatabaseUrl, } from "./client.js";
3
3
  export const DEFAULT_REQUIRED_SCHEMA = [
4
4
  {
5
5
  table: "agent_runs",
@@ -133,7 +133,7 @@ function parseDatabaseUrl(url) {
133
133
  }
134
134
  }
135
135
  export function getDatabaseRuntimeFingerprint() {
136
- const url = getDatabaseUrl();
136
+ const url = getRuntimeDatabaseUrl();
137
137
  const parsed = parseDatabaseUrl(url);
138
138
  return {
139
139
  configured: Boolean(url),
@@ -17,11 +17,11 @@ declare const _default: import("../../action.js").ActionDefinition<{
17
17
  url?: undefined;
18
18
  provider?: undefined;
19
19
  } | {
20
- error?: undefined;
21
20
  configured?: undefined;
22
21
  connectPath?: undefined;
23
22
  url: string;
24
23
  id: string;
25
24
  provider: string;
25
+ error?: undefined;
26
26
  }>;
27
27
  export default _default;
@@ -41,16 +41,16 @@ export declare function createObservabilityHandler(): import("h3").EventHandlerW
41
41
  thumbsUpRate: number;
42
42
  avgEvalScore: number;
43
43
  } | {
44
- error?: undefined;
45
44
  summary: import("./types.js").TraceSummary;
46
45
  spans: import("./types.js").TraceSpan[];
47
46
  id?: undefined;
47
+ error?: undefined;
48
48
  ok?: undefined;
49
49
  } | {
50
- error?: undefined;
51
50
  summary?: undefined;
52
51
  spans?: undefined;
53
52
  id: string;
53
+ error?: undefined;
54
54
  ok?: undefined;
55
55
  } | {
56
56
  summary?: undefined;
@@ -59,9 +59,9 @@ export declare function createObservabilityHandler(): import("h3").EventHandlerW
59
59
  error: any;
60
60
  ok?: undefined;
61
61
  } | {
62
- error?: undefined;
63
62
  summary?: undefined;
64
63
  spans?: undefined;
65
64
  id?: undefined;
66
65
  ok: boolean;
66
+ error?: undefined;
67
67
  }>>;
@@ -48,8 +48,8 @@ export declare function handleUpdateResource(event: any): Promise<import("./stor
48
48
  }>;
49
49
  /** DELETE /_agent-native/resources/:id — delete a resource */
50
50
  export declare function handleDeleteResource(event: any): Promise<{
51
- ok?: undefined;
52
51
  error: string;
52
+ ok?: undefined;
53
53
  } | {
54
54
  error?: undefined;
55
55
  ok: boolean;
@@ -37,17 +37,17 @@ export declare function createWriteSecretHandler(): import("h3").EventHandlerWit
37
37
  ok?: undefined;
38
38
  status?: undefined;
39
39
  } | {
40
- error?: undefined;
41
40
  ok: boolean;
42
41
  status: string;
42
+ error?: undefined;
43
43
  } | {
44
44
  ok?: undefined;
45
45
  error: string;
46
46
  removed?: undefined;
47
47
  } | {
48
- error?: undefined;
49
48
  ok: boolean;
50
49
  removed: boolean;
50
+ error?: undefined;
51
51
  }>>;
52
52
  /**
53
53
  * POST /_agent-native/secrets/:key/test — validate an optional candidate value
@@ -58,13 +58,13 @@ export declare function createTestSecretHandler(): import("h3").EventHandlerWith
58
58
  error: string;
59
59
  note?: undefined;
60
60
  } | {
61
- error?: undefined;
62
61
  ok: boolean;
63
62
  note?: undefined;
64
- } | {
65
63
  error?: undefined;
64
+ } | {
66
65
  ok: boolean;
67
66
  note: string;
67
+ error?: undefined;
68
68
  } | {
69
69
  note?: undefined;
70
70
  ok: boolean;
@@ -95,11 +95,11 @@ export interface AdHocSecretPayload {
95
95
  export declare function createAdHocSecretHandler(): import("h3").EventHandlerWithFetch<import("h3").EventHandlerRequest, Promise<AdHocSecretPayload[] | {
96
96
  error: string;
97
97
  } | {
98
- error?: undefined;
99
98
  ok: boolean;
100
99
  key: string;
101
- } | {
102
100
  error?: undefined;
101
+ } | {
103
102
  ok: boolean;
104
103
  removed: boolean;
104
+ error?: undefined;
105
105
  }>>;
@@ -34,10 +34,10 @@ export declare function resolveAgentEngineApiKeyWriteTarget(event: H3Event, scop
34
34
  export declare function createAgentEngineApiKeyHandler(): import("h3").EventHandlerWithFetch<import("h3").EventHandlerRequest, Promise<{
35
35
  error: any;
36
36
  } | {
37
- error?: undefined;
38
37
  ok: boolean;
39
38
  key: string;
40
39
  baseUrlKey?: string;
41
40
  scope: AgentEngineApiKeyScope;
41
+ error?: undefined;
42
42
  }>>;
43
43
  export {};
@@ -24,7 +24,7 @@ import { sqliteTable, text as sqliteText, integer as sqliteInteger, } from "driz
24
24
  import { getAppConfig } from "../app-config/index.js";
25
25
  import { TEMPLATES } from "../cli/templates-meta.js";
26
26
  import { getDbExec, isPostgres } from "../db/client.js";
27
- import { getDialect, getCloudflareD1Binding, getDatabaseUrl, getDatabaseAuthToken, closePgliteClients, getPgliteClient, isPgliteUrl, loadPgliteDrizzle, pgPoolOptions, neonPoolOptions, guardNeonPool, sharedDbPool, onSharedDbPoolsClosed, onSharedDbPoolReplaced, prepareLocalSqliteUrl, sqliteFilenameFromUrl, retrySqliteBusy, } from "../db/client.js";
27
+ import { getDialect, getCloudflareD1Binding, getRuntimeDatabaseUrl, getDatabaseAuthToken, closePgliteClients, getPgliteClient, isPgliteUrl, loadPgliteDrizzle, pgPoolOptions, neonPoolOptions, guardNeonPool, sharedDbPool, onSharedDbPoolsClosed, onSharedDbPoolReplaced, prepareLocalSqliteUrl, sqliteFilenameFromUrl, retrySqliteBusy, } from "../db/client.js";
28
28
  import { CORE_RESET_PASSWORD_EMAIL_ID, CORE_VERIFY_SIGNUP_EMAIL_ID, } from "../email-catalog/system-emails.js";
29
29
  import { saveOAuthTokens } from "../oauth-tokens/store.js";
30
30
  import { acceptPendingInvitationsForEmail } from "../org/accept-pending.js";
@@ -1505,7 +1505,7 @@ export async function configureLocalSqlite(sqlite) {
1505
1505
  }
1506
1506
  export async function buildDatabaseConfig(dialect) {
1507
1507
  if (dialect === "postgres") {
1508
- const url = getDatabaseUrl();
1508
+ const url = getRuntimeDatabaseUrl();
1509
1509
  const { buildResilientNeonPool, buildResilientPostgresJsClient, isNeonUrl, } = await import("../db/create-get-db.js");
1510
1510
  if (isPgliteUrl(url)) {
1511
1511
  const { drizzle } = await loadPgliteDrizzle();
@@ -1573,7 +1573,7 @@ export async function buildDatabaseConfig(dialect) {
1573
1573
  });
1574
1574
  }
1575
1575
  // SQLite / libsql
1576
- const url = getDatabaseUrl("file:./data/app.db");
1576
+ const url = getRuntimeDatabaseUrl("file:./data/app.db");
1577
1577
  if (url.startsWith("file:") || !url.includes("://")) {
1578
1578
  // Local SQLite via better-sqlite3
1579
1579
  const { default: Database } = await import("better-sqlite3");
@@ -20,6 +20,6 @@ export declare function createTranscribeVoiceHandler(): import("h3").EventHandle
20
20
  error: string;
21
21
  text?: undefined;
22
22
  } | {
23
- error?: undefined;
24
23
  text: string;
24
+ error?: undefined;
25
25
  }>>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-native/core",
3
- "version": "0.176.3-nightly-20260901181437",
3
+ "version": "0.176.3",
4
4
  "description": "Framework for agent-native application development — where AI agents and UI share SQL state, actions, and context",
5
5
  "homepage": "https://github.com/BuilderIO/agent-native#readme",
6
6
  "bugs": {
@@ -437,8 +437,8 @@
437
437
  "y-protocols": "^1.0.7",
438
438
  "yjs": "^13.6.32",
439
439
  "zod": "^4.3.6",
440
- "@agent-native/recap-cli": "0.5.22",
441
- "@agent-native/toolkit": "^0.19.1-nightly-20260901181437"
440
+ "@agent-native/recap-cli": "0.5.23",
441
+ "@agent-native/toolkit": "^0.19.1"
442
442
  },
443
443
  "devDependencies": {
444
444
  "@ai-sdk/anthropic": "^3.0.71",