@abot-ai/runtime 1.6.0 → 1.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (750) hide show
  1. package/README.md +2 -0
  2. package/dist/src/bridge/request-steering.js +60 -15
  3. package/dist/src/capabilities/normal-invocation/contracts.d.ts +3 -0
  4. package/dist/src/capabilities/normal-invocation/output-channels.d.ts +10 -0
  5. package/dist/src/capabilities/normal-invocation/output-channels.js +29 -0
  6. package/dist/src/capabilities/normal-invocation/validator.js +4 -2
  7. package/dist/src/capabilities/tool-request-resources.d.ts +3 -0
  8. package/dist/src/capabilities/tool-types.d.ts +1 -1
  9. package/dist/src/cli/abot.js +2 -0
  10. package/dist/src/cli/host-companion-bundle.mjs +8003 -6796
  11. package/dist/src/cli/host-companion-entry.js +5 -22
  12. package/dist/src/cli/host-companion-input.d.ts +3 -0
  13. package/dist/src/cli/host-companion-input.js +21 -0
  14. package/dist/src/cli/host-companion-lifecycle.d.ts +11 -0
  15. package/dist/src/cli/host-companion-lifecycle.js +32 -0
  16. package/dist/src/cli/host-companion-setup-target.d.ts +4 -0
  17. package/dist/src/cli/host-companion-setup-target.js +17 -0
  18. package/dist/src/cli/host-companion-startup.d.ts +2 -0
  19. package/dist/src/cli/host-companion-startup.js +7 -2
  20. package/dist/src/cli/host-companion.d.ts +6 -0
  21. package/dist/src/cli/host-companion.js +30 -27
  22. package/dist/src/cli/windows-companion-store-entry.d.ts +9 -0
  23. package/dist/src/cli/windows-companion-store-entry.js +67 -0
  24. package/dist/src/computer-access/collection-consent.d.ts +9 -0
  25. package/dist/src/computer-access/collection-consent.js +47 -0
  26. package/dist/src/computer-access/command-output-capture.d.ts +48 -0
  27. package/dist/src/computer-access/command-output-capture.js +202 -0
  28. package/dist/src/computer-access/command-output-protection.d.ts +17 -0
  29. package/dist/src/computer-access/command-output-protection.js +59 -0
  30. package/dist/src/computer-access/command-output-retention.d.ts +5 -0
  31. package/dist/src/computer-access/command-output-retention.js +90 -0
  32. package/dist/src/computer-access/command-output.d.ts +7 -0
  33. package/dist/src/computer-access/command-output.js +1 -0
  34. package/dist/src/computer-access/commands.d.ts +1 -0
  35. package/dist/src/computer-access/commands.js +1 -1
  36. package/dist/src/computer-access/companion/command-output-protocol.d.ts +12 -0
  37. package/dist/src/computer-access/companion/command-output-protocol.js +28 -0
  38. package/dist/src/computer-access/companion/command-output.d.ts +14 -0
  39. package/dist/src/computer-access/companion/command-output.js +127 -0
  40. package/dist/src/computer-access/companion/install-link-macos.d.ts +7 -0
  41. package/dist/src/computer-access/companion/install-link-macos.js +49 -0
  42. package/dist/src/computer-access/companion/install-link-registration.d.ts +4 -0
  43. package/dist/src/computer-access/companion/install-link-registration.js +184 -0
  44. package/dist/src/computer-access/companion/install-link-windows.d.ts +4 -0
  45. package/dist/src/computer-access/companion/install-link-windows.js +65 -0
  46. package/dist/src/computer-access/companion/install-link.d.ts +9 -0
  47. package/dist/src/computer-access/companion/install-link.js +54 -0
  48. package/dist/src/computer-access/companion/native-messages.js +3 -0
  49. package/dist/src/computer-access/companion/native-notifications.js +3 -2
  50. package/dist/src/computer-access/companion/native-session.d.ts +1 -0
  51. package/dist/src/computer-access/companion/native-session.js +20 -4
  52. package/dist/src/computer-access/companion/native-supervisor.js +1 -0
  53. package/dist/src/computer-access/companion/notification-windows.d.ts +1 -1
  54. package/dist/src/computer-access/companion/notification-windows.js +8 -3
  55. package/dist/src/computer-access/companion/observation-filter.js +2 -26
  56. package/dist/src/computer-access/companion/observation-process.d.ts +2 -0
  57. package/dist/src/computer-access/companion/observation-process.js +51 -25
  58. package/dist/src/computer-access/companion/observation-redaction.d.ts +2 -7
  59. package/dist/src/computer-access/companion/observation-redaction.js +2 -111
  60. package/dist/src/computer-access/companion/protocol.d.ts +1 -1
  61. package/dist/src/computer-access/companion/protocol.js +6 -0
  62. package/dist/src/computer-access/companion/release-version.d.ts +1 -1
  63. package/dist/src/computer-access/companion/release-version.js +1 -1
  64. package/dist/src/computer-access/companion/secret-protection-protocol.d.ts +6 -0
  65. package/dist/src/computer-access/companion/secret-protection-protocol.js +6 -0
  66. package/dist/src/computer-access/companion/windows-store/connection-error.d.ts +7 -0
  67. package/dist/src/computer-access/companion/windows-store/connection-error.js +19 -0
  68. package/dist/src/computer-access/companion/windows-store/connection-link.d.ts +13 -0
  69. package/dist/src/computer-access/companion/windows-store/connection-link.js +109 -0
  70. package/dist/src/computer-access/companion/windows-store/identity.d.ts +13 -0
  71. package/dist/src/computer-access/companion/windows-store/identity.js +13 -0
  72. package/dist/src/computer-access/companion/windows-store/lifecycle.d.ts +5 -0
  73. package/dist/src/computer-access/companion/windows-store/lifecycle.js +90 -0
  74. package/dist/src/computer-access/computer/companion-sessions.js +7 -6
  75. package/dist/src/computer-access/computer/unix-native-process.js +23 -11
  76. package/dist/src/computer-access/contracts.d.ts +1 -1
  77. package/dist/src/computer-access/handlers.d.ts +3 -1
  78. package/dist/src/computer-access/handlers.js +83 -11
  79. package/dist/src/computer-access/host-observation.d.ts +3 -3
  80. package/dist/src/computer-access/native-observation-connection.d.ts +12 -0
  81. package/dist/src/computer-access/native-observation-connection.js +78 -0
  82. package/dist/src/computer-access/native-observation-ownership.d.ts +6 -0
  83. package/dist/src/computer-access/native-observation-ownership.js +55 -0
  84. package/dist/src/computer-access/native-observation-shutdown.d.ts +7 -0
  85. package/dist/src/computer-access/native-observation-shutdown.js +58 -0
  86. package/dist/src/computer-access/observation-source.d.ts +6 -0
  87. package/dist/src/computer-access/observation-source.js +10 -0
  88. package/dist/src/computer-access/process-capture.d.ts +6 -0
  89. package/dist/src/computer-access/process-capture.js +1 -0
  90. package/dist/src/computer-access/process-result.d.ts +2 -0
  91. package/dist/src/computer-access/process-result.js +14 -6
  92. package/dist/src/computer-access/process-runner.d.ts +2 -1
  93. package/dist/src/computer-access/process-runner.js +21 -13
  94. package/dist/src/computer-access/security/desktop-result.d.ts +8 -0
  95. package/dist/src/computer-access/security/desktop-result.js +146 -0
  96. package/dist/src/computer-access/security/observed-error.d.ts +2 -0
  97. package/dist/src/computer-access/security/observed-error.js +10 -0
  98. package/dist/src/computer-access/security/secret-text.d.ts +7 -0
  99. package/dist/src/computer-access/security/secret-text.js +111 -0
  100. package/dist/src/computer-access/security/system-results.d.ts +2 -0
  101. package/dist/src/computer-access/security/system-results.js +53 -0
  102. package/dist/src/computer-access/system-result-protection.d.ts +11 -0
  103. package/dist/src/computer-access/system-result-protection.js +1 -0
  104. package/dist/src/model-gateway/observability/provider-response-capture.d.ts +60 -0
  105. package/dist/src/model-gateway/observability/provider-response-capture.js +68 -0
  106. package/dist/src/model-gateway/observability/provider-response-prefix.d.ts +7 -0
  107. package/dist/src/model-gateway/observability/provider-response-prefix.js +14 -0
  108. package/dist/src/model-gateway/observability/provider-response-tail.d.ts +8 -0
  109. package/dist/src/model-gateway/observability/provider-response-tail.js +28 -0
  110. package/dist/src/model-gateway/observability/provider-sse-diagnostics.d.ts +30 -0
  111. package/dist/src/model-gateway/observability/provider-sse-diagnostics.js +119 -0
  112. package/dist/src/model-gateway/observability/provider-trace.js +30 -8
  113. package/dist/src/model-gateway/providers/ollama/adapter.js +8 -2
  114. package/dist/src/model-gateway/providers/ollama/stream-normalizer.js +70 -50
  115. package/dist/src/model-gateway/providers/ollama/stream-termination.d.ts +6 -0
  116. package/dist/src/model-gateway/providers/ollama/stream-termination.js +20 -0
  117. package/dist/src/model-gateway/providers/openai/adapter.js +9 -7
  118. package/dist/src/model-gateway/providers/openai/diagnostics.d.ts +0 -1
  119. package/dist/src/model-gateway/providers/openai/diagnostics.js +0 -9
  120. package/dist/src/model-gateway/providers/openai/function-output.d.ts +11 -0
  121. package/dist/src/model-gateway/providers/openai/function-output.js +37 -0
  122. package/dist/src/model-gateway/providers/openai/function-result.d.ts +7 -0
  123. package/dist/src/model-gateway/providers/openai/function-result.js +35 -0
  124. package/dist/src/model-gateway/providers/openai/message-output-policy.d.ts +3 -0
  125. package/dist/src/model-gateway/providers/openai/message-output-policy.js +16 -0
  126. package/dist/src/model-gateway/providers/openai/payload.d.ts +0 -2
  127. package/dist/src/model-gateway/providers/openai/payload.js +6 -23
  128. package/dist/src/model-gateway/providers/openai/response-lifetime.d.ts +2 -0
  129. package/dist/src/model-gateway/providers/openai/response-lifetime.js +64 -0
  130. package/dist/src/model-gateway/providers/openai/sse-data.d.ts +9 -0
  131. package/dist/src/model-gateway/providers/openai/sse-data.js +67 -0
  132. package/dist/src/model-gateway/providers/openai/stream-normalizer.d.ts +10 -22
  133. package/dist/src/model-gateway/providers/openai/stream-normalizer.js +78 -79
  134. package/dist/src/model-gateway/providers/openai/stream.js +13 -41
  135. package/dist/src/model-gateway/providers/openai/structured-message-output.d.ts +42 -0
  136. package/dist/src/model-gateway/providers/openai/structured-message-output.js +175 -0
  137. package/dist/src/model-gateway/server/configuration.d.ts +2 -0
  138. package/dist/src/model-gateway/server/configuration.js +73 -21
  139. package/dist/src/model-gateway/server.js +5 -1
  140. package/dist/src/plugin-contract/index.d.ts +1 -0
  141. package/dist/src/plugin-contract/index.js +1 -0
  142. package/dist/src/plugin-contract/install-source.d.ts +13 -0
  143. package/dist/src/plugin-contract/install-source.js +99 -0
  144. package/dist/src/plugin-contract/manifest.d.ts +4 -1
  145. package/dist/src/plugin-contract/manifest.js +1 -0
  146. package/dist/src/plugin-contract/platform-compatibility.d.ts +16 -0
  147. package/dist/src/plugin-contract/platform-compatibility.js +3 -0
  148. package/dist/src/plugin-sdk/computer-access.d.ts +12 -0
  149. package/dist/src/plugin-sdk/computer-access.js +6 -0
  150. package/dist/src/plugin-sdk/files-windows/process.d.ts +3 -0
  151. package/dist/src/plugin-sdk/files-windows/process.js +93 -0
  152. package/dist/src/plugin-sdk/files-windows/read-script.d.ts +1 -0
  153. package/dist/src/plugin-sdk/files-windows/read-script.js +43 -0
  154. package/dist/src/plugin-sdk/files-windows/read.d.ts +6 -0
  155. package/dist/src/plugin-sdk/files-windows/read.js +56 -0
  156. package/dist/src/plugin-sdk/files-windows/result.d.ts +4 -0
  157. package/dist/src/plugin-sdk/files-windows/result.js +67 -0
  158. package/dist/src/plugin-sdk/files.js +4 -0
  159. package/dist/src/plugin-sdk/index.d.ts +1 -0
  160. package/dist/src/plugin-sdk/index.js +1 -0
  161. package/dist/src/plugin-sdk/mutation-result.d.ts +7 -0
  162. package/dist/src/plugin-sdk/mutation-result.js +11 -0
  163. package/dist/src/runtime/adapters/in-memory-session-store.js +6 -16
  164. package/dist/src/runtime/adapters/long-term-memory/file-lock/acquisition.js +20 -3
  165. package/dist/src/runtime/adapters/long-term-memory/file-lock/owner-record.js +3 -1
  166. package/dist/src/runtime/adapters/long-term-memory/file-lock/path-observation.d.ts +3 -0
  167. package/dist/src/runtime/adapters/long-term-memory/file-lock/path-observation.js +20 -0
  168. package/dist/src/runtime/adapters/long-term-memory/file-lock/snapshot.js +7 -3
  169. package/dist/src/runtime/adapters/passive-learning-runtime.d.ts +1 -1
  170. package/dist/src/runtime/adapters/passive-learning-runtime.js +3 -3
  171. package/dist/src/runtime/adapters/runtime-observation-connection.d.ts +5 -0
  172. package/dist/src/runtime/adapters/runtime-observation-connection.js +13 -0
  173. package/dist/src/runtime/admin/config-control.js +2 -1
  174. package/dist/src/runtime/automations/catalog.d.ts +3 -0
  175. package/dist/src/runtime/automations/catalog.js +1 -0
  176. package/dist/src/runtime/automations/model-dependency-projection.d.ts +2 -0
  177. package/dist/src/runtime/automations/service.d.ts +2 -0
  178. package/dist/src/runtime/capabilities/automation-builder/authoring-reference.d.ts +10 -5
  179. package/dist/src/runtime/capabilities/automation-builder/authoring-reference.js +8 -7
  180. package/dist/src/runtime/capabilities/automation-builder/payload-instructions.d.ts +2 -2
  181. package/dist/src/runtime/capabilities/automation-builder/payload-instructions.js +2 -2
  182. package/dist/src/runtime/capabilities/automation-builder/tool-contract.d.ts +2 -2
  183. package/dist/src/runtime/capabilities/automations/authoring-catalog.js +1 -1
  184. package/dist/src/runtime/capabilities/automations/authoring-preparation.d.ts +11 -5
  185. package/dist/src/runtime/capabilities/automations/tool-module.js +1 -1
  186. package/dist/src/runtime/capabilities/request-permission-catalog.d.ts +3 -1
  187. package/dist/src/runtime/capabilities/request-permission-catalog.js +21 -2
  188. package/dist/src/runtime/capabilities/request-permission-tool-registry.d.ts +2 -1
  189. package/dist/src/runtime/capabilities/request-permission-tool-registry.js +18 -10
  190. package/dist/src/runtime/capabilities/request-runtime-tool-registry.d.ts +2 -0
  191. package/dist/src/runtime/capabilities/request-runtime-tool-registry.js +1 -1
  192. package/dist/src/runtime/capabilities/scheduling/create-operations.d.ts +6 -0
  193. package/dist/src/runtime/config/builders.js +6 -5
  194. package/dist/src/runtime/config/effective-model-config-validation.js +4 -35
  195. package/dist/src/runtime/config/fields.js +15 -0
  196. package/dist/src/runtime/config/model-context-capacity.d.ts +20 -0
  197. package/dist/src/runtime/config/model-context-capacity.js +55 -0
  198. package/dist/src/runtime/config/model-execution-policy.d.ts +5 -1
  199. package/dist/src/runtime/config/model-execution-policy.js +16 -0
  200. package/dist/src/runtime/config/model-plugin-config.d.ts +8 -0
  201. package/dist/src/runtime/config/model-plugin-config.js +40 -0
  202. package/dist/src/runtime/config/schema.js +5 -1
  203. package/dist/src/runtime/config/validation/model-profile-validation.js +2 -0
  204. package/dist/src/runtime/config/validation/runtime-config-validation-contract.d.ts +3 -1
  205. package/dist/src/runtime/config/validation/runtime-config-validation-contract.js +3 -1
  206. package/dist/src/runtime/config/validation/runtime-root-section-validation.js +11 -4
  207. package/dist/src/runtime/config/validation/web-ui-config-validation.js +3 -2
  208. package/dist/src/runtime/config/web-ui.d.ts +5 -0
  209. package/dist/src/runtime/config/web-ui.js +5 -0
  210. package/dist/src/runtime/config.js +2 -0
  211. package/dist/src/runtime/local-application.d.ts +2 -0
  212. package/dist/src/runtime/local-host/app-owner.js +50 -6
  213. package/dist/src/runtime/local-host/app-request-control.d.ts +3 -1
  214. package/dist/src/runtime/local-host/app-request-control.js +91 -11
  215. package/dist/src/runtime/local-host/client-requests.js +32 -5
  216. package/dist/src/runtime/local-host/client-services.d.ts +2 -0
  217. package/dist/src/runtime/local-host/local-request-diagnostics.d.ts +9 -0
  218. package/dist/src/runtime/local-host/local-request-diagnostics.js +47 -0
  219. package/dist/src/runtime/local-host/saved-approvals.js +23 -2
  220. package/dist/src/runtime/local-host/windows-private-access.js +2 -0
  221. package/dist/src/runtime/model/model-selection.js +4 -1
  222. package/dist/src/runtime/observability/request-control-diagnostics.d.ts +6 -0
  223. package/dist/src/runtime/observability/request-control-diagnostics.js +52 -0
  224. package/dist/src/runtime/passive-learning/application-catalog.js +3 -1
  225. package/dist/src/runtime/passive-learning/collection-source.js +7 -0
  226. package/dist/src/runtime/passive-learning/service.js +2 -3
  227. package/dist/src/runtime/passive-learning/status-projection.d.ts +2 -0
  228. package/dist/src/runtime/passive-learning/status-projection.js +9 -0
  229. package/dist/src/runtime/plugins/configuration-context.d.ts +9 -0
  230. package/dist/src/runtime/plugins/configuration-context.js +42 -0
  231. package/dist/src/runtime/plugins/configuration-settings.d.ts +2 -0
  232. package/dist/src/runtime/plugins/configuration-settings.js +26 -0
  233. package/dist/src/runtime/plugins/configuration-store.d.ts +23 -0
  234. package/dist/src/runtime/plugins/configuration-store.js +100 -0
  235. package/dist/src/runtime/plugins/configuration-write.d.ts +5 -0
  236. package/dist/src/runtime/plugins/configuration-write.js +58 -0
  237. package/dist/src/runtime/plugins/installation/archive.d.ts +2 -0
  238. package/dist/src/runtime/plugins/installation/archive.js +107 -0
  239. package/dist/src/runtime/plugins/installation/github-download.d.ts +9 -0
  240. package/dist/src/runtime/plugins/installation/github-download.js +72 -0
  241. package/dist/src/runtime/plugins/installation/installed-package.d.ts +9 -0
  242. package/dist/src/runtime/plugins/installation/installed-package.js +66 -0
  243. package/dist/src/runtime/plugins/installation/package.d.ts +53 -0
  244. package/dist/src/runtime/plugins/installation/package.js +81 -0
  245. package/dist/src/runtime/plugins/installation/portable-path.d.ts +2 -0
  246. package/dist/src/runtime/plugins/installation/portable-path.js +10 -0
  247. package/dist/src/runtime/plugins/installation/publication.d.ts +10 -0
  248. package/dist/src/runtime/plugins/installation/publication.js +17 -0
  249. package/dist/src/runtime/plugins/installation/service.d.ts +48 -0
  250. package/dist/src/runtime/plugins/installation/service.js +80 -0
  251. package/dist/src/runtime/plugins/loader.js +34 -38
  252. package/dist/src/runtime/plugins/manifest-platform-compatibility.d.ts +2 -0
  253. package/dist/src/runtime/plugins/manifest-platform-compatibility.js +39 -0
  254. package/dist/src/runtime/plugins/manifest-projection.js +1 -0
  255. package/dist/src/runtime/plugins/manifest-validator.js +12 -1
  256. package/dist/src/runtime/plugins/module-cache.d.ts +2 -0
  257. package/dist/src/runtime/plugins/module-cache.js +19 -0
  258. package/dist/src/runtime/plugins/platform-compatibility.d.ts +4 -0
  259. package/dist/src/runtime/plugins/platform-compatibility.js +44 -0
  260. package/dist/src/runtime/plugins/selection.d.ts +2 -0
  261. package/dist/src/runtime/plugins/selection.js +16 -11
  262. package/dist/src/runtime/ports.d.ts +6 -4
  263. package/dist/src/runtime/request/approval-wait/activation-events.js +19 -7
  264. package/dist/src/runtime/request/approval-wait/execution-compaction-restore.d.ts +20 -0
  265. package/dist/src/runtime/request/approval-wait/execution-compaction-restore.js +118 -0
  266. package/dist/src/runtime/request/approval-wait/super-compaction-restore.js +2 -1
  267. package/dist/src/runtime/request/dependencies.d.ts +2 -1
  268. package/dist/src/runtime/request/execution-payload-compacted-evidence.d.ts +1 -1
  269. package/dist/src/runtime/request/handler.js +8 -0
  270. package/dist/src/runtime/request/prepared-execution.js +9 -1
  271. package/dist/src/runtime/request/request-steering.d.ts +4 -0
  272. package/dist/src/runtime/request/request-steering.js +37 -12
  273. package/dist/src/runtime/request/worker-capability-composition.d.ts +2 -0
  274. package/dist/src/runtime/request/worker-capability-composition.js +4 -1
  275. package/dist/src/runtime/scheduler/journal-index-state.d.ts +1 -1
  276. package/dist/src/runtime/steps/execution-agent/capability-result-context.d.ts +6 -0
  277. package/dist/src/runtime/steps/execution-agent/capability-result-context.js +29 -0
  278. package/dist/src/runtime/steps/execution-agent/format.js +2 -3
  279. package/dist/src/runtime/steps/execution-agent/input.js +1 -1
  280. package/dist/src/runtime/steps/execution-agent/prompt.js +5 -5
  281. package/dist/src/runtime/steps/execution-agent/response-prompt.js +1 -0
  282. package/dist/src/runtime/steps/execution-agent/state-context.d.ts +2 -3
  283. package/dist/src/runtime/steps/execution-agent/state-context.js +26 -35
  284. package/dist/src/runtime/steps/execution-agent/work-plan-contract.d.ts +1 -3
  285. package/dist/src/runtime/steps/execution-agent/work-plan-contract.js +0 -55
  286. package/dist/src/runtime/steps/execution-agent/work-plan-schema.d.ts +3 -0
  287. package/dist/src/runtime/steps/execution-agent/work-plan-schema.js +61 -0
  288. package/dist/src/sessions/assistant-initiative-message.d.ts +3 -0
  289. package/dist/src/sessions/assistant-initiative-message.js +12 -0
  290. package/dist/src/sessions/assistant-initiative.d.ts +2 -2
  291. package/dist/src/sessions/assistant-initiative.js +1 -7
  292. package/dist/src/sessions/durable-session-commit.d.ts +2 -1
  293. package/dist/src/sessions/durable-session-commit.js +9 -4
  294. package/dist/src/sessions/metadata/projection.d.ts +15 -0
  295. package/dist/src/sessions/metadata/projection.js +55 -0
  296. package/dist/src/sessions/metadata/publication.d.ts +12 -0
  297. package/dist/src/sessions/metadata/publication.js +78 -0
  298. package/dist/src/sessions/metadata/source-receipt.d.ts +5 -0
  299. package/dist/src/sessions/metadata/source-receipt.js +42 -0
  300. package/dist/src/sessions/metadata/store.d.ts +7 -0
  301. package/dist/src/sessions/metadata/store.js +119 -0
  302. package/dist/src/sessions/prepared-session-replacement.d.ts +6 -0
  303. package/dist/src/sessions/prepared-session-replacement.js +46 -0
  304. package/dist/src/sessions/record/projection.d.ts +3 -1
  305. package/dist/src/sessions/record/projection.js +26 -18
  306. package/dist/src/sessions/request-lifecycle/service.js +3 -3
  307. package/dist/src/sessions/session-service.d.ts +2 -4
  308. package/dist/src/sessions/session-service.js +4 -16
  309. package/dist/src/sessions/session-store.d.ts +2 -1
  310. package/dist/src/sessions/session-store.js +11 -5
  311. package/dist/src/sessions/snapshot.d.ts +17 -0
  312. package/dist/src/sessions/snapshot.js +105 -0
  313. package/dist/src/sessions/types.d.ts +2 -0
  314. package/dist/src/shared/passive-observation-self-exclusion.d.ts +5 -0
  315. package/dist/src/shared/passive-observation-self-exclusion.js +37 -0
  316. package/dist/src/shared/tool-selection.d.ts +2 -0
  317. package/dist/src/shared/tool-selection.js +7 -0
  318. package/dist/src/shared/windows-file-io/authority-script.d.ts +1 -0
  319. package/dist/src/shared/windows-file-io/authority-script.js +94 -0
  320. package/dist/src/shared/windows-file-io/native-script.d.ts +2 -0
  321. package/dist/src/shared/windows-file-io/native-script.js +120 -0
  322. package/dist/src/shared/windows-file-io/read-bytes-script.d.ts +1 -0
  323. package/dist/src/shared/windows-file-io/read-bytes-script.js +18 -0
  324. package/dist/src/shared/windows-job-object.d.ts +2 -0
  325. package/dist/src/shared/windows-job-object.js +66 -0
  326. package/dist/src/web-ui/app/ARCHITECTURE.md +14 -0
  327. package/dist/src/web-ui/app/app-bootstrap.js +14 -1
  328. package/dist/src/web-ui/app/app-state.js +0 -7
  329. package/dist/src/web-ui/app/app.js +59 -159
  330. package/dist/src/web-ui/app/components/automations/node-inspector.js +3 -2
  331. package/dist/src/web-ui/app/components/automations/step-editor-dialog.js +3 -0
  332. package/dist/src/web-ui/app/components/composer-submission-notice.js +50 -0
  333. package/dist/src/web-ui/app/components/config-workspace/config-model.js +2 -0
  334. package/dist/src/web-ui/app/components/config-workspace/model-plugin-permissions.js +136 -0
  335. package/dist/src/web-ui/app/components/config-workspace/model-plugin-selection.js +180 -0
  336. package/dist/src/web-ui/app/components/config-workspace/model-plugin-view-state.js +114 -0
  337. package/dist/src/web-ui/app/components/config-workspace/model-rendering.js +3 -0
  338. package/dist/src/web-ui/app/components/config-workspace/model-summary.js +39 -0
  339. package/dist/src/web-ui/app/components/config-workspace/summary-rendering.js +30 -0
  340. package/dist/src/web-ui/app/components/config-workspace/workspace-events.js +37 -0
  341. package/dist/src/web-ui/app/components/config-workspace/workspace-mutations.js +24 -2
  342. package/dist/src/web-ui/app/components/config-workspace/workspace-persistence.js +9 -1
  343. package/dist/src/web-ui/app/components/config-workspace/workspace-view.js +23 -67
  344. package/dist/src/web-ui/app/components/config-workspace.js +11 -2
  345. package/dist/src/web-ui/app/components/conversation-view.js +36 -5
  346. package/dist/src/web-ui/app/components/dashboard/recent-conversations.js +2 -1
  347. package/dist/src/web-ui/app/components/dashboard/workspace.js +2 -1
  348. package/dist/src/web-ui/app/components/home-guidance/daily-review.js +2 -2
  349. package/dist/src/web-ui/app/components/home-guidance/home-guidance.js +20 -6
  350. package/dist/src/web-ui/app/components/model-setup/context-window-feedback.js +53 -0
  351. package/dist/src/web-ui/app/components/model-setup/save-flow.js +3 -1
  352. package/dist/src/web-ui/app/components/model-setup/save-outcome.js +1 -0
  353. package/dist/src/web-ui/app/components/model-setup/wizard.js +12 -0
  354. package/dist/src/web-ui/app/components/operations-summary.js +105 -0
  355. package/dist/src/web-ui/app/components/passive-learning/activity-controls.js +4 -0
  356. package/dist/src/web-ui/app/components/passive-learning/collection-access.js +35 -0
  357. package/dist/src/web-ui/app/components/passive-learning/collection-consent-dialog.js +59 -0
  358. package/dist/src/web-ui/app/components/passive-learning/collection-consent-gate.js +94 -0
  359. package/dist/src/web-ui/app/components/passive-learning/computer-update-notice.js +6 -0
  360. package/dist/src/web-ui/app/components/passive-learning/failure-copy.js +1 -0
  361. package/dist/src/web-ui/app/components/passive-learning/home.js +8 -11
  362. package/dist/src/web-ui/app/components/passive-learning/macos-collection-restart-notice.js +1 -0
  363. package/dist/src/web-ui/app/components/passive-learning/memory.js +2 -4
  364. package/dist/src/web-ui/app/components/passive-learning/workspace-view.js +2 -2
  365. package/dist/src/web-ui/app/components/plugins/compatibility.js +13 -0
  366. package/dist/src/web-ui/app/components/plugins/configuration-draft.js +34 -0
  367. package/dist/src/web-ui/app/components/plugins/configuration-editor.js +147 -0
  368. package/dist/src/web-ui/app/components/plugins/configuration-fields.js +103 -0
  369. package/dist/src/web-ui/app/components/plugins/configuration-retained-secrets.js +20 -0
  370. package/dist/src/web-ui/app/components/plugins/configuration-settings.js +108 -0
  371. package/dist/src/web-ui/app/components/plugins/discovery-rendering.js +45 -0
  372. package/dist/src/web-ui/app/components/plugins/installation-compatibility.js +7 -0
  373. package/dist/src/web-ui/app/components/plugins/installation.js +213 -0
  374. package/dist/src/web-ui/app/components/plugins/manager.js +160 -6
  375. package/dist/src/web-ui/app/components/plugins/removal.js +130 -0
  376. package/dist/src/web-ui/app/components/plugins/rendering.js +17 -2
  377. package/dist/src/web-ui/app/components/plugins/summary.js +54 -0
  378. package/dist/src/web-ui/app/components/plugins/tabs.js +31 -0
  379. package/dist/src/web-ui/app/components/plugins/view-state.js +3 -1
  380. package/dist/src/web-ui/app/components/reasoning-override-prompt.js +82 -0
  381. package/dist/src/web-ui/app/components/runtime-config-activation.js +22 -8
  382. package/dist/src/web-ui/app/components/runtime-setup/connection-form.js +5 -2
  383. package/dist/src/web-ui/app/components/runtime-setup/connection-state.js +9 -1
  384. package/dist/src/web-ui/app/components/runtime-setup/context-window-feedback.js +71 -0
  385. package/dist/src/web-ui/app/components/runtime-setup/optional-steps.js +9 -4
  386. package/dist/src/web-ui/app/components/runtime-setup/plugins.js +3 -1
  387. package/dist/src/web-ui/app/components/runtime-setup/rendering.js +6 -4
  388. package/dist/src/web-ui/app/components/runtime-setup-guide.d.ts +1 -0
  389. package/dist/src/web-ui/app/components/runtime-setup-guide.js +15 -3
  390. package/dist/src/web-ui/app/components/schedules/form.js +10 -8
  391. package/dist/src/web-ui/app/components/schedules/workspace.js +23 -4
  392. package/dist/src/web-ui/app/components/session-sidebar-sections.js +2 -2
  393. package/dist/src/web-ui/app/components/spark-chat/empty-state.js +1 -0
  394. package/dist/src/web-ui/app/components/spark-chat/handoff-actions.js +9 -3
  395. package/dist/src/web-ui/app/components/spark-chat/panel.js +1 -0
  396. package/dist/src/web-ui/app/components/spark-chat/placement.js +4 -7
  397. package/dist/src/web-ui/app/components/spark-chat/settings.js +7 -3
  398. package/dist/src/web-ui/app/components/system-host/connection-card.js +35 -0
  399. package/dist/src/web-ui/app/components/system-host/macos-permissions.js +2 -0
  400. package/dist/src/web-ui/app/components/system-host/macos-setup.js +1 -1
  401. package/dist/src/web-ui/app/components/system-host/manager.js +45 -12
  402. package/dist/src/web-ui/app/components/system-host/native-windows-access.js +50 -0
  403. package/dist/src/web-ui/app/components/system-host/rendering.js +114 -106
  404. package/dist/src/web-ui/app/components/system-host/windows-store-setup.js +293 -0
  405. package/dist/src/web-ui/app/components/workspace-shell.js +6 -0
  406. package/dist/src/web-ui/app/components/workspace-storage-notice.js +37 -0
  407. package/dist/src/web-ui/app/computer-access-feature.js +22 -5
  408. package/dist/src/web-ui/app/configuration-environment-refresh.js +27 -34
  409. package/dist/src/web-ui/app/configuration-feature.js +44 -3
  410. package/dist/src/web-ui/app/controllers/app-event-bindings.js +41 -105
  411. package/dist/src/web-ui/app/controllers/chat-request-controller.d.ts +28 -0
  412. package/dist/src/web-ui/app/controllers/chat-request-controller.js +34 -66
  413. package/dist/src/web-ui/app/controllers/composer-attachments-controller.d.ts +15 -40
  414. package/dist/src/web-ui/app/controllers/composer-attachments-controller.js +26 -69
  415. package/dist/src/web-ui/app/controllers/composer-draft-view.d.ts +27 -0
  416. package/dist/src/web-ui/app/controllers/composer-draft-view.js +48 -0
  417. package/dist/src/web-ui/app/controllers/composer-drafts.d.ts +55 -0
  418. package/dist/src/web-ui/app/controllers/composer-drafts.js +120 -0
  419. package/dist/src/web-ui/app/controllers/composer-feature.d.ts +65 -0
  420. package/dist/src/web-ui/app/controllers/composer-feature.js +124 -0
  421. package/dist/src/web-ui/app/controllers/composer-queue-controller.d.ts +33 -94
  422. package/dist/src/web-ui/app/controllers/composer-queue-controller.js +185 -251
  423. package/dist/src/web-ui/app/controllers/composer-submission-lifecycle.d.ts +48 -0
  424. package/dist/src/web-ui/app/controllers/composer-submission-lifecycle.js +97 -0
  425. package/dist/src/web-ui/app/controllers/composer-submit-controller.d.ts +30 -61
  426. package/dist/src/web-ui/app/controllers/composer-submit-controller.js +56 -138
  427. package/dist/src/web-ui/app/controllers/composer-surface-controller.js +6 -0
  428. package/dist/src/web-ui/app/controllers/composer-workspace-controller.d.ts +22 -40
  429. package/dist/src/web-ui/app/controllers/composer-workspace-controller.js +49 -165
  430. package/dist/src/web-ui/app/controllers/conversation-navigation-intent.js +15 -0
  431. package/dist/src/web-ui/app/controllers/conversation-read-state-controller.d.ts +1 -0
  432. package/dist/src/web-ui/app/controllers/conversation-read-state-controller.js +7 -3
  433. package/dist/src/web-ui/app/controllers/conversation-request-hydration.js +91 -0
  434. package/dist/src/web-ui/app/controllers/conversation-session-controller.d.ts +10 -5
  435. package/dist/src/web-ui/app/controllers/conversation-session-controller.js +97 -162
  436. package/dist/src/web-ui/app/controllers/conversation-workspace-activation.js +27 -0
  437. package/dist/src/web-ui/app/controllers/daily-memory-review.js +15 -16
  438. package/dist/src/web-ui/app/controllers/environment-transition.js +126 -0
  439. package/dist/src/web-ui/app/controllers/environment-workspace-preparation.js +18 -0
  440. package/dist/src/web-ui/app/controllers/history-pagination.js +111 -0
  441. package/dist/src/web-ui/app/controllers/home-composer-feature.d.ts +14 -36
  442. package/dist/src/web-ui/app/controllers/home-composer-feature.js +17 -114
  443. package/dist/src/web-ui/app/controllers/home-conversation-activation.js +6 -8
  444. package/dist/src/web-ui/app/controllers/operations-controller.d.ts +12 -0
  445. package/dist/src/web-ui/app/controllers/operations-controller.js +28 -21
  446. package/dist/src/web-ui/app/controllers/passive-learning-controller.js +56 -0
  447. package/dist/src/web-ui/app/controllers/projects-controller.d.ts +1 -1
  448. package/dist/src/web-ui/app/controllers/projects-controller.js +6 -1
  449. package/dist/src/web-ui/app/controllers/reasoning-mode-controller.js +174 -0
  450. package/dist/src/web-ui/app/controllers/runtime-onboarding-controller.d.ts +1 -0
  451. package/dist/src/web-ui/app/controllers/runtime-onboarding-controller.js +11 -0
  452. package/dist/src/web-ui/app/controllers/runtime-selection-controller.d.ts +7 -0
  453. package/dist/src/web-ui/app/controllers/runtime-selection-controller.js +20 -155
  454. package/dist/src/web-ui/app/controllers/session-controller.js +43 -19
  455. package/dist/src/web-ui/app/controllers/session-list-pagination.js +71 -0
  456. package/dist/src/web-ui/app/controllers/session-pin-updates.js +14 -0
  457. package/dist/src/web-ui/app/controllers/session-sidebar-controller.js +17 -17
  458. package/dist/src/web-ui/app/controllers/spark-chat-reading.js +1 -0
  459. package/dist/src/web-ui/app/controllers/spark-chat-sync.js +26 -7
  460. package/dist/src/web-ui/app/controllers/steer-controller.js +9 -7
  461. package/dist/src/web-ui/app/controllers/tool-permission-mode-controller.js +1 -1
  462. package/dist/src/web-ui/app/controllers/workspace-conversation-opener.js +34 -0
  463. package/dist/src/web-ui/app/controllers/workspace-route-controller.js +21 -19
  464. package/dist/src/web-ui/app/dashboard-feature.js +4 -3
  465. package/dist/src/web-ui/app/index.html +6 -2
  466. package/dist/src/web-ui/app/lib/history-page-messages.js +49 -0
  467. package/dist/src/web-ui/app/lib/reasoning-controls.js +35 -0
  468. package/dist/src/web-ui/app/lib/request-lifecycle-view.js +8 -0
  469. package/dist/src/web-ui/app/lib/session-composer-queue-ownership.js +58 -0
  470. package/dist/src/web-ui/app/lib/session-composer-queue.d.ts +12 -0
  471. package/dist/src/web-ui/app/lib/session-composer-queue.js +25 -6
  472. package/dist/src/web-ui/app/lib/workspace-route.d.ts +3 -0
  473. package/dist/src/web-ui/app/lib/workspace-route.js +4 -0
  474. package/dist/src/web-ui/app/passive-learning-feature.js +16 -4
  475. package/dist/src/web-ui/app/runtime-onboarding-feature.js +3 -0
  476. package/dist/src/web-ui/app/schedules-feature.js +5 -3
  477. package/dist/src/web-ui/app/services/client-preferences.d.ts +18 -10
  478. package/dist/src/web-ui/app/services/client-preferences.js +25 -16
  479. package/dist/src/web-ui/app/services/home-guidance-preferences.js +13 -13
  480. package/dist/src/web-ui/app/services/reasoning-override.js +12 -0
  481. package/dist/src/web-ui/app/services/runtime-web-client/automations.js +10 -2
  482. package/dist/src/web-ui/app/services/runtime-web-client/configuration.js +20 -0
  483. package/dist/src/web-ui/app/services/runtime-web-client/memory.js +7 -2
  484. package/dist/src/web-ui/app/services/runtime-web-client/plugin-configuration.js +19 -0
  485. package/dist/src/web-ui/app/services/runtime-web-client/spark-chat.js +4 -4
  486. package/dist/src/web-ui/app/services/runtime-web-client/system-host.js +4 -0
  487. package/dist/src/web-ui/app/services/runtime-web-client.d.ts +8 -1
  488. package/dist/src/web-ui/app/services/runtime-web-client.js +14 -3
  489. package/dist/src/web-ui/app/services/server-composer-queue.js +32 -0
  490. package/dist/src/web-ui/app/services/session-sidebar-preferences.js +5 -5
  491. package/dist/src/web-ui/app/services/workspace-state-storage.js +116 -0
  492. package/dist/src/web-ui/app/services/workspace-state.js +27 -0
  493. package/dist/src/web-ui/app/spark-chat-conversation.js +34 -45
  494. package/dist/src/web-ui/app/spark-chat-feature.js +84 -21
  495. package/dist/src/web-ui/app/styles/11-product-links.css +30 -0
  496. package/dist/src/web-ui/app/styles/21-composer-controls.css +16 -0
  497. package/dist/src/web-ui/app/styles/41-plugin-configuration.css +79 -0
  498. package/dist/src/web-ui/app/styles/41-plugin-discovery.css +132 -0
  499. package/dist/src/web-ui/app/styles/41-plugin-management.css +14 -0
  500. package/dist/src/web-ui/app/styles/42-model-plugin-permissions.css +174 -0
  501. package/dist/src/web-ui/app/styles/46-system-host.css +61 -107
  502. package/dist/src/web-ui/app/styles/47-config-controls.css +13 -1
  503. package/dist/src/web-ui/app/styles/49-collection-consent.css +30 -0
  504. package/dist/src/web-ui/app/styles/54-spark-chat.css +33 -1
  505. package/dist/src/web-ui/app/styles/64-workspace-storage.css +23 -0
  506. package/dist/src/web-ui/app/styles.css +6 -0
  507. package/dist/src/web-ui/client-state/contracts.d.ts +15 -0
  508. package/dist/src/web-ui/client-state/contracts.js +13 -0
  509. package/dist/src/web-ui/client-state/preference-shapes.d.ts +2 -0
  510. package/dist/src/web-ui/client-state/preference-shapes.js +80 -0
  511. package/dist/src/web-ui/client-state/preferences.d.ts +3 -0
  512. package/dist/src/web-ui/client-state/preferences.js +84 -0
  513. package/dist/src/web-ui/client-state/queue.d.ts +3 -0
  514. package/dist/src/web-ui/client-state/queue.js +43 -0
  515. package/dist/src/web-ui/client-state/routes.d.ts +7 -0
  516. package/dist/src/web-ui/client-state/routes.js +58 -0
  517. package/dist/src/web-ui/client-state/store.d.ts +14 -0
  518. package/dist/src/web-ui/client-state/store.js +88 -0
  519. package/dist/src/web-ui/local-runtime/api-router.js +11 -6
  520. package/dist/src/web-ui/local-runtime/approval-request-attachment.js +14 -5
  521. package/dist/src/web-ui/local-runtime/configuration-activation-source.d.ts +1 -1
  522. package/dist/src/web-ui/local-runtime/configuration-activation-source.js +11 -3
  523. package/dist/src/web-ui/local-runtime/contracts.d.ts +4 -3
  524. package/dist/src/web-ui/local-runtime/environment-registry.d.ts +5 -1
  525. package/dist/src/web-ui/local-runtime/environment-registry.js +53 -11
  526. package/dist/src/web-ui/local-runtime/history-pagination.d.ts +16 -0
  527. package/dist/src/web-ui/local-runtime/history-pagination.js +20 -0
  528. package/dist/src/web-ui/local-runtime/http.js +11 -2
  529. package/dist/src/web-ui/local-runtime/model-context-capacity-error.d.ts +14 -0
  530. package/dist/src/web-ui/local-runtime/model-context-capacity-error.js +28 -0
  531. package/dist/src/web-ui/local-runtime/model-setup-context-window.d.ts +15 -0
  532. package/dist/src/web-ui/local-runtime/model-setup-context-window.js +25 -0
  533. package/dist/src/web-ui/local-runtime/model-setup-routes.js +2 -0
  534. package/dist/src/web-ui/local-runtime/model-setup-service.js +5 -2
  535. package/dist/src/web-ui/local-runtime/model-setup-validation.d.ts +1 -0
  536. package/dist/src/web-ui/local-runtime/model-setup-validation.js +14 -7
  537. package/dist/src/web-ui/local-runtime/plugin-configuration-routes.d.ts +16 -0
  538. package/dist/src/web-ui/local-runtime/plugin-configuration-routes.js +68 -0
  539. package/dist/src/web-ui/local-runtime/plugin-installation-routes.d.ts +16 -0
  540. package/dist/src/web-ui/local-runtime/plugin-installation-routes.js +96 -0
  541. package/dist/src/web-ui/local-runtime/plugin-management-routes.d.ts +8 -1
  542. package/dist/src/web-ui/local-runtime/plugin-management-routes.js +17 -0
  543. package/dist/src/web-ui/local-runtime/plugin-mutation-admission.d.ts +7 -0
  544. package/dist/src/web-ui/local-runtime/plugin-mutation-admission.js +17 -0
  545. package/dist/src/web-ui/local-runtime/plugin-removal-routes.d.ts +18 -0
  546. package/dist/src/web-ui/local-runtime/plugin-removal-routes.js +60 -0
  547. package/dist/src/web-ui/local-runtime/realtime-controller.js +41 -2
  548. package/dist/src/web-ui/local-runtime/request-body-error.d.ts +11 -0
  549. package/dist/src/web-ui/local-runtime/request-body-error.js +14 -0
  550. package/dist/src/web-ui/local-runtime/request-cancellation-route.js +28 -1
  551. package/dist/src/web-ui/local-runtime/request-control-observation.d.ts +19 -0
  552. package/dist/src/web-ui/local-runtime/request-control-observation.js +80 -0
  553. package/dist/src/web-ui/local-runtime/request-execution.js +66 -34
  554. package/dist/src/web-ui/local-runtime/runtime-setup-connection-edit.d.ts +2 -0
  555. package/dist/src/web-ui/local-runtime/runtime-setup-connection-edit.js +35 -22
  556. package/dist/src/web-ui/local-runtime/runtime-setup-context-window.d.ts +13 -0
  557. package/dist/src/web-ui/local-runtime/runtime-setup-context-window.js +21 -0
  558. package/dist/src/web-ui/local-runtime/runtime-setup-credentials.d.ts +15 -1
  559. package/dist/src/web-ui/local-runtime/runtime-setup-credentials.js +30 -11
  560. package/dist/src/web-ui/local-runtime/runtime-setup-edit-files.d.ts +20 -0
  561. package/dist/src/web-ui/local-runtime/runtime-setup-edit-files.js +104 -0
  562. package/dist/src/web-ui/local-runtime/runtime-setup-edit-journal.d.ts +29 -0
  563. package/dist/src/web-ui/local-runtime/runtime-setup-edit-journal.js +151 -0
  564. package/dist/src/web-ui/local-runtime/runtime-setup-edit-recovery.d.ts +7 -0
  565. package/dist/src/web-ui/local-runtime/runtime-setup-edit-recovery.js +87 -0
  566. package/dist/src/web-ui/local-runtime/runtime-setup-edit-transaction.d.ts +3 -0
  567. package/dist/src/web-ui/local-runtime/runtime-setup-edit-transaction.js +37 -0
  568. package/dist/src/web-ui/local-runtime/runtime-setup-routes.js +2 -0
  569. package/dist/src/web-ui/local-runtime/runtime-setup-service.js +4 -0
  570. package/dist/src/web-ui/local-runtime/runtime-setup-validation.js +9 -2
  571. package/dist/src/web-ui/local-runtime/session-routes.d.ts +1 -0
  572. package/dist/src/web-ui/local-runtime/session-routes.js +16 -4
  573. package/dist/src/web-ui/local-runtime/spark-chat-routes.js +4 -3
  574. package/dist/src/web-ui/local-runtime-backend.js +14 -0
  575. package/dist/src/web-ui/plugin-capability-selection.js +4 -1
  576. package/dist/src/web-ui/plugin-configuration-input.d.ts +12 -0
  577. package/dist/src/web-ui/plugin-configuration-input.js +68 -0
  578. package/dist/src/web-ui/plugin-configuration-retained-secrets.d.ts +9 -0
  579. package/dist/src/web-ui/plugin-configuration-retained-secrets.js +48 -0
  580. package/dist/src/web-ui/plugin-configuration-service.d.ts +52 -0
  581. package/dist/src/web-ui/plugin-configuration-service.js +66 -0
  582. package/dist/src/web-ui/plugin-configuration-view.d.ts +25 -0
  583. package/dist/src/web-ui/plugin-configuration-view.js +45 -0
  584. package/dist/src/web-ui/plugin-disabled-selection.d.ts +7 -0
  585. package/dist/src/web-ui/plugin-disabled-selection.js +17 -0
  586. package/dist/src/web-ui/plugin-management-catalog.d.ts +5 -1
  587. package/dist/src/web-ui/plugin-management-catalog.js +13 -1
  588. package/dist/src/web-ui/plugin-management-selection.js +22 -9
  589. package/dist/src/web-ui/plugin-management-service.d.ts +6 -1
  590. package/dist/src/web-ui/plugin-management-service.js +11 -7
  591. package/dist/src/web-ui/plugin-removal-error.d.ts +7 -0
  592. package/dist/src/web-ui/plugin-removal-error.js +16 -0
  593. package/dist/src/web-ui/plugin-removal-service.d.ts +31 -0
  594. package/dist/src/web-ui/plugin-removal-service.js +109 -0
  595. package/dist/src/web-ui/runtime-setup-gateway.d.ts +6 -2
  596. package/dist/src/web-ui/runtime-setup-gateway.js +30 -10
  597. package/dist/src/web-ui/server-readiness.d.ts +3 -0
  598. package/dist/src/web-ui/server-readiness.js +36 -0
  599. package/dist/src/web-ui/server.d.ts +2 -0
  600. package/dist/src/web-ui/server.js +29 -3
  601. package/dist/src/web-ui/session-read-state/overview.d.ts +42 -0
  602. package/dist/src/web-ui/session-read-state/overview.js +16 -0
  603. package/dist/src/web-ui/session-read-state/pagination.d.ts +15 -0
  604. package/dist/src/web-ui/session-read-state/pagination.js +42 -0
  605. package/dist/src/web-ui/session-read-state/projection.d.ts +4 -3
  606. package/dist/src/web-ui/session-read-state/service.d.ts +213 -20
  607. package/dist/src/web-ui/session-read-state/service.js +25 -23
  608. package/dist/src/web-ui/session-read-state/visible-messages.d.ts +3 -3
  609. package/dist/src/web-ui/system-host-service.js +13 -2
  610. package/dist/src/web-ui/system-host-setup/collection-consent-route.d.ts +3 -0
  611. package/dist/src/web-ui/system-host-setup/collection-consent-route.js +30 -0
  612. package/dist/src/web-ui/system-host-setup/companion-linux.js +1 -1
  613. package/dist/src/web-ui/system-host-setup/installer-contract.d.ts +1 -1
  614. package/dist/src/web-ui/system-host-setup/installer-contract.js +2 -2
  615. package/dist/src/web-ui/system-host-setup/installers.js +0 -7
  616. package/dist/src/web-ui/system-host-setup/local-connection.d.ts +4 -1
  617. package/dist/src/web-ui/system-host-setup/local-connection.js +10 -17
  618. package/dist/src/web-ui/system-host-setup/routes.d.ts +2 -0
  619. package/dist/src/web-ui/system-host-setup/routes.js +32 -9
  620. package/dist/src/web-ui/system-host-setup/setup-mutation.d.ts +9 -0
  621. package/dist/src/web-ui/system-host-setup/setup-mutation.js +27 -0
  622. package/dist/src/web-ui/system-host-setup/windows-store-route.d.ts +13 -0
  623. package/dist/src/web-ui/system-host-setup/windows-store-route.js +68 -0
  624. package/docs/configuration.md +46 -0
  625. package/docs/installation.md +88 -28
  626. package/docs/plugins.md +310 -6
  627. package/docs/projects-and-full-plus.md +2 -6
  628. package/docs/runtime-library.md +0 -1
  629. package/docs/tool-execution-result-evidence-contract.md +57 -0
  630. package/docs/windows-companion-store.md +132 -0
  631. package/package.json +6 -4
  632. package/plugins/capability-brief/plugin.json +4 -0
  633. package/plugins/code-outline/README.md +20 -0
  634. package/plugins/code-outline/plugin.json +1 -0
  635. package/plugins/code-outline/source/index.ts +16 -20
  636. package/plugins/code-outline/source/read-failure.ts +40 -0
  637. package/plugins/code-outline/src/index.cjs +614 -29
  638. package/plugins/document-reader/README.md +33 -0
  639. package/plugins/document-reader/plugin.json +2 -0
  640. package/plugins/document-reader/source/pdf-contract.ts +57 -0
  641. package/plugins/document-reader/source/pdf-parser.ts +139 -0
  642. package/plugins/document-reader/source/pdf-process-main.ts +56 -0
  643. package/plugins/document-reader/source/pdf-process.ts +207 -0
  644. package/plugins/document-reader/source/pdf-result.ts +79 -0
  645. package/plugins/document-reader/source/pdf-worker.ts +39 -303
  646. package/plugins/document-reader/source/pdf.ts +4 -1
  647. package/plugins/document-reader/source/read-failure.ts +37 -0
  648. package/plugins/document-reader/source/reader.ts +3 -19
  649. package/plugins/document-reader/src/index.cjs +995 -211
  650. package/plugins/exec/README.md +19 -0
  651. package/plugins/exec/plugin.json +7 -3
  652. package/plugins/exec/skills/exec_skill/SKILL.md +3 -2
  653. package/plugins/exec/source/filesystem-file-observer.ts +98 -0
  654. package/plugins/exec/source/filesystem-observer.ts +8 -79
  655. package/plugins/exec/source/output-files.ts +12 -6
  656. package/plugins/exec/source/paths.ts +3 -1
  657. package/plugins/exec/source/process-manager.ts +8 -24
  658. package/plugins/exec/source/shell-platform.ts +19 -3
  659. package/plugins/exec/source/shell-process.ts +55 -0
  660. package/plugins/exec/source/windows-job-source.ts +1 -0
  661. package/plugins/exec/source/windows-shell-bootstrap.ts +20 -0
  662. package/plugins/exec/src/index.cjs +252 -96
  663. package/plugins/filesystem/README.md +65 -0
  664. package/plugins/filesystem/plugin.json +8 -2
  665. package/plugins/filesystem/source/atomic-write.ts +2 -0
  666. package/plugins/filesystem/source/bounded-io.ts +80 -306
  667. package/plugins/filesystem/source/directory-sample.ts +2 -0
  668. package/plugins/filesystem/source/errors.ts +14 -0
  669. package/plugins/filesystem/source/file-observation.ts +151 -0
  670. package/plugins/filesystem/source/file-version.ts +41 -0
  671. package/plugins/filesystem/source/index.ts +6 -0
  672. package/plugins/filesystem/source/mutation-coordinator.ts +1 -0
  673. package/plugins/filesystem/source/windows/authority-script.ts +1 -0
  674. package/plugins/filesystem/source/windows/native-script.ts +1 -0
  675. package/plugins/filesystem/source/windows/operations.ts +197 -0
  676. package/plugins/filesystem/source/windows/process.ts +214 -0
  677. package/plugins/filesystem/source/windows/publication-script.ts +29 -0
  678. package/plugins/filesystem/source/windows/read-script.ts +63 -0
  679. package/plugins/filesystem/source/windows/request-availability.ts +67 -0
  680. package/plugins/filesystem/source/windows/source.ts +42 -0
  681. package/plugins/filesystem/source/windows/storage-script.ts +11 -0
  682. package/plugins/filesystem/source/windows/streams-script.ts +24 -0
  683. package/plugins/filesystem/source/windows/write-script.ts +86 -0
  684. package/plugins/filesystem/src/index.cjs +1208 -322
  685. package/plugins/json-inspector/README.md +18 -0
  686. package/plugins/json-inspector/plugin.json +1 -0
  687. package/plugins/json-inspector/source/index.ts +16 -19
  688. package/plugins/json-inspector/source/read-failure.ts +42 -0
  689. package/plugins/json-inspector/src/index.cjs +612 -27
  690. package/plugins/local-search/README.md +29 -0
  691. package/plugins/local-search/plugin.json +2 -0
  692. package/plugins/local-search/source/errors.ts +2 -0
  693. package/plugins/local-search/source/paths.ts +3 -0
  694. package/plugins/local-search/source/ripgrep-process.ts +31 -5
  695. package/plugins/local-search/source/ripgrep.ts +3 -3
  696. package/plugins/local-search/source/windows-authority.ts +99 -0
  697. package/plugins/local-search/source/windows-search-lease.ts +49 -0
  698. package/plugins/local-search/source/windows-search-process.ts +91 -0
  699. package/plugins/local-search/source/windows-search-script.ts +52 -0
  700. package/plugins/local-search/src/index.cjs +595 -26
  701. package/plugins/memory/plugin.json +4 -0
  702. package/plugins/memory/source/lock-directory-claim.ts +56 -0
  703. package/plugins/memory/source/lock-owner-file.ts +71 -0
  704. package/plugins/memory/source/lock-path-observation.ts +26 -0
  705. package/plugins/memory/source/prepared-memory-replacement.ts +40 -0
  706. package/plugins/memory/source/store-lock.ts +12 -7
  707. package/plugins/memory/source/store.ts +3 -2
  708. package/plugins/memory/src/index.cjs +174 -25
  709. package/plugins/project-orientation/README.md +23 -0
  710. package/plugins/project-orientation/plugin.json +1 -0
  711. package/plugins/project-orientation/source/index.ts +12 -9
  712. package/plugins/project-orientation/source/inspection-failure.ts +70 -0
  713. package/plugins/project-orientation/source/manifest-summary.ts +9 -2
  714. package/plugins/project-orientation/source/tree.ts +6 -0
  715. package/plugins/project-orientation/src/index.cjs +647 -31
  716. package/plugins/system/README.md +81 -5
  717. package/plugins/system/plugin.json +10 -1
  718. package/plugins/system/skills/system_actions/SKILL.md +1 -1
  719. package/plugins/system/source/command-working-directory.ts +47 -0
  720. package/plugins/system/source/companion-command-output.ts +82 -0
  721. package/plugins/system/source/computer/handlers.ts +13 -9
  722. package/plugins/system/source/computer/observation-result.ts +10 -5
  723. package/plugins/system/source/computer/request-computers.ts +10 -3
  724. package/plugins/system/source/computer/request-modules.ts +3 -6
  725. package/plugins/system/source/computer/runtime-platform.ts +18 -0
  726. package/plugins/system/source/host-dispatch.ts +21 -1
  727. package/plugins/system/source/index.ts +14 -6
  728. package/plugins/system/source/local-command-output-retention.ts +16 -0
  729. package/plugins/system/source/local-command-output.ts +69 -0
  730. package/plugins/system/source/request-system-modules.ts +14 -2
  731. package/plugins/system/source/request-target-snapshot.ts +2 -1
  732. package/plugins/system/source/security/desktop-result.ts +177 -0
  733. package/plugins/system/source/security/observed-error.ts +10 -0
  734. package/plugins/system/source/security/secret-text.ts +118 -0
  735. package/plugins/system/source/security/system-results.ts +62 -0
  736. package/plugins/system/source/security/windows-output-directory.ts +82 -0
  737. package/plugins/system/src/index.cjs +1207 -86
  738. package/plugins/system-probe/plugin.json +8 -2
  739. package/plugins/system-probe/source/disk-path.ts +8 -0
  740. package/plugins/system-probe/source/index.ts +10 -5
  741. package/plugins/system-probe/source/machine-load.ts +33 -0
  742. package/plugins/system-probe/source/metrics.ts +6 -8
  743. package/plugins/system-probe/src/index.cjs +49 -16
  744. package/plugins/web/README.md +2 -2
  745. package/plugins/web/plugin.json +8 -0
  746. package/runtime.config.schema.json +25 -1
  747. package/src/runtime/README.md +12 -2
  748. package/dist/src/web-ui/system-host-setup/companion-windows.d.ts +0 -2
  749. package/dist/src/web-ui/system-host-setup/companion-windows.js +0 -108
  750. package/docs/publishing.md +0 -167
@@ -4,6 +4,10 @@
4
4
  "version": "1.0.0",
5
5
  "description": "Read, search, add, and delete deterministic long-term memory entries.",
6
6
  "extensions": {
7
+ "ai.abot.compatibility": {
8
+ "version": 1,
9
+ "runtimePlatforms": ["linux", "darwin", "win32"]
10
+ },
7
11
  "ai.abot.runtime": {
8
12
  "version": 1,
9
13
  "entrypoint": "./src/index.cjs",
@@ -0,0 +1,56 @@
1
+ import type { BigIntStats } from "node:fs";
2
+ import { lstat, mkdir } from "node:fs/promises";
3
+
4
+ import { isWindowsLockObservationDenial } from "./lock-path-observation.js";
5
+
6
+ type LockClaimObservation = Readonly<{
7
+ observed: boolean;
8
+ entry?: BigIntStats;
9
+ }>;
10
+
11
+ function isAbsentLockClaimEntry(error: unknown): boolean {
12
+ if (!error || typeof error !== "object" || !("code" in error)) return false;
13
+ return error.code === "ENOENT";
14
+ }
15
+
16
+ async function observeLockClaimPath(path: string): Promise<LockClaimObservation> {
17
+ try {
18
+ return { observed: true, entry: await lstat(path, { bigint: true }) };
19
+ } catch (error) {
20
+ return { observed: isAbsentLockClaimEntry(error) };
21
+ }
22
+ }
23
+
24
+ function hasObservedLockNameTransition(
25
+ before: LockClaimObservation,
26
+ after: LockClaimObservation,
27
+ ): boolean {
28
+ if (!before.observed || !after.observed) return false;
29
+ if (!before.entry) return after.entry !== undefined;
30
+ if (!after.entry) return true;
31
+ if (before.entry.dev !== after.entry.dev) return true;
32
+ if (before.entry.ino !== after.entry.ino) return true;
33
+ if (before.entry.isDirectory() !== after.entry.isDirectory()) return true;
34
+ if (before.entry.isFile() !== after.entry.isFile()) return true;
35
+ return before.entry.isSymbolicLink() !== after.entry.isSymbolicLink();
36
+ }
37
+
38
+ /** Successful mkdir alone grants ownership; a proven name race is contention. */
39
+ export async function claimStoreLockDirectory(path: string): Promise<void> {
40
+ if (process.platform !== "win32") {
41
+ await mkdir(path, { mode: 0o700 });
42
+ return;
43
+ }
44
+ const before = await observeLockClaimPath(path);
45
+ try {
46
+ await mkdir(path, { mode: 0o700 });
47
+ } catch (error) {
48
+ if (!isWindowsLockObservationDenial(error)) throw error;
49
+ const after = await observeLockClaimPath(path);
50
+ if (!hasObservedLockNameTransition(before, after)) throw error;
51
+ throw Object.assign(new Error("Memory lock name changed during its directory claim."), {
52
+ code: "EEXIST",
53
+ cause: error,
54
+ });
55
+ }
56
+ }
@@ -0,0 +1,71 @@
1
+ import { constants, type BigIntStats } from "node:fs";
2
+ import { lstat, open, type FileHandle } from "node:fs/promises";
3
+
4
+ import {
5
+ isWindowsLockObservationDenial,
6
+ rethrowLockObservationError,
7
+ } from "./lock-path-observation.js";
8
+
9
+ function lockOwnerOpenError(code: "ELOOP" | "EAGAIN"): Error {
10
+ return Object.assign(new Error("Memory lock owner is not a stable regular file."), {
11
+ code,
12
+ });
13
+ }
14
+
15
+ function hasSameRegularOwnerIdentity(
16
+ before: BigIntStats,
17
+ current: BigIntStats,
18
+ ): boolean {
19
+ if (!current.isFile()) return false;
20
+ if (current.dev !== before.dev) return false;
21
+ return current.ino === before.ino;
22
+ }
23
+
24
+ async function openObservedLockOwner(
25
+ path: string,
26
+ flags: number,
27
+ before: BigIntStats,
28
+ ): Promise<FileHandle> {
29
+ try {
30
+ return await open(path, flags);
31
+ } catch (error) {
32
+ if (!isWindowsLockObservationDenial(error)) throw error;
33
+ // Windows can report a pending deletion as EPERM. Only a fresh name
34
+ // observation may classify it as a vanished or replaced owner.
35
+ const named = await lstat(path, { bigint: true });
36
+ if (!hasSameRegularOwnerIdentity(before, named)) {
37
+ throw lockOwnerOpenError("EAGAIN");
38
+ }
39
+ throw error;
40
+ }
41
+ }
42
+
43
+ /**
44
+ * Preserve atomic no-follow where Node supports it. On Windows, verify the
45
+ * named regular file and opened handle before accepting any owner record.
46
+ * This guards lock ownership; it is not a general filesystem sandbox.
47
+ */
48
+ export async function openLockOwnerFile(path: string): Promise<FileHandle> {
49
+ const before = await lstat(path, { bigint: true });
50
+ if (!before.isFile()) throw lockOwnerOpenError("ELOOP");
51
+ const noFollow = constants.O_NOFOLLOW;
52
+ const flags = typeof noFollow === "number"
53
+ ? constants.O_RDONLY | noFollow
54
+ : constants.O_RDONLY;
55
+ const handle = await openObservedLockOwner(path, flags, before);
56
+ try {
57
+ const opened = await handle.stat({ bigint: true });
58
+ const named = await lstat(path, { bigint: true });
59
+ if (!hasSameRegularOwnerIdentity(before, opened)) {
60
+ throw lockOwnerOpenError("EAGAIN");
61
+ }
62
+ if (!hasSameRegularOwnerIdentity(before, named)) {
63
+ throw lockOwnerOpenError("EAGAIN");
64
+ }
65
+ return handle;
66
+ } catch (error) {
67
+ await handle.close().catch(() => undefined);
68
+ // Closing our handle can complete a Windows pending deletion.
69
+ return rethrowLockObservationError(path, error);
70
+ }
71
+ }
@@ -0,0 +1,26 @@
1
+ import { lstat } from "node:fs/promises";
2
+
3
+ export function isWindowsLockObservationDenial(error: unknown): boolean {
4
+ if (process.platform !== "win32") return false;
5
+ if (!error || typeof error !== "object" || !("code" in error)) return false;
6
+ return error.code === "EPERM";
7
+ }
8
+
9
+ function isMissingLockObservation(error: unknown): boolean {
10
+ if (!error || typeof error !== "object" || !("code" in error)) return false;
11
+ return error.code === "ENOENT";
12
+ }
13
+
14
+ /** Normalize only a freshly confirmed disappearance; never accept opaque locks. */
15
+ export async function rethrowLockObservationError(
16
+ path: string,
17
+ error: unknown,
18
+ ): Promise<never> {
19
+ if (!isWindowsLockObservationDenial(error)) throw error;
20
+ try {
21
+ await lstat(path);
22
+ } catch (observationError) {
23
+ if (isMissingLockObservation(observationError)) throw observationError;
24
+ }
25
+ throw error;
26
+ }
@@ -0,0 +1,40 @@
1
+ import { rename } from "node:fs/promises";
2
+ import { performance } from "node:perf_hooks";
3
+
4
+ const WINDOWS_REPLACEMENT_WAIT_MS = 1_000;
5
+ const WINDOWS_REPLACEMENT_DELAY_MS = 25;
6
+ const MAX_REPLACEMENT_ATTEMPTS = 41;
7
+
8
+ function isRetryableWindowsMemoryReplacementError(error: unknown): boolean {
9
+ if (process.platform !== "win32") return false;
10
+ if (error === null || typeof error !== "object") return false;
11
+ return "code" in error && error.code === "EPERM";
12
+ }
13
+
14
+ function canWaitForMemoryReplacement(attempts: number, deadline: number): boolean {
15
+ if (attempts >= MAX_REPLACEMENT_ATTEMPTS) return false;
16
+ return performance.now() < deadline;
17
+ }
18
+
19
+ /**
20
+ * Readers can temporarily deny Windows replacement. Permanent EPERM stays an error.
21
+ * The caller keeps the mutation lock and owns cleanup; never rerun the mutation.
22
+ */
23
+ export async function replacePreparedMemoryFile(temporary: string, target: string): Promise<void> {
24
+ const deadline = performance.now() + WINDOWS_REPLACEMENT_WAIT_MS;
25
+ let attempts = 0;
26
+ for (;;) {
27
+ attempts += 1;
28
+ try {
29
+ await rename(temporary, target);
30
+ return;
31
+ } catch (error) {
32
+ if (!isRetryableWindowsMemoryReplacementError(error)) throw error;
33
+ if (!canWaitForMemoryReplacement(attempts, deadline)) throw error;
34
+ const delayMs = Math.min(WINDOWS_REPLACEMENT_DELAY_MS, deadline - performance.now());
35
+ await new Promise<void>((resolve) => setTimeout(resolve, Math.max(0, delayMs)));
36
+ // A late timer must not start another attempt beyond the monotonic deadline.
37
+ if (performance.now() >= deadline) throw error;
38
+ }
39
+ }
40
+ }
@@ -1,5 +1,4 @@
1
1
  import { randomUUID } from "node:crypto";
2
- import { constants } from "node:fs";
3
2
  import {
4
3
  lstat,
5
4
  mkdir,
@@ -13,6 +12,9 @@ import {
13
12
  import { dirname, join } from "node:path";
14
13
 
15
14
  import { MemoryStoreError } from "./types.js";
15
+ import { openLockOwnerFile } from "./lock-owner-file.js";
16
+ import { rethrowLockObservationError } from "./lock-path-observation.js";
17
+ import { claimStoreLockDirectory } from "./lock-directory-claim.js";
16
18
 
17
19
  const DEFAULT_WAIT_MS = 10_000;
18
20
  const DEFAULT_RETRY_MS = 10;
@@ -112,9 +114,8 @@ async function readOwnerRecord(
112
114
  ): Promise<DirectoryLockSnapshot> {
113
115
  let handle: FileHandle | undefined;
114
116
  try {
115
- handle = await open(
117
+ handle = await openLockOwnerFile(
116
118
  join(lockPath, LEASE_DIRECTORY_NAME, entryName),
117
- constants.O_RDONLY | constants.O_NOFOLLOW,
118
119
  );
119
120
  const info = await handle.stat({ bigint: true });
120
121
  const modifiedAtMs = Math.max(directoryModifiedAtMs, Number(info.mtimeMs));
@@ -179,7 +180,7 @@ async function readOwnerRecord(
179
180
  });
180
181
  } catch (error) {
181
182
  const code = fileSystemErrorCode(error);
182
- if (code === "ENOENT") {
183
+ if (code === "ENOENT" || code === "EAGAIN") {
183
184
  return Object.freeze({
184
185
  kind: "directory",
185
186
  modifiedAtMs: directoryModifiedAtMs,
@@ -218,7 +219,9 @@ async function readLockSnapshot(
218
219
 
219
220
  let entries;
220
221
  try {
221
- entries = await readdir(lockPath, { withFileTypes: true });
222
+ entries = await readdir(lockPath, { withFileTypes: true }).catch(
223
+ (error) => rethrowLockObservationError(lockPath, error),
224
+ );
222
225
  } catch (error) {
223
226
  const code = fileSystemErrorCode(error);
224
227
  if (code === "ENOENT") return undefined;
@@ -259,7 +262,9 @@ async function readLockSnapshot(
259
262
  reclaimable: false,
260
263
  });
261
264
  }
262
- leaseEntries = await readdir(leasePath, { withFileTypes: true });
265
+ leaseEntries = await readdir(leasePath, { withFileTypes: true }).catch(
266
+ (error) => rethrowLockObservationError(leasePath, error),
267
+ );
263
268
  } catch (error) {
264
269
  const code = fileSystemErrorCode(error);
265
270
  if (code === "ENOENT") {
@@ -417,7 +422,7 @@ async function installLockDirectory(
417
422
  await handle.sync();
418
423
  await handle.close();
419
424
  handle = undefined;
420
- await mkdir(lockPath, { mode: 0o700 });
425
+ await claimStoreLockDirectory(lockPath);
421
426
  claimedLockPath = true;
422
427
  await rename(stagingPath, join(lockPath, LEASE_DIRECTORY_NAME));
423
428
  installed = true;
@@ -1,5 +1,5 @@
1
1
  import { randomUUID } from "node:crypto";
2
- import { access, mkdir, open, rename, rm, writeFile } from "node:fs/promises";
2
+ import { access, mkdir, open, rm, writeFile } from "node:fs/promises";
3
3
  import { dirname } from "node:path";
4
4
 
5
5
  import {
@@ -8,6 +8,7 @@ import {
8
8
  type MemoryStoreState,
9
9
  } from "./types.js";
10
10
  import { acquireStoreLock } from "./store-lock.js";
11
+ import { replacePreparedMemoryFile } from "./prepared-memory-replacement.js";
11
12
 
12
13
  const MAX_STORE_BYTES = 4 * 1024 * 1024;
13
14
  const MAX_STORE_ENTRIES = 2_000;
@@ -133,7 +134,7 @@ async function atomicWrite(
133
134
  encoding: "utf8",
134
135
  mode: 0o600,
135
136
  });
136
- await rename(temporaryPath, filePath);
137
+ await replacePreparedMemoryFile(temporaryPath, filePath);
137
138
  } finally {
138
139
  await rm(temporaryPath, { force: true });
139
140
  }
@@ -311,7 +311,7 @@ function searchMemory(entries, query, maximum) {
311
311
 
312
312
  // plugins/memory/source/store.ts
313
313
  var import_node_crypto2 = require("node:crypto");
314
- var import_promises2 = require("node:fs/promises");
314
+ var import_promises6 = require("node:fs/promises");
315
315
  var import_node_path2 = require("node:path");
316
316
 
317
317
  // plugins/memory/source/types.ts
@@ -329,9 +329,122 @@ function isMemoryStoreError(error) {
329
329
 
330
330
  // plugins/memory/source/store-lock.ts
331
331
  var import_node_crypto = require("node:crypto");
332
+ var import_promises4 = require("node:fs/promises");
333
+ var import_node_path = require("node:path");
334
+
335
+ // plugins/memory/source/lock-owner-file.ts
332
336
  var import_node_fs = require("node:fs");
337
+ var import_promises2 = require("node:fs/promises");
338
+
339
+ // plugins/memory/source/lock-path-observation.ts
333
340
  var import_promises = require("node:fs/promises");
334
- var import_node_path = require("node:path");
341
+ function isWindowsLockObservationDenial(error) {
342
+ if (process.platform !== "win32") return false;
343
+ if (!error || typeof error !== "object" || !("code" in error)) return false;
344
+ return error.code === "EPERM";
345
+ }
346
+ function isMissingLockObservation(error) {
347
+ if (!error || typeof error !== "object" || !("code" in error)) return false;
348
+ return error.code === "ENOENT";
349
+ }
350
+ async function rethrowLockObservationError(path, error) {
351
+ if (!isWindowsLockObservationDenial(error)) throw error;
352
+ try {
353
+ await (0, import_promises.lstat)(path);
354
+ } catch (observationError) {
355
+ if (isMissingLockObservation(observationError)) throw observationError;
356
+ }
357
+ throw error;
358
+ }
359
+
360
+ // plugins/memory/source/lock-owner-file.ts
361
+ function lockOwnerOpenError(code) {
362
+ return Object.assign(new Error("Memory lock owner is not a stable regular file."), {
363
+ code
364
+ });
365
+ }
366
+ function hasSameRegularOwnerIdentity(before, current) {
367
+ if (!current.isFile()) return false;
368
+ if (current.dev !== before.dev) return false;
369
+ return current.ino === before.ino;
370
+ }
371
+ async function openObservedLockOwner(path, flags, before) {
372
+ try {
373
+ return await (0, import_promises2.open)(path, flags);
374
+ } catch (error) {
375
+ if (!isWindowsLockObservationDenial(error)) throw error;
376
+ const named = await (0, import_promises2.lstat)(path, { bigint: true });
377
+ if (!hasSameRegularOwnerIdentity(before, named)) {
378
+ throw lockOwnerOpenError("EAGAIN");
379
+ }
380
+ throw error;
381
+ }
382
+ }
383
+ async function openLockOwnerFile(path) {
384
+ const before = await (0, import_promises2.lstat)(path, { bigint: true });
385
+ if (!before.isFile()) throw lockOwnerOpenError("ELOOP");
386
+ const noFollow = import_node_fs.constants.O_NOFOLLOW;
387
+ const flags = typeof noFollow === "number" ? import_node_fs.constants.O_RDONLY | noFollow : import_node_fs.constants.O_RDONLY;
388
+ const handle = await openObservedLockOwner(path, flags, before);
389
+ try {
390
+ const opened = await handle.stat({ bigint: true });
391
+ const named = await (0, import_promises2.lstat)(path, { bigint: true });
392
+ if (!hasSameRegularOwnerIdentity(before, opened)) {
393
+ throw lockOwnerOpenError("EAGAIN");
394
+ }
395
+ if (!hasSameRegularOwnerIdentity(before, named)) {
396
+ throw lockOwnerOpenError("EAGAIN");
397
+ }
398
+ return handle;
399
+ } catch (error) {
400
+ await handle.close().catch(() => void 0);
401
+ return rethrowLockObservationError(path, error);
402
+ }
403
+ }
404
+
405
+ // plugins/memory/source/lock-directory-claim.ts
406
+ var import_promises3 = require("node:fs/promises");
407
+ function isAbsentLockClaimEntry(error) {
408
+ if (!error || typeof error !== "object" || !("code" in error)) return false;
409
+ return error.code === "ENOENT";
410
+ }
411
+ async function observeLockClaimPath(path) {
412
+ try {
413
+ return { observed: true, entry: await (0, import_promises3.lstat)(path, { bigint: true }) };
414
+ } catch (error) {
415
+ return { observed: isAbsentLockClaimEntry(error) };
416
+ }
417
+ }
418
+ function hasObservedLockNameTransition(before, after) {
419
+ if (!before.observed || !after.observed) return false;
420
+ if (!before.entry) return after.entry !== void 0;
421
+ if (!after.entry) return true;
422
+ if (before.entry.dev !== after.entry.dev) return true;
423
+ if (before.entry.ino !== after.entry.ino) return true;
424
+ if (before.entry.isDirectory() !== after.entry.isDirectory()) return true;
425
+ if (before.entry.isFile() !== after.entry.isFile()) return true;
426
+ return before.entry.isSymbolicLink() !== after.entry.isSymbolicLink();
427
+ }
428
+ async function claimStoreLockDirectory(path) {
429
+ if (process.platform !== "win32") {
430
+ await (0, import_promises3.mkdir)(path, { mode: 448 });
431
+ return;
432
+ }
433
+ const before = await observeLockClaimPath(path);
434
+ try {
435
+ await (0, import_promises3.mkdir)(path, { mode: 448 });
436
+ } catch (error) {
437
+ if (!isWindowsLockObservationDenial(error)) throw error;
438
+ const after = await observeLockClaimPath(path);
439
+ if (!hasObservedLockNameTransition(before, after)) throw error;
440
+ throw Object.assign(new Error("Memory lock name changed during its directory claim."), {
441
+ code: "EEXIST",
442
+ cause: error
443
+ });
444
+ }
445
+ }
446
+
447
+ // plugins/memory/source/store-lock.ts
335
448
  var DEFAULT_WAIT_MS = 1e4;
336
449
  var DEFAULT_RETRY_MS = 10;
337
450
  var MAX_LOCK_BYTES = 1024;
@@ -379,9 +492,8 @@ function parseLockContents(raw, expectedToken) {
379
492
  async function readOwnerRecord(lockPath, entryName, expectedToken, directoryModifiedAtMs) {
380
493
  let handle;
381
494
  try {
382
- handle = await (0, import_promises.open)(
383
- (0, import_node_path.join)(lockPath, LEASE_DIRECTORY_NAME, entryName),
384
- import_node_fs.constants.O_RDONLY | import_node_fs.constants.O_NOFOLLOW
495
+ handle = await openLockOwnerFile(
496
+ (0, import_node_path.join)(lockPath, LEASE_DIRECTORY_NAME, entryName)
385
497
  );
386
498
  const info = await handle.stat({ bigint: true });
387
499
  const modifiedAtMs = Math.max(directoryModifiedAtMs, Number(info.mtimeMs));
@@ -435,7 +547,7 @@ async function readOwnerRecord(lockPath, entryName, expectedToken, directoryModi
435
547
  });
436
548
  } catch (error) {
437
549
  const code = fileSystemErrorCode(error);
438
- if (code === "ENOENT") {
550
+ if (code === "ENOENT" || code === "EAGAIN") {
439
551
  return Object.freeze({
440
552
  kind: "directory",
441
553
  modifiedAtMs: directoryModifiedAtMs,
@@ -460,7 +572,7 @@ async function readOwnerRecord(lockPath, entryName, expectedToken, directoryModi
460
572
  async function readLockSnapshot(lockPath) {
461
573
  let lockInfo;
462
574
  try {
463
- lockInfo = await (0, import_promises.lstat)(lockPath);
575
+ lockInfo = await (0, import_promises4.lstat)(lockPath);
464
576
  } catch (error) {
465
577
  if (fileSystemErrorCode(error) === "ENOENT") return void 0;
466
578
  throw error;
@@ -470,7 +582,9 @@ async function readLockSnapshot(lockPath) {
470
582
  }
471
583
  let entries;
472
584
  try {
473
- entries = await (0, import_promises.readdir)(lockPath, { withFileTypes: true });
585
+ entries = await (0, import_promises4.readdir)(lockPath, { withFileTypes: true }).catch(
586
+ (error) => rethrowLockObservationError(lockPath, error)
587
+ );
474
588
  } catch (error) {
475
589
  const code = fileSystemErrorCode(error);
476
590
  if (code === "ENOENT") return void 0;
@@ -497,7 +611,7 @@ async function readLockSnapshot(lockPath) {
497
611
  let leaseInfo;
498
612
  let leaseEntries;
499
613
  try {
500
- leaseInfo = await (0, import_promises.lstat)(leasePath);
614
+ leaseInfo = await (0, import_promises4.lstat)(leasePath);
501
615
  if (!leaseInfo.isDirectory()) {
502
616
  return Object.freeze({
503
617
  kind: "directory",
@@ -506,7 +620,9 @@ async function readLockSnapshot(lockPath) {
506
620
  reclaimable: false
507
621
  });
508
622
  }
509
- leaseEntries = await (0, import_promises.readdir)(leasePath, { withFileTypes: true });
623
+ leaseEntries = await (0, import_promises4.readdir)(leasePath, { withFileTypes: true }).catch(
624
+ (error) => rethrowLockObservationError(leasePath, error)
625
+ );
510
626
  } catch (error) {
511
627
  const code = fileSystemErrorCode(error);
512
628
  if (code === "ENOENT") {
@@ -550,7 +666,7 @@ async function readLockSnapshot(lockPath) {
550
666
  }
551
667
  async function removeDirectoryIfEmpty(path) {
552
668
  try {
553
- await (0, import_promises.rmdir)(path);
669
+ await (0, import_promises4.rmdir)(path);
554
670
  return true;
555
671
  } catch (error) {
556
672
  const code = fileSystemErrorCode(error);
@@ -569,7 +685,7 @@ async function removeEmptyLockTree(lockPath, hasLeaseDirectory) {
569
685
  }
570
686
  async function removeObservedOwner(lockPath, observedOwnerFileName) {
571
687
  try {
572
- await (0, import_promises.unlink)((0, import_node_path.join)(lockPath, LEASE_DIRECTORY_NAME, observedOwnerFileName));
688
+ await (0, import_promises4.unlink)((0, import_node_path.join)(lockPath, LEASE_DIRECTORY_NAME, observedOwnerFileName));
573
689
  } catch (error) {
574
690
  if (fileSystemErrorCode(error) === "ENOENT") return false;
575
691
  throw error;
@@ -603,12 +719,12 @@ function isLockConflict(error) {
603
719
  }
604
720
  async function removeStagingLock(stagingPath, stagingOwnerPath) {
605
721
  try {
606
- await (0, import_promises.unlink)(stagingOwnerPath);
722
+ await (0, import_promises4.unlink)(stagingOwnerPath);
607
723
  } catch (error) {
608
724
  if (fileSystemErrorCode(error) !== "ENOENT") throw error;
609
725
  }
610
726
  try {
611
- await (0, import_promises.rmdir)(stagingPath);
727
+ await (0, import_promises4.rmdir)(stagingPath);
612
728
  } catch (error) {
613
729
  if (fileSystemErrorCode(error) !== "ENOENT") throw error;
614
730
  }
@@ -620,8 +736,8 @@ async function installLockDirectory(lockPath, token) {
620
736
  let installed = false;
621
737
  let claimedLockPath = false;
622
738
  try {
623
- await (0, import_promises.mkdir)(stagingPath, { mode: 448 });
624
- handle = await (0, import_promises.open)(stagingOwnerPath, "wx", 384);
739
+ await (0, import_promises4.mkdir)(stagingPath, { mode: 448 });
740
+ handle = await (0, import_promises4.open)(stagingOwnerPath, "wx", 384);
625
741
  await handle.writeFile(
626
742
  JSON.stringify({
627
743
  pid: process.pid,
@@ -633,9 +749,9 @@ async function installLockDirectory(lockPath, token) {
633
749
  await handle.sync();
634
750
  await handle.close();
635
751
  handle = void 0;
636
- await (0, import_promises.mkdir)(lockPath, { mode: 448 });
752
+ await claimStoreLockDirectory(lockPath);
637
753
  claimedLockPath = true;
638
- await (0, import_promises.rename)(stagingPath, (0, import_node_path.join)(lockPath, LEASE_DIRECTORY_NAME));
754
+ await (0, import_promises4.rename)(stagingPath, (0, import_node_path.join)(lockPath, LEASE_DIRECTORY_NAME));
639
755
  installed = true;
640
756
  } finally {
641
757
  await handle?.close().catch(() => void 0);
@@ -653,7 +769,7 @@ async function acquireStoreLock(filePath, options = {}) {
653
769
  const retryMs = options.retryMs ?? DEFAULT_RETRY_MS;
654
770
  const processIsAlive = options.processIsAlive ?? defaultProcessIsAlive;
655
771
  const deadline = Date.now() + waitMs;
656
- await (0, import_promises.mkdir)((0, import_node_path.dirname)(filePath), { recursive: true });
772
+ await (0, import_promises4.mkdir)((0, import_node_path.dirname)(filePath), { recursive: true });
657
773
  while (true) {
658
774
  const token = (0, import_node_crypto.randomUUID)();
659
775
  try {
@@ -692,6 +808,39 @@ async function acquireStoreLock(filePath, options = {}) {
692
808
  }
693
809
  }
694
810
 
811
+ // plugins/memory/source/prepared-memory-replacement.ts
812
+ var import_promises5 = require("node:fs/promises");
813
+ var import_node_perf_hooks = require("node:perf_hooks");
814
+ var WINDOWS_REPLACEMENT_WAIT_MS = 1e3;
815
+ var WINDOWS_REPLACEMENT_DELAY_MS = 25;
816
+ var MAX_REPLACEMENT_ATTEMPTS = 41;
817
+ function isRetryableWindowsMemoryReplacementError(error) {
818
+ if (process.platform !== "win32") return false;
819
+ if (error === null || typeof error !== "object") return false;
820
+ return "code" in error && error.code === "EPERM";
821
+ }
822
+ function canWaitForMemoryReplacement(attempts, deadline) {
823
+ if (attempts >= MAX_REPLACEMENT_ATTEMPTS) return false;
824
+ return import_node_perf_hooks.performance.now() < deadline;
825
+ }
826
+ async function replacePreparedMemoryFile(temporary, target) {
827
+ const deadline = import_node_perf_hooks.performance.now() + WINDOWS_REPLACEMENT_WAIT_MS;
828
+ let attempts = 0;
829
+ for (; ; ) {
830
+ attempts += 1;
831
+ try {
832
+ await (0, import_promises5.rename)(temporary, target);
833
+ return;
834
+ } catch (error) {
835
+ if (!isRetryableWindowsMemoryReplacementError(error)) throw error;
836
+ if (!canWaitForMemoryReplacement(attempts, deadline)) throw error;
837
+ const delayMs = Math.min(WINDOWS_REPLACEMENT_DELAY_MS, deadline - import_node_perf_hooks.performance.now());
838
+ await new Promise((resolve) => setTimeout(resolve, Math.max(0, delayMs)));
839
+ if (import_node_perf_hooks.performance.now() >= deadline) throw error;
840
+ }
841
+ }
842
+ }
843
+
695
844
  // plugins/memory/source/store.ts
696
845
  var MAX_STORE_BYTES = 4 * 1024 * 1024;
697
846
  var MAX_STORE_ENTRIES = 2e3;
@@ -792,13 +941,13 @@ async function atomicWrite(filePath, state) {
792
941
  );
793
942
  }
794
943
  try {
795
- await (0, import_promises2.writeFile)(temporaryPath, serialized, {
944
+ await (0, import_promises6.writeFile)(temporaryPath, serialized, {
796
945
  encoding: "utf8",
797
946
  mode: 384
798
947
  });
799
- await (0, import_promises2.rename)(temporaryPath, filePath);
948
+ await replacePreparedMemoryFile(temporaryPath, filePath);
800
949
  } finally {
801
- await (0, import_promises2.rm)(temporaryPath, { force: true });
950
+ await (0, import_promises6.rm)(temporaryPath, { force: true });
802
951
  }
803
952
  }
804
953
  function nextSequenceAfter(entries) {
@@ -818,7 +967,7 @@ function fileSystemErrorCode2(error) {
818
967
  return error && typeof error === "object" && "code" in error ? String(error.code) : void 0;
819
968
  }
820
969
  async function readStoreFile(filePath) {
821
- const handle = await (0, import_promises2.open)(filePath, "r");
970
+ const handle = await (0, import_promises6.open)(filePath, "r");
822
971
  try {
823
972
  const info = await handle.stat();
824
973
  if (!info.isFile()) {
@@ -869,9 +1018,9 @@ var MemoryStore = class {
869
1018
  return initialization;
870
1019
  }
871
1020
  async #initialize() {
872
- await (0, import_promises2.mkdir)((0, import_node_path2.dirname)(this.#filePath), { recursive: true });
1021
+ await (0, import_promises6.mkdir)((0, import_node_path2.dirname)(this.#filePath), { recursive: true });
873
1022
  try {
874
- await (0, import_promises2.access)(this.#filePath);
1023
+ await (0, import_promises6.access)(this.#filePath);
875
1024
  return;
876
1025
  } catch (error) {
877
1026
  if (fileSystemErrorCode2(error) !== "ENOENT") {
@@ -0,0 +1,23 @@
1
+ # Project Orientation
2
+
3
+ Inspects a bounded directory tree and project manifest metadata on Linux, macOS
4
+ and native Windows. Relative paths use the configured agent work directory;
5
+ `workspace/...` selects configured workspace sources. Absolute paths retain
6
+ the same authorization boundary, including request-specific restrictions.
7
+
8
+ Package metadata uses the SDK's bounded reader (256 KiB maximum). Other known
9
+ manifest names are detected without reading their contents. Inspection never
10
+ executes package scripts or changes project files. Existing depth, entry,
11
+ script-name and output limits apply on every platform.
12
+
13
+ ## Windows requirements
14
+
15
+ Built-in Windows PowerShell and its C# helper provide safe package-manifest
16
+ reading. No Companion, WSL, Docker, elevation or policy bypass is needed.
17
+ If the helper is blocked, `project_safe_read_unavailable` tells the model not
18
+ to retry or bypass the restriction. Cancellation stops the manifest read and
19
+ directory traversal.
20
+
21
+ A project without `package.json` can still be inspected without starting
22
+ the file-reading helper. Junctions or traversal outside the configured roots
23
+ are rejected by the same Runtime path resolver.
@@ -4,6 +4,7 @@
4
4
  "version": "0.3.1",
5
5
  "description": "Inspect a bounded project tree and its manifest metadata.",
6
6
  "extensions": {
7
+ "ai.abot.compatibility": { "version": 1, "runtimePlatforms": ["linux", "darwin", "win32"] },
7
8
  "ai.abot.runtime": {
8
9
  "version": 1,
9
10
  "entrypoint": "./src/index.cjs",