@sqdr2/dsh-agent-studio-fusion 1.0.0 → 1.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
@@ -20,6 +20,26 @@ own tags and releases.
20
20
  Entry format: what changed, then what was actually validated. "Not claimed" lines mark what a release did *not* test —
21
21
  read them before assuming a platform is covered.
22
22
 
23
+ ## 1.0.1 — 2026-11-13
24
+
25
+ ### ACP
26
+ - **A configured ACP route is no longer replaced by a phantom provider named `get`, and its model list is no longer
27
+ empty.** `acp.agents` is declared volatile so the Host publishes a live-editable settings form, which makes a parsed
28
+ Config carry a `{ get() }` reference at that key instead of the profile map. `agentsOf()` read it with
29
+ `Object.entries`, so the reference's only own key — the `get` method — became the route id: the adapter registered a
30
+ provider literally named `get` whose profile was `undefined`, and the configured route never reached the catalog.
31
+ The failure surfaced in the model picker as `get failed to load: Cannot read properties of undefined (reading
32
+ 'length')` (from `profile.models.length` in `listModels`) with the real route missing entirely — every ACP agent,
33
+ Devin included, therefore offered no models. `agentsOf()` now unwraps the reference before reading, and still accepts
34
+ a plain map for callers that pass raw settings. `AcpConfig` documents the trap so the declared type is not mistaken
35
+ for the runtime value.
36
+ - Validated against the real agent: a Devin route (`devin acp`) configured only through `acp.agents` now lists
37
+ `SWE-2 Flash Medium` and `SWE-1.6 Slow` plus the `default` fallback, and `resolveModel` returns context window and
38
+ reasoning metadata for them. Regression tests in `tests/acp-import.spec.ts` fail on the previous code and pass on
39
+ this one; the full suite is 648 passed, the host suite 300 passed / 1 skipped.
40
+ - Not claimed: that fix covers reading the route map only. Any other consumer that reads `config.acp.agents` with
41
+ `Object.entries` would hit the same reference; `lib/types` is rebuilt to ship this one already unwrapped.
42
+
23
43
  ## 1.0.0 — 2026-11-13
24
44
 
25
45
  ### Naming and upgrade
@@ -35,6 +55,11 @@ read them before assuming a platform is covered.
35
55
  `isFusionSourceKind`, so context restored into a session started under an older name is still matched.
36
56
  - `docs/MIGRATION-AGY.md` and `docs/MIGRATION-ACP.md` now use the current row id in their copy-paste blocks; they had
37
57
  still named `- id: dsh-fusion` / `name: '@sqdr2/dsh-fusion'`, which the loader no longer matches.
58
+ - **Publishing the new name needs staging.** A bypass-2FA granular token cannot create a name that does not exist yet: it
59
+ answers `E404 Not Found - PUT` (not 401), on npm 11 and 12 alike. The first release of a name is uploaded with
60
+ `npm stage publish` and approved in the browser with 2FA (`RELEASING.md`, `RELEASING.zh.md`). CI's `publish.yml` then
61
+ finds the version already on npm and exits successfully without publishing, so the tag run is a build-and-test gate,
62
+ not the publisher, until a trusted publisher is added for this name.
38
63
 
39
64
  ### Client
40
65
  - **The Fusion panel becomes the combined studio page**, titled `DSH Agent Studio With Fusion` (one constant,
package/RELEASING.md CHANGED
@@ -37,11 +37,26 @@ Open the **Actions** tab and accept the "I understand my workflows, go ahead and
37
37
  ### 2. Add a trusted publisher on npm
38
38
 
39
39
  OIDC publishing is authorised per package, on the package's own settings page, which a name that has never been
40
- published does not have. So the very first release of a name can only be done by hand:
40
+ published does not have. So the very first release of a name can only be done by hand.
41
41
 
42
- 1. Publish once with a granular token that bypasses 2FA (`bypass_2fa: true`, `package: write` on the right scope).
43
- A token without 2FA bypass is rejected with `E403 Two-factor authentication ... is required to publish packages`,
44
- and a token scoped to `@sqdr2` cannot publish an unscoped name at all.
42
+ **What actually shipped 1.0.0 (2026-11-13, including the traps):** publishing a *new* name directly with a bypass-2FA
43
+ granular token returns `E404 Not Found - PUT` (not 401), and `npm@12` behaves the same. The first publish of a name has
44
+ to be **staged** and then approved by a maintainer in the browser with 2FA:
45
+
46
+ ```sh
47
+ npx npm@12 stage publish . --access public # uploads as staged; this is what claims the name
48
+ npx npm@12 stage list # take the stage-id; status goes validating → staged
49
+ # then approve it in npmjs.com → avatar → Staged packages (interactive 2FA; a token cannot do this)
50
+ npx npm@12 stage list # after approval the entry is gone and 1.0.0 is in the registry
51
+ ```
52
+
53
+ The registry first holds a `0.0.0-stage` placeholder version; once the real version is approved `dist-tags.latest`
54
+ points at it, so the placeholder can be ignored (upstream `@sqdr2/dsh-agy-worker` carries the same `0.0.0-stage`).
55
+ Staging also needs `--registry https://registry.npmjs.org/`: this machine's `~/.npmrc` points at npmmirror, which has no
56
+ `/-/stage` endpoint and answers `404 .../-/stage`.
57
+
58
+ 1. Use the staging path above (or a granular token with 2FA bypass, `bypass_2fa: true`, `package: write`, correct
59
+ scope) for that first publish. Without bypass it is rejected with `EOTP This operation requires a one-time password`.
45
60
  2. On **npmjs.com → the package → Settings → Trusted publishing**, add:
46
61
 
47
62
  | Field | Value |
package/RELEASING.zh.md CHANGED
@@ -31,11 +31,26 @@ workflow 会跳过 npm 上已存在的版本,所以同一个 tag 重跑是安
31
31
 
32
32
  ### 2. 在 npm 上加信任配置
33
33
 
34
- OIDC 发布是按包授权的,配置在包自己的设置页上,而一个从未发布过的包名没有这个页面。所以某个包名的第一版只能手发:
34
+ OIDC 发布是按包授权的,配置在包自己的设置页上,而一个从未发布过的包名没有这个页面。所以某个包名的第一版只能手发。
35
35
 
36
- 1. 用一个勾了 2FA bypass 的 granular token 手动发一次(`bypass_2fa: true`,`package: write`,作用域要对)。
37
- 不勾 bypass 会被拒:`E403 Two-factor authentication ... is required to publish packages`;
38
- 而作用域是 `@sqdr2` 的 token 根本无法发布无 scope 的包名。
36
+ **1.0.0 的实际首发路径(2026-11-13,踩过的坑都在这):** 用 bypass-2FA 的 granular token 直接 `npm publish`
37
+ 会返回 `E404 Not Found - PUT`(不是 401),换成 `npm@12` 也一样;新包名的首次发布必须先 **staging**,再由维护者
38
+ 在网页上用 2FA 批准:
39
+
40
+ ```sh
41
+ npx npm@12 stage publish . --access public # 上传为 staged,包名此时才被占住
42
+ npx npm@12 stage list # 拿到 stage-id,状态 validating → staged
43
+ # 然后在 npmjs.com → 头像 → Staged packages 里批准(这一步必须交互式 2FA,token 做不到)
44
+ npx npm@12 stage list # 批准后条目消失,registry 里出现 1.0.0
45
+ ```
46
+
47
+ 批准后 registry 里会先出现一个 `0.0.0-stage` 占位版本,正式版本发布后 `dist-tags.latest` 指向正式版本,
48
+ 占位版本可以忽略(上游 `@sqdr2/dsh-agy-worker` 也有同样的 `0.0.0-stage`)。另外注意 staging 走的是
49
+ `--registry https://registry.npmjs.org/`:本机 `~/.npmrc` 的默认 registry 是 npmmirror,它没有 `/-/stage` 端点,
50
+ 不显式指定会报 `404 .../-/stage`。
51
+
52
+ 1. 用上面那条 staging 路径(或一个勾了 2FA bypass 的 granular token,`bypass_2fa: true`、`package: write`、
53
+ 作用域要对)完成首次发布。不勾 bypass 会被拒:`EOTP This operation requires a one-time password`。
39
54
  2. 在 **npmjs.com → 该包 → Settings → Trusted publishing** 添加:
40
55
 
41
56
  | 字段 | 值 |