ugly-app 0.1.638 → 0.1.640
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/agent/server/index.d.ts +1 -1
- package/dist/agent/server/index.d.ts.map +1 -1
- package/dist/agent/server/index.js +1 -1
- package/dist/agent/server/index.js.map +1 -1
- package/dist/agent/server/registerAgentHandler.d.ts +17 -9
- package/dist/agent/server/registerAgentHandler.d.ts.map +1 -1
- package/dist/agent/server/registerAgentHandler.js +25 -21
- package/dist/agent/server/registerAgentHandler.js.map +1 -1
- package/dist/cli/version.d.ts +1 -1
- package/dist/cli/version.js +1 -1
- package/dist/server/adapter/workers/wrapWithAssets.d.ts.map +1 -1
- package/dist/server/adapter/workers/wrapWithAssets.js +21 -2
- package/dist/server/adapter/workers/wrapWithAssets.js.map +1 -1
- package/package.json +1 -1
- package/src/agent/server/index.ts +2 -1
- package/src/agent/server/registerAgentHandler.ts +41 -22
- package/src/cli/version.ts +1 -1
- package/src/server/adapter/workers/wrapWithAssets.ts +21 -2
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export { streamUglyBotTurn, type StreamUglyBotInput, type StreamUglyBotEvents, type StreamUglyBotResult, } from './UglyBotTextStream.js';
|
|
2
2
|
export { streamAgentTurn, type StreamAgentTurnDeps, } from './streamAgentTurn.js';
|
|
3
|
-
export { agentTurnHandler,
|
|
3
|
+
export { agentTurnHandler, createDbAgentSessionStore, type AgentHandlerConfig, type AgentSessionDb, } from './registerAgentHandler.js';
|
|
4
4
|
export { agentTurnRequestSchema, agentTurnResponseSchema, AGENT_STREAM_COLLECTION, AGENT_STREAM_KEY_FIELD, MemoryAgentSessionStore, } from '../shared/index.js';
|
|
5
5
|
export type { AgentSession, AgentSessionStore, AgentStopReason, AgentTurnRequest, AgentTurnResponse, ToolUseRef, } from '../shared/index.js';
|
|
6
6
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/agent/server/index.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,iBAAiB,EACjB,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,GACzB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,eAAe,EACf,KAAK,mBAAmB,GACzB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,gBAAgB,EAChB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/agent/server/index.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,iBAAiB,EACjB,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,GACzB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,eAAe,EACf,KAAK,mBAAmB,GACzB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,gBAAgB,EAChB,yBAAyB,EACzB,KAAK,kBAAkB,EACvB,KAAK,cAAc,GACpB,MAAM,2BAA2B,CAAC;AAGnC,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EACvB,uBAAuB,EACvB,sBAAsB,EACtB,uBAAuB,GACxB,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EACV,YAAY,EACZ,iBAAiB,EACjB,eAAe,EACf,gBAAgB,EAChB,iBAAiB,EACjB,UAAU,GACX,MAAM,oBAAoB,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// ugly-app/agent/server — stateless-per-turn streaming proxy + session persist.
|
|
2
2
|
export { streamUglyBotTurn, } from './UglyBotTextStream.js';
|
|
3
3
|
export { streamAgentTurn, } from './streamAgentTurn.js';
|
|
4
|
-
export { agentTurnHandler,
|
|
4
|
+
export { agentTurnHandler, createDbAgentSessionStore, } from './registerAgentHandler.js';
|
|
5
5
|
// Re-export the shared contracts so apps import server + types from one place.
|
|
6
6
|
export { agentTurnRequestSchema, agentTurnResponseSchema, AGENT_STREAM_COLLECTION, AGENT_STREAM_KEY_FIELD, MemoryAgentSessionStore, } from '../shared/index.js';
|
|
7
7
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/agent/server/index.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAEhF,OAAO,EACL,iBAAiB,GAIlB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,eAAe,GAEhB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,gBAAgB,EAChB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/agent/server/index.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAEhF,OAAO,EACL,iBAAiB,GAIlB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,eAAe,GAEhB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,gBAAgB,EAChB,yBAAyB,GAG1B,MAAM,2BAA2B,CAAC;AAEnC,+EAA+E;AAC/E,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EACvB,uBAAuB,EACvB,sBAAsB,EACtB,uBAAuB,GACxB,MAAM,oBAAoB,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type
|
|
1
|
+
import { type AgentSessionStore } from '../shared/SessionStore.js';
|
|
2
2
|
import type { AgentTurnRequest, AgentTurnResponse, TextGenTool } from '../shared/AgentStream.js';
|
|
3
3
|
export interface AgentHandlerConfig {
|
|
4
4
|
/** Authoritative tool specs — override whatever the client declares. */
|
|
@@ -12,14 +12,22 @@ export interface AgentHandlerConfig {
|
|
|
12
12
|
}
|
|
13
13
|
export declare function agentTurnHandler(cfg?: AgentHandlerConfig): (userId: string, input: AgentTurnRequest) => Promise<AgentTurnResponse>;
|
|
14
14
|
/**
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
15
|
+
* The minimal, runtime-agnostic db surface the session store needs — satisfied
|
|
16
|
+
* by an app's own TypedDB (Node or Workers). Kept loose so apps whose facade
|
|
17
|
+
* keys collections by object rather than string still fit.
|
|
18
18
|
*/
|
|
19
|
-
export
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
19
|
+
export interface AgentSessionDb {
|
|
20
|
+
getDoc(collection: string, id: string): Promise<unknown>;
|
|
21
|
+
setDoc(collection: string, doc: {
|
|
22
|
+
_id: string;
|
|
23
|
+
} & Record<string, unknown>): Promise<unknown>;
|
|
24
24
|
}
|
|
25
|
+
/**
|
|
26
|
+
* A SessionStore backed by the app's OWN injected db (`agentSession`
|
|
27
|
+
* collection) — the canonical server-side session (durability + multi-device +
|
|
28
|
+
* observability), one cheap upsert per committed turn. The session payload is
|
|
29
|
+
* nested under `data`. Uses the injected db (NOT the framework `DB.js`) so it
|
|
30
|
+
* stays Workers-safe.
|
|
31
|
+
*/
|
|
32
|
+
export declare function createDbAgentSessionStore(db: AgentSessionDb, collection?: string): AgentSessionStore;
|
|
25
33
|
//# sourceMappingURL=registerAgentHandler.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registerAgentHandler.d.ts","sourceRoot":"","sources":["../../../src/agent/server/registerAgentHandler.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"registerAgentHandler.d.ts","sourceRoot":"","sources":["../../../src/agent/server/registerAgentHandler.ts"],"names":[],"mappings":"AAoBA,OAAO,EAIL,KAAK,iBAAiB,EACvB,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAEV,gBAAgB,EAChB,iBAAiB,EACjB,WAAW,EACZ,MAAM,0BAA0B,CAAC;AAGlC,MAAM,WAAW,kBAAkB;IACjC,wEAAwE;IACxE,KAAK,CAAC,EAAE,WAAW,EAAE,CAAC;IACtB,uEAAuE;IACvE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iFAAiF;IACjF,YAAY,CAAC,EAAE,iBAAiB,CAAC;IACjC,+CAA+C;IAC/C,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAoBD,wBAAgB,gBAAgB,CAC9B,GAAG,GAAE,kBAAuB,GAC3B,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,gBAAgB,KAAK,OAAO,CAAC,iBAAiB,CAAC,CA4DzE;AAID;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACzD,MAAM,CACJ,UAAU,EAAE,MAAM,EAClB,GAAG,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7C,OAAO,CAAC,OAAO,CAAC,CAAC;CACrB;AAED;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CACvC,EAAE,EAAE,cAAc,EAClB,UAAU,SAAiB,GAC1B,iBAAiB,CAmBnB"}
|
|
@@ -13,8 +13,9 @@
|
|
|
13
13
|
// The app awaits the handler (worker stays alive, ALS user-token intact for
|
|
14
14
|
// billing); the client calls with `{ timeoutMs: null }`. Live text frames ride
|
|
15
15
|
// the hub during the await.
|
|
16
|
-
|
|
17
|
-
|
|
16
|
+
// NOTE: deliberately NO import of the framework `server/DB.js` here — that pulls
|
|
17
|
+
// in Node `pg` (Pg.js) and would break `build:workers` for any app importing
|
|
18
|
+
// agentTurnHandler. The DB-backed store takes an INJECTED, runtime-agnostic db.
|
|
18
19
|
import { accrueTelemetry, emptyTelemetryTotals, } from '../shared/SessionStore.js';
|
|
19
20
|
import { streamAgentTurn } from './streamAgentTurn.js';
|
|
20
21
|
/** Build the authoritative response from a session's last assistant turn. */
|
|
@@ -84,25 +85,28 @@ export function agentTurnHandler(cfg = {}) {
|
|
|
84
85
|
};
|
|
85
86
|
}
|
|
86
87
|
/**
|
|
87
|
-
* A SessionStore backed by the app's
|
|
88
|
-
*
|
|
89
|
-
*
|
|
88
|
+
* A SessionStore backed by the app's OWN injected db (`agentSession`
|
|
89
|
+
* collection) — the canonical server-side session (durability + multi-device +
|
|
90
|
+
* observability), one cheap upsert per committed turn. The session payload is
|
|
91
|
+
* nested under `data`. Uses the injected db (NOT the framework `DB.js`) so it
|
|
92
|
+
* stays Workers-safe.
|
|
90
93
|
*/
|
|
91
|
-
export
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
94
|
+
export function createDbAgentSessionStore(db, collection = 'agentSession') {
|
|
95
|
+
return {
|
|
96
|
+
async load(sessionId) {
|
|
97
|
+
const doc = (await db.getDoc(collection, sessionId));
|
|
98
|
+
return doc?.data ?? null;
|
|
99
|
+
},
|
|
100
|
+
async save(session) {
|
|
101
|
+
const now = new Date();
|
|
102
|
+
await db.setDoc(collection, {
|
|
103
|
+
_id: session.sessionId,
|
|
104
|
+
version: 1,
|
|
105
|
+
created: now,
|
|
106
|
+
updated: now,
|
|
107
|
+
data: session,
|
|
108
|
+
});
|
|
109
|
+
},
|
|
110
|
+
};
|
|
107
111
|
}
|
|
108
112
|
//# sourceMappingURL=registerAgentHandler.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registerAgentHandler.js","sourceRoot":"","sources":["../../../src/agent/server/registerAgentHandler.ts"],"names":[],"mappings":"AAAA,oEAAoE;AACpE,EAAE;AACF,8EAA8E;AAC9E,6DAA6D;AAC7D,yEAAyE;AACzE,6EAA6E;AAC7E,iDAAiD;AACjD,uEAAuE;AACvE,sDAAsD;AACtD,wEAAwE;AACxE,yDAAyD;AACzD,EAAE;AACF,4EAA4E;AAC5E,+EAA+E;AAC/E,4BAA4B;AAG5B,
|
|
1
|
+
{"version":3,"file":"registerAgentHandler.js","sourceRoot":"","sources":["../../../src/agent/server/registerAgentHandler.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/version.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const CLI_VERSION = "0.1.
|
|
1
|
+
export declare const CLI_VERSION = "0.1.640";
|
|
2
2
|
//# sourceMappingURL=version.d.ts.map
|
package/dist/cli/version.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wrapWithAssets.d.ts","sourceRoot":"","sources":["../../../../src/server/adapter/workers/wrapWithAssets.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAMH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAGxD,MAAM,WAAW,YAAY;IAC3B;;;OAGG;IACH,SAAS,EAAE,MAAM,CAAC;IAClB;;;;OAIG;IACH,OAAO,EAAE,MAAM,CAAC;CACjB;
|
|
1
|
+
{"version":3,"file":"wrapWithAssets.d.ts","sourceRoot":"","sources":["../../../../src/server/adapter/workers/wrapWithAssets.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAMH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAGxD,MAAM,WAAW,YAAY;IAC3B;;;OAGG;IACH,SAAS,EAAE,MAAM,CAAC;IAClB;;;;OAIG;IACH,OAAO,EAAE,MAAM,CAAC;CACjB;AA8MD,wBAAgB,cAAc,CAC5B,IAAI,EAAE,UAAU,EAChB,MAAM,EAAE,YAAY,GACnB,UAAU,CA+JZ"}
|
|
@@ -30,6 +30,11 @@
|
|
|
30
30
|
import { getUglyBotUrl } from '../../../shared/uglyBotUrl.js';
|
|
31
31
|
import { getAppContext } from './createWorkersApp.js';
|
|
32
32
|
const ASSET_CACHE_CONTROL = 'public, max-age=31536000, immutable';
|
|
33
|
+
// Stable-named public files (icon.png, favicon.ico, manifest.json, …) keep the
|
|
34
|
+
// SAME url across deploys but their CONTENT changes, so they must NOT be
|
|
35
|
+
// immutable — caches would serve the old file forever. Revalidate against the
|
|
36
|
+
// ETag each load (cheap 304 when unchanged, fresh bytes when the asset changed).
|
|
37
|
+
const MUTABLE_ASSET_CACHE_CONTROL = 'public, max-age=0, must-revalidate';
|
|
33
38
|
const HTML_CACHE_CONTROL = 'no-cache, no-store, must-revalidate';
|
|
34
39
|
// Web-push service worker, served same-origin at `/ugly-push-sw.js` with
|
|
35
40
|
// `Service-Worker-Allowed: /`. FCM web push (Firebase) — the single push
|
|
@@ -260,6 +265,11 @@ export function wrapWithAssets(base, config) {
|
|
|
260
265
|
// build, so we resolve either to `builds/{buildId}/<rest>`.
|
|
261
266
|
const isMethodIdempotent = method === 'GET' || method === 'HEAD';
|
|
262
267
|
let assetRest = null;
|
|
268
|
+
// Immutable only for content-addressed assets — buildId-prefixed urls and
|
|
269
|
+
// Vite's hash-named `/assets/*`. Stable-named root files (icon.png,
|
|
270
|
+
// favicon.ico, manifest.json) keep the same url but change content per
|
|
271
|
+
// deploy, so they revalidate instead.
|
|
272
|
+
let immutable = true;
|
|
263
273
|
if (isMethodIdempotent && path.startsWith(assetPrefix)) {
|
|
264
274
|
assetRest = path.slice(assetPrefix.length);
|
|
265
275
|
}
|
|
@@ -268,6 +278,7 @@ export function wrapWithAssets(base, config) {
|
|
|
268
278
|
path === '/favicon.ico' ||
|
|
269
279
|
/^\/[^/]+\.(?:png|svg|jpg|jpeg|gif|webp|woff2?|ttf|ico|map)$/i.test(path))) {
|
|
270
280
|
assetRest = path.slice(1); // drop leading "/"
|
|
281
|
+
immutable = assetRest.startsWith('assets/');
|
|
271
282
|
}
|
|
272
283
|
if (assetRest !== null) {
|
|
273
284
|
const key = `builds/${buildId}/${assetRest}`;
|
|
@@ -275,13 +286,21 @@ export function wrapWithAssets(base, config) {
|
|
|
275
286
|
if (!obj) {
|
|
276
287
|
return new Response('asset not found', { status: 404 });
|
|
277
288
|
}
|
|
289
|
+
const cacheControl = immutable ? ASSET_CACHE_CONTROL : MUTABLE_ASSET_CACHE_CONTROL;
|
|
290
|
+
// Cheap revalidation: 304 when the client already has this exact etag.
|
|
291
|
+
if (request.headers.get('if-none-match') === obj.etag) {
|
|
292
|
+
return new Response(null, {
|
|
293
|
+
status: 304,
|
|
294
|
+
headers: { etag: obj.etag, 'cache-control': cacheControl },
|
|
295
|
+
});
|
|
296
|
+
}
|
|
278
297
|
const contentType = obj.httpMetadata?.contentType ?? guessContentType(assetRest);
|
|
279
298
|
return new Response(obj.body, {
|
|
280
299
|
status: 200,
|
|
281
300
|
headers: {
|
|
282
301
|
'content-type': contentType,
|
|
283
|
-
'cache-control':
|
|
284
|
-
// ETag
|
|
302
|
+
'cache-control': cacheControl,
|
|
303
|
+
// ETag drives cheap conditional GETs (304) on revalidation.
|
|
285
304
|
etag: obj.etag,
|
|
286
305
|
},
|
|
287
306
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wrapWithAssets.js","sourceRoot":"","sources":["../../../../src/server/adapter/workers/wrapWithAssets.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"wrapWithAssets.js","sourceRoot":"","sources":["../../../../src/server/adapter/workers/wrapWithAssets.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ugly-app",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.640",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"comment:files": "Allowlist what ships to npm. dist = runtime; src = sourcemap targets (dist/*.js.map reference ../../src/); templates = CLI scaffold. Everything else at repo root (.pgdata local Postgres, coverage, assets/icons sources, test/, test-results/) is excluded by omission. The !negations strip the scaffold's installed deps + cruft (templates/node_modules is 200MB+ and must never ship). package.json/README/LICENSE ship automatically.",
|
|
6
6
|
"files": [
|
|
@@ -14,8 +14,9 @@ export {
|
|
|
14
14
|
|
|
15
15
|
export {
|
|
16
16
|
agentTurnHandler,
|
|
17
|
-
|
|
17
|
+
createDbAgentSessionStore,
|
|
18
18
|
type AgentHandlerConfig,
|
|
19
|
+
type AgentSessionDb,
|
|
19
20
|
} from './registerAgentHandler.js';
|
|
20
21
|
|
|
21
22
|
// Re-export the shared contracts so apps import server + types from one place.
|
|
@@ -15,8 +15,9 @@
|
|
|
15
15
|
// the hub during the await.
|
|
16
16
|
|
|
17
17
|
import type { ContentPart, Message } from '../../shared/TextGen.js';
|
|
18
|
-
|
|
19
|
-
|
|
18
|
+
// NOTE: deliberately NO import of the framework `server/DB.js` here — that pulls
|
|
19
|
+
// in Node `pg` (Pg.js) and would break `build:workers` for any app importing
|
|
20
|
+
// agentTurnHandler. The DB-backed store takes an INJECTED, runtime-agnostic db.
|
|
20
21
|
import {
|
|
21
22
|
accrueTelemetry,
|
|
22
23
|
emptyTelemetryTotals,
|
|
@@ -126,28 +127,46 @@ export function agentTurnHandler(
|
|
|
126
127
|
|
|
127
128
|
// ─── DB-backed session store (hosted apps) ───────────────────────────────────
|
|
128
129
|
|
|
129
|
-
|
|
130
|
-
|
|
130
|
+
/**
|
|
131
|
+
* The minimal, runtime-agnostic db surface the session store needs — satisfied
|
|
132
|
+
* by an app's own TypedDB (Node or Workers). Kept loose so apps whose facade
|
|
133
|
+
* keys collections by object rather than string still fit.
|
|
134
|
+
*/
|
|
135
|
+
export interface AgentSessionDb {
|
|
136
|
+
getDoc(collection: string, id: string): Promise<unknown>;
|
|
137
|
+
setDoc(
|
|
138
|
+
collection: string,
|
|
139
|
+
doc: { _id: string } & Record<string, unknown>,
|
|
140
|
+
): Promise<unknown>;
|
|
131
141
|
}
|
|
132
142
|
|
|
133
143
|
/**
|
|
134
|
-
* A SessionStore backed by the app's
|
|
135
|
-
*
|
|
136
|
-
*
|
|
144
|
+
* A SessionStore backed by the app's OWN injected db (`agentSession`
|
|
145
|
+
* collection) — the canonical server-side session (durability + multi-device +
|
|
146
|
+
* observability), one cheap upsert per committed turn. The session payload is
|
|
147
|
+
* nested under `data`. Uses the injected db (NOT the framework `DB.js`) so it
|
|
148
|
+
* stays Workers-safe.
|
|
137
149
|
*/
|
|
138
|
-
export
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
150
|
+
export function createDbAgentSessionStore(
|
|
151
|
+
db: AgentSessionDb,
|
|
152
|
+
collection = 'agentSession',
|
|
153
|
+
): AgentSessionStore {
|
|
154
|
+
return {
|
|
155
|
+
async load(sessionId) {
|
|
156
|
+
const doc = (await db.getDoc(collection, sessionId)) as
|
|
157
|
+
| { data?: AgentSession }
|
|
158
|
+
| null;
|
|
159
|
+
return doc?.data ?? null;
|
|
160
|
+
},
|
|
161
|
+
async save(session) {
|
|
162
|
+
const now = new Date();
|
|
163
|
+
await db.setDoc(collection, {
|
|
164
|
+
_id: session.sessionId,
|
|
165
|
+
version: 1,
|
|
166
|
+
created: now,
|
|
167
|
+
updated: now,
|
|
168
|
+
data: session,
|
|
169
|
+
});
|
|
170
|
+
},
|
|
171
|
+
};
|
|
153
172
|
}
|
package/src/cli/version.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
// Auto-generated by prebuild — do not edit manually
|
|
2
|
-
export const CLI_VERSION = "0.1.
|
|
2
|
+
export const CLI_VERSION = "0.1.640";
|
|
@@ -50,6 +50,11 @@ export interface AssetsConfig {
|
|
|
50
50
|
}
|
|
51
51
|
|
|
52
52
|
const ASSET_CACHE_CONTROL = 'public, max-age=31536000, immutable';
|
|
53
|
+
// Stable-named public files (icon.png, favicon.ico, manifest.json, …) keep the
|
|
54
|
+
// SAME url across deploys but their CONTENT changes, so they must NOT be
|
|
55
|
+
// immutable — caches would serve the old file forever. Revalidate against the
|
|
56
|
+
// ETag each load (cheap 304 when unchanged, fresh bytes when the asset changed).
|
|
57
|
+
const MUTABLE_ASSET_CACHE_CONTROL = 'public, max-age=0, must-revalidate';
|
|
53
58
|
const HTML_CACHE_CONTROL = 'no-cache, no-store, must-revalidate';
|
|
54
59
|
|
|
55
60
|
// Web-push service worker, served same-origin at `/ugly-push-sw.js` with
|
|
@@ -294,6 +299,11 @@ export function wrapWithAssets(
|
|
|
294
299
|
// build, so we resolve either to `builds/{buildId}/<rest>`.
|
|
295
300
|
const isMethodIdempotent = method === 'GET' || method === 'HEAD';
|
|
296
301
|
let assetRest: string | null = null;
|
|
302
|
+
// Immutable only for content-addressed assets — buildId-prefixed urls and
|
|
303
|
+
// Vite's hash-named `/assets/*`. Stable-named root files (icon.png,
|
|
304
|
+
// favicon.ico, manifest.json) keep the same url but change content per
|
|
305
|
+
// deploy, so they revalidate instead.
|
|
306
|
+
let immutable = true;
|
|
297
307
|
if (isMethodIdempotent && path.startsWith(assetPrefix)) {
|
|
298
308
|
assetRest = path.slice(assetPrefix.length);
|
|
299
309
|
} else if (
|
|
@@ -303,6 +313,7 @@ export function wrapWithAssets(
|
|
|
303
313
|
/^\/[^/]+\.(?:png|svg|jpg|jpeg|gif|webp|woff2?|ttf|ico|map)$/i.test(path))
|
|
304
314
|
) {
|
|
305
315
|
assetRest = path.slice(1); // drop leading "/"
|
|
316
|
+
immutable = assetRest.startsWith('assets/');
|
|
306
317
|
}
|
|
307
318
|
if (assetRest !== null) {
|
|
308
319
|
const key = `builds/${buildId}/${assetRest}`;
|
|
@@ -310,14 +321,22 @@ export function wrapWithAssets(
|
|
|
310
321
|
if (!obj) {
|
|
311
322
|
return new Response('asset not found', { status: 404 });
|
|
312
323
|
}
|
|
324
|
+
const cacheControl = immutable ? ASSET_CACHE_CONTROL : MUTABLE_ASSET_CACHE_CONTROL;
|
|
325
|
+
// Cheap revalidation: 304 when the client already has this exact etag.
|
|
326
|
+
if (request.headers.get('if-none-match') === obj.etag) {
|
|
327
|
+
return new Response(null, {
|
|
328
|
+
status: 304,
|
|
329
|
+
headers: { etag: obj.etag, 'cache-control': cacheControl },
|
|
330
|
+
});
|
|
331
|
+
}
|
|
313
332
|
const contentType =
|
|
314
333
|
obj.httpMetadata?.contentType ?? guessContentType(assetRest);
|
|
315
334
|
return new Response(obj.body as unknown as ReadableStream, {
|
|
316
335
|
status: 200,
|
|
317
336
|
headers: {
|
|
318
337
|
'content-type': contentType,
|
|
319
|
-
'cache-control':
|
|
320
|
-
// ETag
|
|
338
|
+
'cache-control': cacheControl,
|
|
339
|
+
// ETag drives cheap conditional GETs (304) on revalidation.
|
|
321
340
|
etag: obj.etag,
|
|
322
341
|
},
|
|
323
342
|
});
|