@withbuddi/buddi 0.1.0-pre.45 → 0.1.0-pre.46
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/extension/background.js +157 -1
- package/extension/manifest.json +5 -2
- package/extension/popup.html +4 -0
- package/extension/popup.js +18 -0
- package/node_modules/@buddi/cli/dist/.tsbuildinfo +1 -1
- package/node_modules/@buddi/cli/dist/mcp/tools.d.ts +3 -8
- package/node_modules/@buddi/cli/dist/mcp/tools.d.ts.map +1 -1
- package/node_modules/@buddi/cli/dist/mcp/tools.js +22 -4
- package/node_modules/@buddi/cli/dist/mcp/tools.js.map +1 -1
- package/node_modules/@buddi/core/dist/.tsbuildinfo +1 -1
- package/node_modules/@buddi/core/dist/artifacts/orphans.d.ts +6 -4
- package/node_modules/@buddi/core/dist/artifacts/orphans.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/artifacts/orphans.js +10 -3
- package/node_modules/@buddi/core/dist/artifacts/orphans.js.map +1 -1
- package/node_modules/@buddi/core/dist/groups.d.ts +0 -9
- package/node_modules/@buddi/core/dist/groups.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/groups.js +13 -1
- package/node_modules/@buddi/core/dist/groups.js.map +1 -1
- package/node_modules/@buddi/core/dist/pages.d.ts +24 -1
- package/node_modules/@buddi/core/dist/pages.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/pages.js +61 -1
- package/node_modules/@buddi/core/dist/pages.js.map +1 -1
- package/node_modules/@buddi/core/dist/pending-input.d.ts +13 -2
- package/node_modules/@buddi/core/dist/pending-input.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/pending-input.js +57 -12
- package/node_modules/@buddi/core/dist/pending-input.js.map +1 -1
- package/node_modules/@buddi/core/dist/plugin/version.d.ts +1 -1
- package/node_modules/@buddi/core/dist/plugin/version.js +1 -1
- package/node_modules/@buddi/core/dist/web-settings.d.ts +8 -0
- package/node_modules/@buddi/core/dist/web-settings.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/web-settings.js +14 -0
- package/node_modules/@buddi/core/dist/web-settings.js.map +1 -1
- package/node_modules/@buddi/core/migrations/078_pending_input_files.sql +8 -0
- package/node_modules/@buddi/gateway/dist/.tsbuildinfo +1 -1
- package/node_modules/@buddi/gateway/dist/browser-host.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/browser-host.js +1 -0
- package/node_modules/@buddi/gateway/dist/browser-host.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/api-routes.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/api-routes.js +19 -1
- package/node_modules/@buddi/gateway/dist/web/api-routes.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/attention.d.ts +37 -0
- package/node_modules/@buddi/gateway/dist/web/attention.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/attention.js +54 -10
- package/node_modules/@buddi/gateway/dist/web/attention.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/canvas-tabs.d.ts +41 -0
- package/node_modules/@buddi/gateway/dist/web/canvas-tabs.d.ts.map +1 -0
- package/node_modules/@buddi/gateway/dist/web/canvas-tabs.js +68 -0
- package/node_modules/@buddi/gateway/dist/web/canvas-tabs.js.map +1 -0
- package/node_modules/@buddi/gateway/dist/web/chat.d.ts +0 -9
- package/node_modules/@buddi/gateway/dist/web/chat.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/chat.js +33 -19
- package/node_modules/@buddi/gateway/dist/web/chat.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/extension.d.ts +11 -1
- package/node_modules/@buddi/gateway/dist/web/extension.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/extension.js +51 -0
- package/node_modules/@buddi/gateway/dist/web/extension.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/pages.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/pages.js +10 -1
- package/node_modules/@buddi/gateway/dist/web/pages.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/server.d.ts +0 -4
- package/node_modules/@buddi/gateway/dist/web/server.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/server.js +72 -2
- package/node_modules/@buddi/gateway/dist/web/server.js.map +1 -1
- package/node_modules/@buddi/install/dist/.tsbuildinfo +1 -1
- package/node_modules/@buddi/runtime/dist/.tsbuildinfo +1 -1
- package/node_modules/@buddi/runtime/dist/loop.d.ts +6 -0
- package/node_modules/@buddi/runtime/dist/loop.d.ts.map +1 -1
- package/node_modules/@buddi/runtime/dist/loop.js +25 -10
- package/node_modules/@buddi/runtime/dist/loop.js.map +1 -1
- package/node_modules/@buddi/tool-artifacts/dist/.tsbuildinfo +1 -1
- package/node_modules/@buddi/tool-artifacts/dist/extract.d.ts +6 -0
- package/node_modules/@buddi/tool-artifacts/dist/extract.d.ts.map +1 -1
- package/node_modules/@buddi/tool-artifacts/dist/extract.js +6 -0
- package/node_modules/@buddi/tool-artifacts/dist/extract.js.map +1 -1
- package/node_modules/@buddi/tool-artifacts/dist/tools/artifacts.d.ts +1 -0
- package/node_modules/@buddi/tool-artifacts/dist/tools/artifacts.d.ts.map +1 -1
- package/node_modules/@buddi/tool-artifacts/dist/tools/artifacts.js +30 -8
- package/node_modules/@buddi/tool-artifacts/dist/tools/artifacts.js.map +1 -1
- package/node_modules/@buddi/tool-browser/dist/.tsbuildinfo +1 -1
- package/node_modules/@buddi/tool-browser/dist/controller.d.ts +25 -0
- package/node_modules/@buddi/tool-browser/dist/controller.d.ts.map +1 -1
- package/node_modules/@buddi/tool-browser/dist/controller.js +25 -1
- package/node_modules/@buddi/tool-browser/dist/controller.js.map +1 -1
- package/node_modules/@buddi/tool-browser/dist/downloads.d.ts +138 -0
- package/node_modules/@buddi/tool-browser/dist/downloads.d.ts.map +1 -0
- package/node_modules/@buddi/tool-browser/dist/downloads.js +529 -0
- package/node_modules/@buddi/tool-browser/dist/downloads.js.map +1 -0
- package/node_modules/@buddi/tool-browser/dist/driver.d.ts +17 -1
- package/node_modules/@buddi/tool-browser/dist/driver.d.ts.map +1 -1
- package/node_modules/@buddi/tool-browser/dist/driver.js +48 -0
- package/node_modules/@buddi/tool-browser/dist/driver.js.map +1 -1
- package/node_modules/@buddi/tool-browser/dist/extension.d.ts +23 -0
- package/node_modules/@buddi/tool-browser/dist/extension.d.ts.map +1 -1
- package/node_modules/@buddi/tool-browser/dist/extension.js +20 -0
- package/node_modules/@buddi/tool-browser/dist/extension.js.map +1 -1
- package/node_modules/@buddi/tool-browser/dist/host.d.ts +3 -1
- package/node_modules/@buddi/tool-browser/dist/host.d.ts.map +1 -1
- package/node_modules/@buddi/tool-browser/dist/host.js +9 -2
- package/node_modules/@buddi/tool-browser/dist/host.js.map +1 -1
- package/node_modules/@buddi/tool-browser/dist/index.d.ts +7 -3
- package/node_modules/@buddi/tool-browser/dist/index.d.ts.map +1 -1
- package/node_modules/@buddi/tool-browser/dist/index.js +5 -3
- package/node_modules/@buddi/tool-browser/dist/index.js.map +1 -1
- package/node_modules/@buddi/tool-browser/dist/service.d.ts +28 -0
- package/node_modules/@buddi/tool-browser/dist/service.d.ts.map +1 -1
- package/node_modules/@buddi/tool-browser/dist/service.js +58 -1
- package/node_modules/@buddi/tool-browser/dist/service.js.map +1 -1
- package/node_modules/@buddi/tool-browser/dist/settings.d.ts +8 -0
- package/node_modules/@buddi/tool-browser/dist/settings.d.ts.map +1 -1
- package/node_modules/@buddi/tool-browser/dist/settings.js +9 -0
- package/node_modules/@buddi/tool-browser/dist/settings.js.map +1 -1
- package/node_modules/@buddi/tool-browser/dist/types.d.ts +31 -24
- package/node_modules/@buddi/tool-browser/dist/types.d.ts.map +1 -1
- package/node_modules/@buddi/tool-browser/dist/types.js.map +1 -1
- package/node_modules/@buddi/tool-email/dist/.tsbuildinfo +1 -1
- package/node_modules/@buddi/tool-host/dist/.tsbuildinfo +1 -1
- package/node_modules/@buddi/tool-mcp/dist/.tsbuildinfo +1 -1
- package/node_modules/@buddi/tool-memory/dist/.tsbuildinfo +1 -1
- package/node_modules/@buddi/tool-web/dist/.tsbuildinfo +1 -1
- package/node_modules/nanoid/README.md +3 -3
- package/node_modules/nanoid/index.browser.js +4 -5
- package/node_modules/nanoid/index.d.ts +3 -3
- package/node_modules/nanoid/index.js +2 -3
- package/node_modules/nanoid/nanoid.js +1 -1
- package/node_modules/nanoid/package.json +2 -2
- package/node_modules/nanoid/url-alphabet/index.js +1 -1
- package/package.json +2 -2
- package/packages/cli/dist/.tsbuildinfo +1 -1
- package/packages/cli/dist/mcp/tools.d.ts +3 -8
- package/packages/cli/dist/mcp/tools.d.ts.map +1 -1
- package/packages/cli/dist/mcp/tools.js +22 -4
- package/packages/cli/dist/mcp/tools.js.map +1 -1
- package/packages/core/dist/.tsbuildinfo +1 -1
- package/packages/core/dist/artifacts/orphans.d.ts +6 -4
- package/packages/core/dist/artifacts/orphans.d.ts.map +1 -1
- package/packages/core/dist/artifacts/orphans.js +10 -3
- package/packages/core/dist/artifacts/orphans.js.map +1 -1
- package/packages/core/dist/groups.d.ts +0 -9
- package/packages/core/dist/groups.d.ts.map +1 -1
- package/packages/core/dist/groups.js +13 -1
- package/packages/core/dist/groups.js.map +1 -1
- package/packages/core/dist/pages.d.ts +24 -1
- package/packages/core/dist/pages.d.ts.map +1 -1
- package/packages/core/dist/pages.js +61 -1
- package/packages/core/dist/pages.js.map +1 -1
- package/packages/core/dist/pending-input.d.ts +13 -2
- package/packages/core/dist/pending-input.d.ts.map +1 -1
- package/packages/core/dist/pending-input.js +57 -12
- package/packages/core/dist/pending-input.js.map +1 -1
- package/packages/core/dist/plugin/version.d.ts +1 -1
- package/packages/core/dist/plugin/version.js +1 -1
- package/packages/core/dist/web-settings.d.ts +8 -0
- package/packages/core/dist/web-settings.d.ts.map +1 -1
- package/packages/core/dist/web-settings.js +14 -0
- package/packages/core/dist/web-settings.js.map +1 -1
- package/packages/core/migrations/078_pending_input_files.sql +8 -0
- package/packages/gateway/dist/.tsbuildinfo +1 -1
- package/packages/gateway/dist/browser-host.d.ts.map +1 -1
- package/packages/gateway/dist/browser-host.js +1 -0
- package/packages/gateway/dist/browser-host.js.map +1 -1
- package/packages/gateway/dist/web/api-routes.d.ts.map +1 -1
- package/packages/gateway/dist/web/api-routes.js +19 -1
- package/packages/gateway/dist/web/api-routes.js.map +1 -1
- package/packages/gateway/dist/web/attention.d.ts +37 -0
- package/packages/gateway/dist/web/attention.d.ts.map +1 -1
- package/packages/gateway/dist/web/attention.js +54 -10
- package/packages/gateway/dist/web/attention.js.map +1 -1
- package/packages/gateway/dist/web/canvas-tabs.d.ts +41 -0
- package/packages/gateway/dist/web/canvas-tabs.d.ts.map +1 -0
- package/packages/gateway/dist/web/canvas-tabs.js +68 -0
- package/packages/gateway/dist/web/canvas-tabs.js.map +1 -0
- package/packages/gateway/dist/web/chat.d.ts +0 -9
- package/packages/gateway/dist/web/chat.d.ts.map +1 -1
- package/packages/gateway/dist/web/chat.js +33 -19
- package/packages/gateway/dist/web/chat.js.map +1 -1
- package/packages/gateway/dist/web/extension.d.ts +11 -1
- package/packages/gateway/dist/web/extension.d.ts.map +1 -1
- package/packages/gateway/dist/web/extension.js +51 -0
- package/packages/gateway/dist/web/extension.js.map +1 -1
- package/packages/gateway/dist/web/pages.d.ts.map +1 -1
- package/packages/gateway/dist/web/pages.js +10 -1
- package/packages/gateway/dist/web/pages.js.map +1 -1
- package/packages/gateway/dist/web/server.d.ts +0 -4
- package/packages/gateway/dist/web/server.d.ts.map +1 -1
- package/packages/gateway/dist/web/server.js +72 -2
- package/packages/gateway/dist/web/server.js.map +1 -1
- package/packages/install/dist/.tsbuildinfo +1 -1
- package/packages/runtime/dist/.tsbuildinfo +1 -1
- package/packages/runtime/dist/loop.d.ts +6 -0
- package/packages/runtime/dist/loop.d.ts.map +1 -1
- package/packages/runtime/dist/loop.js +25 -10
- package/packages/runtime/dist/loop.js.map +1 -1
- package/packages/tools/artifacts/dist/.tsbuildinfo +1 -1
- package/packages/tools/artifacts/dist/extract.d.ts +6 -0
- package/packages/tools/artifacts/dist/extract.d.ts.map +1 -1
- package/packages/tools/artifacts/dist/extract.js +6 -0
- package/packages/tools/artifacts/dist/extract.js.map +1 -1
- package/packages/tools/artifacts/dist/tools/artifacts.d.ts +1 -0
- package/packages/tools/artifacts/dist/tools/artifacts.d.ts.map +1 -1
- package/packages/tools/artifacts/dist/tools/artifacts.js +30 -8
- package/packages/tools/artifacts/dist/tools/artifacts.js.map +1 -1
- package/packages/tools/browser/dist/.tsbuildinfo +1 -1
- package/packages/tools/browser/dist/controller.d.ts +25 -0
- package/packages/tools/browser/dist/controller.d.ts.map +1 -1
- package/packages/tools/browser/dist/controller.js +25 -1
- package/packages/tools/browser/dist/controller.js.map +1 -1
- package/packages/tools/browser/dist/downloads.d.ts +138 -0
- package/packages/tools/browser/dist/downloads.d.ts.map +1 -0
- package/packages/tools/browser/dist/downloads.js +529 -0
- package/packages/tools/browser/dist/downloads.js.map +1 -0
- package/packages/tools/browser/dist/driver.d.ts +17 -1
- package/packages/tools/browser/dist/driver.d.ts.map +1 -1
- package/packages/tools/browser/dist/driver.js +48 -0
- package/packages/tools/browser/dist/driver.js.map +1 -1
- package/packages/tools/browser/dist/extension.d.ts +23 -0
- package/packages/tools/browser/dist/extension.d.ts.map +1 -1
- package/packages/tools/browser/dist/extension.js +20 -0
- package/packages/tools/browser/dist/extension.js.map +1 -1
- package/packages/tools/browser/dist/host.d.ts +3 -1
- package/packages/tools/browser/dist/host.d.ts.map +1 -1
- package/packages/tools/browser/dist/host.js +9 -2
- package/packages/tools/browser/dist/host.js.map +1 -1
- package/packages/tools/browser/dist/index.d.ts +7 -3
- package/packages/tools/browser/dist/index.d.ts.map +1 -1
- package/packages/tools/browser/dist/index.js +5 -3
- package/packages/tools/browser/dist/index.js.map +1 -1
- package/packages/tools/browser/dist/service.d.ts +28 -0
- package/packages/tools/browser/dist/service.d.ts.map +1 -1
- package/packages/tools/browser/dist/service.js +58 -1
- package/packages/tools/browser/dist/service.js.map +1 -1
- package/packages/tools/browser/dist/settings.d.ts +8 -0
- package/packages/tools/browser/dist/settings.d.ts.map +1 -1
- package/packages/tools/browser/dist/settings.js +9 -0
- package/packages/tools/browser/dist/settings.js.map +1 -1
- package/packages/tools/browser/dist/types.d.ts +31 -24
- package/packages/tools/browser/dist/types.d.ts.map +1 -1
- package/packages/tools/browser/dist/types.js.map +1 -1
- package/packages/tools/email/dist/.tsbuildinfo +1 -1
- package/packages/tools/host/dist/.tsbuildinfo +1 -1
- package/packages/tools/mcp/dist/.tsbuildinfo +1 -1
- package/packages/tools/memory/dist/.tsbuildinfo +1 -1
- package/packages/tools/web/dist/.tsbuildinfo +1 -1
- package/packages/web/dist/assets/index-C2yWZED2.css +1 -0
- package/packages/web/dist/assets/index-CIhME8Ui.js +150 -0
- package/packages/web/dist/assets/{lottie_light-DxWeiVDC.js → lottie_light-CVXFbeEK.js} +1 -1
- package/packages/web/dist/build.json +1 -1
- package/packages/web/dist/index.html +2 -2
- package/packages/web/dist/precache.json +4 -4
- package/packages/web/dist/assets/index-CPFSREcP.css +0 -1
- package/packages/web/dist/assets/index-DYUn1V0x.js +0 -150
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The canvas's tabs, per conversation (docs/dashboard.md, "Canvas").
|
|
3
|
+
*
|
|
4
|
+
* What the owner put away and when each tab was last looked at, so the strip
|
|
5
|
+
* comes back the same — same tabs, same order — after a reload or on another
|
|
6
|
+
* device. Kept in `core.web_settings` under `canvas-tabs:<conversationId>`:
|
|
7
|
+
* one small value per conversation, owned here, replaced whole on each write.
|
|
8
|
+
*/
|
|
9
|
+
import { type Queryable } from '@buddi/core';
|
|
10
|
+
/**
|
|
11
|
+
* The `core.web_settings` key for one conversation. Deleting a conversation
|
|
12
|
+
* deletes it too (core's `forgetConversationSettings`).
|
|
13
|
+
*/
|
|
14
|
+
export declare function canvasTabsKey(conversationId: string): string;
|
|
15
|
+
/** How many ids either half keeps; a long conversation drops its oldest. */
|
|
16
|
+
export declare const CANVAS_TABS_LIMIT = 200;
|
|
17
|
+
export interface CanvasTabsState {
|
|
18
|
+
/** Tab stamps the owner closed (the call id of the version that was on screen). */
|
|
19
|
+
closed: string[];
|
|
20
|
+
/** When each tab was last looked at, epoch ms, by tab id. The strip's order. */
|
|
21
|
+
touched: Record<string, number>;
|
|
22
|
+
}
|
|
23
|
+
/** A body checked into the stored shape, or the reason it is not one. */
|
|
24
|
+
export declare function parseCanvasTabs(body: unknown): {
|
|
25
|
+
ok: true;
|
|
26
|
+
value: CanvasTabsState;
|
|
27
|
+
} | {
|
|
28
|
+
ok: false;
|
|
29
|
+
error: string;
|
|
30
|
+
};
|
|
31
|
+
/**
|
|
32
|
+
* The stored state, or an empty one: nothing stored is nothing closed. Null
|
|
33
|
+
* when there is no such conversation.
|
|
34
|
+
*/
|
|
35
|
+
export declare function readCanvasTabs(db: Queryable, conversationId: string): Promise<CanvasTabsState | null>;
|
|
36
|
+
/**
|
|
37
|
+
* Replace the conversation's state with an already-parsed one. False, and
|
|
38
|
+
* nothing written, when there is no such conversation.
|
|
39
|
+
*/
|
|
40
|
+
export declare function writeCanvasTabs(db: Queryable, conversationId: string, state: CanvasTabsState): Promise<boolean>;
|
|
41
|
+
//# sourceMappingURL=canvas-tabs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canvas-tabs.d.ts","sourceRoot":"","sources":["../../src/web/canvas-tabs.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAsC,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC;AAEjF;;;GAGG;AACH,wBAAgB,aAAa,CAAC,cAAc,EAAE,MAAM,GAAG,MAAM,CAE5D;AAED,4EAA4E;AAC5E,eAAO,MAAM,iBAAiB,MAAM,CAAC;AAErC,MAAM,WAAW,eAAe;IAC9B,mFAAmF;IACnF,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,gFAAgF;IAChF,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACjC;AAID,yEAAyE;AACzE,wBAAgB,eAAe,CAAC,IAAI,EAAE,OAAO,GAAG;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,eAAe,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAsBlH;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAAC,EAAE,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAM3G;AAED;;;GAGG;AACH,wBAAsB,eAAe,CAAC,EAAE,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,OAAO,CAAC,CASrH"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The canvas's tabs, per conversation (docs/dashboard.md, "Canvas").
|
|
3
|
+
*
|
|
4
|
+
* What the owner put away and when each tab was last looked at, so the strip
|
|
5
|
+
* comes back the same — same tabs, same order — after a reload or on another
|
|
6
|
+
* device. Kept in `core.web_settings` under `canvas-tabs:<conversationId>`:
|
|
7
|
+
* one small value per conversation, owned here, replaced whole on each write.
|
|
8
|
+
*/
|
|
9
|
+
import { CANVAS_TABS_PREFIX, readWebSetting } from '@buddi/core';
|
|
10
|
+
/**
|
|
11
|
+
* The `core.web_settings` key for one conversation. Deleting a conversation
|
|
12
|
+
* deletes it too (core's `forgetConversationSettings`).
|
|
13
|
+
*/
|
|
14
|
+
export function canvasTabsKey(conversationId) {
|
|
15
|
+
return `${CANVAS_TABS_PREFIX}${conversationId}`;
|
|
16
|
+
}
|
|
17
|
+
/** How many ids either half keeps; a long conversation drops its oldest. */
|
|
18
|
+
export const CANVAS_TABS_LIMIT = 200;
|
|
19
|
+
const ID = /^[\w:./-]{1,200}$/;
|
|
20
|
+
/** A body checked into the stored shape, or the reason it is not one. */
|
|
21
|
+
export function parseCanvasTabs(body) {
|
|
22
|
+
if (body === null || typeof body !== 'object' || Array.isArray(body))
|
|
23
|
+
return { ok: false, error: 'body must be an object' };
|
|
24
|
+
const record = body;
|
|
25
|
+
const closed = record['closed'] ?? [];
|
|
26
|
+
const touched = record['touched'] ?? {};
|
|
27
|
+
if (!Array.isArray(closed) || !closed.every((id) => typeof id === 'string' && ID.test(id))) {
|
|
28
|
+
return { ok: false, error: '`closed` must be an array of tab ids' };
|
|
29
|
+
}
|
|
30
|
+
if (touched === null || typeof touched !== 'object' || Array.isArray(touched)) {
|
|
31
|
+
return { ok: false, error: '`touched` must be an object' };
|
|
32
|
+
}
|
|
33
|
+
const entries = Object.entries(touched);
|
|
34
|
+
if (!entries.every(([id, at]) => ID.test(id) && typeof at === 'number' && Number.isFinite(at) && at >= 0)) {
|
|
35
|
+
return { ok: false, error: '`touched` must map tab ids to times' };
|
|
36
|
+
}
|
|
37
|
+
return {
|
|
38
|
+
ok: true,
|
|
39
|
+
value: {
|
|
40
|
+
closed: [...new Set(closed)].slice(-CANVAS_TABS_LIMIT),
|
|
41
|
+
touched: Object.fromEntries(entries.sort((a, b) => a[1] - b[1]).slice(-CANVAS_TABS_LIMIT)),
|
|
42
|
+
},
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* The stored state, or an empty one: nothing stored is nothing closed. Null
|
|
47
|
+
* when there is no such conversation.
|
|
48
|
+
*/
|
|
49
|
+
export async function readCanvasTabs(db, conversationId) {
|
|
50
|
+
const { rows } = await db.query('select 1 from core.conversations where id = $1::uuid', [conversationId]);
|
|
51
|
+
if (rows.length === 0)
|
|
52
|
+
return null;
|
|
53
|
+
const stored = await readWebSetting(db, canvasTabsKey(conversationId));
|
|
54
|
+
const parsed = parseCanvasTabs(stored ?? {});
|
|
55
|
+
return parsed.ok ? parsed.value : { closed: [], touched: {} };
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Replace the conversation's state with an already-parsed one. False, and
|
|
59
|
+
* nothing written, when there is no such conversation.
|
|
60
|
+
*/
|
|
61
|
+
export async function writeCanvasTabs(db, conversationId, state) {
|
|
62
|
+
const { rows } = await db.query(`insert into core.web_settings (key, value, updated_at)
|
|
63
|
+
select $1, $2::jsonb, now() where exists (select 1 from core.conversations where id = $3::uuid)
|
|
64
|
+
on conflict (key) do update set value = excluded.value, updated_at = now()
|
|
65
|
+
returning key`, [canvasTabsKey(conversationId), JSON.stringify(state), conversationId]);
|
|
66
|
+
return rows.length > 0;
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=canvas-tabs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canvas-tabs.js","sourceRoot":"","sources":["../../src/web/canvas-tabs.ts"],"names":[],"mappings":"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"}
|
|
@@ -447,15 +447,6 @@ export type SendResult = {
|
|
|
447
447
|
status: number;
|
|
448
448
|
error: string;
|
|
449
449
|
};
|
|
450
|
-
/**
|
|
451
|
-
* Why a file cannot ride along mid-run.
|
|
452
|
-
*
|
|
453
|
-
* A turn's attachments are hydrated and capped when the run is built; there is
|
|
454
|
-
* no honest way to add one to a request that has already been sent. So it is
|
|
455
|
-
* refused in a sentence rather than queued into a surprise, and the owner
|
|
456
|
-
* sends it the moment the answer lands.
|
|
457
|
-
*/
|
|
458
|
-
export declare const FILES_DURING_RUN = "Send files once the agent has answered.";
|
|
459
450
|
/**
|
|
460
451
|
* The web surface's run queue.
|
|
461
452
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat.d.ts","sourceRoot":"","sources":["../../src/web/chat.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"chat.d.ts","sourceRoot":"","sources":["../../src/web/chat.ts"],"names":[],"mappings":"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"}
|
|
@@ -277,6 +277,7 @@ idleFor = () => IDLE_TIMEOUT_MS) {
|
|
|
277
277
|
// on at the end, by its own id, marked for what it is.
|
|
278
278
|
waitingPendingInput(pool, conversationId).catch(() => []),
|
|
279
279
|
]);
|
|
280
|
+
const waitingFiles = await artifactsById(pool, [...new Set(waiting.flatMap((row) => row.attachmentIds))]);
|
|
280
281
|
const vitals = await readVitals(pool, conversationId);
|
|
281
282
|
// The size limit is this conversation's model's, not a constant: the header
|
|
282
283
|
// must not promise 80k to a thread that has 400k, or the reverse.
|
|
@@ -323,7 +324,10 @@ idleFor = () => IDLE_TIMEOUT_MS) {
|
|
|
323
324
|
id: row.id,
|
|
324
325
|
role: 'user',
|
|
325
326
|
at: row.receivedAt.toISOString(),
|
|
326
|
-
blocks: [
|
|
327
|
+
blocks: [
|
|
328
|
+
...(row.text.trim() === '' ? [] : [{ type: 'text', text: row.text }]),
|
|
329
|
+
...row.attachmentIds.map((artifactId) => toChatBlock({ type: 'artifact_ref', artifactId }, toolNames, waitingFiles, approvals)),
|
|
330
|
+
],
|
|
327
331
|
speaker: OWNER_INTERJECTION_SPEAKER,
|
|
328
332
|
}))],
|
|
329
333
|
...(await runsOf(pool, conversationId)),
|
|
@@ -758,7 +762,18 @@ class LivePendingInput {
|
|
|
758
762
|
return [];
|
|
759
763
|
try {
|
|
760
764
|
const rows = await leasePendingInput(this.pool, this.conversationId, this.runId);
|
|
761
|
-
|
|
765
|
+
// Files queued with a line are hydrated now, when the run takes it: the
|
|
766
|
+
// ids were stored with the row, the references are read here, and the
|
|
767
|
+
// loop turns them into bytes for the step it is about to send.
|
|
768
|
+
const ids = [...new Set(rows.flatMap((row) => row.attachmentIds))];
|
|
769
|
+
const files = await artifactsById(this.pool, ids);
|
|
770
|
+
return rows.map((row) => {
|
|
771
|
+
const attachments = row.attachmentIds.flatMap((id) => {
|
|
772
|
+
const file = files.get(id);
|
|
773
|
+
return file ? [{ artifactId: file.id, mime: file.mime, kind: file.kind, filename: file.filename, sizeBytes: file.sizeBytes }] : [];
|
|
774
|
+
});
|
|
775
|
+
return { id: row.id, text: row.text, ...(attachments.length > 0 ? { attachments } : {}) };
|
|
776
|
+
});
|
|
762
777
|
}
|
|
763
778
|
catch (err) {
|
|
764
779
|
// A queue that cannot be read must not fail the turn the owner is
|
|
@@ -786,15 +801,6 @@ class LivePendingInput {
|
|
|
786
801
|
}
|
|
787
802
|
}
|
|
788
803
|
}
|
|
789
|
-
/**
|
|
790
|
-
* Why a file cannot ride along mid-run.
|
|
791
|
-
*
|
|
792
|
-
* A turn's attachments are hydrated and capped when the run is built; there is
|
|
793
|
-
* no honest way to add one to a request that has already been sent. So it is
|
|
794
|
-
* refused in a sentence rather than queued into a surprise, and the owner
|
|
795
|
-
* sends it the moment the answer lands.
|
|
796
|
-
*/
|
|
797
|
-
export const FILES_DURING_RUN = 'Send files once the agent has answered.';
|
|
798
804
|
/**
|
|
799
805
|
* The web surface's run queue.
|
|
800
806
|
*
|
|
@@ -849,12 +855,13 @@ export class WebChat {
|
|
|
849
855
|
return { ok: false, status: 409, error: unavailableMessage(agent) };
|
|
850
856
|
}
|
|
851
857
|
const text = request.text.trim();
|
|
852
|
-
|
|
858
|
+
const attachmentIds = request.attachmentIds ?? [];
|
|
859
|
+
// Files alone are a message: the words are optional when something rides.
|
|
860
|
+
if (text === '' && attachmentIds.length === 0)
|
|
853
861
|
return { ok: false, status: 400, error: '`text` must not be empty' };
|
|
854
862
|
if (text.length > MAX_CHAT_MESSAGE_CHARS) {
|
|
855
863
|
return { ok: false, status: 413, error: `a message may be at most ${MAX_CHAT_MESSAGE_CHARS} characters` };
|
|
856
864
|
}
|
|
857
|
-
const attachmentIds = request.attachmentIds ?? [];
|
|
858
865
|
if (attachmentIds.length > MAX_ATTACHMENTS_PER_MESSAGE) {
|
|
859
866
|
return {
|
|
860
867
|
ok: false,
|
|
@@ -898,10 +905,16 @@ export class WebChat {
|
|
|
898
905
|
*/
|
|
899
906
|
const live = this.#running.get(conversationId);
|
|
900
907
|
if (live && live.interjections.open) {
|
|
901
|
-
// Files
|
|
902
|
-
//
|
|
903
|
-
if
|
|
904
|
-
|
|
908
|
+
// Files queue with the words, by id. They are hydrated when the run
|
|
909
|
+
// takes the line between two tool calls — into the very request it
|
|
910
|
+
// sends next — or, if it never does, when the line is promoted into
|
|
911
|
+
// the next turn. Checked to exist now, so a bad id is refused here
|
|
912
|
+
// rather than discovered by a run.
|
|
913
|
+
for (const id of attachmentIds) {
|
|
914
|
+
const row = await getArtifact(this.#deps.pool, id).catch(() => null);
|
|
915
|
+
if (!row)
|
|
916
|
+
return { ok: false, status: 404, error: `no such attachment: ${id}` };
|
|
917
|
+
}
|
|
905
918
|
// Durable before it is acknowledged, and in a table of its own: a row
|
|
906
919
|
// in `core.messages` written here would land between a `tool_use` and
|
|
907
920
|
// its result, which is a transcript no provider will replay.
|
|
@@ -909,6 +922,7 @@ export class WebChat {
|
|
|
909
922
|
conversationId,
|
|
910
923
|
runId: live.runId,
|
|
911
924
|
text,
|
|
925
|
+
attachmentIds,
|
|
912
926
|
now: this.#deps.now(),
|
|
913
927
|
});
|
|
914
928
|
const still = this.#running.get(conversationId);
|
|
@@ -1200,11 +1214,11 @@ export class WebChat {
|
|
|
1200
1214
|
if (!group)
|
|
1201
1215
|
return { ok: false, status: 404, error: 'no such group' };
|
|
1202
1216
|
const text = request.text.trim();
|
|
1203
|
-
|
|
1217
|
+
const attachmentIds = request.attachmentIds ?? [];
|
|
1218
|
+
if (text === '' && attachmentIds.length === 0)
|
|
1204
1219
|
return { ok: false, status: 400, error: '`text` must not be empty' };
|
|
1205
1220
|
if (text.length > MAX_CHAT_MESSAGE_CHARS)
|
|
1206
1221
|
return { ok: false, status: 413, error: `a message may be at most ${MAX_CHAT_MESSAGE_CHARS} characters` };
|
|
1207
|
-
const attachmentIds = request.attachmentIds ?? [];
|
|
1208
1222
|
if (attachmentIds.length > MAX_ATTACHMENTS_PER_MESSAGE)
|
|
1209
1223
|
return { ok: false, status: 400, error: `at most ${MAX_ATTACHMENTS_PER_MESSAGE} files may ride with one message` };
|
|
1210
1224
|
const coordinator = this.#deps.catalog.get(group.coordinator);
|