@nomix-ai/nomix-harness 0.2.0 → 0.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (255) hide show
  1. package/README.md +4 -4
  2. package/dist/bundles/base/cordis.patch.yml +74 -74
  3. package/dist/bundles/headless/cordis.patch.yml +3 -3
  4. package/dist/bundles/web-app/cordis.patch.yml +51 -51
  5. package/dist/cli/plugins.js +1 -1
  6. package/dist/kernel/acp/package.json +1 -1
  7. package/dist/kernel/agent/package.json +1 -1
  8. package/dist/kernel/agent-default-model/package.json +1 -1
  9. package/dist/kernel/agent-instructions/package.json +1 -1
  10. package/dist/kernel/agent-loop/package.json +1 -1
  11. package/dist/kernel/agent-presets/package.json +1 -1
  12. package/dist/kernel/agent-tool-presentation/package.json +1 -1
  13. package/dist/kernel/anonymous-user-id/package.json +1 -1
  14. package/dist/kernel/api-gateway/package.json +1 -1
  15. package/dist/kernel/api-remotes/package.json +1 -1
  16. package/dist/kernel/app-boot/lib/index.js +30 -16
  17. package/dist/kernel/app-boot/lib/types/profile.d.ts +12 -15
  18. package/dist/kernel/app-boot/lib/types/profile.js +40 -16
  19. package/dist/kernel/app-boot/package.json +1 -1
  20. package/dist/kernel/atomic-write/package.json +1 -1
  21. package/dist/kernel/attachment/package.json +1 -1
  22. package/dist/kernel/attachment-local/package.json +1 -1
  23. package/dist/kernel/base/package.json +1 -1
  24. package/dist/kernel/bash-local/package.json +1 -1
  25. package/dist/kernel/bash-sandbox/package.json +1 -1
  26. package/dist/kernel/brand/package.json +1 -1
  27. package/dist/kernel/client-connection/package.json +1 -1
  28. package/dist/kernel/client-hmr/package.json +1 -1
  29. package/dist/kernel/client-locale/lib/client.js +5 -5
  30. package/dist/kernel/client-locale/package.json +1 -1
  31. package/dist/kernel/client-modules/package.json +1 -1
  32. package/dist/kernel/client-runtime/lib/client.js +1 -1
  33. package/dist/kernel/client-runtime/package.json +1 -1
  34. package/dist/kernel/client-schema-form/package.json +1 -1
  35. package/dist/kernel/client-ui-agent-preset/lib/client.js +41 -41
  36. package/dist/kernel/client-ui-agent-preset/package.json +1 -1
  37. package/dist/kernel/client-ui-attachment/package.json +1 -1
  38. package/dist/kernel/client-ui-commands/lib/client.js +10 -10
  39. package/dist/kernel/client-ui-commands/package.json +1 -1
  40. package/dist/kernel/client-ui-conversation/lib/client.js +168 -168
  41. package/dist/kernel/client-ui-conversation/package.json +1 -1
  42. package/dist/kernel/client-ui-cordis/lib/client.js +49 -49
  43. package/dist/kernel/client-ui-cordis/package.json +1 -1
  44. package/dist/kernel/client-ui-deliverables/lib/client.js +6 -6
  45. package/dist/kernel/client-ui-deliverables/package.json +1 -1
  46. package/dist/kernel/client-ui-directory-picker-browse/lib/client.js +30 -30
  47. package/dist/kernel/client-ui-directory-picker-browse/package.json +1 -1
  48. package/dist/kernel/client-ui-directory-picker-native/package.json +1 -1
  49. package/dist/kernel/client-ui-goal/lib/client.js +9 -9
  50. package/dist/kernel/client-ui-goal/package.json +1 -1
  51. package/dist/kernel/client-ui-input-trigger/lib/client.js +7 -7
  52. package/dist/kernel/client-ui-input-trigger/package.json +1 -1
  53. package/dist/kernel/client-ui-jobs/lib/client.js +10 -10
  54. package/dist/kernel/client-ui-jobs/package.json +1 -1
  55. package/dist/kernel/client-ui-layout/lib/client.js +5 -5
  56. package/dist/kernel/client-ui-layout/package.json +1 -1
  57. package/dist/kernel/client-ui-message-feedback/lib/client.js +4 -4
  58. package/dist/kernel/client-ui-message-feedback/package.json +1 -1
  59. package/dist/kernel/client-ui-model-selection/lib/client.js +19 -19
  60. package/dist/kernel/client-ui-model-selection/package.json +1 -1
  61. package/dist/kernel/client-ui-permission-presets/lib/client.js +7 -7
  62. package/dist/kernel/client-ui-permission-presets/package.json +1 -1
  63. package/dist/kernel/client-ui-plan/lib/client.js +4 -4
  64. package/dist/kernel/client-ui-plan/package.json +1 -1
  65. package/dist/kernel/client-ui-primitives/package.json +1 -1
  66. package/dist/kernel/client-ui-settings/lib/client.js +2 -2
  67. package/dist/kernel/client-ui-settings/package.json +1 -1
  68. package/dist/kernel/client-ui-settings-general/lib/client.js +17 -17
  69. package/dist/kernel/client-ui-settings-general/package.json +1 -1
  70. package/dist/kernel/client-ui-settings-models/lib/client.js +53 -53
  71. package/dist/kernel/client-ui-settings-models/package.json +1 -1
  72. package/dist/kernel/client-ui-settings-plugin-inventory/lib/client.js +12 -12
  73. package/dist/kernel/client-ui-settings-plugin-inventory/package.json +1 -1
  74. package/dist/kernel/client-ui-settings-plugins/lib/client.js +22 -22
  75. package/dist/kernel/client-ui-settings-plugins/package.json +1 -1
  76. package/dist/kernel/client-ui-sidebar/lib/client.js +17 -17
  77. package/dist/kernel/client-ui-sidebar/package.json +1 -1
  78. package/dist/kernel/client-ui-skill/lib/client.js +12 -12
  79. package/dist/kernel/client-ui-skill/package.json +1 -1
  80. package/dist/kernel/client-ui-slots/package.json +1 -1
  81. package/dist/kernel/client-ui-subagent/lib/client.js +20 -20
  82. package/dist/kernel/client-ui-subagent/package.json +1 -1
  83. package/dist/kernel/client-ui-theme/lib/client.js +5 -5
  84. package/dist/kernel/client-ui-theme/package.json +1 -1
  85. package/dist/kernel/client-ui-tool/lib/client.js +39 -39
  86. package/dist/kernel/client-ui-tool/package.json +1 -1
  87. package/dist/kernel/client-ui-trajectory/lib/client.js +146 -146
  88. package/dist/kernel/client-ui-trajectory/package.json +1 -1
  89. package/dist/kernel/client-ui-user-questions/lib/client.js +29 -29
  90. package/dist/kernel/client-ui-user-questions/package.json +1 -1
  91. package/dist/kernel/client-ui-workflow-run/lib/client.js +18 -18
  92. package/dist/kernel/client-ui-workflow-run/package.json +1 -1
  93. package/dist/kernel/client-ui-workspace/lib/client.js +56 -56
  94. package/dist/kernel/client-ui-workspace/package.json +1 -1
  95. package/dist/kernel/client-web/package.json +1 -1
  96. package/dist/kernel/client-web-react/package.json +1 -1
  97. package/dist/kernel/cmdline/package.json +1 -1
  98. package/dist/kernel/code-runtime/package.json +1 -1
  99. package/dist/kernel/code-runtime-worker-thread/package.json +1 -1
  100. package/dist/kernel/command-compact/package.json +1 -1
  101. package/dist/kernel/command-feedback/package.json +1 -1
  102. package/dist/kernel/command-goal/package.json +1 -1
  103. package/dist/kernel/commands/package.json +1 -1
  104. package/dist/kernel/compaction/package.json +1 -1
  105. package/dist/kernel/compaction-basic/package.json +1 -1
  106. package/dist/kernel/compaction-tool-result-pruner/package.json +1 -1
  107. package/dist/kernel/cordis-client-runner/package.json +1 -1
  108. package/dist/kernel/cordis-host-runner/package.json +1 -1
  109. package/dist/kernel/credentials/package.json +1 -1
  110. package/dist/kernel/credentials-local/package.json +1 -1
  111. package/dist/kernel/e2b/package.json +1 -1
  112. package/dist/kernel/fs/package.json +1 -1
  113. package/dist/kernel/fs-e2b/package.json +1 -1
  114. package/dist/kernel/fs-local/package.json +1 -1
  115. package/dist/kernel/fs-observation-policy/package.json +1 -1
  116. package/dist/kernel/fs-sandbox/package.json +1 -1
  117. package/dist/kernel/goal/package.json +1 -1
  118. package/dist/kernel/goal-round-driver/package.json +1 -1
  119. package/dist/kernel/headless/package.json +1 -1
  120. package/dist/kernel/home-paths/package.json +1 -1
  121. package/dist/kernel/hook-protocol/package.json +1 -1
  122. package/dist/kernel/hooks-claude-code/package.json +1 -1
  123. package/dist/kernel/hooks-codex/package.json +1 -1
  124. package/dist/kernel/host-apiproxy/package.json +1 -1
  125. package/dist/kernel/host-directory-picker/package.json +1 -1
  126. package/dist/kernel/host-directory-picker-auto/package.json +1 -1
  127. package/dist/kernel/host-directory-picker-browse/package.json +1 -1
  128. package/dist/kernel/host-directory-picker-native/package.json +1 -1
  129. package/dist/kernel/host-frontend-static/package.json +1 -1
  130. package/dist/kernel/host-plugin-inventory/package.json +1 -1
  131. package/dist/kernel/host-webserver/package.json +1 -1
  132. package/dist/kernel/invariants/package.json +1 -1
  133. package/dist/kernel/jobs/package.json +1 -1
  134. package/dist/kernel/jobs-local/package.json +1 -1
  135. package/dist/kernel/launch-environment/package.json +1 -1
  136. package/dist/kernel/llm/package.json +1 -1
  137. package/dist/kernel/llm-deepseek/package.json +1 -1
  138. package/dist/kernel/llm-pi-ai/package.json +1 -1
  139. package/dist/kernel/llm-retry/package.json +1 -1
  140. package/dist/kernel/lsp/package.json +1 -1
  141. package/dist/kernel/lsp-stdio/package.json +1 -1
  142. package/dist/kernel/manifest.json +213 -0
  143. package/dist/kernel/mcp-client/package.json +1 -1
  144. package/dist/kernel/message-feedback/package.json +1 -1
  145. package/dist/kernel/native-command/package.json +1 -1
  146. package/dist/kernel/output-retention/package.json +1 -1
  147. package/dist/kernel/permission-presets/package.json +1 -1
  148. package/dist/kernel/persona/package.json +1 -1
  149. package/dist/kernel/plan-mode/package.json +1 -1
  150. package/dist/kernel/pwsh-local/package.json +1 -1
  151. package/dist/kernel/pwsh-sandbox/package.json +1 -1
  152. package/dist/kernel/repeat-tool-reminder/package.json +1 -1
  153. package/dist/kernel/sandbox/package.json +1 -1
  154. package/dist/kernel/sandbox-local/package.json +1 -1
  155. package/dist/kernel/sandbox-policy/package.json +1 -1
  156. package/dist/kernel/sandbox-windows-acl/package.json +1 -1
  157. package/dist/kernel/schedule/package.json +1 -1
  158. package/dist/kernel/scope/package.json +1 -1
  159. package/dist/kernel/sdk-client/package.json +1 -1
  160. package/dist/kernel/sdk-jsonrpc-server/package.json +1 -1
  161. package/dist/kernel/sdk-protocol/package.json +1 -1
  162. package/dist/kernel/session/package.json +1 -1
  163. package/dist/kernel/session-checkpoint-policy/package.json +1 -1
  164. package/dist/kernel/session-log-export/lib/client.js +2 -2
  165. package/dist/kernel/session-log-export/package.json +1 -1
  166. package/dist/kernel/session-persistence/package.json +1 -1
  167. package/dist/kernel/session-persistence-jsonl/package.json +1 -1
  168. package/dist/kernel/session-persistence-sqlite/package.json +1 -1
  169. package/dist/kernel/session-projection/package.json +1 -1
  170. package/dist/kernel/session-projection-cache/package.json +1 -1
  171. package/dist/kernel/session-query/package.json +1 -1
  172. package/dist/kernel/session-query-sqlite/package.json +1 -1
  173. package/dist/kernel/session-reference/package.json +1 -1
  174. package/dist/kernel/session-stats/package.json +1 -1
  175. package/dist/kernel/session-telemetry/package.json +1 -1
  176. package/dist/kernel/session-telemetry-otel/package.json +1 -1
  177. package/dist/kernel/session-title/package.json +1 -1
  178. package/dist/kernel/session-title-all-prompts-llm/package.json +1 -1
  179. package/dist/kernel/session-title-first-prompt-llm/package.json +1 -1
  180. package/dist/kernel/session-title-llm/package.json +1 -1
  181. package/dist/kernel/settings/package.json +1 -1
  182. package/dist/kernel/settings-file/package.json +1 -1
  183. package/dist/kernel/shell/package.json +1 -1
  184. package/dist/kernel/shell-env/package.json +1 -1
  185. package/dist/kernel/skill/package.json +1 -1
  186. package/dist/kernel/skill-badge/package.json +1 -1
  187. package/dist/kernel/skill-filesystem/package.json +1 -1
  188. package/dist/kernel/spill/package.json +1 -1
  189. package/dist/kernel/spill-local/package.json +1 -1
  190. package/dist/kernel/spill-policy/package.json +1 -1
  191. package/dist/kernel/storage/package.json +1 -1
  192. package/dist/kernel/storage-domain/package.json +1 -1
  193. package/dist/kernel/storage-json/package.json +1 -1
  194. package/dist/kernel/storage-sqlite/package.json +1 -1
  195. package/dist/kernel/subagent/package.json +1 -1
  196. package/dist/kernel/subagent-acp/package.json +1 -1
  197. package/dist/kernel/subagent-claude-code/package.json +1 -1
  198. package/dist/kernel/subagent-codex/package.json +1 -1
  199. package/dist/kernel/subagent-fork-in-process/package.json +1 -1
  200. package/dist/kernel/subagent-in-process-driver/package.json +1 -1
  201. package/dist/kernel/subagent-nomix-sdk/package.json +1 -1
  202. package/dist/kernel/subagent-spawn-in-process/package.json +1 -1
  203. package/dist/kernel/subprocess/package.json +1 -1
  204. package/dist/kernel/subprocess-e2b/package.json +1 -1
  205. package/dist/kernel/subprocess-local/package.json +1 -1
  206. package/dist/kernel/system-prompt/package.json +1 -1
  207. package/dist/kernel/terminal/package.json +1 -1
  208. package/dist/kernel/terminal-bash/package.json +1 -1
  209. package/dist/kernel/time-context/package.json +1 -1
  210. package/dist/kernel/timeout/package.json +1 -1
  211. package/dist/kernel/tmux-context/package.json +1 -1
  212. package/dist/kernel/token-meter/package.json +1 -1
  213. package/dist/kernel/tool-ask-user/package.json +1 -1
  214. package/dist/kernel/tool-bash/package.json +1 -1
  215. package/dist/kernel/tool-bash-persistent/package.json +1 -1
  216. package/dist/kernel/tool-call-timeout-policy/package.json +1 -1
  217. package/dist/kernel/tool-cordis/package.json +1 -1
  218. package/dist/kernel/tool-fs/package.json +1 -1
  219. package/dist/kernel/tool-fs-search/package.json +1 -1
  220. package/dist/kernel/tool-goal/package.json +1 -1
  221. package/dist/kernel/tool-jobs/package.json +1 -1
  222. package/dist/kernel/tool-lsp/package.json +1 -1
  223. package/dist/kernel/tool-pwsh/package.json +1 -1
  224. package/dist/kernel/tool-ralph/package.json +1 -1
  225. package/dist/kernel/tool-session-query/package.json +1 -1
  226. package/dist/kernel/tool-skill/package.json +1 -1
  227. package/dist/kernel/tool-str-replace-editor/package.json +1 -1
  228. package/dist/kernel/tool-subagent/package.json +1 -1
  229. package/dist/kernel/tool-subagent-control/package.json +1 -1
  230. package/dist/kernel/tool-subagent-report/package.json +1 -1
  231. package/dist/kernel/tool-terminal/package.json +1 -1
  232. package/dist/kernel/tool-todo/package.json +1 -1
  233. package/dist/kernel/tool-web/package.json +1 -1
  234. package/dist/kernel/tool-workflow/package.json +1 -1
  235. package/dist/kernel/tools/package.json +1 -1
  236. package/dist/kernel/typert-generator/package.json +1 -1
  237. package/dist/kernel/typert-loader/package.json +1 -1
  238. package/dist/kernel/typert-protocol/package.json +1 -1
  239. package/dist/kernel/typert-registry/package.json +1 -1
  240. package/dist/kernel/user-approval/package.json +1 -1
  241. package/dist/kernel/user-questions/package.json +1 -1
  242. package/dist/kernel/web/package.json +1 -1
  243. package/dist/kernel/web-app/lib/index.js +4 -1
  244. package/dist/kernel/web-app/lib/types/index.js +5 -1
  245. package/dist/kernel/web-app/package.json +1 -1
  246. package/dist/kernel/web-fetch-http/package.json +1 -1
  247. package/dist/kernel/web-frontend/package.json +1 -1
  248. package/dist/kernel/web-search-deepseek/package.json +1 -1
  249. package/dist/kernel/web-search-exa/package.json +1 -1
  250. package/dist/kernel/web-search-perplexity/package.json +1 -1
  251. package/dist/kernel/workflow/package.json +1 -1
  252. package/dist/kernel/workflow-worker-thread/package.json +1 -1
  253. package/dist/kernel/workspace/package.json +1 -1
  254. package/dist/plugins/index.js +1 -1
  255. package/package.json +1 -1
@@ -46,35 +46,35 @@
46
46
  # window.__NOMIX_BOOT__; the modules row is simultaneously a host row.
47
47
  - insert:
48
48
  - id: code-runtime
49
- name: 'cordis:nomix/code-runtime-worker-thread'
49
+ name: '@nomix-ai/nomix-code-runtime-worker-thread'
50
50
 
51
51
  - id: storage
52
- name: 'cordis:nomix/storage'
52
+ name: '@nomix-ai/nomix-storage'
53
53
 
54
54
  - id: storage-json
55
- name: 'cordis:nomix/storage-json'
55
+ name: '@nomix-ai/nomix-storage-json'
56
56
  config:
57
57
  root: !!js nomixHomePath('storages')
58
58
 
59
59
  - id: storage-domain
60
- name: 'cordis:nomix/storage-domain'
60
+ name: '@nomix-ai/nomix-storage-domain'
61
61
  config:
62
62
  backend: json
63
63
 
64
64
  - id: message-feedback
65
- name: 'cordis:nomix/message-feedback'
65
+ name: '@nomix-ai/nomix-message-feedback'
66
66
  config:
67
67
  maxNoteBytes: 8192
68
68
 
69
69
  # Browser Session export: `/export` command plus the shared download dialog.
70
70
  - id: session-log-download
71
- name: 'cordis:nomix/session-log-export'
71
+ name: '@nomix-ai/nomix-session-log-export'
72
72
 
73
73
  - id: workspace
74
- name: 'cordis:nomix/workspace'
74
+ name: '@nomix-ai/nomix-workspace'
75
75
 
76
76
  - id: session-projection-cache
77
- name: 'cordis:nomix/session-projection-cache'
77
+ name: '@nomix-ai/nomix-session-projection-cache'
78
78
  config:
79
79
  writeEveryEvents: 200
80
80
  writeIntervalMs: 5000
@@ -82,30 +82,30 @@
82
82
  # Whole-log turn/step counts for the chat stats strip (the sessionStats
83
83
  # projection key); the projection registry itself is a base-layer row.
84
84
  - id: session-stats
85
- name: 'cordis:nomix/session-stats'
85
+ name: '@nomix-ai/nomix-session-stats'
86
86
 
87
87
  # Resolve bind host, SSH launch, and display once at boot, then mount the
88
88
  # matching dual-face directory picker. Mount -native or -browse directly in
89
89
  # an overlay to pin the interaction.
90
90
  - id: directory-picker
91
- name: 'cordis:nomix/host-directory-picker-auto'
91
+ name: '@nomix-ai/nomix-host-directory-picker-auto'
92
92
 
93
93
  # Read-only projection of current Loader entries for trusted client RPCs.
94
94
  - id: plugin-inventory
95
- name: 'cordis:nomix/host-plugin-inventory'
95
+ name: '@nomix-ai/nomix-host-plugin-inventory'
96
96
 
97
97
  # The API gateway: the transport-agnostic dispatch face every client shape
98
98
  # shares. The base layer's agent-default-model service owns the default model.
99
99
  - id: api-gateway
100
- name: 'cordis:nomix/host-apiproxy'
100
+ name: '@nomix-ai/nomix-host-apiproxy'
101
101
 
102
102
  - id: cordis-host-runner
103
- name: 'cordis:nomix/cordis-host-runner'
103
+ name: '@nomix-ai/nomix-cordis-host-runner'
104
104
 
105
105
  # Ordinary provider for the parsed Web flags. Its plugin-level injection
106
106
  # waits for cmdlineArgs; no launcher metadata or special row kind is needed.
107
107
  - id: web-startup
108
- name: 'cordis:nomix/web-app/startup'
108
+ name: '@nomix-ai/nomix-web-app/startup'
109
109
 
110
110
  # ── layer 2: transport/service ──────────────────────────────────────────────
111
111
 
@@ -113,7 +113,7 @@
113
113
  # webStartup provider, with these deployment fallbacks. The dist is served by
114
114
  # the web-runtime row below through the fallback seat.
115
115
  - id: webserver
116
- name: 'cordis:nomix/host-webserver'
116
+ name: '@nomix-ai/nomix-host-webserver'
117
117
  inject: [webStartup]
118
118
  config:
119
119
  host: !!js ctx.webStartup.host ?? '127.0.0.1'
@@ -128,7 +128,7 @@
128
128
  # complete agent-preset persona suppresses the prompt section for that
129
129
  # agent while retaining the host-owned shell variable.
130
130
  - id: web-runtime
131
- name: 'cordis:nomix/web-app'
131
+ name: '@nomix-ai/nomix-web-app'
132
132
  inject: [webStartup]
133
133
  config:
134
134
  printUrl: true
@@ -140,7 +140,7 @@
140
140
  # is a row rather than a child of web-runtime because its node half is a
141
141
  # client-side package, which a host-side bundle cannot import.
142
142
  - id: client-hmr
143
- name: 'cordis:nomix/client-hmr'
143
+ name: '@nomix-ai/nomix-client-hmr'
144
144
 
145
145
  # ── browser plugin roster (nomix.client rows; node halves are layer-2 hosts) ──
146
146
 
@@ -149,12 +149,12 @@
149
149
  # the shell kernel constructs before cordis exists (adopted as a plugin
150
150
  # entry by the kernel, never fetched).
151
151
  - id: modules
152
- name: 'cordis:nomix/client-modules'
152
+ name: '@nomix-ai/nomix-client-modules'
153
153
 
154
154
  # Owns both ends of the web transport: node half binds the gateway to the
155
155
  # webserver under /api; browser half is the fetch/SSE client.
156
156
  - id: connection
157
- name: 'cordis:nomix/client-connection'
157
+ name: '@nomix-ai/nomix-client-connection'
158
158
  inject: [webRuntime]
159
159
  config:
160
160
  # LAN literals derived from the active bind plus --trusted-host extras.
@@ -163,115 +163,115 @@
163
163
  trustedHosts: !!js ctx.webRuntime.trustedHosts
164
164
 
165
165
  - id: api-remotes
166
- name: 'cordis:nomix/api-remotes'
166
+ name: '@nomix-ai/nomix-api-remotes'
167
167
 
168
168
  - id: client-runtime
169
- name: 'cordis:nomix/client-runtime'
169
+ name: '@nomix-ai/nomix-client-runtime'
170
170
 
171
171
  - id: cordis-client-runner
172
- name: 'cordis:nomix/cordis-client-runner'
172
+ name: '@nomix-ai/nomix-cordis-client-runner'
173
173
 
174
174
  - id: ui-theme
175
- name: 'cordis:nomix/client-ui-theme'
175
+ name: '@nomix-ai/nomix-client-ui-theme'
176
176
 
177
177
  - id: locale
178
- name: 'cordis:nomix/client-locale'
178
+ name: '@nomix-ai/nomix-client-locale'
179
179
 
180
180
  - id: ui-layout
181
- name: 'cordis:nomix/client-ui-layout'
181
+ name: '@nomix-ai/nomix-client-ui-layout'
182
182
 
183
183
  - id: ui-sidebar
184
- name: 'cordis:nomix/client-ui-sidebar'
184
+ name: '@nomix-ai/nomix-client-ui-sidebar'
185
185
 
186
186
  - id: ui-settings
187
- name: 'cordis:nomix/client-ui-settings'
187
+ name: '@nomix-ai/nomix-client-ui-settings'
188
188
 
189
189
  - id: ui-settings-general
190
- name: 'cordis:nomix/client-ui-settings-general'
190
+ name: '@nomix-ai/nomix-client-ui-settings-general'
191
191
 
192
192
  - id: ui-settings-models
193
- name: 'cordis:nomix/client-ui-settings-models'
193
+ name: '@nomix-ai/nomix-client-ui-settings-models'
194
194
 
195
195
  - id: ui-settings-plugin-inventory
196
- name: 'cordis:nomix/client-ui-settings-plugin-inventory'
196
+ name: '@nomix-ai/nomix-client-ui-settings-plugin-inventory'
197
197
 
198
198
  - id: ui-conversation
199
- name: 'cordis:nomix/client-ui-conversation'
199
+ name: '@nomix-ai/nomix-client-ui-conversation'
200
200
 
201
201
  # Tool call tree, generic fallback, and keyed business Tool views.
202
202
  - id: ui-tool
203
- name: 'cordis:nomix/client-ui-tool'
203
+ name: '@nomix-ai/nomix-client-ui-tool'
204
204
 
205
205
  - id: ui-cordis
206
- name: 'cordis:nomix/client-ui-cordis'
206
+ name: '@nomix-ai/nomix-client-ui-cordis'
207
207
 
208
208
  # Durable workflow lifecycle as an independent Chat node after the
209
209
  # existing generic workflow tool row.
210
210
  - id: ui-workflow-run
211
- name: 'cordis:nomix/client-ui-workflow-run'
211
+ name: '@nomix-ai/nomix-client-ui-workflow-run'
212
212
 
213
213
  # Turn tail: the produced-files row under each closing assistant message.
214
214
  # Remove this entry to turn the surface off; the tail hole renders empty.
215
215
  - id: ui-deliverables
216
- name: 'cordis:nomix/client-ui-deliverables'
216
+ name: '@nomix-ai/nomix-client-ui-deliverables'
217
217
 
218
218
 
219
219
  - id: ui-workspace
220
- name: 'cordis:nomix/client-ui-workspace'
220
+ name: '@nomix-ai/nomix-client-ui-workspace'
221
221
 
222
222
  # Input triggers: the '/' | '@' pipeline (ui-input-trigger), the command surface over
223
223
  # it (ui-commands), and the two reference sources (ui-skill / ui-subagent).
224
224
  - id: ui-input-trigger
225
- name: 'cordis:nomix/client-ui-input-trigger'
225
+ name: '@nomix-ai/nomix-client-ui-input-trigger'
226
226
 
227
227
  - id: ui-commands
228
- name: 'cordis:nomix/client-ui-commands'
228
+ name: '@nomix-ai/nomix-client-ui-commands'
229
229
 
230
230
  - id: ui-skill
231
- name: 'cordis:nomix/client-ui-skill'
231
+ name: '@nomix-ai/nomix-client-ui-skill'
232
232
 
233
233
  - id: ui-subagent
234
- name: 'cordis:nomix/client-ui-subagent'
234
+ name: '@nomix-ai/nomix-client-ui-subagent'
235
235
 
236
236
  # Background jobs: the session-header list over the jobsBySession mirror.
237
237
  - id: ui-jobs
238
- name: 'cordis:nomix/client-ui-jobs'
238
+ name: '@nomix-ai/nomix-client-ui-jobs'
239
239
 
240
240
  # Goal surface: GoalBar in the input dock over the goal session projection.
241
241
  - id: ui-goal
242
- name: 'cordis:nomix/client-ui-goal'
242
+ name: '@nomix-ai/nomix-client-ui-goal'
243
243
 
244
244
  # Per-message feedback: Like/Dislike plus an optional note in the
245
245
  # assistant-message action strip, over the messageFeedback Remote.
246
246
  - id: ui-message-feedback
247
- name: 'cordis:nomix/client-ui-message-feedback'
247
+ name: '@nomix-ai/nomix-client-ui-message-feedback'
248
248
 
249
249
  # Model selection: the /model popupSelect + composer seat over session.models.
250
250
  - id: ui-model-selection
251
- name: 'cordis:nomix/client-ui-model-selection'
251
+ name: '@nomix-ai/nomix-client-ui-model-selection'
252
252
 
253
253
  - id: ui-permission
254
- name: 'cordis:nomix/client-ui-permission-presets'
254
+ name: '@nomix-ai/nomix-client-ui-permission-presets'
255
255
 
256
256
  # The agent-preset row in General settings: the default preset for
257
257
  # sessions created later. Absent a roster it renders nothing.
258
258
  - id: ui-agent-preset
259
- name: 'cordis:nomix/client-ui-agent-preset'
259
+ name: '@nomix-ai/nomix-client-ui-agent-preset'
260
260
 
261
261
  # Plugin configuration: the host-plane sections a user owns, as expandable
262
262
  # cards. A namespace this deployment does not expose renders nothing.
263
263
  - id: ui-settings-plugins
264
- name: 'cordis:nomix/client-ui-settings-plugins'
264
+ name: '@nomix-ai/nomix-client-ui-settings-plugins'
265
265
 
266
266
  # Plan control: the composer plan seat over the plan projection + /plan channel.
267
267
  - id: ui-plan
268
- name: 'cordis:nomix/client-ui-plan'
268
+ name: '@nomix-ai/nomix-client-ui-plan'
269
269
 
270
270
  - id: ui-user-questions
271
- name: 'cordis:nomix/client-ui-user-questions'
271
+ name: '@nomix-ai/nomix-client-ui-user-questions'
272
272
 
273
273
  - id: ui-trajectory
274
- name: 'cordis:nomix/client-ui-trajectory'
274
+ name: '@nomix-ai/nomix-client-ui-trajectory'
275
275
 
276
276
  # ── the agent plane moves behind agent presets ─────────────────────────────
277
277
  #
@@ -419,6 +419,6 @@
419
419
  # never reaches that patch still finds a person's presets.
420
420
  - insert:
421
421
  - id: agent-presets
422
- name: 'cordis:nomix/agent-presets'
422
+ name: '@nomix-ai/nomix-agent-presets'
423
423
  config:
424
424
  default: standard
@@ -3,7 +3,7 @@ import { definePlugin } from "./public-plugin.js";
3
3
  /** Side-effect-free catalog of plugins compiled into the Nomix npm package. */
4
4
  /** Create a descriptor for any built-in plugin id listed in the packaged manifest. */
5
5
  function builtin(id) {
6
- return definePlugin(id, `cordis:nomix/${id}`);
6
+ return definePlugin(id, `@nomix-ai/nomix-${id}`);
7
7
  }
8
8
  /** Frequently used built-ins with stable, typed discovery paths. */
9
9
  const builtins = {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@nomix-ai/nomix-acp",
3
3
  "description": "Automation-only Agent Client Protocol server for driving Nomix Harness agents over JSON-RPC stdio",
4
- "version": "0.2.0",
4
+ "version": "0.2.2",
5
5
  "publishConfig": {
6
6
  "access": "public"
7
7
  },
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@nomix-ai/nomix-agent",
3
3
  "description": "Agent interface, registry, initiator scope, and event vocabulary for the Nomix Harness",
4
- "version": "0.2.0",
4
+ "version": "0.2.2",
5
5
  "publishConfig": {
6
6
  "access": "public"
7
7
  },
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@nomix-ai/nomix-agent-default-model",
3
3
  "description": "Default model selection shared by Agent entry points",
4
- "version": "0.2.0",
4
+ "version": "0.2.2",
5
5
  "publishConfig": {
6
6
  "access": "public"
7
7
  },
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@nomix-ai/nomix-agent-instructions",
3
3
  "description": "Workspace context loader for AGENTS.md/CLAUDE.md instruction files",
4
- "version": "0.2.0",
4
+ "version": "0.2.2",
5
5
  "publishConfig": {
6
6
  "access": "public"
7
7
  },
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@nomix-ai/nomix-agent-loop",
3
3
  "description": "The concrete agent loop plugin for the Nomix Harness",
4
- "version": "0.2.0",
4
+ "version": "0.2.2",
5
5
  "publishConfig": {
6
6
  "access": "public"
7
7
  },
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@nomix-ai/nomix-agent-presets",
3
3
  "description": "Per-session agent composition from preset cordis.yml files for the Nomix Harness",
4
- "version": "0.2.0",
4
+ "version": "0.2.2",
5
5
  "publishConfig": {
6
6
  "access": "public"
7
7
  },
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@nomix-ai/nomix-agent-tool-presentation",
3
3
  "description": "Agent-plane presentation selector: composes one agent's tools as Code Mode, native, or both",
4
- "version": "0.2.0",
4
+ "version": "0.2.2",
5
5
  "publishConfig": {
6
6
  "access": "public"
7
7
  },
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@nomix-ai/nomix-anonymous-user-id",
3
3
  "description": "Shared anonymous user identity for Nomix Harness telemetry and feedback correlation",
4
- "version": "0.2.0",
4
+ "version": "0.2.2",
5
5
  "publishConfig": {
6
6
  "access": "public"
7
7
  },
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@nomix-ai/nomix-api-gateway",
3
3
  "description": "Typert Remote Host dispatcher and Client API endpoint",
4
- "version": "0.2.0",
4
+ "version": "0.2.2",
5
5
  "publishConfig": {
6
6
  "access": "public"
7
7
  },
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@nomix-ai/nomix-api-remotes",
3
3
  "description": "Remote BFF assembly and Host Agent/Session lookup policy",
4
- "version": "0.2.0",
4
+ "version": "0.2.2",
5
5
  "publishConfig": {
6
6
  "access": "public"
7
7
  },
@@ -2,7 +2,7 @@ import { createRequire } from "node:module";
2
2
  import { fileURLToPath, pathToFileURL } from "node:url";
3
3
  import { existsSync, lstatSync, mkdirSync, readFileSync, readlinkSync, symlinkSync, unlinkSync, writeFileSync } from "node:fs";
4
4
  import { parseEnv } from "node:util";
5
- import { basename, dirname, extname, isAbsolute, join, resolve } from "node:path";
5
+ import { basename, dirname, extname, isAbsolute, join, relative, resolve, sep } from "node:path";
6
6
  import * as yaml from "js-yaml";
7
7
  import { Context, Service } from "@nomix-ai/cordis";
8
8
  import Loader, { EntryGroup, EntryTree, isJsExpr } from "@nomix-ai/cordis-plugin-loader";
@@ -317,9 +317,9 @@ var Include = class extends EntryTree {
317
317
  * first from the nomix installation (the launcher's own package), then from the
318
318
  * profile directory. The Loader's `baseUrl` is the profile directory, whose
319
319
  * `node_modules` pnpm manages for out-of-tree plugins, while the maintained
320
- * flat fallback directory `$NOMIX_HOME/profiles/node_modules` (one symlink per
321
- * package the installation's app and bundles depend on) makes every in-box
322
- * plugin Node-resolvable from any profile through the ordinary parent-walk.
320
+ * flat fallback directory `$NOMIX_HOME/profiles/node_modules` links both the
321
+ * installation's dependency closure and aggregate-package kernel entries,
322
+ * making every in-box plugin Node-resolvable through the ordinary parent-walk.
323
323
  * @module @nomix-ai/nomix-app-boot/profile
324
324
  */
325
325
  /** Directory under the Harness home holding every profile. */
@@ -405,18 +405,15 @@ function ensureSymlink(link, target) {
405
405
  }
406
406
  }
407
407
  /**
408
- * Maintain the flat module fallback `$NOMIX_HOME/profiles/node_modules`: one
409
- * symlink per package in the nomix app's resolvable dependency CLOSURE (BFS
410
- * over `dependencies` from the app manifest), each resolved from its own
411
- * real location. Node's parent-directory walk from any profile finds this
412
- * directory after the profile's own `node_modules`, so every in-box plugin
413
- * resolves without pnpm ever managing it — the exact "bundles come from the
414
- * installation" contract. The closure (not just direct dependencies) is
415
- * required for out-of-tree plugins: their peer dependencies name Service
416
- * Definition packages (`nomix-compaction`, `nomix-invariants`, ...) that the app
417
- * reaches only through its Service Provider packages. Symlinked packages
418
- * resolve their own dependencies from their real directories (Node's default
419
- * symlink-following), so each package needs only its one flat link.
408
+ * Maintain the flat module fallback `$NOMIX_HOME/profiles/node_modules`. It
409
+ * links the nomix app's resolvable dependency closure and every package listed
410
+ * by an aggregate distribution's `dist/kernel/manifest.json`. Node's
411
+ * parent-directory walk from any profile therefore resolves in-box plugins
412
+ * without pnpm managing them. The dependency closure is required for
413
+ * out-of-tree plugin peers; the kernel manifest supplies package identities
414
+ * that are embedded rather than installed as standalone npm dependencies.
415
+ * Symlinked packages resolve their own dependencies from their real
416
+ * directories, so each package needs only one flat link.
420
417
  * Idempotent: correct links are kept and moved installations are
421
418
  * re-pointed; a stale link to a vanished package stays until its name is
422
419
  * reused (dangling links are invisible to resolution).
@@ -447,6 +444,23 @@ function healProfilesModuleFallback(installAnchor, home = resolveNomixHome()) {
447
444
  manifest: JSON.parse(readFileSync(manifestPath, "utf8"))
448
445
  });
449
446
  }
447
+ const kernelRoot = join(dirname(installAnchor), "dist", "kernel");
448
+ const kernelManifestPath = join(kernelRoot, "manifest.json");
449
+ if (existsSync(kernelManifestPath)) {
450
+ const packaged = JSON.parse(readFileSync(kernelManifestPath, "utf8"));
451
+ if (packaged === null || typeof packaged !== "object" || Array.isArray(packaged)) throw new Error("nomix: packaged kernel manifest must hold a JSON object");
452
+ for (const [packageName, targetRelative] of Object.entries(packaged)) {
453
+ if (!packageName.startsWith("@nomix-ai/nomix-") || typeof targetRelative !== "string") throw new Error(`nomix: invalid packaged kernel manifest entry ${JSON.stringify(packageName)}`);
454
+ const target = resolve(kernelRoot, targetRelative);
455
+ const fromKernel = relative(kernelRoot, target);
456
+ if (fromKernel === "" || isAbsolute(fromKernel) || fromKernel === ".." || fromKernel.startsWith(`..${sep}`)) throw new Error(`nomix: packaged kernel target escapes dist/kernel for ${packageName}`);
457
+ const targetManifestPath = join(target, "package.json");
458
+ if (!existsSync(targetManifestPath)) throw new Error(`nomix: packaged kernel target for ${packageName} has no package.json`);
459
+ const targetManifest = JSON.parse(readFileSync(targetManifestPath, "utf8"));
460
+ if (targetManifest.name !== packageName) throw new Error(`nomix: packaged kernel target for ${packageName} declares ${JSON.stringify(targetManifest.name)}`);
461
+ links.set(packageName, target);
462
+ }
463
+ }
450
464
  for (const [packageName, target] of links) {
451
465
  const link = join(modulesDir, packageName);
452
466
  mkdirSync(dirname(link), { recursive: true });
@@ -16,9 +16,9 @@
16
16
  * first from the nomix installation (the launcher's own package), then from the
17
17
  * profile directory. The Loader's `baseUrl` is the profile directory, whose
18
18
  * `node_modules` pnpm manages for out-of-tree plugins, while the maintained
19
- * flat fallback directory `$NOMIX_HOME/profiles/node_modules` (one symlink per
20
- * package the installation's app and bundles depend on) makes every in-box
21
- * plugin Node-resolvable from any profile through the ordinary parent-walk.
19
+ * flat fallback directory `$NOMIX_HOME/profiles/node_modules` links both the
20
+ * installation's dependency closure and aggregate-package kernel entries,
21
+ * making every in-box plugin Node-resolvable through the ordinary parent-walk.
22
22
  * @module @nomix-ai/nomix-app-boot/profile
23
23
  */
24
24
  import type { EntryOptions } from '@nomix-ai/cordis-plugin-loader';
@@ -98,18 +98,15 @@ export declare const DEFAULT_PROFILE_BUNDLES: readonly string[];
98
98
  */
99
99
  export declare function initProfile(dir: string, bundles: readonly string[]): void;
100
100
  /**
101
- * Maintain the flat module fallback `$NOMIX_HOME/profiles/node_modules`: one
102
- * symlink per package in the nomix app's resolvable dependency CLOSURE (BFS
103
- * over `dependencies` from the app manifest), each resolved from its own
104
- * real location. Node's parent-directory walk from any profile finds this
105
- * directory after the profile's own `node_modules`, so every in-box plugin
106
- * resolves without pnpm ever managing it — the exact "bundles come from the
107
- * installation" contract. The closure (not just direct dependencies) is
108
- * required for out-of-tree plugins: their peer dependencies name Service
109
- * Definition packages (`nomix-compaction`, `nomix-invariants`, ...) that the app
110
- * reaches only through its Service Provider packages. Symlinked packages
111
- * resolve their own dependencies from their real directories (Node's default
112
- * symlink-following), so each package needs only its one flat link.
101
+ * Maintain the flat module fallback `$NOMIX_HOME/profiles/node_modules`. It
102
+ * links the nomix app's resolvable dependency closure and every package listed
103
+ * by an aggregate distribution's `dist/kernel/manifest.json`. Node's
104
+ * parent-directory walk from any profile therefore resolves in-box plugins
105
+ * without pnpm managing them. The dependency closure is required for
106
+ * out-of-tree plugin peers; the kernel manifest supplies package identities
107
+ * that are embedded rather than installed as standalone npm dependencies.
108
+ * Symlinked packages resolve their own dependencies from their real
109
+ * directories, so each package needs only one flat link.
113
110
  * Idempotent: correct links are kept and moved installations are
114
111
  * re-pointed; a stale link to a vanished package stays until its name is
115
112
  * reused (dangling links are invisible to resolution).
@@ -16,14 +16,14 @@
16
16
  * first from the nomix installation (the launcher's own package), then from the
17
17
  * profile directory. The Loader's `baseUrl` is the profile directory, whose
18
18
  * `node_modules` pnpm manages for out-of-tree plugins, while the maintained
19
- * flat fallback directory `$NOMIX_HOME/profiles/node_modules` (one symlink per
20
- * package the installation's app and bundles depend on) makes every in-box
21
- * plugin Node-resolvable from any profile through the ordinary parent-walk.
19
+ * flat fallback directory `$NOMIX_HOME/profiles/node_modules` links both the
20
+ * installation's dependency closure and aggregate-package kernel entries,
21
+ * making every in-box plugin Node-resolvable through the ordinary parent-walk.
22
22
  * @module @nomix-ai/nomix-app-boot/profile
23
23
  */
24
24
  import { createRequire } from 'node:module';
25
25
  import { existsSync, lstatSync, mkdirSync, readFileSync, readlinkSync, symlinkSync, unlinkSync, writeFileSync, } from 'node:fs';
26
- import { basename, dirname, join } from 'node:path';
26
+ import { basename, dirname, isAbsolute, join, relative, resolve, sep } from 'node:path';
27
27
  import { applyEntryPatches } from '@nomix-ai/cordis-plugin-include';
28
28
  import { resolveNomixHome } from '../../../home-paths/lib/index.js';
29
29
  import { rejectLegacyManifestSection } from "./legacy-branding.js";
@@ -136,18 +136,15 @@ function ensureSymlink(link, target) {
136
136
  }
137
137
  }
138
138
  /**
139
- * Maintain the flat module fallback `$NOMIX_HOME/profiles/node_modules`: one
140
- * symlink per package in the nomix app's resolvable dependency CLOSURE (BFS
141
- * over `dependencies` from the app manifest), each resolved from its own
142
- * real location. Node's parent-directory walk from any profile finds this
143
- * directory after the profile's own `node_modules`, so every in-box plugin
144
- * resolves without pnpm ever managing it — the exact "bundles come from the
145
- * installation" contract. The closure (not just direct dependencies) is
146
- * required for out-of-tree plugins: their peer dependencies name Service
147
- * Definition packages (`nomix-compaction`, `nomix-invariants`, ...) that the app
148
- * reaches only through its Service Provider packages. Symlinked packages
149
- * resolve their own dependencies from their real directories (Node's default
150
- * symlink-following), so each package needs only its one flat link.
139
+ * Maintain the flat module fallback `$NOMIX_HOME/profiles/node_modules`. It
140
+ * links the nomix app's resolvable dependency closure and every package listed
141
+ * by an aggregate distribution's `dist/kernel/manifest.json`. Node's
142
+ * parent-directory walk from any profile therefore resolves in-box plugins
143
+ * without pnpm managing them. The dependency closure is required for
144
+ * out-of-tree plugin peers; the kernel manifest supplies package identities
145
+ * that are embedded rather than installed as standalone npm dependencies.
146
+ * Symlinked packages resolve their own dependencies from their real
147
+ * directories, so each package needs only one flat link.
151
148
  * Idempotent: correct links are kept and moved installations are
152
149
  * re-pointed; a stale link to a vanished package stays until its name is
153
150
  * reused (dangling links are invisible to resolution).
@@ -184,6 +181,33 @@ export function healProfilesModuleFallback(installAnchor, home = resolveNomixHom
184
181
  queue.push({ anchor: manifestPath, manifest: JSON.parse(readFileSync(manifestPath, 'utf8')) });
185
182
  }
186
183
  }
184
+ const kernelRoot = join(dirname(installAnchor), 'dist', 'kernel');
185
+ const kernelManifestPath = join(kernelRoot, 'manifest.json');
186
+ if (existsSync(kernelManifestPath)) {
187
+ const packaged = JSON.parse(readFileSync(kernelManifestPath, 'utf8'));
188
+ if (packaged === null || typeof packaged !== 'object' || Array.isArray(packaged)) {
189
+ throw new Error('nomix: packaged kernel manifest must hold a JSON object');
190
+ }
191
+ for (const [packageName, targetRelative] of Object.entries(packaged)) {
192
+ if (!packageName.startsWith('@nomix-ai/nomix-') || typeof targetRelative !== 'string') {
193
+ throw new Error(`nomix: invalid packaged kernel manifest entry ${JSON.stringify(packageName)}`);
194
+ }
195
+ const target = resolve(kernelRoot, targetRelative);
196
+ const fromKernel = relative(kernelRoot, target);
197
+ if (fromKernel === '' || isAbsolute(fromKernel) || fromKernel === '..' || fromKernel.startsWith(`..${sep}`)) {
198
+ throw new Error(`nomix: packaged kernel target escapes dist/kernel for ${packageName}`);
199
+ }
200
+ const targetManifestPath = join(target, 'package.json');
201
+ if (!existsSync(targetManifestPath)) {
202
+ throw new Error(`nomix: packaged kernel target for ${packageName} has no package.json`);
203
+ }
204
+ const targetManifest = JSON.parse(readFileSync(targetManifestPath, 'utf8'));
205
+ if (targetManifest.name !== packageName) {
206
+ throw new Error(`nomix: packaged kernel target for ${packageName} declares ${JSON.stringify(targetManifest.name)}`);
207
+ }
208
+ links.set(packageName, target);
209
+ }
210
+ }
187
211
  for (const [packageName, target] of links) {
188
212
  const link = join(modulesDir, packageName);
189
213
  mkdirSync(dirname(link), { recursive: true });
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@nomix-ai/nomix-app-boot",
3
3
  "description": "Shared boot glue for the app bins: .env loading, fail-loud Loader guards, snapshot-aware config resolution, and the Loader boot sequence",
4
- "version": "0.2.0",
4
+ "version": "0.2.2",
5
5
  "publishConfig": {
6
6
  "access": "public"
7
7
  },
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@nomix-ai/nomix-atomic-write",
3
3
  "description": "Zero-dependency atomic file replacement: exclusive-create random-suffix temp + rename carrying the caller-stated permissions (writeFileAtomic)",
4
- "version": "0.2.0",
4
+ "version": "0.2.2",
5
5
  "publishConfig": {
6
6
  "access": "public"
7
7
  },
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@nomix-ai/nomix-attachment",
3
3
  "description": "Durable immutable attachment storage seam for the Nomix Harness",
4
- "version": "0.2.0",
4
+ "version": "0.2.2",
5
5
  "publishConfig": {
6
6
  "access": "public"
7
7
  },
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@nomix-ai/nomix-attachment-local",
3
3
  "description": "Private content-addressed NOMIX_HOME attachment storage",
4
- "version": "0.2.0",
4
+ "version": "0.2.2",
5
5
  "publishConfig": {
6
6
  "access": "public"
7
7
  },