@namzu/sdk 34.0.0 → 34.0.1

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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # Changelog
2
2
 
3
+ ## 34.0.1
4
+
5
+ ### Patch Changes
6
+
7
+ - bc947c1: Delay durable CLI conversation creation until the first admitted message or explicit conversation operation, preserve user-owned command and plugin scope when the working directory is the home directory, validate feedback against the canonical session run ledger, protect generated project-state partitions with owner-only permissions, and fail closed when a delegated run loses its parent review channel.
8
+
3
9
  ## 34.0.0
4
10
 
5
11
  ### Major Changes
@@ -1 +1 @@
1
- {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/plugin/loader.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,KAAK,cAAc,EAAwB,MAAM,0BAA0B,CAAA;AAGpF,OAAO,EAAE,KAAK,MAAM,EAAiB,MAAM,oBAAoB,CAAA;AAE/D;;;GAGG;AACH,wBAAsB,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CA2DxF;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,CACvC,SAAS,EAAE,MAAM,EACjB,YAAY,GAAE,4BAAiC,GAC7C,OAAO,CAAC,cAAc,CAAC,CAezB;AAgDD;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,4BAA4B;IAC5C;;;;;;;;OAQG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAA;CAClC;AAED,wBAAgB,gBAAgB,CAC/B,QAAQ,EAAE,cAAc,EACxB,YAAY,GAAE,4BAAiC,GAC7C,IAAI,CAkBN;AAED,6GAA6G;AAC7G,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,MAAM,CAAA;AAE5C;;;;;GAKG;AACH,MAAM,WAAW,sBAAsB;IACtC,0EAA0E;IAC1E,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAA;IAC1B,8DAA8D;IAC9D,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAA;IAChC,yDAAyD;IACzD,QAAQ,CAAC,aAAa,CAAC,EAAE,SAAS,WAAW,EAAE,CAAA;IAC/C,wDAAwD;IACxD,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CACrB;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAsB,qBAAqB,CAC1C,gBAAgB,CAAC,EAAE,MAAM,EACzB,OAAO,CAAC,EAAE,sBAAsB,GAC9B,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,EAAE,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CAkChD"}
1
+ {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/plugin/loader.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,KAAK,cAAc,EAAwB,MAAM,0BAA0B,CAAA;AAGpF,OAAO,EAAE,KAAK,MAAM,EAAiB,MAAM,oBAAoB,CAAA;AAE/D;;;GAGG;AACH,wBAAsB,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CA2DxF;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,CACvC,SAAS,EAAE,MAAM,EACjB,YAAY,GAAE,4BAAiC,GAC7C,OAAO,CAAC,cAAc,CAAC,CAezB;AAgDD;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,4BAA4B;IAC5C;;;;;;;;OAQG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAA;CAClC;AAED,wBAAgB,gBAAgB,CAC/B,QAAQ,EAAE,cAAc,EACxB,YAAY,GAAE,4BAAiC,GAC7C,IAAI,CAkBN;AAED,6GAA6G;AAC7G,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,MAAM,CAAA;AAE5C;;;;;GAKG;AACH,MAAM,WAAW,sBAAsB;IACtC,0EAA0E;IAC1E,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAA;IAC1B,8DAA8D;IAC9D,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAA;IAChC,yDAAyD;IACzD,QAAQ,CAAC,aAAa,CAAC,EAAE,SAAS,WAAW,EAAE,CAAA;IAC/C,wDAAwD;IACxD,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CACrB;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAsB,qBAAqB,CAC1C,gBAAgB,CAAC,EAAE,MAAM,EACzB,OAAO,CAAC,EAAE,sBAAsB,GAC9B,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,EAAE,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CAoChD"}
@@ -1,6 +1,6 @@
1
- import { lstat, readFile, readdir } from 'node:fs/promises';
2
- import { homedir } from 'node:os';
3
- import { join } from 'node:path';
1
+ import { lstat, readFile, readdir, realpath } from 'node:fs/promises';
2
+ import { homedir, platform } from 'node:os';
3
+ import { join, resolve } from 'node:path';
4
4
  import { PLUGIN_MANIFEST_FILENAME, PROJECT_PLUGIN_DIR, USER_PLUGIN_DIR, } from '../constants/plugin/index.js';
5
5
  import { resolveWithinReal } from '../tools/paths.js';
6
6
  import { PluginManifestSchema } from '../types/plugin/index.js';
@@ -185,8 +185,9 @@ export async function discoverAllPluginDirs(workingDirectory, options) {
185
185
  const mayScan = (scope) => !scopes || scopes.includes(scope);
186
186
  const projectRoot = workingDirectory ?? process.cwd();
187
187
  const userRoot = homedir();
188
+ const sharedRoot = await samePhysicalDirectory(projectRoot, userRoot);
188
189
  const [project, user] = await Promise.all([
189
- mayScan('project')
190
+ mayScan('project') && !sharedRoot
190
191
  ? discoverScopedPlugins(projectRoot, PROJECT_PLUGIN_DIR, 'project', options?.log)
191
192
  : Promise.resolve([]),
192
193
  mayScan('user')
@@ -197,7 +198,30 @@ export async function discoverAllPluginDirs(workingDirectory, options) {
197
198
  'namzu.plugin.project_count': project.length,
198
199
  'namzu.plugin.user_count': user.length,
199
200
  ...(scopes ? { 'namzu.plugin.allowed_scopes': scopes } : {}),
201
+ ...(sharedRoot ? { 'namzu.plugin.shared_user_project_root': true } : {}),
200
202
  });
201
203
  return { project, user };
202
204
  }
205
+ /**
206
+ * Whether two scope roots name the same directory, including through a
207
+ * symlink. When home is the working directory, `.namzu/plugins` is user state:
208
+ * treating the same bytes as project state would let a project-only trust
209
+ * policy admit user-owned executable code, while scanning both installs it
210
+ * twice. Missing roots fall back to normalized absolute names; discovery will
211
+ * independently report them empty.
212
+ */
213
+ async function samePhysicalDirectory(left, right) {
214
+ const canonical = async (path) => {
215
+ let value;
216
+ try {
217
+ value = await realpath(path);
218
+ }
219
+ catch {
220
+ value = resolve(path);
221
+ }
222
+ return platform() === 'win32' ? value.toLocaleLowerCase('en-US') : value;
223
+ };
224
+ const [a, b] = await Promise.all([canonical(left), canonical(right)]);
225
+ return a === b;
226
+ }
203
227
  //# sourceMappingURL=loader.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/plugin/loader.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/plugin/loader.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@namzu/sdk",
3
- "version": "34.0.0",
3
+ "version": "34.0.1",
4
4
  "description": "Open-source AI agent SDK with a built-in runtime. Nothing between you and your agents.",
5
5
  "license": "FSL-1.1-MIT",
6
6
  "engines": {
@@ -1,6 +1,6 @@
1
- import { lstat, readFile, readdir } from 'node:fs/promises'
2
- import { homedir } from 'node:os'
3
- import { join } from 'node:path'
1
+ import { lstat, readFile, readdir, realpath } from 'node:fs/promises'
2
+ import { homedir, platform } from 'node:os'
3
+ import { join, resolve } from 'node:path'
4
4
  import {
5
5
  PLUGIN_MANIFEST_FILENAME,
6
6
  PROJECT_PLUGIN_DIR,
@@ -261,9 +261,10 @@ export async function discoverAllPluginDirs(
261
261
 
262
262
  const projectRoot = workingDirectory ?? process.cwd()
263
263
  const userRoot = homedir()
264
+ const sharedRoot = await samePhysicalDirectory(projectRoot, userRoot)
264
265
 
265
266
  const [project, user] = await Promise.all([
266
- mayScan('project')
267
+ mayScan('project') && !sharedRoot
267
268
  ? discoverScopedPlugins(projectRoot, PROJECT_PLUGIN_DIR, 'project', options?.log)
268
269
  : Promise.resolve([]),
269
270
  mayScan('user')
@@ -275,7 +276,30 @@ export async function discoverAllPluginDirs(
275
276
  'namzu.plugin.project_count': project.length,
276
277
  'namzu.plugin.user_count': user.length,
277
278
  ...(scopes ? { 'namzu.plugin.allowed_scopes': scopes } : {}),
279
+ ...(sharedRoot ? { 'namzu.plugin.shared_user_project_root': true } : {}),
278
280
  })
279
281
 
280
282
  return { project, user }
281
283
  }
284
+
285
+ /**
286
+ * Whether two scope roots name the same directory, including through a
287
+ * symlink. When home is the working directory, `.namzu/plugins` is user state:
288
+ * treating the same bytes as project state would let a project-only trust
289
+ * policy admit user-owned executable code, while scanning both installs it
290
+ * twice. Missing roots fall back to normalized absolute names; discovery will
291
+ * independently report them empty.
292
+ */
293
+ async function samePhysicalDirectory(left: string, right: string): Promise<boolean> {
294
+ const canonical = async (path: string): Promise<string> => {
295
+ let value: string
296
+ try {
297
+ value = await realpath(path)
298
+ } catch {
299
+ value = resolve(path)
300
+ }
301
+ return platform() === 'win32' ? value.toLocaleLowerCase('en-US') : value
302
+ }
303
+ const [a, b] = await Promise.all([canonical(left), canonical(right)])
304
+ return a === b
305
+ }