openpond 0.0.49 → 0.0.51

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 (133) hide show
  1. package/dist/chunks/{app-layer-E2JWCA6D.js → app-layer-DCUTQ4TM.js} +2 -2
  2. package/dist/chunks/{app-server-runtime-OWEIHFEU.js → app-server-runtime-Q3IGU5YB.js} +6 -6
  3. package/dist/chunks/{apps-VQDIVGST.js → apps-JDRCDAPE.js} +2 -2
  4. package/dist/chunks/{chunk-7G472COA.js → chunk-35OYRVVH.js} +1491 -4
  5. package/dist/chunks/{chunk-3BR4ACFF.js → chunk-3PYU3XCS.js} +484 -201
  6. package/dist/chunks/{chunk-NR2N6JAC.js → chunk-CSN3DLWJ.js} +1 -1
  7. package/dist/chunks/{chunk-ZJBJQCQZ.js → chunk-EJURKADM.js} +4 -2
  8. package/dist/chunks/{chunk-NRLI3S72.js → chunk-IGSEFSMA.js} +187 -21
  9. package/dist/chunks/{chunk-UJV3UYLP.js → chunk-J4LLKY6E.js} +1 -1
  10. package/dist/chunks/{chunk-64LWPRGN.js → chunk-LYEXNSCO.js} +2 -2
  11. package/dist/chunks/{chunk-LRLDBKTI.js → chunk-PFNX5XOT.js} +1 -1
  12. package/dist/chunks/{chunk-QD4FR3O4.js → chunk-R4PRXXTC.js} +40 -35
  13. package/dist/chunks/{chunk-CNIMJPM5.js → chunk-UDTHREHB.js} +2231 -2125
  14. package/dist/chunks/{chunk-7M4HGT5X.js → chunk-V3HADQL5.js} +1 -1
  15. package/dist/chunks/{cli-T6TTMVSU.js → cli-2FTM4SXH.js} +5 -5
  16. package/dist/chunks/{core-commands-UW4XTGXK.js → core-commands-5BRR7TU4.js} +3 -3
  17. package/dist/chunks/{desktop-test-JTBPE7CH.js → desktop-test-EQ2BGZOM.js} +2 -2
  18. package/dist/chunks/{extension-VP7LMA32.js → extension-V3NZ7MU7.js} +305 -170
  19. package/dist/chunks/{help-OZNCHHO3.js → help-WJBMX37U.js} +1 -1
  20. package/dist/chunks/{opchat-RY3QU5UJ.js → opchat-W7DSKNNB.js} +2 -2
  21. package/dist/chunks/{organizations-GLKSXK3Q.js → organizations-RHOF5H4Z.js} +4 -4
  22. package/dist/chunks/{profile-JWUYJF23.js → profile-B62ZWPTQ.js} +3 -3
  23. package/dist/chunks/{project-agent-L4EB7QFO.js → project-agent-QA25HHDV.js} +2 -2
  24. package/dist/chunks/{sandbox-command-26255MSV.js → sandbox-command-JFEVPU4X.js} +2 -2
  25. package/dist/chunks/{sandbox-template-6UDA3AEY.js → sandbox-template-GEWTAWAR.js} +3 -3
  26. package/dist/chunks/{src-7S66FU4P.js → src-JOTV67WO.js} +4944 -3831
  27. package/dist/chunks/{src-GCZ2GMG3.js → src-P2BL3KCV.js} +3 -4
  28. package/dist/chunks/{teams-bot-PO3GOLWU.js → teams-bot-ODSMRNE4.js} +2 -2
  29. package/dist/chunks/{training-BR5A7SPU.js → training-5CPTZRVC.js} +81 -2
  30. package/dist/chunks/{workspaces-26IF6TQV.js → workspaces-7YHBJG5P.js} +2 -2
  31. package/dist/cli.js +13 -13
  32. package/dist/index.js +7 -5
  33. package/dist/profile/profile-git.d.ts +22 -0
  34. package/dist/skills/openpond-taskset-authoring/SKILL.md +9 -1
  35. package/dist/skills/openpond-taskset-authoring/artifact.json +10 -5
  36. package/dist/skills/openpond-taskset-authoring/references/benchmarking.md +26 -0
  37. package/dist/web/assets/{AppDialog-BTOxCNC5.js → AppDialog-DylZeiI-.js} +1 -1
  38. package/dist/web/assets/{AppsView-Cm5x09IS.js → AppsView-Bz6C0a1u.js} +1 -1
  39. package/dist/web/assets/{BrowserSidebar-CIPh5JIn.js → BrowserSidebar-xXFxZP2-.js} +1 -1
  40. package/dist/web/assets/CommandMenu-C9k5VdaR.js +1 -0
  41. package/dist/web/assets/CommunityView-DaIS0cHw.css +1 -0
  42. package/dist/web/assets/CommunityView-DcJlUNgd.js +1 -0
  43. package/dist/web/assets/{ComposerCreateImproveStrip-CW2QuI7r.js → ComposerCreateImproveStrip-Yt3irJVo.js} +1 -1
  44. package/dist/web/assets/{GetStartedView--CbCnzFQ.js → GetStartedView-BhD0Ij7c.js} +1 -1
  45. package/dist/web/assets/LabModelVersionDetailPage-B-OoSJYT.js +1 -0
  46. package/dist/web/assets/LabSkillSidebar-dqdSTmHG.js +1 -0
  47. package/dist/web/assets/LabsRoute-BMPI4vB8.js +3 -0
  48. package/dist/web/assets/LabsRoute-DDTgtCul.css +1 -0
  49. package/dist/web/assets/MainChatThread-B0ajKiNL.js +2 -0
  50. package/dist/web/assets/{MainPane-Bky_Rqcx.css → MainPane-BfVDe9f7.css} +1 -1
  51. package/dist/web/assets/MainPane-COs4xUGo.js +6 -0
  52. package/dist/web/assets/{MarkdownText-DTBS9xe7.js → MarkdownText-CzZ60aWs.js} +4 -4
  53. package/dist/web/assets/Messages-DGrK4iIj.js +9 -0
  54. package/dist/web/assets/{NativeSkillSidebar-DSoPD42b.js → NativeSkillSidebar-BkpgGLSO.js} +1 -1
  55. package/dist/web/assets/{NewProjectDialog-CmXg2GK7.js → NewProjectDialog-BOdCdNcG.js} +1 -1
  56. package/dist/web/assets/OutputsPage-CSBWIFdi.js +1 -0
  57. package/dist/web/assets/RightChatPanelStack-PZR6NYJj.js +1 -0
  58. package/dist/web/assets/ScheduledWorkPage-WXLnwju_.js +1 -0
  59. package/dist/web/assets/{SettingsView-CrXwXjZ1.css → SettingsView-C39BqlSI.css} +1 -1
  60. package/dist/web/assets/SettingsView-CQJoEx-y.js +6 -0
  61. package/dist/web/assets/{TeamChatView-CB_0oRid.js → TeamChatView-BRnuD-lV.js} +2 -2
  62. package/dist/web/assets/TeamChatView-Br3VdxhD.css +1 -0
  63. package/dist/web/assets/{TerminalOverlay-XhABQsCB.js → TerminalOverlay-B5m8j4_C.js} +1 -1
  64. package/dist/web/assets/{TrainingCreationPanel-ChsDr2GP.js → TrainingCreationPanel-CA1rt7XZ.js} +1 -1
  65. package/dist/web/assets/{TrainingDraftPanel-CDlpnno6.js → TrainingDraftPanel-C0p3GP1n.js} +1 -1
  66. package/dist/web/assets/{UsageSettingsSection-NbX7_3Uz.js → UsageSettingsSection-CpIKj4p-.js} +1 -1
  67. package/dist/web/assets/WorkspaceDiffPanel-BXk8mdZB.js +14 -0
  68. package/dist/web/assets/WorkspaceEnvironmentMenu-BO60uNVj.js +32 -0
  69. package/dist/web/assets/{WorkspaceGitDialogs-C0PMpVfj.js → WorkspaceGitDialogs-hWBfhgaP.js} +1 -1
  70. package/dist/web/assets/{WorkspaceMonacoEditor-6QNGzQUi.js → WorkspaceMonacoEditor-ULPyacH8.js} +3 -3
  71. package/dist/web/assets/{arrow-up-right-Cx2xjktp.js → arrow-up-right-CkfCgokz.js} +1 -1
  72. package/dist/web/assets/{chevron-up-UF_r7JHT.js → chevron-up-B5URpgIH.js} +1 -1
  73. package/dist/web/assets/{circle-alert-BUHAQ7Du.js → circle-alert-CAvjRdlQ.js} +1 -1
  74. package/dist/web/assets/{cloud-upload-Cc_ZQEAm.js → cloud-upload-DeQEwz1o.js} +1 -1
  75. package/dist/web/assets/{cssMode-CrigFsxI.js → cssMode-B4V5a3OX.js} +1 -1
  76. package/dist/web/assets/folder-DgS_U9Lq.js +1 -0
  77. package/dist/web/assets/folder-git-2-BTtbxKWf.js +1 -0
  78. package/dist/web/assets/{folder-open-D7a4t258.js → folder-open-CqjIkaDK.js} +1 -1
  79. package/dist/web/assets/{folder-plus-CmeHTj5W.js → folder-plus-CsS0KPW5.js} +1 -1
  80. package/dist/web/assets/{git-branch-CaVUghsI.js → git-branch-BN2ijBYt.js} +1 -1
  81. package/dist/web/assets/{git-commit-horizontal-oiDAVV_Y.js → git-commit-horizontal-CVsl4u1O.js} +1 -1
  82. package/dist/web/assets/{htmlMode-CLzM5GNi.js → htmlMode-DRksGWJA.js} +1 -1
  83. package/dist/web/assets/index-CE2hroF6.css +1 -0
  84. package/dist/web/assets/index-Cxq5q-6B.js +174 -0
  85. package/dist/web/assets/index-SKvMOpII.js +1 -0
  86. package/dist/web/assets/{info-dTkimobU.js → info-DwVXRQli.js} +1 -1
  87. package/dist/web/assets/{jsonMode-BBF67cOE.js → jsonMode-eJvgtAy-.js} +1 -1
  88. package/dist/web/assets/{lspLanguageFeatures-DHtN2nxz.js → lspLanguageFeatures-DCk7zUI-.js} +1 -1
  89. package/dist/web/assets/{monaco.contribution-DtM9AdPi.js → monaco.contribution-B02C5mDa.js} +2 -2
  90. package/dist/web/assets/{monaco.contribution-BClTZJd2.js → monaco.contribution-CPnN-lZN.js} +2 -2
  91. package/dist/web/assets/{monaco.contribution-riAIDf7J.js → monaco.contribution-DWVguH46.js} +2 -2
  92. package/dist/web/assets/{monaco.contribution-C_GWU01R.js → monaco.contribution-WGT1eYvk.js} +2 -2
  93. package/dist/web/assets/{play-CjWTsI9z.js → play-DGCzapdE.js} +1 -1
  94. package/dist/web/assets/{python-CvZQM_g2.js → python-DRPzruv8.js} +1 -1
  95. package/dist/web/assets/{refresh-cw-CeHT_tXT.js → refresh-cw-BKF4NhDI.js} +1 -1
  96. package/dist/web/assets/{save-CmJ92Odx.js → save-DQXtfx_4.js} +1 -1
  97. package/dist/web/assets/{square-B00f_944.js → square-Dp5eGICS.js} +1 -1
  98. package/dist/web/assets/square-pen-j-mZ_UkO.js +1 -0
  99. package/dist/web/assets/{toggleHighContrast-C6N52VOS.js → toggleHighContrast-wDmA5YPb.js} +1 -1
  100. package/dist/web/assets/{training-model-data-B7-1Bxil.js → training-model-data-V8276E5q.js} +1 -1
  101. package/dist/web/assets/{tsMode-CDIfvnHn.js → tsMode-DELTv39m.js} +1 -1
  102. package/dist/web/assets/{upload-DK0-5jXz.js → upload-_rNli8wK.js} +1 -1
  103. package/dist/web/assets/{useLocalAgentSchedules-BUkZjV9E.js → useLocalAgentSchedules-DRVUfTbv.js} +1 -1
  104. package/dist/web/assets/wifi-off-uKPwd8A7.js +1 -0
  105. package/dist/web/assets/{workers-BfcjsZ3C.js → workers-CXbluSB3.js} +1 -1
  106. package/dist/web/assets/{yaml-CNqgAihH.js → yaml-BMqi-3ui.js} +1 -1
  107. package/dist/web/index.html +2 -2
  108. package/docs/command-reference.md +6 -1
  109. package/package.json +1 -1
  110. package/dist/web/assets/CommandMenu-DdR82TLd.js +0 -1
  111. package/dist/web/assets/CommunityView-DSik4sd2.css +0 -1
  112. package/dist/web/assets/CommunityView-Dqu4cos1.js +0 -1
  113. package/dist/web/assets/LabModelVersionDetailPage-BPUvR5XP.js +0 -1
  114. package/dist/web/assets/LabSkillSidebar-CnuyFZ1G.js +0 -1
  115. package/dist/web/assets/LabsRoute-CYk2dzQp.js +0 -3
  116. package/dist/web/assets/LabsRoute-CoSPO4HR.css +0 -1
  117. package/dist/web/assets/MainChatThread-0Tc95p0t.js +0 -2
  118. package/dist/web/assets/MainPane-Bke4JEHC.js +0 -6
  119. package/dist/web/assets/Messages-Bae_sFx5.js +0 -9
  120. package/dist/web/assets/OutputsPage-XmIreC0M.js +0 -1
  121. package/dist/web/assets/RightChatPanelStack-BMOtbjus.js +0 -1
  122. package/dist/web/assets/ScheduledWorkPage-Cn5a9VLV.js +0 -1
  123. package/dist/web/assets/SettingsView-DXF8z3P2.js +0 -6
  124. package/dist/web/assets/TeamChatView-Cgxm-pKA.css +0 -1
  125. package/dist/web/assets/WorkspaceDiffPanel-jaJU08NH.js +0 -14
  126. package/dist/web/assets/WorkspaceEnvironmentMenu-D0nvQmmj.js +0 -32
  127. package/dist/web/assets/index-De6p2npi.js +0 -1
  128. package/dist/web/assets/index-UUM3pwfd.css +0 -1
  129. package/dist/web/assets/index-Ure41UF0.js +0 -178
  130. package/dist/web/assets/monitor-POfnZCWw.js +0 -1
  131. package/dist/web/assets/reply-BkH8nKWG.js +0 -1
  132. package/dist/web/assets/square-pen-LHr8bFfZ.js +0 -1
  133. package/dist/web/assets/wifi-off-BQGq-son.js +0 -1
@@ -28,7 +28,7 @@ import {
28
28
  compareSemver,
29
29
  fetchLatestNpmVersion,
30
30
  getInstalledCliVersion
31
- } from "./chunk-QD4FR3O4.js";
31
+ } from "./chunk-R4PRXXTC.js";
32
32
  import {
33
33
  checkOpenPondApiHealth,
34
34
  createHeadlessApps,
@@ -153,7 +153,7 @@ import path2 from "node:path";
153
153
  // ../../packages/cloud/src/profile/profile-git.ts
154
154
  import { spawn } from "node:child_process";
155
155
  import { existsSync } from "node:fs";
156
- import { readFile, writeFile } from "node:fs/promises";
156
+ import { readFile, rm, writeFile } from "node:fs/promises";
157
157
  import path from "node:path";
158
158
  var PROFILE_REPO_GITIGNORE = [
159
159
  "**/node_modules/",
@@ -377,6 +377,8 @@ async function runGitCommand(repoPath, args, options = {}) {
377
377
  proc.on("close", (code) => {
378
378
  resolve({ code, stdout, stderr });
379
379
  });
380
+ if (options.input !== void 0) proc.stdin?.end(options.input);
381
+ else proc.stdin?.end();
380
382
  });
381
383
  }
382
384
 
@@ -599,7 +601,7 @@ import {
599
601
  readFile as readFile4,
600
602
  readdir as readdir2,
601
603
  rename,
602
- rm,
604
+ rm as rm2,
603
605
  symlink,
604
606
  writeFile as writeFile2
605
607
  } from "node:fs/promises";
@@ -12,7 +12,7 @@ import {
12
12
  saveConfig,
13
13
  saveProfileApiKey,
14
14
  setActiveProfile
15
- } from "./chunk-3BR4ACFF.js";
15
+ } from "./chunk-3PYU3XCS.js";
16
16
  import {
17
17
  DEFAULT_OPENPOND_API_BASE_URL,
18
18
  DEFAULT_OPENPOND_WEB_BASE_URL,
@@ -413,6 +413,50 @@ function errorMessage(error) {
413
413
 
414
414
  // ../../packages/runtime/dist/chat.js
415
415
  var PROVIDER_CATALOG_FETCH_TIMEOUT_MS = 15e3;
416
+ function displayNameForHostedModel(id) {
417
+ if (id === DEFAULT_OPENPOND_CHAT_MODEL)
418
+ return "OpenPond Chat";
419
+ if (id === "deepseek-v4-flash")
420
+ return "DeepSeek V4 Flash";
421
+ return id.replace(/[-_/]+/g, " ");
422
+ }
423
+ function normalizeHostedModel(model) {
424
+ const id = typeof model.id === "string" ? model.id : null;
425
+ if (!id)
426
+ return null;
427
+ return {
428
+ id,
429
+ displayName: displayNameForHostedModel(id),
430
+ ownedBy: typeof model.owned_by === "string" ? model.owned_by : null,
431
+ streaming: true,
432
+ raw: model
433
+ };
434
+ }
435
+ async function loadOpenPondHostedModels() {
436
+ const context = await loadOpenPondAccountContext();
437
+ if (!context.token) {
438
+ return {
439
+ models: [],
440
+ error: "No OpenPond API key or session token is configured."
441
+ };
442
+ }
443
+ try {
444
+ const result = await listOpChatModels({
445
+ apiBaseUrl: context.chatApiBaseUrl,
446
+ token: context.token
447
+ });
448
+ const models = result.data.map((model) => normalizeHostedModel(model)).filter((value) => Boolean(value));
449
+ return {
450
+ models,
451
+ error: null
452
+ };
453
+ } catch (error) {
454
+ return {
455
+ models: [],
456
+ error: errorMessage(error)
457
+ };
458
+ }
459
+ }
416
460
  async function loadOpenPondProviderCatalog() {
417
461
  const context = await loadOpenPondAccountContext();
418
462
  if (!context.token) {
@@ -459,9 +503,23 @@ async function* streamOpenPondHostedChatTurn(input) {
459
503
  requestId: input.requestId,
460
504
  reasoningEffort: input.reasoningEffort,
461
505
  maxTokens: input.maxTokens,
506
+ temperature: input.temperature,
507
+ topP: input.topP,
462
508
  signal: input.signal
463
509
  });
464
510
  }
511
+ async function listOpChatModels(options) {
512
+ const requestUrl = opChatEndpointUrl(options.apiBaseUrl, "models");
513
+ const response = await fetch(requestUrl, {
514
+ method: "GET",
515
+ headers: opChatHeaders(requestUrl, options.token, "application/json"),
516
+ signal: options.signal
517
+ });
518
+ if (!response.ok) {
519
+ throw new Error(`OpenPond OpChat model list failed: ${response.status} ${await readOpChatError(response)}`);
520
+ }
521
+ return await response.json();
522
+ }
465
523
  async function listOpChatProviderCatalog(options) {
466
524
  const requestUrl = opChatEndpointUrl(options.apiBaseUrl, "provider-catalog");
467
525
  const response = await fetch(requestUrl, {
@@ -478,28 +536,18 @@ async function* streamOpChatChatCompletion(options) {
478
536
  const requestUrl = opChatEndpointUrl(options.apiBaseUrl, "chat/completions");
479
537
  const response = await fetch(requestUrl, {
480
538
  method: "POST",
481
- headers: opChatHeaders(requestUrl, options.token, "application/json", options.requestId),
482
- // Hosted turns are published only after the provider finishes. Requesting
483
- // the complete response also preserves whitespace that some upstream
484
- // token streams omit at chunk boundaries.
485
- body: JSON.stringify(buildOpChatBody(options, false)),
539
+ headers: opChatHeaders(requestUrl, options.token, "text/event-stream", options.requestId),
540
+ body: JSON.stringify(buildOpChatBody(options, true)),
486
541
  signal: options.signal
487
542
  });
488
543
  if (!response.ok) {
489
544
  throw new Error(`OpenPond OpChat request failed: ${response.status} ${await readOpChatError(response)}`);
490
545
  }
491
- const raw = await response.json();
492
- if (raw && typeof raw === "object" && "error" in raw) {
493
- throw new Error(`OpenPond OpChat request failed: ${errorMessageFromPayload(raw)}`);
546
+ if (!response.body) {
547
+ throw new Error("OpenPond OpChat request failed: streaming response body is missing.");
494
548
  }
495
- const record = raw && typeof raw === "object" ? raw : {};
496
- const choices = Array.isArray(record.choices) ? record.choices : [];
497
- const choice = choices[0] && typeof choices[0] === "object" ? choices[0] : {};
498
- const message = choice.message && typeof choice.message === "object" ? choice.message : {};
499
- const reasoningText = streamTextValue(message.reasoning_content);
500
- const content = streamTextValue(message.content);
501
- const toolCalls = parseToolCalls(message.tool_calls);
502
- const usage = parseUsage(raw);
549
+ const completion = await readBufferedOpChatStream(response.body);
550
+ const { content, finishReason, raw, reasoningText, toolCalls, usage } = completion;
503
551
  if (reasoningText)
504
552
  yield { type: "reasoning_delta", text: reasoningText, raw };
505
553
  if (content)
@@ -521,10 +569,124 @@ async function* streamOpChatChatCompletion(options) {
521
569
  yield { type: "usage", usage, raw };
522
570
  yield {
523
571
  type: "finish",
524
- finishReason: stringValue(choice.finish_reason),
572
+ finishReason,
525
573
  raw
526
574
  };
527
575
  }
576
+ async function readBufferedOpChatStream(body) {
577
+ const reader = body.getReader();
578
+ const decoder = new TextDecoder();
579
+ const toolCalls = /* @__PURE__ */ new Map();
580
+ let buffer = "";
581
+ let content = "";
582
+ let dataLines = [];
583
+ let finishReason = null;
584
+ let lastPayload = {};
585
+ let reasoningText = "";
586
+ let sawDone = false;
587
+ let usage = null;
588
+ const consumeEvent = () => {
589
+ if (dataLines.length === 0)
590
+ return;
591
+ const data = dataLines.join("\n");
592
+ dataLines = [];
593
+ if (data === "[DONE]") {
594
+ sawDone = true;
595
+ return;
596
+ }
597
+ let payload;
598
+ try {
599
+ payload = JSON.parse(data);
600
+ } catch {
601
+ throw new Error("OpenPond OpChat request failed: malformed streaming event.");
602
+ }
603
+ if (payload && typeof payload === "object" && "error" in payload) {
604
+ throw new Error(`OpenPond OpChat request failed: ${errorMessageFromPayload(payload)}`);
605
+ }
606
+ lastPayload = payload;
607
+ const record = payload && typeof payload === "object" ? payload : {};
608
+ const choices = Array.isArray(record.choices) ? record.choices : [];
609
+ const choice = choices[0] && typeof choices[0] === "object" ? choices[0] : {};
610
+ const delta = choice.delta && typeof choice.delta === "object" ? choice.delta : {};
611
+ content += streamTextValue(delta.content) ?? "";
612
+ reasoningText += streamTextValue(delta.reasoning_content) ?? "";
613
+ mergeOpChatToolCallDeltas(toolCalls, delta.tool_calls);
614
+ finishReason = stringValue(choice.finish_reason) ?? finishReason;
615
+ usage = parseUsage(payload) ?? usage;
616
+ };
617
+ const consumeLine = (line) => {
618
+ const normalized = line.endsWith("\r") ? line.slice(0, -1) : line;
619
+ if (!normalized) {
620
+ consumeEvent();
621
+ return;
622
+ }
623
+ if (normalized.startsWith(":"))
624
+ return;
625
+ if (normalized.startsWith("data:")) {
626
+ dataLines.push(normalized.slice("data:".length).trimStart());
627
+ }
628
+ };
629
+ try {
630
+ while (true) {
631
+ const result = await reader.read();
632
+ if (result.done)
633
+ break;
634
+ buffer += decoder.decode(result.value, { stream: true });
635
+ const lines = buffer.split("\n");
636
+ buffer = lines.pop() ?? "";
637
+ for (const line of lines)
638
+ consumeLine(line);
639
+ }
640
+ buffer += decoder.decode();
641
+ if (buffer)
642
+ consumeLine(buffer);
643
+ consumeEvent();
644
+ } finally {
645
+ reader.releaseLock();
646
+ }
647
+ if (!sawDone) {
648
+ throw new Error("OpenPond OpChat request failed: stream ended before [DONE].");
649
+ }
650
+ return {
651
+ content: content || null,
652
+ finishReason,
653
+ raw: lastPayload,
654
+ reasoningText: reasoningText || null,
655
+ toolCalls: completedOpChatToolCalls(toolCalls),
656
+ usage
657
+ };
658
+ }
659
+ function mergeOpChatToolCallDeltas(calls, value) {
660
+ if (!Array.isArray(value))
661
+ return;
662
+ value.forEach((item, position) => {
663
+ if (!item || typeof item !== "object")
664
+ return;
665
+ const record = item;
666
+ const index = typeof record.index === "number" && Number.isInteger(record.index) ? record.index : position;
667
+ const current = calls.get(index) ?? { arguments: "" };
668
+ if (typeof record.id === "string")
669
+ current.id = record.id;
670
+ const fn = record.function && typeof record.function === "object" ? record.function : {};
671
+ if (typeof fn.name === "string") {
672
+ current.name = `${current.name ?? ""}${fn.name}`;
673
+ }
674
+ if (typeof fn.arguments === "string") {
675
+ current.arguments += fn.arguments;
676
+ }
677
+ calls.set(index, current);
678
+ });
679
+ }
680
+ function completedOpChatToolCalls(calls) {
681
+ return [...calls.entries()].sort(([left], [right]) => left - right).flatMap(([, call]) => call.id && call.name ? [{
682
+ id: call.id,
683
+ type: "function",
684
+ function: {
685
+ name: call.name,
686
+ arguments: call.arguments
687
+ }
688
+ }] : []);
689
+ }
528
690
  function buildOpChatBody(options, stream) {
529
691
  const body = {
530
692
  model: options.model,
@@ -540,6 +702,12 @@ function buildOpChatBody(options, stream) {
540
702
  if (typeof options.maxTokens === "number") {
541
703
  body.max_tokens = options.maxTokens;
542
704
  }
705
+ if (typeof options.temperature === "number") {
706
+ body.temperature = options.temperature;
707
+ }
708
+ if (typeof options.topP === "number") {
709
+ body.top_p = options.topP;
710
+ }
543
711
  Object.assign(body, opChatReasoningFields(options.reasoningEffort));
544
712
  return body;
545
713
  }
@@ -607,9 +775,6 @@ function errorMessageFromPayload(payload) {
607
775
  }
608
776
  return [stringValue(record.error), stringValue(record.message)].filter(Boolean).join(": ") || JSON.stringify(payload);
609
777
  }
610
- function parseToolCalls(value) {
611
- return Array.isArray(value) ? value.filter((item) => Boolean(item) && typeof item === "object") : [];
612
- }
613
778
  function parseUsage(raw) {
614
779
  if (!raw || typeof raw !== "object")
615
780
  return null;
@@ -1075,6 +1240,7 @@ export {
1075
1240
  loadOpenPondAccountState,
1076
1241
  loadOpenPondApps,
1077
1242
  createOpenPondRepoApp,
1243
+ loadOpenPondHostedModels,
1078
1244
  loadOpenPondProviderCatalog,
1079
1245
  streamOpenPondHostedChatTurn,
1080
1246
  saveOpenPondAccount,
@@ -3,7 +3,7 @@ import { createRequire as __openpondCreateRequire } from "node:module"; var requ
3
3
  // ../server/src/constants.ts
4
4
  var DEFAULT_HOST = "127.0.0.1";
5
5
  var DEFAULT_PORT = 17874;
6
- var VERSION = "0.0.49";
6
+ var VERSION = "0.0.51";
7
7
  var HOSTED_CHAT_SYSTEM_PROMPT = "You are OpenPond Chat. Respond in the user's language. If the user's latest message is language-neutral, ambiguous, or only a short test, respond in English. Be concise and directly answer the latest request. Do not use emojis. Use Markdown when it improves scanability. If you emit reasoning or thinking content, keep it sparse and user-readable: at most one short sentence for major progress, decisions, or blockers. Omit reasoning for routine searches, reads, tool calls, and obvious next steps. Do not restate the user request, narrate every action, or include code blocks, code excerpts, diffs, raw tool payloads, or markdown examples in reasoning. Put necessary code or exact snippets only in the final assistant answer. When the user asks to show or preview an image that is available as a workspace path or signed image URL, use Markdown image syntax like ![description](path-or-url) instead of a bare path or raw HTML. For workspace-backed answers, use a Codex-style shape: brief outcome first, then Changed Files if files changed, then Verification if checks ran. End with a concise final answer that summarizes the result and verification when relevant. Do not mention raw tool JSON, internal repo paths, or origin/remote URLs unless the user explicitly asks for them or they are necessary to explain a git/deploy failure.";
8
8
  var APP_PREFERENCES_CACHE_TYPE = "app_preferences";
9
9
  var APP_PREFERENCES_CACHE_KEY = "global";
@@ -5,12 +5,12 @@ import {
5
5
  import {
6
6
  getBundledRuntimeVersion,
7
7
  openUrlWithSystemBrowser
8
- } from "./chunk-NRLI3S72.js";
8
+ } from "./chunk-IGSEFSMA.js";
9
9
  import {
10
10
  DEFAULT_HOST,
11
11
  DEFAULT_PORT,
12
12
  parseListen
13
- } from "./chunk-UJV3UYLP.js";
13
+ } from "./chunk-J4LLKY6E.js";
14
14
 
15
15
  // ../server/src/cli.ts
16
16
  import { existsSync } from "node:fs";
@@ -4,7 +4,7 @@ import {
4
4
  getAnyCliOptionKind,
5
5
  getCliCommandDefinition,
6
6
  getCliOptionKind
7
- } from "./chunk-QD4FR3O4.js";
7
+ } from "./chunk-R4PRXXTC.js";
8
8
  import {
9
9
  parseJsonOption
10
10
  } from "./chunk-MUMPWI4O.js";
@@ -397,7 +397,7 @@ var CLI_COMMAND_REGISTRY = [
397
397
  name: "help",
398
398
  usage: "openpond help",
399
399
  optionSchema: {},
400
- handler: async () => (await import("./help-OZNCHHO3.js")).printHelp()
400
+ handler: async () => (await import("./help-WJBMX37U.js")).printHelp()
401
401
  },
402
402
  {
403
403
  name: "version",
@@ -409,19 +409,19 @@ var CLI_COMMAND_REGISTRY = [
409
409
  name: "check-update",
410
410
  usage: "openpond check-update",
411
411
  optionSchema: {},
412
- handler: async () => (await import("./core-commands-UW4XTGXK.js")).runCheckUpdate()
412
+ handler: async () => (await import("./core-commands-5BRR7TU4.js")).runCheckUpdate()
413
413
  },
414
414
  {
415
415
  name: "login",
416
416
  usage: "openpond login [--base-url <url>]",
417
417
  optionSchema: CLI_GLOBAL_OPTION_SCHEMA,
418
- handler: async ({ options }) => (await import("./core-commands-UW4XTGXK.js")).runLogin(options)
418
+ handler: async ({ options }) => (await import("./core-commands-5BRR7TU4.js")).runLogin(options)
419
419
  },
420
420
  {
421
421
  name: "init",
422
422
  usage: "openpond init [--path <dir>]",
423
423
  optionSchema: { path: "string" },
424
- handler: async ({ options }) => (await import("./profile-JWUYJF23.js")).runOpenPondInitCommand(options)
424
+ handler: async ({ options }) => (await import("./profile-B62ZWPTQ.js")).runOpenPondInitCommand(options)
425
425
  },
426
426
  {
427
427
  name: "profile",
@@ -449,13 +449,13 @@ var CLI_COMMAND_REGISTRY = [
449
449
  publishHostedSource: "boolean",
450
450
  teamId: "string"
451
451
  },
452
- handler: async ({ options, rest }) => (await import("./profile-JWUYJF23.js")).runOpenPondProfileCommand(options, rest)
452
+ handler: async ({ options, rest }) => (await import("./profile-B62ZWPTQ.js")).runOpenPondProfileCommand(options, rest)
453
453
  },
454
454
  {
455
455
  name: "agents",
456
456
  usage: "openpond agents [--json]",
457
457
  optionSchema: { json: "boolean" },
458
- handler: async ({ options, rest }) => (await import("./profile-JWUYJF23.js")).runOpenPondAgentsCommand(options, rest)
458
+ handler: async ({ options, rest }) => (await import("./profile-B62ZWPTQ.js")).runOpenPondAgentsCommand(options, rest)
459
459
  },
460
460
  ...profileSdkAliasDefinitions(),
461
461
  {
@@ -468,25 +468,25 @@ var CLI_COMMAND_REGISTRY = [
468
468
  "openpond extension remove <owner/repo> [--json]"
469
469
  ],
470
470
  optionSchema: { all: "boolean", json: "boolean", ref: "string" },
471
- handler: async ({ options, rest }) => (await import("./extension-VP7LMA32.js")).runOpenPondExtensionCommand(options, rest)
471
+ handler: async ({ options, rest }) => (await import("./extension-V3NZ7MU7.js")).runOpenPondExtensionCommand(options, rest)
472
472
  },
473
473
  {
474
474
  name: "profiles",
475
475
  usage: "openpond profiles [args]",
476
476
  optionSchema: { json: "boolean" },
477
- handler: async ({ options, rest }) => (await import("./core-commands-UW4XTGXK.js")).runProfiles(options, rest)
477
+ handler: async ({ options, rest }) => (await import("./core-commands-5BRR7TU4.js")).runProfiles(options, rest)
478
478
  },
479
479
  {
480
480
  name: "account",
481
481
  usage: "openpond account",
482
482
  optionSchema: { json: "boolean" },
483
- handler: async () => (await import("./core-commands-UW4XTGXK.js")).runAccount()
483
+ handler: async () => (await import("./core-commands-5BRR7TU4.js")).runAccount()
484
484
  },
485
485
  {
486
486
  name: "health",
487
487
  usage: "openpond health",
488
488
  optionSchema: { json: "boolean" },
489
- handler: async ({ options }) => (await import("./core-commands-UW4XTGXK.js")).runHealth(options)
489
+ handler: async ({ options }) => (await import("./core-commands-5BRR7TU4.js")).runHealth(options)
490
490
  },
491
491
  {
492
492
  name: "app-server",
@@ -494,7 +494,7 @@ var CLI_COMMAND_REGISTRY = [
494
494
  optionSchema: {
495
495
  storeDir: "string"
496
496
  },
497
- handler: async ({ options, rest }) => (await import("./app-layer-E2JWCA6D.js")).runOpenPondServerCommand("app-server", options, rest)
497
+ handler: async ({ options, rest }) => (await import("./app-layer-DCUTQ4TM.js")).runOpenPondServerCommand("app-server", options, rest)
498
498
  },
499
499
  {
500
500
  name: "serve",
@@ -505,7 +505,7 @@ var CLI_COMMAND_REGISTRY = [
505
505
  listen: "string",
506
506
  port: "integer"
507
507
  },
508
- handler: async ({ options, rest }) => (await import("./app-layer-E2JWCA6D.js")).runOpenPondServerCommand("serve", options, rest)
508
+ handler: async ({ options, rest }) => (await import("./app-layer-DCUTQ4TM.js")).runOpenPondServerCommand("serve", options, rest)
509
509
  },
510
510
  {
511
511
  name: "ui",
@@ -518,7 +518,7 @@ var CLI_COMMAND_REGISTRY = [
518
518
  port: "integer",
519
519
  webRoot: "string"
520
520
  },
521
- handler: async ({ options, rest }) => (await import("./app-layer-E2JWCA6D.js")).runOpenPondServerCommand("web", options, rest)
521
+ handler: async ({ options, rest }) => (await import("./app-layer-DCUTQ4TM.js")).runOpenPondServerCommand("web", options, rest)
522
522
  },
523
523
  {
524
524
  name: "tui",
@@ -532,13 +532,13 @@ var CLI_COMMAND_REGISTRY = [
532
532
  provider: "string",
533
533
  server: "string"
534
534
  },
535
- handler: async ({ options, rest }) => (await import("./app-layer-E2JWCA6D.js")).runOpenPondTerminalCommand(options, rest)
535
+ handler: async ({ options, rest }) => (await import("./app-layer-DCUTQ4TM.js")).runOpenPondTerminalCommand(options, rest)
536
536
  },
537
537
  {
538
538
  name: "chat",
539
539
  usage: "openpond chat (--message-file <path>|--message <text>|--stdin) --non-interactive [--provider <id>] [--model <id>] [--agent <id>] [--project <id>] [--resume <session-id>] [--yes] [--approval-policy <policy>] [--json] [--timeout-sec <n>] [--max-output-bytes <n>] [--sandbox <mode>]",
540
540
  optionSchema: CHAT_OPTION_SCHEMA,
541
- handler: async ({ options, rest }) => (await import("./app-layer-E2JWCA6D.js")).runOpenPondTerminalCommand(options, rest)
541
+ handler: async ({ options, rest }) => (await import("./app-layer-DCUTQ4TM.js")).runOpenPondTerminalCommand(options, rest)
542
542
  },
543
543
  {
544
544
  name: "tool",
@@ -574,7 +574,7 @@ var CLI_COMMAND_REGISTRY = [
574
574
  name: "sandbox-template",
575
575
  usage: "openpond sandbox-template <command> [args]",
576
576
  optionSchema: SANDBOX_TEMPLATE_OPTION_SCHEMA,
577
- handler: async ({ options, rest }) => (await import("./sandbox-template-6UDA3AEY.js")).runSandboxTemplateCommand(options, rest)
577
+ handler: async ({ options, rest }) => (await import("./sandbox-template-GEWTAWAR.js")).runSandboxTemplateCommand(options, rest)
578
578
  },
579
579
  {
580
580
  name: "repo",
@@ -619,13 +619,13 @@ var CLI_COMMAND_REGISTRY = [
619
619
  toolset: "string",
620
620
  url: "string"
621
621
  },
622
- handler: async ({ options, rest }) => (await import("./organizations-GLKSXK3Q.js")).runOrganizationsCommand(options, rest)
622
+ handler: async ({ options, rest }) => (await import("./organizations-RHOF5H4Z.js")).runOrganizationsCommand(options, rest)
623
623
  },
624
624
  {
625
625
  name: "project",
626
626
  usage: "openpond project <list|create|upsert|get|update|sync|source-upload|archive> [args]",
627
627
  optionSchema: PROJECT_OPTION_SCHEMA,
628
- handler: async ({ options, rest }) => (await import("./project-agent-L4EB7QFO.js")).runProjectCommand(options, rest)
628
+ handler: async ({ options, rest }) => (await import("./project-agent-QA25HHDV.js")).runProjectCommand(options, rest)
629
629
  },
630
630
  {
631
631
  name: "agent",
@@ -637,7 +637,7 @@ var CLI_COMMAND_REGISTRY = [
637
637
  "openpond agent source publish <agentId> --team-id <id> [--expected-manifest-hash <hash>]"
638
638
  ],
639
639
  optionSchema: AGENT_OPTION_SCHEMA,
640
- handler: async ({ options, rest }) => (await import("./project-agent-L4EB7QFO.js")).runAgentCommand(options, rest)
640
+ handler: async ({ options, rest }) => (await import("./project-agent-QA25HHDV.js")).runAgentCommand(options, rest)
641
641
  },
642
642
  {
643
643
  name: "desktop-test",
@@ -658,24 +658,26 @@ var CLI_COMMAND_REGISTRY = [
658
658
  token: "string",
659
659
  tokenFile: "string"
660
660
  },
661
- handler: async ({ options, rest }) => (await import("./desktop-test-JTBPE7CH.js")).runDesktopTestCommand(options, rest)
661
+ handler: async ({ options, rest }) => (await import("./desktop-test-EQ2BGZOM.js")).runDesktopTestCommand(options, rest)
662
662
  },
663
663
  {
664
664
  name: "sandbox",
665
665
  usage: "openpond sandbox <command> [args]",
666
666
  optionSchema: SANDBOX_OPTION_SCHEMA,
667
- handler: async ({ options, rest }) => (await import("./sandbox-command-26255MSV.js")).runSandboxCommand(options, rest)
667
+ handler: async ({ options, rest }) => (await import("./sandbox-command-JFEVPU4X.js")).runSandboxCommand(options, rest)
668
668
  },
669
669
  {
670
670
  name: "training",
671
- usage: "openpond training <start|status|watch|logs|cancel|artifacts> <model-run-id|run-id>",
671
+ usage: "openpond training <start|status|watch|logs|cancel|resume|artifacts|benchmark> <model-run-id|run-id|model-id>",
672
672
  usages: [
673
673
  "openpond training start <model-run-id> [--manifest <path>] [--yes] [--max-spend <usd>] [--retention-days <days>] [--detach] [--json]",
674
674
  "openpond training status <run-id> [--json]",
675
675
  "openpond training watch <run-id> [--interval-ms <ms>] [--json]",
676
676
  "openpond training logs <run-id> [--json]",
677
677
  "openpond training cancel <run-id> [--json]",
678
- "openpond training artifacts <run-id> [--json]"
678
+ "openpond training resume <model-run-id> [--json]",
679
+ "openpond training artifacts <run-id> [--json]",
680
+ "openpond training benchmark <model-id> [--provider <id>] [--model <id>] [--reasoning-effort <level>] [--max-spend <usd>] [--json]"
679
681
  ],
680
682
  optionSchema: {
681
683
  apiBaseUrl: "string",
@@ -684,10 +686,13 @@ var CLI_COMMAND_REGISTRY = [
684
686
  json: "boolean",
685
687
  manifest: "string",
686
688
  maxSpend: "number",
689
+ model: "string",
690
+ provider: "string",
691
+ reasoningEffort: "string",
687
692
  retentionDays: "integer",
688
693
  yes: "boolean"
689
694
  },
690
- handler: async ({ options, rest }) => (await import("./training-BR5A7SPU.js")).runTrainingCommand(options, rest)
695
+ handler: async ({ options, rest }) => (await import("./training-5CPTZRVC.js")).runTrainingCommand(options, rest)
691
696
  },
692
697
  {
693
698
  name: "opchat",
@@ -707,7 +712,7 @@ var CLI_COMMAND_REGISTRY = [
707
712
  skipTool: "boolean",
708
713
  stream: "boolean"
709
714
  },
710
- handler: async ({ options, rest }) => (await import("./opchat-RY3QU5UJ.js")).runOpChatCommand(options, rest)
715
+ handler: async ({ options, rest }) => (await import("./opchat-W7DSKNNB.js")).runOpChatCommand(options, rest)
711
716
  },
712
717
  {
713
718
  name: "teams-bot",
@@ -716,7 +721,7 @@ var CLI_COMMAND_REGISTRY = [
716
721
  json: "boolean",
717
722
  teamId: "string"
718
723
  },
719
- handler: async ({ options, rest }) => (await import("./teams-bot-PO3GOLWU.js")).runTeamsBotCommand(options, rest)
724
+ handler: async ({ options, rest }) => (await import("./teams-bot-ODSMRNE4.js")).runTeamsBotCommand(options, rest)
720
725
  },
721
726
  {
722
727
  name: "apps",
@@ -737,7 +742,7 @@ var CLI_COMMAND_REGISTRY = [
737
742
  name: "opentool",
738
743
  usage: "openpond opentool <init|validate|build> [args]",
739
744
  optionSchema: {},
740
- handler: async ({ rest }) => (await import("./core-commands-UW4XTGXK.js")).runOpentool(rest)
745
+ handler: async ({ rest }) => (await import("./core-commands-5BRR7TU4.js")).runOpentool(rest)
741
746
  }
742
747
  ];
743
748
  var CLI_COMMAND_BY_NAME = /* @__PURE__ */ new Map();
@@ -809,11 +814,11 @@ function profileSdkAliasDefinitions() {
809
814
  name,
810
815
  usage: `openpond ${name} [args]`,
811
816
  optionSchema: PROFILE_SDK_OPTION_SCHEMA,
812
- handler: async ({ options, rest }) => (await import("./profile-JWUYJF23.js")).runOpenPondProfileSdkAlias(name, options, rest)
817
+ handler: async ({ options, rest }) => (await import("./profile-B62ZWPTQ.js")).runOpenPondProfileSdkAlias(name, options, rest)
813
818
  }));
814
819
  }
815
820
  async function runToolCommand({ options, rest }) {
816
- const { runToolList, runToolRun } = await import("./core-commands-UW4XTGXK.js");
821
+ const { runToolList, runToolRun } = await import("./core-commands-5BRR7TU4.js");
817
822
  const subcommand = rest[0];
818
823
  if (subcommand === "list") {
819
824
  const target = rest[1];
@@ -837,8 +842,8 @@ async function runToolCommand({ options, rest }) {
837
842
  throw new Error("usage: tool <list|run> <handle>/<repo> [args]");
838
843
  }
839
844
  async function runBacktestCommand({ options, rest }) {
840
- const { runBacktestRun } = await import("./core-commands-UW4XTGXK.js");
841
- const { runBacktestEvents, runBacktestGet } = await import("./apps-VQDIVGST.js");
845
+ const { runBacktestRun } = await import("./core-commands-5BRR7TU4.js");
846
+ const { runBacktestEvents, runBacktestGet } = await import("./apps-JDRCDAPE.js");
842
847
  const subcommand = rest[0] || "run";
843
848
  if (subcommand === "run") {
844
849
  const target = rest[1];
@@ -872,7 +877,7 @@ async function runBacktestCommand({ options, rest }) {
872
877
  throw new Error("usage: backtest <run|events|get> <handle>/<repo> [args]");
873
878
  }
874
879
  async function runDeployCommand({ options, rest }) {
875
- const { runDeployWatch } = await import("./core-commands-UW4XTGXK.js");
880
+ const { runDeployWatch } = await import("./core-commands-5BRR7TU4.js");
876
881
  const subcommand = rest[0] || "watch";
877
882
  if (subcommand !== "watch") {
878
883
  throw new Error(
@@ -888,7 +893,7 @@ async function runDeployCommand({ options, rest }) {
888
893
  await runDeployWatch(options, target);
889
894
  }
890
895
  async function runTemplateCommand({ options, rest }) {
891
- const { runTemplateBranches, runTemplateStatus, runTemplateUpdate } = await import("./core-commands-UW4XTGXK.js");
896
+ const { runTemplateBranches, runTemplateStatus, runTemplateUpdate } = await import("./core-commands-5BRR7TU4.js");
892
897
  const subcommand = rest[0] || "status";
893
898
  const target = rest[1];
894
899
  if (!target) {
@@ -913,7 +918,7 @@ async function runTemplateCommand({ options, rest }) {
913
918
  );
914
919
  }
915
920
  async function runRepoCommand({ options, rest }) {
916
- const { runRepoCreate, runRepoPush } = await import("./core-commands-UW4XTGXK.js");
921
+ const { runRepoCreate, runRepoPush } = await import("./core-commands-5BRR7TU4.js");
917
922
  const subcommand = rest[0] || "create";
918
923
  if (subcommand === "create") {
919
924
  await runRepoCreate(options, rest.slice(1));
@@ -940,7 +945,7 @@ async function runAppsCommand({ options, rest }) {
940
945
  runAppsSummary,
941
946
  runAppsTools,
942
947
  runAppsToolsExecute
943
- } = await import("./apps-VQDIVGST.js");
948
+ } = await import("./apps-JDRCDAPE.js");
944
949
  const subcommand = rest[0];
945
950
  if (subcommand === "list") {
946
951
  await runAppsList(options);