openpond 0.0.55 → 0.0.57

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 (100) hide show
  1. package/README.md +3 -0
  2. package/dist/chunks/actions-command-YY7UH37B.js +145 -0
  3. package/dist/chunks/{app-layer-T26MAAGI.js → app-layer-EZQWXB3S.js} +2 -2
  4. package/dist/chunks/{app-server-runtime-LFOOLDB5.js → app-server-runtime-JMEHVOFO.js} +6 -6
  5. package/dist/chunks/{apps-7KLTYKHN.js → apps-HHQF6TNR.js} +2 -2
  6. package/dist/chunks/{chunk-6QWTEC2D.js → chunk-42GGG3W4.js} +1 -1
  7. package/dist/chunks/{chunk-JSRCXDIL.js → chunk-5QJGC2QI.js} +46 -32
  8. package/dist/chunks/{chunk-CW4QSUDH.js → chunk-5Y7Q6ZSH.js} +1 -1
  9. package/dist/chunks/{chunk-55KT7K5P.js → chunk-5ZLFZZLS.js} +2 -1
  10. package/dist/chunks/{chunk-IPAZ4FVZ.js → chunk-7JUIWABV.js} +5 -5
  11. package/dist/chunks/{chunk-M2OSF2YN.js → chunk-OJ34YA7E.js} +1 -1
  12. package/dist/chunks/chunk-QETF6ILG.js +15004 -0
  13. package/dist/chunks/{chunk-EIRW6Z6S.js → chunk-UBHCG2NE.js} +1 -1
  14. package/dist/chunks/{chunk-US7DOPAH.js → chunk-VG4H4TQG.js} +65 -58
  15. package/dist/chunks/{chunk-LACG7NNI.js → chunk-XHTO6KF2.js} +1 -1
  16. package/dist/chunks/{chunk-OVE6IFEM.js → chunk-XX6KALN2.js} +391 -74
  17. package/dist/chunks/{cli-7SSGEHXC.js → cli-EUZHWEJR.js} +5 -5
  18. package/dist/chunks/{core-commands-SND555SC.js → core-commands-RI4B7TYM.js} +3 -3
  19. package/dist/chunks/{desktop-test-WSWXNSFS.js → desktop-test-DRTCQWDV.js} +2 -2
  20. package/dist/chunks/{extension-3IKF6YQE.js → extension-XMWCG6YG.js} +9 -9
  21. package/dist/chunks/{help-DHGNXUA4.js → help-UILXBPHG.js} +1 -1
  22. package/dist/chunks/{opchat-XYKT5KKO.js → opchat-SSK54JSR.js} +2 -2
  23. package/dist/chunks/{organizations-HKVC4CSA.js → organizations-G5S2HJLT.js} +4 -4
  24. package/dist/chunks/{profile-PLWXQHKF.js → profile-YD7NYL3U.js} +2 -2
  25. package/dist/chunks/{project-agent-JNSP56KG.js → project-agent-75PAFL6B.js} +2 -2
  26. package/dist/chunks/{sandbox-command-Z6LNNSSL.js → sandbox-command-FGUJDDXR.js} +2 -2
  27. package/dist/chunks/{sandbox-template-FVW2UTI4.js → sandbox-template-PBSIPCVO.js} +3 -3
  28. package/dist/chunks/{src-2TP42H76.js → src-FTG6DVBK.js} +3 -3
  29. package/dist/chunks/{src-SRYGTCYI.js → src-P7YLMEEK.js} +613 -471
  30. package/dist/chunks/{teams-bot-FNPT4Q2B.js → teams-bot-NSYWELB6.js} +2 -2
  31. package/dist/chunks/{workspaces-VFM7AUWY.js → workspaces-R3EVRSWA.js} +2 -2
  32. package/dist/cli.js +13 -13
  33. package/dist/web/assets/{AppDialog-BEKS_Ixr.js → AppDialog-CxLYXiI1.js} +1 -1
  34. package/dist/web/assets/{AppsView-CbuT2sT2.js → AppsView-CVTUkahv.js} +1 -1
  35. package/dist/web/assets/{BrowserSidebar-DgqVeW5u.js → BrowserSidebar-oHniLA05.js} +1 -1
  36. package/dist/web/assets/{CommandMenu-CQcaEB76.js → CommandMenu-Db_5OiKs.js} +1 -1
  37. package/dist/web/assets/{CommunityView-CYX6iFcg.js → CommunityView-HTwMEO-T.js} +1 -1
  38. package/dist/web/assets/{ComposerCreateImproveStrip-DY4SQbL4.js → ComposerCreateImproveStrip-ER26yFe-.js} +1 -1
  39. package/dist/web/assets/{GetStartedView-DnxeZaBB.js → GetStartedView-l9MUYMYH.js} +1 -1
  40. package/dist/web/assets/{LabModelVersionDetailPage-DYTfYGWv.js → LabModelVersionDetailPage-Dgf-DlJi.js} +1 -1
  41. package/dist/web/assets/{LabSkillSidebar-BpD-kjP_.js → LabSkillSidebar-CyX8sVm1.js} +1 -1
  42. package/dist/web/assets/{LabsRoute-DVC7eZCs.js → LabsRoute-BC1ST9qT.js} +3 -3
  43. package/dist/web/assets/{MainChatThread-DTiX_8MC.js → MainChatThread-BfW92Rv1.js} +2 -2
  44. package/dist/web/assets/{MainPane-CNoHJkXy.js → MainPane-DlciH8yR.js} +3 -3
  45. package/dist/web/assets/{MarkdownText-_JhfBcQL.js → MarkdownText-CyOeCVjf.js} +1 -1
  46. package/dist/web/assets/{Messages-Bo0-Uvcz.js → Messages-BDtEbIKv.js} +1 -1
  47. package/dist/web/assets/{NativeSkillSidebar-CHQ87FW2.js → NativeSkillSidebar-D0BlvEtE.js} +1 -1
  48. package/dist/web/assets/{NewProjectDialog-B-1KuU5u.js → NewProjectDialog-CiGPfI5s.js} +1 -1
  49. package/dist/web/assets/{OutputsPage-BSimpEpA.js → OutputsPage-DNU2yD7q.js} +1 -1
  50. package/dist/web/assets/{RightChatPanelStack-B8ZOyuFO.js → RightChatPanelStack-Cs63fQwk.js} +1 -1
  51. package/dist/web/assets/{ScheduledWorkPage-Blwy1G8r.js → ScheduledWorkPage-DMKHFbeE.js} +1 -1
  52. package/dist/web/assets/{SettingsView-CTLTakyn.js → SettingsView-L0g-g2fL.js} +3 -3
  53. package/dist/web/assets/{TeamChatView-dN3fUCbZ.js → TeamChatView-CSVMTUAE.js} +1 -1
  54. package/dist/web/assets/{TerminalOverlay-CPVGeO7U.js → TerminalOverlay-Bb0RJR04.js} +1 -1
  55. package/dist/web/assets/{TrainingCreationPanel-ettNNJBP.js → TrainingCreationPanel-VIWlpVV2.js} +1 -1
  56. package/dist/web/assets/{TrainingDraftPanel-DUJBuII1.js → TrainingDraftPanel-MTYsR-Ry.js} +1 -1
  57. package/dist/web/assets/{UsageSettingsSection-BOZR3JE_.js → UsageSettingsSection-Cdc_jGFX.js} +1 -1
  58. package/dist/web/assets/{WorkspaceDiffPanel-99MjzMkW.js → WorkspaceDiffPanel-BgIbxMMu.js} +3 -3
  59. package/dist/web/assets/{WorkspaceEnvironmentMenu-C3s3mTyu.js → WorkspaceEnvironmentMenu-C97GqYn9.js} +1 -1
  60. package/dist/web/assets/{WorkspaceGitDialogs-BvurXjNP.js → WorkspaceGitDialogs-CK6ahRty.js} +1 -1
  61. package/dist/web/assets/{WorkspaceMonacoEditor-BCXg9mBQ.js → WorkspaceMonacoEditor-BQoN7jWa.js} +3 -3
  62. package/dist/web/assets/{arrow-up-right-DRIT5z3q.js → arrow-up-right-CzBZuWNj.js} +1 -1
  63. package/dist/web/assets/{chevron-up-Hglu-Zx3.js → chevron-up-DW-qEVSP.js} +1 -1
  64. package/dist/web/assets/{circle-alert-Crh3Zr2m.js → circle-alert-B_xROoPY.js} +1 -1
  65. package/dist/web/assets/{cloud-upload-mSm9KIL4.js → cloud-upload-CjLR-8-r.js} +1 -1
  66. package/dist/web/assets/{cssMode-CkQ4x6JA.js → cssMode-CQQJhS7v.js} +1 -1
  67. package/dist/web/assets/{folder-git-2-B8TV5i0V.js → folder-git-2-ktXin28y.js} +1 -1
  68. package/dist/web/assets/{folder-open-DXaun_C3.js → folder-open-BpUcIJHn.js} +1 -1
  69. package/dist/web/assets/{folder-plus-CUbTwu82.js → folder-plus-8NHsIAxQ.js} +1 -1
  70. package/dist/web/assets/{folder-DMeODEQJ.js → folder-tLv6TMN2.js} +1 -1
  71. package/dist/web/assets/{git-branch-CUlgF0kK.js → git-branch-DO3iP_fL.js} +1 -1
  72. package/dist/web/assets/{git-commit-horizontal-DAQfyhbS.js → git-commit-horizontal-BSWa2I3g.js} +1 -1
  73. package/dist/web/assets/{htmlMode-BfyAplZo.js → htmlMode-DaAKO9wk.js} +1 -1
  74. package/dist/web/assets/index-BtiK52K1.js +1 -0
  75. package/dist/web/assets/index-DHxBMQIJ.js +174 -0
  76. package/dist/web/assets/{info-Ll3PkeGE.js → info-DiEvrUda.js} +1 -1
  77. package/dist/web/assets/{jsonMode-C9Vibh0P.js → jsonMode-Biu1ZTZ7.js} +1 -1
  78. package/dist/web/assets/{lspLanguageFeatures-CFoA9--Z.js → lspLanguageFeatures-lwoDxGgl.js} +1 -1
  79. package/dist/web/assets/{monaco.contribution-C2q-tDuk.js → monaco.contribution-BqQSY5-t.js} +2 -2
  80. package/dist/web/assets/{monaco.contribution-C8tRjUqy.js → monaco.contribution-Ce2MS2Nv.js} +2 -2
  81. package/dist/web/assets/{monaco.contribution-vWDjhuCI.js → monaco.contribution-DzHhgeLy.js} +2 -2
  82. package/dist/web/assets/{monaco.contribution-Co4ZPnCC.js → monaco.contribution-Ic8LKME8.js} +2 -2
  83. package/dist/web/assets/{play-lC5KpmRD.js → play-D9F3t5Cx.js} +1 -1
  84. package/dist/web/assets/{python-I5xkyvMs.js → python-BhVCwr-K.js} +1 -1
  85. package/dist/web/assets/{refresh-cw-8a_wz4tX.js → refresh-cw-DRN17xPU.js} +1 -1
  86. package/dist/web/assets/{save-Dj9ex3Ce.js → save-CDZwpzlG.js} +1 -1
  87. package/dist/web/assets/{square-DfEM9XgY.js → square-Cf_AXs4a.js} +1 -1
  88. package/dist/web/assets/{square-pen-CgX3HoJ6.js → square-pen-ChJgNiDm.js} +1 -1
  89. package/dist/web/assets/{toggleHighContrast-BkNzz1Bg.js → toggleHighContrast-Bb_m9pXM.js} +1 -1
  90. package/dist/web/assets/{tsMode-CNwaV0ZJ.js → tsMode-BaWkaSHN.js} +1 -1
  91. package/dist/web/assets/{upload-Co5zYY9Z.js → upload-Cef29aCP.js} +1 -1
  92. package/dist/web/assets/{useLocalAgentSchedules-QY4_XS2F.js → useLocalAgentSchedules-CAAqoZ0V.js} +1 -1
  93. package/dist/web/assets/{wifi-off-CFzyn7Tf.js → wifi-off-C8cC22F6.js} +1 -1
  94. package/dist/web/assets/{workers-DqFxl1zu.js → workers-GOdHtcZt.js} +1 -1
  95. package/dist/web/assets/{yaml-Bbm66uDK.js → yaml-jBIxwMeR.js} +1 -1
  96. package/dist/web/index.html +1 -1
  97. package/docs/command-reference.md +15 -0
  98. package/package.json +2 -1
  99. package/dist/web/assets/index-Blindd8c.js +0 -1
  100. package/dist/web/assets/index-CDJX5ZxL.js +0 -174
@@ -1,4 +1,17 @@
1
1
  import { createRequire as __openpondCreateRequire } from "node:module"; var require = __openpondCreateRequire(import.meta.url);
2
+ import {
3
+ assertSafeBranchName,
4
+ isGeneratedWorkspacePath,
5
+ listPlainWorkspaceFiles,
6
+ loadWorkspaceDiffAtPath,
7
+ loadWorkspaceStateAtPath,
8
+ normalizeWorkspaceFilePath,
9
+ readLocalImageFile,
10
+ runCommand,
11
+ truncatePatch,
12
+ uniqueSortedPaths,
13
+ workspaceImageContentType
14
+ } from "./chunk-5Y7Q6ZSH.js";
2
15
  import {
3
16
  AGENT_PROTOCOL_VERSION,
4
17
  AGENT_RPC_METHODS,
@@ -16,32 +29,19 @@ import {
16
29
  runProviderRound,
17
30
  runProviderRoundLoop
18
31
  } from "./chunk-NFNEENNR.js";
19
- import {
20
- getBundledRuntimeVersion,
21
- loadOpenPondAccountContext,
22
- loadOpenPondHostedModels,
23
- streamOpenPondHostedChatTurn
24
- } from "./chunk-EIRW6Z6S.js";
25
- import {
26
- assertSafeBranchName,
27
- isGeneratedWorkspacePath,
28
- listPlainWorkspaceFiles,
29
- loadWorkspaceDiffAtPath,
30
- loadWorkspaceStateAtPath,
31
- normalizeWorkspaceFilePath,
32
- readLocalImageFile,
33
- runCommand,
34
- truncatePatch,
35
- uniqueSortedPaths,
36
- workspaceImageContentType
37
- } from "./chunk-CW4QSUDH.js";
38
32
  import {
39
33
  HOSTED_CHAT_SYSTEM_PROMPT,
40
34
  VERSION,
41
35
  event,
42
36
  now,
43
37
  textFromUnknown
44
- } from "./chunk-LACG7NNI.js";
38
+ } from "./chunk-XHTO6KF2.js";
39
+ import {
40
+ getBundledRuntimeVersion,
41
+ loadOpenPondAccountContext,
42
+ loadOpenPondHostedModels,
43
+ streamOpenPondHostedChatTurn
44
+ } from "./chunk-UBHCG2NE.js";
45
45
  import {
46
46
  AppPreferencesSchema,
47
47
  ApplyCreateImproveRunActionRequestSchema,
@@ -158,7 +158,7 @@ import {
158
158
  runAgentSdkProjectCommand,
159
159
  runProfileSkillCommand,
160
160
  sidebarFileBookmarkId
161
- } from "./chunk-55KT7K5P.js";
161
+ } from "./chunk-5ZLFZZLS.js";
162
162
  import {
163
163
  AgentSnapshotSchema,
164
164
  AttemptReceiptSchema,
@@ -236,7 +236,7 @@ import {
236
236
  stableId,
237
237
  uniqueEventRefs,
238
238
  validateConnectedAppProviderOperationRequest
239
- } from "./chunk-US7DOPAH.js";
239
+ } from "./chunk-VG4H4TQG.js";
240
240
  import {
241
241
  external_exports
242
242
  } from "./chunk-WYDVQOBL.js";
@@ -7864,11 +7864,16 @@ function executableSearchPath(environment = process.env, platform = process.plat
7864
7864
  }
7865
7865
 
7866
7866
  // ../server/src/harness/local-harness-refiner-context.ts
7867
- var MAX_REFINER_SOURCE_BYTES = 6e4;
7867
+ var MAX_REFINER_SOURCE_BYTES = 36e3;
7868
7868
  var MAX_PDF_ARTIFACTS = 10;
7869
7869
  var MAX_PDF_BYTES = 20 * 1024 * 1024;
7870
+ var MAX_REVIEW_TIMELINE_EVENTS = 40;
7871
+ var MAX_REVIEW_TIMELINE_CHARS = 24e3;
7872
+ var MAX_PRIOR_CONVERSATION_TURNS = 3;
7873
+ var MAX_PRIOR_INCIDENTS = 3;
7874
+ var MAX_PRIOR_INCIDENT_TIMELINE_EVENTS = 6;
7870
7875
  var execFileAsync = promisify(execFile);
7871
- async function loadBoundedRefinerContext(store, trigger, observations) {
7876
+ async function loadBoundedRefinerContext(store, trigger, observations, workspaceId) {
7872
7877
  const [session, turn, events, turns, usageRecords] = await Promise.all([
7873
7878
  store.getSession(trigger.runRef),
7874
7879
  store.getTurn(trigger.turnId),
@@ -7918,6 +7923,30 @@ async function loadBoundedRefinerContext(store, trigger, observations) {
7918
7923
  0
7919
7924
  ) || receiptProfile.totalTokens
7920
7925
  };
7926
+ const executionProfile = {
7927
+ modelRequestCount: durableUsage.modelRequestCount,
7928
+ failedModelRequestCount: usageRecords.filter(
7929
+ (record9) => record9.status === "failed" || record9.status === "interrupted"
7930
+ ).length,
7931
+ promptTokens: durableUsage.promptTokens,
7932
+ completionTokens: durableUsage.completionTokens,
7933
+ totalTokens: durableUsage.totalTokens,
7934
+ toolFailureCount: observationKinds.filter((kind) => kind === "tool_failure").length,
7935
+ retryCount: observationKinds.filter((kind) => kind === "retry").length,
7936
+ recoveryCount: observationKinds.filter((kind) => kind === "recovery").length
7937
+ };
7938
+ const artifactDiagnostics = await inspectBoundedPdfArtifactDiagnostics(session?.cwd);
7939
+ const timelineCandidates = events.filter(
7940
+ (runtimeEvent) => runtimeEvent.turnId === trigger.turnId && isRefinerReviewTimelineEvent(runtimeEvent) && (runtimeEvent.sequence === void 0 || runtimeEvent.sequence <= trigger.boundary.eventSequence)
7941
+ ).sort(compareRuntimeEvents);
7942
+ const timeline = boundedReviewTimeline(timelineCandidates);
7943
+ const priorConversation = orderedTurns.slice(Math.max(0, turnIndex - MAX_PRIOR_CONVERSATION_TURNS), Math.max(0, turnIndex)).map((candidate) => conversationTurn(candidate, events));
7944
+ const priorIncidents = workspaceId ? await loadRelevantPriorIncidentPackets({
7945
+ store,
7946
+ workspaceId,
7947
+ trigger,
7948
+ observations
7949
+ }) : [];
7921
7950
  return {
7922
7951
  task: {
7923
7952
  prompt: turn?.prompt ? redactAndBoundRefinerText(turn.prompt, 8e3) : null,
@@ -7925,19 +7954,8 @@ async function loadBoundedRefinerContext(store, trigger, observations) {
7925
7954
  assistantOutputLinkCount: countAbsoluteLinks(assistantOutput),
7926
7955
  previousAssistantOutput: previousTurn ? assistantOutputForTurn(events, previousTurn.id) : null
7927
7956
  },
7928
- artifactDiagnostics: await inspectBoundedPdfArtifactDiagnostics(session?.cwd),
7929
- executionProfile: {
7930
- modelRequestCount: durableUsage.modelRequestCount,
7931
- failedModelRequestCount: usageRecords.filter(
7932
- (record9) => record9.status === "failed" || record9.status === "interrupted"
7933
- ).length,
7934
- promptTokens: durableUsage.promptTokens,
7935
- completionTokens: durableUsage.completionTokens,
7936
- totalTokens: durableUsage.totalTokens,
7937
- toolFailureCount: observationKinds.filter((kind) => kind === "tool_failure").length,
7938
- retryCount: observationKinds.filter((kind) => kind === "retry").length,
7939
- recoveryCount: observationKinds.filter((kind) => kind === "recovery").length
7940
- },
7957
+ artifactDiagnostics,
7958
+ executionProfile,
7941
7959
  eventExcerpts: evidenceEvents.map((runtimeEvent) => {
7942
7960
  const data = asRecord(runtimeEvent.data);
7943
7961
  const result = asRecord(data.result);
@@ -7954,9 +7972,242 @@ async function loadBoundedRefinerContext(store, trigger, observations) {
7954
7972
  stderr: textField(result.stderr, 3e3),
7955
7973
  stdout: textField(result.stdout, 3e3)
7956
7974
  };
7957
- })
7975
+ }),
7976
+ reviewPacket: {
7977
+ currentTurn: {
7978
+ id: trigger.turnId,
7979
+ status: turn?.status ?? null,
7980
+ error: turn?.error ? redactAndBoundRefinerText(turn.error, 2e3) : null,
7981
+ prompt: turn?.prompt ? redactAndBoundRefinerText(turn.prompt, 8e3) : null,
7982
+ assistantOutput,
7983
+ assistantOutputLinkCount: countAbsoluteLinks(assistantOutput)
7984
+ },
7985
+ priorConversation,
7986
+ timeline,
7987
+ artifacts: fileOutputInventory(events, trigger.turnId),
7988
+ artifactDiagnostics,
7989
+ executionProfile,
7990
+ priorIncidents,
7991
+ truncation: {
7992
+ timelineEventCount: timelineCandidates.length,
7993
+ includedTimelineEventCount: timeline.length,
7994
+ timelineTruncated: timeline.length < timelineCandidates.length
7995
+ }
7996
+ }
7997
+ };
7998
+ }
7999
+ function conversationTurn(turn, events) {
8000
+ return {
8001
+ turnId: turn.id,
8002
+ status: turn.status,
8003
+ prompt: turn.prompt ? redactAndBoundRefinerText(turn.prompt, 3e3) : null,
8004
+ assistantOutput: assistantOutputForTurn(events, turn.id, 3e3)
7958
8005
  };
7959
8006
  }
8007
+ function boundedReviewTimeline(events) {
8008
+ const mapped = events.map(reviewTimelineEntry);
8009
+ if (mapped.length <= MAX_REVIEW_TIMELINE_EVENTS) {
8010
+ return fitTimelineToCharacterBudget(mapped);
8011
+ }
8012
+ const important = mapped.filter(
8013
+ (entry) => entry.status === "failed" || entry.name === "turn.completed" || entry.name === "turn.failed" || entry.name === "turn.interrupted" || entry.name === "skill.loaded" || entry.name === "validation.completed" || entry.name === "diagnostic"
8014
+ );
8015
+ const retainedKeys = new Set(important.map(timelineEntryKey));
8016
+ const remaining = mapped.filter((entry) => !retainedKeys.has(timelineEntryKey(entry))).slice(-(MAX_REVIEW_TIMELINE_EVENTS - Math.min(important.length, MAX_REVIEW_TIMELINE_EVENTS)));
8017
+ return fitTimelineToCharacterBudget(
8018
+ [...important.slice(-MAX_REVIEW_TIMELINE_EVENTS), ...remaining].sort((left, right) => Number(left.sequence ?? 0) - Number(right.sequence ?? 0))
8019
+ );
8020
+ }
8021
+ function fitTimelineToCharacterBudget(entries) {
8022
+ const retained = [];
8023
+ let used = 0;
8024
+ for (const entry of entries) {
8025
+ const size = JSON.stringify(entry).length;
8026
+ if (used + size > MAX_REVIEW_TIMELINE_CHARS) continue;
8027
+ retained.push(entry);
8028
+ used += size;
8029
+ }
8030
+ return retained;
8031
+ }
8032
+ function reviewTimelineEntry(runtimeEvent) {
8033
+ const data = asRecord(runtimeEvent.data);
8034
+ const result = asRecord(data.result);
8035
+ return {
8036
+ sequence: runtimeEvent.sequence ?? null,
8037
+ timestamp: runtimeEvent.timestamp,
8038
+ name: runtimeEvent.name,
8039
+ action: runtimeEvent.action ?? (typeof data.tool === "string" ? data.tool : null),
8040
+ status: runtimeEvent.status ?? null,
8041
+ args: boundedUnknown(runtimeEvent.args, 1500),
8042
+ command: textField(result.command, 2e3),
8043
+ error: textField(runtimeEvent.error, 2e3),
8044
+ output: textField(result.output, 2e3) ?? textField(runtimeEvent.output, 2e3),
8045
+ exitCode: typeof result.exitCode === "number" ? result.exitCode : null,
8046
+ timedOut: result.timedOut === true,
8047
+ stderr: textField(result.stderr, 2e3),
8048
+ stdout: textField(result.stdout, 2e3)
8049
+ };
8050
+ }
8051
+ function timelineEntryKey(entry) {
8052
+ return `${entry.sequence ?? "none"}:${entry.name ?? "unknown"}:${entry.action ?? "none"}`;
8053
+ }
8054
+ function fileOutputInventory(events, turnId) {
8055
+ const byRevision = /* @__PURE__ */ new Map();
8056
+ for (const runtimeEvent of events) {
8057
+ if (runtimeEvent.turnId !== turnId) continue;
8058
+ for (const output of findFileOutputRefs(runtimeEvent.data)) {
8059
+ byRevision.set(`${output.id}:${output.revision}`, output);
8060
+ }
8061
+ }
8062
+ return [...byRevision.values()].sort((left, right) => left.title.localeCompare(right.title) || left.revision - right.revision).slice(0, 30).map((output) => ({
8063
+ id: output.id,
8064
+ title: output.title,
8065
+ revision: output.revision,
8066
+ contentType: output.contentType,
8067
+ sizeBytes: output.sizeBytes,
8068
+ sha256: output.sha256,
8069
+ locationKind: output.location.kind,
8070
+ validation: output.validation.map((validation) => ({
8071
+ kind: validation.kind,
8072
+ status: validation.status,
8073
+ label: validation.label,
8074
+ detail: validation.detail ?? null
8075
+ }))
8076
+ }));
8077
+ }
8078
+ function findFileOutputRefs(value, depth = 0) {
8079
+ if (depth > 8) return [];
8080
+ const parsed = FileOutputRefSchema.safeParse(value);
8081
+ if (parsed.success) return [parsed.data];
8082
+ if (Array.isArray(value)) {
8083
+ return value.flatMap((item) => findFileOutputRefs(item, depth + 1));
8084
+ }
8085
+ if (!value || typeof value !== "object") return [];
8086
+ return Object.values(value).flatMap(
8087
+ (item) => findFileOutputRefs(item, depth + 1)
8088
+ );
8089
+ }
8090
+ async function loadRelevantPriorIncidentPackets(input) {
8091
+ const currentClasses = new Set(
8092
+ input.observations.flatMap(
8093
+ (observation) => observation.deterministicClass ? [observation.deterministicClass] : []
8094
+ )
8095
+ );
8096
+ const currentTools = new Set(
8097
+ input.observations.flatMap((observation) => observation.tool ? [observation.tool.name] : [])
8098
+ );
8099
+ if (currentClasses.size === 0 && currentTools.size === 0) return [];
8100
+ const available = (await input.store.listHarnessImprovementArtifacts(
8101
+ input.workspaceId,
8102
+ "observation",
8103
+ 200
8104
+ )).filter(
8105
+ (observation) => observation.runRef !== input.trigger.runRef && observation.turnId !== input.trigger.turnId && (observation.deterministicClass !== null && currentClasses.has(observation.deterministicClass) || observation.tool !== null && currentTools.has(observation.tool.name))
8106
+ ).sort((left, right) => right.createdAt.localeCompare(left.createdAt));
8107
+ const byTurn = /* @__PURE__ */ new Map();
8108
+ for (const observation of available) {
8109
+ const key = `${observation.runRef}:${observation.turnId}`;
8110
+ const list = byTurn.get(key) ?? [];
8111
+ list.push(observation);
8112
+ byTurn.set(key, list);
8113
+ }
8114
+ const packets = [];
8115
+ for (const group of byTurn.values()) {
8116
+ if (packets.length >= MAX_PRIOR_INCIDENTS) break;
8117
+ const first = group[0];
8118
+ const [turn, events] = await Promise.all([
8119
+ input.store.getTurn(first.turnId),
8120
+ input.store.runtimeEventsForSession(first.runRef, { limit: 1e3 })
8121
+ ]);
8122
+ if (!turn) continue;
8123
+ const matchingClasses = [...new Set(group.flatMap(
8124
+ (observation) => observation.deterministicClass && currentClasses.has(observation.deterministicClass) ? [observation.deterministicClass] : []
8125
+ ))];
8126
+ const matchingTools = [...new Set(group.flatMap(
8127
+ (observation) => observation.tool && currentTools.has(observation.tool.name) ? [observation.tool.name] : []
8128
+ ))];
8129
+ const timeline = priorIncidentTimeline(
8130
+ events.filter((runtimeEvent) => runtimeEvent.turnId === turn.id)
8131
+ );
8132
+ packets.push({
8133
+ runRef: first.runRef,
8134
+ turnId: first.turnId,
8135
+ createdAt: first.createdAt,
8136
+ matchedBy: {
8137
+ deterministicClasses: matchingClasses,
8138
+ tools: matchingTools
8139
+ },
8140
+ observations: group.slice(0, 4).map((observation) => ({
8141
+ kind: observation.kind,
8142
+ state: observation.state,
8143
+ deterministicClass: observation.deterministicClass,
8144
+ summary: observation.summary
8145
+ })),
8146
+ prompt: turn.prompt ? redactAndBoundRefinerText(turn.prompt, 1200) : null,
8147
+ assistantOutput: assistantOutputForTurn(events, turn.id, 1200),
8148
+ timeline,
8149
+ artifacts: fileOutputInventory(events, turn.id).slice(0, 5)
8150
+ });
8151
+ }
8152
+ return packets;
8153
+ }
8154
+ function priorIncidentTimeline(events) {
8155
+ const terminalNames = /* @__PURE__ */ new Set(["turn.completed", "turn.failed", "turn.interrupted"]);
8156
+ const candidates = events.filter((runtimeEvent) => {
8157
+ if (terminalNames.has(runtimeEvent.name)) return true;
8158
+ const serialized = JSON.stringify({
8159
+ error: runtimeEvent.error,
8160
+ output: runtimeEvent.output,
8161
+ data: runtimeEvent.data
8162
+ });
8163
+ return runtimeEvent.status === "failed" || /"ok"\s*:\s*false|failed|denied|unavailable|timed?\s*out|exception|traceback/i.test(serialized);
8164
+ }).sort(compareRuntimeEvents).map((runtimeEvent) => {
8165
+ const entry = reviewTimelineEntry(runtimeEvent);
8166
+ return {
8167
+ sequence: entry.sequence,
8168
+ name: entry.name,
8169
+ action: entry.action,
8170
+ status: entry.status,
8171
+ error: textField(entry.error, 800),
8172
+ output: textField(entry.output, 800),
8173
+ exitCode: entry.exitCode,
8174
+ timedOut: entry.timedOut
8175
+ };
8176
+ });
8177
+ const unique2 = /* @__PURE__ */ new Map();
8178
+ for (const entry of candidates) {
8179
+ const signature = JSON.stringify({
8180
+ name: entry.name,
8181
+ action: entry.action,
8182
+ status: entry.status,
8183
+ error: entry.error,
8184
+ output: entry.output,
8185
+ exitCode: entry.exitCode,
8186
+ timedOut: entry.timedOut
8187
+ });
8188
+ const existing = unique2.get(signature);
8189
+ if (existing) {
8190
+ existing.occurrenceCount += 1;
8191
+ continue;
8192
+ }
8193
+ unique2.set(signature, { ...entry, occurrenceCount: 1 });
8194
+ }
8195
+ const compact = [...unique2.values()];
8196
+ if (compact.length <= MAX_PRIOR_INCIDENT_TIMELINE_EVENTS) return compact;
8197
+ return [
8198
+ ...compact.slice(0, MAX_PRIOR_INCIDENT_TIMELINE_EVENTS - 2),
8199
+ ...compact.slice(-2)
8200
+ ];
8201
+ }
8202
+ function boundedUnknown(value, maxLength) {
8203
+ if (value === void 0) return null;
8204
+ try {
8205
+ const text = redactAndBoundRefinerText(JSON.stringify(value), maxLength);
8206
+ return JSON.parse(text.endsWith("\n[truncated]") ? JSON.stringify(text) : text);
8207
+ } catch {
8208
+ return redactAndBoundRefinerText(String(value), maxLength);
8209
+ }
8210
+ }
7960
8211
  function tasksetGradeExecutionProfile(events, turnId) {
7961
8212
  const fallback = {
7962
8213
  modelRequestCount: 0,
@@ -8074,11 +8325,11 @@ function countAbsoluteLinks(value) {
8074
8325
  if (!value) return 0;
8075
8326
  return value.match(/https?:\/\/[^\s<>)\]}"']+/gi)?.length ?? 0;
8076
8327
  }
8077
- function assistantOutputForTurn(events, turnId) {
8328
+ function assistantOutputForTurn(events, turnId, maxLength = 8e3) {
8078
8329
  const output = events.filter(
8079
8330
  (runtimeEvent) => runtimeEvent.turnId === turnId && runtimeEvent.name === "assistant.delta" && typeof runtimeEvent.output === "string"
8080
8331
  ).sort(compareRuntimeEvents).map((runtimeEvent) => runtimeEvent.output).join("");
8081
- return output ? redactAndBoundRefinerText(output, 8e3) : null;
8332
+ return output ? redactAndBoundRefinerText(output, maxLength) : null;
8082
8333
  }
8083
8334
  async function loadExactObservations(store, workspaceId, trigger) {
8084
8335
  const available = await store.listHarnessImprovementArtifacts(
@@ -8115,7 +8366,14 @@ async function readBoundedRefinerSource(bundlePath, trigger) {
8115
8366
  kind: file.kind,
8116
8367
  loaded: file.kind === "skill" && loadedSkillNames.has(skillNameFromPath(file.path))
8117
8368
  }));
8118
- for (const file of manifest.files) {
8369
+ const rankedFiles = manifest.files.slice().sort((left, right) => {
8370
+ const leftLoaded = left.kind === "skill" && loadedSkillNames.has(skillNameFromPath(left.path));
8371
+ const rightLoaded = right.kind === "skill" && loadedSkillNames.has(skillNameFromPath(right.path));
8372
+ if (leftLoaded !== rightLoaded) return leftLoaded ? -1 : 1;
8373
+ const rank = (kind) => kind === "instruction" ? 0 : kind === "skill" ? 1 : 2;
8374
+ return rank(left.kind) - rank(right.kind) || left.path.localeCompare(right.path);
8375
+ });
8376
+ for (const file of rankedFiles) {
8119
8377
  if (!["instruction", "skill", "agent"].includes(file.kind) || file.visibility !== "policy" || !["text/markdown", "text/plain", "text/javascript"].includes(file.mediaType)) {
8120
8378
  continue;
8121
8379
  }
@@ -8156,6 +8414,18 @@ function isRefinerEvidenceEvent(runtimeEvent) {
8156
8414
  "diagnostic"
8157
8415
  ].includes(runtimeEvent.name);
8158
8416
  }
8417
+ function isRefinerReviewTimelineEvent(runtimeEvent) {
8418
+ return [
8419
+ "turn.completed",
8420
+ "turn.failed",
8421
+ "turn.interrupted",
8422
+ "tool.completed",
8423
+ "workspace_action_result",
8424
+ "skill.loaded",
8425
+ "validation.completed",
8426
+ "diagnostic"
8427
+ ].includes(runtimeEvent.name);
8428
+ }
8159
8429
  function compareRuntimeEvents(left, right) {
8160
8430
  return (left.sequence ?? Number.MAX_SAFE_INTEGER) - (right.sequence ?? Number.MAX_SAFE_INTEGER);
8161
8431
  }
@@ -9693,6 +9963,11 @@ async function refreshOpenAiSubscriptionToken(refreshToken) {
9693
9963
  client_id: OPENAI_OAUTH_CLIENT_ID
9694
9964
  }).toString()
9695
9965
  });
9966
+ if (response.status === 401) {
9967
+ throw new Error(
9968
+ "Your OpenAI ChatGPT sign-in has expired or was invalidated. Reconnect it in Settings > Providers > OpenAI > Subscription by selecting Connect ChatGPT. This is an authentication issue, not a billing or model-access error."
9969
+ );
9970
+ }
9696
9971
  if (!response.ok) throw new Error(`OpenAI token refresh failed: ${response.status}`);
9697
9972
  return await response.json();
9698
9973
  }
@@ -11078,41 +11353,13 @@ async function runLocalHarnessRefinerWorker(input) {
11078
11353
  const boundedContext = await loadBoundedRefinerContext(
11079
11354
  input.store,
11080
11355
  trigger,
11081
- observations
11082
- );
11083
- const currentObservationHashes = new Set(
11084
- observations.map((observation) => observation.contentHash)
11356
+ observations,
11357
+ workspace.id
11085
11358
  );
11086
- const recentObservations = (await input.store.listHarnessImprovementArtifacts(
11087
- workspace.id,
11088
- "observation",
11089
- 100
11090
- )).filter((observation) => !currentObservationHashes.has(observation.contentHash)).sort((left, right) => right.createdAt.localeCompare(left.createdAt)).slice(0, 20).map((observation) => ({
11091
- ...boundedObservationEvidence(observation),
11092
- runRef: observation.runRef,
11093
- turnId: observation.turnId,
11094
- createdAt: observation.createdAt
11095
- }));
11096
- const recentOutcomes = (await input.store.listHarnessImprovementArtifacts(
11097
- workspace.id,
11098
- "refiner_outcome",
11099
- 100
11100
- )).filter((outcome) => outcome.trigger.contentHash !== trigger.contentHash).sort((left, right) => right.createdAt.localeCompare(left.createdAt)).slice(0, 8).map((outcome) => ({
11101
- id: outcome.id,
11102
- decision: outcome.decision,
11103
- reason: outcome.reason,
11104
- createdAt: outcome.createdAt,
11105
- triggerId: outcome.trigger.id
11106
- }));
11107
11359
  const refinerEvidence = {
11108
11360
  trigger: boundedTriggerEvidence(trigger),
11109
11361
  observations: observations.map(boundedObservationEvidence),
11110
- task: boundedContext.task,
11111
- eventExcerpts: boundedContext.eventExcerpts,
11112
- artifactDiagnostics: boundedContext.artifactDiagnostics,
11113
- executionProfile: boundedContext.executionProfile,
11114
- recentObservations,
11115
- recentOutcomes,
11362
+ reviewPacket: boundedContext.reviewPacket,
11116
11363
  sourceFiles: source.files,
11117
11364
  sourceCatalog: source.catalog,
11118
11365
  additionalEvidence: input.additionalEvidence ?? null
@@ -27573,6 +27820,72 @@ async function executeScopedOpenPondAction(input) {
27573
27820
  data: { result: result2 }
27574
27821
  };
27575
27822
  }
27823
+ if (implementation?.type === "openpond-project-action") {
27824
+ const executionTarget = resolveWorkspaceExecutionTarget({ session: context.session });
27825
+ if (isSandboxExecutionTarget(executionTarget)) {
27826
+ return failedActionToolResult(
27827
+ context.callId,
27828
+ resultToolName,
27829
+ `Action ${action.id} is a local Project Action and cannot run while Working in Hybrid or sandbox. Switch Working in to Local.`
27830
+ );
27831
+ }
27832
+ if (!deps.executeProjectAction) {
27833
+ return failedActionToolResult(
27834
+ context.callId,
27835
+ resultToolName,
27836
+ `Action ${action.id} is a local Project Action, but local action execution is not configured.`
27837
+ );
27838
+ }
27839
+ const projectRoot = stringValue7(implementation.projectRoot) ?? action.sourcePath;
27840
+ const projectId = stringValue7(implementation.projectId);
27841
+ const projectActionId = stringValue7(implementation.actionId) ?? action.id;
27842
+ if (!projectRoot) {
27843
+ return failedActionToolResult(
27844
+ context.callId,
27845
+ resultToolName,
27846
+ `Action ${action.id} is missing its local Project root.`
27847
+ );
27848
+ }
27849
+ if (!projectId || projectId !== context.session.localProjectId) {
27850
+ return failedActionToolResult(
27851
+ context.callId,
27852
+ resultToolName,
27853
+ `Action ${action.id} is not authorized for the selected local Project.`
27854
+ );
27855
+ }
27856
+ const result2 = await deps.executeProjectAction({
27857
+ action: projectActionId,
27858
+ input: input.input,
27859
+ metadata: {
27860
+ source: "openpond_project_action",
27861
+ projectRoot,
27862
+ projectId,
27863
+ selectedActionId: projectActionId,
27864
+ selectedActionLabel: action.label ?? action.name ?? projectActionId,
27865
+ selectedBy: "native_model_tool",
27866
+ displayPrompt: context.userPrompt,
27867
+ sessionId: context.session.id,
27868
+ turnId: context.turnId,
27869
+ toolCallId: context.callId
27870
+ }
27871
+ });
27872
+ return {
27873
+ toolCallId: context.callId,
27874
+ name: resultToolName,
27875
+ ok: true,
27876
+ contentText: JSON.stringify(
27877
+ {
27878
+ ok: true,
27879
+ action: resultToolName,
27880
+ output: `Ran Project Action ${projectActionId}.`,
27881
+ data: { result: result2 }
27882
+ },
27883
+ null,
27884
+ 2
27885
+ ),
27886
+ data: { result: result2 }
27887
+ };
27888
+ }
27576
27889
  const payloadArgs = {
27577
27890
  actionName: action.sourceActionId ?? action.name ?? action.id,
27578
27891
  input: input.input
@@ -37887,6 +38200,7 @@ function createCapabilityCatalogRuntime(deps) {
37887
38200
  actionCatalog: openPondActionCatalog,
37888
38201
  executeWorkspaceTool: deps.executeWorkspaceTool,
37889
38202
  executeProfileAction: deps.executeProfileAction,
38203
+ executeProjectAction: deps.executeProjectAction,
37890
38204
  trainingHarness: options.trainingHarness
37891
38205
  });
37892
38206
  }
@@ -37976,7 +38290,8 @@ function createCapabilityCatalogRuntime(deps) {
37976
38290
  ...createOpenPondActionModelToolDefinitions({
37977
38291
  actionCatalog: openPondActionCatalog,
37978
38292
  executeWorkspaceTool: deps.executeWorkspaceTool,
37979
- executeProfileAction: deps.executeProfileAction
38293
+ executeProfileAction: deps.executeProfileAction,
38294
+ executeProjectAction: deps.executeProjectAction
37980
38295
  })
37981
38296
  );
37982
38297
  }
@@ -41932,7 +42247,7 @@ function uniqueEvidence(run, evidence) {
41932
42247
  }
41933
42248
  async function verifyAppliedProfileCommit(input) {
41934
42249
  const command = input.command ?? (async (name, args, cwd, env) => {
41935
- const { runWorkspaceCommand } = await import("./workspaces-VFM7AUWY.js");
42250
+ const { runWorkspaceCommand } = await import("./workspaces-R3EVRSWA.js");
41936
42251
  return runWorkspaceCommand(name, args, cwd, env);
41937
42252
  });
41938
42253
  const result = await command("git", ["rev-parse", "HEAD"], input.repoPath);
@@ -46242,6 +46557,7 @@ function createTurnRunner(deps) {
46242
46557
  workInputsForSession,
46243
46558
  executeOpenPondCommand,
46244
46559
  executeProfileAction,
46560
+ executeProjectAction,
46245
46561
  executeDatasetBuilderAction,
46246
46562
  loadOpenPondProfileState: loadOpenPondProfileState2,
46247
46563
  loadOpenPondProfileStateForRef: loadOpenPondProfileStateForRef2,
@@ -46682,6 +46998,7 @@ function createTurnRunner(deps) {
46682
46998
  executeWebSearch,
46683
46999
  createScheduledWork,
46684
47000
  executeProfileAction,
47001
+ executeProjectAction,
46685
47002
  loadOpenPondProfileStateForRef: loadOpenPondProfileStateForRef2
46686
47003
  });
46687
47004
  function createNativeModelToolDefinitions(openPondActionCatalog, runtimeEvents, profileSkillRuntime, connectedApps, options = {}) {
@@ -3,12 +3,12 @@ import {
3
3
  resolveWebLaunchMessages,
4
4
  runOpenPondAppServerCli,
5
5
  runOpenPondServerCli
6
- } from "./chunk-IPAZ4FVZ.js";
6
+ } from "./chunk-7JUIWABV.js";
7
7
  import "./chunk-NFNEENNR.js";
8
- import "./chunk-EIRW6Z6S.js";
9
- import "./chunk-LACG7NNI.js";
10
- import "./chunk-55KT7K5P.js";
11
- import "./chunk-US7DOPAH.js";
8
+ import "./chunk-XHTO6KF2.js";
9
+ import "./chunk-UBHCG2NE.js";
10
+ import "./chunk-5ZLFZZLS.js";
11
+ import "./chunk-VG4H4TQG.js";
12
12
  import "./chunk-WYDVQOBL.js";
13
13
  import "./chunk-KHNHUA2H.js";
14
14
  import "./chunk-UACZUFIA.js";
@@ -16,12 +16,12 @@ import {
16
16
  runTemplateUpdate,
17
17
  runToolList,
18
18
  runToolRun
19
- } from "./chunk-M2OSF2YN.js";
19
+ } from "./chunk-OJ34YA7E.js";
20
20
  import "./chunk-FCVVOMIP.js";
21
21
  import "./chunk-KHNHUA2H.js";
22
- import "./chunk-6QWTEC2D.js";
22
+ import "./chunk-42GGG3W4.js";
23
23
  import "./chunk-SMNFI2FU.js";
24
- import "./chunk-JSRCXDIL.js";
24
+ import "./chunk-5QJGC2QI.js";
25
25
  import "./chunk-DBHSOTYZ.js";
26
26
  import "./chunk-KSRWKXRB.js";
27
27
  import "./chunk-MUMPWI4O.js";
@@ -5,9 +5,9 @@ import {
5
5
  import "./chunk-KHNHUA2H.js";
6
6
  import {
7
7
  CliUsageError
8
- } from "./chunk-6QWTEC2D.js";
8
+ } from "./chunk-42GGG3W4.js";
9
9
  import "./chunk-SMNFI2FU.js";
10
- import "./chunk-JSRCXDIL.js";
10
+ import "./chunk-5QJGC2QI.js";
11
11
  import "./chunk-DBHSOTYZ.js";
12
12
  import "./chunk-KSRWKXRB.js";
13
13
  import {
@@ -1,12 +1,4 @@
1
1
  import { createRequire as __openpondCreateRequire } from "node:module"; var require = __openpondCreateRequire(import.meta.url);
2
- import "./chunk-3KLQ52B2.js";
3
- import "./chunk-W5GKHH77.js";
4
- import {
5
- loadOpenPondProfileState,
6
- parseProfileSkillMarkdown
7
- } from "./chunk-EJURKADM.js";
8
- import "./chunk-JIEUB6OS.js";
9
- import "./chunk-BYAPLT37.js";
10
2
  import {
11
3
  CONNECTED_APP_PROVIDER_TOOL_NAMES,
12
4
  CapabilityRequirementSchema,
@@ -17,7 +9,15 @@ import {
17
9
  SandboxTemplateValidationDiagnosticSchema,
18
10
  ToolDeclarationSchema,
19
11
  validateConnectedAppToolCallRequest
20
- } from "./chunk-US7DOPAH.js";
12
+ } from "./chunk-VG4H4TQG.js";
13
+ import "./chunk-3KLQ52B2.js";
14
+ import "./chunk-W5GKHH77.js";
15
+ import {
16
+ loadOpenPondProfileState,
17
+ parseProfileSkillMarkdown
18
+ } from "./chunk-EJURKADM.js";
19
+ import "./chunk-JIEUB6OS.js";
20
+ import "./chunk-BYAPLT37.js";
21
21
  import {
22
22
  external_exports
23
23
  } from "./chunk-WYDVQOBL.js";