@agimon-ai/po 0.0.0-alpha.2 → 0.0.0-alpha.21

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 (255) hide show
  1. package/README.md +14 -11
  2. package/dist/antigravity.mjs +1 -2
  3. package/dist/baseCommand.mjs +1 -2
  4. package/dist/bin/cli.cjs +37 -14
  5. package/dist/bin/cli.cjs.map +1 -1
  6. package/dist/bin/cli.mjs +34 -14
  7. package/dist/bin/cli.mjs.map +1 -1
  8. package/dist/bin/{doomRunner.cjs → poRunner.cjs} +5 -5
  9. package/dist/bin/poRunner.cjs.map +1 -0
  10. package/dist/bin/{doomRunner.d.mts → poRunner.d.mts} +2 -2
  11. package/dist/bin/poRunner.d.mts.map +1 -0
  12. package/dist/bin/{doomRunner.mjs → poRunner.mjs} +5 -5
  13. package/dist/bin/poRunner.mjs.map +1 -0
  14. package/dist/builders/cli/extensionAssembler/index.cjs +14 -12
  15. package/dist/builders/cli/extensionAssembler/index.cjs.map +1 -1
  16. package/dist/builders/cli/extensionAssembler/index.d.mts +2 -1
  17. package/dist/builders/cli/extensionAssembler/index.d.mts.map +1 -1
  18. package/dist/builders/cli/extensionAssembler/index.mjs +14 -12
  19. package/dist/builders/cli/extensionAssembler/index.mjs.map +1 -1
  20. package/dist/catalog/index.json +68 -51
  21. package/dist/cliApp.mjs +1 -2
  22. package/dist/codex.mjs +1 -2
  23. package/dist/compatibilityCommand.mjs +1 -2
  24. package/dist/compatibilityContext.mjs +1 -2
  25. package/dist/compatibilityOptions.mjs +1 -2
  26. package/dist/config.cjs +57 -12
  27. package/dist/config.d.mts +3 -3
  28. package/dist/config.mjs +3 -3
  29. package/dist/doctorCommand.mjs +1 -2
  30. package/dist/emitMcpCommand.mjs +1 -2
  31. package/dist/explainCommand.mjs +1 -2
  32. package/dist/extensions/server.cjs +11 -7
  33. package/dist/extensions/server.cjs.map +1 -1
  34. package/dist/extensions/server.d.mts +2 -2
  35. package/dist/extensions/server.d.mts.map +1 -1
  36. package/dist/extensions/server.mjs +12 -8
  37. package/dist/extensions/server.mjs.map +1 -1
  38. package/dist/harnessContext.mjs +1 -2
  39. package/dist/harnessState.cjs +66 -11
  40. package/dist/harnessState.d.mts +2 -2
  41. package/dist/harnessState.mjs +1 -2
  42. package/dist/index.cjs +60 -15
  43. package/dist/index.d.mts +3 -3
  44. package/dist/index.mjs +3 -3
  45. package/dist/initCommand.mjs +1 -2
  46. package/dist/matrixOptions.mjs +1 -2
  47. package/dist/options.mjs +1 -2
  48. package/dist/process.mjs +1 -2
  49. package/dist/projectTrust.cjs +2 -2
  50. package/dist/projectTrust.d.mts +2 -2
  51. package/dist/projectTrust.mjs +1 -2
  52. package/dist/repository.cjs +1 -1
  53. package/dist/repository.d.mts +2 -2
  54. package/dist/repository.mjs +1 -2
  55. package/dist/router.mjs +1 -2
  56. package/dist/shared.mjs +1 -2
  57. package/dist/src/bin/agentDirectory.cjs +18 -12
  58. package/dist/src/bin/agentDirectory.cjs.map +1 -1
  59. package/dist/src/bin/agentDirectory.mjs +15 -12
  60. package/dist/src/bin/agentDirectory.mjs.map +1 -1
  61. package/dist/src/builders/apiContractExport/index.cjs +6 -6
  62. package/dist/src/builders/apiContractExport/index.cjs.map +1 -1
  63. package/dist/src/builders/apiContractExport/index.mjs +9 -9
  64. package/dist/src/builders/apiContractExport/index.mjs.map +1 -1
  65. package/dist/src/builders/cli/entryResolution.cjs +3 -3
  66. package/dist/src/builders/cli/entryResolution.cjs.map +1 -1
  67. package/dist/src/builders/cli/entryResolution.mjs +3 -3
  68. package/dist/src/builders/cli/entryResolution.mjs.map +1 -1
  69. package/dist/src/builders/cli/harnessContext.cjs +5 -5
  70. package/dist/src/builders/cli/harnessContext.cjs.map +1 -1
  71. package/dist/src/builders/cli/harnessContext.mjs +7 -7
  72. package/dist/src/builders/cli/harnessContext.mjs.map +1 -1
  73. package/dist/src/builders/hooks/index.cjs +1 -1
  74. package/dist/src/builders/hooks/index.cjs.map +1 -1
  75. package/dist/src/builders/hooks/index.mjs +2 -2
  76. package/dist/src/builders/hooks/index.mjs.map +1 -1
  77. package/dist/src/builders/server/backgroundSync.cjs +13 -1
  78. package/dist/src/builders/server/backgroundSync.cjs.map +1 -1
  79. package/dist/src/builders/server/backgroundSync.mjs +13 -1
  80. package/dist/src/builders/server/backgroundSync.mjs.map +1 -1
  81. package/dist/src/builders/server/bundlerService.cjs +151 -0
  82. package/dist/src/builders/server/bundlerService.cjs.map +1 -0
  83. package/dist/src/builders/server/bundlerService.mjs +151 -0
  84. package/dist/src/builders/server/bundlerService.mjs.map +1 -0
  85. package/dist/src/builders/server/computerUseBinding.cjs +2 -2
  86. package/dist/src/builders/server/computerUseBinding.cjs.map +1 -1
  87. package/dist/src/builders/server/computerUseBinding.mjs +3 -3
  88. package/dist/src/builders/server/computerUseBinding.mjs.map +1 -1
  89. package/dist/src/builders/server/defaultWorkspace.cjs +1 -1
  90. package/dist/src/builders/server/defaultWorkspace.cjs.map +1 -1
  91. package/dist/src/builders/server/defaultWorkspace.mjs +2 -2
  92. package/dist/src/builders/server/defaultWorkspace.mjs.map +1 -1
  93. package/dist/src/builders/server/idleRestart.cjs +3 -3
  94. package/dist/src/builders/server/idleRestart.cjs.map +1 -1
  95. package/dist/src/builders/server/idleRestart.mjs +3 -3
  96. package/dist/src/builders/server/idleRestart.mjs.map +1 -1
  97. package/dist/src/builders/server/index.cjs +6 -6
  98. package/dist/src/builders/server/index.cjs.map +1 -1
  99. package/dist/src/builders/server/index.mjs +6 -6
  100. package/dist/src/builders/server/index.mjs.map +1 -1
  101. package/dist/src/builders/server/logSink.cjs +3 -3
  102. package/dist/src/builders/server/logSink.cjs.map +1 -1
  103. package/dist/src/builders/server/logSink.mjs +2 -2
  104. package/dist/src/builders/server/logSink.mjs.map +1 -1
  105. package/dist/src/builders/server/mcpBundle.cjs.map +1 -1
  106. package/dist/src/builders/server/mcpBundle.d.mts +2 -2
  107. package/dist/src/builders/server/mcpBundle.mjs.map +1 -1
  108. package/dist/src/builders/server/packageUrl.cjs +25 -18
  109. package/dist/src/builders/server/packageUrl.cjs.map +1 -1
  110. package/dist/src/builders/server/packageUrl.mjs +25 -18
  111. package/dist/src/builders/server/packageUrl.mjs.map +1 -1
  112. package/dist/src/builders/server/runtime.cjs +157 -168
  113. package/dist/src/builders/server/runtime.cjs.map +1 -1
  114. package/dist/src/builders/server/runtime.mjs +161 -171
  115. package/dist/src/builders/server/runtime.mjs.map +1 -1
  116. package/dist/src/builders/server/selectionStatus.cjs +3 -3
  117. package/dist/src/builders/server/selectionStatus.cjs.map +1 -1
  118. package/dist/src/builders/server/selectionStatus.mjs +3 -3
  119. package/dist/src/builders/server/selectionStatus.mjs.map +1 -1
  120. package/dist/src/builders/server/sessionArguments.cjs.map +1 -1
  121. package/dist/src/builders/server/sessionArguments.mjs.map +1 -1
  122. package/dist/src/builders/server/watcherService.cjs +65 -0
  123. package/dist/src/builders/server/watcherService.cjs.map +1 -0
  124. package/dist/src/builders/server/watcherService.mjs +61 -0
  125. package/dist/src/builders/server/watcherService.mjs.map +1 -0
  126. package/dist/src/builders/server/webTemplateDecision.cjs +1 -1
  127. package/dist/src/builders/server/webTemplateDecision.cjs.map +1 -1
  128. package/dist/src/builders/server/webTemplateDecision.mjs +2 -2
  129. package/dist/src/builders/server/webTemplateDecision.mjs.map +1 -1
  130. package/dist/src/builders/web/bundle.cjs.map +1 -1
  131. package/dist/src/builders/web/bundle.d.mts +4 -3
  132. package/dist/src/builders/web/bundle.mjs.map +1 -1
  133. package/dist/src/builders/web/bundleAssetPolicy.d.mts +1 -0
  134. package/dist/src/builders/web/index.cjs +1 -1
  135. package/dist/src/builders/web/index.cjs.map +1 -1
  136. package/dist/src/builders/web/index.d.mts +1 -0
  137. package/dist/src/builders/web/index.mjs +1 -1
  138. package/dist/src/builders/web/index.mjs.map +1 -1
  139. package/dist/src/builders/web/webPluginGenerate.cjs +4 -15
  140. package/dist/src/builders/web/webPluginGenerate.cjs.map +1 -1
  141. package/dist/src/builders/web/webPluginGenerate.d.mts +5 -9
  142. package/dist/src/builders/web/webPluginGenerate.d.mts.map +1 -1
  143. package/dist/src/builders/web/webPluginGenerate.mjs +4 -15
  144. package/dist/src/builders/web/webPluginGenerate.mjs.map +1 -1
  145. package/dist/src/builders/web/webPluginVite.d.mts +1 -0
  146. package/dist/src/cli/cliApp.cjs +1 -1
  147. package/dist/src/cli/cliApp.cjs.map +1 -1
  148. package/dist/src/cli/cliApp.mjs +1 -1
  149. package/dist/src/cli/cliApp.mjs.map +1 -1
  150. package/dist/src/cli/commands/compat/index.cjs +1 -1
  151. package/dist/src/cli/commands/compat/index.cjs.map +1 -1
  152. package/dist/src/cli/commands/compat/index.mjs +1 -1
  153. package/dist/src/cli/commands/compat/index.mjs.map +1 -1
  154. package/dist/src/cli/commands/doctor/index.cjs +2 -2
  155. package/dist/src/cli/commands/doctor/index.cjs.map +1 -1
  156. package/dist/src/cli/commands/doctor/index.d.mts +1 -0
  157. package/dist/src/cli/commands/doctor/index.d.mts.map +1 -1
  158. package/dist/src/cli/commands/doctor/index.mjs +4 -4
  159. package/dist/src/cli/commands/doctor/index.mjs.map +1 -1
  160. package/dist/src/cli/commands/explain/index.cjs +3 -1
  161. package/dist/src/cli/commands/explain/index.cjs.map +1 -1
  162. package/dist/src/cli/commands/explain/index.d.mts.map +1 -1
  163. package/dist/src/cli/commands/explain/index.mjs +4 -2
  164. package/dist/src/cli/commands/explain/index.mjs.map +1 -1
  165. package/dist/src/cli/commands/init/index.cjs +2 -2
  166. package/dist/src/cli/commands/init/index.cjs.map +1 -1
  167. package/dist/src/cli/commands/init/index.mjs +3 -3
  168. package/dist/src/cli/commands/init/index.mjs.map +1 -1
  169. package/dist/src/cli/commands/init/presenter.cjs +1 -1
  170. package/dist/src/cli/commands/init/presenter.cjs.map +1 -1
  171. package/dist/src/cli/commands/init/presenter.mjs +2 -2
  172. package/dist/src/cli/commands/init/presenter.mjs.map +1 -1
  173. package/dist/src/cli/commands/sync/index.cjs +4 -4
  174. package/dist/src/cli/commands/sync/index.cjs.map +1 -1
  175. package/dist/src/cli/commands/sync/index.d.mts +1 -0
  176. package/dist/src/cli/commands/sync/index.mjs +7 -7
  177. package/dist/src/cli/commands/sync/index.mjs.map +1 -1
  178. package/dist/src/cli/commands/sync/presenter.cjs +1 -1
  179. package/dist/src/cli/commands/sync/presenter.cjs.map +1 -1
  180. package/dist/src/cli/commands/sync/presenter.d.mts +1 -1
  181. package/dist/src/cli/commands/sync/presenter.mjs +1 -1
  182. package/dist/src/cli/commands/sync/presenter.mjs.map +1 -1
  183. package/dist/src/cli/commands/web/index.cjs +2 -1
  184. package/dist/src/cli/commands/web/index.cjs.map +1 -1
  185. package/dist/src/cli/commands/web/index.mjs +2 -1
  186. package/dist/src/cli/commands/web/index.mjs.map +1 -1
  187. package/dist/src/cli/harnessOptions.cjs +1 -1
  188. package/dist/src/cli/harnessOptions.cjs.map +1 -1
  189. package/dist/src/cli/harnessOptions.mjs +2 -2
  190. package/dist/src/cli/harnessOptions.mjs.map +1 -1
  191. package/dist/src/cli/help.cjs +2 -0
  192. package/dist/src/cli/help.cjs.map +1 -1
  193. package/dist/src/cli/help.mjs +2 -0
  194. package/dist/src/cli/help.mjs.map +1 -1
  195. package/dist/src/cli/matrixOptions.cjs +1 -1
  196. package/dist/src/cli/matrixOptions.cjs.map +1 -1
  197. package/dist/src/cli/matrixOptions.d.mts +1 -1
  198. package/dist/src/cli/matrixOptions.mjs +1 -1
  199. package/dist/src/cli/matrixOptions.mjs.map +1 -1
  200. package/dist/src/cli/server/run.cjs +1 -1
  201. package/dist/src/cli/server/run.cjs.map +1 -1
  202. package/dist/src/cli/server/run.mjs +2 -2
  203. package/dist/src/cli/server/run.mjs.map +1 -1
  204. package/dist/src/composition/harnessState/index.cjs +66 -11
  205. package/dist/src/composition/harnessState/index.cjs.map +1 -1
  206. package/dist/src/composition/harnessState/index.d.mts +3 -3
  207. package/dist/src/composition/harnessState/index.mjs +2 -2
  208. package/dist/src/composition/harnessState/index.mjs.map +1 -1
  209. package/dist/src/composition/layerPackageInstaller/index.cjs +5 -4
  210. package/dist/src/composition/layerPackageInstaller/index.cjs.map +1 -1
  211. package/dist/src/composition/layerPackageInstaller/index.mjs +6 -5
  212. package/dist/src/composition/layerPackageInstaller/index.mjs.map +1 -1
  213. package/dist/src/composition/poHomeMigration/index.cjs +1 -1
  214. package/dist/src/composition/poHomeMigration/index.cjs.map +1 -1
  215. package/dist/src/composition/poHomeMigration/index.mjs +1 -1
  216. package/dist/src/composition/poHomeMigration/index.mjs.map +1 -1
  217. package/dist/src/composition/projectTrust/index.cjs +6 -6
  218. package/dist/src/composition/projectTrust/index.cjs.map +1 -1
  219. package/dist/src/composition/projectTrust/index.d.mts +7 -7
  220. package/dist/src/composition/projectTrust/index.d.mts.map +1 -1
  221. package/dist/src/composition/projectTrust/index.mjs +6 -6
  222. package/dist/src/composition/projectTrust/index.mjs.map +1 -1
  223. package/dist/src/composition/repository/index.cjs +8 -8
  224. package/dist/src/composition/repository/index.cjs.map +1 -1
  225. package/dist/src/composition/repository/index.d.mts +5 -5
  226. package/dist/src/composition/repository/index.d.mts.map +1 -1
  227. package/dist/src/composition/repository/index.mjs +10 -10
  228. package/dist/src/composition/repository/index.mjs.map +1 -1
  229. package/dist/src/composition/syncService/index.cjs +29 -9
  230. package/dist/src/composition/syncService/index.cjs.map +1 -1
  231. package/dist/src/composition/syncService/index.d.mts.map +1 -1
  232. package/dist/src/composition/syncService/index.mjs +31 -11
  233. package/dist/src/composition/syncService/index.mjs.map +1 -1
  234. package/dist/src/composition/syncService/localBuilds.cjs +7 -2
  235. package/dist/src/composition/syncService/localBuilds.cjs.map +1 -1
  236. package/dist/src/composition/syncService/localBuilds.mjs +7 -2
  237. package/dist/src/composition/syncService/localBuilds.mjs.map +1 -1
  238. package/dist/src/extensions/setupDiagnostics.cjs +3 -3
  239. package/dist/src/extensions/setupDiagnostics.cjs.map +1 -1
  240. package/dist/src/extensions/setupDiagnostics.mjs +3 -3
  241. package/dist/src/extensions/setupDiagnostics.mjs.map +1 -1
  242. package/dist/utils.mjs +1 -2
  243. package/docs/server/api-export.md +3 -3
  244. package/docs/server/api.md +23 -22
  245. package/docs/server/getting-started.md +7 -7
  246. package/docs/server/index.md +4 -4
  247. package/docs/server/ipc.md +7 -11
  248. package/docs/server/lifecycle.md +17 -17
  249. package/docs/server/security.md +8 -8
  250. package/package.json +42 -45
  251. package/src/prompts/po-author-extension/SKILL.md +1 -1
  252. package/src/prompts/po-author-extension/references/extension-contract.md +4 -4
  253. package/dist/bin/doomRunner.cjs.map +0 -1
  254. package/dist/bin/doomRunner.d.mts.map +0 -1
  255. package/dist/bin/doomRunner.mjs.map +0 -1
@@ -5,12 +5,13 @@ import { isLocalPackageSpecifier } from "@agimon-ai/po-config/majorModes";
5
5
  import { fileURLToPath } from "node:url";
6
6
  import { consumerPackageEntry, localEntries, localEntry, localPackageEntries, localPackageExport, localPackageName, optionalPackageEntry, packageEntry, splitPackageSpecifier } from "@agimon-ai/po-core/moduleResolution";
7
7
  import { canonicalModulePath, sha256 } from "@agimon-ai/po-core/runtimeIdentity";
8
- import { declaredServerFacetsOf } from "@agimon-ai/po-core/serverFacet";
8
+ import { declaredServerPackagesOf } from "@agimon-ai/po-core/serverPlugin";
9
9
  //#region src/builders/cli/extensionAssembler/index.ts
10
10
  const DEFAULT_SELECTION_LAYER = "default";
11
11
  const DEFAULT_SELECTION_LAYER_INDEX = -1;
12
12
  const FIXED_CORE_PACKAGES = /* @__PURE__ */ new Set([
13
13
  "@agimon-ai/po",
14
+ "@agimon-ai/po-artifact",
14
15
  "@agimon-ai/po-autostop",
15
16
  "@agimon-ai/po-cache",
16
17
  "@agimon-ai/po-config",
@@ -32,27 +33,28 @@ const CORE_PACKAGE_ENTRIES = [
32
33
  "@agimon-ai/po-profile/extensions/server",
33
34
  "@agimon-ai/po-major-mode/extensions/server",
34
35
  "@agimon-ai/po-skill/extensions/server",
35
- "@agimon-ai/po-domain/extensions/server"
36
+ "@agimon-ai/po-domain/extensions/server",
37
+ "@agimon-ai/po-artifact/extensions/server"
36
38
  ];
37
39
  const CACHE_PACKAGE_ENTRY = "@agimon-ai/po-cache/extensions/server";
38
40
  const SESSION_PACKAGE_ENTRY = "@agimon-ai/po-session/extensions/server";
39
- /** Po's own server facet, resolved through the distribution like any own entry. */
41
+ /** Po's own server package, resolved through the distribution like any own entry. */
40
42
  const PO_SERVER_ENTRY = "server";
41
43
  /** Manifest fields through which a selected package contributes to a Po host. */
42
- const PO_FACET_FIELDS = [
44
+ const PO_CONTRIBUTION_FIELDS = [
43
45
  "poServer",
44
46
  "poWeb",
45
47
  "poMcp"
46
48
  ];
47
49
  /**
48
- * Resolves a selected package to its built server facet, or to its manifest as the
49
- * discovery anchor of a web or MCP only package. A package with no Po facet resolves empty.
50
+ * Resolves a selected package to its built server entry, or to its manifest as the discovery
51
+ * anchor of a web or MCP only package. A package with no Po contribution resolves empty.
50
52
  */
51
53
  function nativePackageEntries(manifestPath, resolveExport) {
52
54
  const manifest = JSON.parse(fs.readFileSync(manifestPath, "utf8"));
53
55
  const root = path.dirname(fs.realpathSync(manifestPath));
54
- const declaration = declaredServerFacetsOf(root, manifest)[0];
55
- if (!declaration) return PO_FACET_FIELDS.some((field) => manifest[field] !== void 0) ? [path.join(root, "package.json")] : [];
56
+ const declaration = declaredServerPackagesOf(root, manifest)[0];
57
+ if (!declaration) return PO_CONTRIBUTION_FIELDS.some((field) => manifest[field] !== void 0) ? [path.join(root, "package.json")] : [];
56
58
  const exported = resolveExport();
57
59
  const dist = path.resolve(root, declaration.dist);
58
60
  if (!exported || !fs.existsSync(dist) || fs.realpathSync(exported) !== fs.realpathSync(dist)) throw new Error(`Native package ${declaration.packageName} must export its built poServer dist as ./extensions/server.`);
@@ -232,16 +234,16 @@ function resolveDefinitionSelections(definition, layer, layerIndex, resolvers, t
232
234
  throw error;
233
235
  }
234
236
  if (!resolved?.length && tolerateUnsynced && !optional) {
235
- resolvedSelections.push(missingOptionalSelection(identity, `Package "${selector}" is not synced yet: it resolves to no Po server, web or MCP facet.`));
237
+ resolvedSelections.push(missingOptionalSelection(identity, `Package "${selector}" is not synced yet: it resolves to no Po server, web or MCP contribution.`));
236
238
  continue;
237
239
  }
238
240
  if (!resolved?.length) {
239
241
  if (optional) {
240
- resolvedSelections.push(missingOptionalSelection(identity, `Optional package "${selector}" is unavailable or declares no Po server, web or MCP facet.`));
242
+ resolvedSelections.push(missingOptionalSelection(identity, `Optional package "${selector}" is unavailable or declares no Po server, web or MCP contribution.`));
241
243
  continue;
242
244
  }
243
- if (isLocalPackageSpecifier(selector)) throw new Error(`Layer "${layer}" package "${selector}" does not resolve under ${definition.baseDirectory}. Point it at an extension file, or a package directory whose package.json declares a Po facet.`);
244
- throw new Error(`Layer "${layer}" package "${selector}" declares no Po server, web or MCP facet.`);
245
+ if (isLocalPackageSpecifier(selector)) throw new Error(`Layer "${layer}" package "${selector}" does not resolve under ${definition.baseDirectory}. Point it at an extension file, or a package directory whose package.json declares a Po contribution.`);
246
+ throw new Error(`Layer "${layer}" package "${selector}" declares no Po server, web or MCP contribution.`);
245
247
  }
246
248
  resolved.forEach((resolvedPath, manifestIndex) => {
247
249
  resolvedSelections.push(resolvedSelection(identity, manifestIndex, resolvedPath));
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":["resolvePackageEntry","resolveOptionalPackageEntry","resolveLocalPackageName"],"sources":["../../../../src/builders/cli/extensionAssembler/index.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\nimport { isLocalPackageSpecifier, type LayerResolvers, type MajorModesConfig } from '@agimon-ai/po-config/majorModes';\nimport {\n consumerPackageEntry,\n localEntries,\n localEntry,\n localPackageEntries,\n localPackageExport,\n localPackageName as resolveLocalPackageName,\n optionalPackageEntry as resolveOptionalPackageEntry,\n packageEntry as resolvePackageEntry,\n splitPackageSpecifier,\n} from '@agimon-ai/po-core/moduleResolution';\nimport { canonicalModulePath, sha256 } from '@agimon-ai/po-core/runtimeIdentity';\nimport { declaredServerFacetsOf } from '@agimon-ai/po-core/serverFacet';\n\nimport { ownEntry } from '../entryResolution';\n\nexport interface ExtensionLayerResolvers extends LayerResolvers {\n /** Resolves a path authored under packages to its native discovery anchor. */\n localPackageEntries?: (specifier: string, baseDirectory: string) => string[] | undefined;\n /** Canonical manifest name for a path that represents a package directory. */\n localPackageName?: (specifier: string, baseDirectory: string) => string | undefined;\n}\n\nexport interface ExtensionContext {\n /** Named mode whose occurrence is part of composition identity. */\n majorMode?: string;\n /** Ordered layer occurrences selected by the active major mode. */\n layers: string[];\n majorModesConfig: MajorModesConfig;\n /** Resolver override used by synchronized replay. */\n resolvers?: ExtensionLayerResolvers;\n /**\n * Turns a configured package that does not resolve yet (not installed, or a local package\n * not built) into a missing selection with a diagnostic instead of an error, so a host that\n * only reads what sync prepared can still open. A fixed host package selected as a feature\n * still throws: that is a configuration error, not something sync can fix.\n */\n tolerateUnsynced?: boolean;\n}\n\nexport type SelectedEntryKind = 'extension' | 'package';\ntype ExtensionResolutionOutcome = 'resolved' | 'missing-optional';\n\n/**\n * One resolver-derived extension occurrence.\n *\n * This remains private to Po composition. It is not package metadata and\n * deliberately retains authored duplicates even though activation paths are\n * deduplicated later.\n */\ninterface ResolvedExtensionSelection {\n readonly layer: string;\n readonly layerIndex: number;\n readonly entryKind: SelectedEntryKind;\n readonly entryIndex: number;\n readonly manifestIndex: number;\n readonly selector: string;\n readonly sourceFile?: string;\n readonly baseDirectory: string;\n readonly optional: boolean;\n readonly outcome: ExtensionResolutionOutcome;\n readonly path?: string;\n readonly canonicalPath?: string;\n readonly diagnostic?: string;\n readonly config?: Record<string, unknown>;\n}\n\nexport interface CompositionLayerOccurrence {\n readonly name: string;\n readonly index: number;\n readonly sourceFile?: string;\n readonly baseDirectory: string;\n}\n\n/** Internal normalized composition shared by sync, bundles, and the session server. */\nexport interface ExtensionComposition {\n readonly majorMode?: {\n readonly name: string;\n readonly sourceFile?: string;\n readonly baseDirectory?: string;\n };\n readonly layers: readonly CompositionLayerOccurrence[];\n readonly selections: readonly ResolvedExtensionSelection[];\n /** Entries whose owning packages this composition selects, for native facet discovery. */\n readonly packageEntries: readonly string[];\n /** Stable identity of this composition, published as the session's composition fingerprint. */\n readonly fingerprint: string;\n}\n\nconst DEFAULT_SELECTION_LAYER = 'default';\nconst DEFAULT_SELECTION_LAYER_INDEX = -1;\n\nconst FIXED_CORE_PACKAGES = new Set([\n '@agimon-ai/po',\n '@agimon-ai/po-autostop',\n '@agimon-ai/po-cache',\n '@agimon-ai/po-config',\n '@agimon-ai/po-domain',\n '@agimon-ai/po-major-mode',\n '@agimon-ai/po-minor-mode',\n '@agimon-ai/po-notification',\n '@agimon-ai/po-profile',\n '@agimon-ai/po-session',\n '@agimon-ai/po-skill',\n '@agimon-ai/po-ui',\n]);\n\n/** Native server entries of the fixed host packages every composition selects. */\nconst CORE_PACKAGE_ENTRIES = [\n '@agimon-ai/po-minor-mode/extensions/server',\n '@agimon-ai/po-config/extensions/server',\n '@agimon-ai/po-ui/extensions/server',\n '@agimon-ai/po-notification/extensions/server',\n '@agimon-ai/po-profile/extensions/server',\n '@agimon-ai/po-major-mode/extensions/server',\n '@agimon-ai/po-skill/extensions/server',\n '@agimon-ai/po-domain/extensions/server',\n] as const;\nconst CACHE_PACKAGE_ENTRY = '@agimon-ai/po-cache/extensions/server';\nconst SESSION_PACKAGE_ENTRY = '@agimon-ai/po-session/extensions/server';\n/** Po's own server facet, resolved through the distribution like any own entry. */\nconst PO_SERVER_ENTRY = 'server';\n\n/** Manifest fields through which a selected package contributes to a Po host. */\nconst PO_FACET_FIELDS = ['poServer', 'poWeb', 'poMcp'] as const;\n\n/**\n * Resolves a selected package to its built server facet, or to its manifest as the\n * discovery anchor of a web or MCP only package. A package with no Po facet resolves empty.\n */\nfunction nativePackageEntries(manifestPath: string, resolveExport: () => string | undefined): string[] {\n const manifest = JSON.parse(fs.readFileSync(manifestPath, 'utf8')) as Record<string, unknown>;\n const root = path.dirname(fs.realpathSync(manifestPath));\n const declaration = declaredServerFacetsOf(root, manifest)[0];\n if (!declaration) {\n return PO_FACET_FIELDS.some((field) => manifest[field] !== undefined) ? [path.join(root, 'package.json')] : [];\n }\n const exported = resolveExport();\n const dist = path.resolve(root, declaration.dist);\n if (!exported || !fs.existsSync(dist) || fs.realpathSync(exported) !== fs.realpathSync(dist)) {\n throw new Error(\n `Native package ${declaration.packageName} must export its built poServer dist as ./extensions/server.`,\n );\n }\n return [fs.realpathSync(dist)];\n}\n\n/** Resolves an installed package selection, or one explicit export subpath, from root. */\nfunction installedPackageEntries(\n specifier: string,\n root: string,\n environment: NodeJS.ProcessEnv = process.env,\n): string[] | undefined {\n if (splitPackageSpecifier(specifier).subpath !== '.') {\n const entry = consumerPackageEntry(specifier, root, environment);\n return entry ? [fs.realpathSync(entry)] : undefined;\n }\n const manifestPath = consumerPackageEntry(`${specifier}/package.json`, root, environment);\n return manifestPath\n ? nativePackageEntries(manifestPath, () =>\n consumerPackageEntry(`${specifier}/extensions/server`, root, environment),\n )\n : undefined;\n}\n\nfunction localSelectedPackageEntries(specifier: string, baseDirectory: string): string[] | undefined {\n const manifest = path.resolve(baseDirectory, specifier, 'package.json');\n return fs.existsSync(manifest)\n ? nativePackageEntries(manifest, () => localPackageExport(specifier, baseDirectory, './extensions/server'))\n : localPackageEntries(specifier, baseDirectory);\n}\n\nconst HOST_DIRECTORY = path.dirname(fileURLToPath(import.meta.url));\n\nexport const LAYER_RESOLVERS: ExtensionLayerResolvers = {\n ownEntry,\n packageEntry: (specifier) => resolvePackageEntry(specifier, import.meta.url),\n optionalPackageEntry: (specifier) => resolveOptionalPackageEntry(specifier, import.meta.url),\n packageEntries: (specifier) => {\n const entries = installedPackageEntries(specifier, HOST_DIRECTORY);\n if (!entries) throw new Error(`Cannot resolve package ${specifier}.`);\n return entries;\n },\n optionalPackageEntries: (specifier) => installedPackageEntries(specifier, HOST_DIRECTORY),\n localEntry,\n localEntries,\n localPackageEntries: localSelectedPackageEntries,\n localPackageName: resolveLocalPackageName,\n};\n\nfunction missingConsumerPackage(name: string, consumerRoot: string): Error {\n return new Error(`Cannot resolve configured package \"${name}\" from ${consumerRoot}.`);\n}\n\n/**\n * Resolves configured packages only from the consumer, while fixed core entries\n * may fall back to the host package's private dependency closure. `environment` names\n * the Po home whose shared runtime answers after the consumer's own tree.\n */\nexport function createLayerResolvers(\n consumerRoot?: string,\n environment: NodeJS.ProcessEnv = process.env,\n): ExtensionLayerResolvers {\n if (!consumerRoot) return LAYER_RESOLVERS;\n // Fixed host packages must match the executable, even when home contains an older installation.\n const fallbackEntry = (name: string): string | undefined =>\n FIXED_CORE_PACKAGES.has(packageName(name)) ? resolveOptionalPackageEntry(name, import.meta.url) : undefined;\n const requiredEntry = (name: string): string => {\n const entry = fallbackEntry(name) ?? consumerPackageEntry(name, consumerRoot, environment);\n if (!entry) throw missingConsumerPackage(name, consumerRoot);\n return entry;\n };\n const requiredEntries = (name: string): string[] => {\n const entries = installedPackageEntries(name, consumerRoot, environment);\n if (!entries) throw missingConsumerPackage(name, consumerRoot);\n return entries;\n };\n return {\n ownEntry,\n packageEntry: requiredEntry,\n optionalPackageEntry: (name) => fallbackEntry(name) ?? consumerPackageEntry(name, consumerRoot, environment),\n packageEntries: requiredEntries,\n optionalPackageEntries: (name) => installedPackageEntries(name, consumerRoot, environment),\n localEntry,\n localEntries,\n localPackageEntries: localSelectedPackageEntries,\n localPackageName: resolveLocalPackageName,\n };\n}\n\nfunction packageName(specifier: string): string {\n const segments = specifier.split('/');\n return specifier.startsWith('@') ? segments.slice(0, 2).join('/') : (segments[0] ?? specifier);\n}\n\n/** A fixed host package selected as a feature: a configuration error that tolerance never hides. */\nclass FixedPackageSelectionError extends Error {}\n\nfunction assertFeaturePackage(specifier: string, layer: string): void {\n const selectedPackage = packageName(specifier);\n if (FIXED_CORE_PACKAGES.has(selectedPackage)) {\n throw new FixedPackageSelectionError(\n `Layer \"${layer}\" cannot select fixed Po host package \"${selectedPackage}\" as a feature extension.`,\n );\n }\n}\n\nfunction resolveLocalExtensionEntries(\n resolvers: ExtensionLayerResolvers,\n specifier: string,\n baseDirectory: string,\n): string[] | undefined {\n const resolved = resolvers.localEntries?.(specifier, baseDirectory);\n if (resolved !== undefined) return resolved;\n const single = resolvers.localEntry(specifier, baseDirectory);\n return single ? [single] : undefined;\n}\n\nfunction resolveLocalPackageSelections(\n resolvers: ExtensionLayerResolvers,\n specifier: string,\n baseDirectory: string,\n): string[] | undefined {\n const resolved = resolvers.localPackageEntries?.(specifier, baseDirectory);\n if (resolved !== undefined) return resolved;\n return resolveLocalExtensionEntries(resolvers, specifier, baseDirectory);\n}\n\ninterface SelectionIdentity {\n layer: string;\n layerIndex: number;\n entryKind: SelectedEntryKind;\n entryIndex: number;\n selector: string;\n sourceFile?: string;\n baseDirectory: string;\n optional: boolean;\n config?: Record<string, unknown>;\n}\n\nfunction resolvedSelection(\n identity: SelectionIdentity,\n manifestIndex: number,\n resolvedPath: string,\n): ResolvedExtensionSelection {\n return {\n ...identity,\n manifestIndex,\n outcome: 'resolved',\n path: resolvedPath,\n canonicalPath: canonicalModulePath(resolvedPath),\n };\n}\n\nfunction missingOptionalSelection(identity: SelectionIdentity, diagnostic: string): ResolvedExtensionSelection {\n return {\n ...identity,\n manifestIndex: 0,\n outcome: 'missing-optional',\n diagnostic,\n };\n}\n\n/**\n * The selectors a tolerant composition left out because they do not resolve yet: the missing\n * selections of entries that are not optional, each once, in composition order.\n */\nexport function unsyncedSelectors(compositions: readonly ExtensionComposition[]): string[] {\n return [\n ...new Set(\n compositions.flatMap((composition) =>\n composition.selections\n .filter((selection) => selection.outcome === 'missing-optional' && !selection.optional)\n .map((selection) => selection.selector),\n ),\n ),\n ];\n}\n\nfunction errorMessage(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n\nfunction resolveDefinitionSelections(\n definition: MajorModesConfig['layers'][string],\n layer: string,\n layerIndex: number,\n resolvers: ExtensionLayerResolvers,\n tolerateUnsynced = false,\n): ResolvedExtensionSelection[] {\n const resolvedSelections: ResolvedExtensionSelection[] = [];\n const extensionEntries = definition.extensions ?? [];\n for (const [entryIndex, selector] of extensionEntries.entries()) {\n const identity: SelectionIdentity = {\n layer,\n layerIndex,\n entryKind: 'extension',\n entryIndex,\n selector,\n ...(definition.filePath ? { sourceFile: definition.filePath } : {}),\n baseDirectory: definition.baseDirectory,\n optional: false,\n };\n if (!isLocalPackageSpecifier(selector)) {\n resolvedSelections.push(resolvedSelection(identity, 0, resolvers.ownEntry(selector)));\n continue;\n }\n const resolved = resolveLocalExtensionEntries(resolvers, selector, definition.baseDirectory);\n if (!resolved?.length) {\n throw new Error(\n `Layer \"${layer}\" extension \"${selector}\" does not resolve under ${definition.baseDirectory}. ` +\n 'Point it at a Pi extension file or directory.',\n );\n }\n resolved.forEach((resolvedPath, manifestIndex) => {\n resolvedSelections.push(resolvedSelection(identity, manifestIndex, resolvedPath));\n });\n }\n\n const packageOffset = extensionEntries.length;\n for (const [packageIndex, configured] of (definition.packages ?? []).entries()) {\n const selector = typeof configured === 'string' ? configured : configured.name;\n const optional = typeof configured === 'string' ? false : configured.optional === true;\n const configValue = typeof configured === 'string' ? undefined : configured.config;\n const identity: SelectionIdentity = {\n layer,\n layerIndex,\n entryKind: 'package',\n entryIndex: packageOffset + packageIndex,\n selector,\n ...(definition.filePath ? { sourceFile: definition.filePath } : {}),\n baseDirectory: definition.baseDirectory,\n optional,\n ...(configValue === undefined ? {} : { config: configValue }),\n };\n\n let resolved: string[] | undefined;\n try {\n if (isLocalPackageSpecifier(selector)) {\n const manifestName = resolvers.localPackageName?.(selector, definition.baseDirectory);\n if (manifestName) assertFeaturePackage(manifestName, layer);\n resolved = resolveLocalPackageSelections(resolvers, selector, definition.baseDirectory);\n } else {\n assertFeaturePackage(selector, layer);\n if (optional) {\n resolved = resolvers.optionalPackageEntries?.(selector);\n if (resolved === undefined && !resolvers.optionalPackageEntries) {\n const single = resolvers.optionalPackageEntry(selector);\n resolved = single ? [single] : undefined;\n }\n } else {\n resolved = resolvers.packageEntries?.(selector) ?? [resolvers.packageEntry(selector)];\n }\n }\n } catch (error) {\n if (optional || (tolerateUnsynced && !(error instanceof FixedPackageSelectionError))) {\n resolvedSelections.push(missingOptionalSelection(identity, errorMessage(error)));\n continue;\n }\n throw error;\n }\n\n if (!resolved?.length && tolerateUnsynced && !optional) {\n resolvedSelections.push(\n missingOptionalSelection(\n identity,\n `Package \"${selector}\" is not synced yet: it resolves to no Po server, web or MCP facet.`,\n ),\n );\n continue;\n }\n if (!resolved?.length) {\n if (optional) {\n resolvedSelections.push(\n missingOptionalSelection(\n identity,\n `Optional package \"${selector}\" is unavailable or declares no Po server, web or MCP facet.`,\n ),\n );\n continue;\n }\n if (isLocalPackageSpecifier(selector)) {\n throw new Error(\n `Layer \"${layer}\" package \"${selector}\" does not resolve under ${definition.baseDirectory}. ` +\n 'Point it at an extension file, or a package directory whose package.json declares a Po facet.',\n );\n }\n throw new Error(`Layer \"${layer}\" package \"${selector}\" declares no Po server, web or MCP facet.`);\n }\n\n resolved.forEach((resolvedPath, manifestIndex) => {\n resolvedSelections.push(resolvedSelection(identity, manifestIndex, resolvedPath));\n });\n }\n\n return resolvedSelections;\n}\n\nfunction resolveLayerSelections(\n config: MajorModesConfig,\n layer: string,\n layerIndex: number,\n resolvers: ExtensionLayerResolvers,\n tolerateUnsynced: boolean,\n): ResolvedExtensionSelection[] {\n const definition = config.layers[layer];\n if (!definition) throw new Error(`Unknown layer: ${layer}`);\n return resolveDefinitionSelections(definition, layer, layerIndex, resolvers, tolerateUnsynced);\n}\n\nfunction resolveDefaultSelections(\n config: MajorModesConfig,\n resolvers: ExtensionLayerResolvers,\n tolerateUnsynced: boolean,\n): ResolvedExtensionSelection[] {\n if (!config.default) return [];\n return resolveDefinitionSelections(\n config.default,\n DEFAULT_SELECTION_LAYER,\n DEFAULT_SELECTION_LAYER_INDEX,\n resolvers,\n tolerateUnsynced,\n );\n}\n\nfunction resolveSelectedExtensions(context: ExtensionContext): ResolvedExtensionSelection[] {\n const resolvers = context.resolvers ?? LAYER_RESOLVERS;\n return context.layers.flatMap((layer, layerIndex) =>\n resolveLayerSelections(context.majorModesConfig, layer, layerIndex, resolvers, context.tolerateUnsynced === true),\n );\n}\n\nfunction deduplicatePaths(paths: readonly string[]): string[] {\n const seen = new Set<string>();\n const selected: string[] = [];\n for (const entry of paths) {\n const identity = canonicalModulePath(entry);\n if (seen.has(identity)) continue;\n seen.add(identity);\n selected.push(entry);\n }\n return selected;\n}\n\nfunction selectedFeaturePaths(selections: readonly ResolvedExtensionSelection[]): string[] {\n return deduplicatePaths(\n selections.flatMap((entry) => (entry.outcome === 'resolved' && entry.path ? [entry.path] : [])),\n );\n}\n\n/** Package anchors in the order the previous host activated them, so discovery order holds. */\nfunction selectedPackageEntries(\n resolve: ExtensionLayerResolvers,\n distributionPaths: readonly string[],\n featurePaths: readonly string[],\n): string[] {\n return deduplicatePaths([\n resolve.ownEntry(PO_SERVER_ENTRY),\n ...CORE_PACKAGE_ENTRIES.map((entry) => resolve.packageEntry(entry)),\n ...distributionPaths,\n ...featurePaths,\n resolve.packageEntry(CACHE_PACKAGE_ENTRY),\n resolve.packageEntry(SESSION_PACKAGE_ENTRY),\n ]);\n}\n\nfunction canonicalValue(value: unknown): unknown {\n if (Array.isArray(value)) return value.map(canonicalValue);\n if (value === null || typeof value !== 'object') return value;\n return Object.fromEntries(\n Object.entries(value as Record<string, unknown>)\n .filter(([, entry]) => entry !== undefined)\n .sort(([left], [right]) => left.localeCompare(right))\n .map(([key, entry]) => [key, canonicalValue(entry)]),\n );\n}\n\n/** Resolve one deterministic composition from authored layer occurrences. */\nexport function resolveExtensionComposition(context: ExtensionContext): ExtensionComposition {\n const resolvers = context.resolvers ?? LAYER_RESOLVERS;\n const defaultSelections = resolveDefaultSelections(\n context.majorModesConfig,\n resolvers,\n context.tolerateUnsynced === true,\n );\n const layerSelections = resolveSelectedExtensions(context);\n const selections = [...defaultSelections, ...layerSelections];\n const distributionPaths = selectedFeaturePaths(defaultSelections);\n const featurePaths = selectedFeaturePaths(layerSelections);\n const layers = context.layers.map((name, index): CompositionLayerOccurrence => {\n const definition = context.majorModesConfig.layers[name];\n if (!definition) throw new Error(`Unknown layer: ${name}`);\n return {\n name,\n index,\n ...(definition.filePath ? { sourceFile: definition.filePath } : {}),\n baseDirectory: definition.baseDirectory,\n };\n });\n const modeSource = context.majorMode ? context.majorModesConfig.majorModeSources?.[context.majorMode] : undefined;\n const composition = {\n ...(context.majorMode\n ? {\n majorMode: {\n name: context.majorMode,\n ...(modeSource?.filePath ? { sourceFile: modeSource.filePath } : {}),\n ...(modeSource?.baseDirectory ? { baseDirectory: modeSource.baseDirectory } : {}),\n },\n }\n : {}),\n layers,\n selections,\n packageEntries: selectedPackageEntries(resolvers, distributionPaths, featurePaths),\n };\n // Keys the prompt-cache namespace, so a different selection never shares cached prefixes.\n return {\n ...composition,\n fingerprint: sha256(\n JSON.stringify(\n canonicalValue({ ...composition, canonicalEntries: composition.packageEntries.map(canonicalModulePath) }),\n ),\n ),\n };\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","names":["resolvePackageEntry","resolveOptionalPackageEntry","resolveLocalPackageName"],"sources":["../../../../src/builders/cli/extensionAssembler/index.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\nimport { isLocalPackageSpecifier, type LayerResolvers, type MajorModesConfig } from '@agimon-ai/po-config/majorModes';\nimport {\n consumerPackageEntry,\n localEntries,\n localEntry,\n localPackageEntries,\n localPackageExport,\n localPackageName as resolveLocalPackageName,\n optionalPackageEntry as resolveOptionalPackageEntry,\n packageEntry as resolvePackageEntry,\n splitPackageSpecifier,\n} from '@agimon-ai/po-core/moduleResolution';\nimport { canonicalModulePath, sha256 } from '@agimon-ai/po-core/runtimeIdentity';\nimport { declaredServerPackagesOf } from '@agimon-ai/po-core/serverPlugin';\n\nimport { ownEntry } from '../entryResolution';\n\nexport interface ExtensionLayerResolvers extends LayerResolvers {\n /** Resolves a path authored under packages to its native discovery anchor. */\n localPackageEntries?: (specifier: string, baseDirectory: string) => string[] | undefined;\n /** Canonical manifest name for a path that represents a package directory. */\n localPackageName?: (specifier: string, baseDirectory: string) => string | undefined;\n}\n\nexport interface ExtensionContext {\n /** Named mode whose occurrence is part of composition identity. */\n majorMode?: string;\n /** Ordered layer occurrences selected by the active major mode. */\n layers: string[];\n majorModesConfig: MajorModesConfig;\n /** Resolver override used by synchronized replay. */\n resolvers?: ExtensionLayerResolvers;\n /**\n * Turns a configured package that does not resolve yet (not installed, or a local package\n * not built) into a missing selection with a diagnostic instead of an error, so a host that\n * only reads what sync prepared can still open. A fixed host package selected as a feature\n * still throws: that is a configuration error, not something sync can fix.\n */\n tolerateUnsynced?: boolean;\n}\n\nexport type SelectedEntryKind = 'extension' | 'package';\ntype ExtensionResolutionOutcome = 'resolved' | 'missing-optional';\n\n/**\n * One resolver-derived extension occurrence.\n *\n * This remains private to Po composition. It is not package metadata and\n * deliberately retains authored duplicates even though activation paths are\n * deduplicated later.\n */\ninterface ResolvedExtensionSelection {\n readonly layer: string;\n readonly layerIndex: number;\n readonly entryKind: SelectedEntryKind;\n readonly entryIndex: number;\n readonly manifestIndex: number;\n readonly selector: string;\n readonly sourceFile?: string;\n readonly baseDirectory: string;\n readonly optional: boolean;\n readonly outcome: ExtensionResolutionOutcome;\n readonly path?: string;\n readonly canonicalPath?: string;\n readonly diagnostic?: string;\n readonly config?: Record<string, unknown>;\n}\n\nexport interface CompositionLayerOccurrence {\n readonly name: string;\n readonly index: number;\n readonly sourceFile?: string;\n readonly baseDirectory: string;\n}\n\n/** Internal normalized composition shared by sync, bundles, and the session server. */\nexport interface ExtensionComposition {\n readonly majorMode?: {\n readonly name: string;\n readonly sourceFile?: string;\n readonly baseDirectory?: string;\n };\n readonly layers: readonly CompositionLayerOccurrence[];\n readonly selections: readonly ResolvedExtensionSelection[];\n /** Entries whose owning packages this composition selects, for native package discovery. */\n readonly packageEntries: readonly string[];\n /** Stable identity of this composition, published as the session's composition fingerprint. */\n readonly fingerprint: string;\n}\n\nconst DEFAULT_SELECTION_LAYER = 'default';\nconst DEFAULT_SELECTION_LAYER_INDEX = -1;\n\nconst FIXED_CORE_PACKAGES = new Set([\n '@agimon-ai/po',\n '@agimon-ai/po-artifact',\n '@agimon-ai/po-autostop',\n '@agimon-ai/po-cache',\n '@agimon-ai/po-config',\n '@agimon-ai/po-domain',\n '@agimon-ai/po-major-mode',\n '@agimon-ai/po-minor-mode',\n '@agimon-ai/po-notification',\n '@agimon-ai/po-profile',\n '@agimon-ai/po-session',\n '@agimon-ai/po-skill',\n '@agimon-ai/po-ui',\n]);\n\n/** Native server entries of the fixed host packages every composition selects. */\nconst CORE_PACKAGE_ENTRIES = [\n '@agimon-ai/po-minor-mode/extensions/server',\n '@agimon-ai/po-config/extensions/server',\n '@agimon-ai/po-ui/extensions/server',\n '@agimon-ai/po-notification/extensions/server',\n '@agimon-ai/po-profile/extensions/server',\n '@agimon-ai/po-major-mode/extensions/server',\n '@agimon-ai/po-skill/extensions/server',\n '@agimon-ai/po-domain/extensions/server',\n '@agimon-ai/po-artifact/extensions/server',\n] as const;\nconst CACHE_PACKAGE_ENTRY = '@agimon-ai/po-cache/extensions/server';\nconst SESSION_PACKAGE_ENTRY = '@agimon-ai/po-session/extensions/server';\n/** Po's own server package, resolved through the distribution like any own entry. */\nconst PO_SERVER_ENTRY = 'server';\n\n/** Manifest fields through which a selected package contributes to a Po host. */\nconst PO_CONTRIBUTION_FIELDS = ['poServer', 'poWeb', 'poMcp'] as const;\n\n/**\n * Resolves a selected package to its built server entry, or to its manifest as the discovery\n * anchor of a web or MCP only package. A package with no Po contribution resolves empty.\n */\nfunction nativePackageEntries(manifestPath: string, resolveExport: () => string | undefined): string[] {\n const manifest = JSON.parse(fs.readFileSync(manifestPath, 'utf8')) as Record<string, unknown>;\n const root = path.dirname(fs.realpathSync(manifestPath));\n const declaration = declaredServerPackagesOf(root, manifest)[0];\n if (!declaration) {\n return PO_CONTRIBUTION_FIELDS.some((field) => manifest[field] !== undefined)\n ? [path.join(root, 'package.json')]\n : [];\n }\n const exported = resolveExport();\n const dist = path.resolve(root, declaration.dist);\n if (!exported || !fs.existsSync(dist) || fs.realpathSync(exported) !== fs.realpathSync(dist)) {\n throw new Error(\n `Native package ${declaration.packageName} must export its built poServer dist as ./extensions/server.`,\n );\n }\n return [fs.realpathSync(dist)];\n}\n\n/** Resolves an installed package selection, or one explicit export subpath, from root. */\nfunction installedPackageEntries(\n specifier: string,\n root: string,\n environment: NodeJS.ProcessEnv = process.env,\n): string[] | undefined {\n if (splitPackageSpecifier(specifier).subpath !== '.') {\n const entry = consumerPackageEntry(specifier, root, environment);\n return entry ? [fs.realpathSync(entry)] : undefined;\n }\n const manifestPath = consumerPackageEntry(`${specifier}/package.json`, root, environment);\n return manifestPath\n ? nativePackageEntries(manifestPath, () =>\n consumerPackageEntry(`${specifier}/extensions/server`, root, environment),\n )\n : undefined;\n}\n\nfunction localSelectedPackageEntries(specifier: string, baseDirectory: string): string[] | undefined {\n const manifest = path.resolve(baseDirectory, specifier, 'package.json');\n return fs.existsSync(manifest)\n ? nativePackageEntries(manifest, () => localPackageExport(specifier, baseDirectory, './extensions/server'))\n : localPackageEntries(specifier, baseDirectory);\n}\n\nconst HOST_DIRECTORY = path.dirname(fileURLToPath(import.meta.url));\n\nexport const LAYER_RESOLVERS: ExtensionLayerResolvers = {\n ownEntry,\n packageEntry: (specifier) => resolvePackageEntry(specifier, import.meta.url),\n optionalPackageEntry: (specifier) => resolveOptionalPackageEntry(specifier, import.meta.url),\n packageEntries: (specifier) => {\n const entries = installedPackageEntries(specifier, HOST_DIRECTORY);\n if (!entries) throw new Error(`Cannot resolve package ${specifier}.`);\n return entries;\n },\n optionalPackageEntries: (specifier) => installedPackageEntries(specifier, HOST_DIRECTORY),\n localEntry,\n localEntries,\n localPackageEntries: localSelectedPackageEntries,\n localPackageName: resolveLocalPackageName,\n};\n\nfunction missingConsumerPackage(name: string, consumerRoot: string): Error {\n return new Error(`Cannot resolve configured package \"${name}\" from ${consumerRoot}.`);\n}\n\n/**\n * Resolves configured packages only from the consumer, while fixed core entries\n * may fall back to the host package's private dependency closure. `environment` names\n * the Po home whose shared runtime answers after the consumer's own tree.\n */\nexport function createLayerResolvers(\n consumerRoot?: string,\n environment: NodeJS.ProcessEnv = process.env,\n): ExtensionLayerResolvers {\n if (!consumerRoot) return LAYER_RESOLVERS;\n // Fixed host packages must match the executable, even when home contains an older installation.\n const fallbackEntry = (name: string): string | undefined =>\n FIXED_CORE_PACKAGES.has(packageName(name)) ? resolveOptionalPackageEntry(name, import.meta.url) : undefined;\n const requiredEntry = (name: string): string => {\n const entry = fallbackEntry(name) ?? consumerPackageEntry(name, consumerRoot, environment);\n if (!entry) throw missingConsumerPackage(name, consumerRoot);\n return entry;\n };\n const requiredEntries = (name: string): string[] => {\n const entries = installedPackageEntries(name, consumerRoot, environment);\n if (!entries) throw missingConsumerPackage(name, consumerRoot);\n return entries;\n };\n return {\n ownEntry,\n packageEntry: requiredEntry,\n optionalPackageEntry: (name) => fallbackEntry(name) ?? consumerPackageEntry(name, consumerRoot, environment),\n packageEntries: requiredEntries,\n optionalPackageEntries: (name) => installedPackageEntries(name, consumerRoot, environment),\n localEntry,\n localEntries,\n localPackageEntries: localSelectedPackageEntries,\n localPackageName: resolveLocalPackageName,\n };\n}\n\nfunction packageName(specifier: string): string {\n const segments = specifier.split('/');\n return specifier.startsWith('@') ? segments.slice(0, 2).join('/') : (segments[0] ?? specifier);\n}\n\n/** A fixed host package selected as a feature: a configuration error that tolerance never hides. */\nclass FixedPackageSelectionError extends Error {}\n\nfunction assertFeaturePackage(specifier: string, layer: string): void {\n const selectedPackage = packageName(specifier);\n if (FIXED_CORE_PACKAGES.has(selectedPackage)) {\n throw new FixedPackageSelectionError(\n `Layer \"${layer}\" cannot select fixed Po host package \"${selectedPackage}\" as a feature extension.`,\n );\n }\n}\n\nfunction resolveLocalExtensionEntries(\n resolvers: ExtensionLayerResolvers,\n specifier: string,\n baseDirectory: string,\n): string[] | undefined {\n const resolved = resolvers.localEntries?.(specifier, baseDirectory);\n if (resolved !== undefined) return resolved;\n const single = resolvers.localEntry(specifier, baseDirectory);\n return single ? [single] : undefined;\n}\n\nfunction resolveLocalPackageSelections(\n resolvers: ExtensionLayerResolvers,\n specifier: string,\n baseDirectory: string,\n): string[] | undefined {\n const resolved = resolvers.localPackageEntries?.(specifier, baseDirectory);\n if (resolved !== undefined) return resolved;\n return resolveLocalExtensionEntries(resolvers, specifier, baseDirectory);\n}\n\ninterface SelectionIdentity {\n layer: string;\n layerIndex: number;\n entryKind: SelectedEntryKind;\n entryIndex: number;\n selector: string;\n sourceFile?: string;\n baseDirectory: string;\n optional: boolean;\n config?: Record<string, unknown>;\n}\n\nfunction resolvedSelection(\n identity: SelectionIdentity,\n manifestIndex: number,\n resolvedPath: string,\n): ResolvedExtensionSelection {\n return {\n ...identity,\n manifestIndex,\n outcome: 'resolved',\n path: resolvedPath,\n canonicalPath: canonicalModulePath(resolvedPath),\n };\n}\n\nfunction missingOptionalSelection(identity: SelectionIdentity, diagnostic: string): ResolvedExtensionSelection {\n return {\n ...identity,\n manifestIndex: 0,\n outcome: 'missing-optional',\n diagnostic,\n };\n}\n\n/**\n * The selectors a tolerant composition left out because they do not resolve yet: the missing\n * selections of entries that are not optional, each once, in composition order.\n */\nexport function unsyncedSelectors(compositions: readonly ExtensionComposition[]): string[] {\n return [\n ...new Set(\n compositions.flatMap((composition) =>\n composition.selections\n .filter((selection) => selection.outcome === 'missing-optional' && !selection.optional)\n .map((selection) => selection.selector),\n ),\n ),\n ];\n}\n\nfunction errorMessage(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n\nfunction resolveDefinitionSelections(\n definition: MajorModesConfig['layers'][string],\n layer: string,\n layerIndex: number,\n resolvers: ExtensionLayerResolvers,\n tolerateUnsynced = false,\n): ResolvedExtensionSelection[] {\n const resolvedSelections: ResolvedExtensionSelection[] = [];\n const extensionEntries = definition.extensions ?? [];\n for (const [entryIndex, selector] of extensionEntries.entries()) {\n const identity: SelectionIdentity = {\n layer,\n layerIndex,\n entryKind: 'extension',\n entryIndex,\n selector,\n ...(definition.filePath ? { sourceFile: definition.filePath } : {}),\n baseDirectory: definition.baseDirectory,\n optional: false,\n };\n if (!isLocalPackageSpecifier(selector)) {\n resolvedSelections.push(resolvedSelection(identity, 0, resolvers.ownEntry(selector)));\n continue;\n }\n const resolved = resolveLocalExtensionEntries(resolvers, selector, definition.baseDirectory);\n if (!resolved?.length) {\n throw new Error(\n `Layer \"${layer}\" extension \"${selector}\" does not resolve under ${definition.baseDirectory}. ` +\n 'Point it at a Pi extension file or directory.',\n );\n }\n resolved.forEach((resolvedPath, manifestIndex) => {\n resolvedSelections.push(resolvedSelection(identity, manifestIndex, resolvedPath));\n });\n }\n\n const packageOffset = extensionEntries.length;\n for (const [packageIndex, configured] of (definition.packages ?? []).entries()) {\n const selector = typeof configured === 'string' ? configured : configured.name;\n const optional = typeof configured === 'string' ? false : configured.optional === true;\n const configValue = typeof configured === 'string' ? undefined : configured.config;\n const identity: SelectionIdentity = {\n layer,\n layerIndex,\n entryKind: 'package',\n entryIndex: packageOffset + packageIndex,\n selector,\n ...(definition.filePath ? { sourceFile: definition.filePath } : {}),\n baseDirectory: definition.baseDirectory,\n optional,\n ...(configValue === undefined ? {} : { config: configValue }),\n };\n\n let resolved: string[] | undefined;\n try {\n if (isLocalPackageSpecifier(selector)) {\n const manifestName = resolvers.localPackageName?.(selector, definition.baseDirectory);\n if (manifestName) assertFeaturePackage(manifestName, layer);\n resolved = resolveLocalPackageSelections(resolvers, selector, definition.baseDirectory);\n } else {\n assertFeaturePackage(selector, layer);\n if (optional) {\n resolved = resolvers.optionalPackageEntries?.(selector);\n if (resolved === undefined && !resolvers.optionalPackageEntries) {\n const single = resolvers.optionalPackageEntry(selector);\n resolved = single ? [single] : undefined;\n }\n } else {\n resolved = resolvers.packageEntries?.(selector) ?? [resolvers.packageEntry(selector)];\n }\n }\n } catch (error) {\n if (optional || (tolerateUnsynced && !(error instanceof FixedPackageSelectionError))) {\n resolvedSelections.push(missingOptionalSelection(identity, errorMessage(error)));\n continue;\n }\n throw error;\n }\n\n if (!resolved?.length && tolerateUnsynced && !optional) {\n resolvedSelections.push(\n missingOptionalSelection(\n identity,\n `Package \"${selector}\" is not synced yet: it resolves to no Po server, web or MCP contribution.`,\n ),\n );\n continue;\n }\n if (!resolved?.length) {\n if (optional) {\n resolvedSelections.push(\n missingOptionalSelection(\n identity,\n `Optional package \"${selector}\" is unavailable or declares no Po server, web or MCP contribution.`,\n ),\n );\n continue;\n }\n if (isLocalPackageSpecifier(selector)) {\n throw new Error(\n `Layer \"${layer}\" package \"${selector}\" does not resolve under ${definition.baseDirectory}. ` +\n 'Point it at an extension file, or a package directory whose package.json declares a Po contribution.',\n );\n }\n throw new Error(`Layer \"${layer}\" package \"${selector}\" declares no Po server, web or MCP contribution.`);\n }\n\n resolved.forEach((resolvedPath, manifestIndex) => {\n resolvedSelections.push(resolvedSelection(identity, manifestIndex, resolvedPath));\n });\n }\n\n return resolvedSelections;\n}\n\nfunction resolveLayerSelections(\n config: MajorModesConfig,\n layer: string,\n layerIndex: number,\n resolvers: ExtensionLayerResolvers,\n tolerateUnsynced: boolean,\n): ResolvedExtensionSelection[] {\n const definition = config.layers[layer];\n if (!definition) throw new Error(`Unknown layer: ${layer}`);\n return resolveDefinitionSelections(definition, layer, layerIndex, resolvers, tolerateUnsynced);\n}\n\nfunction resolveDefaultSelections(\n config: MajorModesConfig,\n resolvers: ExtensionLayerResolvers,\n tolerateUnsynced: boolean,\n): ResolvedExtensionSelection[] {\n if (!config.default) return [];\n return resolveDefinitionSelections(\n config.default,\n DEFAULT_SELECTION_LAYER,\n DEFAULT_SELECTION_LAYER_INDEX,\n resolvers,\n tolerateUnsynced,\n );\n}\n\nfunction resolveSelectedExtensions(context: ExtensionContext): ResolvedExtensionSelection[] {\n const resolvers = context.resolvers ?? LAYER_RESOLVERS;\n return context.layers.flatMap((layer, layerIndex) =>\n resolveLayerSelections(context.majorModesConfig, layer, layerIndex, resolvers, context.tolerateUnsynced === true),\n );\n}\n\nfunction deduplicatePaths(paths: readonly string[]): string[] {\n const seen = new Set<string>();\n const selected: string[] = [];\n for (const entry of paths) {\n const identity = canonicalModulePath(entry);\n if (seen.has(identity)) continue;\n seen.add(identity);\n selected.push(entry);\n }\n return selected;\n}\n\nfunction selectedFeaturePaths(selections: readonly ResolvedExtensionSelection[]): string[] {\n return deduplicatePaths(\n selections.flatMap((entry) => (entry.outcome === 'resolved' && entry.path ? [entry.path] : [])),\n );\n}\n\n/** Package anchors in the order the previous host activated them, so discovery order holds. */\nfunction selectedPackageEntries(\n resolve: ExtensionLayerResolvers,\n distributionPaths: readonly string[],\n featurePaths: readonly string[],\n): string[] {\n return deduplicatePaths([\n resolve.ownEntry(PO_SERVER_ENTRY),\n ...CORE_PACKAGE_ENTRIES.map((entry) => resolve.packageEntry(entry)),\n ...distributionPaths,\n ...featurePaths,\n resolve.packageEntry(CACHE_PACKAGE_ENTRY),\n resolve.packageEntry(SESSION_PACKAGE_ENTRY),\n ]);\n}\n\nfunction canonicalValue(value: unknown): unknown {\n if (Array.isArray(value)) return value.map(canonicalValue);\n if (value === null || typeof value !== 'object') return value;\n return Object.fromEntries(\n Object.entries(value as Record<string, unknown>)\n .filter(([, entry]) => entry !== undefined)\n .sort(([left], [right]) => left.localeCompare(right))\n .map(([key, entry]) => [key, canonicalValue(entry)]),\n );\n}\n\n/** Resolve one deterministic composition from authored layer occurrences. */\nexport function resolveExtensionComposition(context: ExtensionContext): ExtensionComposition {\n const resolvers = context.resolvers ?? LAYER_RESOLVERS;\n const defaultSelections = resolveDefaultSelections(\n context.majorModesConfig,\n resolvers,\n context.tolerateUnsynced === true,\n );\n const layerSelections = resolveSelectedExtensions(context);\n const selections = [...defaultSelections, ...layerSelections];\n const distributionPaths = selectedFeaturePaths(defaultSelections);\n const featurePaths = selectedFeaturePaths(layerSelections);\n const layers = context.layers.map((name, index): CompositionLayerOccurrence => {\n const definition = context.majorModesConfig.layers[name];\n if (!definition) throw new Error(`Unknown layer: ${name}`);\n return {\n name,\n index,\n ...(definition.filePath ? { sourceFile: definition.filePath } : {}),\n baseDirectory: definition.baseDirectory,\n };\n });\n const modeSource = context.majorMode ? context.majorModesConfig.majorModeSources?.[context.majorMode] : undefined;\n const composition = {\n ...(context.majorMode\n ? {\n majorMode: {\n name: context.majorMode,\n ...(modeSource?.filePath ? { sourceFile: modeSource.filePath } : {}),\n ...(modeSource?.baseDirectory ? { baseDirectory: modeSource.baseDirectory } : {}),\n },\n }\n : {}),\n layers,\n selections,\n packageEntries: selectedPackageEntries(resolvers, distributionPaths, featurePaths),\n };\n // Keys the prompt-cache namespace, so a different selection never shares cached prefixes.\n return {\n ...composition,\n fingerprint: sha256(\n JSON.stringify(\n canonicalValue({ ...composition, canonicalEntries: composition.packageEntries.map(canonicalModulePath) }),\n ),\n ),\n };\n}\n"],"mappings":"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"}
@@ -2,8 +2,9 @@
2
2
  "version": 1,
3
3
  "packages": {
4
4
  "@agimon-ai/po": {
5
- "version": "0.0.0-alpha.2",
5
+ "version": "0.0.0-alpha.21",
6
6
  "dependencies": [
7
+ "@agimon-ai/po-artifact",
7
8
  "@agimon-ai/po-autostop",
8
9
  "@agimon-ai/po-cache",
9
10
  "@agimon-ai/po-config",
@@ -21,9 +22,18 @@
21
22
  "@agimon-ai/po-web-security"
22
23
  ]
23
24
  },
25
+ "@agimon-ai/po-artifact": {
26
+ "version": "0.0.0-alpha.19",
27
+ "dependencies": [
28
+ "@agimon-ai/po-core",
29
+ "@agimon-ai/po-web-components",
30
+ "@agimon-ai/po-web-security"
31
+ ]
32
+ },
24
33
  "@agimon-ai/po-author": {
25
- "version": "0.0.0-alpha.2",
34
+ "version": "0.0.0-alpha.20",
26
35
  "dependencies": [
36
+ "@agimon-ai/po-artifact",
27
37
  "@agimon-ai/po-core",
28
38
  "@agimon-ai/po-minor-mode",
29
39
  "@agimon-ai/po-web-components",
@@ -31,41 +41,46 @@
31
41
  ]
32
42
  },
33
43
  "@agimon-ai/po-autocompact": {
34
- "version": "0.0.0-alpha.2",
44
+ "version": "0.0.0-alpha.20",
35
45
  "dependencies": [
46
+ "@agimon-ai/po-artifact",
36
47
  "@agimon-ai/po-config",
37
48
  "@agimon-ai/po-core",
38
49
  "@agimon-ai/po-telemetry"
39
50
  ]
40
51
  },
41
52
  "@agimon-ai/po-autostop": {
42
- "version": "0.0.0-alpha.2",
53
+ "version": "0.0.0-alpha.20",
43
54
  "dependencies": [
44
55
  "@agimon-ai/po-core",
45
56
  "@agimon-ai/po-telemetry"
46
57
  ]
47
58
  },
48
59
  "@agimon-ai/po-browse": {
49
- "version": "0.0.1-alpha.0",
60
+ "version": "0.0.1-alpha.18",
50
61
  "dependencies": [
51
62
  "@agimon-ai/po-core",
52
63
  "@agimon-ai/po-web-components"
53
64
  ]
54
65
  },
55
66
  "@agimon-ai/po-build": {
56
- "version": "0.0.0-alpha.2",
67
+ "version": "0.0.0-alpha.20",
57
68
  "dependencies": []
58
69
  },
59
70
  "@agimon-ai/po-cache": {
60
- "version": "0.0.0-alpha.2",
71
+ "version": "0.0.0-alpha.20",
61
72
  "dependencies": [
62
73
  "@agimon-ai/po-config",
63
74
  "@agimon-ai/po-core",
64
75
  "@agimon-ai/po-minor-mode"
65
76
  ]
66
77
  },
78
+ "@agimon-ai/po-claude-bridge": {
79
+ "version": "0.1.1-alpha.0",
80
+ "dependencies": []
81
+ },
67
82
  "@agimon-ai/po-computer-use": {
68
- "version": "0.0.0-alpha.2",
83
+ "version": "0.0.0-alpha.20",
69
84
  "dependencies": [
70
85
  "@agimon-ai/po-config",
71
86
  "@agimon-ai/po-core",
@@ -75,7 +90,7 @@
75
90
  ]
76
91
  },
77
92
  "@agimon-ai/po-config": {
78
- "version": "0.0.0-alpha.2",
93
+ "version": "0.0.0-alpha.20",
79
94
  "dependencies": [
80
95
  "@agimon-ai/po-core",
81
96
  "@agimon-ai/po-telemetry",
@@ -83,14 +98,14 @@
83
98
  ]
84
99
  },
85
100
  "@agimon-ai/po-core": {
86
- "version": "0.0.0-alpha.2",
101
+ "version": "0.0.0-alpha.20",
87
102
  "dependencies": [
88
103
  "@agimon-ai/po-telemetry",
89
104
  "@agimon-ai/po-web-security"
90
105
  ]
91
106
  },
92
107
  "@agimon-ai/po-domain": {
93
- "version": "0.0.0-alpha.2",
108
+ "version": "0.0.0-alpha.20",
94
109
  "dependencies": [
95
110
  "@agimon-ai/po-config",
96
111
  "@agimon-ai/po-core",
@@ -99,7 +114,7 @@
99
114
  ]
100
115
  },
101
116
  "@agimon-ai/po-edit": {
102
- "version": "0.0.0-alpha.2",
117
+ "version": "0.0.0-alpha.20",
103
118
  "dependencies": [
104
119
  "@agimon-ai/po-core",
105
120
  "@agimon-ai/po-hashline",
@@ -108,17 +123,18 @@
108
123
  ]
109
124
  },
110
125
  "@agimon-ai/po-file-edit": {
111
- "version": "0.0.0-alpha.2",
126
+ "version": "0.0.0-alpha.20",
112
127
  "dependencies": [
113
128
  "@agimon-ai/po-config",
114
129
  "@agimon-ai/po-core",
130
+ "@agimon-ai/po-hashline",
115
131
  "@agimon-ai/po-telemetry",
116
132
  "@agimon-ai/po-web-components",
117
133
  "@agimon-ai/po-web-security"
118
134
  ]
119
135
  },
120
136
  "@agimon-ai/po-git": {
121
- "version": "0.0.0-alpha.2",
137
+ "version": "0.0.0-alpha.20",
122
138
  "dependencies": [
123
139
  "@agimon-ai/po-core",
124
140
  "@agimon-ai/po-session",
@@ -127,7 +143,7 @@
127
143
  ]
128
144
  },
129
145
  "@agimon-ai/po-goal": {
130
- "version": "0.0.0-alpha.2",
146
+ "version": "0.0.0-alpha.20",
131
147
  "dependencies": [
132
148
  "@agimon-ai/po-core",
133
149
  "@agimon-ai/po-minor-mode",
@@ -136,7 +152,7 @@
136
152
  ]
137
153
  },
138
154
  "@agimon-ai/po-grep": {
139
- "version": "0.0.0-alpha.2",
155
+ "version": "0.0.0-alpha.20",
140
156
  "dependencies": [
141
157
  "@agimon-ai/po-core",
142
158
  "@agimon-ai/po-hashline",
@@ -145,11 +161,11 @@
145
161
  ]
146
162
  },
147
163
  "@agimon-ai/po-hashline": {
148
- "version": "0.0.0-alpha.2",
164
+ "version": "0.0.0-alpha.20",
149
165
  "dependencies": []
150
166
  },
151
167
  "@agimon-ai/po-help": {
152
- "version": "0.0.0-alpha.2",
168
+ "version": "0.0.0-alpha.20",
153
169
  "dependencies": [
154
170
  "@agimon-ai/po-core",
155
171
  "@agimon-ai/po-minor-mode",
@@ -157,7 +173,7 @@
157
173
  ]
158
174
  },
159
175
  "@agimon-ai/po-hook": {
160
- "version": "0.0.0-alpha.2",
176
+ "version": "0.0.0-alpha.20",
161
177
  "dependencies": [
162
178
  "@agimon-ai/po-config",
163
179
  "@agimon-ai/po-core",
@@ -165,14 +181,15 @@
165
181
  ]
166
182
  },
167
183
  "@agimon-ai/po-image-gen": {
168
- "version": "0.0.0",
184
+ "version": "0.0.0-alpha.19",
169
185
  "dependencies": [
170
186
  "@agimon-ai/po-core",
171
- "@agimon-ai/po-web-components"
187
+ "@agimon-ai/po-web-components",
188
+ "@agimon-ai/po-web-security"
172
189
  ]
173
190
  },
174
191
  "@agimon-ai/po-log": {
175
- "version": "0.0.0-alpha.2",
192
+ "version": "0.0.0-alpha.20",
176
193
  "dependencies": [
177
194
  "@agimon-ai/po-core",
178
195
  "@agimon-ai/po-telemetry",
@@ -181,7 +198,7 @@
181
198
  ]
182
199
  },
183
200
  "@agimon-ai/po-loop": {
184
- "version": "0.0.0-alpha.2",
201
+ "version": "0.0.0-alpha.20",
185
202
  "dependencies": [
186
203
  "@agimon-ai/po-core",
187
204
  "@agimon-ai/po-minor-mode",
@@ -190,7 +207,7 @@
190
207
  ]
191
208
  },
192
209
  "@agimon-ai/po-major-mode": {
193
- "version": "0.0.0-alpha.2",
210
+ "version": "0.0.0-alpha.20",
194
211
  "dependencies": [
195
212
  "@agimon-ai/po-config",
196
213
  "@agimon-ai/po-core",
@@ -199,7 +216,7 @@
199
216
  ]
200
217
  },
201
218
  "@agimon-ai/po-mcp": {
202
- "version": "0.0.0-alpha.2",
219
+ "version": "0.0.0-alpha.20",
203
220
  "dependencies": [
204
221
  "@agimon-ai/po-config",
205
222
  "@agimon-ai/po-core",
@@ -208,33 +225,33 @@
208
225
  ]
209
226
  },
210
227
  "@agimon-ai/po-minor-mode": {
211
- "version": "0.0.0-alpha.2",
228
+ "version": "0.0.0-alpha.20",
212
229
  "dependencies": [
213
230
  "@agimon-ai/po-core",
214
231
  "@agimon-ai/po-telemetry"
215
232
  ]
216
233
  },
217
234
  "@agimon-ai/po-model-guidance": {
218
- "version": "0.0.0-alpha.2",
235
+ "version": "0.0.0-alpha.20",
219
236
  "dependencies": [
220
237
  "@agimon-ai/po-config",
221
238
  "@agimon-ai/po-core"
222
239
  ]
223
240
  },
224
241
  "@agimon-ai/po-native-components": {
225
- "version": "0.0.0-alpha.2",
242
+ "version": "0.0.0-alpha.20",
226
243
  "dependencies": [
227
244
  "@agimon-ai/po-web-components"
228
245
  ]
229
246
  },
230
247
  "@agimon-ai/po-notification": {
231
- "version": "0.0.0-alpha.2",
248
+ "version": "0.0.0-alpha.20",
232
249
  "dependencies": [
233
250
  "@agimon-ai/po-core"
234
251
  ]
235
252
  },
236
253
  "@agimon-ai/po-plan": {
237
- "version": "0.0.0-alpha.2",
254
+ "version": "0.0.0-alpha.20",
238
255
  "dependencies": [
239
256
  "@agimon-ai/po-config",
240
257
  "@agimon-ai/po-core",
@@ -245,7 +262,7 @@
245
262
  ]
246
263
  },
247
264
  "@agimon-ai/po-profile": {
248
- "version": "0.0.0-alpha.2",
265
+ "version": "0.0.0-alpha.20",
249
266
  "dependencies": [
250
267
  "@agimon-ai/po-config",
251
268
  "@agimon-ai/po-core",
@@ -254,7 +271,7 @@
254
271
  ]
255
272
  },
256
273
  "@agimon-ai/po-prompt": {
257
- "version": "0.0.0-alpha.2",
274
+ "version": "0.0.0-alpha.20",
258
275
  "dependencies": [
259
276
  "@agimon-ai/po-core",
260
277
  "@agimon-ai/po-web-components",
@@ -262,7 +279,7 @@
262
279
  ]
263
280
  },
264
281
  "@agimon-ai/po-read": {
265
- "version": "0.0.0-alpha.2",
282
+ "version": "0.0.0-alpha.20",
266
283
  "dependencies": [
267
284
  "@agimon-ai/po-config",
268
285
  "@agimon-ai/po-core",
@@ -272,7 +289,7 @@
272
289
  ]
273
290
  },
274
291
  "@agimon-ai/po-runner": {
275
- "version": "0.0.0-alpha.2",
292
+ "version": "0.0.0-alpha.20",
276
293
  "dependencies": [
277
294
  "@agimon-ai/po-core",
278
295
  "@agimon-ai/po-telemetry",
@@ -282,19 +299,19 @@
282
299
  ]
283
300
  },
284
301
  "@agimon-ai/po-sandbox": {
285
- "version": "0.0.0-alpha.2",
302
+ "version": "0.0.0-alpha.20",
286
303
  "dependencies": [
287
304
  "@agimon-ai/po-core"
288
305
  ]
289
306
  },
290
307
  "@agimon-ai/po-session": {
291
- "version": "0.0.0-alpha.2",
308
+ "version": "0.0.0-alpha.20",
292
309
  "dependencies": [
293
310
  "@agimon-ai/po-core"
294
311
  ]
295
312
  },
296
313
  "@agimon-ai/po-skill": {
297
- "version": "0.0.0-alpha.2",
314
+ "version": "0.0.0-alpha.20",
298
315
  "dependencies": [
299
316
  "@agimon-ai/po-config",
300
317
  "@agimon-ai/po-core",
@@ -304,7 +321,7 @@
304
321
  ]
305
322
  },
306
323
  "@agimon-ai/po-style-system": {
307
- "version": "0.0.0-alpha.2",
324
+ "version": "0.0.0-alpha.20",
308
325
  "dependencies": [
309
326
  "@agimon-ai/po-core",
310
327
  "@agimon-ai/po-web-components",
@@ -312,7 +329,7 @@
312
329
  ]
313
330
  },
314
331
  "@agimon-ai/po-task": {
315
- "version": "0.0.0-alpha.2",
332
+ "version": "0.0.0-alpha.20",
316
333
  "dependencies": [
317
334
  "@agimon-ai/po-core",
318
335
  "@agimon-ai/po-telemetry",
@@ -321,7 +338,7 @@
321
338
  ]
322
339
  },
323
340
  "@agimon-ai/po-team": {
324
- "version": "0.0.0-alpha.2",
341
+ "version": "0.0.0-alpha.20",
325
342
  "dependencies": [
326
343
  "@agimon-ai/po-cache",
327
344
  "@agimon-ai/po-config",
@@ -334,11 +351,11 @@
334
351
  ]
335
352
  },
336
353
  "@agimon-ai/po-telemetry": {
337
- "version": "0.0.0-alpha.2",
354
+ "version": "0.0.0-alpha.20",
338
355
  "dependencies": []
339
356
  },
340
357
  "@agimon-ai/po-template-advanced": {
341
- "version": "0.0.0-alpha.2",
358
+ "version": "0.0.0-alpha.20",
342
359
  "dependencies": [
343
360
  "@agimon-ai/po-core",
344
361
  "@agimon-ai/po-web-components",
@@ -346,7 +363,7 @@
346
363
  ]
347
364
  },
348
365
  "@agimon-ai/po-template-elegant": {
349
- "version": "0.0.0-alpha.2",
366
+ "version": "0.0.0-alpha.20",
350
367
  "dependencies": [
351
368
  "@agimon-ai/po-core",
352
369
  "@agimon-ai/po-web-components",
@@ -354,7 +371,7 @@
354
371
  ]
355
372
  },
356
373
  "@agimon-ai/po-ui": {
357
- "version": "0.0.0-alpha.2",
374
+ "version": "0.0.0-alpha.20",
358
375
  "dependencies": [
359
376
  "@agimon-ai/po-core",
360
377
  "@agimon-ai/po-hashline",
@@ -364,7 +381,7 @@
364
381
  ]
365
382
  },
366
383
  "@agimon-ai/po-user-feedback": {
367
- "version": "0.0.0-alpha.2",
384
+ "version": "0.0.0-alpha.20",
368
385
  "dependencies": [
369
386
  "@agimon-ai/po-core",
370
387
  "@agimon-ai/po-minor-mode",
@@ -372,7 +389,7 @@
372
389
  ]
373
390
  },
374
391
  "@agimon-ai/po-voice": {
375
- "version": "0.0.0-alpha.2",
392
+ "version": "0.0.0-alpha.20",
376
393
  "dependencies": [
377
394
  "@agimon-ai/po-config",
378
395
  "@agimon-ai/po-core",
@@ -385,11 +402,11 @@
385
402
  ]
386
403
  },
387
404
  "@agimon-ai/po-web-components": {
388
- "version": "0.0.0-alpha.2",
405
+ "version": "0.0.0-alpha.20",
389
406
  "dependencies": []
390
407
  },
391
408
  "@agimon-ai/po-web-dashboard": {
392
- "version": "0.0.0-alpha.2",
409
+ "version": "0.0.0-alpha.20",
393
410
  "dependencies": [
394
411
  "@agimon-ai/po-core",
395
412
  "@agimon-ai/po-web-components",
@@ -397,18 +414,18 @@
397
414
  ]
398
415
  },
399
416
  "@agimon-ai/po-web-search": {
400
- "version": "0.0.0",
417
+ "version": "0.0.0-alpha.19",
401
418
  "dependencies": [
402
419
  "@agimon-ai/po-core",
403
420
  "@agimon-ai/po-web-components"
404
421
  ]
405
422
  },
406
423
  "@agimon-ai/po-web-security": {
407
- "version": "0.0.0-alpha.2",
424
+ "version": "0.0.0-alpha.20",
408
425
  "dependencies": []
409
426
  },
410
427
  "@agimon-ai/po-workflow": {
411
- "version": "0.0.0-alpha.2",
428
+ "version": "0.0.0-alpha.20",
412
429
  "dependencies": [
413
430
  "@agimon-ai/po-core",
414
431
  "@agimon-ai/po-minor-mode",
package/dist/cliApp.mjs CHANGED
@@ -1,2 +1 @@
1
- import { CliApp, requestUnsyncedPackages, runCli, runHarness } from "./src/cli/cliApp.mjs";
2
- export { CliApp, requestUnsyncedPackages, runCli, runHarness };
1
+ export { CliApp, requestUnsyncedPackages, runCli, runHarness } from "./src/cli/cliApp.mjs";
package/dist/codex.mjs CHANGED
@@ -1,2 +1 @@
1
- import { CODEX_PROVIDER, codexCompatibilityArgs, codexEnvironment, codexPluginDirectories, launchCodex, supportsCodexManagedProfile } from "./src/cli/commands/compat/providers/codex.mjs";
2
- export { CODEX_PROVIDER, codexCompatibilityArgs, codexEnvironment, codexPluginDirectories, launchCodex, supportsCodexManagedProfile };
1
+ export { CODEX_PROVIDER, codexCompatibilityArgs, codexEnvironment, codexPluginDirectories, launchCodex, supportsCodexManagedProfile } from "./src/cli/commands/compat/providers/codex.mjs";