@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.
- package/corpus/templates/analytics/CHANGELOG.md +6 -0
- package/corpus/templates/calendar/CHANGELOG.md +18 -0
- package/corpus/templates/clips/chrome-extension/STORE_DRAFT.md +1 -1
- package/corpus/templates/clips/chrome-extension/public/manifest.json +1 -1
- package/corpus/templates/clips/desktop/src/lib/recording-link.ts +1 -1
- package/corpus/templates/clips/desktop/src/overlays/recording-pill.tsx +32 -1
- package/corpus/templates/content/CHANGELOG.md +6 -0
- package/corpus/templates/design/CHANGELOG.md +6 -0
- package/corpus/templates/dispatch/CHANGELOG.md +6 -0
- package/corpus/templates/factory/CHANGELOG.md +14 -0
- package/dist/app-config/runtime.d.ts +1 -0
- package/dist/app-config/runtime.js +9 -0
- package/dist/app-config/schema.d.ts +1 -0
- package/dist/collab/struct-routes.d.ts +1 -1
- package/dist/db/client.d.ts +10 -0
- package/dist/db/client.js +47 -15
- package/dist/db/create-get-db.js +2 -2
- package/dist/db/index.d.ts +1 -1
- package/dist/db/index.js +1 -1
- package/dist/db/runtime-diagnostics.js +2 -2
- package/dist/file-upload/actions/upload-image.d.ts +1 -1
- package/dist/observability/routes.d.ts +3 -3
- package/dist/resources/handlers.d.ts +1 -1
- package/dist/secrets/routes.d.ts +6 -6
- package/dist/server/agent-engine-api-key-route.d.ts +1 -1
- package/dist/server/better-auth-instance.js +3 -3
- package/dist/server/transcribe-voice.d.ts +1 -1
- package/package.json +3 -3
|
@@ -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.
|
|
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.
|
|
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
|
|
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
|
|
@@ -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;
|
package/dist/db/client.d.ts
CHANGED
|
@@ -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
|
|
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
|
|
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
|
-
//
|
|
350
|
-
const url =
|
|
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
|
-
|
|
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 =
|
|
1716
|
+
const url = getRuntimeDatabaseUrl("file:./data/app.db");
|
|
1685
1717
|
_exec = await createDbExecInternal({
|
|
1686
1718
|
url,
|
|
1687
1719
|
authToken: getDatabaseAuthToken(),
|
package/dist/db/create-get-db.js
CHANGED
|
@@ -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,
|
|
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 =
|
|
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") {
|
package/dist/db/index.d.ts
CHANGED
|
@@ -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 {
|
|
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 =
|
|
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;
|
package/dist/secrets/routes.d.ts
CHANGED
|
@@ -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,
|
|
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 =
|
|
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 =
|
|
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");
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agent-native/core",
|
|
3
|
-
"version": "0.176.3
|
|
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.
|
|
441
|
-
"@agent-native/toolkit": "^0.19.1
|
|
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",
|