@siming-org/opencode-plugin 0.1.12 → 0.1.13

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.
@@ -1,20 +1,25 @@
1
1
  /**
2
2
  * 再验证调度(技术方案 §4.C3 第 4-6 条:三触发 + 指纹协商 + single-flight)。
3
3
  *
4
- * 三触发(唯一入口均在本模块):
4
+ * 三触发(唯一入口均在本模块,全部作用于构造时的 location 实例):
5
5
  * 1. 初始化:setup 同步阻塞有界等待(INIT_BUDGET_MS),失败空集注册不中断激活(§4.G 行 1);
6
6
  * 2. 任务创建触发:ctx.tool.hook("execute.after") 观测 MCP siming_task 的 create 动作,
7
- * fire-and-forget(不 await、异常吞掉),目录基准=setup 捕获的 location directory
7
+ * fire-and-forget(不 await、异常吞掉),目录基准=构造参数 directory
8
8
  * (ctx.location.directory,与初始化触发同源——钩子载荷无 directory 字段);
9
9
  * 3. 手动:siming_refresh 工具直调 revalidate({force:true}),force=跳过指纹直接全链重拉。
10
10
  *
11
+ * per-location 实例(T202610220003):gates/reloaders/projectCache/lastResolvedTarget/
12
+ * lastErrorByDomain 全部闭包在 createRevalidator 实例内——多 location(一个宿主进程多个
13
+ * 活跃项目目录)各 setup 各构造,互不覆盖;reload 只打回本 location 的注册表。
14
+ * single-flight 闸门为实例内语义:同 location 三触发互斥,跨 location 拉取目标不同不互斥。
15
+ *
11
16
  * 指纹协商:每域一次列表请求比对 name@scope|version|updatedAt|enabled;
12
17
  * 指纹仅对应域重拉成功后写入(失败不前移,下次触发自然重试)。
13
- * single-flight:每域独立闸门,进行中新触发直接返回不重入(siming_refresh 拿到 in-progress 如实上报)。
14
18
  * 变更生效:store 原子替换 → 对应域 reload() → 下一请求生效(宿主按名单重建会话注入面)。
15
19
  * 失败:保留现有注册(不空转),限频 console.error(连续相同消息只打一次)。
16
20
  */
17
21
  import type { HostToolDomain } from './host-api.js';
22
+ import type { AssetsStore } from './assets-store.js';
18
23
  export type Domain = 'skill' | 'agent';
19
24
  export type DomainStatus = 'unchanged' | 'refreshed' | 'failed' | 'in-progress';
20
25
  export interface DomainOutcome {
@@ -28,41 +33,37 @@ export interface RevalidateSummary {
28
33
  skill: DomainOutcome;
29
34
  agent: DomainOutcome;
30
35
  }
31
- /** setup 调用:记录本插件实例绑定 location 的目录(插件按活跃 location 各跑一份 setup) */
32
- export declare function setLocationDirectory(directory: string): void;
33
- export declare function getLastResolvedTarget(): {
34
- serverUrl: string;
35
- projectId: string | null;
36
- } | null;
37
- export declare function setReloader(domain: Domain, reload: () => Promise<void> | void): void;
38
- /**
39
- * 再验证(两域并行独立)。
40
- * - siming_refresh:force=true(跳过指纹),目录=注册闭包持有的 location directory,await 返回摘要;
41
- * - 任务创建触发:force=false,目录=setup 捕获的 location directory(钩子载荷无 directory 字段),fire-and-forget。
42
- */
43
- export declare function revalidate(opts: {
44
- force: boolean;
45
- directory?: string;
46
- source: 'task-create' | 'refresh';
47
- }): Promise<RevalidateSummary>;
48
36
  /**
49
- * 初始化拉取(setup 同步阻塞,有界等待 budgetMs,缺省 INIT_BUDGET_MS)。
50
- * - 成功:两域 store + 指纹就位,返回 true;
51
- * - 失败/超时:返回 false(store 保持空集,激活继续注册空名单——首个 siming_refresh/任务创建触发自愈)。
52
- * 超时后底层拉取不取消:迟到成功仍会写入 store(下次请求即见),只是不再阻塞激活。
53
- * budgetMs 参数为测试缝(§6:init 有界等待行为单测可缩短预算)——生产调用方不传。
37
+ * 最近一次成功解析的拉取目标(siming_refresh/selfCheck 报告项目绑定状态用;未解析过=null)。
38
+ * 可辨识联合钉住不变量:projectId 非 null ⇔ projectSource 非 null(绑定必知来源,仅全局两者皆 null)
54
39
  */
55
- export declare function initFetch(startDir: string, budgetMs?: number): Promise<boolean>;
40
+ export type ResolvedTarget = {
41
+ serverUrl: string;
42
+ projectId: string;
43
+ projectSource: 'workspace' | 'instance-default';
44
+ } | {
45
+ serverUrl: string;
46
+ projectId: null;
47
+ projectSource: null;
48
+ };
49
+ /** 再验证器实例接口(setup 时每 location 构造一个) */
50
+ export interface Revalidator {
51
+ /** 再验证(两域并行独立):force=true 跳过指纹;await 返回摘要 */
52
+ revalidate(opts: {
53
+ force: boolean;
54
+ source: 'task-create' | 'refresh';
55
+ }): Promise<RevalidateSummary>;
56
+ /** 初始化拉取(setup 同步阻塞有界等待;budgetMs 为测试缝,生产调用方不传) */
57
+ initFetch(budgetMs?: number): Promise<boolean>;
58
+ /** 变更后通知宿主重建注入面的 reload 通道(setup 时注入;未注入=宿主无此域注册,静默跳过) */
59
+ setReloader(domain: Domain, reload: () => Promise<void> | void): void;
60
+ /** 注册任务创建观测(setup 调用一次) */
61
+ observeTaskCreate(toolDomain: HostToolDomain): void;
62
+ getLastResolvedTarget(): ResolvedTarget | null;
63
+ }
56
64
  /**
57
- * 注册任务创建观测(setup 调用一次)。
58
- * 仅 MCP siming_task + action=create + 执行成功 → fire-and-forget revalidate(不 await,异常吞掉——
59
- * 闸门防重入,失败留限频日志)。窄观测面:siming_cli / 终端 CLI 建任务不触发(防参数字符串解析脆弱)。
60
- *
61
- * 目录基准(v2.0.26 实测修订,§4.C3-3):宿主钩子载荷仅含 sessionID(无 directory 字段),
62
- * 但插件 setup ctx.location.directory 存在(setup 时捕获,setLocationDirectory)——任务创建触发
63
- * 与初始化触发同取捕获值(同一 location 的插件实例,目录天然一致)。
64
- * 多 location 形态(一个宿主进程多个活跃项目目录)下各 location 独立 setup 各自捕获;
65
- * 模块级 store 单实例=最后捕获者生效(当前边界,PRD 非目标:单 location 主场景)。
65
+ * 构造一个再验证器实例(setup 时每 location 调用一次)。
66
+ * store 与 directory 由调用方注入(同一 location 的 store/reloader/transform 回调闭环在各自实例)。
66
67
  */
67
- export declare function observeTaskCreate(toolDomain: HostToolDomain): void;
68
+ export declare function createRevalidator(store: AssetsStore, directory: string): Revalidator;
68
69
  //# sourceMappingURL=revalidate.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"revalidate.d.ts","sourceRoot":"","sources":["../src/revalidate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,KAAK,EAAE,cAAc,EAA8B,MAAM,eAAe,CAAC;AAoBhF,MAAM,MAAM,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC;AAEvC,MAAM,MAAM,YAAY,GAAG,WAAW,GAAG,WAAW,GAAG,QAAQ,GAAG,aAAa,CAAC;AAEhF,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,YAAY,CAAC;IACrB,uBAAuB;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,oDAAoD;IACpD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,aAAa,CAAC;IACrB,KAAK,EAAE,aAAa,CAAC;CACtB;AAeD,iEAAiE;AACjE,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAE5D;AAaD,wBAAgB,qBAAqB,IAAI;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAAG,IAAI,CAE9F;AAKD,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,IAAI,CAEpF;AA4ED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,aAAa,GAAG,SAAS,CAAC;CACnC,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAY7B;AAED;;;;;;GAMG;AACH,wBAAsB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAuB,GAAG,OAAO,CAAC,OAAO,CAAC,CAerG;AAoCD;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,cAAc,GAAG,IAAI,CAUlE"}
1
+ {"version":3,"file":"revalidate.d.ts","sourceRoot":"","sources":["../src/revalidate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,OAAO,KAAK,EAAE,cAAc,EAA8B,MAAM,eAAe,CAAC;AAShF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAKrD,MAAM,MAAM,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC;AAEvC,MAAM,MAAM,YAAY,GAAG,WAAW,GAAG,WAAW,GAAG,QAAQ,GAAG,aAAa,CAAC;AAEhF,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,YAAY,CAAC;IACrB,uBAAuB;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,oDAAoD;IACpD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,aAAa,CAAC;IACrB,KAAK,EAAE,aAAa,CAAC;CACtB;AAED;;;GAGG;AACH,MAAM,MAAM,cAAc,GACtB;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,WAAW,GAAG,kBAAkB,CAAA;CAAE,GACzF;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,IAAI,CAAC;IAAC,aAAa,EAAE,IAAI,CAAA;CAAE,CAAC;AAEhE,uCAAuC;AACvC,MAAM,WAAW,WAAW;IAC1B,6CAA6C;IAC7C,UAAU,CAAC,IAAI,EAAE;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,aAAa,GAAG,SAAS,CAAA;KAAE,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;IACpG,kDAAkD;IAClD,SAAS,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC/C,0DAA0D;IAC1D,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC;IACtE,2BAA2B;IAC3B,iBAAiB,CAAC,UAAU,EAAE,cAAc,GAAG,IAAI,CAAC;IACpD,qBAAqB,IAAI,cAAc,GAAG,IAAI,CAAC;CAChD;AAUD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,GAAG,WAAW,CA8JpF"}
@@ -1,136 +1,159 @@
1
- import { fetchAgentsDomain, fetchAgentCheckFingerprint, fetchSkillsDomain, fetchSkillCheckFingerprint, resolveFetchPlan, } from './fetch-assets.js';
2
- import { getAgentFingerprint, getSkillFingerprint, replaceAgents, replaceSkills, setAgentFingerprint, setSkillFingerprint, } from './assets-store.js';
1
+ import { fetchAgentsDomain, fetchAgentCheckFingerprint, fetchSkillsDomain, fetchSkillCheckFingerprint, resolveFetchPlan, INSTANCE_DEFAULT_PROJECT_KEY, } from './fetch-assets.js';
3
2
  /** setup 同步阻塞的初始化拉取预算(§4.C3-3:AbortSignal.timeout(10_000) 有界) */
4
3
  const INIT_BUDGET_MS = 10_000;
5
- // ── 模块状态(单宿主进程单实例;setup 一次注册) ──
6
- /** 每域 single-flight 闸门:进行中的任务 Promise;新触发见非空即跳过该域 */
7
- const gates = { skill: null, agent: null };
8
- /** 变更后通知宿主重建注入面的 reload 通道(index.ts setup 时注入;未注入=宿主无此域注册,静默跳过) */
9
- const reloaders = {};
10
- // ── location directory 捕获(setup 时写入;三触发目录基准的唯一来源) ──
11
- /** setup 捕获的 location directory(v2.0.26:ctx.location.directory;未捕获时兜底宿主进程 cwd) */
12
- let capturedLocationDirectory = null;
13
- /** setup 调用:记录本插件实例绑定 location 的目录(插件按活跃 location 各跑一份 setup) */
14
- export function setLocationDirectory(directory) {
15
- capturedLocationDirectory = directory;
16
- }
17
- /** 目录基准读取:捕获值优先,未捕获(异常场景/setup 前触发)兜底 process.cwd() */
18
- function locationDirectory() {
19
- return capturedLocationDirectory ?? process.cwd();
20
- }
21
- /** 工作区项目 key→hex id 缓存:稳态检查跳过 /api/projects 解析,保持每域 1 次列表请求 */
22
- let projectCache = null;
23
- /** 最近一次成功解析的拉取目标(siming_refresh 报告项目作用域就位确认用;进程启动后未解析过=null) */
24
- let lastResolvedTarget = null;
25
- export function getLastResolvedTarget() {
26
- return lastResolvedTarget;
27
- }
28
- /** 限频去重:每域连续相同的错误消息只打一次(消息变化才重打) */
29
- const lastErrorByDomain = { skill: null, agent: null };
30
- export function setReloader(domain, reload) {
31
- reloaders[domain] = reload;
32
- }
33
- function logError(domain, message) {
34
- if (lastErrorByDomain[domain] === message)
35
- return; // 限频:连续相同不重打
36
- lastErrorByDomain[domain] = message;
37
- console.error(`[siming-plugin] 资产刷新失败(${domain === 'skill' ? '技能' : '子代理'}域,保留现有注册):${message}`);
38
- }
39
- async function runDomainJob(domain, opts) {
40
- try {
41
- const plan = await resolveFetchPlan(opts.directory, projectCache ?? undefined);
42
- lastResolvedTarget = { serverUrl: plan.target.serverUrl, projectId: plan.projectId };
43
- if (plan.projectId !== null && plan.target.projectKey !== null) {
44
- projectCache = { key: plan.target.projectKey, id: plan.projectId };
45
- }
46
- if (!opts.force) {
47
- const checked = domain === 'skill' ? await fetchSkillCheckFingerprint(plan) : await fetchAgentCheckFingerprint(plan);
48
- const stored = domain === 'skill' ? getSkillFingerprint() : getAgentFingerprint();
49
- if (checked === stored)
50
- return { status: 'unchanged' };
51
- }
52
- let refreshedCount;
53
- if (domain === 'skill') {
54
- const result = await fetchSkillsDomain(plan);
55
- replaceSkills(result.assets);
56
- setSkillFingerprint(result.fingerprint);
57
- refreshedCount = result.assets.length;
4
+ /**
5
+ * 构造一个再验证器实例(setup 时每 location 调用一次)。
6
+ * store 与 directory 由调用方注入(同一 location 的 store/reloader/transform 回调闭环在各自实例)。
7
+ */
8
+ export function createRevalidator(store, directory) {
9
+ // ── 实例状态(闭包持有;多 location 互不可见) ──
10
+ /** 每域 single-flight 闸门:进行中的任务 Promise;新触发见非空即跳过该域 */
11
+ const gates = { skill: null, agent: null };
12
+ /** 变更后通知宿主重建注入面的 reload 通道(setup 注入本 location 的 ctx 域 reload) */
13
+ const reloaders = {};
14
+ /** 工作区项目 key→hex id 缓存(含 key=default 兜底命中):稳态检查跳过 /api/projects 解析,保持每域 1 次列表请求 */
15
+ let projectCache = null;
16
+ let lastResolvedTarget = null;
17
+ /** 限频去重:每域连续相同的错误消息只打一次(消息变化才重打) */
18
+ const lastErrorByDomain = { skill: null, agent: null };
19
+ function logError(domain, message) {
20
+ if (lastErrorByDomain[domain] === message)
21
+ return; // 限频:连续相同不重打
22
+ lastErrorByDomain[domain] = message;
23
+ console.error(`[siming-plugin] 资产刷新失败(${domain === 'skill' ? '技能' : '子代理'}域,保留现有注册):${message}`);
24
+ }
25
+ // ── 单域任务(检查 → 差异 → 重拉 → 替换 → reload;目录基准=构造参数 directory) ──
26
+ async function runDomainJob(domain, opts) {
27
+ try {
28
+ const plan = await resolveFetchPlan(directory, projectCache ?? undefined);
29
+ lastResolvedTarget =
30
+ plan.projectId !== null
31
+ ? {
32
+ serverUrl: plan.target.serverUrl,
33
+ projectId: plan.projectId,
34
+ projectSource: plan.target.projectKey !== null ? 'workspace' : 'instance-default',
35
+ }
36
+ : { serverUrl: plan.target.serverUrl, projectId: null, projectSource: null };
37
+ if (plan.projectId !== null) {
38
+ projectCache = { key: plan.target.projectKey ?? INSTANCE_DEFAULT_PROJECT_KEY, id: plan.projectId };
39
+ }
40
+ if (!opts.force) {
41
+ const checked = domain === 'skill' ? await fetchSkillCheckFingerprint(plan) : await fetchAgentCheckFingerprint(plan);
42
+ const stored = domain === 'skill' ? store.getSkillFingerprint() : store.getAgentFingerprint();
43
+ if (checked === stored)
44
+ return { status: 'unchanged' };
45
+ }
46
+ let refreshedCount;
47
+ if (domain === 'skill') {
48
+ const result = await fetchSkillsDomain(plan);
49
+ store.replaceSkills(result.assets);
50
+ store.setSkillFingerprint(result.fingerprint);
51
+ refreshedCount = result.assets.length;
52
+ }
53
+ else {
54
+ const result = await fetchAgentsDomain(plan);
55
+ store.replaceAgents(result.assets);
56
+ store.setAgentFingerprint(result.fingerprint);
57
+ refreshedCount = result.assets.length;
58
+ }
59
+ const reload = reloaders[domain];
60
+ if (reload !== undefined)
61
+ await reload();
62
+ if (opts.source !== 'refresh') {
63
+ // 后台触发的变更完成:留一条可观测日志(siming_refresh 自带返回摘要,不重复打)
64
+ console.log(`[siming-plugin] 检测到资产变更,${domain === 'skill' ? '技能' : '子代理'}域已刷新(${String(refreshedCount)} 条,下一请求生效)`);
65
+ }
66
+ return { status: 'refreshed', count: refreshedCount };
58
67
  }
59
- else {
60
- const result = await fetchAgentsDomain(plan);
61
- replaceAgents(result.assets);
62
- setAgentFingerprint(result.fingerprint);
63
- refreshedCount = result.assets.length;
68
+ catch (err) {
69
+ const message = err instanceof Error ? err.message : String(err);
70
+ logError(domain, message);
71
+ return { status: 'failed', error: message };
64
72
  }
65
- const reload = reloaders[domain];
66
- if (reload !== undefined)
67
- await reload();
68
- if (opts.source !== 'refresh') {
69
- // 后台触发的变更完成:留一条可观测日志(siming_refresh 自带返回摘要,不重复打)
70
- console.log(`[siming-plugin] 检测到资产变更,${domain === 'skill' ? '技能' : '子代理'}域已刷新(${String(refreshedCount)} 条,下一请求生效)`);
73
+ }
74
+ /** 带闸门的单域调度:进行中返回 in-progress 不重入 */
75
+ function dispatchDomain(domain, opts) {
76
+ const running = gates[domain];
77
+ if (running !== null)
78
+ return Promise.resolve({ status: 'in-progress' });
79
+ const job = runDomainJob(domain, opts).finally(() => {
80
+ gates[domain] = null;
81
+ });
82
+ gates[domain] = job;
83
+ return job;
84
+ }
85
+ // ── 对外入口(实例方法) ──
86
+ /**
87
+ * 再验证(两域并行独立)。
88
+ * - siming_refresh:force=true(跳过指纹),await 返回摘要;
89
+ * - 任务创建触发:force=false,fire-and-forget。
90
+ * 目录基准=构造参数 directory(本 location 的 location directory)。
91
+ */
92
+ function revalidate(opts) {
93
+ const jobOpts = { force: opts.force, source: opts.source };
94
+ const skill = dispatchDomain('skill', jobOpts);
95
+ const agent = dispatchDomain('agent', jobOpts);
96
+ return Promise.all([skill, agent]).then(([skillOutcome, agentOutcome]) => ({
97
+ skill: skillOutcome,
98
+ agent: agentOutcome,
99
+ }));
100
+ }
101
+ /**
102
+ * 初始化拉取(setup 同步阻塞,有界等待 budgetMs,缺省 INIT_BUDGET_MS)。
103
+ * - 成功:两域 store + 指纹就位,返回 true;
104
+ * - 失败/超时:返回 false(store 保持空集,激活继续注册空名单——首个 siming_refresh/任务创建触发自愈)。
105
+ * 超时后底层拉取不取消:迟到成功仍会写入 store(下次请求即见),只是不再阻塞激活。
106
+ * budgetMs 参数为测试缝(§6:init 有界等待行为单测可缩短预算)——生产调用方不传。
107
+ */
108
+ async function initFetch(budgetMs = INIT_BUDGET_MS) {
109
+ const jobOpts = { force: true, source: 'init' };
110
+ const timedFetch = Promise.all([dispatchDomain('skill', jobOpts), dispatchDomain('agent', jobOpts)]);
111
+ let budgetTimer;
112
+ const budget = new Promise((resolve) => {
113
+ budgetTimer = setTimeout(() => resolve(null), budgetMs);
114
+ });
115
+ const settled = await Promise.race([timedFetch.then(() => true), budget]);
116
+ clearTimeout(budgetTimer);
117
+ if (settled === true) {
118
+ const [skillOutcome, agentOutcome] = await timedFetch;
119
+ return skillOutcome.status === 'refreshed' && agentOutcome.status === 'refreshed';
71
120
  }
72
- return { status: 'refreshed', count: refreshedCount };
121
+ console.error('[siming-plugin] 初始化拉取超时(10s)——空集注册继续激活,稍后触发自动补齐');
122
+ return false;
73
123
  }
74
- catch (err) {
75
- const message = err instanceof Error ? err.message : String(err);
76
- logError(domain, message);
77
- return { status: 'failed', error: message };
124
+ /**
125
+ * 注册任务创建观测(setup 调用一次)。
126
+ * 仅 MCP siming_task + action=create + 执行成功 → fire-and-forget revalidate(不 await,异常吞掉——
127
+ * 闸门防重入,失败留限频日志)。窄观测面:siming_cli / 终端 CLI 建任务不触发(防参数字符串解析脆弱)。
128
+ *
129
+ * 目录基准(v2.0.26 实测修订,§4.C3-3):宿主钩子载荷仅含 sessionID(无 directory 字段),
130
+ * 故取构造参数 directory——同一 location 的插件实例,目录天然一致。
131
+ */
132
+ function observeTaskCreate(toolDomain) {
133
+ void toolDomain.hook('execute.after', (input, output) => {
134
+ const name = extractToolName(input.tool);
135
+ if (name === null || !isSimingTaskTool(name))
136
+ return;
137
+ if (!isCreateArgs(input.args))
138
+ return;
139
+ if (isFailedOutput(output))
140
+ return;
141
+ void revalidate({ force: false, source: 'task-create' }).catch(() => {
142
+ // fire-and-forget:异常吞掉(runDomainJob 内部已捕获留痕,此处兜底防未处理拒绝)
143
+ });
144
+ });
78
145
  }
79
- }
80
- /** 带闸门的单域调度:进行中返回 in-progress 不重入 */
81
- function dispatchDomain(domain, opts) {
82
- const running = gates[domain];
83
- if (running !== null)
84
- return Promise.resolve({ status: 'in-progress' });
85
- const job = runDomainJob(domain, opts).finally(() => {
86
- gates[domain] = null;
87
- });
88
- gates[domain] = job;
89
- return job;
90
- }
91
- // ── 对外入口 ──
92
- /**
93
- * 再验证(两域并行独立)。
94
- * - siming_refresh:force=true(跳过指纹),目录=注册闭包持有的 location directory,await 返回摘要;
95
- * - 任务创建触发:force=false,目录=setup 捕获的 location directory(钩子载荷无 directory 字段),fire-and-forget。
96
- */
97
- export function revalidate(opts) {
98
- const jobOpts = {
99
- force: opts.force,
100
- directory: opts.directory ?? locationDirectory(),
101
- source: opts.source,
146
+ return {
147
+ revalidate,
148
+ initFetch,
149
+ setReloader: (domain, reload) => {
150
+ reloaders[domain] = reload;
151
+ },
152
+ observeTaskCreate,
153
+ getLastResolvedTarget: () => lastResolvedTarget,
102
154
  };
103
- const skill = dispatchDomain('skill', jobOpts);
104
- const agent = dispatchDomain('agent', jobOpts);
105
- return Promise.all([skill, agent]).then(([skillOutcome, agentOutcome]) => ({
106
- skill: skillOutcome,
107
- agent: agentOutcome,
108
- }));
109
155
  }
110
- /**
111
- * 初始化拉取(setup 同步阻塞,有界等待 budgetMs,缺省 INIT_BUDGET_MS)。
112
- * - 成功:两域 store + 指纹就位,返回 true;
113
- * - 失败/超时:返回 false(store 保持空集,激活继续注册空名单——首个 siming_refresh/任务创建触发自愈)。
114
- * 超时后底层拉取不取消:迟到成功仍会写入 store(下次请求即见),只是不再阻塞激活。
115
- * budgetMs 参数为测试缝(§6:init 有界等待行为单测可缩短预算)——生产调用方不传。
116
- */
117
- export async function initFetch(startDir, budgetMs = INIT_BUDGET_MS) {
118
- const jobOpts = { force: true, directory: startDir, source: 'init' };
119
- const timedFetch = Promise.all([dispatchDomain('skill', jobOpts), dispatchDomain('agent', jobOpts)]);
120
- let budgetTimer;
121
- const budget = new Promise((resolve) => {
122
- budgetTimer = setTimeout(() => resolve(null), budgetMs);
123
- });
124
- const settled = await Promise.race([timedFetch.then(() => true), budget]);
125
- clearTimeout(budgetTimer);
126
- if (settled === true) {
127
- const [skillOutcome, agentOutcome] = await timedFetch;
128
- return skillOutcome.status === 'refreshed' && agentOutcome.status === 'refreshed';
129
- }
130
- console.error('[siming-plugin] 初始化拉取超时(10s)——空集注册继续激活,稍后触发自动补齐');
131
- return false;
132
- }
133
- // ── 任务创建触发(§4.C3-3:execute.after 观测) ──
156
+ // ── 钩子载荷判定(纯函数,模块级共享) ──
134
157
  /** 从 execute.after 载荷提取工具名(V8 申报:载荷形态以实测锚定,容错多种呈现) */
135
158
  function extractToolName(tool) {
136
159
  if (typeof tool === 'string')
@@ -162,29 +185,4 @@ function isFailedOutput(output) {
162
185
  }
163
186
  return false;
164
187
  }
165
- /**
166
- * 注册任务创建观测(setup 调用一次)。
167
- * 仅 MCP siming_task + action=create + 执行成功 → fire-and-forget revalidate(不 await,异常吞掉——
168
- * 闸门防重入,失败留限频日志)。窄观测面:siming_cli / 终端 CLI 建任务不触发(防参数字符串解析脆弱)。
169
- *
170
- * 目录基准(v2.0.26 实测修订,§4.C3-3):宿主钩子载荷仅含 sessionID(无 directory 字段),
171
- * 但插件 setup ctx.location.directory 存在(setup 时捕获,setLocationDirectory)——任务创建触发
172
- * 与初始化触发同取捕获值(同一 location 的插件实例,目录天然一致)。
173
- * 多 location 形态(一个宿主进程多个活跃项目目录)下各 location 独立 setup 各自捕获;
174
- * 模块级 store 单实例=最后捕获者生效(当前边界,PRD 非目标:单 location 主场景)。
175
- */
176
- export function observeTaskCreate(toolDomain) {
177
- void toolDomain.hook('execute.after', (input, output) => {
178
- const name = extractToolName(input.tool);
179
- if (name === null || !isSimingTaskTool(name))
180
- return;
181
- if (!isCreateArgs(input.args))
182
- return;
183
- if (isFailedOutput(output))
184
- return;
185
- void revalidate({ force: false, source: 'task-create' }).catch(() => {
186
- // fire-and-forget:异常吞掉(runDomainJob 内部已捕获留痕,此处兜底防未处理拒绝)
187
- });
188
- });
189
- }
190
188
  //# sourceMappingURL=revalidate.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"revalidate.js","sourceRoot":"","sources":["../src/revalidate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"revalidate.js","sourceRoot":"","sources":["../src/revalidate.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAuBA,OAAO,EAAkB,KAAK,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAiExE,QAAA,MAAM,MAAM;;iBAES,iBAAiB,KAAG,OAAO,CAAC,IAAI,CAAC;CAoCrD,CAAC;AAEF,eAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAsBA,OAAO,EAAkB,KAAK,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AA8ExE,QAAA,MAAM,MAAM;;iBAES,iBAAiB,KAAG,OAAO,CAAC,IAAI,CAAC;CAwCrD,CAAC;AAEF,eAAe,MAAM,CAAC"}
@@ -11,8 +11,8 @@
11
11
  * 仅激活时刻执行一次(此后动态增减由三触发点承接,正确性归 §6 刷新链单测)。
12
12
  */
13
13
  import { checkHostVersion, locateCli } from '../cli-locator.js';
14
- import { getSnapshot } from '../assets-store.js';
15
- import { initFetch, observeTaskCreate, setReloader, setLocationDirectory } from '../revalidate.js';
14
+ import { createAssetsStore } from '../assets-store.js';
15
+ import { createRevalidator } from '../revalidate.js';
16
16
  import { MCP_SERVER_NAME, registerMcp } from '../register/mcp.js';
17
17
  import { SIMING_CLI_TOOL_NAME, registerSimingCli } from '../register/tools.js';
18
18
  import { SIMING_REFRESH_TOOL_NAME, registerRefreshTool } from '../register/refresh-tool.js';
@@ -20,10 +20,9 @@ import { registerTaskDiscipline } from '../register/task-discipline.js';
20
20
  import { registerSkills } from '../register/skills.js';
21
21
  import { registerAgents } from '../register/agents.js';
22
22
  import { GUIDE_SKILL_NAME } from '../guide-skill.js';
23
- import { getLastResolvedTarget } from '../revalidate.js';
24
23
  import { listEntryNames } from '../host-api.js';
25
24
  /** 激活自检(§4.G:固定项按双轴基准;动态项区分拉取失败与注册缺项;异常 console.error) */
26
- async function selfCheck(ctx, opts) {
25
+ async function selfCheck(ctx, store, revalidator, opts) {
27
26
  const problems = [];
28
27
  let skillCount = 0;
29
28
  let agentCount = 0;
@@ -57,7 +56,7 @@ async function selfCheck(ctx, opts) {
57
56
  problems.push('任务纪律注入 session 域不可用(context hook 或 session.get 缺失)——本宿主不注入任务纪律提示词');
58
57
  }
59
58
  // 动态项:拉取成功但注册缺项(拉取失败时 store 为空、此处自然无比对项=预期降级不告警)
60
- const snapshot = getSnapshot();
59
+ const snapshot = store.getSnapshot();
61
60
  for (const skill of snapshot.skills) {
62
61
  if (!skillNames.has(skill.name))
63
62
  problems.push(`技能 ${skill.name} 已拉取但未出现在 skill 域注册表`);
@@ -76,10 +75,17 @@ async function selfCheck(ctx, opts) {
76
75
  console.error(`[siming-plugin] 激活自检发现异常(${String(problems.length)} 项,doctor 会话内可二次查证):\n- ${problems.join('\n- ')}`);
77
76
  return;
78
77
  }
79
- const target = getLastResolvedTarget();
78
+ const target = revalidator.getLastResolvedTarget();
79
+ const bindLabel = target === null
80
+ ? ''
81
+ : target.projectId === null
82
+ ? ''
83
+ : target.projectSource === 'workspace'
84
+ ? ',项目已绑定(工作区 defaultProject)'
85
+ : ',项目已绑定(实例默认项目)';
80
86
  console.log(`[siming-plugin] 激活完成:固定 ${opts.interpreterOk ? '5' : '3'} 项(解释器${opts.interpreterOk ? '正常' : '缺失降级'})` +
81
87
  ` + 技能 ${String(skillCount)} + 子代理 ${String(agentCount)}` +
82
- `${target !== null ? `(server:${target.serverUrl}${target.projectId !== null ? ',项目已绑定' : ''})` : ''}` +
88
+ `${target !== null ? `(server:${target.serverUrl}${bindLabel})` : ''}` +
83
89
  `${skillCount === 0 && agentCount === 0 ? '——资产拉取未成功(空集注册,首次建任务/手动刷新时自动重试)' : ''}`);
84
90
  }
85
91
  const plugin = {
@@ -92,27 +98,31 @@ const plugin = {
92
98
  throw new Error('[siming-plugin] 安装损坏:@siming-org/cli 依赖解析失败——' +
93
99
  '请执行 opencode plugin remove @siming-org/opencode-plugin && opencode plugin add @siming-org/opencode-plugin 重装');
94
100
  }
95
- // 目录基准:捕获本 location 的 directory(v2.0.26 实测:ToolContext 无 directory 字段,
96
- // ctx.location.directory 于 setup 时可得——三触发与工具 cwd 统一取此值)
101
+ // 目录基准:本 location 的 directory(v2.0.26 实测:ToolContext 无 directory 字段,
102
+ // ctx.location.directory 于 setup 时可得——三触发与工具 cwd 统一取此值)。
103
+ // per-location 实例(T202610220003):store + revalidator 每次各构造一个,本 location 的
104
+ // 拉取/注册/刷新/自检全链闭环在这对实例上——多 location 互不覆盖(历史缺陷:模块级单例被
105
+ // 最后完成初始化的 location 覆盖,其他 location 的 project 域技能从注册表消失)。
97
106
  const directory = ctx.location.directory;
98
- setLocationDirectory(directory);
107
+ const store = createAssetsStore();
108
+ const revalidator = createRevalidator(store, directory);
99
109
  // 注册面(解释器轴降级:MCP 与 siming_cli 跳过,其余照常;任务纪律注入不在此轴,仅依赖宿主 session 域)
100
110
  if (nodeBin !== null)
101
111
  registerMcp(ctx, { nodeBin, cliJs });
102
- registerRefreshTool(ctx, directory);
103
- registerSkills(ctx);
104
- registerAgents(ctx);
112
+ registerRefreshTool(ctx, revalidator, store);
113
+ registerSkills(ctx, store);
114
+ registerAgents(ctx, store);
105
115
  if (nodeBin !== null)
106
116
  registerSimingCli(ctx, { nodeBin, cliJs }, directory);
107
117
  registerTaskDiscipline(ctx, directory);
108
- // 变更生效通道 + 任务创建观测(fire-and-forget)
109
- setReloader('skill', () => ctx.skill.reload());
110
- setReloader('agent', () => ctx.agent.reload());
111
- observeTaskCreate(ctx.tool);
112
- // 初始化拉取(setup 期会话未建立 → location directory 基准,§4.C3-3)
113
- await initFetch(directory);
118
+ // 变更生效通道 + 任务创建观测(fire-and-forget)——均注入本 location 实例
119
+ revalidator.setReloader('skill', () => ctx.skill.reload());
120
+ revalidator.setReloader('agent', () => ctx.agent.reload());
121
+ revalidator.observeTaskCreate(ctx.tool);
122
+ // 初始化拉取(setup 期会话未建立 → 构造时 location directory 基准,§4.C3-3)
123
+ await revalidator.initFetch();
114
124
  // 激活自检(仅此刻一次)
115
- await selfCheck(ctx, { interpreterOk: nodeBin !== null });
125
+ await selfCheck(ctx, store, revalidator, { interpreterOk: nodeBin !== null });
116
126
  },
117
127
  };
118
128
  export default plugin;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  /**
2
2
  * 任务纪律提示词(T202610160002 用户裁定:插件内常量·短提示;T202610200001 补全
3
3
  * 使用引导与异常推进原则——任务读取/推进骨架、工具边界与异常处理;
4
+ * T202610220001 默认约束面收敛为开发流程与调研流程,其他工作默认不走 siming,业务特定流程需项目提示词声明;
4
5
  * 不做服务端动态拉取)。
5
6
  * 外层判定:register/task-discipline.ts——仅已接入 siming 工作区的主会话注入。
6
7
  */
@@ -1 +1 @@
1
- {"version":3,"file":"task-discipline-prompt.d.ts","sourceRoot":"","sources":["../src/task-discipline-prompt.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,QAU2B,CAAC"}
1
+ {"version":3,"file":"task-discipline-prompt.d.ts","sourceRoot":"","sources":["../src/task-discipline-prompt.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,eAAO,MAAM,sBAAsB,QAW2B,CAAC"}