@sema-agent/settings-schema 11.0.0 → 11.2.0

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 (47) hide show
  1. package/CHANGELOG.md +148 -1
  2. package/README.md +17 -3
  3. package/bin/settings-schema.mjs +7 -20
  4. package/conformance/VERSION +1 -1
  5. package/conformance/cases/c06-legacy-governance-lift/expected.json +1 -1
  6. package/conformance/cases/c20-governance-absent-lifts/expected.json +1 -1
  7. package/conformance/cases/c67-s784-retired-field-loud/meta.json +1 -1
  8. package/dist/atomic-write.d.ts +14 -0
  9. package/dist/atomic-write.js +90 -0
  10. package/dist/cli.d.ts +31 -6
  11. package/dist/cli.js +50 -124
  12. package/dist/config-dir-io.d.ts +2 -0
  13. package/dist/config-dir-io.js +13 -0
  14. package/dist/config-dir-migration.d.ts +64 -0
  15. package/dist/config-dir-migration.js +167 -0
  16. package/dist/file-edit.d.ts +3 -3
  17. package/dist/file-edit.js +6 -16
  18. package/dist/file-store.js +1 -1
  19. package/dist/index.d.ts +1 -0
  20. package/dist/index.js +1 -0
  21. package/dist/local-load.d.ts +1 -1
  22. package/dist/local-load.js +4 -14
  23. package/dist/node.d.ts +2 -0
  24. package/dist/node.js +3 -0
  25. package/dist/one-time-migrations.d.ts +6 -0
  26. package/dist/one-time-migrations.js +12 -2
  27. package/dist/previous-web-admin-env.d.ts +15 -0
  28. package/dist/previous-web-admin-env.js +20 -0
  29. package/dist/remote-exec.js +3 -3
  30. package/dist/retired-envs.js +13 -2
  31. package/dist/retired-form.d.ts +7 -2
  32. package/dist/retired-form.js +11 -3
  33. package/dist/runtime-lift-targets.d.ts +7 -0
  34. package/dist/runtime-lift-targets.js +7 -0
  35. package/dist/scheduler-store-node.d.ts +4 -3
  36. package/dist/scheduler-store-node.js +7 -8
  37. package/dist/shell-quote.d.ts +1 -0
  38. package/dist/shell-quote.js +14 -0
  39. package/dist/types.d.ts +9 -1
  40. package/dist/types.js +71 -18
  41. package/dist/web-admin-credential.d.ts +1 -1
  42. package/dist/web-admin-credential.js +3 -3
  43. package/dist/web-admin-env.d.ts +2 -1
  44. package/dist/web-admin-env.js +2 -1
  45. package/dist/web-admin-session-url.d.ts +17 -0
  46. package/dist/web-admin-session-url.js +64 -0
  47. package/package.json +1 -1
@@ -0,0 +1,64 @@
1
+ /**
2
+ * web-admin 里**一个会话的网页链接**:模板函数 {@link webAdminSessionUrl} 与它的配对解析 {@link parseWebAdminSessionUrl} —— 一处定义路由与参数名
3
+ * (纯函数、零 I/O,浏览器安全)。链接形:
4
+ *
5
+ * <webBaseUrl>/chat?agent=<worker>&session=<sessionId>
6
+ *
7
+ * 路由属于 web-admin(聊天页只读 `agent` 与 `session` 两个查询参数);谁要给用户一个会话链接 —— 壳、客户端、服务端文档 —— 调模板函数,不按地址形手拼。
8
+ * 聊天页读写地址栏改读配对解析,于是路径和参数名只有这一份。
9
+ *
10
+ * **两位都必填**:只带 `session` 的链接不够 —— 缺 `agent` 时页面按「URL > 本机记住的 > 第一个在线」挑 worker,再去那一台的会话里找这个 id,
11
+ * 会话不在那一台上就落空。所以模板函数拒绝铸只带一位的链接;解析却**宽读**(旧链接、手输的链接可能缺 `agent`),缺的那一位就是缺席。
12
+ * 链接没有 scope 位(跨空间深链不在这一形里);日后加 scope 时作可选第三位、同一函数,不另开函数。
13
+ */
14
+ import { httpUrlFlaws, httpUrlRule } from "./url-shape.js";
15
+ /** 链接的路径与两个参数名 —— 本文件私有,唯一一处。 */
16
+ const SESSION_LINK_PATH = "/chat";
17
+ const WORKER_PARAM = "agent";
18
+ const SESSION_PARAM = "session";
19
+ function requiredPart(label, value) {
20
+ if (typeof value !== "string" || value.length === 0)
21
+ throw new TypeError(`webAdminSessionUrl: ${label} is required (a non-empty string) — a session link without it cannot be opened`);
22
+ return value;
23
+ }
24
+ /**
25
+ * 铸一个会话的绝对网页链接。`webBaseUrl` 必须是干净的绝对 http(s) 基址(无 userinfo / query / fragment;可带路径前缀;尾斜杠折掉);
26
+ * `worker` 与 `sessionId` 必填,逐位 `encodeURIComponent`(含 `&` `#` `=` `?` 的 id 不会串位)。坏输入一律抛,不铸半截链接;
27
+ * 含孤立代理项的串(坏 UTF-16)由 `encodeURIComponent` 抛 `URIError`,不静默替换。
28
+ */
29
+ export function webAdminSessionUrl(webBaseUrl, target) {
30
+ if (typeof webBaseUrl !== "string")
31
+ throw new TypeError("webAdminSessionUrl: webBaseUrl must be a string (an absolute http(s) URL)");
32
+ const flaws = httpUrlFlaws(webBaseUrl, ["userinfo", "query", "fragment"]);
33
+ if (flaws.length > 0)
34
+ throw new TypeError(`webAdminSessionUrl: webBaseUrl ${httpUrlRule(flaws[0])}`);
35
+ const worker = requiredPart("worker", target?.worker);
36
+ const sessionId = requiredPart("sessionId", target?.sessionId);
37
+ const base = new URL(webBaseUrl).href.replace(/\/+$/, ""); // 解析后的规范形:没有 query / fragment(上面已判),尾斜杠折掉
38
+ return `${base}${SESSION_LINK_PATH}?${WORKER_PARAM}=${encodeURIComponent(worker)}&${SESSION_PARAM}=${encodeURIComponent(sessionId)}`;
39
+ }
40
+ /**
41
+ * {@link webAdminSessionUrl} 的配对解析:从一个链接读回 `worker` / `sessionId`。输入可以是绝对 URL 串、相对串(`/chat?…`)、`URL` 或
42
+ * `URLSearchParams`(聊天页读当前地址栏的形)。**宽读**:缺的那一位不出现在结果里(空值等于缺席);重复参数取第一个(同 `searchParams.get`);
43
+ * 路径与别的查询参数不看。串解析不出来(不是 URL)⇒ 抛 `TypeError`,不静默当成「没有参数」。
44
+ */
45
+ export function parseWebAdminSessionUrl(link) {
46
+ let params;
47
+ if (link instanceof URLSearchParams)
48
+ params = link;
49
+ else if (link instanceof URL)
50
+ params = link.searchParams;
51
+ else {
52
+ if (typeof link !== "string" || !URL.canParse(link, "http://relative.invalid"))
53
+ throw new TypeError("parseWebAdminSessionUrl: link is not a URL (pass an absolute URL, a relative `/chat?…` string, a URL or URLSearchParams)");
54
+ params = new URL(link, "http://relative.invalid").searchParams;
55
+ }
56
+ const out = {};
57
+ const worker = params.get(WORKER_PARAM);
58
+ const sessionId = params.get(SESSION_PARAM);
59
+ if (worker !== null && worker !== "")
60
+ out.worker = worker;
61
+ if (sessionId !== null && sessionId !== "")
62
+ out.sessionId = sessionId;
63
+ return out;
64
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sema-agent/settings-schema",
3
- "version": "11.0.0",
3
+ "version": "11.2.0",
4
4
  "description": "Sema settings schema — pure config contract (zod domains + effective-config + roster resolution + ref-integrity + remoteExec) shared by sema-web-admin, sema-server, and the TOC desktop/CLI. One source of truth. (Renamed at 1.0.0 from @sema-agent/registry-core — name and docs only, no behavior change; note the range moves 0.19.0 -> 1.0.0, so a dependency must become ^1.0.0. The old names @sema-agent/registry-core <=0.19.0 and @sema-ai/registry-core remain published, frozen, for migration.)",
5
5
  "type": "module",
6
6
  "license": "BUSL-1.1",