@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 +25 -0
- package/RELEASING.md +19 -4
- package/RELEASING.zh.md +19 -4
- package/lib/client.js +6569 -5867
- package/lib/client.js.map +1 -7
- package/lib/dsh-agent-studio-fusion.js +29190 -25628
- package/lib/types/host/acp/config.d.ts +11 -2
- package/lib/types/host/acp/types.d.ts +9 -1
- package/package.json +2 -1
- package/src/host/acp/agent-process.ts +1 -1
- package/src/host/acp/config.ts +15 -3
- package/src/host/acp/types.ts +9 -1
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
|
-
|
|
43
|
-
|
|
44
|
-
|
|
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.
|
|
37
|
-
|
|
38
|
-
|
|
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
|
| 字段 | 值 |
|