@sema-ai/registry-core 0.10.3

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 (103) hide show
  1. package/CHANGELOG.md +131 -0
  2. package/README.md +84 -0
  3. package/dist/api/auth-bridge.d.ts +332 -0
  4. package/dist/api/auth-bridge.d.ts.map +1 -0
  5. package/dist/api/auth-bridge.js +211 -0
  6. package/dist/api/auth-bridge.js.map +1 -0
  7. package/dist/api/auth.d.ts +258 -0
  8. package/dist/api/auth.d.ts.map +1 -0
  9. package/dist/api/auth.js +204 -0
  10. package/dist/api/auth.js.map +1 -0
  11. package/dist/api/scopes.d.ts +353 -0
  12. package/dist/api/scopes.d.ts.map +1 -0
  13. package/dist/api/scopes.js +229 -0
  14. package/dist/api/scopes.js.map +1 -0
  15. package/dist/bundle.d.ts +14 -0
  16. package/dist/bundle.d.ts.map +1 -0
  17. package/dist/bundle.js +68 -0
  18. package/dist/bundle.js.map +1 -0
  19. package/dist/config-fns.d.ts +236 -0
  20. package/dist/config-fns.d.ts.map +1 -0
  21. package/dist/config-fns.js +272 -0
  22. package/dist/config-fns.js.map +1 -0
  23. package/dist/cross-domain.d.ts +35 -0
  24. package/dist/cross-domain.d.ts.map +1 -0
  25. package/dist/cross-domain.js +119 -0
  26. package/dist/cross-domain.js.map +1 -0
  27. package/dist/file-edit.d.ts +37 -0
  28. package/dist/file-edit.d.ts.map +1 -0
  29. package/dist/file-edit.js +126 -0
  30. package/dist/file-edit.js.map +1 -0
  31. package/dist/file-store.d.ts +39 -0
  32. package/dist/file-store.d.ts.map +1 -0
  33. package/dist/file-store.js +142 -0
  34. package/dist/file-store.js.map +1 -0
  35. package/dist/fleet.d.ts +479 -0
  36. package/dist/fleet.d.ts.map +1 -0
  37. package/dist/fleet.js +303 -0
  38. package/dist/fleet.js.map +1 -0
  39. package/dist/hash.d.ts +33 -0
  40. package/dist/hash.d.ts.map +1 -0
  41. package/dist/hash.js +60 -0
  42. package/dist/hash.js.map +1 -0
  43. package/dist/hooks.d.ts +5478 -0
  44. package/dist/hooks.d.ts.map +1 -0
  45. package/dist/hooks.js +628 -0
  46. package/dist/hooks.js.map +1 -0
  47. package/dist/index.d.ts +23 -0
  48. package/dist/index.d.ts.map +1 -0
  49. package/dist/index.js +27 -0
  50. package/dist/index.js.map +1 -0
  51. package/dist/local-load.d.ts +33 -0
  52. package/dist/local-load.d.ts.map +1 -0
  53. package/dist/local-load.js +164 -0
  54. package/dist/local-load.js.map +1 -0
  55. package/dist/migrate.d.ts +245 -0
  56. package/dist/migrate.d.ts.map +1 -0
  57. package/dist/migrate.js +543 -0
  58. package/dist/migrate.js.map +1 -0
  59. package/dist/node.d.ts +12 -0
  60. package/dist/node.d.ts.map +1 -0
  61. package/dist/node.js +12 -0
  62. package/dist/node.js.map +1 -0
  63. package/dist/reader.d.ts +19 -0
  64. package/dist/reader.d.ts.map +1 -0
  65. package/dist/reader.js +2 -0
  66. package/dist/reader.js.map +1 -0
  67. package/dist/remote-exec.d.ts +275 -0
  68. package/dist/remote-exec.d.ts.map +1 -0
  69. package/dist/remote-exec.js +183 -0
  70. package/dist/remote-exec.js.map +1 -0
  71. package/dist/resolve-roster.d.ts +29 -0
  72. package/dist/resolve-roster.d.ts.map +1 -0
  73. package/dist/resolve-roster.js +105 -0
  74. package/dist/resolve-roster.js.map +1 -0
  75. package/dist/safety-merge-spec.d.ts +328 -0
  76. package/dist/safety-merge-spec.d.ts.map +1 -0
  77. package/dist/safety-merge-spec.js +65 -0
  78. package/dist/safety-merge-spec.js.map +1 -0
  79. package/dist/scheduler-store-node.d.ts +15 -0
  80. package/dist/scheduler-store-node.d.ts.map +1 -0
  81. package/dist/scheduler-store-node.js +43 -0
  82. package/dist/scheduler-store-node.js.map +1 -0
  83. package/dist/scheduler-store.d.ts +65 -0
  84. package/dist/scheduler-store.d.ts.map +1 -0
  85. package/dist/scheduler-store.js +59 -0
  86. package/dist/scheduler-store.js.map +1 -0
  87. package/dist/secret-refs.d.ts +34 -0
  88. package/dist/secret-refs.d.ts.map +1 -0
  89. package/dist/secret-refs.js +49 -0
  90. package/dist/secret-refs.js.map +1 -0
  91. package/dist/sha256.d.ts +17 -0
  92. package/dist/sha256.d.ts.map +1 -0
  93. package/dist/sha256.js +115 -0
  94. package/dist/sha256.js.map +1 -0
  95. package/dist/skills-manifest.d.ts +13 -0
  96. package/dist/skills-manifest.d.ts.map +1 -0
  97. package/dist/skills-manifest.js +55 -0
  98. package/dist/skills-manifest.js.map +1 -0
  99. package/dist/types.d.ts +9911 -0
  100. package/dist/types.d.ts.map +1 -0
  101. package/dist/types.js +1727 -0
  102. package/dist/types.js.map +1 -0
  103. package/package.json +130 -0
@@ -0,0 +1,543 @@
1
+ import { RESERVED_WORKER_ENV } from "./types.js";
2
+ /** 存量 hosts grandfathering(§2-2):对既有条目批量回填 `approved:true` 并剥掉 `capacity`。幂等——
3
+ * 已带 approved 的条目保持原值(重跑不覆盖 admin 手动置回待批的机器)。 */
4
+ export function grandfatherHosts(rawHosts) {
5
+ if (rawHosts === null || typeof rawHosts !== "object" || !Array.isArray(rawHosts.hosts)) {
6
+ return { hosts: undefined, approvedBackfilled: [], capacityStripped: [] };
7
+ }
8
+ const approvedBackfilled = [];
9
+ const capacityStripped = [];
10
+ const hosts = (rawHosts.hosts).map((h) => {
11
+ if (h === null || typeof h !== "object")
12
+ return h;
13
+ const entry = { ...h };
14
+ const name = typeof entry.name === "string" ? entry.name : "(unnamed)";
15
+ if (entry.approved === undefined) {
16
+ entry.approved = true; // grandfathering:存量机器已在编,不因契约升级退回待批
17
+ approvedBackfilled.push(name);
18
+ }
19
+ if ("capacity" in entry) {
20
+ delete entry.capacity; // 0.6.0 契约已删;留着也会被 zod strip,主动剥干净便于 diff 审计
21
+ capacityStripped.push(name);
22
+ }
23
+ return entry;
24
+ });
25
+ return { hosts: { ...rawHosts, hosts }, approvedBackfilled, capacityStripped };
26
+ }
27
+ const catalogName = (modelId) => {
28
+ const n = modelId.toLowerCase().replace(/[^a-z0-9._-]+/g, "-").replace(/^[._-]+/, "");
29
+ return /^[a-z0-9]/.test(n) ? n : `m-${n || "model"}`;
30
+ };
31
+ /** 规范容器内 env 名:MODEL_KEY_<NAME>(§3 apiKeyEnv 命名空间转换)。 */
32
+ export const canonicalModelKeyEnv = (name) => `MODEL_KEY_${name.toUpperCase().replace(/[^A-Z0-9]+/g, "_").replace(/^_+|_+$/g, "") || "MODEL"}`;
33
+ const signatureOf = (m, hostKeyEnv) => JSON.stringify({ provider: m.provider ?? "gateway", baseUrl: m.gatewayBaseUrl ?? "", key: hostKeyEnv, cost: m.cost ?? null });
34
+ /** 扫描存量 workers 的 model 七字段,产出 models 目录条目草稿 + 冲突报告 + cheapId→roster 计划。
35
+ * `existingModelNames` = 现 models 目录已占用的 name(避让后缀)。PURE——不写任何东西。
36
+ * 0.6.3:`opts.existingModels` 给出现目录条目时做内容级去重——worker.model 与既有条目 (id, provider,
37
+ * baseUrl) 相同 → 复用(进 `reuses`,不出新草稿;缺 apiKeyEnv 的条目给回填建议)。 */
38
+ export function planWorkerModelMigration(workers, existingModelNames = [], opts = {}) {
39
+ const drafts = [];
40
+ const conflicts = [];
41
+ const reuses = [];
42
+ const rosterActions = [];
43
+ const report = [];
44
+ const existing = opts.existingModels ?? [];
45
+ const usedNames = new Set([...existingModelNames, ...existing.map((e) => e.name)]);
46
+ // modelId → (signature → draft)
47
+ const byId = new Map();
48
+ // 复用聚合:entryName → reuse(同条目多 worker 归并;宿主名不一致=真冲突,进 conflicts)
49
+ const reuseByEntry = new Map();
50
+ const claimName = (base) => {
51
+ let name = base;
52
+ for (let i = 2; usedNames.has(name); i++)
53
+ name = `${base}-${i}`;
54
+ usedNames.add(name);
55
+ return name;
56
+ };
57
+ const upsert = (worker, m, hostKeyEnv, modelId, opts = {}) => {
58
+ // 0.6.4(W3/MINOR-1):cheap 条目身份与**主模型价格无关**(cheap 草稿 cost 恒 undefined,E1 裁定不照搬
59
+ // 主模型价)——cheap 签名剔除 cost,两 worker 同 cheapId 仅主模型价不同不再拆条目误报冲突(误报会连带
60
+ // 阻断整条 rosterAction,爆炸半径大于表面)。主模型签名仍含 cost(§3:cost 不同=拆条目,契约不变)。
61
+ const sig = signatureOf(opts.cheapOf ? { provider: m.provider, gatewayBaseUrl: m.gatewayBaseUrl } : m, hostKeyEnv);
62
+ const sigs = byId.get(modelId) ?? new Map();
63
+ byId.set(modelId, sigs);
64
+ let d = sigs.get(sig);
65
+ // cheap 挂靠:忽略 cost 维度找同 (provider, baseUrl, 宿主 key) 的既有草稿(如该 modelId 已被别的
66
+ // worker 作主模型合成过)——挂靠主形草稿定价真实,优于另造无价 cheap 条目。
67
+ if (!d && opts.cheapOf) {
68
+ d = [...sigs.values()].find((x) => x.entry.provider === (m.provider ?? "gateway") && (x.entry.baseUrl ?? "") === (m.gatewayBaseUrl ?? "") && x.hostApiKeyEnv === hostKeyEnv);
69
+ if (d) {
70
+ if (!d.sourceWorkers.includes(worker))
71
+ d.sourceWorkers.push(worker);
72
+ return d;
73
+ }
74
+ }
75
+ if (!d) {
76
+ const name = claimName(catalogName(modelId));
77
+ const provider = m.provider ?? "gateway";
78
+ d = {
79
+ entry: {
80
+ name,
81
+ id: modelId,
82
+ provider,
83
+ api: provider === "anthropic" ? "anthropic-messages" : "openai-completions",
84
+ baseUrl: m.gatewayBaseUrl || undefined,
85
+ apiKeyEnv: canonicalModelKeyEnv(name),
86
+ reasoning: opts.cheapOf ? undefined : m.reasoning || undefined,
87
+ maxTokens: opts.cheapOf ? undefined : m.maxTokens,
88
+ contextWindow: opts.cheapOf ? undefined : m.contextWindow,
89
+ // cheap 草稿不照搬主模型 cost:worker.model 只有主模型单一价,copy 给 cheap 条目=错误定价喂给
90
+ // prefer:cheapest/quota-weight 消费方;留空更安全(types.ts 口径 missing cost ≠ cheapest),
91
+ // E3 人工确认时补价(E1 评审 opus MINOR)。
92
+ cost: opts.cheapOf ? undefined : m.cost,
93
+ notes: opts.cheapOf ? `migrated from worker.model.cheapId (worker "${opts.cheapOf}")` : `migrated from worker.model (worker "${worker}")`,
94
+ },
95
+ sourceWorkers: [],
96
+ hostApiKeyEnv: hostKeyEnv,
97
+ };
98
+ sigs.set(sig, d);
99
+ drafts.push(d);
100
+ if (sigs.size > 1) {
101
+ const names = [...sigs.values()].map((x) => x.entry.name);
102
+ conflicts.push({ modelId, entryNames: names, reason: `same modelId "${modelId}" with differing gatewayBaseUrl/apiKeyEnv/cost/provider — split into ${names.length} entries (人工确认后再执行)` });
103
+ report.push(`⚠️ conflict: modelId "${modelId}" → entries [${names.join(", ")}] (signatures differ)`);
104
+ }
105
+ }
106
+ if (!d.sourceWorkers.includes(worker))
107
+ d.sourceWorkers.push(worker);
108
+ return d;
109
+ };
110
+ /** 0.6.3 内容级去重:worker.model 与既有条目 (id, provider, baseUrl) 相同 → 复用。返回 undefined=无匹配走草稿。
111
+ * 0.6.4(W1/C1,PM 裁定):`compareFields`(仅主模型路径——cheapId 路径的 m 是主模型对象,四字段不属于
112
+ * cheap)时对 cost/maxTokens/contextWindow/reasoning 逐字段比对:worker.model 侧有值且与条目不一致 →
113
+ * **降级为冲突**(仍记 reuse 占位防重复草稿,但 apply 按 conflictedEntryNames 整条跳过进人工确认段;
114
+ * 不静默采用条目侧)。worker.model 侧缺值=退化存量,不算冲突(目录为前进方向真值)。 */
115
+ const tryReuse = (worker, m, hostKeyEnv, modelId, compareFields = false) => {
116
+ const e = existing.find((x) => x.id === modelId && (x.provider ?? "gateway") === (m.provider ?? "gateway") && (x.baseUrl ?? "") === (m.gatewayBaseUrl ?? ""));
117
+ if (!e)
118
+ return undefined;
119
+ if (compareFields) {
120
+ const diffs = [];
121
+ const fmt = (v) => (v === undefined ? "(unset)" : JSON.stringify(v));
122
+ if (m.cost !== undefined && JSON.stringify(m.cost) !== JSON.stringify(e.cost))
123
+ diffs.push(`cost ${fmt(m.cost)} ≠ ${fmt(e.cost)}`);
124
+ if (m.maxTokens !== undefined && m.maxTokens !== e.maxTokens)
125
+ diffs.push(`maxTokens ${fmt(m.maxTokens)} ≠ ${fmt(e.maxTokens)}`);
126
+ if (m.contextWindow !== undefined && m.contextWindow !== e.contextWindow)
127
+ diffs.push(`contextWindow ${fmt(m.contextWindow)} ≠ ${fmt(e.contextWindow)}`);
128
+ if (m.reasoning !== undefined && !!m.reasoning !== !!e.reasoning)
129
+ diffs.push(`reasoning ${fmt(!!m.reasoning)} ≠ ${fmt(!!e.reasoning)}`);
130
+ if (diffs.length) {
131
+ conflicts.push({ modelId, entryNames: [e.name], reason: `worker "${worker}" model 与既有条目 "${e.name}" 字段不一致(${diffs.join("; ")})— REUSE 降级为冲突,不静默采用,人工确认后再执行` });
132
+ report.push(`⚠️ conflict: worker "${worker}" model "${modelId}" vs catalog "${e.name}" — ${diffs.join("; ")}(REUSE 降级为冲突,人工确认)`);
133
+ }
134
+ }
135
+ let r = reuseByEntry.get(e.name);
136
+ if (!r) {
137
+ const backfill = e.apiKeyEnv ? undefined : canonicalModelKeyEnv(e.name);
138
+ r = { entryName: e.name, modelId, sourceWorkers: [], hostApiKeyEnv: hostKeyEnv, apiKeyEnvBackfill: backfill, containerApiKeyEnv: e.apiKeyEnv ?? backfill };
139
+ reuseByEntry.set(e.name, r);
140
+ reuses.push(r);
141
+ }
142
+ else if (r.hostApiKeyEnv !== hostKeyEnv) {
143
+ // 同一条目、不同宿主 key——接线单二义,人工裁决(不静默择一)。
144
+ conflicts.push({ modelId, entryNames: [e.name], reason: `existing entry "${e.name}" reused by workers with differing host apiKeyEnv ("${r.hostApiKeyEnv}" vs "${hostKeyEnv}") — wiring ambiguous, 人工确认后再执行` });
145
+ report.push(`⚠️ conflict: entry "${e.name}" host apiKeyEnv differs across workers ("${r.hostApiKeyEnv}" vs "${hostKeyEnv}" @ ${worker})`);
146
+ }
147
+ if (!r.sourceWorkers.includes(worker))
148
+ r.sourceWorkers.push(worker);
149
+ return r;
150
+ };
151
+ for (const w of workers) {
152
+ const m = w.model;
153
+ if (!m || !m.modelId)
154
+ continue;
155
+ const hostKeyEnv = w.secretRefs?.apiKeyEnv ?? "";
156
+ const mainReuse = tryReuse(w.name, m, hostKeyEnv, m.modelId, true);
157
+ const main = mainReuse ?? upsert(w.name, m, hostKeyEnv, m.modelId);
158
+ const mainName = mainReuse ? mainReuse.entryName : main.entry.name;
159
+ const mainKey = mainReuse ? mainReuse.containerApiKeyEnv : main.entry.apiKeyEnv;
160
+ report.push(mainReuse
161
+ ? `worker "${w.name}": model "${m.modelId}" → REUSE existing catalog "${mainName}" (apiKeyEnv ${hostKeyEnv || "(unset)"} → ${mainKey}${mainReuse.apiKeyEnvBackfill ? ", 回填条目 apiKeyEnv" : ""})`
162
+ : `worker "${w.name}": model "${m.modelId}" → catalog "${mainName}" (apiKeyEnv ${hostKeyEnv || "(unset)"} → ${mainKey})`);
163
+ let cheapName;
164
+ if (m.cheapId) {
165
+ const cheapReuse = tryReuse(w.name, m, hostKeyEnv, m.cheapId);
166
+ if (cheapReuse) {
167
+ cheapName = cheapReuse.entryName;
168
+ report.push(`worker "${w.name}": cheapId "${m.cheapId}" → REUSE existing catalog "${cheapName}" + roster cheapModel 标记(0.6.3)`);
169
+ }
170
+ else {
171
+ const cheap = upsert(w.name, m, hostKeyEnv, m.cheapId, { cheapOf: w.name });
172
+ cheapName = cheap.entry.name;
173
+ // 挂靠到主形草稿(定价真实)时不再误报"未定价";只有真·无价 cheap 草稿才提示人工补价。
174
+ report.push(cheap.entry.cost !== undefined
175
+ ? `worker "${w.name}": cheapId "${m.cheapId}" → catalog "${cheapName}"(挂靠既有草稿)+ roster cheapModel 标记(0.6.3)`
176
+ : `worker "${w.name}": cheapId "${m.cheapId}" → catalog "${cheapName}" + roster cheapModel 标记(0.6.3)⚠️ cheap 条目未定价(源数据无 cheap 独立价,不沿用主模型 cost),E3 落库前请人工核对补价`);
177
+ }
178
+ }
179
+ rosterActions.push({ worker: w.name, mainModel: mainName, cheapModel: cheapName });
180
+ }
181
+ // 0.6.4(C2a):容器内 env 名全局碰撞检测——canonicalModelKeyEnv 把非字母数字折叠成 "_"(foo-bar/foo_bar/
182
+ // foo.bar 同名),不同条目分到同一容器 env 名且**宿主 key 不同**时接线互踩(后写者被静默跳过)→ 冲突进
183
+ // 人工段。宿主 key 相同的碰撞无歧义(同值幂等,两模型共享一把 key 属合法形态),放行。
184
+ {
185
+ const byEnv = new Map();
186
+ const claim = (env, u) => {
187
+ const arr = byEnv.get(env);
188
+ if (arr)
189
+ arr.push(u);
190
+ else
191
+ byEnv.set(env, [u]);
192
+ };
193
+ for (const d of drafts)
194
+ claim(d.entry.apiKeyEnv, { entryName: d.entry.name, modelId: d.entry.id, hostKey: d.hostApiKeyEnv });
195
+ for (const r of reuses)
196
+ claim(r.containerApiKeyEnv, { entryName: r.entryName, modelId: r.modelId, hostKey: r.hostApiKeyEnv });
197
+ for (const [env, users] of byEnv) {
198
+ const names = [...new Set(users.map((u) => u.entryName))];
199
+ const hostKeys = [...new Set(users.map((u) => u.hostKey))];
200
+ if (names.length > 1 && hostKeys.length > 1) {
201
+ conflicts.push({ modelId: [...new Set(users.map((u) => u.modelId))].join(" / "), entryNames: names, reason: `container apiKeyEnv "${env}" 被多个条目占用 [${names.join(", ")}] 且宿主 key 不一致 [${hostKeys.join(", ")}] — 接线互踩,人工改条目名/apiKeyEnv 后再执行` });
202
+ report.push(`⚠️ conflict: container env "${env}" collision across entries [${names.join(", ")}] with differing host keys [${hostKeys.join(", ")}]`);
203
+ }
204
+ }
205
+ }
206
+ report.push(`plan: ${drafts.length} catalog draft(s), ${reuses.length} reuse(s), ${conflicts.length} conflict(s), ${rosterActions.length} worker roster action(s) — REPORT ONLY, nothing written (E3 executes after 人工确认).`);
207
+ return { drafts, conflicts, reuses, rosterActions, report };
208
+ }
209
+ /** roster 的"生效主模型"(标记优先,退回显式 roles.default 的 {model} 形)——find-or-assign 的匹配键。 */
210
+ const rosterEffPrimary = (r) => r.primaryModel ?? (r.roles?.default?.model);
211
+ const rosterEffCheap = (r) => r.cheapModel ?? (r.roles?.subagent?.model);
212
+ /**
213
+ * 执行迁移计划(§3②③;**不删 worker.model**——真删=0.7):
214
+ * 1. models:追加非冲突草稿(同名已存在=幂等跳过);复用条目缺 apiKeyEnv 时回填规范名。
215
+ * 2. rosters:有 roster 的 worker → 该 roster 落 primaryModel/cheapModel 标记(已设且不同=skip 报冲突;
216
+ * 标记模型不在 roster.models 子集时补进子集);无 roster 的 worker → 指认「生效主/cheap 相同」的既有
217
+ * roster,否则按主模型名新建。
218
+ * 3. workers:secretEnv 接线 {容器内 apiKeyEnv ← 宿主 secretRefs.apiKeyEnv}(已接/宿主名缺失=跳过)+
219
+ * 无 roster 的 worker 写入指认结果。
220
+ * 幂等:对自身输出重跑 changes=[]。冲突 modelId 关联的 rosterAction/接线整条跳过(人工确认段)。
221
+ */
222
+ export function applyModelMigrationPlan(plan, docs) {
223
+ const changes = [];
224
+ const skipped = [];
225
+ const models = { ...docs.models, models: docs.models.models.map((m) => ({ ...m })) };
226
+ const rosters = { ...docs.rosters, rosters: docs.rosters.rosters.map((r) => ({ ...r, models: r.models ? [...r.models] : r.models })) };
227
+ const workers = { ...docs.workers, workers: docs.workers.workers.map((w) => ({ ...w, secretEnv: w.secretEnv ? { ...w.secretEnv } : w.secretEnv })) };
228
+ const conflictedEntryNames = new Set(plan.conflicts.flatMap((c) => c.entryNames));
229
+ // 1a. 追加非冲突草稿
230
+ for (const d of plan.drafts) {
231
+ if (conflictedEntryNames.has(d.entry.name)) {
232
+ skipped.push(`draft "${d.entry.name}" (modelId "${d.entry.id}") — conflicted, 人工确认后再执行`);
233
+ continue;
234
+ }
235
+ if (models.models.some((m) => m.name === d.entry.name))
236
+ continue; // 幂等
237
+ models.models.push({ ...d.entry });
238
+ changes.push(`models: +"${d.entry.name}" (id ${d.entry.id}, apiKeyEnv ${d.entry.apiKeyEnv})`);
239
+ }
240
+ // 1b. 复用条目 apiKeyEnv 回填
241
+ for (const r of plan.reuses) {
242
+ if (conflictedEntryNames.has(r.entryName)) {
243
+ skipped.push(`reuse "${r.entryName}" — conflicted(字段不一致 / host apiKeyEnv 二义 / env 碰撞), 人工确认后再执行`);
244
+ continue;
245
+ }
246
+ const e = models.models.find((m) => m.name === r.entryName);
247
+ if (!e) {
248
+ skipped.push(`reuse "${r.entryName}" — entry no longer in catalog`);
249
+ continue;
250
+ }
251
+ if (r.apiKeyEnvBackfill && !e.apiKeyEnv) {
252
+ e.apiKeyEnv = r.apiKeyEnvBackfill;
253
+ changes.push(`models: "${r.entryName}" apiKeyEnv 回填 → ${r.apiKeyEnvBackfill}`);
254
+ }
255
+ }
256
+ const entryKey = (name) => {
257
+ const reuse = plan.reuses.find((x) => x.entryName === name);
258
+ if (reuse)
259
+ return reuse.containerApiKeyEnv;
260
+ const d = plan.drafts.find((x) => x.entry.name === name);
261
+ if (d)
262
+ return d.entry.apiKeyEnv;
263
+ return models.models.find((m) => m.name === name)?.apiKeyEnv;
264
+ };
265
+ const entryHostKey = (name) => plan.reuses.find((x) => x.entryName === name)?.hostApiKeyEnv ?? plan.drafts.find((x) => x.entry.name === name)?.hostApiKeyEnv;
266
+ const usedRosterNames = new Set(rosters.rosters.map((r) => r.name));
267
+ const claimRosterName = (base) => {
268
+ const b = base.toLowerCase().replace(/[^a-z0-9._-]+/g, "-").replace(/^[._-]+/, "") || "roster";
269
+ let name = /^[a-z0-9]/.test(b) ? b : `r-${b}`;
270
+ for (let i = 2; usedRosterNames.has(name); i++)
271
+ name = `${b}-${i}`;
272
+ usedRosterNames.add(name);
273
+ return name;
274
+ };
275
+ /** 标记落到 roster;若 roster.models 是非空子集且缺该模型名,补进子集(否则 PUT 校验拒)。 */
276
+ const setMarker = (r, field, model) => {
277
+ if (r[field] === model)
278
+ return;
279
+ if (r[field] && r[field] !== model) {
280
+ skipped.push(`roster "${r.name}" ${field} already "${r[field]}" ≠ "${model}" — 不覆盖,人工裁决`);
281
+ return;
282
+ }
283
+ r[field] = model;
284
+ if (r.models && r.models.length && !r.models.includes(model)) {
285
+ r.models.push(model);
286
+ changes.push(`rosters: "${r.name}" models += "${model}"(标记子集一致性)`);
287
+ }
288
+ changes.push(`rosters: "${r.name}" ${field} = "${model}"`);
289
+ };
290
+ // 2. roster 标记与指认:先处理已有 roster 的 worker(落标记),再给无 roster 的 worker 指认/新建
291
+ const actionable = plan.rosterActions.filter((a) => {
292
+ const bad = [a.mainModel, a.cheapModel].filter((n) => !!n).filter((n) => conflictedEntryNames.has(n));
293
+ if (bad.length) {
294
+ skipped.push(`worker "${a.worker}" roster action — 冲突条目 [${bad.join(", ")}], 人工确认后再执行`);
295
+ return false;
296
+ }
297
+ return true;
298
+ });
299
+ for (const a of actionable) {
300
+ const w = workers.workers.find((x) => x.name === a.worker);
301
+ if (!w?.roster)
302
+ continue;
303
+ const r = rosters.rosters.find((x) => x.name === w.roster);
304
+ if (!r) {
305
+ skipped.push(`worker "${a.worker}" → roster "${w.roster}" not found(dangling ref)`);
306
+ continue;
307
+ }
308
+ setMarker(r, "primaryModel", a.mainModel);
309
+ if (a.cheapModel)
310
+ setMarker(r, "cheapModel", a.cheapModel);
311
+ }
312
+ for (const a of actionable) {
313
+ const w = workers.workers.find((x) => x.name === a.worker);
314
+ if (!w || w.roster)
315
+ continue;
316
+ let target = rosters.rosters.find((r) => rosterEffPrimary(r) === a.mainModel && (a.cheapModel ? rosterEffCheap(r) === a.cheapModel : rosterEffCheap(r) === undefined));
317
+ // 次选:主模型相同、cheap 不冲突(目标无 cheap 而 roster 有)也可指认——worker 原本无 cheapId,roster 的 cheap 只多不少
318
+ target ??= a.cheapModel ? undefined : rosters.rosters.find((r) => rosterEffPrimary(r) === a.mainModel);
319
+ if (!target) {
320
+ const name = claimRosterName(a.mainModel);
321
+ target = { name, models: a.cheapModel ? [a.mainModel, a.cheapModel] : [a.mainModel], primaryModel: a.mainModel, ...(a.cheapModel ? { cheapModel: a.cheapModel } : {}) };
322
+ rosters.rosters.push(target);
323
+ changes.push(`rosters: +"${name}" (primaryModel "${a.mainModel}"${a.cheapModel ? `, cheapModel "${a.cheapModel}"` : ""})`);
324
+ }
325
+ else {
326
+ setMarker(target, "primaryModel", a.mainModel);
327
+ if (a.cheapModel)
328
+ setMarker(target, "cheapModel", a.cheapModel);
329
+ }
330
+ w.roster = target.name;
331
+ changes.push(`workers: "${w.name}" roster = "${target.name}"`);
332
+ }
333
+ // 3. secretEnv 接线:容器内 apiKeyEnv ← 宿主名(不动 worker.model;specHash 变化=滚动重建的触发点)
334
+ for (const a of actionable) {
335
+ const w = workers.workers.find((x) => x.name === a.worker);
336
+ if (!w)
337
+ continue;
338
+ for (const entryName of [a.mainModel, a.cheapModel].filter((n) => !!n)) {
339
+ const container = entryKey(entryName);
340
+ const host = entryHostKey(entryName);
341
+ if (!container) {
342
+ skipped.push(`worker "${a.worker}" wiring "${entryName}" — 条目无 apiKeyEnv,跳过`);
343
+ continue;
344
+ }
345
+ if (!host) {
346
+ skipped.push(`worker "${a.worker}" wiring "${entryName}" — 宿主 apiKeyEnv 缺失(secretRefs.apiKeyEnv 未设),跳过`);
347
+ continue;
348
+ }
349
+ if (RESERVED_WORKER_ENV.has(container)) {
350
+ skipped.push(`worker "${a.worker}" wiring "${entryName}" — 容器名 "${container}" 是保留键(schema 拒 secretEnv 设置),人工改条目 apiKeyEnv`);
351
+ continue;
352
+ }
353
+ const cur = w.secretEnv?.[container];
354
+ if (cur === host)
355
+ continue; // 已接同值(幂等)
356
+ // 0.6.4(C2b):现值≠期望宿主名 → 不再静默接受过时/错误映射,进人工确认段(也不覆盖——覆盖可能打断在用接线)。
357
+ if (cur !== undefined) {
358
+ skipped.push(`worker "${a.worker}" wiring "${entryName}" — secretEnv["${container}"] 现值 "${cur}" ≠ 期望宿主名 "${host}",不覆盖,人工确认`);
359
+ continue;
360
+ }
361
+ w.secretEnv = { ...(w.secretEnv ?? {}), [container]: host };
362
+ changes.push(`workers: "${w.name}" secretEnv["${container}"] = "${host}"(宿主名)`);
363
+ }
364
+ }
365
+ return { models, rosters, workers, changes, skipped };
366
+ }
367
+ // ── 4. 迁移 diff 白名单门(0.6.4, E3 双评审 C3)—— PURE:apply 前后三域对比,只放行迁移的预期改动 ──────
368
+ const sameJson = (a, b) => JSON.stringify(a ?? null) === JSON.stringify(b ?? null);
369
+ /**
370
+ * 迁移执行的**行为等价门**(C3,与 refIntegrityIssues 双门同点位):对 {@link applyModelMigrationPlan}
371
+ * 的前后三域做白名单式结构 diff——只允许迁移语义内的预期变更,任何意外漂移返回违规行(调用方 fail-closed
372
+ * 400,不落库)。白名单:
373
+ * - models:只许**新增**条目、既有条目只许 apiKeyEnv 从缺 → 有(回填);不许删、不许改其它字段。
374
+ * - rosters:只许新增 roster(且只带 name/models/primaryModel/cheapModel 四键);既有 roster 只许
375
+ * primaryModel/cheapModel 从缺 → 有、models 子集**追加**(且追加项必须是该 roster 的主/cheap 标记)。
376
+ * - workers:不许增删;每个 worker 只许 roster 从缺 → 有(指认)、secretEnv **添键且值严格匹配计划内
377
+ * (容器名 → 宿主名) 接线映射**(既有键不许动);其余键(含 model——真删=0.7)逐键必须不变。
378
+ * 空数组 = 通过。PURE,无 I/O。
379
+ */
380
+ export function migrationDiffViolations(plan, before, after) {
381
+ const v = [];
382
+ // 计划内接线映射:容器 env 名 → 允许的宿主名集合(drafts + reuses)。新增 secretEnv 键必须命中。
383
+ const expectedWiring = new Map();
384
+ const allow = (container, host) => {
385
+ const s = expectedWiring.get(container);
386
+ if (s)
387
+ s.add(host);
388
+ else
389
+ expectedWiring.set(container, new Set([host]));
390
+ };
391
+ for (const d of plan.drafts)
392
+ allow(d.entry.apiKeyEnv, d.hostApiKeyEnv);
393
+ for (const r of plan.reuses)
394
+ allow(r.containerApiKeyEnv, r.hostApiKeyEnv);
395
+ // models
396
+ {
397
+ const afterBy = new Map(after.models.models.map((m) => [m.name, m]));
398
+ for (const b of before.models.models) {
399
+ const a = afterBy.get(b.name);
400
+ if (!a) {
401
+ v.push(`models: 条目 "${b.name}" 被删除(迁移不许删)`);
402
+ continue;
403
+ }
404
+ for (const k of new Set([...Object.keys(b), ...Object.keys(a)])) {
405
+ if (k === "apiKeyEnv" && b.apiKeyEnv === undefined && typeof a.apiKeyEnv === "string")
406
+ continue; // 回填
407
+ if (!sameJson(b[k], a[k]))
408
+ v.push(`models: "${b.name}".${k} 意外变更(${JSON.stringify(b[k])} → ${JSON.stringify(a[k])})`);
409
+ }
410
+ }
411
+ }
412
+ // rosters
413
+ {
414
+ const beforeBy = new Map(before.rosters.rosters.map((r) => [r.name, r]));
415
+ const afterNames = new Set(after.rosters.rosters.map((r) => r.name));
416
+ for (const b of before.rosters.rosters)
417
+ if (!afterNames.has(b.name))
418
+ v.push(`rosters: "${b.name}" 被删除(迁移不许删)`);
419
+ for (const a of after.rosters.rosters) {
420
+ const b = beforeBy.get(a.name);
421
+ if (!b) {
422
+ const extra = Object.keys(a).filter((k) => !["name", "models", "primaryModel", "cheapModel"].includes(k));
423
+ if (extra.length)
424
+ v.push(`rosters: 新建 "${a.name}" 带白名单外键 [${extra.join(", ")}]`);
425
+ continue;
426
+ }
427
+ for (const k of new Set([...Object.keys(b), ...Object.keys(a)])) {
428
+ if ((k === "primaryModel" || k === "cheapModel") && b[k] === undefined && typeof a[k] === "string")
429
+ continue; // 落标记
430
+ if (k === "models" && Array.isArray(b.models) && Array.isArray(a.models)) {
431
+ const added = a.models.filter((m) => !b.models.includes(m));
432
+ const removed = b.models.filter((m) => !a.models.includes(m));
433
+ if (removed.length)
434
+ v.push(`rosters: "${a.name}".models 移除了 [${removed.join(", ")}](迁移只许追加)`);
435
+ for (const m of added)
436
+ if (m !== a.primaryModel && m !== a.cheapModel)
437
+ v.push(`rosters: "${a.name}".models 追加了非主/cheap 标记项 "${m}"`);
438
+ continue;
439
+ }
440
+ if (!sameJson(b[k], a[k]))
441
+ v.push(`rosters: "${a.name}".${k} 意外变更(${JSON.stringify(b[k])} → ${JSON.stringify(a[k])})`);
442
+ }
443
+ }
444
+ }
445
+ // workers
446
+ {
447
+ const afterBy = new Map(after.workers.workers.map((w) => [w.name, w]));
448
+ for (const a of after.workers.workers)
449
+ if (!before.workers.workers.some((b) => b.name === a.name))
450
+ v.push(`workers: 出现新增 worker "${a.name}"(迁移不建 worker)`);
451
+ for (const b of before.workers.workers) {
452
+ const a = afterBy.get(b.name);
453
+ if (!a) {
454
+ v.push(`workers: "${b.name}" 被删除(迁移不许删)`);
455
+ continue;
456
+ }
457
+ for (const k of new Set([...Object.keys(b), ...Object.keys(a)])) {
458
+ if (k === "roster" && b.roster === undefined && typeof a.roster === "string") {
459
+ if (!after.rosters.rosters.some((r) => r.name === a.roster))
460
+ v.push(`workers: "${b.name}".roster 指认了不存在的 roster "${a.roster}"`);
461
+ continue;
462
+ }
463
+ if (k === "secretEnv") {
464
+ const bs = b.secretEnv ?? {};
465
+ const as = a.secretEnv ?? {};
466
+ for (const key of Object.keys(bs))
467
+ if (as[key] !== bs[key])
468
+ v.push(`workers: "${b.name}".secretEnv["${key}"] 被改/删(${JSON.stringify(bs[key])} → ${JSON.stringify(as[key])};迁移只许添键)`);
469
+ for (const key of Object.keys(as)) {
470
+ if (key in bs)
471
+ continue;
472
+ if (!expectedWiring.get(key)?.has(as[key]))
473
+ v.push(`workers: "${b.name}".secretEnv["${key}"] = ${JSON.stringify(as[key])} 不在计划内接线映射(计划外漂移)`);
474
+ }
475
+ continue;
476
+ }
477
+ if (!sameJson(b[k], a[k]))
478
+ v.push(`workers: "${b.name}".${k} 意外变更(${JSON.stringify(b[k])} → ${JSON.stringify(a[k])})`);
479
+ }
480
+ }
481
+ }
482
+ return v;
483
+ }
484
+ /** 迁移合成模板的默认安全闸(拍板:多模型烧钱必须有闸——老 TeamDef 没有 budget 概念,迁移必须给一个;
485
+ * 调用方/admin 可再调)。 */
486
+ export const DEFAULT_COLLAB_BUDGET_TOKENS = 1_000_000;
487
+ /**
488
+ * teams → collab 存量迁移(EXPERT-REDESIGN §8-5):每个 TeamDef → star 模板。
489
+ * - members → "reviewer" 槽(cardinality "N")members[]:member.model(目录 name)→ modelRef;
490
+ * member.systemPrompt(+role 前缀)→ 成员级 rolePrompt。
491
+ * - `modelRole` 机制不入新形状(T1:只存目录引用或空)——带 modelRole 无 model 的成员迁为 modelRef 空
492
+ * (=跟随用户当前模型),丢弃记录进 report。
493
+ * - synthesizer → 独立 "synthesizer" 槽 + finalizer {type:"summarize", slot};无 synthesizer →
494
+ * finalizer {type:"summarize"}(runTeamDiscussion 的缺省综合行为)。
495
+ * - rounds 保留为 rounds.max;scenario → 迁移报告(工具展开需 scenario 定义,人工在槽位 tools 落地);
496
+ * maxTranscriptTokens/无 budget → budget.maxTokens 兜底 {@link DEFAULT_COLLAB_BUDGET_TOKENS}。
497
+ * 幂等:纯函数,同输入同输出;name 冲突由调用方 parseDomain 的 id 去重校验兜底(team name 本就唯一)。
498
+ */
499
+ export function migrateTeamsToCollab(rawTeams) {
500
+ const report = [];
501
+ const teams = (rawTeams !== null && typeof rawTeams === "object" && Array.isArray(rawTeams.teams))
502
+ ? (rawTeams.teams)
503
+ : [];
504
+ const templates = teams.map((t) => {
505
+ const members = (t.members ?? []).map((m) => {
506
+ if (!m.model && m.modelRole)
507
+ report.push(`team "${t.name}" member "${m.role}": modelRole "${m.modelRole}" 不入新形状(T1)→ modelRef 空=跟随用户当前模型`);
508
+ return {
509
+ ...(m.model ? { modelRef: m.model } : {}),
510
+ ...(m.systemPrompt ? { rolePrompt: `[${m.role}] ${m.systemPrompt}`.slice(0, 2000) } : { rolePrompt: `[${m.role}]` }),
511
+ };
512
+ });
513
+ const slots = [{ id: "reviewer", cardinality: "N", members }];
514
+ let finalizer = { type: "summarize" };
515
+ if (t.synthesizer) {
516
+ const s = t.synthesizer;
517
+ if (!s.model && s.modelRole)
518
+ report.push(`team "${t.name}" synthesizer: modelRole "${s.modelRole}" 不入新形状(T1)→ modelRef 空`);
519
+ slots.push({ id: "synthesizer", cardinality: 1, members: [{ ...(s.model ? { modelRef: s.model } : {}), ...(s.systemPrompt ? { rolePrompt: s.systemPrompt.slice(0, 2000) } : {}) }] });
520
+ finalizer = { type: "summarize", slot: "synthesizer" };
521
+ }
522
+ if (t.scenario)
523
+ report.push(`team "${t.name}": scenario "${t.scenario}" → 槽位 tools 需人工展开(工具集定义在 scenarios 域,迁移不解析)`);
524
+ report.push(`team "${t.name}" → collab star 模板 "${t.name}"(${members.length} member(s), rounds.max=${t.rounds ?? 2}, budget.maxTokens=${t.maxTranscriptTokens ?? DEFAULT_COLLAB_BUDGET_TOKENS})`);
525
+ return {
526
+ id: t.name,
527
+ name: t.name,
528
+ description: t.notes,
529
+ topology: "star",
530
+ slots,
531
+ rounds: { max: t.rounds ?? 2 },
532
+ finalizer,
533
+ sharedContext: { kind: "transcript", persistence: "session" },
534
+ budget: { maxTokens: t.maxTranscriptTokens ?? DEFAULT_COLLAB_BUDGET_TOKENS },
535
+ enabled: t.enabled ?? true,
536
+ ...(t.notes ? { notes: t.notes } : {}),
537
+ };
538
+ });
539
+ if (!teams.length)
540
+ report.push("no legacy teams — nothing to migrate.");
541
+ return { collab: { templates }, report };
542
+ }
543
+ //# sourceMappingURL=migrate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrate.js","sourceRoot":"","sources":["../src/migrate.ts"],"names":[],"mappings":"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"}
package/dist/node.d.ts ADDED
@@ -0,0 +1,12 @@
1
+ /**
2
+ * @sema-ai/registry-core/node — the Node-only entry. These helpers read/write `config.d/<domain>.json`
3
+ * over the real filesystem (`node:fs`/`node:path`), so they are split out of the main barrel: a browser or
4
+ * client bundle that only needs the pure contract (zod types, hash, roster resolution, ref-integrity) must
5
+ * not transitively pull `node:fs`. The TOC desktop/CLI + any server-side file source imports them here.
6
+ */
7
+ export * from "./file-store.js";
8
+ export * from "./file-edit.js";
9
+ export * from "./bundle.js";
10
+ export * from "./local-load.js";
11
+ export * from "./scheduler-store-node.js";
12
+ //# sourceMappingURL=node.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,2BAA2B,CAAC"}
package/dist/node.js ADDED
@@ -0,0 +1,12 @@
1
+ /**
2
+ * @sema-ai/registry-core/node — the Node-only entry. These helpers read/write `config.d/<domain>.json`
3
+ * over the real filesystem (`node:fs`/`node:path`), so they are split out of the main barrel: a browser or
4
+ * client bundle that only needs the pure contract (zod types, hash, roster resolution, ref-integrity) must
5
+ * not transitively pull `node:fs`. The TOC desktop/CLI + any server-side file source imports them here.
6
+ */
7
+ export * from "./file-store.js";
8
+ export * from "./file-edit.js";
9
+ export * from "./bundle.js";
10
+ export * from "./local-load.js";
11
+ export * from "./scheduler-store-node.js"; // R7 self-wake scheduler store — fs binding of the ./scheduler-store contract
12
+ //# sourceMappingURL=node.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node.js","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,2BAA2B,CAAC,CAAC,8EAA8E"}