pinomad 0.12.0 → 0.14.0
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/chunk-0dh2k3er.js +43 -0
- package/dist/{chunk-47ff1d1t.js → chunk-1mjbt2z2.js} +191 -11
- package/dist/{chunk-7wj0jh3t.js → chunk-1rdbnvy6.js} +1 -1
- package/dist/{chunk-ksfxqd8s.js → chunk-35szq73k.js} +2682 -459
- package/dist/{chunk-mnmqyq7d.js → chunk-5j7ybhjj.js} +1984 -333
- package/dist/{chunk-agq4tn9r.js → chunk-5pv0g1nj.js} +12 -10
- package/dist/{chunk-7mn38n4f.js → chunk-63ymn5c9.js} +2 -2
- package/dist/{chunk-nppgxh6c.js → chunk-6j6hkfbj.js} +8 -4
- package/dist/{chunk-pqe7q1s7.js → chunk-6vbp1vva.js} +2 -1
- package/dist/{chunk-g3ahp7b9.js → chunk-9trbbz4r.js} +1 -1
- package/dist/{chunk-gg2dcqbg.js → chunk-b0nwq1dt.js} +29 -12
- package/dist/chunk-dsr19q5h.js +23 -0
- package/dist/{chunk-41q0saz0.js → chunk-e53c0s8z.js} +9 -7
- package/dist/{chunk-np4jd070.js → chunk-e59k3bmz.js} +307 -56
- package/dist/chunk-eerpgvy9.js +315 -0
- package/dist/chunk-eewxy4cp.js +240 -0
- package/dist/{chunk-vqkb70d7.js → chunk-evbv1fkn.js} +3 -3
- package/dist/{chunk-vx7dy07y.js → chunk-ex5yr09h.js} +11 -6
- package/dist/{chunk-t91zt5f0.js → chunk-hg9gs396.js} +1 -1
- package/dist/{chunk-aqj9wfmb.js → chunk-mtkvft88.js} +1 -1
- package/dist/{chunk-t5abqsva.js → chunk-mxwcnnkg.js} +15 -305
- package/dist/{chunk-5qf1grkk.js → chunk-w927q9m1.js} +52 -16
- package/dist/pinomad.js +12 -12
- package/package.json +16 -11
- package/web/assets/{core-DnpzcQzs.js → core-BWHGsFpV.js} +1 -1
- package/web/assets/geist-mono-cyrillic-ext-wght-normal-X_5orZeX.woff2 +0 -0
- package/web/assets/geist-mono-cyrillic-wght-normal-DiZS0aHC.woff2 +0 -0
- package/web/assets/geist-mono-latin-ext-wght-normal-Bwz-egvJ.woff2 +0 -0
- package/web/assets/geist-mono-latin-wght-normal-XN7g48iV.woff2 +0 -0
- package/web/assets/geist-mono-symbols2-wght-normal-CO5SzqOn.woff2 +0 -0
- package/web/assets/geist-mono-vietnamese-wght-normal-DadHysG0.woff2 +0 -0
- package/web/assets/{highlighted-diff-Dn5ifsvK.js → highlighted-diff-DJ7KZCpS.js} +2 -2
- package/web/assets/{highlights-DnHv6NBM.js → highlights-CyEmo6OI.js} +1 -1
- package/web/assets/{highlights-themes-CUdrlZk3.js → highlights-themes-CSNkBojy.js} +1 -1
- package/web/assets/index-C_qkbyL7.css +1 -0
- package/web/assets/index-DefQtCI2.js +396 -0
- package/web/assets/{shiki-BuPP5HCg.js → shiki-BzCmRG-v.js} +2 -2
- package/web/assets/{shiki-langs-FJk0v0Ga.js → shiki-langs-DOkjyV4d.js} +1 -1
- package/web/assets/{stream-tokenizer-Bl6bisIa.js → stream-tokenizer-CBPqFe4Z.js} +1 -1
- package/web/assets/{theming-themes-BL_CC-Mm.js → theming-themes-wKVca0aB.js} +1 -1
- package/web/assets/{xterm-view-ZsuzJb2C.js → xterm-view-CKa1-QCM.js} +12 -12
- package/web/index.html +3 -2
- package/web/theme-boot.js +11 -0
- package/dist/chunk-42nqtx5r.js +0 -22
- package/dist/chunk-jeqsdcj1.js +0 -96
- package/web/assets/index-BV0ecolo.css +0 -1
- package/web/assets/index-DNsTTgPE.js +0 -396
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import {
|
|
2
|
+
globalPrefixOf,
|
|
3
|
+
packageDir
|
|
4
|
+
} from "./chunk-1rdbnvy6.js";
|
|
5
|
+
|
|
6
|
+
// apps/host/src/upgrade/npm.ts
|
|
7
|
+
import { existsSync } from "node:fs";
|
|
8
|
+
import { dirname, join } from "node:path";
|
|
9
|
+
function npmBeside(execPath) {
|
|
10
|
+
const binDir = dirname(execPath);
|
|
11
|
+
const cli = join(binDir, "..", "lib", "node_modules", "npm", "bin", "npm-cli.js");
|
|
12
|
+
return existsSync(cli) ? { command: execPath, args: [cli], binDir } : { command: "npm", args: [] };
|
|
13
|
+
}
|
|
14
|
+
var packagePrefix = () => globalPrefixOf(packageDir);
|
|
15
|
+
function installCommand(npm, prefix, spec) {
|
|
16
|
+
return { ...npm, args: [...npm.args, "install", "-g", "--prefix", prefix, spec] };
|
|
17
|
+
}
|
|
18
|
+
function viewCommand(npm) {
|
|
19
|
+
return { ...npm, args: [...npm.args, "view", "pinomad@latest", "version", "time", "pinomad", "--json"] };
|
|
20
|
+
}
|
|
21
|
+
function parseRelease(stdout) {
|
|
22
|
+
const value = JSON.parse(stdout);
|
|
23
|
+
if (typeof value.version !== "string")
|
|
24
|
+
throw new Error("npm view returned no version");
|
|
25
|
+
const time = value.time;
|
|
26
|
+
const published = typeof time?.[value.version] === "string" ? Date.parse(time[value.version]) : Number.NaN;
|
|
27
|
+
if (Number.isNaN(published))
|
|
28
|
+
throw new Error(`npm view returned no publish time for ${value.version}`);
|
|
29
|
+
const field = value.pinomad;
|
|
30
|
+
const major = field?.protocolMajor;
|
|
31
|
+
return {
|
|
32
|
+
version: value.version,
|
|
33
|
+
publishedAt: published,
|
|
34
|
+
...typeof major === "number" && Number.isSafeInteger(major) ? { protocolMajor: major } : {}
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
function outputTail(output, lines = 12) {
|
|
38
|
+
return output.split(`
|
|
39
|
+
`).filter((line) => line.trim() !== "").slice(-lines).join(`
|
|
40
|
+
`);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export { npmBeside, packagePrefix, installCommand, viewCommand, parseRelease, outputTail };
|
|
@@ -2,7 +2,7 @@ import {
|
|
|
2
2
|
HOST_SETTING_KEYS,
|
|
3
3
|
isQueueMode,
|
|
4
4
|
isThinkingLevel
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-6vbp1vva.js";
|
|
6
6
|
|
|
7
7
|
// packages/protocol/src/rtc.ts
|
|
8
8
|
function rtcAddressScope(address) {
|
|
@@ -173,12 +173,17 @@ function parseRtcMaxMessageSize(sdp) {
|
|
|
173
173
|
return { kind: "bounded", bytes };
|
|
174
174
|
}
|
|
175
175
|
|
|
176
|
+
// packages/protocol/src/upgrade.ts
|
|
177
|
+
var AUTO_UPGRADE_MODES = ["off", "notify", "auto"];
|
|
178
|
+
var isAutoUpgradeMode = (value) => AUTO_UPGRADE_MODES.includes(value);
|
|
179
|
+
var HOST_UPGRADING_ERROR = "Host is upgrading";
|
|
180
|
+
|
|
176
181
|
// packages/protocol/src/auth.ts
|
|
177
182
|
var CUSTOM_PROVIDER_APIS = ["openai-completions", "openai-responses", "anthropic-messages", "google-generative-ai"];
|
|
178
183
|
var isCustomProviderApi = (value) => CUSTOM_PROVIDER_APIS.includes(value);
|
|
179
184
|
|
|
180
185
|
// packages/protocol/src/frames.ts
|
|
181
|
-
var HOST_STREAMS = { conversations: 0, index: 0, devices: 0, mcp: 0, models: 1, auth: 1, settings: 2, agents: 6, providers: 21 };
|
|
186
|
+
var HOST_STREAMS = { conversations: 0, index: 0, devices: 0, mcp: 0, models: 1, auth: 1, settings: 2, agents: 6, providers: 21, upgrade: 30 };
|
|
182
187
|
var HOST_STREAM_NAMES = Object.keys(HOST_STREAMS);
|
|
183
188
|
function hostStreams(hostMinor) {
|
|
184
189
|
return HOST_STREAM_NAMES.filter((name) => HOST_STREAMS[name] <= hostMinor);
|
|
@@ -187,7 +192,7 @@ var conversationStream = (id) => `conversation:${id}`;
|
|
|
187
192
|
var docStream = (kind, id) => `doc:${kind}:${id}`;
|
|
188
193
|
var UNAUTHORIZED_CLOSE_CODE = 4401;
|
|
189
194
|
var INVALID_FRAME_CLOSE_CODE = 4400;
|
|
190
|
-
var PROTOCOL = { major: 5, minor:
|
|
195
|
+
var PROTOCOL = { major: 5, minor: 33 };
|
|
191
196
|
var CALL_SINCE = {
|
|
192
197
|
addProject: 0,
|
|
193
198
|
removeProject: 0,
|
|
@@ -202,6 +207,7 @@ var CALL_SINCE = {
|
|
|
202
207
|
submission: 25,
|
|
203
208
|
withdrawQueued: 14,
|
|
204
209
|
steerQueued: 14,
|
|
210
|
+
reorderQueued: 29,
|
|
205
211
|
abort: 0,
|
|
206
212
|
compact: 0,
|
|
207
213
|
runCommand: 17,
|
|
@@ -226,6 +232,7 @@ var CALL_SINCE = {
|
|
|
226
232
|
deleteAgent: 6,
|
|
227
233
|
setPushToken: 7,
|
|
228
234
|
image: 15,
|
|
235
|
+
earlierEntries: 28,
|
|
229
236
|
beginAttachment: 19,
|
|
230
237
|
appendAttachment: 19,
|
|
231
238
|
rtcOffer: 23,
|
|
@@ -235,7 +242,11 @@ var CALL_SINCE = {
|
|
|
235
242
|
resizeTerminal: 27,
|
|
236
243
|
renameTerminal: 27,
|
|
237
244
|
restartTerminal: 27,
|
|
238
|
-
closeTerminal: 27
|
|
245
|
+
closeTerminal: 27,
|
|
246
|
+
stopProcess: 32,
|
|
247
|
+
startUpgrade: 30,
|
|
248
|
+
cancelUpgrade: 30,
|
|
249
|
+
checkUpgrade: 30
|
|
239
250
|
};
|
|
240
251
|
function hostSupportsCall(hostMinor, method) {
|
|
241
252
|
return hostMinor >= CALL_SINCE[method];
|
|
@@ -253,7 +264,11 @@ var FEATURE_SINCE = {
|
|
|
253
264
|
imageVariants: 20,
|
|
254
265
|
rtc: 23,
|
|
255
266
|
submitEntry: 25,
|
|
256
|
-
terminals: 27
|
|
267
|
+
terminals: 27,
|
|
268
|
+
transcriptPaging: 28,
|
|
269
|
+
autoUpgrade: 30,
|
|
270
|
+
processes: 32,
|
|
271
|
+
subagentStop: 33
|
|
257
272
|
};
|
|
258
273
|
function hostSupportsFeature(hostMinor, feature) {
|
|
259
274
|
return hostMinor >= FEATURE_SINCE[feature];
|
|
@@ -268,14 +283,25 @@ function parseClientFrame(value) {
|
|
|
268
283
|
if (isStreamName(stream)) {
|
|
269
284
|
if (value.type === "unsubscribe")
|
|
270
285
|
return { kind: "frame", frame: { type: "unsubscribe", stream } };
|
|
271
|
-
if (stream.startsWith("terminal:") && value.since !== undefined) {
|
|
286
|
+
if ((stream.startsWith("terminal:") || stream.startsWith("process:")) && value.since !== undefined) {
|
|
272
287
|
const since = value.since;
|
|
273
288
|
if (typeof since !== "number" || !Number.isSafeInteger(since) || since < 0)
|
|
274
289
|
return { kind: "malformed" };
|
|
275
290
|
return { kind: "frame", frame: { type: "subscribe", stream, since } };
|
|
276
291
|
}
|
|
277
292
|
const refs = value.images === "ref";
|
|
278
|
-
|
|
293
|
+
let window;
|
|
294
|
+
if (stream.startsWith("conversation:") && value.window !== undefined) {
|
|
295
|
+
if (!record(value.window) || !positive(value.window.limit) || !(value.window.from === undefined || positive(value.window.from))) {
|
|
296
|
+
return { kind: "malformed" };
|
|
297
|
+
}
|
|
298
|
+
const limit = value.window.limit;
|
|
299
|
+
window = value.window.from === undefined ? { limit } : { limit, from: value.window.from };
|
|
300
|
+
}
|
|
301
|
+
return {
|
|
302
|
+
kind: "frame",
|
|
303
|
+
frame: { type: "subscribe", stream, ...refs ? { images: "ref" } : {}, ...window === undefined ? {} : { window } }
|
|
304
|
+
};
|
|
279
305
|
}
|
|
280
306
|
const prefix = stream.slice(0, stream.indexOf(":") === -1 ? undefined : stream.indexOf(":"));
|
|
281
307
|
if (STREAM_KINDS.has(prefix))
|
|
@@ -292,9 +318,9 @@ function parseClientFrame(value) {
|
|
|
292
318
|
return { kind: "unsupportedCall", id, method };
|
|
293
319
|
return validCallArgs(method, args) ? { kind: "frame", frame: { type: "call", id, method, args } } : { kind: "malformed" };
|
|
294
320
|
}
|
|
295
|
-
var STREAM_KINDS = new Set(["conversation", "doc", "tasks", "terminals", "terminal", ...HOST_STREAM_NAMES]);
|
|
321
|
+
var STREAM_KINDS = new Set(["conversation", "doc", "tasks", "terminals", "terminal", "process", ...HOST_STREAM_NAMES]);
|
|
296
322
|
function isStreamName(stream) {
|
|
297
|
-
return stream === "tasks" || HOST_STREAM_NAMES.includes(stream) || /^(?:conversation:|doc:.+:|terminals:)[1-9]\d*$/.test(stream) || /^terminal:[\w-]+$/.test(stream);
|
|
323
|
+
return stream === "tasks" || HOST_STREAM_NAMES.includes(stream) || /^(?:conversation:|doc:.+:|terminals:)[1-9]\d*$/.test(stream) || /^terminal:[\w-]+$/.test(stream) || /^process:[\w-]+$/.test(stream);
|
|
298
324
|
}
|
|
299
325
|
var isCallMethod = (method) => CALL_METHODS.includes(method);
|
|
300
326
|
var CALL_METHODS = Object.keys(CALL_SINCE);
|
|
@@ -305,7 +331,8 @@ var SETTING_VALIDATORS = {
|
|
|
305
331
|
followUpMode: (value) => value === null || isQueueMode(value),
|
|
306
332
|
acceptAccountDevices: (value) => value === null || typeof value === "boolean",
|
|
307
333
|
rtcStun: (value) => value === null || Array.isArray(value) && value.every(nonempty),
|
|
308
|
-
hostName: (value) => value === null || typeof value === "string"
|
|
334
|
+
hostName: (value) => value === null || typeof value === "string",
|
|
335
|
+
autoUpgrade: (value) => value === null || isAutoUpgradeMode(value)
|
|
309
336
|
};
|
|
310
337
|
function validCallArgs(method, args) {
|
|
311
338
|
const conversationId = () => typeof args.conversationId === "number" && Number.isSafeInteger(args.conversationId) && args.conversationId >= 1;
|
|
@@ -328,6 +355,8 @@ function validCallArgs(method, args) {
|
|
|
328
355
|
return terminalId() && (args.name === null || typeof args.name === "string");
|
|
329
356
|
case "closeTerminal":
|
|
330
357
|
return terminalId();
|
|
358
|
+
case "stopProcess":
|
|
359
|
+
return conversationId() && nonempty(args.id);
|
|
331
360
|
case "submit":
|
|
332
361
|
return conversationId() && typeof args.text === "string" && (args.whenBusy === "steer" || args.whenBusy === "followUp") && nonempty(args.requestId) && images() && skills() && attachments();
|
|
333
362
|
case "submission":
|
|
@@ -335,6 +364,8 @@ function validCallArgs(method, args) {
|
|
|
335
364
|
case "withdrawQueued":
|
|
336
365
|
case "steerQueued":
|
|
337
366
|
return conversationId() && submissionId();
|
|
367
|
+
case "reorderQueued":
|
|
368
|
+
return conversationId() && submissionId() && (args.before === undefined || typeof args.before === "number" && Number.isSafeInteger(args.before) && args.before >= 1);
|
|
338
369
|
case "abort":
|
|
339
370
|
return conversationId();
|
|
340
371
|
case "setThinkingLevel":
|
|
@@ -355,6 +386,8 @@ function validCallArgs(method, args) {
|
|
|
355
386
|
return conversationId() && nonempty(args.kind) && nonempty(args.requestId) && Array.isArray(args.answers) && args.answers.every((answer) => record(answer) && Array.isArray(answer.selected) && answer.selected.every((l) => typeof l === "string") && (answer.other === undefined || typeof answer.other === "string"));
|
|
356
387
|
case "changes":
|
|
357
388
|
return conversationId();
|
|
389
|
+
case "earlierEntries":
|
|
390
|
+
return conversationId() && positive(args.before) && positive(args.limit);
|
|
358
391
|
case "image":
|
|
359
392
|
return nonempty(args.ref) && (args.variant === undefined || args.variant === "thumbnail" || args.variant === "preview");
|
|
360
393
|
case "beginAttachment":
|
|
@@ -377,7 +410,11 @@ function validCallArgs(method, args) {
|
|
|
377
410
|
case "renameConversation":
|
|
378
411
|
return conversationId() && typeof args.title === "string";
|
|
379
412
|
case "createPairing":
|
|
413
|
+
case "cancelUpgrade":
|
|
414
|
+
case "checkUpgrade":
|
|
380
415
|
return Object.keys(args).length === 0;
|
|
416
|
+
case "startUpgrade":
|
|
417
|
+
return args.when === "idle" || args.when === "now";
|
|
381
418
|
case "rtcOffer":
|
|
382
419
|
return nonempty(args.attempt) && nonempty(args.sdp);
|
|
383
420
|
case "ping":
|
|
@@ -411,6 +448,9 @@ function validCallArgs(method, args) {
|
|
|
411
448
|
function record(value) {
|
|
412
449
|
return value !== null && typeof value === "object" && !Array.isArray(value);
|
|
413
450
|
}
|
|
451
|
+
function positive(value) {
|
|
452
|
+
return typeof value === "number" && Number.isSafeInteger(value) && value >= 1;
|
|
453
|
+
}
|
|
414
454
|
function nonempty(value) {
|
|
415
455
|
return typeof value === "string" && value.length > 0;
|
|
416
456
|
}
|
|
@@ -647,4 +687,144 @@ function homeOf(index, summaries, id) {
|
|
|
647
687
|
return;
|
|
648
688
|
}
|
|
649
689
|
|
|
650
|
-
|
|
690
|
+
// packages/protocol/src/presentation.ts
|
|
691
|
+
import { Type } from "typebox";
|
|
692
|
+
import { Value } from "typebox/value";
|
|
693
|
+
var TodoItemSchema = Type.Object({
|
|
694
|
+
text: Type.String({ minLength: 1 }),
|
|
695
|
+
status: Type.Union([Type.Literal("pending"), Type.Literal("in_progress"), Type.Literal("completed")])
|
|
696
|
+
});
|
|
697
|
+
var TodoSchema = Type.Object({ items: Type.Array(TodoItemSchema) });
|
|
698
|
+
var QuestionOptionSchema = Type.Object({
|
|
699
|
+
label: Type.String({ minLength: 1 }),
|
|
700
|
+
description: Type.Optional(Type.String())
|
|
701
|
+
});
|
|
702
|
+
var QuestionItemSchema = Type.Object({
|
|
703
|
+
question: Type.String({ minLength: 1 }),
|
|
704
|
+
header: Type.String({ minLength: 1, maxLength: 16 }),
|
|
705
|
+
options: Type.Array(QuestionOptionSchema, { minItems: 2, maxItems: 4 }),
|
|
706
|
+
multiSelect: Type.Optional(Type.Boolean())
|
|
707
|
+
});
|
|
708
|
+
var QuestionAnswerSchema = Type.Object({
|
|
709
|
+
selected: Type.Array(Type.String()),
|
|
710
|
+
other: Type.Optional(Type.String())
|
|
711
|
+
});
|
|
712
|
+
var QuestionResolutionSchema = Type.Union([
|
|
713
|
+
Type.Object({ outcome: Type.Literal("answered"), answers: Type.Array(QuestionAnswerSchema), at: Type.Number() }),
|
|
714
|
+
Type.Object({ outcome: Type.Literal("dismissed"), at: Type.Number() }),
|
|
715
|
+
Type.Object({ outcome: Type.Literal("cancelled"), at: Type.Number() })
|
|
716
|
+
]);
|
|
717
|
+
var QuestionRequestSchema = Type.Object({
|
|
718
|
+
id: Type.String({ minLength: 1 }),
|
|
719
|
+
questions: Type.Array(QuestionItemSchema, { minItems: 1, maxItems: 4 }),
|
|
720
|
+
askedAt: Type.Number(),
|
|
721
|
+
resolution: Type.Optional(QuestionResolutionSchema)
|
|
722
|
+
});
|
|
723
|
+
var QuestionSchema = Type.Object({ requests: Type.Array(QuestionRequestSchema) });
|
|
724
|
+
var DiffSchema = Type.Object({ patch: Type.String() });
|
|
725
|
+
var CodemodeCallSchema = Type.Object({
|
|
726
|
+
id: Type.Optional(Type.Number()),
|
|
727
|
+
name: Type.String(),
|
|
728
|
+
args: Type.String(),
|
|
729
|
+
status: Type.Union([Type.Literal("running"), Type.Literal("ok"), Type.Literal("error"), Type.Literal("cancelled")]),
|
|
730
|
+
durationMs: Type.Optional(Type.Number()),
|
|
731
|
+
error: Type.Optional(Type.String()),
|
|
732
|
+
details: Type.Optional(Type.Unknown())
|
|
733
|
+
});
|
|
734
|
+
var CodemodeSchema = Type.Object({ code: Type.Optional(Type.String()), calls: Type.Array(CodemodeCallSchema) });
|
|
735
|
+
var TokenCount = Type.Integer({ minimum: 0 });
|
|
736
|
+
var ContextBreakdownSchema = Type.Object({
|
|
737
|
+
used: TokenCount,
|
|
738
|
+
system: TokenCount,
|
|
739
|
+
skills: TokenCount,
|
|
740
|
+
tools: TokenCount,
|
|
741
|
+
mcp: TokenCount,
|
|
742
|
+
messages: TokenCount
|
|
743
|
+
});
|
|
744
|
+
var ProcessStateSchema = Type.Union([
|
|
745
|
+
Type.Literal("starting"),
|
|
746
|
+
Type.Literal("running"),
|
|
747
|
+
Type.Object({
|
|
748
|
+
exited: Type.Union([Type.Number(), Type.Null()]),
|
|
749
|
+
signal: Type.Optional(Type.String())
|
|
750
|
+
}),
|
|
751
|
+
Type.Object({
|
|
752
|
+
stopped: Type.Union([
|
|
753
|
+
Type.Literal("agent"),
|
|
754
|
+
Type.Literal("user"),
|
|
755
|
+
Type.Literal("archive"),
|
|
756
|
+
Type.Literal("shutdown")
|
|
757
|
+
])
|
|
758
|
+
}),
|
|
759
|
+
Type.Object({ failed: Type.String() }),
|
|
760
|
+
Type.Literal("lost")
|
|
761
|
+
]);
|
|
762
|
+
var ProcessInfoSchema = Type.Object({
|
|
763
|
+
id: Type.String({ minLength: 1 }),
|
|
764
|
+
owner: Type.Number(),
|
|
765
|
+
name: Type.String(),
|
|
766
|
+
command: Type.String(),
|
|
767
|
+
pid: Type.Optional(Type.Number()),
|
|
768
|
+
startedAt: Type.Number(),
|
|
769
|
+
endedAt: Type.Optional(Type.Number()),
|
|
770
|
+
state: ProcessStateSchema
|
|
771
|
+
});
|
|
772
|
+
var ProcessesSchema = Type.Object({ processes: Type.Array(ProcessInfoSchema) });
|
|
773
|
+
function classify(presentation, value) {
|
|
774
|
+
if (presentation === "pinomad.todo" && Value.Check(TodoSchema, value)) {
|
|
775
|
+
return { type: "pinomad.todo", value };
|
|
776
|
+
}
|
|
777
|
+
if (presentation === "pinomad.question" && Value.Check(QuestionSchema, value)) {
|
|
778
|
+
return { type: "pinomad.question", value };
|
|
779
|
+
}
|
|
780
|
+
if (presentation === "pinomad.diff" && Value.Check(DiffSchema, value)) {
|
|
781
|
+
return { type: "pinomad.diff", value };
|
|
782
|
+
}
|
|
783
|
+
if (presentation === "pinomad.codemode" && Value.Check(CodemodeSchema, value)) {
|
|
784
|
+
return { type: "pinomad.codemode", value };
|
|
785
|
+
}
|
|
786
|
+
if (presentation === "pinomad.context" && Value.Check(ContextBreakdownSchema, value)) {
|
|
787
|
+
return { type: "pinomad.context", value };
|
|
788
|
+
}
|
|
789
|
+
if (presentation === "pinomad.processes" && Value.Check(ProcessesSchema, value)) {
|
|
790
|
+
return { type: "pinomad.processes", value };
|
|
791
|
+
}
|
|
792
|
+
return { type: "fallback", value };
|
|
793
|
+
}
|
|
794
|
+
|
|
795
|
+
// packages/protocol/src/processes.ts
|
|
796
|
+
function isProcessesHello(value) {
|
|
797
|
+
return value !== null && typeof value === "object" && typeof value.limit === "number";
|
|
798
|
+
}
|
|
799
|
+
function isProcessActive(state) {
|
|
800
|
+
return state === "starting" || state === "running";
|
|
801
|
+
}
|
|
802
|
+
var processStream = (id) => `process:${id}`;
|
|
803
|
+
|
|
804
|
+
// packages/protocol/src/transcript.ts
|
|
805
|
+
var TRANSCRIPT_PAGE = 50;
|
|
806
|
+
var MAX_TRANSCRIPT_PAGE = 500;
|
|
807
|
+
function withEarlier(view, earlier) {
|
|
808
|
+
if (earlier === undefined)
|
|
809
|
+
return view;
|
|
810
|
+
const { before: _window, ...rest } = view;
|
|
811
|
+
return {
|
|
812
|
+
...rest,
|
|
813
|
+
entries: [...earlier.entries, ...view.entries],
|
|
814
|
+
...earlier.before === undefined ? {} : { before: earlier.before }
|
|
815
|
+
};
|
|
816
|
+
}
|
|
817
|
+
function addEarlier(shown, earlier, requested, page) {
|
|
818
|
+
if (shown.before !== requested)
|
|
819
|
+
return earlier;
|
|
820
|
+
return {
|
|
821
|
+
entries: [...page.entries, ...earlier?.entries ?? []],
|
|
822
|
+
...page.before === undefined ? {} : { before: page.before }
|
|
823
|
+
};
|
|
824
|
+
}
|
|
825
|
+
function isBusy(view) {
|
|
826
|
+
const live = view.docs?.["pi.live"];
|
|
827
|
+
return live?.run !== undefined;
|
|
828
|
+
}
|
|
829
|
+
|
|
830
|
+
export { rtcSelectedPair, RTC_DEFAULT_STUN, RTC_DATA_CHANNEL_LABEL, RTC_MAX_RECORD_BYTES, isRtcHello, rtcCandidateType, sdpCandidates, withRtcCandidates, parseRtcMaxMessageSize, isAutoUpgradeMode, HOST_UPGRADING_ERROR, isCustomProviderApi, HOST_STREAM_NAMES, hostStreams, conversationStream, docStream, UNAUTHORIZED_CLOSE_CODE, INVALID_FRAME_CLOSE_CODE, PROTOCOL, hostSupportsCall, hostSupportsFeature, parseClientFrame, MAX_ATTACHMENTS_PER_MESSAGE, MAX_PENDING_ATTACHMENTS, MAX_PENDING_ATTACHMENT_BYTES, ATTACHMENT_TTL_MS, MAX_ATTACHMENT_NAME_LENGTH, isAttachmentId, base64DecodedLength, attachmentBeginProblem, attachmentChunkProblem, attachmentBlock, parseAttachmentBlock, organize, checkoutOf, homeOf, TodoItemSchema, QuestionItemSchema, QuestionSchema, classify, isProcessesHello, isProcessActive, processStream, TRANSCRIPT_PAGE, MAX_TRANSCRIPT_PAGE, withEarlier, addEarlier, isBusy };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// apps/host/src/distribution.ts
|
|
2
2
|
import { fileURLToPath } from "node:url";
|
|
3
|
-
var packagedVersion = "0.
|
|
3
|
+
var packagedVersion = "0.14.0";
|
|
4
4
|
var webRoot = fileURLToPath(new URL(packagedVersion === undefined ? "../../web/dist" : "../web/", import.meta.url));
|
|
5
5
|
var hostEntry = packagedVersion === undefined ? { script: fileURLToPath(new URL("./main.ts", import.meta.url)), args: [] } : { script: fileURLToPath(new URL("./pinomad.js", import.meta.url)), args: ["host"] };
|
|
6
6
|
var commandHint = (name) => packagedVersion === undefined ? `bun run ${name}` : `pinomad ${name}`;
|