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.
Files changed (47) hide show
  1. package/dist/chunk-0dh2k3er.js +43 -0
  2. package/dist/{chunk-47ff1d1t.js → chunk-1mjbt2z2.js} +191 -11
  3. package/dist/{chunk-7wj0jh3t.js → chunk-1rdbnvy6.js} +1 -1
  4. package/dist/{chunk-ksfxqd8s.js → chunk-35szq73k.js} +2682 -459
  5. package/dist/{chunk-mnmqyq7d.js → chunk-5j7ybhjj.js} +1984 -333
  6. package/dist/{chunk-agq4tn9r.js → chunk-5pv0g1nj.js} +12 -10
  7. package/dist/{chunk-7mn38n4f.js → chunk-63ymn5c9.js} +2 -2
  8. package/dist/{chunk-nppgxh6c.js → chunk-6j6hkfbj.js} +8 -4
  9. package/dist/{chunk-pqe7q1s7.js → chunk-6vbp1vva.js} +2 -1
  10. package/dist/{chunk-g3ahp7b9.js → chunk-9trbbz4r.js} +1 -1
  11. package/dist/{chunk-gg2dcqbg.js → chunk-b0nwq1dt.js} +29 -12
  12. package/dist/chunk-dsr19q5h.js +23 -0
  13. package/dist/{chunk-41q0saz0.js → chunk-e53c0s8z.js} +9 -7
  14. package/dist/{chunk-np4jd070.js → chunk-e59k3bmz.js} +307 -56
  15. package/dist/chunk-eerpgvy9.js +315 -0
  16. package/dist/chunk-eewxy4cp.js +240 -0
  17. package/dist/{chunk-vqkb70d7.js → chunk-evbv1fkn.js} +3 -3
  18. package/dist/{chunk-vx7dy07y.js → chunk-ex5yr09h.js} +11 -6
  19. package/dist/{chunk-t91zt5f0.js → chunk-hg9gs396.js} +1 -1
  20. package/dist/{chunk-aqj9wfmb.js → chunk-mtkvft88.js} +1 -1
  21. package/dist/{chunk-t5abqsva.js → chunk-mxwcnnkg.js} +15 -305
  22. package/dist/{chunk-5qf1grkk.js → chunk-w927q9m1.js} +52 -16
  23. package/dist/pinomad.js +12 -12
  24. package/package.json +16 -11
  25. package/web/assets/{core-DnpzcQzs.js → core-BWHGsFpV.js} +1 -1
  26. package/web/assets/geist-mono-cyrillic-ext-wght-normal-X_5orZeX.woff2 +0 -0
  27. package/web/assets/geist-mono-cyrillic-wght-normal-DiZS0aHC.woff2 +0 -0
  28. package/web/assets/geist-mono-latin-ext-wght-normal-Bwz-egvJ.woff2 +0 -0
  29. package/web/assets/geist-mono-latin-wght-normal-XN7g48iV.woff2 +0 -0
  30. package/web/assets/geist-mono-symbols2-wght-normal-CO5SzqOn.woff2 +0 -0
  31. package/web/assets/geist-mono-vietnamese-wght-normal-DadHysG0.woff2 +0 -0
  32. package/web/assets/{highlighted-diff-Dn5ifsvK.js → highlighted-diff-DJ7KZCpS.js} +2 -2
  33. package/web/assets/{highlights-DnHv6NBM.js → highlights-CyEmo6OI.js} +1 -1
  34. package/web/assets/{highlights-themes-CUdrlZk3.js → highlights-themes-CSNkBojy.js} +1 -1
  35. package/web/assets/index-C_qkbyL7.css +1 -0
  36. package/web/assets/index-DefQtCI2.js +396 -0
  37. package/web/assets/{shiki-BuPP5HCg.js → shiki-BzCmRG-v.js} +2 -2
  38. package/web/assets/{shiki-langs-FJk0v0Ga.js → shiki-langs-DOkjyV4d.js} +1 -1
  39. package/web/assets/{stream-tokenizer-Bl6bisIa.js → stream-tokenizer-CBPqFe4Z.js} +1 -1
  40. package/web/assets/{theming-themes-BL_CC-Mm.js → theming-themes-wKVca0aB.js} +1 -1
  41. package/web/assets/{xterm-view-ZsuzJb2C.js → xterm-view-CKa1-QCM.js} +12 -12
  42. package/web/index.html +3 -2
  43. package/web/theme-boot.js +11 -0
  44. package/dist/chunk-42nqtx5r.js +0 -22
  45. package/dist/chunk-jeqsdcj1.js +0 -96
  46. package/web/assets/index-BV0ecolo.css +0 -1
  47. 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-pqe7q1s7.js";
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: 27 };
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
- return { kind: "frame", frame: refs ? { type: "subscribe", stream, images: "ref" } : { type: "subscribe", stream } };
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
- export { rtcSelectedPair, RTC_DEFAULT_STUN, RTC_DATA_CHANNEL_LABEL, RTC_MAX_RECORD_BYTES, isRtcHello, rtcCandidateType, sdpCandidates, withRtcCandidates, parseRtcMaxMessageSize, 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 };
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.12.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}`;