pilotswarm-sdk 0.5.35 → 0.5.37
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/artifact-tools.d.ts.map +1 -1
- package/dist/artifact-tools.js +41 -6
- package/dist/artifact-tools.js.map +1 -1
- package/dist/canvas-app-manifest.d.ts +49 -0
- package/dist/canvas-app-manifest.d.ts.map +1 -0
- package/dist/canvas-app-manifest.js +206 -0
- package/dist/canvas-app-manifest.js.map +1 -0
- package/dist/cms-migrations.d.ts.map +1 -1
- package/dist/cms-migrations.js +142 -0
- package/dist/cms-migrations.js.map +1 -1
- package/dist/managed-session.d.ts +23 -0
- package/dist/managed-session.d.ts.map +1 -1
- package/dist/managed-session.js +288 -72
- package/dist/managed-session.js.map +1 -1
- package/dist/session-manager.d.ts.map +1 -1
- package/dist/session-manager.js +15 -2
- package/dist/session-manager.js.map +1 -1
- package/dist/session-proxy.d.ts +7 -10
- package/dist/session-proxy.d.ts.map +1 -1
- package/dist/session-proxy.js +289 -133
- package/dist/session-proxy.js.map +1 -1
- package/dist/types.d.ts +0 -7
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +3 -3
- package/plugins/system/agents/default.agent.md +94 -22
- package/plugins/system/skills/html-visuals/SKILL.md +215 -14
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"artifact-tools.d.ts","sourceRoot":"","sources":["../src/artifact-tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;
|
|
1
|
+
{"version":3,"file":"artifact-tools.d.ts","sourceRoot":"","sources":["../src/artifact-tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAQH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AA6DxD;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE;IACtC,SAAS,EAAE,aAAa,CAAC;CAC5B,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAwWd"}
|
package/dist/artifact-tools.js
CHANGED
|
@@ -29,6 +29,7 @@ import crypto from "node:crypto";
|
|
|
29
29
|
import fs from "node:fs";
|
|
30
30
|
import os from "node:os";
|
|
31
31
|
import path from "node:path";
|
|
32
|
+
import { extractCanvasAppManifest, normalizeCanvasResponseContract } from "./canvas-app-manifest.js";
|
|
32
33
|
import { defineTool } from "@github/copilot-sdk";
|
|
33
34
|
const INLINE_READ_DEFAULT_BYTES = 65_536;
|
|
34
35
|
const INLINE_READ_MAX_BYTES = 262_144;
|
|
@@ -130,14 +131,14 @@ export function createArtifactTools(opts) {
|
|
|
130
131
|
description: "Copy another session's artifact server-side (source 3 of 3). " +
|
|
131
132
|
"Bytes move store-to-store.",
|
|
132
133
|
properties: {
|
|
133
|
-
sessionId: { type: "string", description: "Session that owns the source artifact." },
|
|
134
|
+
sessionId: { type: "string", description: "Session that owns the source artifact. Defaults to this session — the save-the-canvas recipe needs only a filename." },
|
|
134
135
|
filename: { type: "string", description: "Source artifact filename." },
|
|
135
136
|
expectedSha256: {
|
|
136
137
|
type: "string",
|
|
137
|
-
description: "Optional precondition: fail with SHA_MISMATCH if the copied bytes hash differently.",
|
|
138
|
+
description: "Optional precondition: fail with SHA_MISMATCH if the copied bytes hash differently (sha256 of the stored bytes, as reported by list_artifacts/read_artifact metaOnly).",
|
|
138
139
|
},
|
|
139
140
|
},
|
|
140
|
-
required: ["
|
|
141
|
+
required: ["filename"],
|
|
141
142
|
},
|
|
142
143
|
contentType: {
|
|
143
144
|
type: "string",
|
|
@@ -183,7 +184,10 @@ export function createArtifactTools(opts) {
|
|
|
183
184
|
if (params.fromArtifact) {
|
|
184
185
|
const from = params.fromArtifact;
|
|
185
186
|
const filename = params.filename || path.basename(from.filename);
|
|
186
|
-
|
|
187
|
+
// Source session defaults to self: the canonical save-as
|
|
188
|
+
// ("copy my canvas.html to apps/<name>.html") should not
|
|
189
|
+
// require the model to know its own session id.
|
|
190
|
+
const metadata = await blobStore.copyArtifact(from.sessionId || sessionId, from.filename, sessionId, filename, { pinned });
|
|
187
191
|
if (from.expectedSha256 && metadata.sha256 !== from.expectedSha256) {
|
|
188
192
|
await blobStore.deleteArtifact(sessionId, metadata.filename);
|
|
189
193
|
return toolError("SHA_MISMATCH", `Copied bytes hash ${metadata.sha256}, expected ${from.expectedSha256}. The copy was deleted.`, "The source artifact is not the bytes you believed. Re-verify the source with read_artifact({metaOnly: true}).");
|
|
@@ -230,6 +234,12 @@ export function createArtifactTools(opts) {
|
|
|
230
234
|
type: "boolean",
|
|
231
235
|
description: "Return metadata only — no content transfer.",
|
|
232
236
|
},
|
|
237
|
+
manifestOnly: {
|
|
238
|
+
type: "boolean",
|
|
239
|
+
description: "Return only the artifact's embedded CANVAS-APP-MANIFEST (name, description, "
|
|
240
|
+
+ "responseContract, data/usage notes) — the cheap way to learn a stored canvas app's "
|
|
241
|
+
+ "interface before draw_canvas({fromArtifact}). Never returns the document bytes.",
|
|
242
|
+
},
|
|
233
243
|
toFile: {
|
|
234
244
|
type: "string",
|
|
235
245
|
description: "Write the artifact to this worker-local path instead of returning content. " +
|
|
@@ -252,10 +262,35 @@ export function createArtifactTools(opts) {
|
|
|
252
262
|
required: ["sessionId", "filename"],
|
|
253
263
|
},
|
|
254
264
|
handler: async (params) => {
|
|
255
|
-
if (params.metaOnly
|
|
256
|
-
return toolError("EXCLUSIVE_MODE", "metaOnly and toFile are mutually exclusive.", "Use metaOnly for metadata, toFile to materialize bytes, or
|
|
265
|
+
if ([params.metaOnly, params.manifestOnly, params.toFile].filter(Boolean).length > 1) {
|
|
266
|
+
return toolError("EXCLUSIVE_MODE", "metaOnly, manifestOnly, and toFile are mutually exclusive.", "Use metaOnly for metadata, manifestOnly for a canvas app's interface card, toFile to materialize bytes, or none for inline content.");
|
|
257
267
|
}
|
|
258
268
|
try {
|
|
269
|
+
if (params.manifestOnly) {
|
|
270
|
+
const text = await blobStore.downloadArtifactText(params.sessionId, params.filename);
|
|
271
|
+
const extraction = extractCanvasAppManifest(text);
|
|
272
|
+
// Same discipline as every other card surface: the contract
|
|
273
|
+
// is returned POST-normalizer (4 KB cap) or not at all — a
|
|
274
|
+
// 40 KB "contract" must not ride the cheap read into context.
|
|
275
|
+
let manifest = extraction.manifest;
|
|
276
|
+
let contractError;
|
|
277
|
+
if (manifest?.responseContract !== undefined) {
|
|
278
|
+
const normalized = normalizeCanvasResponseContract(manifest.responseContract);
|
|
279
|
+
const { responseContract: _raw, ...rest } = manifest;
|
|
280
|
+
manifest = normalized.contract ? { ...rest, responseContract: normalized.contract } : rest;
|
|
281
|
+
if (normalized.error)
|
|
282
|
+
contractError = normalized.error;
|
|
283
|
+
}
|
|
284
|
+
return JSON.stringify({
|
|
285
|
+
success: true,
|
|
286
|
+
sessionId: params.sessionId,
|
|
287
|
+
filename: params.filename,
|
|
288
|
+
sizeBytes: Buffer.byteLength(text, "utf8"),
|
|
289
|
+
manifest,
|
|
290
|
+
...(extraction.error ? { manifestError: extraction.error } : {}),
|
|
291
|
+
...(contractError ? { manifestContractError: contractError } : {}),
|
|
292
|
+
});
|
|
293
|
+
}
|
|
259
294
|
if (params.metaOnly) {
|
|
260
295
|
const metadata = await blobStore.statArtifact(params.sessionId, params.filename);
|
|
261
296
|
if (!metadata) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"artifact-tools.js","sourceRoot":"","sources":["../src/artifact-tools.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"artifact-tools.js","sourceRoot":"","sources":["../src/artifact-tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Canvas app self-description: the CANVAS-APP-MANIFEST comment convention and
|
|
3
|
+
* the response-contract grammar, in one module because they are one grammar —
|
|
4
|
+
* a manifest's embedded contract passes through the SAME normalizer the
|
|
5
|
+
* draw_canvas tool argument does, so no app can smuggle a shape the browser
|
|
6
|
+
* would not enforce.
|
|
7
|
+
*
|
|
8
|
+
* A canvas app is a normal single-file HTML document whose first HTML comment
|
|
9
|
+
* (within the first 4 KB, by convention immediately after <!doctype html>) is:
|
|
10
|
+
*
|
|
11
|
+
* <!-- CANVAS-APP-MANIFEST
|
|
12
|
+
* { "manifestVersion": 1, "name": "...", "description": "...",
|
|
13
|
+
* "responseContract": { "actions": { ... } },
|
|
14
|
+
* "data": "tick shape notes", "notes": "usage notes" }
|
|
15
|
+
* -->
|
|
16
|
+
*
|
|
17
|
+
* Everything except responseContract is documentation for the loading LLM;
|
|
18
|
+
* only the contract is enforced (browser-side, default-closed, unchanged).
|
|
19
|
+
*/
|
|
20
|
+
export declare function normalizeCanvasResponseContract(raw: unknown): {
|
|
21
|
+
contract?: Record<string, any>;
|
|
22
|
+
error?: string;
|
|
23
|
+
};
|
|
24
|
+
export interface CanvasAppManifest {
|
|
25
|
+
manifestVersion?: number;
|
|
26
|
+
name?: string;
|
|
27
|
+
version?: string;
|
|
28
|
+
description?: string;
|
|
29
|
+
data?: string;
|
|
30
|
+
notes?: string;
|
|
31
|
+
responseContract?: Record<string, any>;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Extract the embedded CANVAS-APP-MANIFEST from an HTML document.
|
|
35
|
+
*
|
|
36
|
+
* Distinguishes three outcomes on purpose:
|
|
37
|
+
* { manifest } — present and parseable
|
|
38
|
+
* { manifest: null } — no manifest (an ordinary canvas document)
|
|
39
|
+
* { manifest: null, error } — a manifest was ATTEMPTED and is broken; the
|
|
40
|
+
* draw path treats this as fail-closed when no
|
|
41
|
+
* explicit contract argument saves the draw.
|
|
42
|
+
*/
|
|
43
|
+
export declare function extractCanvasAppManifest(html: string): {
|
|
44
|
+
manifest: CanvasAppManifest | null;
|
|
45
|
+
error?: string;
|
|
46
|
+
};
|
|
47
|
+
/** The compact "app card" fields returned to the drawing agent — never the html. */
|
|
48
|
+
export declare function canvasAppCard(manifest: CanvasAppManifest | null): Record<string, string | number> | undefined;
|
|
49
|
+
//# sourceMappingURL=canvas-app-manifest.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canvas-app-manifest.d.ts","sourceRoot":"","sources":["../src/canvas-app-manifest.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AASH,wBAAgB,+BAA+B,CAAC,GAAG,EAAE,OAAO,GAAG;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAwDhH;AAQD,MAAM,WAAW,iBAAiB;IAC9B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC1C;AAeD;;;;;;;;;GASG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG;IAAE,QAAQ,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CA2D7G;AAED,oFAAoF;AACpF,wBAAgB,aAAa,CAAC,QAAQ,EAAE,iBAAiB,GAAG,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,GAAG,SAAS,CAS7G"}
|
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Canvas app self-description: the CANVAS-APP-MANIFEST comment convention and
|
|
3
|
+
* the response-contract grammar, in one module because they are one grammar —
|
|
4
|
+
* a manifest's embedded contract passes through the SAME normalizer the
|
|
5
|
+
* draw_canvas tool argument does, so no app can smuggle a shape the browser
|
|
6
|
+
* would not enforce.
|
|
7
|
+
*
|
|
8
|
+
* A canvas app is a normal single-file HTML document whose first HTML comment
|
|
9
|
+
* (within the first 4 KB, by convention immediately after <!doctype html>) is:
|
|
10
|
+
*
|
|
11
|
+
* <!-- CANVAS-APP-MANIFEST
|
|
12
|
+
* { "manifestVersion": 1, "name": "...", "description": "...",
|
|
13
|
+
* "responseContract": { "actions": { ... } },
|
|
14
|
+
* "data": "tick shape notes", "notes": "usage notes" }
|
|
15
|
+
* -->
|
|
16
|
+
*
|
|
17
|
+
* Everything except responseContract is documentation for the loading LLM;
|
|
18
|
+
* only the contract is enforced (browser-side, default-closed, unchanged).
|
|
19
|
+
*/
|
|
20
|
+
const CANVAS_CONTRACT_NAME_RE = /^[a-zA-Z][a-zA-Z0-9_-]{0,63}$/;
|
|
21
|
+
const CANVAS_CONTRACT_FIELD_TYPES = new Set(["string", "number", "boolean", "json"]);
|
|
22
|
+
const CANVAS_CONTRACT_MAX_ACTIONS = 16;
|
|
23
|
+
const CANVAS_CONTRACT_MAX_FIELDS = 16;
|
|
24
|
+
const CANVAS_CONTRACT_MAX_BYTES = 4096;
|
|
25
|
+
const CANVAS_CONTRACT_DATA_MAX_BYTES = 1024;
|
|
26
|
+
export function normalizeCanvasResponseContract(raw) {
|
|
27
|
+
if (raw === undefined || raw === null)
|
|
28
|
+
return {};
|
|
29
|
+
if (typeof raw !== "object" || Array.isArray(raw))
|
|
30
|
+
return { error: "responseContract must be an object" };
|
|
31
|
+
const actions = raw.actions;
|
|
32
|
+
if (typeof actions !== "object" || actions === null || Array.isArray(actions)) {
|
|
33
|
+
return { error: 'responseContract must be {"actions":{...}}' };
|
|
34
|
+
}
|
|
35
|
+
const names = Object.keys(actions);
|
|
36
|
+
if (names.length === 0)
|
|
37
|
+
return { error: "responseContract.actions is empty — omit the contract instead" };
|
|
38
|
+
if (names.length > CANVAS_CONTRACT_MAX_ACTIONS) {
|
|
39
|
+
return { error: `responseContract declares ${names.length} actions; the cap is ${CANVAS_CONTRACT_MAX_ACTIONS}` };
|
|
40
|
+
}
|
|
41
|
+
const normalized = {};
|
|
42
|
+
for (const name of names) {
|
|
43
|
+
if (!CANVAS_CONTRACT_NAME_RE.test(name))
|
|
44
|
+
return { error: `invalid action name ${JSON.stringify(name)}` };
|
|
45
|
+
const fields = actions[name];
|
|
46
|
+
if (typeof fields !== "object" || fields === null || Array.isArray(fields)) {
|
|
47
|
+
return { error: `action ${JSON.stringify(name)} must map field names to types` };
|
|
48
|
+
}
|
|
49
|
+
const fieldNames = Object.keys(fields);
|
|
50
|
+
if (fieldNames.length > CANVAS_CONTRACT_MAX_FIELDS) {
|
|
51
|
+
return { error: `action ${JSON.stringify(name)} declares ${fieldNames.length} fields; the cap is ${CANVAS_CONTRACT_MAX_FIELDS}` };
|
|
52
|
+
}
|
|
53
|
+
const normalizedFields = {};
|
|
54
|
+
for (const fieldName of fieldNames) {
|
|
55
|
+
if (!CANVAS_CONTRACT_NAME_RE.test(fieldName)) {
|
|
56
|
+
return { error: `invalid field name ${JSON.stringify(fieldName)} on action ${JSON.stringify(name)}` };
|
|
57
|
+
}
|
|
58
|
+
const declared = String(fields[fieldName] ?? "");
|
|
59
|
+
const baseType = declared.endsWith("?") ? declared.slice(0, -1) : declared;
|
|
60
|
+
if (!CANVAS_CONTRACT_FIELD_TYPES.has(baseType)) {
|
|
61
|
+
return { error: `field ${JSON.stringify(fieldName)} on action ${JSON.stringify(name)} has unknown type ${JSON.stringify(declared)}; use string, number, boolean, or json (append ? for optional)` };
|
|
62
|
+
}
|
|
63
|
+
normalizedFields[fieldName] = declared;
|
|
64
|
+
}
|
|
65
|
+
normalized[name] = normalizedFields;
|
|
66
|
+
}
|
|
67
|
+
// The optional data key documents the update_canvas tick shape (e.g.
|
|
68
|
+
// { example: {...} }). It rides the canonical contract into the draw
|
|
69
|
+
// event and back out of read_canvas(manifestOnly), which is what makes
|
|
70
|
+
// "re-read the contract before ticking so your payload never drifts" a
|
|
71
|
+
// real loop instead of doc fiction. Bounded so the card stays cheap.
|
|
72
|
+
let dataDoc;
|
|
73
|
+
if (raw.data !== undefined) {
|
|
74
|
+
dataDoc = raw.data;
|
|
75
|
+
const dataBytes = Buffer.byteLength(JSON.stringify(dataDoc) ?? "", "utf8");
|
|
76
|
+
if (!Number.isFinite(dataBytes) || dataBytes > CANVAS_CONTRACT_DATA_MAX_BYTES) {
|
|
77
|
+
return { error: `responseContract.data serializes to ${dataBytes} bytes; the cap is ${CANVAS_CONTRACT_DATA_MAX_BYTES} — it is a shape EXAMPLE, not a payload` };
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
const canonical = { actions: normalized, ...(dataDoc !== undefined ? { data: dataDoc } : {}) };
|
|
81
|
+
const bytes = Buffer.byteLength(JSON.stringify(canonical), "utf8");
|
|
82
|
+
if (bytes > CANVAS_CONTRACT_MAX_BYTES) {
|
|
83
|
+
return { error: `responseContract is ${bytes} bytes serialized; the cap is ${CANVAS_CONTRACT_MAX_BYTES}` };
|
|
84
|
+
}
|
|
85
|
+
return { contract: canonical };
|
|
86
|
+
}
|
|
87
|
+
/** The manifest comment must START within this many characters. */
|
|
88
|
+
const MANIFEST_SCAN_WINDOW = 4096;
|
|
89
|
+
/** Cap on each extracted prose field — the card must stay cheap in context. */
|
|
90
|
+
const MANIFEST_PROSE_CAP = 400;
|
|
91
|
+
const MANIFEST_MARKER = "CANVAS-APP-MANIFEST";
|
|
92
|
+
function clampProse(value) {
|
|
93
|
+
if (typeof value !== "string")
|
|
94
|
+
return undefined;
|
|
95
|
+
const trimmed = value.trim();
|
|
96
|
+
if (!trimmed)
|
|
97
|
+
return undefined;
|
|
98
|
+
if (trimmed.length <= MANIFEST_PROSE_CAP)
|
|
99
|
+
return trimmed;
|
|
100
|
+
let cut = trimmed.slice(0, MANIFEST_PROSE_CAP - 1);
|
|
101
|
+
// Never split a surrogate pair: a lone high surrogate is not well-formed
|
|
102
|
+
// JSON text and PG rejects it, which can silently drop the transcript
|
|
103
|
+
// event carrying the card.
|
|
104
|
+
if (/[\uD800-\uDBFF]$/.test(cut))
|
|
105
|
+
cut = cut.slice(0, -1);
|
|
106
|
+
return `${cut}…`;
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Extract the embedded CANVAS-APP-MANIFEST from an HTML document.
|
|
110
|
+
*
|
|
111
|
+
* Distinguishes three outcomes on purpose:
|
|
112
|
+
* { manifest } — present and parseable
|
|
113
|
+
* { manifest: null } — no manifest (an ordinary canvas document)
|
|
114
|
+
* { manifest: null, error } — a manifest was ATTEMPTED and is broken; the
|
|
115
|
+
* draw path treats this as fail-closed when no
|
|
116
|
+
* explicit contract argument saves the draw.
|
|
117
|
+
*/
|
|
118
|
+
export function extractCanvasAppManifest(html) {
|
|
119
|
+
const head = String(html ?? "").slice(0, MANIFEST_SCAN_WINDOW + 65_536);
|
|
120
|
+
// A manifest is a comment that OPENS with the marker: "<!--" followed by
|
|
121
|
+
// optional whitespace and CANVAS-APP-MANIFEST. Scanning comment OPENS
|
|
122
|
+
// (not marker occurrences) means neither prose, nor script strings, nor a
|
|
123
|
+
// header comment that merely MENTIONS the convention can shadow or
|
|
124
|
+
// impersonate the real manifest — both misreads used to fail perfectly
|
|
125
|
+
// valid fromArtifact draws closed.
|
|
126
|
+
let commentStart = -1;
|
|
127
|
+
let markerAt = -1;
|
|
128
|
+
let searchFrom = 0;
|
|
129
|
+
while (searchFrom <= MANIFEST_SCAN_WINDOW) {
|
|
130
|
+
const open = head.indexOf("<!--", searchFrom);
|
|
131
|
+
if (open < 0 || open > MANIFEST_SCAN_WINDOW)
|
|
132
|
+
break;
|
|
133
|
+
const afterOpen = open + 4;
|
|
134
|
+
const tokenMatch = /^[\s]*/.exec(head.slice(afterOpen, afterOpen + 64));
|
|
135
|
+
const tokenAt = afterOpen + (tokenMatch ? tokenMatch[0].length : 0);
|
|
136
|
+
if (head.startsWith(MANIFEST_MARKER, tokenAt)) {
|
|
137
|
+
commentStart = open;
|
|
138
|
+
markerAt = tokenAt;
|
|
139
|
+
break;
|
|
140
|
+
}
|
|
141
|
+
const close = head.indexOf("-->", afterOpen);
|
|
142
|
+
if (close < 0)
|
|
143
|
+
break;
|
|
144
|
+
searchFrom = close + 3;
|
|
145
|
+
}
|
|
146
|
+
if (commentStart < 0)
|
|
147
|
+
return { manifest: null };
|
|
148
|
+
const commentEnd = head.indexOf("-->", markerAt);
|
|
149
|
+
if (commentEnd < 0) {
|
|
150
|
+
return { manifest: null, error: "CANVAS-APP-MANIFEST comment is never closed (missing -->)" };
|
|
151
|
+
}
|
|
152
|
+
const jsonText = head.slice(markerAt + MANIFEST_MARKER.length, commentEnd).trim();
|
|
153
|
+
if (!jsonText)
|
|
154
|
+
return { manifest: null, error: "CANVAS-APP-MANIFEST comment contains no JSON" };
|
|
155
|
+
let parsed;
|
|
156
|
+
try {
|
|
157
|
+
parsed = JSON.parse(jsonText);
|
|
158
|
+
}
|
|
159
|
+
catch (err) {
|
|
160
|
+
return { manifest: null, error: `CANVAS-APP-MANIFEST is not valid JSON: ${err?.message || String(err)}` };
|
|
161
|
+
}
|
|
162
|
+
if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed)) {
|
|
163
|
+
return { manifest: null, error: "CANVAS-APP-MANIFEST must be a JSON object" };
|
|
164
|
+
}
|
|
165
|
+
const raw = parsed;
|
|
166
|
+
const manifest = {};
|
|
167
|
+
if (Number.isFinite(Number(raw.manifestVersion)))
|
|
168
|
+
manifest.manifestVersion = Number(raw.manifestVersion);
|
|
169
|
+
const name = clampProse(raw.name);
|
|
170
|
+
if (name)
|
|
171
|
+
manifest.name = name;
|
|
172
|
+
const version = clampProse(raw.version);
|
|
173
|
+
if (version)
|
|
174
|
+
manifest.version = version;
|
|
175
|
+
const description = clampProse(raw.description);
|
|
176
|
+
if (description)
|
|
177
|
+
manifest.description = description;
|
|
178
|
+
const data = clampProse(raw.data);
|
|
179
|
+
if (data)
|
|
180
|
+
manifest.data = data;
|
|
181
|
+
const notes = clampProse(raw.notes);
|
|
182
|
+
if (notes)
|
|
183
|
+
manifest.notes = notes;
|
|
184
|
+
if (raw.responseContract !== undefined) {
|
|
185
|
+
manifest.responseContract = raw.responseContract;
|
|
186
|
+
}
|
|
187
|
+
return { manifest };
|
|
188
|
+
}
|
|
189
|
+
/** The compact "app card" fields returned to the drawing agent — never the html. */
|
|
190
|
+
export function canvasAppCard(manifest) {
|
|
191
|
+
if (!manifest)
|
|
192
|
+
return undefined;
|
|
193
|
+
const card = {};
|
|
194
|
+
if (manifest.name)
|
|
195
|
+
card.name = manifest.name;
|
|
196
|
+
if (manifest.version)
|
|
197
|
+
card.version = manifest.version;
|
|
198
|
+
if (manifest.description)
|
|
199
|
+
card.description = manifest.description;
|
|
200
|
+
if (manifest.data)
|
|
201
|
+
card.data = manifest.data;
|
|
202
|
+
if (manifest.notes)
|
|
203
|
+
card.notes = manifest.notes;
|
|
204
|
+
return Object.keys(card).length > 0 ? card : undefined;
|
|
205
|
+
}
|
|
206
|
+
//# sourceMappingURL=canvas-app-manifest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canvas-app-manifest.js","sourceRoot":"","sources":["../src/canvas-app-manifest.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cms-migrations.d.ts","sourceRoot":"","sources":["../src/cms-migrations.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEvD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,cAAc,EAAE,
|
|
1
|
+
{"version":3,"file":"cms-migrations.d.ts","sourceRoot":"","sources":["../src/cms-migrations.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEvD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,cAAc,EAAE,CA+N/D"}
|
package/dist/cms-migrations.js
CHANGED
|
@@ -227,8 +227,150 @@ export function CMS_MIGRATIONS(schema) {
|
|
|
227
227
|
name: "agent_package_namespaces",
|
|
228
228
|
sql: migration_0043_agent_package_namespaces(schema),
|
|
229
229
|
},
|
|
230
|
+
{
|
|
231
|
+
version: "0044",
|
|
232
|
+
name: "list_sessions_page_ms_cursor",
|
|
233
|
+
sql: migration_0044_list_sessions_page_ms_cursor(schema),
|
|
234
|
+
},
|
|
230
235
|
];
|
|
231
236
|
}
|
|
237
|
+
// ─── Migration 0044: ms-space keyset for session paging ──────────
|
|
238
|
+
//
|
|
239
|
+
// PG stores updated_at at MICROsecond precision; the wire cursor is a JS Date
|
|
240
|
+
// (milliseconds). Comparing an ms-truncated cursor against full-precision
|
|
241
|
+
// columns silently skipped every same-millisecond row that landed at a page
|
|
242
|
+
// boundary — cms-read-bounds is the detector, open since v0.5.31. Predicate
|
|
243
|
+
// and ORDER BY now both truncate to milliseconds, so (trunc_ms, session_id)
|
|
244
|
+
// is a total order the ms cursor addresses exactly. Function replace only —
|
|
245
|
+
// same signature, no table DDL, no lock exposure.
|
|
246
|
+
function migration_0044_list_sessions_page_ms_cursor(schema) {
|
|
247
|
+
const s = `"${schema}"`;
|
|
248
|
+
return `
|
|
249
|
+
-- 0044_list_sessions_page_ms_cursor: keyset comparisons in millisecond space.
|
|
250
|
+
CREATE OR REPLACE FUNCTION ${s}.cms_list_sessions_page(
|
|
251
|
+
p_limit INT DEFAULT 51,
|
|
252
|
+
p_cursor_updated_at TIMESTAMPTZ DEFAULT NULL,
|
|
253
|
+
p_cursor_session_id TEXT DEFAULT NULL,
|
|
254
|
+
p_include_deleted BOOL DEFAULT FALSE,
|
|
255
|
+
p_viewer_provider TEXT DEFAULT NULL,
|
|
256
|
+
p_viewer_subject TEXT DEFAULT NULL,
|
|
257
|
+
p_viewer_system_visible BOOL DEFAULT TRUE,
|
|
258
|
+
p_placement_provider TEXT DEFAULT NULL,
|
|
259
|
+
p_placement_subject TEXT DEFAULT NULL
|
|
260
|
+
) RETURNS TABLE (
|
|
261
|
+
session_id TEXT,
|
|
262
|
+
orchestration_id TEXT,
|
|
263
|
+
title TEXT,
|
|
264
|
+
title_locked BOOLEAN,
|
|
265
|
+
state TEXT,
|
|
266
|
+
model TEXT,
|
|
267
|
+
reasoning_effort TEXT,
|
|
268
|
+
group_id TEXT,
|
|
269
|
+
short_summary TEXT,
|
|
270
|
+
summary_state JSONB,
|
|
271
|
+
summary_updated_at TIMESTAMPTZ,
|
|
272
|
+
created_at TIMESTAMPTZ,
|
|
273
|
+
updated_at TIMESTAMPTZ,
|
|
274
|
+
last_active_at TIMESTAMPTZ,
|
|
275
|
+
deleted_at TIMESTAMPTZ,
|
|
276
|
+
current_iteration INTEGER,
|
|
277
|
+
last_error TEXT,
|
|
278
|
+
parent_session_id TEXT,
|
|
279
|
+
wait_reason TEXT,
|
|
280
|
+
is_system BOOLEAN,
|
|
281
|
+
agent_id TEXT,
|
|
282
|
+
splash TEXT,
|
|
283
|
+
owner_provider TEXT,
|
|
284
|
+
owner_subject TEXT,
|
|
285
|
+
owner_email TEXT,
|
|
286
|
+
owner_display_name TEXT,
|
|
287
|
+
splash_mobile TEXT,
|
|
288
|
+
visibility TEXT,
|
|
289
|
+
root_session_id TEXT
|
|
290
|
+
) AS $$
|
|
291
|
+
DECLARE
|
|
292
|
+
v_limit INT := GREATEST(1, LEAST(COALESCE(p_limit, 51), 201));
|
|
293
|
+
v_placement_user BIGINT;
|
|
294
|
+
BEGIN
|
|
295
|
+
IF p_placement_provider IS NOT NULL AND p_placement_subject IS NOT NULL THEN
|
|
296
|
+
SELECT u.user_id INTO v_placement_user
|
|
297
|
+
FROM ${s}.users u
|
|
298
|
+
WHERE u.provider = BTRIM(p_placement_provider) AND u.subject = BTRIM(p_placement_subject);
|
|
299
|
+
END IF;
|
|
300
|
+
RETURN QUERY
|
|
301
|
+
SELECT
|
|
302
|
+
sess.session_id,
|
|
303
|
+
sess.orchestration_id,
|
|
304
|
+
sess.title,
|
|
305
|
+
sess.title_locked,
|
|
306
|
+
sess.state,
|
|
307
|
+
sess.model,
|
|
308
|
+
sess.reasoning_effort,
|
|
309
|
+
usgp.group_id,
|
|
310
|
+
sess.short_summary,
|
|
311
|
+
sess.summary_state,
|
|
312
|
+
sess.summary_updated_at,
|
|
313
|
+
sess.created_at,
|
|
314
|
+
sess.updated_at,
|
|
315
|
+
sess.last_active_at,
|
|
316
|
+
sess.deleted_at,
|
|
317
|
+
sess.current_iteration,
|
|
318
|
+
sess.last_error,
|
|
319
|
+
sess.parent_session_id,
|
|
320
|
+
sess.wait_reason,
|
|
321
|
+
sess.is_system,
|
|
322
|
+
sess.agent_id,
|
|
323
|
+
sess.splash,
|
|
324
|
+
u.provider AS owner_provider,
|
|
325
|
+
u.subject AS owner_subject,
|
|
326
|
+
u.email AS owner_email,
|
|
327
|
+
u.display_name AS owner_display_name,
|
|
328
|
+
sess.splash_mobile,
|
|
329
|
+
sess.visibility,
|
|
330
|
+
sess.root_session_id
|
|
331
|
+
FROM ${s}.sessions sess
|
|
332
|
+
LEFT JOIN ${s}.session_owners so ON so.session_id = sess.session_id
|
|
333
|
+
LEFT JOIN ${s}.users u ON u.user_id = so.user_id
|
|
334
|
+
LEFT JOIN ${s}.user_session_group_placements usgp
|
|
335
|
+
ON usgp.user_id = v_placement_user AND usgp.root_session_id = sess.session_id
|
|
336
|
+
WHERE
|
|
337
|
+
(p_include_deleted OR sess.deleted_at IS NULL)
|
|
338
|
+
AND (
|
|
339
|
+
p_cursor_updated_at IS NULL
|
|
340
|
+
OR date_trunc('milliseconds', sess.updated_at) < date_trunc('milliseconds', p_cursor_updated_at)
|
|
341
|
+
OR (
|
|
342
|
+
date_trunc('milliseconds', sess.updated_at) = date_trunc('milliseconds', p_cursor_updated_at)
|
|
343
|
+
AND sess.session_id < p_cursor_session_id
|
|
344
|
+
)
|
|
345
|
+
)
|
|
346
|
+
AND (
|
|
347
|
+
p_viewer_provider IS NULL
|
|
348
|
+
OR EXISTS (
|
|
349
|
+
SELECT 1
|
|
350
|
+
FROM ${s}.sessions r
|
|
351
|
+
LEFT JOIN ${s}.session_owners rso ON rso.session_id = r.session_id
|
|
352
|
+
LEFT JOIN ${s}.users ru ON ru.user_id = rso.user_id
|
|
353
|
+
WHERE r.session_id = COALESCE(sess.root_session_id, sess.session_id)
|
|
354
|
+
AND (
|
|
355
|
+
(r.is_system AND p_viewer_system_visible)
|
|
356
|
+
OR (ru.provider = BTRIM(p_viewer_provider) AND ru.subject = BTRIM(p_viewer_subject))
|
|
357
|
+
OR COALESCE(r.visibility, 'private') IN ('shared_read', 'shared_write')
|
|
358
|
+
OR EXISTS (
|
|
359
|
+
SELECT 1 FROM ${s}.session_shares sh
|
|
360
|
+
JOIN ${s}.users vu ON vu.user_id = sh.user_id
|
|
361
|
+
WHERE sh.session_id = r.session_id
|
|
362
|
+
AND vu.provider = BTRIM(p_viewer_provider)
|
|
363
|
+
AND vu.subject = BTRIM(p_viewer_subject)
|
|
364
|
+
)
|
|
365
|
+
)
|
|
366
|
+
)
|
|
367
|
+
)
|
|
368
|
+
ORDER BY date_trunc('milliseconds', sess.updated_at) DESC, sess.session_id DESC
|
|
369
|
+
LIMIT v_limit;
|
|
370
|
+
END;
|
|
371
|
+
$$ LANGUAGE plpgsql;
|
|
372
|
+
`;
|
|
373
|
+
}
|
|
232
374
|
// ─── Migration 0040: worker registry ─────────────────────────────
|
|
233
375
|
//
|
|
234
376
|
// docs/proposals/worker-registry.md (rev 4). Substrate-neutral, uniformly
|