@undefineds.co/linx 0.3.25 → 0.3.27

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 (362) hide show
  1. package/README.md +4 -3
  2. package/dist/index.js +3 -832
  3. package/dist/index.js.map +1 -1
  4. package/dist/lib/agent-stream-bridge-contract.js +2 -0
  5. package/dist/lib/agent-stream-bridge-contract.js.map +1 -0
  6. package/dist/lib/auto-mode/auth.js +100 -2
  7. package/dist/lib/auto-mode/auth.js.map +1 -1
  8. package/dist/lib/auto-mode/backend-kind.js +13 -0
  9. package/dist/lib/auto-mode/backend-kind.js.map +1 -0
  10. package/dist/lib/auto-mode/display.js +1 -1
  11. package/dist/lib/auto-mode/display.js.map +1 -1
  12. package/dist/lib/auto-mode/format.js +1 -1
  13. package/dist/lib/auto-mode/format.js.map +1 -1
  14. package/dist/lib/auto-mode/hooks/{index.js → registry.js} +1 -1
  15. package/dist/lib/auto-mode/hooks/registry.js.map +1 -0
  16. package/dist/lib/auto-mode/pod-ai.js +1 -14
  17. package/dist/lib/auto-mode/pod-ai.js.map +1 -1
  18. package/dist/lib/auto-mode/pod-approval-store.js +596 -0
  19. package/dist/lib/auto-mode/pod-approval-store.js.map +1 -0
  20. package/dist/lib/auto-mode/pod-approval.js +4 -607
  21. package/dist/lib/auto-mode/pod-approval.js.map +1 -1
  22. package/dist/lib/auto-mode/pod-persistence-builders.js +266 -0
  23. package/dist/lib/auto-mode/pod-persistence-builders.js.map +1 -0
  24. package/dist/lib/auto-mode/pod-persistence.js +1 -281
  25. package/dist/lib/auto-mode/pod-persistence.js.map +1 -1
  26. package/dist/lib/auto-mode/runner.js +41 -378
  27. package/dist/lib/auto-mode/runner.js.map +1 -1
  28. package/dist/lib/auto-mode/runtime.js +25 -0
  29. package/dist/lib/auto-mode/runtime.js.map +1 -0
  30. package/dist/lib/auto-mode/secretary-reaction-window.js +12 -0
  31. package/dist/lib/auto-mode/secretary-reaction-window.js.map +1 -0
  32. package/dist/lib/auto-mode/secretary-runtime-config.js +66 -0
  33. package/dist/lib/auto-mode/secretary-runtime-config.js.map +1 -0
  34. package/dist/lib/auto-mode/secretary.js +2 -64
  35. package/dist/lib/auto-mode/secretary.js.map +1 -1
  36. package/dist/lib/auto-mode/session-log.js +25 -0
  37. package/dist/lib/auto-mode/session-log.js.map +1 -0
  38. package/dist/lib/auto-mode/shell-command.js +172 -0
  39. package/dist/lib/auto-mode/shell-command.js.map +1 -0
  40. package/dist/lib/auto-mode-command.js +2 -1
  41. package/dist/lib/auto-mode-command.js.map +1 -1
  42. package/dist/lib/backend-command-router-contract.js +2 -0
  43. package/dist/lib/backend-command-router-contract.js.map +1 -0
  44. package/dist/lib/{pi-adapter/backend-credentials.js → backend-credentials.js} +8 -8
  45. package/dist/lib/backend-credentials.js.map +1 -0
  46. package/dist/lib/linx-ai-connect-command.js +201 -0
  47. package/dist/lib/linx-ai-connect-command.js.map +1 -0
  48. package/dist/lib/linx-assistant-message-rendering.js +33 -0
  49. package/dist/lib/linx-assistant-message-rendering.js.map +1 -0
  50. package/dist/lib/linx-auto-command-routing.js +53 -0
  51. package/dist/lib/linx-auto-command-routing.js.map +1 -0
  52. package/dist/lib/linx-auto-editor-indicator-host.js +15 -0
  53. package/dist/lib/linx-auto-editor-indicator-host.js.map +1 -0
  54. package/dist/lib/linx-auto-editor-indicator.js +56 -0
  55. package/dist/lib/linx-auto-editor-indicator.js.map +1 -0
  56. package/dist/lib/linx-auto-mode-cli-admission.js +16 -0
  57. package/dist/lib/linx-auto-mode-cli-admission.js.map +1 -0
  58. package/dist/lib/linx-backend-command-router.js +64 -0
  59. package/dist/lib/linx-backend-command-router.js.map +1 -0
  60. package/dist/lib/linx-backend-event-source.js +32 -0
  61. package/dist/lib/linx-backend-event-source.js.map +1 -0
  62. package/dist/lib/linx-chat-completion-projection.js +276 -0
  63. package/dist/lib/linx-chat-completion-projection.js.map +1 -0
  64. package/dist/lib/linx-cloud-errors.js +1 -0
  65. package/dist/lib/linx-cloud-errors.js.map +1 -1
  66. package/dist/lib/linx-cloud-models.js +75 -0
  67. package/dist/lib/linx-cloud-models.js.map +1 -0
  68. package/dist/lib/linx-cloud-runtime-auth.js +146 -0
  69. package/dist/lib/linx-cloud-runtime-auth.js.map +1 -0
  70. package/dist/lib/linx-cloud-runtime-coordinator.js +102 -0
  71. package/dist/lib/linx-cloud-runtime-coordinator.js.map +1 -0
  72. package/dist/lib/linx-codex-plugin-command.js +56 -0
  73. package/dist/lib/linx-codex-plugin-command.js.map +1 -0
  74. package/dist/lib/linx-command-autocomplete.js +123 -0
  75. package/dist/lib/linx-command-autocomplete.js.map +1 -0
  76. package/dist/lib/linx-completion-backend.js +2 -0
  77. package/dist/lib/linx-completion-backend.js.map +1 -0
  78. package/dist/lib/linx-config-command.js +12 -0
  79. package/dist/lib/linx-config-command.js.map +1 -0
  80. package/dist/lib/linx-editor-component-router.js +83 -0
  81. package/dist/lib/linx-editor-component-router.js.map +1 -0
  82. package/dist/lib/linx-extension-ui-context-router.js +43 -0
  83. package/dist/lib/linx-extension-ui-context-router.js.map +1 -0
  84. package/dist/lib/linx-external-open-host.js +8 -0
  85. package/dist/lib/linx-external-open-host.js.map +1 -0
  86. package/dist/lib/linx-external-url.js +16 -0
  87. package/dist/lib/linx-external-url.js.map +1 -0
  88. package/dist/lib/linx-footer-patch.js +52 -0
  89. package/dist/lib/linx-footer-patch.js.map +1 -0
  90. package/dist/lib/linx-input-command-routing.js +65 -0
  91. package/dist/lib/linx-input-command-routing.js.map +1 -0
  92. package/dist/lib/linx-interactive-auth-state-host.js +50 -0
  93. package/dist/lib/linx-interactive-auth-state-host.js.map +1 -0
  94. package/dist/lib/linx-interactive-autocomplete-host.js +32 -0
  95. package/dist/lib/linx-interactive-autocomplete-host.js.map +1 -0
  96. package/dist/lib/linx-interactive-bootstrap.js +66 -0
  97. package/dist/lib/linx-interactive-bootstrap.js.map +1 -0
  98. package/dist/lib/linx-interactive-branding.js +24 -0
  99. package/dist/lib/linx-interactive-branding.js.map +1 -0
  100. package/dist/lib/linx-interactive-chat-text-host.js +16 -0
  101. package/dist/lib/linx-interactive-chat-text-host.js.map +1 -0
  102. package/dist/lib/linx-interactive-command-routing-host.js +31 -0
  103. package/dist/lib/linx-interactive-command-routing-host.js.map +1 -0
  104. package/dist/lib/linx-interactive-command-routing.js +75 -0
  105. package/dist/lib/linx-interactive-command-routing.js.map +1 -0
  106. package/dist/lib/linx-interactive-command-surface.js +16 -0
  107. package/dist/lib/linx-interactive-command-surface.js.map +1 -0
  108. package/dist/lib/linx-interactive-editor-text-host.js +16 -0
  109. package/dist/lib/linx-interactive-editor-text-host.js.map +1 -0
  110. package/dist/lib/linx-interactive-error-display.js +8 -0
  111. package/dist/lib/linx-interactive-error-display.js.map +1 -0
  112. package/dist/lib/linx-interactive-event-router.js +91 -0
  113. package/dist/lib/linx-interactive-event-router.js.map +1 -0
  114. package/dist/lib/linx-interactive-extension-input-host.js +7 -0
  115. package/dist/lib/linx-interactive-extension-input-host.js.map +1 -0
  116. package/dist/lib/linx-interactive-extension-selector-host.js +12 -0
  117. package/dist/lib/linx-interactive-extension-selector-host.js.map +1 -0
  118. package/dist/lib/linx-interactive-header-host.js +14 -0
  119. package/dist/lib/linx-interactive-header-host.js.map +1 -0
  120. package/dist/lib/linx-interactive-lifecycle-host.js +4 -0
  121. package/dist/lib/linx-interactive-lifecycle-host.js.map +1 -0
  122. package/dist/lib/linx-interactive-login-ui-router.js +81 -0
  123. package/dist/lib/linx-interactive-login-ui-router.js.map +1 -0
  124. package/dist/lib/linx-interactive-model-registry-host.js +14 -0
  125. package/dist/lib/linx-interactive-model-registry-host.js.map +1 -0
  126. package/dist/lib/linx-interactive-post-init.js +60 -0
  127. package/dist/lib/linx-interactive-post-init.js.map +1 -0
  128. package/dist/lib/linx-interactive-provider-count-host.js +4 -0
  129. package/dist/lib/linx-interactive-provider-count-host.js.map +1 -0
  130. package/dist/lib/linx-interactive-run-router.js +43 -0
  131. package/dist/lib/linx-interactive-run-router.js.map +1 -0
  132. package/dist/lib/linx-interactive-runtime-host.js +113 -0
  133. package/dist/lib/linx-interactive-runtime-host.js.map +1 -0
  134. package/dist/lib/linx-interactive-selector-host.js +12 -0
  135. package/dist/lib/linx-interactive-selector-host.js.map +1 -0
  136. package/dist/lib/linx-interactive-shell-state.js +215 -0
  137. package/dist/lib/linx-interactive-shell-state.js.map +1 -0
  138. package/dist/lib/linx-interactive-status-display.js +9 -0
  139. package/dist/lib/linx-interactive-status-display.js.map +1 -0
  140. package/dist/lib/linx-interactive-stop-router.js +85 -0
  141. package/dist/lib/linx-interactive-stop-router.js.map +1 -0
  142. package/dist/lib/linx-interactive-streaming-message-host.js +11 -0
  143. package/dist/lib/linx-interactive-streaming-message-host.js.map +1 -0
  144. package/dist/lib/linx-interactive-submit-router.js +63 -0
  145. package/dist/lib/linx-interactive-submit-router.js.map +1 -0
  146. package/dist/lib/linx-interactive-update-router.js +78 -0
  147. package/dist/lib/linx-interactive-update-router.js.map +1 -0
  148. package/dist/lib/linx-interactive-update-state-host.js +43 -0
  149. package/dist/lib/linx-interactive-update-state-host.js.map +1 -0
  150. package/dist/lib/linx-interactive-warning-display.js +4 -0
  151. package/dist/lib/linx-interactive-warning-display.js.map +1 -0
  152. package/dist/lib/linx-interrupt-control-host.js +22 -0
  153. package/dist/lib/linx-interrupt-control-host.js.map +1 -0
  154. package/dist/lib/linx-interrupt-control.js +96 -0
  155. package/dist/lib/linx-interrupt-control.js.map +1 -0
  156. package/dist/lib/linx-login-flow.js +566 -0
  157. package/dist/lib/linx-login-flow.js.map +1 -0
  158. package/dist/lib/linx-models-command.js +71 -0
  159. package/dist/lib/linx-models-command.js.map +1 -0
  160. package/dist/lib/linx-package-command.js +117 -0
  161. package/dist/lib/linx-package-command.js.map +1 -0
  162. package/dist/lib/linx-peer-command-routing.js +20 -0
  163. package/dist/lib/linx-peer-command-routing.js.map +1 -0
  164. package/dist/lib/linx-pi-cli-command.js +121 -0
  165. package/dist/lib/linx-pi-cli-command.js.map +1 -0
  166. package/dist/lib/linx-pi-completion-events.js +101 -0
  167. package/dist/lib/linx-pi-completion-events.js.map +1 -0
  168. package/dist/lib/linx-pi-normalized-event-stream.js +41 -0
  169. package/dist/lib/linx-pi-normalized-event-stream.js.map +1 -0
  170. package/dist/lib/linx-pi-resume-cli-admission.js +21 -0
  171. package/dist/lib/linx-pi-resume-cli-admission.js.map +1 -0
  172. package/dist/lib/linx-pi-runtime-execution.js +67 -0
  173. package/dist/lib/linx-pi-runtime-execution.js.map +1 -0
  174. package/dist/lib/linx-pi-startup-control.js +49 -0
  175. package/dist/lib/linx-pi-startup-control.js.map +1 -0
  176. package/dist/lib/linx-pi-startup-plan.js +103 -0
  177. package/dist/lib/linx-pi-startup-plan.js.map +1 -0
  178. package/dist/lib/linx-pi-stream-errors.js +10 -0
  179. package/dist/lib/linx-pi-stream-errors.js.map +1 -0
  180. package/dist/lib/linx-pod-backed-extension-ui.js +29 -0
  181. package/dist/lib/linx-pod-backed-extension-ui.js.map +1 -0
  182. package/dist/lib/linx-pod-data-session-factory.js +19 -0
  183. package/dist/lib/linx-pod-data-session-factory.js.map +1 -0
  184. package/dist/lib/linx-pod-mirror-runtime-host.js +50 -0
  185. package/dist/lib/linx-pod-mirror-runtime-host.js.map +1 -0
  186. package/dist/lib/linx-pod-mirror-sync-cli-admission.js +18 -0
  187. package/dist/lib/linx-pod-mirror-sync-cli-admission.js.map +1 -0
  188. package/dist/lib/linx-pod-mirror-sync-command.js +30 -0
  189. package/dist/lib/linx-pod-mirror-sync-command.js.map +1 -0
  190. package/dist/lib/{pi-adapter/sync-recovery.js → linx-pod-mirror-sync-recovery.js} +13 -13
  191. package/dist/lib/linx-pod-mirror-sync-recovery.js.map +1 -0
  192. package/dist/lib/{pi-adapter/pod-mirror.js → linx-pod-mirror.js} +63 -40
  193. package/dist/lib/linx-pod-mirror.js.map +1 -0
  194. package/dist/lib/linx-restored-auto-startup.js +21 -0
  195. package/dist/lib/linx-restored-auto-startup.js.map +1 -0
  196. package/dist/lib/linx-resume-output.js +209 -0
  197. package/dist/lib/linx-resume-output.js.map +1 -0
  198. package/dist/lib/linx-retired-command.js +22 -0
  199. package/dist/lib/linx-retired-command.js.map +1 -0
  200. package/dist/lib/linx-rewind-command.js +209 -0
  201. package/dist/lib/linx-rewind-command.js.map +1 -0
  202. package/dist/lib/linx-runtime-adapter-contract.js +2 -0
  203. package/dist/lib/linx-runtime-adapter-contract.js.map +1 -0
  204. package/dist/lib/linx-runtime-adapter-defaults.js +17 -0
  205. package/dist/lib/linx-runtime-adapter-defaults.js.map +1 -0
  206. package/dist/lib/linx-runtime-adapter-dependencies.js +2 -0
  207. package/dist/lib/linx-runtime-adapter-dependencies.js.map +1 -0
  208. package/dist/lib/linx-runtime-agent-session.js +130 -0
  209. package/dist/lib/linx-runtime-agent-session.js.map +1 -0
  210. package/dist/lib/linx-runtime-auth.js +5 -0
  211. package/dist/lib/linx-runtime-auth.js.map +1 -0
  212. package/dist/lib/linx-runtime-backend-composition.js +73 -0
  213. package/dist/lib/linx-runtime-backend-composition.js.map +1 -0
  214. package/dist/lib/linx-runtime-coding-tools.js +58 -0
  215. package/dist/lib/linx-runtime-coding-tools.js.map +1 -0
  216. package/dist/lib/linx-runtime-completion-backend.js +27 -0
  217. package/dist/lib/linx-runtime-completion-backend.js.map +1 -0
  218. package/dist/lib/linx-runtime-oauth-provider.js +57 -0
  219. package/dist/lib/linx-runtime-oauth-provider.js.map +1 -0
  220. package/dist/lib/linx-runtime-provider-registration.js +33 -0
  221. package/dist/lib/linx-runtime-provider-registration.js.map +1 -0
  222. package/dist/lib/linx-runtime-resources.js +167 -0
  223. package/dist/lib/linx-runtime-resources.js.map +1 -0
  224. package/dist/lib/linx-runtime-system-prompt.js +27 -0
  225. package/dist/lib/linx-runtime-system-prompt.js.map +1 -0
  226. package/dist/lib/linx-runtime-thinking.js +21 -0
  227. package/dist/lib/linx-runtime-thinking.js.map +1 -0
  228. package/dist/lib/linx-selector-choice.js +38 -0
  229. package/dist/lib/linx-selector-choice.js.map +1 -0
  230. package/dist/lib/linx-self-update.js +113 -0
  231. package/dist/lib/linx-self-update.js.map +1 -0
  232. package/dist/lib/linx-session-command-routing-host.js +24 -0
  233. package/dist/lib/linx-session-command-routing-host.js.map +1 -0
  234. package/dist/lib/linx-session-command-routing.js +68 -0
  235. package/dist/lib/linx-session-command-routing.js.map +1 -0
  236. package/dist/lib/linx-session-cwd-router.js +15 -0
  237. package/dist/lib/linx-session-cwd-router.js.map +1 -0
  238. package/dist/lib/linx-session-history.js +388 -0
  239. package/dist/lib/linx-session-history.js.map +1 -0
  240. package/dist/lib/{pi-adapter/session.js → linx-session-manager.js} +94 -46
  241. package/dist/lib/linx-session-manager.js.map +1 -0
  242. package/dist/lib/linx-session-metadata.js +55 -0
  243. package/dist/lib/linx-session-metadata.js.map +1 -0
  244. package/dist/lib/linx-session-selector-ui.js +32 -0
  245. package/dist/lib/linx-session-selector-ui.js.map +1 -0
  246. package/dist/lib/linx-session-thinking-capability-router.js +55 -0
  247. package/dist/lib/linx-session-thinking-capability-router.js.map +1 -0
  248. package/dist/lib/linx-session-work-control.js +163 -0
  249. package/dist/lib/linx-session-work-control.js.map +1 -0
  250. package/dist/lib/linx-shell-command-executor.js +41 -0
  251. package/dist/lib/linx-shell-command-executor.js.map +1 -0
  252. package/dist/lib/linx-shell-command-router.js +151 -0
  253. package/dist/lib/linx-shell-command-router.js.map +1 -0
  254. package/dist/lib/{pi-adapter/control-state.js → linx-startup-control-state.js} +6 -6
  255. package/dist/lib/linx-startup-control-state.js.map +1 -0
  256. package/dist/lib/linx-startup-login-policy.js +48 -0
  257. package/dist/lib/linx-startup-login-policy.js.map +1 -0
  258. package/dist/lib/linx-status-line-command.js +382 -0
  259. package/dist/lib/linx-status-line-command.js.map +1 -0
  260. package/dist/lib/{status-line-command.js → linx-status-line-config-command.js} +2 -12
  261. package/dist/lib/linx-status-line-config-command.js.map +1 -0
  262. package/dist/lib/linx-status-line.js +12 -4
  263. package/dist/lib/linx-status-line.js.map +1 -1
  264. package/dist/lib/linx-stream-abort.js +12 -0
  265. package/dist/lib/linx-stream-abort.js.map +1 -0
  266. package/dist/lib/linx-stream-error-formatting.js +54 -0
  267. package/dist/lib/linx-stream-error-formatting.js.map +1 -0
  268. package/dist/lib/linx-submitted-user-message-recording.js +16 -0
  269. package/dist/lib/linx-submitted-user-message-recording.js.map +1 -0
  270. package/dist/lib/linx-symphony-interactive-command.js +493 -0
  271. package/dist/lib/linx-symphony-interactive-command.js.map +1 -0
  272. package/dist/lib/linx-terminal-title-router.js +49 -0
  273. package/dist/lib/linx-terminal-title-router.js.map +1 -0
  274. package/dist/lib/{pi-adapter/theme.js → linx-theme.js} +2 -2
  275. package/dist/lib/linx-theme.js.map +1 -0
  276. package/dist/lib/linx-top-level-command-admission.js +27 -0
  277. package/dist/lib/linx-top-level-command-admission.js.map +1 -0
  278. package/dist/lib/linx-update-notification.js +176 -0
  279. package/dist/lib/linx-update-notification.js.map +1 -0
  280. package/dist/lib/linx-welcome-header.js +148 -0
  281. package/dist/lib/linx-welcome-header.js.map +1 -0
  282. package/dist/lib/linx-workspace-command.js +45 -0
  283. package/dist/lib/linx-workspace-command.js.map +1 -0
  284. package/dist/lib/native-backend-command-router.js +25 -0
  285. package/dist/lib/native-backend-command-router.js.map +1 -0
  286. package/dist/lib/native-backend-proxy.js +2 -0
  287. package/dist/lib/native-backend-proxy.js.map +1 -0
  288. package/dist/lib/native-backend-stream-backend.js +15 -0
  289. package/dist/lib/native-backend-stream-backend.js.map +1 -0
  290. package/dist/lib/oidc-auth.js +2 -4
  291. package/dist/lib/oidc-auth.js.map +1 -1
  292. package/dist/lib/pi-adapter/runtime.js +32 -841
  293. package/dist/lib/pi-adapter/runtime.js.map +1 -1
  294. package/dist/lib/pi-adapter/stream.js +17 -516
  295. package/dist/lib/pi-adapter/stream.js.map +1 -1
  296. package/dist/lib/{pi-adapter/pod-approval.js → pod-backed-extension-ui-context.js} +2 -2
  297. package/dist/lib/pod-backed-extension-ui-context.js.map +1 -0
  298. package/dist/lib/pod-chat-store-runtime.js +38 -0
  299. package/dist/lib/pod-chat-store-runtime.js.map +1 -0
  300. package/dist/lib/pod-chat-store.js +15 -65
  301. package/dist/lib/pod-chat-store.js.map +1 -1
  302. package/dist/lib/{pi-adapter/pod-mirror-mapping.js → pod-mirror-mapping.js} +8 -18
  303. package/dist/lib/pod-mirror-mapping.js.map +1 -0
  304. package/dist/lib/{pi-adapter/pod-native.js → pod-native.js} +1 -1
  305. package/dist/lib/pod-native.js.map +1 -0
  306. package/dist/lib/pod-status-output.js.map +1 -0
  307. package/dist/lib/{pi-adapter/auto-input-controller.js → secretary-auto-input-controller.js} +62 -77
  308. package/dist/lib/secretary-auto-input-controller.js.map +1 -0
  309. package/dist/lib/{pi-adapter/session-control.js → session-control.js} +80 -29
  310. package/dist/lib/session-control.js.map +1 -0
  311. package/dist/lib/shell-lifecycle.js +179 -0
  312. package/dist/lib/shell-lifecycle.js.map +1 -0
  313. package/dist/lib/solid-local-store.js +3 -3
  314. package/dist/lib/solid-local-store.js.map +1 -1
  315. package/dist/lib/symphony/pod-projection.js +1 -31
  316. package/dist/lib/symphony/pod-projection.js.map +1 -1
  317. package/dist/lib/{symphony-command.js → symphony/run.js} +11 -16
  318. package/dist/lib/symphony/run.js.map +1 -0
  319. package/dist/lib/symphony/runtime.js +30 -0
  320. package/dist/lib/symphony/runtime.js.map +1 -0
  321. package/dist/lib/symphony/status.js +242 -0
  322. package/dist/lib/symphony/status.js.map +1 -0
  323. package/dist/linx-cli-app.js +70 -0
  324. package/dist/linx-cli-app.js.map +1 -0
  325. package/dist/linx-cli-runtime-adapter-factory.js +12 -0
  326. package/dist/linx-cli-runtime-adapter-factory.js.map +1 -0
  327. package/dist/plugins/linx-symphony-codex/.codex-plugin/plugin.json +1 -1
  328. package/package.json +1 -1
  329. package/dist/lib/auto-mode/hooks/index.js.map +0 -1
  330. package/dist/lib/auto-mode/index.js +0 -10
  331. package/dist/lib/auto-mode/index.js.map +0 -1
  332. package/dist/lib/codex-plugin/index.js +0 -5
  333. package/dist/lib/codex-plugin/index.js.map +0 -1
  334. package/dist/lib/pi-adapter/auth.js +0 -68
  335. package/dist/lib/pi-adapter/auth.js.map +0 -1
  336. package/dist/lib/pi-adapter/auto-input-controller.js.map +0 -1
  337. package/dist/lib/pi-adapter/backend-command.js +0 -2
  338. package/dist/lib/pi-adapter/backend-command.js.map +0 -1
  339. package/dist/lib/pi-adapter/backend-credentials.js.map +0 -1
  340. package/dist/lib/pi-adapter/branding.js +0 -1188
  341. package/dist/lib/pi-adapter/branding.js.map +0 -1
  342. package/dist/lib/pi-adapter/control-state.js.map +0 -1
  343. package/dist/lib/pi-adapter/index.js +0 -4
  344. package/dist/lib/pi-adapter/index.js.map +0 -1
  345. package/dist/lib/pi-adapter/interactive.js +0 -3186
  346. package/dist/lib/pi-adapter/interactive.js.map +0 -1
  347. package/dist/lib/pi-adapter/pod-approval.js.map +0 -1
  348. package/dist/lib/pi-adapter/pod-mirror-mapping.js.map +0 -1
  349. package/dist/lib/pi-adapter/pod-mirror.js.map +0 -1
  350. package/dist/lib/pi-adapter/pod-native.js.map +0 -1
  351. package/dist/lib/pi-adapter/pod-status-output.js.map +0 -1
  352. package/dist/lib/pi-adapter/pod-tools.js +0 -140
  353. package/dist/lib/pi-adapter/pod-tools.js.map +0 -1
  354. package/dist/lib/pi-adapter/session-control.js.map +0 -1
  355. package/dist/lib/pi-adapter/session.js.map +0 -1
  356. package/dist/lib/pi-adapter/sync-recovery.js.map +0 -1
  357. package/dist/lib/pi-adapter/theme.js.map +0 -1
  358. package/dist/lib/pi-adapter/web-fetch.js +0 -170
  359. package/dist/lib/pi-adapter/web-fetch.js.map +0 -1
  360. package/dist/lib/status-line-command.js.map +0 -1
  361. package/dist/lib/symphony-command.js.map +0 -1
  362. /package/dist/lib/{pi-adapter/pod-status-output.js → pod-status-output.js} +0 -0
@@ -1,15 +1,5 @@
1
1
  import { getDefaultPodDataSession } from '../pod-data-session.js';
2
- import { aiConfigRepository, selectAIConfigCredentialForBackend, } from '../models.js';
3
- function selectPodCredentialForBackend(backend, credentials, providers) {
4
- const selected = selectAIConfigCredentialForBackend(backend, credentials, providers);
5
- if (!selected)
6
- return null;
7
- return {
8
- providerId: selected.providerId,
9
- apiKey: selected.apiKey,
10
- baseUrl: selected.baseUrl,
11
- };
12
- }
2
+ import { aiConfigRepository, } from '../models.js';
13
3
  function buildBackendEnv(match, backend) {
14
4
  if (backend === 'claude') {
15
5
  return {
@@ -100,7 +90,4 @@ export async function loadPodBackendCredential(backend, runtime) {
100
90
  await aiConfigRepository.markCredentialUsed(rows.db, rows.match);
101
91
  return buildBackendEnv(rows.match, backend);
102
92
  }
103
- export const __podInternal = {
104
- selectPodCredentialForBackend,
105
- };
106
93
  //# sourceMappingURL=pod-ai.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"pod-ai.js","sourceRoot":"","sources":["../../../src/lib/auto-mode/pod-ai.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pod-ai.js","sourceRoot":"","sources":["../../../src/lib/auto-mode/pod-ai.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAAuB,MAAM,wBAAwB,CAAA;AACtF,OAAO,EACL,kBAAkB,GAGnB,MAAM,cAAc,CAAA;AAerB,SAAS,eAAe,CACtB,KAAyC,EACzC,OAAoC;IAEpC,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;QACzB,OAAO;YACL,OAAO;YACP,QAAQ,EAAE,KAAK,CAAC,UAAU;YAC1B,GAAG,EAAE;gBACH,iBAAiB,EAAE,KAAK,CAAC,MAAM;gBAC/B,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,kBAAkB,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAChE;SACF,CAAA;IACH,CAAC;IAED,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;QACxB,OAAO;YACL,OAAO;YACP,QAAQ,EAAE,KAAK,CAAC,UAAU;YAC1B,GAAG,EAAE;gBACH,aAAa,EAAE,KAAK,CAAC,MAAM;gBAC3B,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC5D;SACF,CAAA;IACH,CAAC;IAED,OAAO;QACL,OAAO;QACP,QAAQ,EAAE,KAAK,CAAC,UAAU;QAC1B,GAAG,EAAE;YACH,iBAAiB,EAAE,KAAK,CAAC,MAAM;YAC/B,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,kBAAkB,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAChE;KACF,CAAA;AACH,CAAC;AAED,SAAS,kCAAkC;IACzC,OAAO,4EAA4E,CAAA;AACrF,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,OAAoC;IAC9E,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;QACzB,OAAO,iIAAiI,CAAA;IAC1I,CAAC;IAED,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;QACxB,OAAO,sIAAsI,CAAA;IAC/I,CAAC;IAED,IAAI,OAAO,KAAK,WAAW,EAAE,CAAC;QAC5B,OAAO,6HAA6H,CAAA;IACtI,CAAC;IAED,OAAO,0CAA0C,CAAA;AACnD,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,SAAiB;IAC5C,MAAM,MAAM,GAAG,IAAI,QAAQ,CAAC,YAAY,EAAE,2BAA2B,CAAyD,CAAA;IAC9H,OAAO,MAAM,CAAC,SAAS,CAAC,CAAA;AAC1B,CAAC;AAED,KAAK,UAAU,oBAAoB;IACjC,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,IAAI,GAAG,CAAC,cAAc,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAA;IAEjF,OAAO;QACL,iBAAiB,EAAE,wBAAwB;QAC3C,QAAQ,CAAC,UAAU;YACjB,OAAO,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,YAAY,EAAE;gBAC7C,MAAM,EAAE,KAAK;gBACb,uBAAuB,EAAE,IAAI;gBAC7B,MAAM,EAAE,UAAU,CAAC,MAAM;gBACzB,mBAAmB,EAAE,KAAc;gBACnC,MAAM,EAAE,MAAM,CAAC,cAAc;aAC9B,CAAkB,CAAA;QACrB,CAAC;KACF,CAAA;AACH,CAAC;AAED,KAAK,UAAU,mBAAmB,CAChC,OAAoC,EACpC,OAAqB,EACrB,UAA0B;IAE1B,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;QACtB,OAAO,IAAI,CAAA;IACb,CAAC;IAED,MAAM,EAAE,GAAG,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAA;IACvC,OAAO;QACL,EAAE;QACF,KAAK,EAAE,MAAM,kBAAkB,CAAC,wBAAwB,CAAC,EAAE,EAAE,OAAO,CAAC;KACtE,CAAA;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,OAAoC,EACpC,OAAsB;IAEtB,MAAM,aAAa,GAAG,OAAO,IAAI,MAAM,oBAAoB,EAAE,CAAA;IAC7D,MAAM,UAAU,GAAG,MAAM,aAAa,CAAC,iBAAiB,EAAE,CAAA;IAC1D,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,kCAAkC,EAAE,CAAC,CAAA;IACvD,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,mBAAmB,CAAC,OAAO,EAAE,aAAa,EAAE,UAAU,CAAC,CAAA;IAC1E,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,IAAI,KAAK,CAAC,2EAA2E,CAAC,CAAA;IAC9F,CAAC;IAED,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QAChB,OAAO,IAAI,CAAA;IACb,CAAC;IAED,MAAM,kBAAkB,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,CAAA;IAEhE,OAAO,eAAe,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;AAC7C,CAAC"}
@@ -0,0 +1,596 @@
1
+ import { resolvePodBaseUrl } from '@undefineds.co/drizzle-solid';
2
+ import { AS, ODRL, UDFS } from '@undefineds.co/models/namespaces';
3
+ import { ApprovalVocab, AuditVocab, GrantReadVocab, GrantVocab, InboxNotificationVocab } from '@undefineds.co/models/vocab/sidecar';
4
+ import { approvalResource, auditResource, claimApprovalRequest, grantResource, inboxNotificationResource, } from '../models.js';
5
+ import { buildApprovalDocumentUrl, RDF_TYPE, buildApprovalResourceUrl, buildAuditDocumentUrl, buildAuditResourceUrl, buildGrantResourceUrl, buildInboxResourceUrl, firstIri, firstLiteral, iri, listTurtleResources, listTurtleResourcesRecursive, literal, parseManagedTurtleBlocks, readTurtleResource, subjectIdFromResourceUrl, upsertManagedTurtleBlock, } from '../pod-native.js';
6
+ export const DEFAULT_APPROVAL_LIST_DAYS = 7;
7
+ export const MAX_GRANT_POLICY_LENGTH = 1200;
8
+ export const MAX_APPROVAL_CONTEXT_LENGTH = 1400;
9
+ export function normalizeString(value) {
10
+ return typeof value === 'string' && value.trim() ? value.trim() : undefined;
11
+ }
12
+ function isRecord(value) {
13
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
14
+ }
15
+ export function toIsoString(value, fallback) {
16
+ if (value instanceof Date) {
17
+ return value.toISOString();
18
+ }
19
+ if (typeof value === 'string' && value.trim()) {
20
+ return value;
21
+ }
22
+ return fallback;
23
+ }
24
+ export function approvalIriForCreatedAt(webIdOrUri, approvalId, createdAt) {
25
+ return approvalResource.buildIri(webIdOrUri, {
26
+ id: approvalId,
27
+ createdAt,
28
+ });
29
+ }
30
+ function documentUrlFromResourceUri(resourceUri) {
31
+ return resourceUri.split('#', 1)[0] ?? resourceUri;
32
+ }
33
+ function truncatePodLiteral(value, maxLength) {
34
+ if (value.length <= maxLength) {
35
+ return value;
36
+ }
37
+ return `${value.slice(0, Math.max(0, maxLength - 15))}...[truncated]`;
38
+ }
39
+ function literalValues(predicates, predicate) {
40
+ return (predicates.get(predicate) ?? [])
41
+ .map((object) => isRecord(object) && object.type === 'literal' && typeof object.value === 'string' ? object.value : '')
42
+ .filter(Boolean);
43
+ }
44
+ function firstLiteralValue(predicates, predicatesToTry) {
45
+ for (const predicate of predicatesToTry) {
46
+ const [value] = literalValues(predicates, predicate);
47
+ if (value) {
48
+ return value;
49
+ }
50
+ }
51
+ return undefined;
52
+ }
53
+ function iriValues(predicates, predicate) {
54
+ return (predicates.get(predicate) ?? [])
55
+ .map((object) => isRecord(object) && object.type === 'iri' && typeof object.value === 'string' ? object.value : '')
56
+ .filter(Boolean);
57
+ }
58
+ function iriValuesFrom(predicates, predicatesToTry) {
59
+ const values = predicatesToTry.flatMap((predicate) => iriValues(predicates, predicate));
60
+ return [...new Set(values)];
61
+ }
62
+ export function createSharedModelRemoteApprovalStore(webId, getDb) {
63
+ const listApprovals = async () => {
64
+ const rows = await modelList(getDb, approvalResource);
65
+ return rows.map((row) => enrichApprovalRow(webId, row));
66
+ };
67
+ return {
68
+ listApprovals,
69
+ findApproval: async (id, options = {}) => {
70
+ if (options.resourceUri) {
71
+ const row = await modelFindByIri(getDb, approvalResource, options.resourceUri);
72
+ return row ? enrichApprovalRow(webId, row, options.resourceUri) : null;
73
+ }
74
+ if (options.createdAt) {
75
+ const createdAt = new Date(toIsoString(options.createdAt, new Date().toISOString()));
76
+ const iri = approvalIriForCreatedAt(webId, id, createdAt);
77
+ const row = await modelFindByIri(getDb, approvalResource, iri);
78
+ return row ? enrichApprovalRow(webId, row, iri) : null;
79
+ }
80
+ const row = await modelFindById(getDb, approvalResource, id);
81
+ return row ? enrichApprovalRow(webId, row) : null;
82
+ },
83
+ insertApproval: async (row) => {
84
+ await modelInsert(getDb, approvalResource, omitInternalFields(row));
85
+ },
86
+ updateApproval: async (id, patch, options = {}) => {
87
+ const explicitIri = options.resourceUri
88
+ ?? normalizeString(patch.approvalUri)
89
+ ?? (options.createdAt ? approvalIriForCreatedAt(webId, id, new Date(toIsoString(options.createdAt, new Date().toISOString()))) : undefined);
90
+ if (explicitIri) {
91
+ await modelUpdateByIri(getDb, approvalResource, explicitIri, omitInternalFields(patch));
92
+ return;
93
+ }
94
+ const updated = await modelUpdateById(getDb, approvalResource, id, omitInternalFields(patch));
95
+ if (!updated) {
96
+ throw new Error(`Remote approval not found: ${id}`);
97
+ }
98
+ },
99
+ claimApproval: async (input) => {
100
+ const db = await getDb();
101
+ return claimApprovalRequest(db, {
102
+ approval: input.approvalUri,
103
+ leaseOwner: input.leaseOwner,
104
+ leaseDurationMs: input.leaseDurationMs,
105
+ now: input.now,
106
+ });
107
+ },
108
+ listAudits: () => modelList(getDb, auditResource),
109
+ insertAudit: async (row) => {
110
+ await modelInsert(getDb, auditResource, omitInternalFields(row));
111
+ },
112
+ listGrants: () => modelList(getDb, grantResource),
113
+ insertGrant: async (row) => {
114
+ await modelInsert(getDb, grantResource, omitInternalFields(row));
115
+ },
116
+ insertInboxNotification: async (row) => {
117
+ await modelInsert(getDb, inboxNotificationResource, omitInternalFields(row));
118
+ },
119
+ };
120
+ }
121
+ async function modelList(getDb, resource) {
122
+ const db = await getDb();
123
+ return await db.select().from(resource).execute();
124
+ }
125
+ async function modelFindByIri(getDb, resource, iri) {
126
+ const db = await getDb();
127
+ return await db.findByIri(resource, iri);
128
+ }
129
+ async function modelFindById(getDb, resource, id) {
130
+ const db = await getDb();
131
+ return await db.findById(resource, id);
132
+ }
133
+ async function modelInsert(getDb, resource, row) {
134
+ const db = await getDb();
135
+ await db.insert(resource).values(stripUndefined(row)).execute();
136
+ }
137
+ async function modelUpdateByIri(getDb, resource, iri, patch) {
138
+ const db = await getDb();
139
+ const update = stripUndefined(patch);
140
+ delete update.id;
141
+ delete update.approvalUri;
142
+ await db.updateByIri(resource, iri, update);
143
+ }
144
+ async function modelUpdateById(getDb, resource, id, patch) {
145
+ const db = await getDb();
146
+ const update = stripUndefined(patch);
147
+ delete update.id;
148
+ delete update.approvalUri;
149
+ return await db.updateById(resource, id, update);
150
+ }
151
+ function stripUndefined(row) {
152
+ const next = {};
153
+ for (const [key, value] of Object.entries(row)) {
154
+ if (value !== undefined) {
155
+ next[key] = value;
156
+ }
157
+ }
158
+ return next;
159
+ }
160
+ function omitInternalFields(row) {
161
+ const next = stripUndefined(row);
162
+ delete next.approvalUri;
163
+ delete next['@id'];
164
+ delete next.subject;
165
+ delete next.uri;
166
+ return next;
167
+ }
168
+ function rowSubject(row) {
169
+ return normalizeString(row['@id'])
170
+ ?? normalizeString(row.subject)
171
+ ?? normalizeString(row.uri);
172
+ }
173
+ function enrichApprovalRow(webId, row, explicitIri) {
174
+ const createdAt = new Date(toIsoString(row.createdAt, new Date().toISOString()));
175
+ return {
176
+ ...row,
177
+ approvalUri: explicitIri
178
+ ?? normalizeString(row.approvalUri)
179
+ ?? rowSubject(row)
180
+ ?? approvalIriForCreatedAt(webId, row.id, createdAt),
181
+ };
182
+ }
183
+ export function createNativeRemoteApprovalStore(webId, fetcher) {
184
+ return {
185
+ listApprovals: () => listApprovalRows(webId, fetcher),
186
+ findApproval: (id, options) => findApprovalRow(webId, fetcher, id, options),
187
+ insertApproval: (row) => writeApprovalRow(webId, fetcher, row),
188
+ async updateApproval(id, patch, options = {}) {
189
+ const explicitIri = options.resourceUri
190
+ ?? normalizeString(patch.approvalUri)
191
+ ?? (options.createdAt ? buildApprovalResourceUrl(webId, id, new Date(toIsoString(options.createdAt, new Date().toISOString()))) : undefined);
192
+ const existing = explicitIri
193
+ ? await readApprovalRowFromResource(fetcher, explicitIri)
194
+ : (await listApprovalRows(webId, fetcher)).find((row) => row.id === id);
195
+ if (!existing) {
196
+ throw new Error(`Remote approval not found: ${id}`);
197
+ }
198
+ await writeApprovalRow(webId, fetcher, { ...existing, ...patch });
199
+ },
200
+ claimApproval: async (input) => claimNativeApproval(webId, fetcher, input),
201
+ listAudits: () => listAuditRows(webId, fetcher),
202
+ insertAudit: (row) => writeAuditRow(webId, fetcher, row),
203
+ listGrants: () => listGrantRows(webId, fetcher),
204
+ insertGrant: (row) => writeGrantRow(webId, fetcher, row),
205
+ insertInboxNotification: (row) => writeInboxNotificationRow(webId, fetcher, row),
206
+ };
207
+ }
208
+ async function claimNativeApproval(webId, fetcher, input) {
209
+ const now = normalizeClaimDate(input.now);
210
+ const leaseDurationMs = input.leaseDurationMs ?? 60_000;
211
+ if (!Number.isFinite(leaseDurationMs) || leaseDurationMs <= 0) {
212
+ throw new Error('Approval claim leaseDurationMs must be a positive finite number.');
213
+ }
214
+ const leaseExpiresAt = new Date(now.getTime() + leaseDurationMs);
215
+ const missingResult = {
216
+ status: 'not_found',
217
+ approval: null,
218
+ leaseOwner: input.leaseOwner,
219
+ leaseExpiresAt: leaseExpiresAt.toISOString(),
220
+ reason: 'Approval request was not found.',
221
+ };
222
+ const existing = await readApprovalRowFromResource(fetcher, input.approvalUri);
223
+ if (!existing) {
224
+ return missingResult;
225
+ }
226
+ if (!isClaimableControlStatus(existing.status)) {
227
+ return {
228
+ status: 'not_actionable',
229
+ approval: existing,
230
+ leaseOwner: input.leaseOwner,
231
+ leaseExpiresAt: leaseExpiresAt.toISOString(),
232
+ reason: `Approval request status is ${String(existing.status || 'empty')}.`,
233
+ };
234
+ }
235
+ if (isPastDate(existing.expiresAt, now)) {
236
+ return {
237
+ status: 'not_actionable',
238
+ approval: existing,
239
+ leaseOwner: input.leaseOwner,
240
+ leaseExpiresAt: leaseExpiresAt.toISOString(),
241
+ reason: 'Approval request is past expiresAt.',
242
+ };
243
+ }
244
+ if (hasActiveForeignLease(existing, input.leaseOwner, now)) {
245
+ return {
246
+ status: 'lost',
247
+ approval: existing,
248
+ leaseOwner: input.leaseOwner,
249
+ leaseExpiresAt: leaseExpiresAt.toISOString(),
250
+ reason: 'Approval request is leased by another client.',
251
+ };
252
+ }
253
+ await writeApprovalRow(webId, fetcher, {
254
+ ...existing,
255
+ status: 'handling',
256
+ leaseOwner: input.leaseOwner,
257
+ leaseExpiresAt,
258
+ });
259
+ const claimed = await readApprovalRowFromResource(fetcher, input.approvalUri);
260
+ if (claimed?.leaseOwner === input.leaseOwner && !isPastDate(claimed.leaseExpiresAt, now)) {
261
+ return {
262
+ status: 'claimed',
263
+ approval: claimed,
264
+ leaseOwner: input.leaseOwner,
265
+ leaseExpiresAt: leaseExpiresAt.toISOString(),
266
+ };
267
+ }
268
+ return {
269
+ status: 'lost',
270
+ approval: (claimed ?? existing),
271
+ leaseOwner: input.leaseOwner,
272
+ leaseExpiresAt: leaseExpiresAt.toISOString(),
273
+ reason: 'Approval request lease was not retained after update.',
274
+ };
275
+ }
276
+ function normalizeClaimDate(value) {
277
+ const date = value instanceof Date ? value : new Date(value ?? Date.now());
278
+ if (Number.isNaN(date.getTime())) {
279
+ throw new Error('Invalid approval claim timestamp.');
280
+ }
281
+ return date;
282
+ }
283
+ function isClaimableControlStatus(status) {
284
+ if (typeof status !== 'string' || !status.trim()) {
285
+ return true;
286
+ }
287
+ const normalized = status.trim();
288
+ return normalized === 'pending' || normalized === 'handling';
289
+ }
290
+ function hasActiveForeignLease(row, leaseOwner, now) {
291
+ if (row.leaseOwner === leaseOwner) {
292
+ return false;
293
+ }
294
+ const currentOwner = normalizeString(row.leaseOwner);
295
+ if (!currentOwner) {
296
+ return false;
297
+ }
298
+ return !isPastDate(row.leaseExpiresAt, now);
299
+ }
300
+ function isPastDate(value, now) {
301
+ if (!value) {
302
+ return false;
303
+ }
304
+ const date = value instanceof Date ? value : new Date(value);
305
+ return !Number.isNaN(date.getTime()) && date.getTime() <= now.getTime();
306
+ }
307
+ async function findApprovalRow(webId, fetcher, id, options = {}) {
308
+ if (options.resourceUri) {
309
+ return readApprovalRowFromResource(fetcher, options.resourceUri);
310
+ }
311
+ if (options.createdAt) {
312
+ const createdAt = new Date(toIsoString(options.createdAt, new Date().toISOString()));
313
+ return readApprovalRowFromResource(fetcher, buildApprovalResourceUrl(webId, id, createdAt));
314
+ }
315
+ return (await listApprovalRows(webId, fetcher)).find((row) => row.id === id) ?? null;
316
+ }
317
+ async function readApprovalRowFromResource(fetcher, resourceUri) {
318
+ const turtle = await readTurtleResource(fetcher, documentUrlFromResourceUri(resourceUri));
319
+ if (!turtle) {
320
+ return null;
321
+ }
322
+ for (const [subject, predicates] of parseManagedTurtleBlocks(turtle, documentUrlFromResourceUri(resourceUri))) {
323
+ if (subject !== resourceUri) {
324
+ continue;
325
+ }
326
+ const row = approvalRowFromPredicates(subject, predicates);
327
+ if (row) {
328
+ return row;
329
+ }
330
+ }
331
+ return null;
332
+ }
333
+ async function listApprovalRows(webId, fetcher) {
334
+ const urls = [
335
+ ...recentApprovalDocumentUrls(webId),
336
+ ...await listTurtleResources(fetcher, `${resolvePodBaseUrl(webId)}/.data/approvals/`).catch(() => []),
337
+ ];
338
+ const rows = [];
339
+ for (const url of [...new Set(urls)].filter((entry) => entry.endsWith('.ttl'))) {
340
+ const turtle = await readTurtleResource(fetcher, url).catch(() => null);
341
+ if (!turtle)
342
+ continue;
343
+ for (const [subject, predicates] of parseManagedTurtleBlocks(turtle, url)) {
344
+ const row = approvalRowFromPredicates(subject, predicates);
345
+ if (row)
346
+ rows.push(row);
347
+ }
348
+ }
349
+ return rows;
350
+ }
351
+ function recentApprovalDocumentUrls(webId, days = DEFAULT_APPROVAL_LIST_DAYS) {
352
+ const urls = [];
353
+ const base = Date.now();
354
+ for (let offset = 0; offset < days; offset += 1) {
355
+ const date = new Date(base - offset * 24 * 60 * 60 * 1000);
356
+ urls.push(buildApprovalDocumentUrl(webId, date));
357
+ }
358
+ return urls;
359
+ }
360
+ async function writeApprovalRow(webId, fetcher, row) {
361
+ const createdAt = new Date(toIsoString(row.createdAt, new Date().toISOString()));
362
+ const documentUrl = buildApprovalDocumentUrl(webId, createdAt);
363
+ const subjectUrl = buildApprovalResourceUrl(webId, row.id, createdAt);
364
+ await upsertManagedTurtleBlock(fetcher, documentUrl, {
365
+ subject: subjectUrl,
366
+ triples: [
367
+ { predicate: RDF_TYPE, object: iri(UDFS.ApprovalRequest) },
368
+ { predicate: ApprovalVocab.session, object: iri(row.session) },
369
+ { predicate: ApprovalVocab.toolCallId, object: literal(row.toolCallId) },
370
+ { predicate: ApprovalVocab.toolName, object: literal(row.toolName) },
371
+ { predicate: ApprovalVocab.target, object: iri(row.target) },
372
+ { predicate: ApprovalVocab.action, object: iri(row.action) },
373
+ { predicate: ApprovalVocab.risk, object: literal(row.risk) },
374
+ { predicate: ApprovalVocab.status, object: literal(row.status) },
375
+ ...(row.leaseOwner ? [{ predicate: ApprovalVocab.leaseOwner, object: literal(row.leaseOwner) }] : []),
376
+ ...(row.leaseExpiresAt ? [{ predicate: ApprovalVocab.leaseExpiresAt, object: literal(toIsoString(row.leaseExpiresAt, new Date().toISOString())) }] : []),
377
+ ...(row.assignedTo ? [{ predicate: ApprovalVocab.assignedTo, object: iri(row.assignedTo) }] : []),
378
+ ...(row.decisionBy ? [{ predicate: ApprovalVocab.decisionBy, object: iri(row.decisionBy) }] : []),
379
+ ...(row.decisionRole ? [{ predicate: ApprovalVocab.decisionRole, object: literal(row.decisionRole) }] : []),
380
+ ...(row.onBehalfOf ? [{ predicate: ApprovalVocab.onBehalfOf, object: iri(row.onBehalfOf) }] : []),
381
+ ...(row.reason ? [{ predicate: ApprovalVocab.reason, object: literal(row.reason) }] : []),
382
+ ...(row.context ? [{ predicate: ApprovalVocab.context, object: literal(row.context) }] : []),
383
+ ...(row.approvalOptions ? [{ predicate: ApprovalVocab.approvalOptions, object: literal(row.approvalOptions) }] : []),
384
+ ...(row.policyVersion ? [{ predicate: ApprovalVocab.policyVersion, object: literal(row.policyVersion) }] : []),
385
+ { predicate: ApprovalVocab.createdAt, object: literal(toIsoString(row.createdAt, new Date().toISOString())) },
386
+ ...(row.expiresAt ? [{ predicate: ApprovalVocab.expiresAt, object: literal(toIsoString(row.expiresAt, new Date().toISOString())) }] : []),
387
+ ...(row.resolvedAt ? [{ predicate: ApprovalVocab.resolvedAt, object: literal(toIsoString(row.resolvedAt, new Date().toISOString())) }] : []),
388
+ ],
389
+ });
390
+ }
391
+ async function listAuditRows(webId, fetcher) {
392
+ const urls = await listTurtleResourcesRecursive(fetcher, `${resolvePodBaseUrl(webId)}/.data/audits/`);
393
+ const rows = [];
394
+ for (const url of urls.filter((entry) => entry.endsWith('.ttl'))) {
395
+ const turtle = await readTurtleResource(fetcher, url).catch(() => null);
396
+ if (!turtle)
397
+ continue;
398
+ for (const [subject, predicates] of parseManagedTurtleBlocks(turtle, url)) {
399
+ const row = auditRowFromPredicates(subject, predicates);
400
+ if (row)
401
+ rows.push(row);
402
+ }
403
+ }
404
+ return rows;
405
+ }
406
+ async function writeAuditRow(webId, fetcher, row) {
407
+ const createdAt = new Date(toIsoString(row.createdAt, new Date().toISOString()));
408
+ const documentUrl = buildAuditDocumentUrl(webId, createdAt);
409
+ const subjectUrl = buildAuditResourceUrl(webId, row.id, createdAt);
410
+ await upsertManagedTurtleBlock(fetcher, documentUrl, {
411
+ subject: subjectUrl,
412
+ triples: [
413
+ { predicate: RDF_TYPE, object: iri(UDFS.AuditEntry) },
414
+ { predicate: AuditVocab.action, object: literal(row.action) },
415
+ { predicate: AuditVocab.actor, object: iri(row.actor) },
416
+ { predicate: AuditVocab.actorRole, object: literal(row.actorRole) },
417
+ ...(row.onBehalfOf ? [{ predicate: AuditVocab.onBehalfOf, object: iri(row.onBehalfOf) }] : []),
418
+ ...(row.session ? [{ predicate: AuditVocab.session, object: iri(row.session) }] : []),
419
+ ...(row.entry ? [{ predicate: AuditVocab.entry, object: iri(row.entry) }] : []),
420
+ ...(row.toolCallId ? [{ predicate: AuditVocab.toolCallId, object: literal(row.toolCallId) }] : []),
421
+ ...(row.toolName ? [{ predicate: AuditVocab.toolName, object: literal(row.toolName) }] : []),
422
+ ...(row.approval ? [{ predicate: AuditVocab.approval, object: iri(row.approval) }] : []),
423
+ ...(row.policyVersion ? [{ predicate: AuditVocab.policyVersion, object: literal(row.policyVersion) }] : []),
424
+ { predicate: AuditVocab.createdAt, object: literal(toIsoString(row.createdAt, new Date().toISOString())) },
425
+ ],
426
+ });
427
+ }
428
+ async function listGrantRows(webId, fetcher) {
429
+ const urls = [
430
+ ...await listTurtleResources(fetcher, `${resolvePodBaseUrl(webId)}/settings/autonomy/grants/`).catch(() => []),
431
+ ];
432
+ const rows = [];
433
+ for (const url of urls.filter((entry) => entry.endsWith('.ttl'))) {
434
+ const turtle = await readTurtleResource(fetcher, url).catch(() => null);
435
+ if (!turtle)
436
+ continue;
437
+ for (const [subject, predicates] of parseManagedTurtleBlocks(turtle, url)) {
438
+ const row = grantRowFromPredicates(subject, predicates);
439
+ if (row)
440
+ rows.push(row);
441
+ }
442
+ }
443
+ return rows;
444
+ }
445
+ async function writeGrantRow(webId, fetcher, row) {
446
+ const id = normalizeString(row.id) ?? crypto.randomUUID();
447
+ const subjectUrl = buildGrantResourceUrl(webId, id);
448
+ const documentUrl = subjectUrl;
449
+ const target = normalizeString(row.target);
450
+ const action = normalizeString(row.action);
451
+ const effect = normalizeString(row.effect);
452
+ const decisionBy = normalizeString(row.decisionBy);
453
+ const decisionRole = normalizeString(row.decisionRole);
454
+ if (!target || !action || !effect || !decisionBy || !decisionRole) {
455
+ throw new Error(`Invalid remote approval grant row: ${id}`);
456
+ }
457
+ await upsertManagedTurtleBlock(fetcher, documentUrl, {
458
+ subject: subjectUrl,
459
+ triples: [
460
+ { predicate: RDF_TYPE, object: iri(ODRL.Policy) },
461
+ { predicate: RDF_TYPE, object: iri(UDFS.AutonomyGrant) },
462
+ { predicate: GrantVocab.target, object: iri(target) },
463
+ { predicate: GrantVocab.action, object: iri(action) },
464
+ ...(normalizeString(row.title) ? [{ predicate: GrantVocab.title, object: literal(truncatePodLiteral(normalizeString(row.title), 160)) }] : []),
465
+ ...(normalizeString(row.summary) ? [{ predicate: GrantVocab.summary, object: literal(truncatePodLiteral(normalizeString(row.summary), 500)) }] : []),
466
+ ...(normalizeString(row.body) ? [{ predicate: GrantVocab.description, object: literal(truncatePodLiteral(normalizeString(row.body), MAX_GRANT_POLICY_LENGTH)) }] : []),
467
+ ...(normalizeString(row.schema) ? [{ predicate: GrantVocab.schema, object: iri(normalizeString(row.schema)) }] : []),
468
+ ...(normalizeString(row.pageKind) ? [{ predicate: GrantVocab.pageKind, object: literal(normalizeString(row.pageKind)) }] : []),
469
+ ...(normalizeString(row.wikiStatus) ? [{ predicate: GrantVocab.wikiStatus, object: literal(normalizeString(row.wikiStatus)) }] : []),
470
+ ...(normalizeString(row.tags) ? [{ predicate: GrantVocab.tags, object: literal(truncatePodLiteral(normalizeString(row.tags), 500)) }] : []),
471
+ ...(normalizeString(row.source) ? [{ predicate: GrantVocab.source, object: literal(normalizeString(row.source)) }] : []),
472
+ ...(normalizeString(row.sourceHash) ? [{ predicate: GrantVocab.sourceHash, object: literal(normalizeString(row.sourceHash)) }] : []),
473
+ ...(row.compiledAt ? [{ predicate: GrantVocab.compiledAt, object: literal(toIsoString(row.compiledAt, new Date().toISOString())) }] : []),
474
+ ...(row.compiledFrom ?? []).map((value) => ({ predicate: GrantVocab.compiledFrom, object: iri(value) })),
475
+ ...(row.related ?? []).map((value) => ({ predicate: GrantVocab.related, object: iri(value) })),
476
+ { predicate: GrantVocab.effect, object: literal(effect) },
477
+ ...(normalizeString(row.riskCeiling) ? [{ predicate: GrantVocab.riskCeiling, object: literal(normalizeString(row.riskCeiling)) }] : []),
478
+ ...(normalizeString(row.policy) ? [{ predicate: GrantVocab.policy, object: literal(truncatePodLiteral(normalizeString(row.policy), MAX_GRANT_POLICY_LENGTH)) }] : []),
479
+ ...(normalizeString(row.context) ? [{ predicate: GrantVocab.context, object: literal(truncatePodLiteral(normalizeString(row.context), MAX_APPROVAL_CONTEXT_LENGTH)) }] : []),
480
+ { predicate: GrantVocab.decisionBy, object: iri(decisionBy) },
481
+ { predicate: GrantVocab.decisionRole, object: literal(decisionRole) },
482
+ ...(normalizeString(row.onBehalfOf) ? [{ predicate: GrantVocab.onBehalfOf, object: iri(normalizeString(row.onBehalfOf)) }] : []),
483
+ { predicate: GrantVocab.createdAt, object: literal(toIsoString(row.createdAt, new Date().toISOString())) },
484
+ ...(normalizeString(row.revokedAt) ? [{ predicate: GrantVocab.revokedAt, object: literal(normalizeString(row.revokedAt)) }] : []),
485
+ ],
486
+ });
487
+ }
488
+ async function writeInboxNotificationRow(webId, fetcher, row) {
489
+ const url = buildInboxResourceUrl(webId, row.id);
490
+ await upsertManagedTurtleBlock(fetcher, url, {
491
+ subject: url,
492
+ triples: [
493
+ { predicate: RDF_TYPE, object: iri(AS.Announce) },
494
+ ...(row.actor ? [{ predicate: InboxNotificationVocab.actor, object: iri(row.actor) }] : []),
495
+ { predicate: InboxNotificationVocab.object, object: iri(row.object) },
496
+ { predicate: InboxNotificationVocab.createdAt, object: literal(toIsoString(row.createdAt, new Date().toISOString())) },
497
+ ],
498
+ });
499
+ }
500
+ function approvalRowFromPredicates(url, predicates) {
501
+ const session = firstIri(predicates, ApprovalVocab.session);
502
+ const toolCallId = firstLiteral(predicates, ApprovalVocab.toolCallId);
503
+ const toolName = firstLiteral(predicates, ApprovalVocab.toolName);
504
+ const target = firstIri(predicates, ApprovalVocab.target);
505
+ const action = firstIri(predicates, ApprovalVocab.action);
506
+ const risk = firstLiteral(predicates, ApprovalVocab.risk);
507
+ const status = firstLiteral(predicates, ApprovalVocab.status);
508
+ const createdAt = firstLiteral(predicates, ApprovalVocab.createdAt);
509
+ if (!session || !toolCallId || !toolName || !target || !action || !risk || !status || !createdAt) {
510
+ return null;
511
+ }
512
+ return {
513
+ id: subjectIdFromResourceUrl(url),
514
+ session,
515
+ toolCallId,
516
+ toolName,
517
+ target,
518
+ action,
519
+ risk,
520
+ status,
521
+ leaseOwner: firstLiteral(predicates, ApprovalVocab.leaseOwner),
522
+ leaseExpiresAt: firstLiteral(predicates, ApprovalVocab.leaseExpiresAt),
523
+ assignedTo: firstIri(predicates, ApprovalVocab.assignedTo),
524
+ decisionBy: firstIri(predicates, ApprovalVocab.decisionBy),
525
+ decisionRole: firstLiteral(predicates, ApprovalVocab.decisionRole),
526
+ onBehalfOf: firstIri(predicates, ApprovalVocab.onBehalfOf),
527
+ reason: firstLiteral(predicates, ApprovalVocab.reason),
528
+ context: firstLiteral(predicates, ApprovalVocab.context),
529
+ approvalOptions: firstLiteral(predicates, ApprovalVocab.approvalOptions),
530
+ policyVersion: firstLiteral(predicates, ApprovalVocab.policyVersion),
531
+ createdAt,
532
+ expiresAt: firstLiteral(predicates, ApprovalVocab.expiresAt),
533
+ resolvedAt: firstLiteral(predicates, ApprovalVocab.resolvedAt),
534
+ };
535
+ }
536
+ function auditRowFromPredicates(url, predicates) {
537
+ const action = firstLiteral(predicates, AuditVocab.action);
538
+ const actor = firstIri(predicates, AuditVocab.actor);
539
+ const actorRole = firstLiteral(predicates, AuditVocab.actorRole);
540
+ const createdAt = firstLiteral(predicates, AuditVocab.createdAt);
541
+ if (!action || !actor || !actorRole || !createdAt) {
542
+ return null;
543
+ }
544
+ return {
545
+ id: subjectIdFromResourceUrl(url),
546
+ action,
547
+ actor,
548
+ actorRole,
549
+ onBehalfOf: firstIri(predicates, AuditVocab.onBehalfOf),
550
+ session: firstIri(predicates, AuditVocab.session),
551
+ entry: firstIri(predicates, AuditVocab.entry),
552
+ toolCallId: firstLiteral(predicates, AuditVocab.toolCallId),
553
+ toolName: firstLiteral(predicates, AuditVocab.toolName),
554
+ approval: firstIri(predicates, AuditVocab.approval),
555
+ policyVersion: firstLiteral(predicates, AuditVocab.policyVersion),
556
+ createdAt,
557
+ };
558
+ }
559
+ function grantRowFromPredicates(url, predicates) {
560
+ const target = firstIri(predicates, GrantVocab.target);
561
+ const action = firstIri(predicates, GrantVocab.action);
562
+ const effect = firstLiteral(predicates, GrantVocab.effect);
563
+ const decisionBy = firstIri(predicates, GrantVocab.decisionBy);
564
+ const decisionRole = firstLiteral(predicates, GrantVocab.decisionRole);
565
+ const createdAt = firstLiteral(predicates, GrantVocab.createdAt);
566
+ if (!target || !action || !effect || !decisionBy || !decisionRole || !createdAt) {
567
+ return null;
568
+ }
569
+ return {
570
+ id: subjectIdFromResourceUrl(url),
571
+ target,
572
+ action,
573
+ title: firstLiteral(predicates, GrantVocab.title),
574
+ summary: firstLiteralValue(predicates, GrantReadVocab.summary),
575
+ body: firstLiteralValue(predicates, GrantReadVocab.description),
576
+ schema: firstIri(predicates, GrantVocab.schema),
577
+ pageKind: firstLiteral(predicates, GrantVocab.pageKind),
578
+ wikiStatus: firstLiteral(predicates, GrantVocab.wikiStatus),
579
+ tags: firstLiteral(predicates, GrantVocab.tags),
580
+ source: firstLiteralValue(predicates, GrantReadVocab.source),
581
+ sourceHash: firstLiteral(predicates, GrantVocab.sourceHash),
582
+ compiledAt: firstLiteral(predicates, GrantVocab.compiledAt),
583
+ compiledFrom: iriValues(predicates, GrantVocab.compiledFrom),
584
+ related: iriValuesFrom(predicates, GrantReadVocab.related),
585
+ effect,
586
+ riskCeiling: firstLiteral(predicates, GrantVocab.riskCeiling),
587
+ policy: firstLiteral(predicates, GrantVocab.policy),
588
+ context: firstLiteral(predicates, GrantVocab.context),
589
+ decisionBy,
590
+ decisionRole,
591
+ onBehalfOf: firstIri(predicates, GrantVocab.onBehalfOf),
592
+ createdAt,
593
+ revokedAt: firstLiteral(predicates, GrantVocab.revokedAt),
594
+ };
595
+ }
596
+ //# sourceMappingURL=pod-approval-store.js.map