openpond 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (137) hide show
  1. package/README.md +4 -4
  2. package/dist/cache.d.ts +7 -10
  3. package/dist/chunks/{app-layer-XEYHFJHI.js → app-layer-F3CGXB33.js} +9 -7
  4. package/dist/chunks/{app-server-runtime-Y6MW4XCG.js → app-server-runtime-RHO5TFUC.js} +9 -7
  5. package/dist/chunks/{apps-GSXUDK6V.js → apps-L5XCL7QY.js} +12 -10
  6. package/dist/chunks/{chunk-J7PYGDRY.js → chunk-26AMV5ZI.js} +1 -1
  7. package/dist/chunks/{chunk-DNXBJZAU.js → chunk-3EB7I67T.js} +1 -1
  8. package/dist/chunks/{chunk-J3YDKJFD.js → chunk-3ELF4FXY.js} +19 -11
  9. package/dist/chunks/{chunk-HFPUR4CQ.js → chunk-3VEYNDHN.js} +10 -10
  10. package/dist/chunks/chunk-4KA25HUP.js +5648 -0
  11. package/dist/chunks/{chunk-EFET7LB7.js → chunk-6SMNG6YA.js} +62 -90
  12. package/dist/chunks/{chunk-N3TGCM7J.js → chunk-7RIGZB7N.js} +50 -37
  13. package/dist/chunks/{chunk-47EIAYI7.js → chunk-A6G3PFA5.js} +6 -4
  14. package/dist/chunks/{chunk-D7BO5Y5J.js → chunk-FJ2JGB2N.js} +31 -189
  15. package/dist/chunks/{chunk-WBAZFKC7.js → chunk-G65WAOJV.js} +2 -2
  16. package/dist/chunks/{chunk-CNTM26OW.js → chunk-K4TZEHAW.js} +16 -16
  17. package/dist/chunks/{chunk-AN2EYCN3.js → chunk-KCRCIQPD.js} +1 -5
  18. package/dist/chunks/chunk-OCBRPU2K.js +629 -0
  19. package/dist/chunks/{chunk-2JABRRNR.js → chunk-PS37DB5F.js} +1 -1
  20. package/dist/chunks/{chunk-TGM5IPYO.js → chunk-UZMVNKXM.js} +1 -1
  21. package/dist/chunks/{chunk-TZWAUV2L.js → chunk-VT6BLHMB.js} +10750 -1240
  22. package/dist/chunks/{chunk-5TKZBMQM.js → chunk-X6F4LBTQ.js} +102 -1
  23. package/dist/chunks/{chunk-6G6MDZLM.js → chunk-XA4KBDMY.js} +213 -999
  24. package/dist/chunks/chunk-ZNQEROWP.js +254 -0
  25. package/dist/chunks/{cli-L5VPOV6I.js → cli-D2MUUBEX.js} +7 -5
  26. package/dist/chunks/configuration-command-NR6JYIUD.js +187 -0
  27. package/dist/chunks/{continual-FYDKLCO7.js → continual-37CE4LLJ.js} +4 -4
  28. package/dist/chunks/{core-commands-MAN3CSJQ.js → core-commands-SWGIOZLW.js} +8 -6
  29. package/dist/chunks/database-DEYUZDIM.js +20 -0
  30. package/dist/chunks/{desktop-test-OE5SST2W.js → desktop-test-QOS7G5NE.js} +8 -6
  31. package/dist/chunks/dist-AKYCQNNF.js +187 -0
  32. package/dist/chunks/{extension-J3CIEDP4.js → extension-HJUJBQAD.js} +67 -730
  33. package/dist/chunks/{help-JNGJJFU5.js → help-J6PZ23IC.js} +1 -1
  34. package/dist/chunks/{opchat-6HEQJFLL.js → opchat-ABX5YBAT.js} +9 -7
  35. package/dist/chunks/{organizations-MWAPNOCK.js → organizations-CPNC47DO.js} +8 -6
  36. package/dist/chunks/{profile-P7HMONTZ.js → profile-Q3HB5MIO.js} +16 -14
  37. package/dist/chunks/{project-agent-2RAK7GAZ.js → project-agent-YHUBX4OR.js} +9 -7
  38. package/dist/chunks/{sandbox-command-G22CPFNK.js → sandbox-command-YFL5QTWX.js} +8 -6
  39. package/dist/chunks/{sandbox-template-S4WRUWJ6.js → sandbox-template-Z6P7NTNF.js} +12 -10
  40. package/dist/chunks/{src-BKBZ7WLO.js → src-7XEENEBI.js} +16 -12
  41. package/dist/chunks/{src-A6O6ZGIL.js → src-KBBIV4NT.js} +1338 -10969
  42. package/dist/chunks/{taskset-BMI7KOWP.js → taskset-2TRZBRRT.js} +1 -1
  43. package/dist/chunks/{teams-bot-5VBYEN7M.js → teams-bot-WD33NLH5.js} +7 -5
  44. package/dist/chunks/{training-UPVSGDTB.js → training-4XH37UZB.js} +1 -1
  45. package/dist/chunks/{workspaces-XM5BY3MO.js → workspaces-WG2MH2WE.js} +2 -2
  46. package/dist/cli.js +25 -17
  47. package/dist/client.d.ts +1 -1
  48. package/dist/config.d.ts +1 -0
  49. package/dist/index.js +20803 -15878
  50. package/dist/private-json-file.d.ts +1 -2
  51. package/dist/skills/openpond-desktop-harness/SKILL.md +1 -1
  52. package/dist/web/assets/App-C9aGkxVg.js +173 -0
  53. package/dist/web/assets/{AppDialog-CSXu5wRu.js → AppDialog-CK6_lg8c.js} +1 -1
  54. package/dist/web/assets/{AppTerminalPanel-y2bVL2RV.js → AppTerminalPanel-BKqgX4sd.js} +2 -2
  55. package/dist/web/assets/{AppsView-Bs9pwD2H.js → AppsView-B1NUuAIf.js} +1 -1
  56. package/dist/web/assets/{BrowserSidebar-CUgT5V1m.js → BrowserSidebar-DOvYxXeP.js} +1 -1
  57. package/dist/web/assets/{CartesianChart-DA85hfrP.js → CartesianChart-pOrYpzBr.js} +1 -1
  58. package/dist/web/assets/{CollaborationTabs-B8mlPhM3.js → CollaborationTabs-CgbR-MBJ.js} +1 -1
  59. package/dist/web/assets/{CommandMenu-EwUGCeC_.js → CommandMenu-CrIr4qUX.js} +1 -1
  60. package/dist/web/assets/{CommunityView-IHNq-YJz.js → CommunityView-CvAVQ_HZ.js} +1 -1
  61. package/dist/web/assets/{ComposerCreateImproveStrip-qOL2zA26.js → ComposerCreateImproveStrip-DybcKwwd.js} +1 -1
  62. package/dist/web/assets/GetStartedView-DVInkexN.js +1 -0
  63. package/dist/web/assets/{LabModelVersionDetailPage-BK0eoUlW.js → LabModelVersionDetailPage-NaaPElmM.js} +1 -1
  64. package/dist/web/assets/{LabSkillSidebar-CRPb4qBn.js → LabSkillSidebar-CuaYrtiu.js} +1 -1
  65. package/dist/web/assets/LabsRoute-BRR6x3SX.js +2 -0
  66. package/dist/web/assets/{MainChatThread-Cu6_UnNE.js → MainChatThread-BfkjCZB9.js} +2 -2
  67. package/dist/web/assets/MainPane-Gw-YK38n.js +8 -0
  68. package/dist/web/assets/{MarkdownText-N60tvLug.js → MarkdownText-DOlVQR8a.js} +1 -1
  69. package/dist/web/assets/{Messages-CYQFLElK.js → Messages-DMubppta.js} +6 -6
  70. package/dist/web/assets/{NativeSkillSidebar-zbx7WmOk.js → NativeSkillSidebar-DSFwZ-od.js} +1 -1
  71. package/dist/web/assets/{NewExperienceSwitcher-B0zev5Sx.js → NewExperienceSwitcher-Dj0ePIJ-.js} +1 -1
  72. package/dist/web/assets/{NewProjectDialog-lZlzrp-R.js → NewProjectDialog-B8NQV-Ji.js} +1 -1
  73. package/dist/web/assets/{OutputsPage-B4zYYUT5.js → OutputsPage-D_LDYTgV.js} +1 -1
  74. package/dist/web/assets/{ProjectsPage-97wgc84s.js → ProjectsPage-xjDYPc_W.js} +1 -1
  75. package/dist/web/assets/RightChatPanelStack-BktRQ9wg.js +1 -0
  76. package/dist/web/assets/{RightSidebarHomePanel-BUcWVJi-.js → RightSidebarHomePanel-j0VckZUu.js} +1 -1
  77. package/dist/web/assets/ScheduledWorkPage-1aT4bBY-.js +1 -0
  78. package/dist/web/assets/SettingsView-BSpuMDpv.js +9 -0
  79. package/dist/web/assets/SettingsView-CAH0vreE.css +1 -0
  80. package/dist/web/assets/{TeamChatView-Fj5_yjVE.js → TeamChatView-BPWJbDf1.js} +2 -2
  81. package/dist/web/assets/{TerminalOverlay-D2WBeJvp.js → TerminalOverlay-CrSwUk2d.js} +1 -1
  82. package/dist/web/assets/{TrainingCreationPanel-dYW_dh3M.js → TrainingCreationPanel-B4HMRwUg.js} +1 -1
  83. package/dist/web/assets/{TrainingDraftPanel-zeJWmmW6.js → TrainingDraftPanel-D4r1tN3I.js} +1 -1
  84. package/dist/web/assets/{UsageSettingsSection-B6SBqYuB.js → UsageSettingsSection-2aymqwIM.js} +1 -1
  85. package/dist/web/assets/{WorkSidebarPanel-BwbWKpOZ.js → WorkSidebarPanel-B0X0OiR6.js} +1 -1
  86. package/dist/web/assets/WorkspaceDiffPanel-Pg7GL0br.js +14 -0
  87. package/dist/web/assets/{WorkspaceEnvironmentMenu-D-3YGp06.js → WorkspaceEnvironmentMenu-OAfMEt7L.js} +3 -3
  88. package/dist/web/assets/{WorkspaceGitDialogs-BUbzUN4m.js → WorkspaceGitDialogs-YxcPH2Rq.js} +1 -1
  89. package/dist/web/assets/{WorkspaceMonacoEditor-CXPY7bBI.js → WorkspaceMonacoEditor-COKTiQZl.js} +3 -3
  90. package/dist/web/assets/{arrow-up-right-C7VWgGQP.js → arrow-up-right-_TX-awvK.js} +1 -1
  91. package/dist/web/assets/{chat-file-links-CqfMdhHQ.js → chat-file-links-CWLsRYvW.js} +1 -1
  92. package/dist/web/assets/chevron-up--mNnEqha.js +1 -0
  93. package/dist/web/assets/{clipboard-B-8k7mlT.js → clipboard-CyRSS8Sy.js} +1 -1
  94. package/dist/web/assets/{cloud-upload-CUVFzURz.js → cloud-upload-uBJBUYTy.js} +1 -1
  95. package/dist/web/assets/{cssMode-DYvfmqoL.js → cssMode-BrXSsZYs.js} +1 -1
  96. package/dist/web/assets/{folder-open-CnbcQIy8.js → folder-open-DktdZNW7.js} +1 -1
  97. package/dist/web/assets/{folder-plus-BOaLAKy4.js → folder-plus-DO06i9Vo.js} +1 -1
  98. package/dist/web/assets/{git-commit-horizontal-DQeHsooT.js → git-commit-horizontal-zFSIkPs7.js} +1 -1
  99. package/dist/web/assets/{htmlMode-BXEI-BVY.js → htmlMode-X9UMFkjt.js} +1 -1
  100. package/dist/web/assets/index-BEPmTPIA.js +1 -0
  101. package/dist/web/assets/{index-CGMb_VXm.css → index-ByQIHpc9.css} +1 -1
  102. package/dist/web/assets/{index-D-VK8mST.js → index-UOGdfLzi.js} +1 -1
  103. package/dist/web/assets/{info-DtzDuGLn.js → info-BEJXUqCD.js} +1 -1
  104. package/dist/web/assets/{jsonMode-Dosjh_hK.js → jsonMode-DIsB-j2E.js} +1 -1
  105. package/dist/web/assets/{lspLanguageFeatures-BNe-6FJA.js → lspLanguageFeatures-CmZ17KpA.js} +1 -1
  106. package/dist/web/assets/{minimize-2-DnxKN5oK.js → minimize-2-DumTpFtE.js} +1 -1
  107. package/dist/web/assets/{monaco.contribution-CfF-ajhi.js → monaco.contribution-D6w5PJji.js} +2 -2
  108. package/dist/web/assets/{monaco.contribution-ytyanGyj.js → monaco.contribution-DJ_NmcHu.js} +2 -2
  109. package/dist/web/assets/{monaco.contribution-CnkROzNv.js → monaco.contribution-LZEujgny.js} +2 -2
  110. package/dist/web/assets/{monaco.contribution-Dyns81H2.js → monaco.contribution-YVDfJcG4.js} +2 -2
  111. package/dist/web/assets/{play-B3o6IAQd.js → play-CLFeH7CU.js} +1 -1
  112. package/dist/web/assets/{python-B7zZ_9Z_.js → python-Djbda_qZ.js} +1 -1
  113. package/dist/web/assets/{refresh-cw-DSJZXa8S.js → refresh-cw-B4IpQ_7Q.js} +1 -1
  114. package/dist/web/assets/{save-iC-AXHN6.js → save-BbTHztnA.js} +1 -1
  115. package/dist/web/assets/{square-B2roZTxf.js → square-BJrVbmz6.js} +1 -1
  116. package/dist/web/assets/{toggleHighContrast-CjlV4YHK.js → toggleHighContrast-BopU5W9S.js} +1 -1
  117. package/dist/web/assets/{tsMode-XmKmSq0B.js → tsMode-CH_0_YDX.js} +1 -1
  118. package/dist/web/assets/{upload-BgHXNjfJ.js → upload-UumVeufu.js} +1 -1
  119. package/dist/web/assets/{useLocalAgentSchedules-CVJz0AMr.js → useLocalAgentSchedules-BRa23U7O.js} +1 -1
  120. package/dist/web/assets/{wifi-off-CneL8bDZ.js → wifi-off-BWJWivn6.js} +1 -1
  121. package/dist/web/assets/{workers-CT7VYBR5.js → workers-pTe8RvSI.js} +1 -1
  122. package/dist/web/assets/{yaml-CF8jchCz.js → yaml-DNLASORn.js} +1 -1
  123. package/dist/web/index.html +2 -2
  124. package/docs/command-reference.md +28 -2
  125. package/package.json +7 -5
  126. package/dist/chunks/chunk-P6JLLWMI.js +0 -238
  127. package/dist/web/assets/App-DfiCmBv6.js +0 -173
  128. package/dist/web/assets/GetStartedView-C2ypO0v7.js +0 -1
  129. package/dist/web/assets/LabsRoute-Bw-HD6QC.js +0 -2
  130. package/dist/web/assets/MainPane-k1iII9e9.js +0 -8
  131. package/dist/web/assets/RightChatPanelStack-I2znDCc7.js +0 -1
  132. package/dist/web/assets/ScheduledWorkPage-Bp-t0eVj.js +0 -1
  133. package/dist/web/assets/SettingsView-BRPrJuP5.css +0 -1
  134. package/dist/web/assets/SettingsView-C1xyn1Y4.js +0 -6
  135. package/dist/web/assets/WorkspaceDiffPanel-D9Kp0vFw.js +0 -14
  136. package/dist/web/assets/chevron-up-DD9Tei-Q.js +0 -1
  137. package/dist/web/assets/index-D-WCyNdJ.js +0 -1
@@ -1,4 +1,5 @@
1
1
  import { createRequire as __openpondCreateRequire } from "node:module"; var require = __openpondCreateRequire(import.meta.url);
2
+ import "./chunk-BVY5JYM6.js";
2
3
  import "./chunk-W5GKHH77.js";
3
4
  import {
4
5
  CONNECTED_APP_PROVIDER_TOOL_NAMES,
@@ -23,19 +24,47 @@ import {
23
24
  ContinualBenchPanelRoleSchema,
24
25
  ContinualBenchmarkProtocolReleaseSchema
25
26
  } from "./chunk-R3C3MNSI.js";
26
- import "./chunk-BVY5JYM6.js";
27
27
  import {
28
28
  loadOpenPondProfileState,
29
29
  parseProfileSkillMarkdown
30
- } from "./chunk-47EIAYI7.js";
31
- import "./chunk-J3YDKJFD.js";
30
+ } from "./chunk-A6G3PFA5.js";
31
+ import "./chunk-3ELF4FXY.js";
32
32
  import "./chunk-YVCYVDNP.js";
33
33
  import "./chunk-X7ZG4TSW.js";
34
- import {
35
- openPondConfigDirectory,
36
- updatePrivateJsonFile
37
- } from "./chunk-D7BO5Y5J.js";
34
+ import "./chunk-FJ2JGB2N.js";
38
35
  import "./chunk-KSRWKXRB.js";
36
+ import {
37
+ AppPreferencesSchema,
38
+ ChatModelRefSchema,
39
+ ChatProviderSchema,
40
+ CodexPermissionModeSchema,
41
+ CodexReasoningEffortSchema,
42
+ ContextCompactionPreferencesSchema,
43
+ DEFAULT_CHAT_PROVIDER,
44
+ DEFAULT_OPENPOND_COMMAND_ACCESS_MODE,
45
+ OpenPondCommandAccessModeSchema,
46
+ PERSONALIZATION_TEMPLATES,
47
+ PersonalizationSettingsSchema,
48
+ PersonalizationTemplateIdSchema,
49
+ ProviderIdSchema,
50
+ ProviderSettingsSchema,
51
+ SUBAGENT_RUNTIME_EVENT_NAMES,
52
+ ServerStatusSchema,
53
+ SidebarSectionsCollapsedSchema,
54
+ SubagentDelegationModeSchema,
55
+ SubagentPreferencesSchema,
56
+ SubagentRoleIdSchema,
57
+ TrainingPreferencesSchema,
58
+ WorkspaceEditorPreferencesSchema,
59
+ WorkspaceKindSchema,
60
+ withFileLock
61
+ } from "./chunk-4KA25HUP.js";
62
+ import {
63
+ getLocalRecord,
64
+ putLocalRecord,
65
+ resolveOpenPondHome,
66
+ storagePaths
67
+ } from "./chunk-ZNQEROWP.js";
39
68
  import {
40
69
  external_exports
41
70
  } from "./chunk-FQS2QL5F.js";
@@ -426,11 +455,11 @@ import { existsSync } from "node:fs";
426
455
  import { mkdir, readFile, rename, rm, stat, writeFile } from "node:fs/promises";
427
456
  import path2 from "node:path";
428
457
  var REGISTRY_SCHEMA_VERSION = 1;
429
- var OPERATION_LOCK_STALE_MS = 2 * 60 * 1e3;
430
458
  var OPERATION_LOCK_TIMEOUT_MS = 15e3;
431
459
  function createGithubExtensionManager(options = {}) {
432
- const rootPath = path2.resolve(options.rootPath ?? path2.join(openPondConfigDirectory(), "extensions"));
433
- const registryPath = path2.join(rootPath, "registry.json");
460
+ const home = path2.resolve(options.home ?? options.rootPath ?? resolveOpenPondHome());
461
+ const rootPath = path2.resolve(options.rootPath ?? path2.join(home, "library", "extensions"));
462
+ const registryPath = storagePaths(home).database;
434
463
  const github = createGithubSourceClient({
435
464
  fetch: options.fetch,
436
465
  githubToken: options.githubToken
@@ -438,7 +467,7 @@ function createGithubExtensionManager(options = {}) {
438
467
  const now = options.now ?? (() => /* @__PURE__ */ new Date());
439
468
  async function list() {
440
469
  try {
441
- const registry = await readRegistry(registryPath);
470
+ const registry = await readRegistry(home);
442
471
  const extensions = await Promise.all(registry.extensions.map((extension) => hydrateExtension(rootPath, extension)));
443
472
  markInstalledSkillConflicts(extensions, await reservedSkillNames(options.reservedSkillNames));
444
473
  return {
@@ -458,7 +487,7 @@ function createGithubExtensionManager(options = {}) {
458
487
  }
459
488
  async function preview(request) {
460
489
  const resolution = await github.resolve(request);
461
- const registry = await readRegistry(registryPath);
490
+ const registry = await readRegistry(home);
462
491
  const existing = registry.extensions.find((extension) => extension.id === resolution.preview.id) ?? null;
463
492
  assertSkillNamesAvailable(
464
493
  resolution.preview,
@@ -470,7 +499,7 @@ function createGithubExtensionManager(options = {}) {
470
499
  async function add(request) {
471
500
  const identity = parseGithubExtensionSource(request.source);
472
501
  return withExtensionLock(rootPath, identity.id, async () => {
473
- const registry = await readRegistry(registryPath);
502
+ const registry = await readRegistry(home);
474
503
  if (registry.extensions.some((extension) => extension.id === identity.id)) {
475
504
  throw new GithubExtensionError(`${identity.owner}/${identity.repo} is already installed.`, {
476
505
  code: "extension_already_installed",
@@ -494,7 +523,7 @@ function createGithubExtensionManager(options = {}) {
494
523
  });
495
524
  try {
496
525
  const reserved = await reservedSkillNames(options.reservedSkillNames);
497
- await writeRegistry(registryPath, now, (current) => ({
526
+ await writeRegistry(home, now, (current) => ({
498
527
  ...current,
499
528
  extensions: appendInstalledExtension(current, installed, reserved)
500
529
  }));
@@ -509,7 +538,7 @@ function createGithubExtensionManager(options = {}) {
509
538
  async function update(request) {
510
539
  const identity = parseGithubExtensionSource(request.source);
511
540
  return withExtensionLock(rootPath, identity.id, async () => {
512
- const registry = await readRegistry(registryPath);
541
+ const registry = await readRegistry(home);
513
542
  const existing = requireInstalled(registry, identity.id);
514
543
  const resolution = await github.resolve({
515
544
  source: existing.repositoryUrl,
@@ -533,7 +562,7 @@ function createGithubExtensionManager(options = {}) {
533
562
  });
534
563
  try {
535
564
  const reserved = await reservedSkillNames(options.reservedSkillNames);
536
- await writeRegistry(registryPath, now, (current) => ({
565
+ await writeRegistry(home, now, (current) => ({
537
566
  ...current,
538
567
  extensions: replaceInstalledExtension(current, installed, reserved)
539
568
  }));
@@ -568,19 +597,19 @@ function createGithubExtensionManager(options = {}) {
568
597
  }
569
598
  async function inspect(source) {
570
599
  const identity = parseGithubExtensionSource(source);
571
- const registry = await readRegistry(registryPath);
600
+ const registry = await readRegistry(home);
572
601
  return hydrateExtension(rootPath, requireInstalled(registry, identity.id));
573
602
  }
574
603
  async function remove(source) {
575
604
  const identity = parseGithubExtensionSource(source);
576
605
  return withExtensionLock(rootPath, identity.id, async () => {
577
- const registry = await readRegistry(registryPath);
606
+ const registry = await readRegistry(home);
578
607
  const existing = requireInstalled(registry, identity.id);
579
608
  const target = extensionDirectory(rootPath, identity.owner, identity.repo);
580
609
  const trash = `${target}.${randomUUID()}.remove`;
581
610
  if (existsSync(target)) await rename(target, trash);
582
611
  try {
583
- await writeRegistry(registryPath, now, (current) => ({
612
+ await writeRegistry(home, now, (current) => ({
584
613
  ...current,
585
614
  extensions: current.extensions.filter((extension) => extension.id !== existing.id)
586
615
  }));
@@ -797,28 +826,18 @@ function requireInstalled(registry, id) {
797
826
  status: 404
798
827
  });
799
828
  }
800
- async function readRegistry(registryPath) {
801
- try {
802
- const parsed = JSON.parse(await readFile(registryPath, "utf8"));
803
- if (parsed.schemaVersion !== REGISTRY_SCHEMA_VERSION || !Array.isArray(parsed.extensions)) {
804
- throw new Error("Extension registry has an unsupported format.");
805
- }
806
- return {
807
- schemaVersion: REGISTRY_SCHEMA_VERSION,
808
- updatedAt: typeof parsed.updatedAt === "string" ? parsed.updatedAt : null,
809
- extensions: parsed.extensions.filter(isStoredExtension)
810
- };
811
- } catch (error) {
812
- if (error.code === "ENOENT") return emptyRegistry();
813
- throw error;
814
- }
829
+ async function readRegistry(home) {
830
+ const value = getLocalRecord(home, "extension_installations", "registry")?.value;
831
+ if (!value) return emptyRegistry();
832
+ if (value.schemaVersion !== REGISTRY_SCHEMA_VERSION || !Array.isArray(value.extensions) || !value.extensions.every(isStoredExtension)) throw new Error("Extension registry has an unsupported format.");
833
+ return normalizeRegistry(value);
815
834
  }
816
- async function writeRegistry(registryPath, now, update) {
817
- await updatePrivateJsonFile(registryPath, emptyRegistry, (current) => ({
818
- ...update(normalizeRegistry(current)),
819
- schemaVersion: REGISTRY_SCHEMA_VERSION,
820
- updatedAt: now().toISOString()
821
- }));
835
+ async function writeRegistry(home, now, update) {
836
+ await withFileLock(path2.join(storagePaths(home).runtime, "extension-registry"), async () => {
837
+ const current = getLocalRecord(home, "extension_installations", "registry");
838
+ const next = update(await readRegistry(home));
839
+ putLocalRecord(home, "extension_installations", "registry", { ...next, schemaVersion: REGISTRY_SCHEMA_VERSION, updatedAt: now().toISOString() }, current?.revision ?? null);
840
+ });
822
841
  }
823
842
  function normalizeRegistry(value) {
824
843
  return {
@@ -859,513 +878,12 @@ function backupDirectory(rootPath, id) {
859
878
  }
860
879
  async function withExtensionLock(rootPath, id, operation) {
861
880
  const safeId = id.replace(/[^a-z0-9.-]+/gi, "-");
862
- const lockPath = path2.join(rootPath, ".locks", `${safeId}.lock`);
863
- await mkdir(path2.dirname(lockPath), { recursive: true, mode: 448 });
864
- const deadline = Date.now() + OPERATION_LOCK_TIMEOUT_MS;
865
- while (true) {
866
- try {
867
- await mkdir(lockPath, { mode: 448 });
868
- break;
869
- } catch (error) {
870
- if (error.code !== "EEXIST") throw error;
871
- const lockStat = await stat(lockPath).catch(() => null);
872
- if (lockStat && Date.now() - lockStat.mtimeMs > OPERATION_LOCK_STALE_MS) {
873
- await rm(lockPath, { recursive: true, force: true });
874
- continue;
875
- }
876
- if (Date.now() >= deadline) {
877
- throw new GithubExtensionError(`Timed out waiting for extension operation: ${id}`, {
878
- code: "extension_operation_busy",
879
- status: 409
880
- });
881
- }
882
- await new Promise((resolve) => setTimeout(resolve, 30));
883
- }
884
- }
885
- try {
886
- return await operation();
887
- } finally {
888
- await rm(lockPath, { recursive: true, force: true });
889
- }
881
+ return withFileLock(path2.join(rootPath, ".locks", safeId), operation, OPERATION_LOCK_TIMEOUT_MS);
890
882
  }
891
883
  function extensionSort(left, right) {
892
884
  return left.id.localeCompare(right.id);
893
885
  }
894
886
 
895
- // ../../packages/contracts/src/providers.ts
896
- var PROVIDER_IDS = [
897
- "openpond",
898
- "codex",
899
- "anthropic",
900
- "openai",
901
- "xai",
902
- "google",
903
- "openrouter",
904
- "deepseek",
905
- "zai",
906
- "moonshot",
907
- "together",
908
- "groq",
909
- "custom-openai-compatible"
910
- ];
911
- var ProviderIdSchema = external_exports.enum(PROVIDER_IDS);
912
- var ProviderLifecycleStatusSchema = external_exports.enum([
913
- "active",
914
- "preview",
915
- "planned",
916
- "deprecated"
917
- ]);
918
- var ProviderCredentialModeSchema = external_exports.enum([
919
- "openpond-account",
920
- "openpond-managed",
921
- "codex-login",
922
- "chatgpt-subscription",
923
- "local-byok",
924
- "hosted-byok",
925
- "custom"
926
- ]);
927
- var ProviderCredentialSourceSchema = external_exports.enum([
928
- "none",
929
- "local_secret",
930
- "env",
931
- "openpond_account",
932
- "codex_login",
933
- "chatgpt_subscription",
934
- "hosted"
935
- ]);
936
- var ProviderCredentialStatusSchema = external_exports.object({
937
- connected: external_exports.boolean().default(false),
938
- source: ProviderCredentialSourceSchema.default("none"),
939
- redacted: external_exports.string().nullable().default(null),
940
- lastValidatedAt: external_exports.string().nullable().default(null),
941
- lastError: external_exports.string().nullable().default(null)
942
- });
943
- var ProviderRoutingSchema = external_exports.object({
944
- hostedOpChat: external_exports.boolean().default(false),
945
- localRuntime: external_exports.boolean().default(true),
946
- localByok: external_exports.boolean().default(false),
947
- hostedByok: external_exports.boolean().default(false)
948
- });
949
- var ProviderModelDiscoverySchema = external_exports.enum([
950
- "hosted",
951
- "provider",
952
- "manual",
953
- "none"
954
- ]);
955
- var ProviderCapabilitiesSchema = external_exports.object({
956
- chatCompletions: external_exports.boolean().default(true),
957
- streaming: external_exports.boolean().default(true),
958
- modelDiscovery: ProviderModelDiscoverySchema.default("none"),
959
- toolCalling: external_exports.boolean().default(false),
960
- reasoning: external_exports.boolean().default(false),
961
- imageInput: external_exports.boolean().default(false),
962
- structuredOutput: external_exports.boolean().default(false)
963
- });
964
- var ProviderModelSourceSchema = external_exports.enum([
965
- "hosted",
966
- "provider",
967
- "curated",
968
- "manual",
969
- "cache"
970
- ]);
971
- var ProviderModelCapabilitiesSchema = external_exports.object({
972
- streaming: external_exports.boolean().default(true),
973
- toolCalling: external_exports.boolean().default(false),
974
- reasoning: external_exports.boolean().default(false),
975
- vision: external_exports.boolean().default(false),
976
- structuredOutput: external_exports.boolean().default(false)
977
- });
978
- var ProviderModelSchema = external_exports.object({
979
- id: external_exports.string().trim().min(1).max(300),
980
- providerId: ProviderIdSchema,
981
- displayName: external_exports.string().trim().min(1).max(300),
982
- contextWindow: external_exports.number().int().positive().nullable().default(null),
983
- outputLimit: external_exports.number().int().positive().nullable().default(null),
984
- lifecycleStatus: ProviderLifecycleStatusSchema.default("active"),
985
- source: ProviderModelSourceSchema,
986
- capabilities: ProviderModelCapabilitiesSchema.default(
987
- () => ProviderModelCapabilitiesSchema.parse({})
988
- ),
989
- raw: external_exports.record(external_exports.string(), external_exports.unknown()).optional()
990
- });
991
- var ProviderModelCacheSchema = external_exports.object({
992
- providerId: ProviderIdSchema,
993
- models: external_exports.array(ProviderModelSchema).default([]),
994
- fetchedAt: external_exports.string().nullable().default(null),
995
- lastError: external_exports.string().nullable().default(null),
996
- source: external_exports.enum(["none", "hosted", "provider", "curated", "manual"]).default("none")
997
- });
998
- var ProviderConfigSchema = external_exports.object({
999
- enabled: external_exports.boolean().default(false),
1000
- baseUrl: external_exports.string().trim().min(1).max(2048).nullable().default(null),
1001
- defaultModel: external_exports.string().trim().min(1).max(300).nullable().default(null),
1002
- modelOverrides: external_exports.array(external_exports.string().trim().min(1).max(300)).max(500).default([]),
1003
- updatedAt: external_exports.string().nullable().default(null)
1004
- });
1005
- var ProviderConfigPatchSchema = external_exports.object({
1006
- enabled: external_exports.boolean().optional(),
1007
- baseUrl: external_exports.string().trim().min(1).max(2048).nullable().optional(),
1008
- defaultModel: external_exports.string().trim().min(1).max(300).nullable().optional(),
1009
- modelOverrides: external_exports.array(external_exports.string().trim().min(1).max(300)).max(500).optional()
1010
- });
1011
- var ProviderCatalogModelSchema = external_exports.object({
1012
- id: external_exports.string().trim().min(1).max(300),
1013
- displayName: external_exports.string().trim().min(1).max(300),
1014
- contextWindow: external_exports.number().int().positive().nullable().optional(),
1015
- outputLimit: external_exports.number().int().positive().nullable().optional(),
1016
- lifecycleStatus: ProviderLifecycleStatusSchema.optional(),
1017
- capabilities: ProviderModelCapabilitiesSchema.partial().optional()
1018
- });
1019
- var ProviderCatalogProviderSchema = external_exports.object({
1020
- id: ProviderIdSchema,
1021
- displayName: external_exports.string().trim().min(1).max(160),
1022
- lifecycleStatus: ProviderLifecycleStatusSchema.default("active"),
1023
- credentialModes: external_exports.array(ProviderCredentialModeSchema).default([]),
1024
- routing: ProviderRoutingSchema,
1025
- capabilities: ProviderCapabilitiesSchema,
1026
- defaultEnabled: external_exports.boolean().optional(),
1027
- defaultBaseUrl: external_exports.string().trim().min(1).max(2048).nullable().optional(),
1028
- defaultModel: external_exports.string().trim().min(1).max(300).nullable().optional(),
1029
- modelCacheSource: external_exports.enum(["none", "hosted", "provider", "curated", "manual"]),
1030
- models: external_exports.array(ProviderCatalogModelSchema).default([])
1031
- });
1032
- var ProviderCatalogSchema = external_exports.object({
1033
- version: external_exports.literal(1).default(1),
1034
- generatedAt: external_exports.string().datetime(),
1035
- providers: external_exports.array(ProviderCatalogProviderSchema)
1036
- });
1037
- var ProviderStatusSchema = external_exports.object({
1038
- id: ProviderIdSchema,
1039
- displayName: external_exports.string().trim().min(1).max(160),
1040
- lifecycleStatus: ProviderLifecycleStatusSchema.default("active"),
1041
- credentialModes: external_exports.array(ProviderCredentialModeSchema).default([]),
1042
- routing: ProviderRoutingSchema.default(() => ProviderRoutingSchema.parse({})),
1043
- capabilities: ProviderCapabilitiesSchema.default(
1044
- () => ProviderCapabilitiesSchema.parse({})
1045
- ),
1046
- credential: ProviderCredentialStatusSchema.default(
1047
- () => ProviderCredentialStatusSchema.parse({})
1048
- ),
1049
- enabled: external_exports.boolean().default(false),
1050
- available: external_exports.boolean().default(false),
1051
- defaultModel: external_exports.string().trim().min(1).max(300).nullable().default(null),
1052
- modelIds: external_exports.array(external_exports.string().trim().min(1).max(300)).max(1e3).default([]),
1053
- lastError: external_exports.string().nullable().default(null)
1054
- });
1055
- var ProviderSettingsSchema = external_exports.object({
1056
- version: external_exports.literal(1).default(1),
1057
- providers: external_exports.record(external_exports.string(), ProviderConfigSchema).default({}),
1058
- statuses: external_exports.record(external_exports.string(), ProviderStatusSchema).default({}),
1059
- modelCaches: external_exports.record(external_exports.string(), ProviderModelCacheSchema).default({}),
1060
- updatedAt: external_exports.string().nullable().default(null)
1061
- });
1062
- var ChatModelRefSchema = external_exports.object({
1063
- providerId: ProviderIdSchema,
1064
- modelId: external_exports.string().trim().min(1).max(300)
1065
- });
1066
- var ProviderSettingsUpdateSchema = external_exports.object({
1067
- providers: external_exports.record(external_exports.string(), ProviderConfigPatchSchema).optional()
1068
- });
1069
- var ProviderCredentialWriteRequestSchema = external_exports.object({
1070
- source: external_exports.enum(["local_secret", "env"]).default("local_secret"),
1071
- value: external_exports.string().min(1).max(2e4).optional(),
1072
- envVar: external_exports.string().trim().min(1).max(160).optional()
1073
- }).superRefine((value, context) => {
1074
- if (value.source === "env" && !value.envVar) {
1075
- context.addIssue({
1076
- code: "custom",
1077
- path: ["envVar"],
1078
- message: "envVar is required when provider credential source is env."
1079
- });
1080
- }
1081
- if (value.source === "local_secret" && !value.value) {
1082
- context.addIssue({
1083
- code: "custom",
1084
- path: ["value"],
1085
- message: "value is required when provider credential source is local_secret."
1086
- });
1087
- }
1088
- });
1089
- var ProviderCredentialDeleteRequestSchema = external_exports.object({
1090
- source: external_exports.enum(["local_secret", "env", "chatgpt_subscription"]).optional()
1091
- });
1092
- var ProviderValidationRequestSchema = external_exports.object({
1093
- modelId: external_exports.string().trim().min(1).max(300).optional(),
1094
- baseUrl: external_exports.string().trim().min(1).max(2048).optional()
1095
- });
1096
- var ProviderModelsRequestSchema = external_exports.object({
1097
- query: external_exports.string().trim().max(200).optional(),
1098
- refresh: external_exports.boolean().default(false),
1099
- limit: external_exports.number().int().positive().max(500).default(100)
1100
- });
1101
- var ProviderModelsRefreshRequestSchema = external_exports.object({
1102
- query: external_exports.string().trim().max(200).optional(),
1103
- force: external_exports.boolean().default(false)
1104
- });
1105
-
1106
- // ../../packages/contracts/src/subagents.ts
1107
- var SUBAGENT_BUILT_IN_ROLE_IDS = [
1108
- "coding",
1109
- "research",
1110
- "review",
1111
- "test",
1112
- "docs",
1113
- "planner",
1114
- "summarizer"
1115
- ];
1116
- var SubagentBuiltInRoleIdSchema = external_exports.enum(SUBAGENT_BUILT_IN_ROLE_IDS);
1117
- var SubagentRoleIdSchema = external_exports.string().trim().min(1).max(80).regex(/^[a-z][a-z0-9_-]*$/);
1118
- var SubagentIsolationModeSchema = external_exports.enum(["none", "worktree", "copy_on_write"]);
1119
- var SubagentToolPolicySchema = external_exports.enum(["read_only", "workspace_write", "full_tools"]);
1120
- var SubagentPeerMessagesSchema = external_exports.enum(["disabled", "parent_scoped"]);
1121
- var SubagentDelegationModeSchema = external_exports.enum(["manual", "balanced", "proactive"]);
1122
- var SubagentRunStatusSchema = external_exports.enum([
1123
- "queued",
1124
- "running",
1125
- "completed",
1126
- "failed",
1127
- "cancelled",
1128
- "needs_resume"
1129
- ]);
1130
- var SUBAGENT_RUNTIME_EVENT_NAMES = [
1131
- "subagent.started",
1132
- "subagent.reported",
1133
- "subagent.completed",
1134
- "subagent.progress",
1135
- "subagent.failed",
1136
- "subagent.cancelled",
1137
- "subagent.cleanup",
1138
- "subagent.workspace_retained",
1139
- "subagent.workspace_retention_expiring",
1140
- "subagent.archived",
1141
- "subagent.message"
1142
- ];
1143
- var SubagentRuntimeEventNameSchema = external_exports.enum(SUBAGENT_RUNTIME_EVENT_NAMES);
1144
- var SUBAGENT_ROLE_PRESETS = [
1145
- {
1146
- id: "coding",
1147
- label: "Coding",
1148
- description: "Make scoped code changes and return patch, diff, and test evidence.",
1149
- defaultToolPolicy: "full_tools"
1150
- },
1151
- {
1152
- id: "research",
1153
- label: "Research",
1154
- description: "Inspect docs, code, web or repo context and return cited findings.",
1155
- defaultToolPolicy: "full_tools"
1156
- },
1157
- {
1158
- id: "review",
1159
- label: "Review",
1160
- description: "Inspect diffs or implementation plans and return ranked findings.",
1161
- defaultToolPolicy: "full_tools"
1162
- },
1163
- {
1164
- id: "test",
1165
- label: "Test",
1166
- description: "Run or design validation in isolation and return command evidence.",
1167
- defaultToolPolicy: "full_tools"
1168
- },
1169
- {
1170
- id: "docs",
1171
- label: "Docs",
1172
- description: "Update or draft project documentation in an isolated target.",
1173
- defaultToolPolicy: "full_tools"
1174
- },
1175
- {
1176
- id: "planner",
1177
- label: "Planner",
1178
- description: "Decompose a goal into child assignments and context packs.",
1179
- defaultToolPolicy: "full_tools"
1180
- },
1181
- {
1182
- id: "summarizer",
1183
- label: "Summarizer",
1184
- description: "Compact transcripts, child results, and goal state for parent context.",
1185
- defaultToolPolicy: "full_tools"
1186
- }
1187
- ];
1188
- var SubagentRoleSettingsSchema = external_exports.object({
1189
- id: SubagentRoleIdSchema,
1190
- enabled: external_exports.boolean().default(true),
1191
- modelRef: ChatModelRefSchema.nullable().default(null),
1192
- isolationMode: SubagentIsolationModeSchema.default("none"),
1193
- maxConcurrentRuns: external_exports.number().int().min(1).max(16).default(1),
1194
- toolPolicy: SubagentToolPolicySchema.default("read_only"),
1195
- background: external_exports.boolean().default(true),
1196
- peerMessages: SubagentPeerMessagesSchema.default("parent_scoped")
1197
- });
1198
- var SubagentPreferencesSchema = external_exports.object({
1199
- enabled: external_exports.boolean().default(true),
1200
- workspaceDefaultsVersion: external_exports.literal(1).default(1),
1201
- toolDefaultsVersion: external_exports.literal(1).default(1),
1202
- delegationMode: SubagentDelegationModeSchema.default("manual"),
1203
- defaultModelRef: ChatModelRefSchema.nullable().default(null),
1204
- roles: external_exports.array(SubagentRoleSettingsSchema).max(64).default(() => defaultSubagentRoleSettings()),
1205
- maxConcurrentRuns: external_exports.number().int().min(1).max(32).default(4),
1206
- maxConcurrentRunsPerProvider: external_exports.number().int().min(1).max(32).nullable().default(2),
1207
- maxConcurrentRunsPerWorkspaceTarget: external_exports.number().int().min(1).max(32).nullable().default(1)
1208
- }).transform((preferences) => ({
1209
- ...preferences,
1210
- roles: normalizeSubagentRoleSettings(preferences.roles)
1211
- }));
1212
- var SubagentRefSchema = external_exports.object({
1213
- kind: external_exports.enum(["session", "turn", "file", "diff", "artifact"]),
1214
- id: external_exports.string().trim().min(1).max(500),
1215
- label: external_exports.string().trim().min(1).max(500)
1216
- });
1217
- var SubagentEvidenceRetentionPolicySchema = external_exports.object({
1218
- kind: external_exports.enum(["retain_with_parent"]).default("retain_with_parent"),
1219
- messageRetentionDays: external_exports.number().int().min(1).max(3650).nullable().default(null),
1220
- artifactRetentionDays: external_exports.number().int().min(1).max(3650).nullable().default(null),
1221
- cleanupAfterExpiry: external_exports.boolean().default(false)
1222
- }).default(() => ({
1223
- kind: "retain_with_parent",
1224
- messageRetentionDays: null,
1225
- artifactRetentionDays: null,
1226
- cleanupAfterExpiry: false
1227
- }));
1228
- var SubagentProgressPhaseSchema = external_exports.enum(["orient", "edit", "validate", "report"]);
1229
- var SubagentValidationAttemptSchema = external_exports.object({
1230
- command: external_exports.string().trim().min(1).max(2e3),
1231
- status: external_exports.enum(["passed", "failed", "unknown"]).default("unknown"),
1232
- exitCode: external_exports.number().int().nullable().default(null),
1233
- outputSummary: external_exports.string().trim().max(5e3).nullable().default(null),
1234
- startedAt: external_exports.string().nullable().default(null),
1235
- completedAt: external_exports.string().nullable().default(null)
1236
- });
1237
- var SubagentProgressSchema = external_exports.object({
1238
- phase: SubagentProgressPhaseSchema.default("orient"),
1239
- inspectedFiles: external_exports.array(external_exports.string().trim().min(1).max(1e3)).max(500).default([]),
1240
- inspectedResources: external_exports.array(external_exports.string().trim().min(1).max(1e3)).max(500).default([]),
1241
- repeatedSearches: external_exports.array(external_exports.string().trim().min(1).max(1e3)).max(200).default([]),
1242
- repeatedReads: external_exports.array(external_exports.string().trim().min(1).max(1e3)).max(200).default([]),
1243
- repeatedCommands: external_exports.array(external_exports.string().trim().min(1).max(1e3)).max(200).default([]),
1244
- changedFiles: external_exports.array(external_exports.string().trim().min(1).max(1e3)).max(500).default([]),
1245
- patchRefs: external_exports.array(SubagentRefSchema).max(100).default([]),
1246
- validationAttempts: external_exports.array(SubagentValidationAttemptSchema).max(100).default([]),
1247
- latestMeaningfulActivity: external_exports.string().trim().max(5e3).nullable().default(null),
1248
- currentBlocker: external_exports.string().trim().max(5e3).nullable().default(null),
1249
- updatedAt: external_exports.string().nullable().default(null)
1250
- }).default(() => ({
1251
- phase: "orient",
1252
- inspectedFiles: [],
1253
- inspectedResources: [],
1254
- repeatedSearches: [],
1255
- repeatedReads: [],
1256
- repeatedCommands: [],
1257
- changedFiles: [],
1258
- patchRefs: [],
1259
- validationAttempts: [],
1260
- latestMeaningfulActivity: null,
1261
- currentBlocker: null,
1262
- updatedAt: null
1263
- }));
1264
- var SubagentReportSchema = external_exports.object({
1265
- summary: external_exports.string().trim().max(2e4).default(""),
1266
- findings: external_exports.array(external_exports.string().trim().min(1).max(5e3)).max(200).default([]),
1267
- artifacts: external_exports.array(SubagentRefSchema).max(200).default([]),
1268
- patchRef: SubagentRefSchema.nullable().default(null),
1269
- diffRef: SubagentRefSchema.nullable().default(null),
1270
- testsRun: external_exports.array(external_exports.string().trim().min(1).max(2e3)).max(100).default([]),
1271
- blockers: external_exports.array(external_exports.string().trim().min(1).max(5e3)).max(100).default([]),
1272
- confidence: external_exports.enum(["low", "medium", "high"]).nullable().default(null),
1273
- followUpNeeded: external_exports.boolean().default(false)
1274
- });
1275
- var SubagentRunSchema = external_exports.object({
1276
- id: external_exports.string().trim().min(1).max(200),
1277
- parentSessionId: external_exports.string().trim().min(1).max(200),
1278
- parentTurnId: external_exports.string().trim().min(1).max(200).nullable().default(null),
1279
- childSessionId: external_exports.string().trim().min(1).max(200).nullable().default(null),
1280
- roleId: SubagentRoleIdSchema,
1281
- objective: external_exports.string().trim().min(1).max(5e4),
1282
- modelRef: ChatModelRefSchema.nullable().default(null),
1283
- isolationMode: SubagentIsolationModeSchema.default("none"),
1284
- toolPolicy: SubagentToolPolicySchema.default("read_only"),
1285
- background: external_exports.boolean().default(true),
1286
- peerMessages: SubagentPeerMessagesSchema.default("parent_scoped"),
1287
- status: SubagentRunStatusSchema.default("queued"),
1288
- progress: SubagentProgressSchema,
1289
- evidenceRetention: SubagentEvidenceRetentionPolicySchema,
1290
- createdAt: external_exports.string(),
1291
- startedAt: external_exports.string().nullable().default(null),
1292
- completedAt: external_exports.string().nullable().default(null),
1293
- updatedAt: external_exports.string().nullable().default(null),
1294
- error: external_exports.string().nullable().default(null),
1295
- report: SubagentReportSchema.nullable().default(null),
1296
- metadata: external_exports.record(external_exports.string(), external_exports.unknown()).optional().default({})
1297
- });
1298
- var SubagentLifecycleActionSchema = external_exports.enum(["cleanup", "archive", "cleanup_and_archive"]);
1299
- var SubagentLifecycleActionRequestSchema = external_exports.object({
1300
- action: SubagentLifecycleActionSchema,
1301
- reason: external_exports.string().trim().min(1).max(2e3).nullable().default(null)
1302
- });
1303
- var SubagentLifecycleActionResponseSchema = external_exports.object({
1304
- action: SubagentLifecycleActionSchema,
1305
- run: SubagentRunSchema,
1306
- workspaceCleanup: external_exports.record(external_exports.string(), external_exports.unknown()).nullable().default(null),
1307
- sessionArchive: external_exports.record(external_exports.string(), external_exports.unknown()).nullable().default(null),
1308
- nextStep: external_exports.string()
1309
- });
1310
- var SubagentMessageKindSchema = external_exports.enum([
1311
- "question",
1312
- "answer",
1313
- "handoff",
1314
- "artifact",
1315
- "status",
1316
- "blocker"
1317
- ]);
1318
- var SubagentMessagePrioritySchema = external_exports.enum(["normal", "interrupt"]);
1319
- var SubagentMessageDeliverySchema = external_exports.object({
1320
- status: external_exports.enum(["pending", "delivered", "undelivered"]).default("pending"),
1321
- deliveredRunIds: external_exports.array(external_exports.string().trim().min(1).max(200)).max(200).default([]),
1322
- acknowledgedRunIds: external_exports.array(external_exports.string().trim().min(1).max(200)).max(200).default([]),
1323
- deliveredParentSessionId: external_exports.string().trim().min(1).max(200).nullable().default(null),
1324
- acknowledgedParentSessionId: external_exports.string().trim().min(1).max(200).nullable().default(null),
1325
- wakeRequestedParentSessionId: external_exports.string().trim().min(1).max(200).nullable().default(null),
1326
- wakeQueuedParentSessionId: external_exports.string().trim().min(1).max(200).nullable().default(null),
1327
- wakeDeferredParentSessionId: external_exports.string().trim().min(1).max(200).nullable().default(null),
1328
- wakeParentReason: external_exports.string().trim().min(1).max(1e3).nullable().default(null),
1329
- wakeRequestedRunIds: external_exports.array(external_exports.string().trim().min(1).max(200)).max(200).default([]),
1330
- wakeInterruptedRunIds: external_exports.array(external_exports.string().trim().min(1).max(200)).max(200).default([]),
1331
- wakeDeferredRunIds: external_exports.array(external_exports.string().trim().min(1).max(200)).max(200).default([]),
1332
- reason: external_exports.string().trim().min(1).max(1e3).nullable().default(null)
1333
- });
1334
- var SubagentMessageSchema = external_exports.object({
1335
- id: external_exports.string().trim().min(1).max(200),
1336
- fromRunId: external_exports.string().trim().min(1).max(200),
1337
- toRunId: external_exports.string().trim().min(1).max(200).nullable().default(null),
1338
- toRole: SubagentRoleIdSchema.nullable().default(null),
1339
- kind: SubagentMessageKindSchema,
1340
- priority: SubagentMessagePrioritySchema.optional(),
1341
- body: external_exports.string().trim().min(1).max(5e4),
1342
- refs: external_exports.array(SubagentRefSchema).max(100).default([]),
1343
- delivery: SubagentMessageDeliverySchema.optional(),
1344
- createdAt: external_exports.string()
1345
- });
1346
- function defaultSubagentRoleSettings() {
1347
- return SUBAGENT_ROLE_PRESETS.map(
1348
- (preset) => SubagentRoleSettingsSchema.parse({
1349
- id: preset.id,
1350
- toolPolicy: preset.defaultToolPolicy
1351
- })
1352
- );
1353
- }
1354
- function normalizeSubagentRoleSettings(roles) {
1355
- const builtIns = defaultSubagentRoleSettings();
1356
- const roleById = new Map(builtIns.map((role) => [role.id, role]));
1357
- const customRoles = [];
1358
- for (const role of roles ?? []) {
1359
- const normalized = SubagentRoleSettingsSchema.parse(role);
1360
- if (roleById.has(normalized.id)) {
1361
- roleById.set(normalized.id, normalized);
1362
- } else {
1363
- customRoles.push(normalized);
1364
- }
1365
- }
1366
- return [...builtIns.map((role) => roleById.get(role.id) ?? role), ...customRoles];
1367
- }
1368
-
1369
887
  // ../../packages/contracts/src/runtime.ts
1370
888
  var RuntimeEventNameSchema = external_exports.enum([
1371
889
  "session.started",
@@ -1951,194 +1469,6 @@ var CodexStatusSchema = external_exports.object({
1951
1469
  })
1952
1470
  });
1953
1471
 
1954
- // ../../packages/contracts/src/settings.ts
1955
- var DEFAULT_OPENPOND_CHAT_MODEL = "openpond-chat";
1956
- var DEFAULT_CHAT_PROVIDER = "openpond";
1957
- var DEFAULT_CHAT_MODEL = DEFAULT_OPENPOND_CHAT_MODEL;
1958
- var DEFAULT_CODEX_PERMISSION_MODE = "default";
1959
- var DEFAULT_CODEX_REASONING_EFFORT = "high";
1960
- var DEFAULT_OPENPOND_COMMAND_ACCESS_MODE = "ask";
1961
- var ChatProviderSchema = ProviderIdSchema;
1962
- var CodexPermissionModeSchema = external_exports.enum(["default", "auto-review", "full-access"]);
1963
- var OpenPondCommandAccessModeSchema = external_exports.enum(["ask", "full-access", "disabled"]);
1964
- var CodexReasoningEffortSchema = external_exports.enum(["low", "medium", "high", "xhigh"]);
1965
- var WorkspaceKindSchema = external_exports.enum([
1966
- "sandbox_app",
1967
- "local_project",
1968
- "sandbox",
1969
- "sandbox_template"
1970
- ]);
1971
- var HostedContextProviderSchema = external_exports.enum(["openpond"]);
1972
- var ContextUsageSourceSchema = external_exports.enum(["provider_usage", "provider_tokenizer", "model_family", "heuristic"]);
1973
- var ContextUsageSnapshotSchema = external_exports.object({
1974
- provider: ChatProviderSchema,
1975
- model: external_exports.string().min(1),
1976
- usedTokens: external_exports.number().int().nonnegative(),
1977
- maxContextTokens: external_exports.number().int().positive(),
1978
- usableContextTokens: external_exports.number().int().positive(),
1979
- percentFull: external_exports.number().min(0).max(100),
1980
- source: ContextUsageSourceSchema,
1981
- updatedAtEventId: external_exports.string().nullable()
1982
- });
1983
- var SidebarSectionsCollapsedSchema = external_exports.object({
1984
- pinned: external_exports.boolean().default(false),
1985
- projects: external_exports.boolean().default(false),
1986
- cloudProjects: external_exports.boolean().default(false),
1987
- chats: external_exports.boolean().default(false),
1988
- savedForLater: external_exports.boolean().default(true)
1989
- });
1990
- var WorkspaceLspGlobalModeSchema = external_exports.enum(["auto", "off"]);
1991
- var WorkspaceLspLanguageIdSchema = external_exports.enum(["typescript", "python", "rust"]);
1992
- var WorkspaceLspLanguageModeSchema = external_exports.enum(["auto", "disabled", "custom"]);
1993
- var WorkspaceLspLanguagePreferenceSchema = external_exports.object({
1994
- mode: WorkspaceLspLanguageModeSchema.default("auto"),
1995
- customCommand: external_exports.string().trim().max(4096).default("")
1996
- });
1997
- var WorkspaceEditorPreferencesSchema = external_exports.object({
1998
- languageServers: WorkspaceLspGlobalModeSchema.default("auto"),
1999
- diagnosticsWhileEditing: external_exports.boolean().default(true),
2000
- checkOnSave: external_exports.boolean().default(true),
2001
- languages: external_exports.object({
2002
- typescript: WorkspaceLspLanguagePreferenceSchema.optional().default(
2003
- () => WorkspaceLspLanguagePreferenceSchema.parse({})
2004
- ),
2005
- python: WorkspaceLspLanguagePreferenceSchema.optional().default(
2006
- () => WorkspaceLspLanguagePreferenceSchema.parse({})
2007
- ),
2008
- rust: WorkspaceLspLanguagePreferenceSchema.optional().default(
2009
- () => WorkspaceLspLanguagePreferenceSchema.parse({})
2010
- )
2011
- }).optional().default(() => ({
2012
- typescript: WorkspaceLspLanguagePreferenceSchema.parse({}),
2013
- python: WorkspaceLspLanguagePreferenceSchema.parse({}),
2014
- rust: WorkspaceLspLanguagePreferenceSchema.parse({})
2015
- }))
2016
- });
2017
- var WorkspaceLspSettingsStatusSchema = external_exports.object({
2018
- language: WorkspaceLspLanguageIdSchema,
2019
- label: external_exports.string(),
2020
- mode: WorkspaceLspLanguageModeSchema,
2021
- status: external_exports.enum(["found", "missing", "disabled", "error"]),
2022
- command: external_exports.string().nullable(),
2023
- message: external_exports.string().nullable()
2024
- });
2025
- var WorkspaceLspSettingsStatusResponseSchema = external_exports.object({
2026
- settings: WorkspaceEditorPreferencesSchema,
2027
- languages: external_exports.array(WorkspaceLspSettingsStatusSchema),
2028
- updatedAt: external_exports.string()
2029
- });
2030
- var WorkspaceLspRuntimeClientStatusSchema = external_exports.object({
2031
- id: external_exports.string(),
2032
- root: external_exports.string(),
2033
- status: external_exports.enum(["starting", "connected", "unavailable", "error"]),
2034
- message: external_exports.string().nullable().optional().default(null),
2035
- openedDocuments: external_exports.number().int().nonnegative(),
2036
- pendingRequests: external_exports.number().int().nonnegative(),
2037
- lastUsedAt: external_exports.string(),
2038
- stderrTail: external_exports.string()
2039
- });
2040
- var WorkspaceLspRuntimeStatusResponseSchema = external_exports.object({
2041
- clients: external_exports.array(WorkspaceLspRuntimeClientStatusSchema),
2042
- maxClients: external_exports.number().int().positive(),
2043
- idleTimeoutMs: external_exports.number().int().positive(),
2044
- updatedAt: external_exports.string()
2045
- });
2046
- var ContextCompactionPreferencesSchema = external_exports.object({
2047
- autoEnabled: external_exports.boolean().default(true),
2048
- triggerPercent: external_exports.number().int().min(50).max(95).default(85),
2049
- summaryModel: external_exports.enum(["same_model"]).default("same_model")
2050
- });
2051
- var TrainingPreferencesSchema = external_exports.object({
2052
- defaultModelRef: ChatModelRefSchema.nullable().default(null),
2053
- creationMode: external_exports.enum(["defaults", "customize"]).default("customize"),
2054
- autoApproveEvidence: external_exports.boolean().default(false)
2055
- });
2056
- var AppPreferencesSchema = external_exports.object({
2057
- defaultChatProvider: ChatProviderSchema.default(DEFAULT_CHAT_PROVIDER),
2058
- defaultChatModel: external_exports.string().min(1).default(DEFAULT_CHAT_MODEL),
2059
- defaultChatModelRef: ChatModelRefSchema.nullable().optional(),
2060
- subagents: SubagentPreferencesSchema.optional().default(() => SubagentPreferencesSchema.parse({})),
2061
- codexPermissionMode: CodexPermissionModeSchema.default(DEFAULT_CODEX_PERMISSION_MODE),
2062
- codexReasoningEffort: CodexReasoningEffortSchema.default(DEFAULT_CODEX_REASONING_EFFORT),
2063
- openPondCommandAccessMode: OpenPondCommandAccessModeSchema.default(DEFAULT_OPENPOND_COMMAND_ACCESS_MODE),
2064
- defaultBranchPrefix: external_exports.string().trim().max(48).default("feat/"),
2065
- defaultNewProjectDirectory: external_exports.string().trim().max(4096).default(""),
2066
- defaultTeamId: external_exports.string().trim().max(191).nullable().default(null),
2067
- advancedWorkspaceControls: external_exports.boolean().default(false),
2068
- steerActiveResponses: external_exports.boolean().default(true),
2069
- contextCompaction: ContextCompactionPreferencesSchema.optional().default(
2070
- () => ContextCompactionPreferencesSchema.parse({})
2071
- ),
2072
- training: TrainingPreferencesSchema.optional().default(() => TrainingPreferencesSchema.parse({})),
2073
- sidebarWidth: external_exports.number().int().min(244).max(560).default(332),
2074
- diffPanelWidth: external_exports.number().int().min(320).max(2400).default(560),
2075
- sidebarSectionsCollapsed: SidebarSectionsCollapsedSchema.optional().default(() => SidebarSectionsCollapsedSchema.parse({})),
2076
- editor: WorkspaceEditorPreferencesSchema.optional().default(() => WorkspaceEditorPreferencesSchema.parse({}))
2077
- });
2078
- var DEFAULT_PERSONALIZATION_TEMPLATE_ID = "default";
2079
- var PERSONALIZATION_TEMPLATES = [
2080
- {
2081
- id: "default",
2082
- name: "Balanced",
2083
- source: "built_in",
2084
- description: "Clear, useful, and concise.",
2085
- content: "You are OpenPond Chat, a clear and useful AI assistant.\nBe concise, accurate, and direct.\nDo not use emojis.\nAsk only when missing information would materially change the answer.\nPrioritize practical next steps."
2086
- },
2087
- {
2088
- id: "pragmatic",
2089
- name: "Pragmatic",
2090
- source: "built_in",
2091
- description: "Direct, practical, and engineering-minded.",
2092
- content: "You are a pragmatic AI assistant with strong engineering judgment.\nBe direct, concrete, and outcome-focused.\nDo not use emojis.\nPrefer simple working solutions over clever abstractions.\nCall out weak assumptions plainly."
2093
- },
2094
- {
2095
- id: "friendly",
2096
- name: "Friendly",
2097
- source: "built_in",
2098
- description: "Warm, conversational, and approachable.",
2099
- content: "You are a friendly AI assistant.\nUse a warm, conversational tone without filler.\nDo not use emojis.\nExplain decisions clearly and keep the user moving.\nBe patient when clarifying tradeoffs."
2100
- },
2101
- {
2102
- id: "formal",
2103
- name: "Formal",
2104
- source: "built_in",
2105
- description: "Polished, careful, and professional.",
2106
- content: "You are a formal AI assistant.\nUse precise, professional language.\nDo not use emojis.\nStructure answers clearly and avoid casual phrasing.\nState uncertainty and assumptions explicitly."
2107
- },
2108
- {
2109
- id: "technical",
2110
- name: "Technical",
2111
- source: "built_in",
2112
- description: "Precise, detailed, and implementation-focused.",
2113
- content: "You are a technical AI assistant.\nPrioritize correctness, implementation detail, and edge cases.\nDo not use emojis.\nUse concise explanations, but include necessary specifics.\nSurface risks, constraints, and verification steps."
2114
- }
2115
- ];
2116
- var PersonalizationTemplateIdSchema = external_exports.string().trim().min(1).max(120);
2117
- var PersonalizationTemplateSchema = external_exports.object({
2118
- id: PersonalizationTemplateIdSchema,
2119
- name: external_exports.string(),
2120
- source: external_exports.enum(["built_in", "custom"]).default("custom"),
2121
- description: external_exports.string(),
2122
- content: external_exports.string()
2123
- });
2124
- var PersonalizationSettingsSchema = external_exports.object({
2125
- activeTemplateId: PersonalizationTemplateIdSchema.default(DEFAULT_PERSONALIZATION_TEMPLATE_ID),
2126
- customized: external_exports.boolean().default(false),
2127
- soul: external_exports.string(),
2128
- soulPath: external_exports.string().nullable(),
2129
- updatedAt: external_exports.string().nullable(),
2130
- templates: external_exports.array(PersonalizationTemplateSchema).default(() => [...PERSONALIZATION_TEMPLATES])
2131
- });
2132
- var ServerStatusSchema = external_exports.object({
2133
- id: external_exports.string(),
2134
- host: external_exports.string(),
2135
- port: external_exports.number(),
2136
- startedAt: external_exports.string(),
2137
- storePath: external_exports.string(),
2138
- version: external_exports.string(),
2139
- runtimeVersion: external_exports.string()
2140
- });
2141
-
2142
1472
  // ../../packages/contracts/src/experiences.ts
2143
1473
  var ExperienceSchema = external_exports.enum(["chat", "work", "development"]);
2144
1474
  var ProductAreaSchema = external_exports.enum(["chat", "models", "development"]);
@@ -3252,6 +2582,7 @@ var BootstrapPayloadSchema = external_exports.object({
3252
2582
  server: ServerStatusSchema,
3253
2583
  account: AccountStateSchema,
3254
2584
  codex: CodexStatusSchema,
2585
+ configuration: external_exports.object({ rawRevision: external_exports.string(), effectiveRevision: external_exports.string(), sources: external_exports.array(external_exports.object({ layer: external_exports.string(), path: external_exports.string(), revision: external_exports.string() })), provenance: external_exports.record(external_exports.string(), external_exports.object({ layer: external_exports.string(), path: external_exports.string(), revision: external_exports.string() })) }).optional(),
3255
2586
  preferences: AppPreferencesSchema.optional().default(() => AppPreferencesSchema.parse({})),
3256
2587
  providers: ProviderSettingsSchema.optional().default(() => ProviderSettingsSchema.parse({})),
3257
2588
  personalization: PersonalizationSettingsSchema.optional().default(
@@ -3771,6 +3102,7 @@ var ReorderSidebarAppsRequestSchema = external_exports.object({
3771
3102
  appIds: external_exports.array(external_exports.string()).min(1)
3772
3103
  });
3773
3104
  var UpdateAppPreferencesRequestSchema = external_exports.object({
3105
+ expectedRevision: external_exports.string().optional(),
3774
3106
  defaultChatProvider: ChatProviderSchema.optional(),
3775
3107
  defaultChatModel: external_exports.string().min(1).optional(),
3776
3108
  defaultChatModelRef: ChatModelRefSchema.nullable().optional(),
@@ -4295,6 +3627,9 @@ var LocalAgentScheduleSchema = external_exports.object({
4295
3627
  var LocalAgentScheduleRunSchema = external_exports.object({
4296
3628
  id: external_exports.string(),
4297
3629
  scheduleId: external_exports.string(),
3630
+ definitionSnapshot: LocalAgentScheduleSchema.optional(),
3631
+ configurationSnapshot: external_exports.record(external_exports.string(), external_exports.unknown()).optional(),
3632
+ inputSnapshot: external_exports.record(external_exports.string(), external_exports.unknown()).optional(),
4298
3633
  localProjectId: external_exports.string(),
4299
3634
  scheduleName: external_exports.string(),
4300
3635
  scheduledFor: external_exports.string(),
@@ -4464,6 +3799,8 @@ var ChatWorkflowSchema = external_exports.object({
4464
3799
  updatedAt: external_exports.string()
4465
3800
  });
4466
3801
  var ChatWorkflowRunSchema = external_exports.object({
3802
+ definitionSnapshot: ChatWorkflowSchema.optional(),
3803
+ configurationSnapshot: external_exports.record(external_exports.string(), external_exports.unknown()).optional(),
4467
3804
  id: external_exports.string(),
4468
3805
  workflowId: external_exports.string(),
4469
3806
  sessionId: external_exports.string(),