@coralai/sps-cli 0.65.61 → 0.65.63

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 (39) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/dist/commands/projectInit.d.ts.map +1 -1
  3. package/dist/commands/projectInit.js +8 -12
  4. package/dist/commands/projectInit.js.map +1 -1
  5. package/dist/console/index.js +4 -3
  6. package/dist/console/index.js.map +1 -1
  7. package/dist/console/routes/chat.d.ts.map +1 -1
  8. package/dist/console/routes/chat.js +7 -5
  9. package/dist/console/routes/chat.js.map +1 -1
  10. package/dist/console/routes/preview.d.ts +2 -0
  11. package/dist/console/routes/preview.d.ts.map +1 -1
  12. package/dist/console/routes/preview.js +7 -0
  13. package/dist/console/routes/preview.js.map +1 -1
  14. package/dist/core/agents/configureProjectAgent.d.ts +43 -0
  15. package/dist/core/agents/configureProjectAgent.d.ts.map +1 -0
  16. package/dist/core/agents/configureProjectAgent.js +82 -0
  17. package/dist/core/agents/configureProjectAgent.js.map +1 -0
  18. package/dist/core/agents/modelSettingsFile.d.ts +7 -0
  19. package/dist/core/agents/modelSettingsFile.d.ts.map +1 -1
  20. package/dist/core/agents/modelSettingsFile.js +37 -5
  21. package/dist/core/agents/modelSettingsFile.js.map +1 -1
  22. package/dist/core/agents/workerModelEnv.d.ts +17 -0
  23. package/dist/core/agents/workerModelEnv.d.ts.map +1 -1
  24. package/dist/core/agents/workerModelEnv.js +25 -13
  25. package/dist/core/agents/workerModelEnv.js.map +1 -1
  26. package/dist/core/skills/configure.d.ts +25 -0
  27. package/dist/core/skills/configure.d.ts.map +1 -0
  28. package/dist/core/skills/configure.js +36 -0
  29. package/dist/core/skills/configure.js.map +1 -0
  30. package/dist/core/skills/index.d.ts +1 -0
  31. package/dist/core/skills/index.d.ts.map +1 -1
  32. package/dist/core/skills/index.js +1 -0
  33. package/dist/core/skills/index.js.map +1 -1
  34. package/dist/server.d.ts +3 -0
  35. package/dist/server.d.ts.map +1 -1
  36. package/dist/server.js +6 -0
  37. package/dist/server.js.map +1 -1
  38. package/package.json +1 -1
  39. package/skills/registry.yaml +6 -0
@@ -10,7 +10,7 @@
10
10
  */
11
11
  import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
12
12
  import { resolve } from 'node:path';
13
- import { resolveWorkerModelEnv } from './workerModelEnv.js';
13
+ import { resolveWorkerModelEnv, workerModelEnvFor } from './workerModelEnv.js';
14
14
  /** 读取 cwd 的 settings.local.json 中显式指定的模型。其它配置(如 permissions)不算模型配置。 */
15
15
  export function readModelSettingsFile(dir) {
16
16
  const settingsPath = resolve(dir, '.claude', 'settings.local.json');
@@ -33,7 +33,32 @@ export function readModelSettingsFile(dir) {
33
33
  * @returns 是否写入
34
34
  */
35
35
  export function writeModelSettingsFile(dir, model, providerId) {
36
- const env = resolveWorkerModelEnv(model, providerId);
36
+ return mergeModelSettings(dir, model, resolveWorkerModelEnv(model, providerId));
37
+ }
38
+ /**
39
+ * 同上,但 **端点由调用方直接给**(不查全局注册表)。
40
+ * 用于临时签发的端点(如平台网关:每用户每任务一个 baseUrl + 轮换 token),
41
+ * 它们进不了 providers.json —— 此前平台因此自己拼这个文件,属于越界。
42
+ */
43
+ export function writeModelSettingsFileFor(dir, model, provider, extraEnv) {
44
+ return mergeModelSettings(dir, model, { ...workerModelEnvFor(model, provider), ...(extraEnv ?? {}) });
45
+ }
46
+ /**
47
+ * sps 自己管的端点 env 键。**换回官方端点时必须清掉残留**,否则 worker 仍打旧的第三方
48
+ * baseUrl(合并写入的固有坑;此前平台整体覆盖文件正是为了绕开它)。
49
+ * provider 的 extraEnv 键不可预知,不在清理范围。
50
+ */
51
+ const ENDPOINT_ENV_KEYS = [
52
+ 'ANTHROPIC_BASE_URL',
53
+ 'ANTHROPIC_AUTH_TOKEN',
54
+ 'ANTHROPIC_DEFAULT_HAIKU_MODEL',
55
+ 'ANTHROPIC_DEFAULT_SONNET_MODEL',
56
+ 'ANTHROPIC_DEFAULT_OPUS_MODEL',
57
+ 'ANTHROPIC_SMALL_FAST_MODEL',
58
+ 'CLAUDE_CODE_ATTRIBUTION_HEADER',
59
+ ];
60
+ /** 合并写 `<dir>/.claude/settings.local.json`(两个入口共用);model 与 env 皆空 → 不写。 */
61
+ function mergeModelSettings(dir, model, env) {
37
62
  const m = model?.trim();
38
63
  if (!m && Object.keys(env).length === 0)
39
64
  return false;
@@ -53,9 +78,16 @@ export function writeModelSettingsFile(dir, model, providerId) {
53
78
  const merged = { ...existing };
54
79
  if (m)
55
80
  merged.model = m;
56
- if (Object.keys(env).length) {
57
- merged.env = { ...existing.env, ...env };
58
- }
81
+ const prevEnv = existing.env ?? {};
82
+ const nextEnv = { ...prevEnv, ...env };
83
+ // 本次没给的端点键 = 已切走(如换回官方)→ 清掉,别留残留指向旧端点。
84
+ for (const k of ENDPOINT_ENV_KEYS)
85
+ if (!(k in env))
86
+ delete nextEnv[k];
87
+ if (Object.keys(nextEnv).length)
88
+ merged.env = nextEnv;
89
+ else
90
+ delete merged.env;
59
91
  writeFileSync(settingsPath, JSON.stringify(merged, null, 2) + '\n');
60
92
  return true;
61
93
  }
@@ -1 +1 @@
1
- {"version":3,"file":"modelSettingsFile.js","sourceRoot":"","sources":["../../../src/core/agents/modelSettingsFile.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAE5D,uEAAuE;AACvE,MAAM,UAAU,qBAAqB,CAAC,GAAW;IAC/C,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,EAAE,SAAS,EAAE,qBAAqB,CAAC,CAAC;IACpE,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC;QAAE,OAAO,SAAS,CAAC;IAChD,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAwB,CAAC;QACxF,OAAO,OAAO,QAAQ,CAAC,KAAK,KAAK,QAAQ,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC;YAC3E,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE;YACvB,CAAC,CAAC,SAAS,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,sBAAsB,CACpC,GAAW,EACX,KAAyB,EACzB,UAA8B;IAE9B,MAAM,GAAG,GAAG,qBAAqB,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;IACrD,MAAM,CAAC,GAAG,KAAK,EAAE,IAAI,EAAE,CAAC;IACxB,IAAI,CAAC,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAEtD,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;IAC1C,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;QAAE,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACtE,MAAM,YAAY,GAAG,OAAO,CAAC,SAAS,EAAE,qBAAqB,CAAC,CAAC;IAC/D,IAAI,QAAQ,GAA4B,EAAE,CAAC;IAC3C,IAAI,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAC7B,IAAI,CAAC;YACH,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAA4B,CAAC;QACxF,CAAC;QAAC,MAAM,CAAC;YACP,QAAQ,GAAG,EAAE,CAAC,CAAC,WAAW;QAC5B,CAAC;IACH,CAAC;IACD,MAAM,MAAM,GAA4B,EAAE,GAAG,QAAQ,EAAE,CAAC;IACxD,IAAI,CAAC;QAAE,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC;IACxB,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC;QAC5B,MAAM,CAAC,GAAG,GAAG,EAAE,GAAI,QAAQ,CAAC,GAA2C,EAAE,GAAG,GAAG,EAAE,CAAC;IACpF,CAAC;IACD,aAAa,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IACpE,OAAO,IAAI,CAAC;AACd,CAAC"}
1
+ {"version":3,"file":"modelSettingsFile.js","sourceRoot":"","sources":["../../../src/core/agents/modelSettingsFile.ts"],"names":[],"mappings":"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"}
@@ -8,4 +8,21 @@
8
8
  * 空对象 = 无需注入(既没 model 也没自定义端点)。
9
9
  */
10
10
  export declare function resolveWorkerModelEnv(model?: string, providerId?: string): Record<string, string>;
11
+ /** 端点信息已在手时用这个(不查注册表)。 */
12
+ export interface InlineWorkerProvider {
13
+ baseUrl?: string;
14
+ apiKey?: string;
15
+ /** 平台特殊 env(OpenRouter / claude-api 等),原样并入。 */
16
+ extraEnv?: Record<string, unknown>;
17
+ }
18
+ /**
19
+ * 同 `resolveWorkerModelEnv`,但 **provider 由调用方直接给**,不经全局注册表。
20
+ *
21
+ * 存在的理由:平台(gameforge)的 coral 网关端点是**每用户每任务临时签发**的
22
+ * (baseUrl + 轮换 token),不可能落进全局 providers.json;此前平台因此自己拼
23
+ * `.claude/settings.local.json` —— 那是 claude 专属落地方式写进了应用层。
24
+ *
25
+ * `provider` 省略 = 官方订阅端点(只设 `ANTHROPIC_MODEL`)。
26
+ */
27
+ export declare function workerModelEnvFor(model?: string, provider?: InlineWorkerProvider): Record<string, string>;
11
28
  //# sourceMappingURL=workerModelEnv.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"workerModelEnv.d.ts","sourceRoot":"","sources":["../../../src/core/agents/workerModelEnv.ts"],"names":[],"mappings":"AAWA;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,CAAC,EAAE,MAAM,EACd,UAAU,CAAC,EAAE,MAAM,GAClB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAwCxB"}
1
+ {"version":3,"file":"workerModelEnv.d.ts","sourceRoot":"","sources":["../../../src/core/agents/workerModelEnv.ts"],"names":[],"mappings":"AAWA;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,CAAC,EAAE,MAAM,EACd,UAAU,CAAC,EAAE,MAAM,GAClB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAMxB;AAED,0BAA0B;AAC1B,MAAM,WAAW,oBAAoB;IACnC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gDAAgD;IAChD,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,CAAC,EAAE,MAAM,EACd,QAAQ,CAAC,EAAE,oBAAoB,GAC9B,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAqCxB"}
@@ -18,16 +18,30 @@ import { getProvider } from '../../providers/llm/providers.js';
18
18
  * 空对象 = 无需注入(既没 model 也没自定义端点)。
19
19
  */
20
20
  export function resolveWorkerModelEnv(model, providerId) {
21
+ const pid = providerId?.trim();
22
+ // pid 空 / 'official' → 官方订阅端点(只设 model);否则第三方模式。
23
+ // 🔴 查不到 provider 也仍算第三方(传 `{}`)—— 保持原行为:归因头与默认模型变量照设。
24
+ const thirdParty = Boolean(pid && pid !== 'official');
25
+ return workerModelEnvFor(model, thirdParty ? getProvider(pid) ?? {} : undefined);
26
+ }
27
+ /**
28
+ * 同 `resolveWorkerModelEnv`,但 **provider 由调用方直接给**,不经全局注册表。
29
+ *
30
+ * 存在的理由:平台(gameforge)的 coral 网关端点是**每用户每任务临时签发**的
31
+ * (baseUrl + 轮换 token),不可能落进全局 providers.json;此前平台因此自己拼
32
+ * `.claude/settings.local.json` —— 那是 claude 专属落地方式写进了应用层。
33
+ *
34
+ * `provider` 省略 = 官方订阅端点(只设 `ANTHROPIC_MODEL`)。
35
+ */
36
+ export function workerModelEnvFor(model, provider) {
21
37
  const env = {};
22
38
  const m = model?.trim();
23
39
  if (m)
24
40
  env.ANTHROPIC_MODEL = m;
25
- const pid = providerId?.trim();
26
- if (pid && pid !== 'official') {
27
- const provider = getProvider(pid);
28
- if (provider?.baseUrl)
41
+ if (provider) {
42
+ if (provider.baseUrl)
29
43
  env.ANTHROPIC_BASE_URL = provider.baseUrl;
30
- if (provider?.baseUrl) {
44
+ if (provider.baseUrl) {
31
45
  // 第三方端点必须覆盖用户级 Claude settings 中可能残留的官方/其它 provider 凭据。
32
46
  // Ollama 等无鉴权端点也给占位 token,避免 Claude Code 回退读取用户级 token。
33
47
  env.ANTHROPIC_AUTH_TOKEN = provider.apiKey || 'sps-local';
@@ -41,20 +55,18 @@ export function resolveWorkerModelEnv(model, providerId) {
41
55
  }
42
56
  // 平台特殊 env(如 OpenRouter 需 ANTHROPIC_API_KEY='' 避免与 AUTH_TOKEN 冲突;
43
57
  // claude-api 把 key 放 ANTHROPIC_API_KEY)。存在 provider.extraEnv 才并入。
44
- const extra = provider?.extraEnv;
58
+ const extra = provider.extraEnv;
45
59
  if (extra && typeof extra === 'object') {
46
60
  for (const [k, v] of Object.entries(extra)) {
47
61
  if (typeof v === 'string')
48
62
  env[k] = v;
49
63
  }
50
64
  }
51
- }
52
- // 第三方 anthropic 兼容端点 关掉逐请求变化的归因头。
53
- // Claude Code 2.1.x 把 `x-anthropic-billing-header`(含每请求都变的 cc_prev_req)作为一段
54
- // 系统提示词注入;第三方 API 会把它算进 prompt-cache key 每次 key 不同 → 缓存命中率归零、
55
- // token 暴涨、变慢。设 CLAUDE_CODE_ATTRIBUTION_HEADER=0 让 Claude Code 不注入该段。
56
- // 官方 claude 订阅端点(pid 空 / 'official')无此问题,故仅第三方时注入。
57
- if (pid && pid !== 'official') {
65
+ // 第三方 anthropic 兼容端点 → 关掉逐请求变化的归因头。
66
+ // Claude Code 2.1.x `x-anthropic-billing-header`(含每请求都变的 cc_prev_req)作为一段
67
+ // 系统提示词注入;第三方 API 会把它算进 prompt-cache key → 每次 key 不同 → 缓存命中率归零、
68
+ // token 暴涨、变慢。设 CLAUDE_CODE_ATTRIBUTION_HEADER=0 Claude Code 不注入该段。
69
+ // 官方 claude 订阅端点无此问题,故仅第三方时注入。
58
70
  env.CLAUDE_CODE_ATTRIBUTION_HEADER = '0';
59
71
  }
60
72
  return env;
@@ -1 +1 @@
1
- {"version":3,"file":"workerModelEnv.js","sourceRoot":"","sources":["../../../src/core/agents/workerModelEnv.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAE/D;;;;;;;;GAQG;AACH,MAAM,UAAU,qBAAqB,CACnC,KAAc,EACd,UAAmB;IAEnB,MAAM,GAAG,GAA2B,EAAE,CAAC;IACvC,MAAM,CAAC,GAAG,KAAK,EAAE,IAAI,EAAE,CAAC;IACxB,IAAI,CAAC;QAAE,GAAG,CAAC,eAAe,GAAG,CAAC,CAAC;IAE/B,MAAM,GAAG,GAAG,UAAU,EAAE,IAAI,EAAE,CAAC;IAC/B,IAAI,GAAG,IAAI,GAAG,KAAK,UAAU,EAAE,CAAC;QAC9B,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;QAClC,IAAI,QAAQ,EAAE,OAAO;YAAE,GAAG,CAAC,kBAAkB,GAAG,QAAQ,CAAC,OAAO,CAAC;QACjE,IAAI,QAAQ,EAAE,OAAO,EAAE,CAAC;YACtB,wDAAwD;YACxD,wDAAwD;YACxD,GAAG,CAAC,oBAAoB,GAAG,QAAQ,CAAC,MAAM,IAAI,WAAW,CAAC;QAC5D,CAAC;QACD,IAAI,CAAC,EAAE,CAAC;YACN,4DAA4D;YAC5D,GAAG,CAAC,6BAA6B,GAAG,CAAC,CAAC;YACtC,GAAG,CAAC,8BAA8B,GAAG,CAAC,CAAC;YACvC,GAAG,CAAC,4BAA4B,GAAG,CAAC,CAAC;YACrC,GAAG,CAAC,0BAA0B,GAAG,CAAC,CAAC;QACrC,CAAC;QACD,kEAAkE;QAClE,kEAAkE;QAClE,MAAM,KAAK,GAAI,QAA+C,EAAE,QAAQ,CAAC;QACzE,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YACvC,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAgC,CAAC,EAAE,CAAC;gBACtE,IAAI,OAAO,CAAC,KAAK,QAAQ;oBAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YACxC,CAAC;QACH,CAAC;IACH,CAAC;IAED,oCAAoC;IACpC,4EAA4E;IAC5E,gEAAgE;IAChE,sEAAsE;IACtE,mDAAmD;IACnD,IAAI,GAAG,IAAI,GAAG,KAAK,UAAU,EAAE,CAAC;QAC9B,GAAG,CAAC,8BAA8B,GAAG,GAAG,CAAC;IAC3C,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
1
+ {"version":3,"file":"workerModelEnv.js","sourceRoot":"","sources":["../../../src/core/agents/workerModelEnv.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAE/D;;;;;;;;GAQG;AACH,MAAM,UAAU,qBAAqB,CACnC,KAAc,EACd,UAAmB;IAEnB,MAAM,GAAG,GAAG,UAAU,EAAE,IAAI,EAAE,CAAC;IAC/B,iDAAiD;IACjD,uDAAuD;IACvD,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,IAAI,GAAG,KAAK,UAAU,CAAC,CAAC;IACtD,OAAO,iBAAiB,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC,GAAa,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;AAC7F,CAAC;AAUD;;;;;;;;GAQG;AACH,MAAM,UAAU,iBAAiB,CAC/B,KAAc,EACd,QAA+B;IAE/B,MAAM,GAAG,GAA2B,EAAE,CAAC;IACvC,MAAM,CAAC,GAAG,KAAK,EAAE,IAAI,EAAE,CAAC;IACxB,IAAI,CAAC;QAAE,GAAG,CAAC,eAAe,GAAG,CAAC,CAAC;IAE/B,IAAI,QAAQ,EAAE,CAAC;QACb,IAAI,QAAQ,CAAC,OAAO;YAAE,GAAG,CAAC,kBAAkB,GAAG,QAAQ,CAAC,OAAO,CAAC;QAChE,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;YACrB,wDAAwD;YACxD,wDAAwD;YACxD,GAAG,CAAC,oBAAoB,GAAG,QAAQ,CAAC,MAAM,IAAI,WAAW,CAAC;QAC5D,CAAC;QACD,IAAI,CAAC,EAAE,CAAC;YACN,4DAA4D;YAC5D,GAAG,CAAC,6BAA6B,GAAG,CAAC,CAAC;YACtC,GAAG,CAAC,8BAA8B,GAAG,CAAC,CAAC;YACvC,GAAG,CAAC,4BAA4B,GAAG,CAAC,CAAC;YACrC,GAAG,CAAC,0BAA0B,GAAG,CAAC,CAAC;QACrC,CAAC;QACD,kEAAkE;QAClE,kEAAkE;QAClE,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAC;QAChC,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YACvC,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC3C,IAAI,OAAO,CAAC,KAAK,QAAQ;oBAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YACxC,CAAC;QACH,CAAC;QAED,oCAAoC;QACpC,4EAA4E;QAC5E,gEAAgE;QAChE,sEAAsE;QACtE,+BAA+B;QAC/B,GAAG,CAAC,8BAA8B,GAAG,GAAG,CAAC;IAC3C,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,25 @@
1
+ import type { GateOpts } from './types.js';
2
+ /** 一次配置的落地结果(各计数便于调用方打日志;都为 0 = 无技能可投)。 */
3
+ export interface ConfigureProjectSkillsResult {
4
+ /** 全局 HQ(`~/.coral/skills`)→ `.claude/skills` 的软链数。 */
5
+ linked: number;
6
+ /** 同上,软链失败回退整目录拷贝的数量。 */
7
+ copied: number;
8
+ /** 已存在且保留(含 frozen)的数量。 */
9
+ kept: number;
10
+ /** 因策略收窄而移除的数量。 */
11
+ pruned: number;
12
+ /** 项目专属技能(`<项目>/.sps/skills`)桥接进 `.claude/skills` 的数量。 */
13
+ projectLocal: number;
14
+ }
15
+ /**
16
+ * 配置某个项目可用的 skill,并按当前后端把它们投影到位。**幂等,可反复调用。**
17
+ *
18
+ * @param projectDir 项目目录(工作区 cwd)
19
+ * @param gate 传了就先落成 `.sps/skills-policy.yaml`;**省略 = 沿用磁盘上已有策略**,只重投影。
20
+ *
21
+ * 后端差异由 sps 内部兜:claude 需要 `.claude/skills` 里有实体(原生发现),
22
+ * openai/codex 直读 `.sps/skills` 与 HQ —— 调用方不必关心,也不该关心。
23
+ */
24
+ export declare function configureProjectSkills(projectDir: string, gate?: GateOpts): ConfigureProjectSkillsResult;
25
+ //# sourceMappingURL=configure.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configure.d.ts","sourceRoot":"","sources":["../../../src/core/skills/configure.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C,2CAA2C;AAC3C,MAAM,WAAW,4BAA4B;IAC3C,uDAAuD;IACvD,MAAM,EAAE,MAAM,CAAC;IACf,yBAAyB;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,2BAA2B;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,mBAAmB;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,0DAA0D;IAC1D,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CACpC,UAAU,EAAE,MAAM,EAClB,IAAI,CAAC,EAAE,QAAQ,GACd,4BAA4B,CAO9B"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * @module core/skills/configure
3
+ * @description **项目 skill 配置的可重复调用入口**(建项目之后也能改)。
4
+ *
5
+ * 组合已有三件:`writeProjectSkillPolicy`(落白名单)→ `resolveEligibleSkillNames`(算合格集)
6
+ * → `syncAllSkillsToProject` + `linkProjectSkillsToClaude`(按后端投影)。
7
+ *
8
+ * 🔴 存在的理由:此前这套只在 `commands/projectInit` 建项目时跑一次(`installProjectSkills`),
9
+ * 包外拿不到。于是平台(gameforge / createexperiments)在"换角色要重投技能"时**各自手写了一份**,
10
+ * 直接写 `.claude/skills` —— 绕过 policy、且把 claude 专属落地方式写进了应用层(换 openai 后端即不成立)。
11
+ * 开放这个入口就是为了收掉那类越界:**应用只说"这个项目用哪些技能",落到哪由 sps 按后端决定。**
12
+ *
13
+ * @layer core
14
+ * @boundedContext skills
15
+ */
16
+ import { linkProjectSkillsToClaude, syncAllSkillsToProject } from './distribution.js';
17
+ import { resolveEligibleSkillNames, writeProjectSkillPolicy } from './policy.js';
18
+ /**
19
+ * 配置某个项目可用的 skill,并按当前后端把它们投影到位。**幂等,可反复调用。**
20
+ *
21
+ * @param projectDir 项目目录(工作区 cwd)
22
+ * @param gate 传了就先落成 `.sps/skills-policy.yaml`;**省略 = 沿用磁盘上已有策略**,只重投影。
23
+ *
24
+ * 后端差异由 sps 内部兜:claude 需要 `.claude/skills` 里有实体(原生发现),
25
+ * openai/codex 直读 `.sps/skills` 与 HQ —— 调用方不必关心,也不该关心。
26
+ */
27
+ export function configureProjectSkills(projectDir, gate) {
28
+ if (gate)
29
+ writeProjectSkillPolicy(projectDir, gate);
30
+ // 空策略 → resolveEligibleSkillNames 返回 null = 不门控(全量投影),与建项目时的向后兼容语义一致。
31
+ const keep = resolveEligibleSkillNames(projectDir);
32
+ const { linked, copied, kept, pruned } = syncAllSkillsToProject(projectDir, { keep });
33
+ const proj = linkProjectSkillsToClaude(projectDir);
34
+ return { linked, copied, kept, pruned, projectLocal: proj.linked };
35
+ }
36
+ //# sourceMappingURL=configure.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configure.js","sourceRoot":"","sources":["../../../src/core/skills/configure.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,EAAE,yBAAyB,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AACtF,OAAO,EAAE,yBAAyB,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAiBjF;;;;;;;;GAQG;AACH,MAAM,UAAU,sBAAsB,CACpC,UAAkB,EAClB,IAAe;IAEf,IAAI,IAAI;QAAE,uBAAuB,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;IACpD,sEAAsE;IACtE,MAAM,IAAI,GAAG,yBAAyB,CAAC,UAAU,CAAC,CAAC;IACnD,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,sBAAsB,CAAC,UAAU,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;IACtF,MAAM,IAAI,GAAG,yBAAyB,CAAC,UAAU,CAAC,CAAC;IACnD,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;AACrE,CAAC"}
@@ -11,4 +11,5 @@ export * from './types.js';
11
11
  export { readSkillMeta, isReviewerSkill, SkillsManager, type SkillsManagerOpts } from './SkillsManager.js';
12
12
  export * from './distribution.js';
13
13
  export { isEmptyPolicy, loadProjectSkillPolicy, projectSkillPolicyPath, resolveEligibleSkillNames, SKILL_POLICY_REL, writeProjectSkillPolicy, } from './policy.js';
14
+ export { configureProjectSkills, type ConfigureProjectSkillsResult } from './configure.js';
14
15
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/skills/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,aAAa,EAAE,KAAK,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC3G,cAAc,mBAAmB,CAAC;AAClC,OAAO,EACL,aAAa,EACb,sBAAsB,EACtB,sBAAsB,EACtB,yBAAyB,EACzB,gBAAgB,EAChB,uBAAuB,GACxB,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/skills/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,aAAa,EAAE,KAAK,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC3G,cAAc,mBAAmB,CAAC;AAClC,OAAO,EACL,aAAa,EACb,sBAAsB,EACtB,sBAAsB,EACtB,yBAAyB,EACzB,gBAAgB,EAChB,uBAAuB,GACxB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,sBAAsB,EAAE,KAAK,4BAA4B,EAAE,MAAM,gBAAgB,CAAC"}
@@ -11,4 +11,5 @@ export * from './types.js';
11
11
  export { readSkillMeta, isReviewerSkill, SkillsManager } from './SkillsManager.js';
12
12
  export * from './distribution.js';
13
13
  export { isEmptyPolicy, loadProjectSkillPolicy, projectSkillPolicyPath, resolveEligibleSkillNames, SKILL_POLICY_REL, writeProjectSkillPolicy, } from './policy.js';
14
+ export { configureProjectSkills } from './configure.js';
14
15
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/skills/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,aAAa,EAA0B,MAAM,oBAAoB,CAAC;AAC3G,cAAc,mBAAmB,CAAC;AAClC,OAAO,EACL,aAAa,EACb,sBAAsB,EACtB,sBAAsB,EACtB,yBAAyB,EACzB,gBAAgB,EAChB,uBAAuB,GACxB,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/skills/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,aAAa,EAA0B,MAAM,oBAAoB,CAAC;AAC3G,cAAc,mBAAmB,CAAC;AAClC,OAAO,EACL,aAAa,EACb,sBAAsB,EACtB,sBAAsB,EACtB,yBAAyB,EACzB,gBAAgB,EAChB,uBAAuB,GACxB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,sBAAsB,EAAqC,MAAM,gBAAgB,CAAC"}
package/dist/server.d.ts CHANGED
@@ -34,6 +34,9 @@ export { createReviewerModel } from './providers/llm/modelFactory.js';
34
34
  export { loadAgentsConfig } from './core/intel/agentsConfig.js';
35
35
  export { RuntimeSession } from './core/intel/RuntimeSession.js';
36
36
  export { SkillsManager, type SkillsManagerOpts, type SkillMeta } from './core/skills/index.js';
37
+ export { configureProjectSkills, type ConfigureProjectSkillsResult } from './core/skills/configure.js';
38
+ export type { GateOpts } from './core/skills/types.js';
39
+ export { configureProjectAgent, type ConfigureProjectAgentOpts, type ProjectAgentProvider, type ProjectAgentTarget, } from './core/agents/configureProjectAgent.js';
37
40
  export { exportModelConfigBundle, importModelConfigBundle, isModelConfigBundle, type ModelConfigBundle, type ImportSummary, } from './core/modelConfigBundle.js';
38
41
  export { runSubAgent, abortSubagentRun, SubAgentError, type SubAgentSpec, type SubAgentResult, type SubAgentUsage, type SubAgentToolCall, type SubAgentEvent, type SubAgentErrorKind, type SubAgentToolMode, } from './providers/subagent/runSubAgent.js';
39
42
  export { getSubagentRun, listSubagentRuns, type SubagentRunRecord, type SubagentRunStatus, } from './providers/subagent/runLedger.js';
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,YAAY,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAC9F,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAClF,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD;;;;;;;;;;;;;;GAcG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,KAAK,iBAAiB,EAAE,KAAK,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAE/F,OAAO,EACL,uBAAuB,EACvB,uBAAuB,EACvB,mBAAmB,EACnB,KAAK,iBAAiB,EACtB,KAAK,aAAa,GACnB,MAAM,6BAA6B,CAAC;AAGrC,OAAO,EACL,WAAW,EACX,gBAAgB,EAChB,aAAa,EACb,KAAK,YAAY,EACjB,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,KAAK,gBAAgB,EACrB,KAAK,aAAa,EAClB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,GACtB,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,GACvB,MAAM,mCAAmC,CAAC;AAE3C,OAAO,EAAE,aAAa,EAAE,KAAK,kBAAkB,EAAE,KAAK,mBAAmB,EAAE,MAAM,oCAAoC,CAAC"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,YAAY,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAC9F,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAClF,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD;;;;;;;;;;;;;;GAcG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,KAAK,iBAAiB,EAAE,KAAK,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAG/F,OAAO,EAAE,sBAAsB,EAAE,KAAK,4BAA4B,EAAE,MAAM,4BAA4B,CAAC;AACvG,YAAY,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAGvD,OAAO,EACL,qBAAqB,EACrB,KAAK,yBAAyB,EAC9B,KAAK,oBAAoB,EACzB,KAAK,kBAAkB,GACxB,MAAM,wCAAwC,CAAC;AAEhD,OAAO,EACL,uBAAuB,EACvB,uBAAuB,EACvB,mBAAmB,EACnB,KAAK,iBAAiB,EACtB,KAAK,aAAa,GACnB,MAAM,6BAA6B,CAAC;AAGrC,OAAO,EACL,WAAW,EACX,gBAAgB,EAChB,aAAa,EACb,KAAK,YAAY,EACjB,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,KAAK,gBAAgB,EACrB,KAAK,aAAa,EAClB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,GACtB,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,GACvB,MAAM,mCAAmC,CAAC;AAE3C,OAAO,EAAE,aAAa,EAAE,KAAK,kBAAkB,EAAE,KAAK,mBAAmB,EAAE,MAAM,oCAAoC,CAAC"}
package/dist/server.js CHANGED
@@ -33,6 +33,12 @@ export { createReviewerModel } from './providers/llm/modelFactory.js';
33
33
  export { loadAgentsConfig } from './core/intel/agentsConfig.js';
34
34
  export { RuntimeSession } from './core/intel/RuntimeSession.js';
35
35
  export { SkillsManager } from './core/skills/index.js';
36
+ // 项目 skill 配置(建项目之后也能改):平台只说"这个项目用哪些技能",落到 .claude/skills 还是
37
+ // .sps/skills 由 sps 按后端决定 —— 收掉平台自写投影那类越界(见 core/skills/configure.ts)。
38
+ export { configureProjectSkills } from './core/skills/configure.js';
39
+ // 项目级 agent 端点/模型(建项目之后也能改):平台只说"用哪个 provider/模型",
40
+ // 落 .claude/settings.local.json 还是 .sps/agent-providers.json 由 sps 按后端决定。
41
+ export { configureProjectAgent, } from './core/agents/configureProjectAgent.js';
36
42
  // 模型配置包(0.65.27 CLI 功能的库形态):嵌入平台(coral)的导入口分流/双包导出用。
37
43
  export { exportModelConfigBundle, importModelConfigBundle, isModelConfigBundle, } from './core/modelConfigBundle.js';
38
44
  // 轻 agent(subagent,一次性子 agent):平台(gameforge 审图等)直调,provider/密钥留 sps。
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE1D,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAClF,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD;;;;;;;;;;;;;;GAcG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,aAAa,EAA0C,MAAM,wBAAwB,CAAC;AAC/F,qDAAqD;AACrD,OAAO,EACL,uBAAuB,EACvB,uBAAuB,EACvB,mBAAmB,GAGpB,MAAM,6BAA6B,CAAC;AACrC,qEAAqE;AACrE,oEAAoE;AACpE,OAAO,EACL,WAAW,EACX,gBAAgB,EAChB,aAAa,GAQd,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EACL,cAAc,EACd,gBAAgB,GAGjB,MAAM,mCAAmC,CAAC;AAC3C,+CAA+C;AAC/C,OAAO,EAAE,aAAa,EAAqD,MAAM,oCAAoC,CAAC"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE1D,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAClF,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD;;;;;;;;;;;;;;GAcG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,aAAa,EAA0C,MAAM,wBAAwB,CAAC;AAC/F,6DAA6D;AAC7D,uEAAuE;AACvE,OAAO,EAAE,sBAAsB,EAAqC,MAAM,4BAA4B,CAAC;AAEvG,mDAAmD;AACnD,0EAA0E;AAC1E,OAAO,EACL,qBAAqB,GAItB,MAAM,wCAAwC,CAAC;AAChD,qDAAqD;AACrD,OAAO,EACL,uBAAuB,EACvB,uBAAuB,EACvB,mBAAmB,GAGpB,MAAM,6BAA6B,CAAC;AACrC,qEAAqE;AACrE,oEAAoE;AACpE,OAAO,EACL,WAAW,EACX,gBAAgB,EAChB,aAAa,GAQd,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EACL,cAAc,EACd,gBAAgB,GAGjB,MAAM,mCAAmC,CAAC;AAC3C,+CAA+C;AAC/C,OAAO,EAAE,aAAa,EAAqD,MAAM,oCAAoC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@coralai/sps-cli",
3
- "version": "0.65.61",
3
+ "version": "0.65.63",
4
4
  "description": "SPS CLI — AI-driven development pipeline orchestrator",
5
5
  "type": "module",
6
6
  "main": "dist/main.js",
@@ -64,6 +64,12 @@ tags:
64
64
  docs: 文档 / 知识维护
65
65
  writing: 写作 / 文章 / 文字创作
66
66
  process: 通用工程流程 / 实践
67
+ # 教育 / 科学域(实验室产品线;2026-08-03 随 createexperiments 技能进 HQ 登记)
68
+ edu: 教育 / 教学
69
+ simulation: 现实模拟 / 仿真实验
70
+ math: 数学 / 统计
71
+ chemistry: 化学
72
+ geometry: 几何
67
73
  # 技术 / 技法面
68
74
  2d: 2D 图形
69
75
  3d: 3D 图形