openpond 0.0.63 → 0.0.65

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 (98) hide show
  1. package/dist/chunks/{app-layer-TUAFALOE.js → app-layer-NCSTDSNQ.js} +2 -2
  2. package/dist/chunks/{app-server-runtime-O26LVUYH.js → app-server-runtime-6PDQHOBE.js} +6 -6
  3. package/dist/chunks/{apps-KSZRA7Y2.js → apps-HEG7FEEV.js} +2 -2
  4. package/dist/chunks/{chunk-JTFDOA2P.js → chunk-6FZNXLVN.js} +17 -5
  5. package/dist/chunks/{chunk-7UVEB2AZ.js → chunk-B63GTC7F.js} +2 -2
  6. package/dist/chunks/{chunk-IXA5PMXC.js → chunk-BRLUAT6S.js} +1 -1
  7. package/dist/chunks/{chunk-6FKBOGA4.js → chunk-EWP6VGHP.js} +1 -1
  8. package/dist/chunks/{chunk-V2CTXKS2.js → chunk-HJJYGJ36.js} +205 -141
  9. package/dist/chunks/{chunk-KGU437HZ.js → chunk-JMHOO2IG.js} +2 -2
  10. package/dist/chunks/{chunk-66KQLYSH.js → chunk-LNYGV6AM.js} +1 -1
  11. package/dist/chunks/{chunk-7IFPXSSJ.js → chunk-TW4YWBQR.js} +1 -1
  12. package/dist/chunks/{chunk-LEL5AQJU.js → chunk-U345JN44.js} +1 -1
  13. package/dist/chunks/{chunk-YDH34BGG.js → chunk-WT3THPTX.js} +32 -32
  14. package/dist/chunks/{cli-LPFU4ULD.js → cli-CQOUYUQ4.js} +5 -5
  15. package/dist/chunks/{core-commands-OEOBYFIW.js → core-commands-Y4ZMQXO4.js} +3 -3
  16. package/dist/chunks/{desktop-test-BRLZF3O7.js → desktop-test-YRFKONLO.js} +2 -2
  17. package/dist/chunks/{extension-5BUCIDKG.js → extension-4MFKIC6Q.js} +2 -2
  18. package/dist/chunks/{help-MT6VPW4X.js → help-STXVR4NO.js} +1 -1
  19. package/dist/chunks/{opchat-O4DVKNFW.js → opchat-CCVKI5GH.js} +2 -2
  20. package/dist/chunks/{organizations-ACNOJ57Q.js → organizations-AS76SGLP.js} +4 -4
  21. package/dist/chunks/{profile-7LLWXAJE.js → profile-QNWDNZY3.js} +2 -2
  22. package/dist/chunks/{project-agent-RVYQYTU2.js → project-agent-GPZL7KAL.js} +2 -2
  23. package/dist/chunks/{sandbox-command-QST23BX5.js → sandbox-command-LC63MMAA.js} +2 -2
  24. package/dist/chunks/{sandbox-template-N7UG3P6V.js → sandbox-template-FPQLZ4IP.js} +3 -3
  25. package/dist/chunks/{src-CPM5Q7T5.js → src-6NIBZPH2.js} +3 -3
  26. package/dist/chunks/{src-M37V6NVU.js → src-ESTRZ2YU.js} +12 -63
  27. package/dist/chunks/{teams-bot-ITTI47XS.js → teams-bot-YTX7IC2J.js} +2 -2
  28. package/dist/chunks/{workspaces-CYBR37US.js → workspaces-ODK2CTFF.js} +2 -2
  29. package/dist/cli.js +13 -13
  30. package/dist/web/assets/{AppDialog-wIb8mGQ0.js → AppDialog-DacC7BcY.js} +1 -1
  31. package/dist/web/assets/{AppsView-D097dPIV.js → AppsView-mkeAkrvr.js} +1 -1
  32. package/dist/web/assets/{BrowserSidebar-DrD-o_yB.js → BrowserSidebar-1aEC6gsF.js} +1 -1
  33. package/dist/web/assets/{CommandMenu-L5LelA2h.js → CommandMenu-BN6J3ecV.js} +1 -1
  34. package/dist/web/assets/{CommunityView-DUJ8NryS.js → CommunityView-B2v9Q4cw.js} +1 -1
  35. package/dist/web/assets/{ComposerCreateImproveStrip-BP-7DmQG.js → ComposerCreateImproveStrip-BH8Ath1h.js} +1 -1
  36. package/dist/web/assets/{GetStartedView-B7gB6Hii.js → GetStartedView-B-R-KSva.js} +1 -1
  37. package/dist/web/assets/{LabModelVersionDetailPage-CNDz2a6I.js → LabModelVersionDetailPage-Bhfa7T00.js} +1 -1
  38. package/dist/web/assets/{LabSkillSidebar-BImOQcjk.js → LabSkillSidebar-CbYdG0RN.js} +1 -1
  39. package/dist/web/assets/{LabsRoute-BauSK1is.js → LabsRoute-DFV5vV6Z.js} +3 -3
  40. package/dist/web/assets/{MainChatThread-BZvAqQO6.js → MainChatThread-COiXI7ri.js} +2 -2
  41. package/dist/web/assets/MainPane-CQCLhV5C.js +6 -0
  42. package/dist/web/assets/MarkdownText-R3MC5S30.js +9 -0
  43. package/dist/web/assets/{Messages-DijmQL-z.js → Messages-DpZ8mIz8.js} +1 -1
  44. package/dist/web/assets/{NativeSkillSidebar-aCkrdGa0.js → NativeSkillSidebar-BfcMqLHA.js} +1 -1
  45. package/dist/web/assets/{NewProjectDialog-D98WIQzr.js → NewProjectDialog-DqTX1Eeo.js} +1 -1
  46. package/dist/web/assets/{OutputsPage-BA0c6cfy.js → OutputsPage-DfZYswx2.js} +1 -1
  47. package/dist/web/assets/{RightChatPanelStack-DKDEmrEH.js → RightChatPanelStack-DH8QjiDY.js} +1 -1
  48. package/dist/web/assets/{ScheduledWorkPage-DeHi99mv.js → ScheduledWorkPage-DkaVUnwj.js} +1 -1
  49. package/dist/web/assets/SettingsView-BRPrJuP5.css +1 -0
  50. package/dist/web/assets/SettingsView-StVFsSJ6.js +6 -0
  51. package/dist/web/assets/{TeamChatView-D2mCoLZ3.js → TeamChatView-CqZOnQh2.js} +1 -1
  52. package/dist/web/assets/{TerminalOverlay-BHMsVp4L.js → TerminalOverlay-CnFv6FZT.js} +1 -1
  53. package/dist/web/assets/{TrainingCreationPanel-CPnMWgkt.js → TrainingCreationPanel-CWzyzmyT.js} +1 -1
  54. package/dist/web/assets/{TrainingDraftPanel-0scEtzSW.js → TrainingDraftPanel-BVHx0HZ0.js} +1 -1
  55. package/dist/web/assets/{UsageSettingsSection-COoCLLg6.js → UsageSettingsSection-Bdvm66WK.js} +1 -1
  56. package/dist/web/assets/{WorkspaceDiffPanel-BFTwZ_dB.js → WorkspaceDiffPanel-DUCjD1GA.js} +5 -5
  57. package/dist/web/assets/{WorkspaceEnvironmentMenu-DFlkdd9T.js → WorkspaceEnvironmentMenu-DHGrt_ie.js} +1 -1
  58. package/dist/web/assets/{WorkspaceGitDialogs-Dt3LO27Z.js → WorkspaceGitDialogs-hI57yjPL.js} +1 -1
  59. package/dist/web/assets/{WorkspaceMonacoEditor-3g05teoR.js → WorkspaceMonacoEditor-DPv-1uO6.js} +3 -3
  60. package/dist/web/assets/{arrow-up-right-DYGSWA2J.js → arrow-up-right-BDcNd1rt.js} +1 -1
  61. package/dist/web/assets/{chevron-up-4qfvI9iW.js → chevron-up-XTMMnfnf.js} +1 -1
  62. package/dist/web/assets/{cloud-upload-COReKxOy.js → cloud-upload-D6bS8rS2.js} +1 -1
  63. package/dist/web/assets/{cssMode-BbH67BYF.js → cssMode-CvN9o8bP.js} +1 -1
  64. package/dist/web/assets/{folder-open-9OjGqNgP.js → folder-open-8C5l7A93.js} +1 -1
  65. package/dist/web/assets/{folder-plus-DF5E6zr3.js → folder-plus-B9Wqb9yd.js} +1 -1
  66. package/dist/web/assets/{git-branch-eCwyZXMl.js → git-branch-C45ve7zh.js} +1 -1
  67. package/dist/web/assets/{git-commit-horizontal-cPm51DqY.js → git-commit-horizontal-CGoLIyKK.js} +1 -1
  68. package/dist/web/assets/{htmlMode-DD6Oge4x.js → htmlMode-DxLP6j5r.js} +1 -1
  69. package/dist/web/assets/index-BYgrO3wt.js +1 -0
  70. package/dist/web/assets/index-CHqMtVfF.css +1 -0
  71. package/dist/web/assets/{index-BO2W2U23.js → index-LrGasYyx.js} +29 -29
  72. package/dist/web/assets/{info-p1mFpqBI.js → info-DTObFlHw.js} +1 -1
  73. package/dist/web/assets/{jsonMode-C2Xd56A_.js → jsonMode-C3_fOSJu.js} +1 -1
  74. package/dist/web/assets/{lspLanguageFeatures-BjYEk4gJ.js → lspLanguageFeatures-0c-UKStE.js} +1 -1
  75. package/dist/web/assets/{monaco.contribution-quEPEMQZ.js → monaco.contribution-CF1DgPPC.js} +2 -2
  76. package/dist/web/assets/{monaco.contribution-C7WMqwmc.js → monaco.contribution-CFLEc9Ly.js} +2 -2
  77. package/dist/web/assets/{monaco.contribution-Bo-5m7yy.js → monaco.contribution-Cb7KlQ6G.js} +2 -2
  78. package/dist/web/assets/{monaco.contribution-DzWlEgU1.js → monaco.contribution-Dsug_FPj.js} +2 -2
  79. package/dist/web/assets/{play-Ctx-iMqd.js → play-Cbsyrwkw.js} +1 -1
  80. package/dist/web/assets/{python-Cm64qCpk.js → python-DVcVB2lF.js} +1 -1
  81. package/dist/web/assets/{refresh-cw-Bn28jIl0.js → refresh-cw-ChUK_QfF.js} +1 -1
  82. package/dist/web/assets/{save-BM5IQX65.js → save-Doep-KC7.js} +1 -1
  83. package/dist/web/assets/{square-DAGpFfSr.js → square-B5q2aneb.js} +1 -1
  84. package/dist/web/assets/{toggleHighContrast-DLW8Fnck.js → toggleHighContrast-CTZp7RE7.js} +1 -1
  85. package/dist/web/assets/{tsMode-BleUN_8S.js → tsMode-GfNadOOB.js} +1 -1
  86. package/dist/web/assets/{upload-vaAKFfxi.js → upload-DcewuCTa.js} +1 -1
  87. package/dist/web/assets/{useLocalAgentSchedules-Ccenbqf6.js → useLocalAgentSchedules-BwltnId8.js} +1 -1
  88. package/dist/web/assets/{wifi-off-DJA9KReb.js → wifi-off-cXPyKIzd.js} +1 -1
  89. package/dist/web/assets/{workers-CFG-afha.js → workers-CP6kCS63.js} +1 -1
  90. package/dist/web/assets/{yaml-Cs8iZKVC.js → yaml-w0GP6yKf.js} +1 -1
  91. package/dist/web/index.html +2 -2
  92. package/package.json +1 -1
  93. package/dist/web/assets/MainPane-CuhwxMxg.js +0 -6
  94. package/dist/web/assets/MarkdownText-gwAue4u5.js +0 -9
  95. package/dist/web/assets/SettingsView--fL3Ecuy.js +0 -6
  96. package/dist/web/assets/SettingsView-BS5m5vdt.css +0 -1
  97. package/dist/web/assets/index-BRLugX1S.js +0 -1
  98. package/dist/web/assets/index-Y7IoiSlQ.css +0 -1
@@ -11,7 +11,7 @@ import {
11
11
  truncatePatch,
12
12
  uniqueSortedPaths,
13
13
  workspaceImageContentType
14
- } from "./chunk-66KQLYSH.js";
14
+ } from "./chunk-LNYGV6AM.js";
15
15
  import {
16
16
  AGENT_PROTOCOL_VERSION,
17
17
  AGENT_RPC_METHODS,
@@ -35,13 +35,13 @@ import {
35
35
  event,
36
36
  now,
37
37
  textFromUnknown
38
- } from "./chunk-7IFPXSSJ.js";
38
+ } from "./chunk-TW4YWBQR.js";
39
39
  import {
40
40
  getBundledRuntimeVersion,
41
41
  loadOpenPondAccountContext,
42
42
  loadOpenPondHostedModels,
43
43
  streamOpenPondHostedChatTurn
44
- } from "./chunk-IXA5PMXC.js";
44
+ } from "./chunk-BRLUAT6S.js";
45
45
  import {
46
46
  AppPreferencesSchema,
47
47
  ApplyCreateImproveRunActionRequestSchema,
@@ -89,6 +89,7 @@ import {
89
89
  GradeResultSchema,
90
90
  GraderAuditReportSchema,
91
91
  HarnessSourceManifestSchema,
92
+ HostedSavedWorkResponseSchema,
92
93
  ModelArtifactLineageSchema,
93
94
  ModelBindingSchema,
94
95
  ModelProjectSchema,
@@ -136,6 +137,7 @@ import {
136
137
  TrainingSourceEstimateSchema,
137
138
  TrainingSourceRefSchema,
138
139
  TurnSchema,
140
+ UpdateHostedSavedWorkRequestSchema,
139
141
  UsageRequestAttributionSchema,
140
142
  WORK_FORMAT_CAPABILITIES,
141
143
  WORK_OUTPUT_CONTENT_TYPES,
@@ -162,7 +164,7 @@ import {
162
164
  runProfileSkillCommand,
163
165
  sidebarFileBookmarkId,
164
166
  workOutputMediaTypesCompatible
165
- } from "./chunk-KGU437HZ.js";
167
+ } from "./chunk-JMHOO2IG.js";
166
168
  import {
167
169
  PROJECT_ACTION_CONFIG_PATH,
168
170
  createLocalActionRunner,
@@ -271,7 +273,7 @@ import {
271
273
  uniqueEventRefs,
272
274
  validateConnectedAppProviderOperationRequest,
273
275
  verifyRequiredOutputs
274
- } from "./chunk-JTFDOA2P.js";
276
+ } from "./chunk-6FZNXLVN.js";
275
277
  import {
276
278
  external_exports
277
279
  } from "./chunk-WYDVQOBL.js";
@@ -5500,10 +5502,10 @@ var SqliteHarnessMemoryStore = class extends SqliteSidebarFileBookmarkStore {
5500
5502
 
5501
5503
  // ../server/src/store/store-harness-evaluation-review-settings.ts
5502
5504
  var DEFAULT_SETTINGS = {
5503
- enabled: true,
5504
- activityEnabled: true,
5505
+ enabled: false,
5506
+ activityEnabled: false,
5505
5507
  activityBatchSize: 10,
5506
- cadence: "daily",
5508
+ cadence: "manual",
5507
5509
  maxEstimatedCostUsd: 0.1,
5508
5510
  nextRunAt: null,
5509
5511
  lastRunAt: null,
@@ -5554,7 +5556,7 @@ var SqliteHarnessEvaluationReviewSettingsStore = class extends SqliteHarnessMemo
5554
5556
  FROM harness_evaluation_review_settings WHERE workspace_id = ?`,
5555
5557
  [workspaceId]
5556
5558
  );
5557
- if (!row) return { ...DEFAULT_SETTINGS, nextRunAt: (/* @__PURE__ */ new Date()).toISOString() };
5559
+ if (!row) return { ...DEFAULT_SETTINGS };
5558
5560
  const lastResult = row.last_review_id && row.last_review_hash && row.last_classification ? {
5559
5561
  id: row.last_review_id,
5560
5562
  contentHash: row.last_review_hash,
@@ -9161,7 +9163,7 @@ function reauthorizeOrExpireCandidate(input) {
9161
9163
  ]);
9162
9164
  const expired = Date.parse(input.candidate.expiresAt) <= Date.parse(input.now);
9163
9165
  const rejected = occurrences.length === 0;
9164
- const status = rejected ? "rejected" : expired ? "expired" : new Set(occurrences.map((item) => item.sourceRef)).size >= 2 ? "confirmed" : "unresolved";
9166
+ const status = rejected ? "rejected" : expired ? "expired" : removed.length > 0 ? "unresolved" : input.candidate.status;
9165
9167
  const decision = rejected ? "rejected" : expired ? "expired" : "merged";
9166
9168
  const changed = removed.length > 0 || input.candidate.lastReviewedAt !== input.now || input.candidate.sourceReviews.length !== sourceReviews.length;
9167
9169
  if (!changed && !expired) return null;
@@ -9212,8 +9214,7 @@ function upsertCandidateFromReview(input) {
9212
9214
  ...authorizedOccurrences,
9213
9215
  ...input.review.selectedEvidence
9214
9216
  ]);
9215
- const independentOccurrences = new Set(occurrences.map((item) => item.sourceRef)).size;
9216
- const status = independentOccurrences >= 2 ? "confirmed" : "unresolved";
9217
+ const status = claim.candidateDisposition === "confirm" ? "confirmed" : "unresolved";
9217
9218
  const firstSeenAt = occurrences.map((item) => item.occurredAt).sort()[0];
9218
9219
  const lastSeenAt = occurrences.map((item) => item.occurredAt).sort().at(-1);
9219
9220
  const candidate = createHarnessRefinementCandidate({
@@ -10558,7 +10559,7 @@ async function runSelectedLocalHarnessEvaluation(input) {
10558
10559
  candidates.push(candidate);
10559
10560
  }
10560
10561
  let modelDecision = {
10561
- schemaVersion: "openpond.harnessEvaluationReviewModelDecision.v1",
10562
+ schemaVersion: "openpond.harnessEvaluationReviewModelDecision.v2",
10562
10563
  decision: "no_action",
10563
10564
  reason: "No authorized unresolved evidence qualified for model review.",
10564
10565
  ignoredEvidence: []
@@ -10574,7 +10575,7 @@ async function runSelectedLocalHarnessEvaluation(input) {
10574
10575
  });
10575
10576
  }
10576
10577
  modelDecision = {
10577
- schemaVersion: "openpond.harnessEvaluationReviewModelDecision.v1",
10578
+ schemaVersion: "openpond.harnessEvaluationReviewModelDecision.v2",
10578
10579
  decision: "no_action",
10579
10580
  reason: "Continuous review is disabled by a zero model-cost ceiling.",
10580
10581
  ignoredEvidence: candidates.map((candidate) => ({
@@ -10683,6 +10684,7 @@ async function runSelectedLocalHarnessEvaluation(input) {
10683
10684
  }),
10684
10685
  recurrenceFamily: modelDecision.recurrenceFamily,
10685
10686
  statement: modelDecision.statement,
10687
+ ...modelDecision.classification === "harness_maintenance" ? { candidateDisposition: modelDecision.candidateDisposition } : {},
10686
10688
  independentOccurrences: new Set(selectedCandidates.map((item) => item.sourceRef)).size,
10687
10689
  unresolvedOccurrences: new Set(selectedCandidates.map((item) => item.sourceRef)).size
10688
10690
  } : null,
@@ -12285,7 +12287,10 @@ function buildResponsesBody(input) {
12285
12287
  store: false
12286
12288
  };
12287
12289
  if (projected.instructions) body.instructions = projected.instructions;
12288
- if (input.reasoningEffort) body.reasoning = { effort: input.reasoningEffort, summary: "auto" };
12290
+ body.reasoning = {
12291
+ ...input.reasoningEffort ? { effort: input.reasoningEffort } : {},
12292
+ summary: "auto"
12293
+ };
12289
12294
  if (input.maxOutputTokens != null) body.max_output_tokens = input.maxOutputTokens;
12290
12295
  if (input.temperature != null) body.temperature = input.temperature;
12291
12296
  if (input.topP != null) body.top_p = input.topP;
@@ -15908,122 +15913,6 @@ async function looksLikeSandboxTemplateRepo(repoPath) {
15908
15913
  }
15909
15914
  }
15910
15915
 
15911
- // ../server/src/api/server-payload-helpers.ts
15912
- import { randomUUID as randomUUID5 } from "node:crypto";
15913
-
15914
- // ../server/src/openpond/organizations.ts
15915
- var DEFAULT_OPENPOND_API_BASE_URL2 = "https://api.openpond.ai";
15916
- async function organizationRequestPayload(action) {
15917
- const context = await loadOpenPondAccountContext();
15918
- const token = context.token?.trim();
15919
- if (!token) {
15920
- throw new Error("OpenPond account API key is required to manage organizations.");
15921
- }
15922
- const apiBaseUrl = resolveApiBaseUrl(context);
15923
- if (action.type === "list") {
15924
- return openPondApiRequest(apiBaseUrl, token, "/v1/organizations");
15925
- }
15926
- if (action.type === "invitations_list") {
15927
- return openPondApiRequest(apiBaseUrl, token, "/v1/teams/invitations");
15928
- }
15929
- if (action.type === "invitation_accept" || action.type === "invitation_decline") {
15930
- const decision = action.type === "invitation_accept" ? "accept" : "decline";
15931
- return openPondApiRequest(apiBaseUrl, token, `/v1/teams/invitations/${decision}`, {
15932
- method: "POST",
15933
- body: JSON.stringify(action.payload ?? {})
15934
- });
15935
- }
15936
- if (action.type === "create") {
15937
- return openPondApiRequest(apiBaseUrl, token, "/v1/organizations", {
15938
- method: "POST",
15939
- body: JSON.stringify(action.payload ?? {})
15940
- });
15941
- }
15942
- if (action.type === "get") {
15943
- return openPondApiRequest(apiBaseUrl, token, `/v1/organizations/${encodeURIComponent(action.slug)}`);
15944
- }
15945
- if (action.type === "update") {
15946
- return openPondApiRequest(apiBaseUrl, token, `/v1/organizations/${encodeURIComponent(action.slug)}`, {
15947
- method: "PATCH",
15948
- body: JSON.stringify(action.payload ?? {})
15949
- });
15950
- }
15951
- if (action.type === "members") {
15952
- return openPondApiRequest(apiBaseUrl, token, `/v1/organizations/${encodeURIComponent(action.slug)}/members`);
15953
- }
15954
- if (action.type === "member_upsert") {
15955
- return openPondApiRequest(apiBaseUrl, token, `/v1/organizations/${encodeURIComponent(action.slug)}/members`, {
15956
- method: "POST",
15957
- body: JSON.stringify(action.payload ?? {})
15958
- });
15959
- }
15960
- if (action.type === "mcp_get") {
15961
- return openPondApiRequest(apiBaseUrl, token, `/v1/organizations/${encodeURIComponent(action.slug)}/mcp-server`);
15962
- }
15963
- if (action.type === "mcp_generate") {
15964
- return openPondApiRequest(apiBaseUrl, token, `/v1/organizations/${encodeURIComponent(action.slug)}/mcp-server`, {
15965
- method: "POST",
15966
- body: JSON.stringify(action.payload ?? {})
15967
- });
15968
- }
15969
- if (action.type === "mcp_rotate") {
15970
- return openPondApiRequest(
15971
- apiBaseUrl,
15972
- token,
15973
- `/v1/organizations/${encodeURIComponent(action.slug)}/mcp-server/rotate`,
15974
- { method: "POST" }
15975
- );
15976
- }
15977
- if (action.type === "mcp_disable") {
15978
- return openPondApiRequest(
15979
- apiBaseUrl,
15980
- token,
15981
- `/v1/organizations/${encodeURIComponent(action.slug)}/mcp-server/disable`,
15982
- { method: "POST" }
15983
- );
15984
- }
15985
- if (action.type === "mcp_enable") {
15986
- return openPondApiRequest(
15987
- apiBaseUrl,
15988
- token,
15989
- `/v1/organizations/${encodeURIComponent(action.slug)}/mcp-server/enable`,
15990
- { method: "POST" }
15991
- );
15992
- }
15993
- throw new Error(`Unsupported organization action: ${action.type}`);
15994
- }
15995
- async function openPondApiRequest(apiBaseUrl, token, path51, init = {}) {
15996
- const response = await apiFetch(apiBaseUrl, token, path51, init);
15997
- const payload = await response.json().catch(() => ({}));
15998
- if (!response.ok) {
15999
- const message = typeof payload.message === "string" ? payload.message : typeof payload.error === "string" ? payload.error : response.statusText;
16000
- throw new Error(message);
16001
- }
16002
- return payload;
16003
- }
16004
- function resolveApiBaseUrl(context) {
16005
- return normalizeOptionalUrl2(process.env.OPENPOND_API_URL) ?? normalizeOptionalUrl2(context.apiBaseUrl) ?? normalizeOptionalUrl2(context.account?.apiBaseUrl) ?? normalizeOptionalUrl2(context.config.apiBaseUrl) ?? normalizeOpenPondWebBaseAsApi(context.account?.baseUrl) ?? normalizeOpenPondWebBaseAsApi(context.config.baseUrl) ?? DEFAULT_OPENPOND_API_BASE_URL2;
16006
- }
16007
- function normalizeOpenPondWebBaseAsApi(value) {
16008
- const normalized = normalizeOptionalUrl2(value);
16009
- if (!normalized) return null;
16010
- try {
16011
- const url = new URL(normalized);
16012
- if (url.hostname === "openpond.ai") return "https://api.openpond.ai";
16013
- if (!url.hostname.startsWith("api.") && url.hostname.endsWith(".openpond.ai")) {
16014
- url.hostname = `api.${url.hostname}`;
16015
- return url.origin;
16016
- }
16017
- } catch {
16018
- return normalized;
16019
- }
16020
- return normalized;
16021
- }
16022
- function normalizeOptionalUrl2(value) {
16023
- const trimmed = value?.trim();
16024
- return trimmed ? trimmed.replace(/\/$/, "") : null;
16025
- }
16026
-
16027
15916
  // ../../packages/sdk/dist/index.js
16028
15917
  function createSandboxRuntimeNamespace(client) {
16029
15918
  return {
@@ -16683,7 +16572,7 @@ function composedSignal(callerSignal, timeoutSignal, timeoutMs) {
16683
16572
  return callerSignal ? AbortSignal.any([callerSignal, timeoutSignal]) : timeoutSignal;
16684
16573
  }
16685
16574
  var DEFAULT_OPENPOND_WEB_BASE_URL = "https://openpond.ai";
16686
- var DEFAULT_OPENPOND_API_BASE_URL3 = "https://api.openpond.ai";
16575
+ var DEFAULT_OPENPOND_API_BASE_URL2 = "https://api.openpond.ai";
16687
16576
  async function streamSandboxEventOutput(params) {
16688
16577
  const response = await apiFetch2(params.sandboxApiUrl, params.apiKey, params.path, { timeoutMs: 0, maxResponseBytes: 0 });
16689
16578
  if (!response.body) {
@@ -16753,7 +16642,7 @@ function normalizeSandboxApiUrl2(baseUrlOrApiUrl) {
16753
16642
  return `${url.origin}${normalizedPath}/v1/sandboxes`;
16754
16643
  }
16755
16644
  if (url.origin === DEFAULT_OPENPOND_WEB_BASE_URL) {
16756
- return `${DEFAULT_OPENPOND_API_BASE_URL3}/v1/sandboxes`;
16645
+ return `${DEFAULT_OPENPOND_API_BASE_URL2}/v1/sandboxes`;
16757
16646
  }
16758
16647
  return `${url.origin}${normalizedPath}/api/sandboxes`;
16759
16648
  }
@@ -16773,7 +16662,7 @@ var OpenPondSandboxInstanceClient = class {
16773
16662
  sandboxApiUrl;
16774
16663
  constructor(options) {
16775
16664
  this.apiKey = options.apiKey;
16776
- this.sandboxApiUrl = normalizeSandboxApiUrl2(options.sandboxApiUrl ?? options.baseUrl ?? DEFAULT_OPENPOND_API_BASE_URL3);
16665
+ this.sandboxApiUrl = normalizeSandboxApiUrl2(options.sandboxApiUrl ?? options.baseUrl ?? DEFAULT_OPENPOND_API_BASE_URL2);
16777
16666
  this.apiRootUrl = apiRootUrlFromSandboxApiUrl(this.sandboxApiUrl);
16778
16667
  }
16779
16668
  create(input, options = {}) {
@@ -17769,7 +17658,7 @@ var WORK_OUTPUT_MIME_TYPES = Object.freeze({
17769
17658
  });
17770
17659
 
17771
17660
  // ../server/src/openpond/sandbox-inputs.ts
17772
- function normalizeOptionalUrl3(value) {
17661
+ function normalizeOptionalUrl2(value) {
17773
17662
  const trimmed = value?.trim();
17774
17663
  return trimmed ? trimmed.replace(/\/$/, "") : null;
17775
17664
  }
@@ -19376,7 +19265,7 @@ function organizationStatus(organization) {
19376
19265
  return typeof organization.status === "string" ? organization.status : "active";
19377
19266
  }
19378
19267
  async function resolveSandboxClient() {
19379
- const configuredSandboxApiUrl = normalizeOptionalUrl3(
19268
+ const configuredSandboxApiUrl = normalizeOptionalUrl2(
19380
19269
  process.env.OPENPOND_SANDBOX_API_URL
19381
19270
  );
19382
19271
  const configuredSandboxApiKey = process.env.OPENPOND_SANDBOX_API_KEY?.trim();
@@ -19497,7 +19386,177 @@ function sandboxAccountSummary(context, sandboxApiUrl) {
19497
19386
  };
19498
19387
  }
19499
19388
  function resolveSandboxBaseUrl(context) {
19500
- return normalizeOptionalUrl3(process.env.OPENPOND_SANDBOX_BASE_URL) ?? normalizeOptionalUrl3(process.env.OPENPOND_API_URL) ?? normalizeOptionalUrl3(context.apiBaseUrl) ?? normalizeOptionalUrl3(context.account?.baseUrl) ?? normalizeOptionalUrl3(context.config.baseUrl) ?? DEFAULT_OPENPOND_SANDBOX_BASE_URL;
19389
+ return normalizeOptionalUrl2(process.env.OPENPOND_SANDBOX_BASE_URL) ?? normalizeOptionalUrl2(process.env.OPENPOND_API_URL) ?? normalizeOptionalUrl2(context.apiBaseUrl) ?? normalizeOptionalUrl2(context.account?.baseUrl) ?? normalizeOptionalUrl2(context.config.baseUrl) ?? DEFAULT_OPENPOND_SANDBOX_BASE_URL;
19390
+ }
19391
+
19392
+ // ../server/src/openpond/saved-work.ts
19393
+ async function listHostedSavedWork() {
19394
+ const payload = HostedSavedWorkResponseSchema.parse(
19395
+ await requestOpenPondPublicApi({ path: "/saved-work" })
19396
+ );
19397
+ return {
19398
+ ...payload,
19399
+ webBaseUrl: hostedWebBaseUrl()
19400
+ };
19401
+ }
19402
+ async function createHostedSavedWork(input) {
19403
+ const body = CreateHostedSavedWorkRequestSchema.parse(input);
19404
+ return requestOpenPondPublicApi({
19405
+ path: "/saved-work",
19406
+ method: "POST",
19407
+ body
19408
+ });
19409
+ }
19410
+ async function updateHostedSavedWork(scheduleId, input) {
19411
+ const body = UpdateHostedSavedWorkRequestSchema.parse(input);
19412
+ return requestOpenPondPublicApi({
19413
+ path: `/saved-work/schedules/${encodeURIComponent(scheduleId)}`,
19414
+ method: "PATCH",
19415
+ body
19416
+ });
19417
+ }
19418
+ async function deleteHostedSavedWork(scheduleId) {
19419
+ return requestOpenPondPublicApi({
19420
+ path: `/saved-work/schedules/${encodeURIComponent(scheduleId)}`,
19421
+ method: "DELETE"
19422
+ });
19423
+ }
19424
+ async function runHostedSavedWork(scheduleId, clientRequestId) {
19425
+ return requestOpenPondPublicApi({
19426
+ path: `/saved-work/schedules/${encodeURIComponent(scheduleId)}/run`,
19427
+ method: "POST",
19428
+ body: { clientRequestId }
19429
+ });
19430
+ }
19431
+ function hostedWebBaseUrl(env = process.env) {
19432
+ const configured = env.OPENPOND_HOSTED_WEB_URL?.trim() || env.OPENPOND_SANDBOX_BASE_URL?.trim() || env.OPENPOND_API_URL?.trim() || env.OPENPOND_SANDBOX_API_URL?.trim() || "https://api.openpond.ai";
19433
+ const url = new URL(configured);
19434
+ if (url.hostname === "staging-api.openpond.ai" || url.hostname.endsWith(".staging-api.openpond.ai")) {
19435
+ return "https://staging.openpond.ai";
19436
+ }
19437
+ if (url.hostname === "api.openpond.ai" || url.hostname.endsWith(".api.openpond.ai")) {
19438
+ return "https://openpond.ai";
19439
+ }
19440
+ url.pathname = "";
19441
+ url.search = "";
19442
+ url.hash = "";
19443
+ return url.origin;
19444
+ }
19445
+
19446
+ // ../server/src/api/server-payload-helpers.ts
19447
+ import { randomUUID as randomUUID5 } from "node:crypto";
19448
+
19449
+ // ../server/src/openpond/organizations.ts
19450
+ var DEFAULT_OPENPOND_API_BASE_URL3 = "https://api.openpond.ai";
19451
+ async function organizationRequestPayload(action) {
19452
+ const context = await loadOpenPondAccountContext();
19453
+ const token = context.token?.trim();
19454
+ if (!token) {
19455
+ throw new Error("OpenPond account API key is required to manage organizations.");
19456
+ }
19457
+ const apiBaseUrl = resolveApiBaseUrl(context);
19458
+ if (action.type === "list") {
19459
+ return openPondApiRequest(apiBaseUrl, token, "/v1/organizations");
19460
+ }
19461
+ if (action.type === "invitations_list") {
19462
+ return openPondApiRequest(apiBaseUrl, token, "/v1/teams/invitations");
19463
+ }
19464
+ if (action.type === "invitation_accept" || action.type === "invitation_decline") {
19465
+ const decision = action.type === "invitation_accept" ? "accept" : "decline";
19466
+ return openPondApiRequest(apiBaseUrl, token, `/v1/teams/invitations/${decision}`, {
19467
+ method: "POST",
19468
+ body: JSON.stringify(action.payload ?? {})
19469
+ });
19470
+ }
19471
+ if (action.type === "create") {
19472
+ return openPondApiRequest(apiBaseUrl, token, "/v1/organizations", {
19473
+ method: "POST",
19474
+ body: JSON.stringify(action.payload ?? {})
19475
+ });
19476
+ }
19477
+ if (action.type === "get") {
19478
+ return openPondApiRequest(apiBaseUrl, token, `/v1/organizations/${encodeURIComponent(action.slug)}`);
19479
+ }
19480
+ if (action.type === "update") {
19481
+ return openPondApiRequest(apiBaseUrl, token, `/v1/organizations/${encodeURIComponent(action.slug)}`, {
19482
+ method: "PATCH",
19483
+ body: JSON.stringify(action.payload ?? {})
19484
+ });
19485
+ }
19486
+ if (action.type === "members") {
19487
+ return openPondApiRequest(apiBaseUrl, token, `/v1/organizations/${encodeURIComponent(action.slug)}/members`);
19488
+ }
19489
+ if (action.type === "member_upsert") {
19490
+ return openPondApiRequest(apiBaseUrl, token, `/v1/organizations/${encodeURIComponent(action.slug)}/members`, {
19491
+ method: "POST",
19492
+ body: JSON.stringify(action.payload ?? {})
19493
+ });
19494
+ }
19495
+ if (action.type === "mcp_get") {
19496
+ return openPondApiRequest(apiBaseUrl, token, `/v1/organizations/${encodeURIComponent(action.slug)}/mcp-server`);
19497
+ }
19498
+ if (action.type === "mcp_generate") {
19499
+ return openPondApiRequest(apiBaseUrl, token, `/v1/organizations/${encodeURIComponent(action.slug)}/mcp-server`, {
19500
+ method: "POST",
19501
+ body: JSON.stringify(action.payload ?? {})
19502
+ });
19503
+ }
19504
+ if (action.type === "mcp_rotate") {
19505
+ return openPondApiRequest(
19506
+ apiBaseUrl,
19507
+ token,
19508
+ `/v1/organizations/${encodeURIComponent(action.slug)}/mcp-server/rotate`,
19509
+ { method: "POST" }
19510
+ );
19511
+ }
19512
+ if (action.type === "mcp_disable") {
19513
+ return openPondApiRequest(
19514
+ apiBaseUrl,
19515
+ token,
19516
+ `/v1/organizations/${encodeURIComponent(action.slug)}/mcp-server/disable`,
19517
+ { method: "POST" }
19518
+ );
19519
+ }
19520
+ if (action.type === "mcp_enable") {
19521
+ return openPondApiRequest(
19522
+ apiBaseUrl,
19523
+ token,
19524
+ `/v1/organizations/${encodeURIComponent(action.slug)}/mcp-server/enable`,
19525
+ { method: "POST" }
19526
+ );
19527
+ }
19528
+ throw new Error(`Unsupported organization action: ${action.type}`);
19529
+ }
19530
+ async function openPondApiRequest(apiBaseUrl, token, path51, init = {}) {
19531
+ const response = await apiFetch(apiBaseUrl, token, path51, init);
19532
+ const payload = await response.json().catch(() => ({}));
19533
+ if (!response.ok) {
19534
+ const message = typeof payload.message === "string" ? payload.message : typeof payload.error === "string" ? payload.error : response.statusText;
19535
+ throw new Error(message);
19536
+ }
19537
+ return payload;
19538
+ }
19539
+ function resolveApiBaseUrl(context) {
19540
+ return normalizeOptionalUrl3(process.env.OPENPOND_API_URL) ?? normalizeOptionalUrl3(context.apiBaseUrl) ?? normalizeOptionalUrl3(context.account?.apiBaseUrl) ?? normalizeOptionalUrl3(context.config.apiBaseUrl) ?? normalizeOpenPondWebBaseAsApi(context.account?.baseUrl) ?? normalizeOpenPondWebBaseAsApi(context.config.baseUrl) ?? DEFAULT_OPENPOND_API_BASE_URL3;
19541
+ }
19542
+ function normalizeOpenPondWebBaseAsApi(value) {
19543
+ const normalized = normalizeOptionalUrl3(value);
19544
+ if (!normalized) return null;
19545
+ try {
19546
+ const url = new URL(normalized);
19547
+ if (url.hostname === "openpond.ai") return "https://api.openpond.ai";
19548
+ if (!url.hostname.startsWith("api.") && url.hostname.endsWith(".openpond.ai")) {
19549
+ url.hostname = `api.${url.hostname}`;
19550
+ return url.origin;
19551
+ }
19552
+ } catch {
19553
+ return normalized;
19554
+ }
19555
+ return normalized;
19556
+ }
19557
+ function normalizeOptionalUrl3(value) {
19558
+ const trimmed = value?.trim();
19559
+ return trimmed ? trimmed.replace(/\/$/, "") : null;
19501
19560
  }
19502
19561
 
19503
19562
  // ../server/src/workspace/local-project-source-upload.ts
@@ -31294,7 +31353,7 @@ function createWorkModelToolDefinitions(deps) {
31294
31353
  ...deps.createScheduledWork ? [
31295
31354
  {
31296
31355
  name: "schedule_work",
31297
- description: "Create durable recurring Work only when the user directly asks to schedule the current or another task and provides an exact cadence, local date/time, and timezone. Use the conversation context to preserve the task prompt. Ask only for missing scheduling details before calling this tool. The scheduled prompt must describe the work to perform when the schedule fires, not the scheduling request itself.",
31356
+ description: "Create durable recurring Work through the OpenPond control plane when the user directly asks to schedule the current or another task and provides an exact cadence, local date/time, and timezone. This capability does not depend on a scheduler daemon inside the sandbox. Use the conversation context to preserve the task prompt and ask only for genuinely unavailable required scheduling details. Delivery is not required: unless the user explicitly requests an external destination or format, default to managed in-app Work outputs; report-like work should create a polished PDF plus a concise in-app summary. The scheduled prompt must describe only the work to perform when the schedule fires, not the scheduling request itself.",
31298
31357
  parameters: savedWorkScheduleParameters(),
31299
31358
  execute: async (context) => {
31300
31359
  const input = CreateHostedSavedWorkRequestSchema.parse({
@@ -45317,7 +45376,7 @@ function uniqueEvidence2(run, evidence) {
45317
45376
  }
45318
45377
  async function verifyAppliedProfileCommit(input) {
45319
45378
  const command = input.command ?? (async (name, args, cwd, env) => {
45320
- const { runWorkspaceCommand } = await import("./workspaces-CYBR37US.js");
45379
+ const { runWorkspaceCommand } = await import("./workspaces-ODK2CTFF.js");
45321
45380
  return runWorkspaceCommand(name, args, cwd, env);
45322
45381
  });
45323
45382
  const result = await command("git", ["rev-parse", "HEAD"], input.repoPath);
@@ -52952,6 +53011,7 @@ async function createOpenPondAppServer(options = {}) {
52952
53011
  return readBundledAuthoringProfileSkill(name);
52953
53012
  },
52954
53013
  executeWebSearch: createWebSearchExecutorFromEnv(),
53014
+ createScheduledWork: createHostedSavedWork,
52955
53015
  executeConnectedAppTool: createCloudConnectedAppToolExecutor(),
52956
53016
  listIntegrationConnections: listAppServerIntegrationConnections,
52957
53017
  loadPersonalizationSoul: async () => (await loadPersonalizationSettings(store, storeDir)).soul,
@@ -53134,11 +53194,15 @@ export {
53134
53194
  savePersonalizationSettings,
53135
53195
  workspaceToolExperienceBlocker,
53136
53196
  createHostedTurnHelpers,
53137
- organizationRequestPayload,
53138
53197
  resolveOpenPondSandboxClient,
53139
53198
  sandboxRequestPayload,
53140
53199
  listSandboxIntegrationConnections,
53141
- requestOpenPondPublicApi,
53200
+ listHostedSavedWork,
53201
+ createHostedSavedWork,
53202
+ updateHostedSavedWork,
53203
+ deleteHostedSavedWork,
53204
+ runHostedSavedWork,
53205
+ organizationRequestPayload,
53142
53206
  previewLocalProjectSourceUpload,
53143
53207
  codexHistorySessionWithLiveStatus,
53144
53208
  fetchCloudProjects,
@@ -15,7 +15,7 @@ import {
15
15
  ToolDeclarationSchema,
16
16
  createHarnessAdvanceReceipt,
17
17
  validateConnectedAppToolCallRequest
18
- } from "./chunk-JTFDOA2P.js";
18
+ } from "./chunk-6FZNXLVN.js";
19
19
  import {
20
20
  external_exports,
21
21
  yaml
@@ -5919,7 +5919,7 @@ var UsageRequestAttributionSchema = external_exports.object({
5919
5919
  commandName: external_exports.string().trim().min(1).max(160).nullable().optional(),
5920
5920
  commandSource: UsageCommandSourceSchema.nullable().optional()
5921
5921
  }).strict();
5922
- var UsageProviderSchema = external_exports.union([ChatProviderSchema, external_exports.literal("unknown")]);
5922
+ var UsageProviderSchema = external_exports.string().trim().min(1).max(160);
5923
5923
  var ModelUsageRecordSchema = external_exports.object({
5924
5924
  id: external_exports.string().trim().min(1),
5925
5925
  requestId: external_exports.string().trim().min(1),
@@ -1,7 +1,7 @@
1
1
  import { createRequire as __openpondCreateRequire } from "node:module"; var require = __openpondCreateRequire(import.meta.url);
2
2
  import {
3
3
  now
4
- } from "./chunk-7IFPXSSJ.js";
4
+ } from "./chunk-TW4YWBQR.js";
5
5
 
6
6
  // ../server/src/workspace/workspace-command.ts
7
7
  import { spawn, spawnSync } from "node:child_process";
@@ -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.63";
6
+ var VERSION = "0.0.65";
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";
@@ -4,7 +4,7 @@ import {
4
4
  getAnyCliOptionKind,
5
5
  getCliCommandDefinition,
6
6
  getCliOptionKind
7
- } from "./chunk-YDH34BGG.js";
7
+ } from "./chunk-WT3THPTX.js";
8
8
  import {
9
9
  parseJsonOption
10
10
  } from "./chunk-MUMPWI4O.js";