@fantasticit/sumi 0.7.5 → 0.8.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 (173) hide show
  1. package/README.md +28 -25
  2. package/dist/adapters.d.ts +26 -3
  3. package/dist/adapters.js +117 -16
  4. package/dist/adapters.js.map +1 -1
  5. package/dist/agent-hooks.d.ts +7 -1
  6. package/dist/agent-hooks.js +207 -11
  7. package/dist/agent-hooks.js.map +1 -1
  8. package/dist/agents.js +36 -3
  9. package/dist/agents.js.map +1 -1
  10. package/dist/cli.d.ts +3 -1
  11. package/dist/cli.js +45 -6
  12. package/dist/cli.js.map +1 -1
  13. package/dist/context.d.ts +27 -0
  14. package/dist/context.js +31 -13
  15. package/dist/context.js.map +1 -1
  16. package/dist/index.d.ts +2 -0
  17. package/dist/index.js +2 -0
  18. package/dist/index.js.map +1 -1
  19. package/dist/instructions.js +7 -5
  20. package/dist/instructions.js.map +1 -1
  21. package/dist/task.d.ts +1 -0
  22. package/dist/task.js +170 -0
  23. package/dist/task.js.map +1 -0
  24. package/dist/visualize-page.d.ts +1 -0
  25. package/dist/visualize-page.js +49 -0
  26. package/dist/visualize-page.js.map +1 -0
  27. package/dist/visualize.d.ts +5 -0
  28. package/dist/visualize.js +132 -0
  29. package/dist/visualize.js.map +1 -0
  30. package/node_modules/@sumi/create/dist/scaffold.js +6 -0
  31. package/node_modules/@sumi/create/dist/scaffold.js.map +1 -1
  32. package/node_modules/@sumi/create/package.json +1 -1
  33. package/node_modules/@sumi/create/template/AGENTS.md +2 -0
  34. package/node_modules/@sumi/create/template/control/config.yaml +2 -0
  35. package/node_modules/@sumi/create/template/control/flows/change.flow.yaml +6 -0
  36. package/node_modules/@sumi/create/template/control/flows/check.flow.yaml +8 -0
  37. package/node_modules/@sumi/create/template/control/rubrics/business-impact.yaml +6 -0
  38. package/node_modules/@sumi/create/template/control/rules/development.md +61 -0
  39. package/node_modules/@sumi/create/template/init/AGENTS.md +2 -0
  40. package/node_modules/@sumi/create/template/init/control/flows/check.flow.yaml +2 -0
  41. package/node_modules/@sumi/kernel/dist/brief.d.ts +1 -0
  42. package/node_modules/@sumi/kernel/dist/brief.js +1 -0
  43. package/node_modules/@sumi/kernel/dist/brief.js.map +1 -1
  44. package/node_modules/@sumi/kernel/dist/engine.js +1 -0
  45. package/node_modules/@sumi/kernel/dist/engine.js.map +1 -1
  46. package/node_modules/@sumi/kernel/package.json +2 -2
  47. package/node_modules/@sumi/plugin-sdk/README.md +39 -20
  48. package/node_modules/@sumi/plugin-sdk/dist/index.d.ts +2 -0
  49. package/node_modules/@sumi/plugin-sdk/dist/index.js +2 -0
  50. package/node_modules/@sumi/plugin-sdk/dist/index.js.map +1 -1
  51. package/node_modules/@sumi/plugin-sdk/dist/protocol.d.ts +59 -1
  52. package/node_modules/@sumi/plugin-sdk/dist/protocol.js.map +1 -1
  53. package/node_modules/@sumi/plugin-sdk/dist/rules.d.ts +1 -4
  54. package/node_modules/@sumi/plugin-sdk/dist/rules.js.map +1 -1
  55. package/node_modules/@sumi/plugin-sdk/dist/session-context.d.ts +7 -0
  56. package/node_modules/@sumi/plugin-sdk/dist/session-context.js +62 -0
  57. package/node_modules/@sumi/plugin-sdk/dist/session-context.js.map +1 -0
  58. package/node_modules/@sumi/plugin-sdk/dist/trace.d.ts +16 -0
  59. package/node_modules/@sumi/plugin-sdk/dist/trace.js +48 -0
  60. package/node_modules/@sumi/plugin-sdk/dist/trace.js.map +1 -0
  61. package/node_modules/@sumi/plugin-sdk/dist/validate.js +62 -2
  62. package/node_modules/@sumi/plugin-sdk/dist/validate.js.map +1 -1
  63. package/node_modules/@sumi/plugin-sdk/package.json +1 -1
  64. package/node_modules/@sumi/plugins-core/dist/agent-rules.d.ts +5 -0
  65. package/node_modules/@sumi/plugins-core/dist/agent-rules.js +66 -0
  66. package/node_modules/@sumi/plugins-core/dist/agent-rules.js.map +1 -0
  67. package/node_modules/@sumi/plugins-core/dist/commands/agent-rules-before-edit.d.ts +1 -0
  68. package/node_modules/@sumi/plugins-core/dist/commands/agent-rules-before-edit.js +10 -0
  69. package/node_modules/@sumi/plugins-core/dist/commands/agent-rules-before-edit.js.map +1 -0
  70. package/node_modules/@sumi/plugins-core/dist/commands/agent-rules-prompt.d.ts +1 -0
  71. package/node_modules/@sumi/plugins-core/dist/commands/agent-rules-prompt.js +8 -0
  72. package/node_modules/@sumi/plugins-core/dist/commands/agent-rules-prompt.js.map +1 -0
  73. package/node_modules/@sumi/plugins-core/dist/plugins/agent-rules.d.ts +1 -0
  74. package/node_modules/@sumi/plugins-core/dist/plugins/agent-rules.js +19 -0
  75. package/node_modules/@sumi/plugins-core/dist/plugins/agent-rules.js.map +1 -0
  76. package/node_modules/@sumi/plugins-core/instructions/bugfix.md +9 -0
  77. package/node_modules/@sumi/plugins-core/instructions/feature.md +9 -0
  78. package/node_modules/@sumi/plugins-core/package.json +2 -2
  79. package/node_modules/@sumi/plugins-core/sumi-plugins.yaml +22 -1
  80. package/node_modules/@sumi/plugins-governance/README.md +3 -3
  81. package/node_modules/@sumi/plugins-governance/dist/checkout.d.ts +2 -0
  82. package/node_modules/@sumi/plugins-governance/dist/checkout.js.map +1 -1
  83. package/node_modules/@sumi/plugins-governance/dist/commands/pr-report-check.js +2 -0
  84. package/node_modules/@sumi/plugins-governance/dist/commands/pr-report-check.js.map +1 -1
  85. package/node_modules/@sumi/plugins-governance/dist/commands/pr-report.js +2 -3
  86. package/node_modules/@sumi/plugins-governance/dist/commands/pr-report.js.map +1 -1
  87. package/node_modules/@sumi/plugins-governance/dist/pr-report-sections.d.ts +6 -0
  88. package/node_modules/@sumi/plugins-governance/dist/pr-report-sections.js +11 -0
  89. package/node_modules/@sumi/plugins-governance/dist/pr-report-sections.js.map +1 -0
  90. package/node_modules/@sumi/plugins-governance/dist/pr-report-status.d.ts +1 -0
  91. package/node_modules/@sumi/plugins-governance/dist/pr-report-status.js +15 -12
  92. package/node_modules/@sumi/plugins-governance/dist/pr-report-status.js.map +1 -1
  93. package/node_modules/@sumi/plugins-governance/instructions/push.md +1 -1
  94. package/node_modules/@sumi/plugins-governance/package.json +2 -2
  95. package/node_modules/@sumi/plugins-openspec/dist/impact-consistency.d.ts +11 -0
  96. package/node_modules/@sumi/plugins-openspec/dist/impact-consistency.js +67 -0
  97. package/node_modules/@sumi/plugins-openspec/dist/impact-consistency.js.map +1 -0
  98. package/node_modules/@sumi/plugins-openspec/dist/plugins/impact-consistency.d.ts +1 -0
  99. package/node_modules/@sumi/plugins-openspec/dist/plugins/impact-consistency.js +63 -0
  100. package/node_modules/@sumi/plugins-openspec/dist/plugins/impact-consistency.js.map +1 -0
  101. package/node_modules/@sumi/plugins-openspec/package.json +4 -2
  102. package/node_modules/@sumi/plugins-openspec/sumi-plugins.yaml +6 -0
  103. package/node_modules/@sumi/plugins-precedent/README.md +6 -0
  104. package/node_modules/@sumi/plugins-precedent/dist/after-edit-context.d.ts +2 -0
  105. package/node_modules/@sumi/plugins-precedent/dist/after-edit-context.js +89 -77
  106. package/node_modules/@sumi/plugins-precedent/dist/after-edit-context.js.map +1 -1
  107. package/node_modules/@sumi/plugins-precedent/dist/candidates.d.ts +1 -0
  108. package/node_modules/@sumi/plugins-precedent/dist/commands/before-edit-context.d.ts +1 -0
  109. package/node_modules/@sumi/plugins-precedent/dist/commands/before-edit-context.js +10 -0
  110. package/node_modules/@sumi/plugins-precedent/dist/commands/before-edit-context.js.map +1 -0
  111. package/node_modules/@sumi/plugins-precedent/dist/commands/context.js +21 -5
  112. package/node_modules/@sumi/plugins-precedent/dist/commands/context.js.map +1 -1
  113. package/node_modules/@sumi/plugins-precedent/dist/commands/impact-submit.d.ts +1 -0
  114. package/node_modules/@sumi/plugins-precedent/dist/commands/impact-submit.js +21 -0
  115. package/node_modules/@sumi/plugins-precedent/dist/commands/impact-submit.js.map +1 -0
  116. package/node_modules/@sumi/plugins-precedent/dist/commands/on-prompt-context.d.ts +1 -0
  117. package/node_modules/@sumi/plugins-precedent/dist/commands/on-prompt-context.js +55 -0
  118. package/node_modules/@sumi/plugins-precedent/dist/commands/on-prompt-context.js.map +1 -0
  119. package/node_modules/@sumi/plugins-precedent/dist/impact-candidates.d.ts +6 -0
  120. package/node_modules/@sumi/plugins-precedent/dist/impact-candidates.js +51 -0
  121. package/node_modules/@sumi/plugins-precedent/dist/impact-candidates.js.map +1 -0
  122. package/node_modules/@sumi/plugins-precedent/dist/impact-state.d.ts +14 -0
  123. package/node_modules/@sumi/plugins-precedent/dist/impact-state.js +60 -0
  124. package/node_modules/@sumi/plugins-precedent/dist/impact-state.js.map +1 -0
  125. package/node_modules/@sumi/plugins-precedent/dist/impact.d.ts +52 -0
  126. package/node_modules/@sumi/plugins-precedent/dist/impact.js +253 -0
  127. package/node_modules/@sumi/plugins-precedent/dist/impact.js.map +1 -0
  128. package/node_modules/@sumi/plugins-precedent/dist/index.d.ts +2 -0
  129. package/node_modules/@sumi/plugins-precedent/dist/index.js +2 -0
  130. package/node_modules/@sumi/plugins-precedent/dist/index.js.map +1 -1
  131. package/node_modules/@sumi/plugins-precedent/dist/model.d.ts +2 -0
  132. package/node_modules/@sumi/plugins-precedent/dist/model.js.map +1 -1
  133. package/node_modules/@sumi/plugins-precedent/dist/plugins/harvest.js +31 -5
  134. package/node_modules/@sumi/plugins-precedent/dist/plugins/harvest.js.map +1 -1
  135. package/node_modules/@sumi/plugins-precedent/dist/plugins/impact.d.ts +1 -0
  136. package/node_modules/@sumi/plugins-precedent/dist/plugins/impact.js +60 -0
  137. package/node_modules/@sumi/plugins-precedent/dist/plugins/impact.js.map +1 -0
  138. package/node_modules/@sumi/plugins-precedent/package.json +3 -3
  139. package/node_modules/@sumi/plugins-precedent/sumi-plugins.yaml +34 -1
  140. package/node_modules/@sumi/plugins-review/README.md +27 -8
  141. package/node_modules/@sumi/plugins-review/dist/commands/context.js +18 -3
  142. package/node_modules/@sumi/plugins-review/dist/commands/context.js.map +1 -1
  143. package/node_modules/@sumi/plugins-review/dist/commands/host-model-hook.d.ts +1 -0
  144. package/node_modules/@sumi/plugins-review/dist/commands/host-model-hook.js +12 -0
  145. package/node_modules/@sumi/plugins-review/dist/commands/host-model-hook.js.map +1 -0
  146. package/node_modules/@sumi/plugins-review/dist/commands/model-recheck.d.ts +1 -0
  147. package/node_modules/@sumi/plugins-review/dist/commands/model-recheck.js +56 -0
  148. package/node_modules/@sumi/plugins-review/dist/commands/model-recheck.js.map +1 -0
  149. package/node_modules/@sumi/plugins-review/dist/commands/submit.js +25 -67
  150. package/node_modules/@sumi/plugins-review/dist/commands/submit.js.map +1 -1
  151. package/node_modules/@sumi/plugins-review/dist/model-execution.d.ts +29 -0
  152. package/node_modules/@sumi/plugins-review/dist/model-execution.js +157 -0
  153. package/node_modules/@sumi/plugins-review/dist/model-execution.js.map +1 -0
  154. package/node_modules/@sumi/plugins-review/dist/model-independence.d.ts +10 -0
  155. package/node_modules/@sumi/plugins-review/dist/model-independence.js +14 -0
  156. package/node_modules/@sumi/plugins-review/dist/model-independence.js.map +1 -0
  157. package/node_modules/@sumi/plugins-review/dist/plugins/independent-recheck.d.ts +1 -0
  158. package/node_modules/@sumi/plugins-review/dist/plugins/independent-recheck.js +88 -0
  159. package/node_modules/@sumi/plugins-review/dist/plugins/independent-recheck.js.map +1 -0
  160. package/node_modules/@sumi/plugins-review/dist/plugins/rubric.js +44 -7
  161. package/node_modules/@sumi/plugins-review/dist/plugins/rubric.js.map +1 -1
  162. package/node_modules/@sumi/plugins-review/dist/recheck.d.ts +48 -0
  163. package/node_modules/@sumi/plugins-review/dist/recheck.js +130 -0
  164. package/node_modules/@sumi/plugins-review/dist/recheck.js.map +1 -0
  165. package/node_modules/@sumi/plugins-review/dist/review.d.ts +8 -0
  166. package/node_modules/@sumi/plugins-review/dist/review.js +33 -4
  167. package/node_modules/@sumi/plugins-review/dist/review.js.map +1 -1
  168. package/node_modules/@sumi/plugins-review/dist/submission.d.ts +11 -0
  169. package/node_modules/@sumi/plugins-review/dist/submission.js +77 -0
  170. package/node_modules/@sumi/plugins-review/dist/submission.js.map +1 -0
  171. package/node_modules/@sumi/plugins-review/package.json +4 -3
  172. package/node_modules/@sumi/plugins-review/sumi-plugins.yaml +15 -0
  173. package/package.json +10 -10
package/dist/context.js CHANGED
@@ -1,11 +1,11 @@
1
1
  import { existsSync, readFileSync, statSync } from 'node:fs';
2
2
  import { join, relative, resolve } from 'node:path';
3
3
  import { KernelError, listFiles, loadConfig, loadFlow, loadRegistry, matches, resolveArgv } from '@sumi/kernel';
4
- import { cleanEnv, ruleRefs, spawnCommandSync } from '@sumi/plugin-sdk';
4
+ import { cleanEnv, ruleRefs, recordTrace, saveContextSession, spawnCommandSync, } from '@sumi/plugin-sdk';
5
5
  import { emit, registerCommand, requireRoot } from './cli.js';
6
6
  const GLOB = /[*?{[]/;
7
7
  /** 把输入(文件、目录、glob,可以尚不存在)展开为仓库相对路径,去掉排除路径。 */
8
- function expand(root, cwd, inputs, exclude) {
8
+ export function expand(root, cwd, inputs, exclude) {
9
9
  const all = listFiles(root);
10
10
  const out = new Set();
11
11
  for (const input of inputs) {
@@ -25,9 +25,9 @@ function ruleLines(root, controlGlobs) {
25
25
  const docs = listFiles(root).filter((f) => f.endsWith('.md') && (f === 'AGENTS.md' || matches(controlGlobs, f)));
26
26
  const out = [];
27
27
  for (const file of docs) {
28
- readFileSync(join(root, file), 'utf8')
29
- .split('\n')
30
- .forEach((text, i) => {
28
+ const content = readFileSync(join(root, file), 'utf8');
29
+ recordTrace(root, { kind: 'document', source: file, content });
30
+ content.split('\n').forEach((text, i) => {
31
31
  const refs = ruleRefs(text).map((r) => `${r.kind}:${r.target}`);
32
32
  if (refs.length)
33
33
  out.push({ file, line: i + 1, text: text.trim(), refs });
@@ -35,13 +35,11 @@ function ruleLines(root, controlGlobs) {
35
35
  }
36
36
  return out;
37
37
  }
38
- registerCommand('context', '写代码前查约束:sumi context <路径...>,列出生效的检查、规则原文与插件提供的约束条目', async (args, io, root) => {
39
- const repo = requireRoot(root);
40
- if (args.positionals.length === 0)
41
- throw new KernelError('用法:sumi context <路径...>(文件、目录或 glob,可以尚不存在)');
38
+ /** CLI 仅聚合提供者结果;意图选择由宿主模型完成。 */
39
+ export function collectContext(repo, input) {
42
40
  const config = loadConfig(repo);
43
41
  const registry = loadRegistry(repo, config);
44
- const paths = expand(repo, io.cwd, args.positionals, config.exclude);
42
+ const paths = input.paths;
45
43
  // 1. check 流程中触发条件命中这些路径的插件;没有触发条件的插件对所有路径生效。
46
44
  const active = new Map();
47
45
  for (const step of loadFlow(repo, config, registry, 'check').steps) {
@@ -55,13 +53,14 @@ registerCommand('context', '写代码前查约束:sumi context <路径...>,
55
53
  id: step.use,
56
54
  description: plugin.decl.description ?? '',
57
55
  steps: [],
58
- global: !triggers?.length,
56
+ global: !triggers?.length || triggers.includes('**'),
59
57
  };
60
58
  entry.steps.push(step.id);
61
59
  active.set(step.use, entry);
62
60
  }
63
61
  // 2. 插件声明的约束查询命令给出的条目,CLI 不认识它们的格式。
64
62
  const items = [];
63
+ const catalog = [];
65
64
  for (const { decl } of registry.plugins.values()) {
66
65
  if (!decl.context)
67
66
  continue;
@@ -69,15 +68,18 @@ registerCommand('context', '写代码前查约束:sumi context <路径...>,
69
68
  const [cmd, ...rest] = resolveArgv(command.argv, command.dir);
70
69
  const r = spawnCommandSync(cmd, rest, {
71
70
  cwd: repo,
72
- input: JSON.stringify({ repoRoot: repo, paths }),
71
+ input: JSON.stringify({ ...input, repoRoot: repo, paths }),
73
72
  encoding: 'utf8',
74
73
  env: { ...cleanEnv(), SUMI_ROOT: repo },
75
74
  windowsHide: true,
76
75
  });
77
76
  if (r.status !== 0)
78
77
  throw new KernelError(`约束查询命令 ${decl.context}(${decl.id})失败:${(r.stderr || '').trim()}`);
79
- for (const item of JSON.parse(r.stdout).items)
78
+ const result = JSON.parse(r.stdout);
79
+ for (const item of result.items)
80
80
  items.push({ ...item, plugin: decl.id });
81
+ for (const entry of result.catalog ?? [])
82
+ catalog.push(entry);
81
83
  }
82
84
  // 3. 引用了上述执行者的规则语句:路径 → 执行者 → 引用它的规则。针对这些路径的执行者与全局执行者分开。
83
85
  const plugins = [...active.values()];
@@ -93,6 +95,15 @@ registerCommand('context', '写代码前查约束:sumi context <路径...>,
93
95
  const lines = ruleLines(repo, config.zones.control ?? ['control/**']);
94
96
  const rules = lines.filter((l) => l.refs.some(specific));
95
97
  const generalRules = lines.filter((l) => !l.refs.some(specific) && l.refs.some(general));
98
+ return { paths, plugins, rules, generalRules, items, catalog };
99
+ }
100
+ registerCommand('context', '写代码前查约束:sumi context <路径...>,列出生效的检查、规则原文与插件提供的约束条目', async (args, io, root) => {
101
+ const repo = requireRoot(root);
102
+ if (args.positionals.length === 0)
103
+ throw new KernelError('用法:sumi context <路径...>(文件、目录或 glob,可以尚不存在)');
104
+ const config = loadConfig(repo);
105
+ const paths = expand(repo, io.cwd, args.positionals, config.exclude);
106
+ const { plugins, rules, generalRules, items } = collectContext(repo, { repoRoot: repo, paths });
96
107
  const section = (title, rows) => (rows.length ? [title, ...rows.map((l) => ` ${l}`)] : []);
97
108
  const brief = (t) => (t.length > 80 ? `${t.slice(0, 80)}…` : t);
98
109
  const text = [
@@ -112,6 +123,13 @@ registerCommand('context', '写代码前查约束:sumi context <路径...>,
112
123
  ...section('规则:', generalRules.map((r) => `${r.file}:${r.line} ${brief(r.text)}`)),
113
124
  ].join('\n');
114
125
  emit(io, args, { paths, plugins, rules, generalRules, items }, text);
126
+ const session = typeof args.flags.session === 'string' ? args.flags.session : process.env.SUMI_SESSION_ID;
127
+ if (session)
128
+ saveContextSession(repo, session, [
129
+ ...plugins.filter((p) => !p.global).map((p) => `plugin:${p.id}`),
130
+ ...items.filter((i) => !i.global).map((i) => `item:${i.ref}`),
131
+ ...rules.map((r) => `rule:${r.file}:${r.line}`),
132
+ ]);
115
133
  return 0;
116
134
  });
117
135
  //# sourceMappingURL=context.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -6,4 +6,6 @@ import './agents.js';
6
6
  import './instructions.js';
7
7
  import './scaffold-commands.js';
8
8
  import './context.js';
9
+ import './task.js';
10
+ import './visualize.js';
9
11
  import './vendor.js';
package/dist/index.js CHANGED
@@ -6,5 +6,7 @@ import './agents.js';
6
6
  import './instructions.js';
7
7
  import './scaffold-commands.js';
8
8
  import './context.js';
9
+ import './task.js';
10
+ import './visualize.js';
9
11
  import './vendor.js';
10
12
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC;AAC9B,OAAO,UAAU,CAAC;AAClB,OAAO,kBAAkB,CAAC;AAC1B,OAAO,aAAa,CAAC;AACrB,OAAO,mBAAmB,CAAC;AAC3B,OAAO,wBAAwB,CAAC;AAChC,OAAO,cAAc,CAAC;AACtB,OAAO,aAAa,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC;AAC9B,OAAO,UAAU,CAAC;AAClB,OAAO,kBAAkB,CAAC;AAC1B,OAAO,aAAa,CAAC;AACrB,OAAO,mBAAmB,CAAC;AAC3B,OAAO,wBAAwB,CAAC;AAChC,OAAO,cAAc,CAAC;AACtB,OAAO,WAAW,CAAC;AACnB,OAAO,gBAAgB,CAAC;AACxB,OAAO,aAAa,CAAC"}
@@ -1,7 +1,7 @@
1
1
  import { existsSync, readdirSync, readFileSync } from 'node:fs';
2
2
  import { join } from 'node:path';
3
3
  import { KernelError, loadConfig, loadRegistry } from '@sumi/kernel';
4
- import { configFile, PROJECT_SUMI } from '@sumi/plugin-sdk';
4
+ import { configFile, PROJECT_SUMI, recordTrace } from '@sumi/plugin-sdk';
5
5
  import { parse } from 'yaml';
6
6
  import { registerCommand } from './cli.js';
7
7
  /** 通用的 next 处理规则:skills、commands 与各主题指令共用这一份。 */
@@ -15,7 +15,7 @@ export const projectInstruction = (text) => text.replace(/\bsumi (?=[a-z-])/g, `
15
15
  /** CLI 自带的主题:develop、check 与 doctor 属于内核接线;其余主题由插件包的指令文件提供。 */
16
16
  const BUILTIN = {
17
17
  develop: {
18
- description: '任何代码、测试、配置或文档改动都使用:先用 sumi context 查约束,再实现,用 sumi run check 校验到通过',
18
+ description: '任何代码、测试、配置或文档改动都使用:先用 sumi task 取任务目录,再用 sumi context 查路径约束,最后运行检查',
19
19
  skill: true,
20
20
  text: (ctx) => `# 开发流程(sumi)
21
21
 
@@ -29,14 +29,14 @@ ${Object.entries(ctx.zones).length
29
29
  .map(([zone, globs]) => ` - ${zone}:${globs.map((g) => `\`${g}\``).join('、')}`)
30
30
  .join('\n')
31
31
  : ' - (项目还没有配置区域)'}
32
- 2. **先约束后实现**:动手前必须运行 \`sumi context\`,读完它列出的每条约束原文。不要凭印象或只读入口文档就开始写。
32
+ 2. **先约束后实现**:先运行 \`sumi task "<任务意图>"\`,从目录选择相关 ID 并执行 \`sumi task --select <id,...>\`;确定文件后运行 \`sumi context\`,读完列出的约束原文。不要凭印象或只读入口文档就开始写。
33
33
  3. **检查是唯一的完成标准**:不绕过 git hook(不用 \`--no-verify\`、\`HUSKY=0\` 等),不为了通过而放宽基线、删除或跳过检查与测试。被检查或 hook 拦截时按拦截提示处理;需要人处理的(ask-human)请用户在自己的终端执行,不替用户执行。
34
34
  4. **按 next 行动**:下一步由简报中的 next 决定,不凭退出码猜测。
35
35
 
36
36
  ## 步骤
37
37
 
38
- 1. **明确范围**:列出要新增或修改的文件路径(可以是尚不存在的文件、目录或 glob)。范围变化时回到第 2 步。
39
- 2. **查约束**:运行 \`sumi context <路径...>\`。
38
+ 1. **识别任务**:运行 \`sumi task "<任务意图>"\`(缺陷加 \`--bug\`,新能力加 \`--feature\`)。阅读目录,自行选择相关 ID,运行 \`sumi task --select <id,...>\`;不得把目录描述当作约束原文。
39
+ 2. **明确范围并查约束**:列出要新增或修改的文件路径(可以是尚不存在的文件、目录或 glob),运行 \`sumi context <路径...>\`。若 hook 已给出会话 ID,改用 \`sumi context --session <会话 ID> <路径...>\`;选择任务目录条目时同样给 \`sumi task --session <会话 ID> --select <id,...>\`,才能与编辑前后提示共享去重。范围变化时重查。
40
40
  - "针对这些路径"一节:逐条读它列出的每个条目与规则原文;某条规则需要上下文时,打开它给出的文件与行号。
41
41
  - "通用"一节适用于所有改动,按需打开。
42
42
  - 约束之间冲突、或与任务要求冲突时,停下向用户说明,不自行取舍。
@@ -144,6 +144,8 @@ registerCommand('instructions', '输出某个主题的操作指令:sumi instru
144
144
  return 3;
145
145
  }
146
146
  const text = projectInstruction(topic.text(topicContext(root)));
147
+ if (root)
148
+ recordTrace(root, { kind: 'document', source: `sumi instructions ${name}`, content: text });
147
149
  io.out(args.flags.json ? JSON.stringify({ topic: name, source: topic.source, description: topic.description, text }, null, 2) : text);
148
150
  return 0;
149
151
  });
@@ -1 +1 @@
1
- {"version":3,"file":"instructions.js","sourceRoot":"","sources":["../src/instructions.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"instructions.js","sourceRoot":"","sources":["../src/instructions.ts"],"names":[],"mappings":"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"}
package/dist/task.d.ts ADDED
@@ -0,0 +1 @@
1
+ export {};
package/dist/task.js ADDED
@@ -0,0 +1,170 @@
1
+ import { readFileSync } from 'node:fs';
2
+ import { resolve } from 'node:path';
3
+ import { loadConfig, loadRegistry, KernelError } from '@sumi/kernel';
4
+ import { PROJECT_SUMI, readContextSession, saveContextSession } from '@sumi/plugin-sdk';
5
+ import { ruleRefs } from '@sumi/plugin-sdk';
6
+ import { emit, registerCommand, requireRoot } from './cli.js';
7
+ import { collectContext, expand } from './context.js';
8
+ import { projectInstruction, topicContext, topics } from './instructions.js';
9
+ const LIMIT = 2300; // JSON 包装仍留出空间,整个 hook 输出不超过约 2500 字符。
10
+ function bounded(header, rows, footer) {
11
+ let text = header;
12
+ const keys = [];
13
+ for (const row of rows) {
14
+ const line = `\n${row.text.slice(0, 300)}`;
15
+ if (text.length + line.length + footer.length + 30 > LIMIT)
16
+ break;
17
+ text += line;
18
+ keys.push(row.key);
19
+ }
20
+ if (keys.length < rows.length)
21
+ text += '\n其余目录或条目已截断;';
22
+ return { text: `${text}${footer}`.slice(0, LIMIT), keys };
23
+ }
24
+ registerCommand('task', '按任务获取目录、精确上下文或评测:sumi task ["<意图>"] [--select <id,...>] [--eval <golden.jsonl>] [--bug|--feature] [--issue N] [--change id] [路径...] [--json]', { flags: ['select', 'eval', 'bug', 'feature', 'issue', 'change', 'session', 'no-record'], booleanFlags: ['bug', 'feature', 'no-record'] }, async (args, io, root) => {
25
+ const repo = requireRoot(root);
26
+ if (args.flags.bug && args.flags.feature)
27
+ throw new KernelError('--bug 与 --feature 不能同时使用');
28
+ const selected = typeof args.flags.select === 'string'
29
+ ? [
30
+ ...new Set(args.flags.select
31
+ .split(',')
32
+ .map((s) => s.trim())
33
+ .filter(Boolean)),
34
+ ]
35
+ : [];
36
+ if (args.flags.select && !selected.length)
37
+ throw new KernelError('--select 需要至少一个 ID');
38
+ if (selected.join(',').length > 400)
39
+ throw new KernelError('--select ID 列表过长,请分批查询');
40
+ const rawPaths = selected.length ? args.positionals : args.positionals.slice(1);
41
+ const config = loadConfig(repo);
42
+ const paths = expand(repo, io.cwd, rawPaths, config.exclude);
43
+ const session = typeof args.flags.session === 'string' ? args.flags.session : process.env.SUMI_SESSION_ID;
44
+ if (session && session.length > 200)
45
+ throw new KernelError('--session 过长');
46
+ const input = {
47
+ repoRoot: repo,
48
+ paths,
49
+ kind: args.flags.bug ? 'bug' : args.flags.feature ? 'feature' : 'other',
50
+ ...(typeof args.flags.issue === 'string' ? { issue: args.flags.issue } : {}),
51
+ ...(typeof args.flags.change === 'string' ? { change: args.flags.change } : {}),
52
+ };
53
+ // 目录先于选择查询。CLI 从不根据 intent 文本判断哪个 ID 相关。
54
+ const index = collectContext(repo, { ...input, catalog: true, select: [] });
55
+ const entries = [...new Map(index.catalog.map((entry) => [entry.id, entry])).values()].sort((a, b) => a.id.localeCompare(b.id));
56
+ if (args.flags.eval !== undefined) {
57
+ if (typeof args.flags.eval !== 'string')
58
+ throw new KernelError('--eval 需要 JSONL 文件路径');
59
+ const lines = readFileSync(resolve(io.cwd, args.flags.eval), 'utf8')
60
+ .split(/\r?\n/)
61
+ .filter((line) => line.trim());
62
+ if (!lines.length)
63
+ throw new KernelError('--eval 样本文件不能为空');
64
+ const knownIds = new Set(entries.map((entry) => entry.id));
65
+ let hits = 0;
66
+ let predicted = 0;
67
+ let expected = 0;
68
+ let sampleHits = 0;
69
+ for (const [i, line] of lines.entries()) {
70
+ let row;
71
+ try {
72
+ row = JSON.parse(line);
73
+ }
74
+ catch {
75
+ throw new KernelError(`--eval 第 ${i + 1} 行不是 JSON`);
76
+ }
77
+ const sample = row;
78
+ if (!sample ||
79
+ typeof sample.intent !== 'string' ||
80
+ !Array.isArray(sample.expected) ||
81
+ !Array.isArray(sample.selected) ||
82
+ !sample.expected.every((id) => typeof id === 'string') ||
83
+ !sample.selected.every((id) => typeof id === 'string'))
84
+ throw new KernelError(`--eval 第 ${i + 1} 行必须包含 intent、expected 与宿主代理给出的 selected ID 数组`);
85
+ const want = new Set(sample.expected);
86
+ const got = new Set(sample.selected);
87
+ const unknownIds = [...want, ...got].filter((id) => !knownIds.has(id));
88
+ if (unknownIds.length)
89
+ throw new KernelError(`--eval 第 ${i + 1} 行有未知目录 ID:${[...new Set(unknownIds)].join('、')}`);
90
+ const matched = [...got].filter((id) => want.has(id)).length;
91
+ hits += matched;
92
+ predicted += got.size;
93
+ expected += want.size;
94
+ if (matched || (!want.size && !got.size))
95
+ sampleHits++;
96
+ }
97
+ const metrics = {
98
+ samples: lines.length,
99
+ hitRate: sampleHits / lines.length,
100
+ precision: predicted ? hits / predicted : 0,
101
+ recall: expected ? hits / expected : 0,
102
+ };
103
+ emit(io, args, metrics, `样本 ${metrics.samples};命中率 ${metrics.hitRate.toFixed(3)};精确率 ${metrics.precision.toFixed(3)};召回率 ${metrics.recall.toFixed(3)}。selected 须来自宿主代理的独立选择,Sumi 不调用模型自评。`);
104
+ return 0;
105
+ }
106
+ if (!selected.length) {
107
+ if (!entries.length) {
108
+ const fallback = `当前项目没有任务上下文目录;请运行 ${PROJECT_SUMI} instructions develop,并在定位路径后运行 ${PROJECT_SUMI} context <路径...>。`;
109
+ emit(io, args, { phase: 'catalog', count: 0, text: fallback }, fallback);
110
+ return 0;
111
+ }
112
+ const seen = session ? new Set(readContextSession(repo, session)?.keys ?? []) : new Set();
113
+ const rows = entries
114
+ .filter((e) => !seen.has(`catalog:${e.id}`))
115
+ .map((e) => ({
116
+ key: `catalog:${e.id}`,
117
+ text: `- ${e.id}:${e.description}${e.symptoms ? `;现象:${e.symptoms}` : ''}`,
118
+ }));
119
+ const suffix = `\n由你判断相关 ID,然后运行 ${PROJECT_SUMI} task --select <id,...>${session ? ` --session ${JSON.stringify(session)}` : ''};Sumi 不做关键词分类。`;
120
+ const result = bounded('任务上下文目录(请选择相关 ID):', rows, suffix);
121
+ const deliveryKeys = result.keys.length === rows.length ? [...result.keys, 'catalog:complete'] : result.keys;
122
+ if (rows.length || !session) {
123
+ emit(io, args, { phase: 'catalog', count: result.keys.length, text: result.text, deliveryKeys }, result.text);
124
+ if (session && !args.flags['no-record'])
125
+ saveContextSession(repo, session, deliveryKeys);
126
+ }
127
+ else if (args.flags.json)
128
+ emit(io, args, { phase: 'catalog', count: 0, text: '' }, '');
129
+ return 0;
130
+ }
131
+ const known = new Set(entries.map((e) => e.id));
132
+ const unknown = selected.filter((id) => !known.has(id));
133
+ if (unknown.length)
134
+ throw new KernelError(`未知任务上下文 ID:${unknown.join('、')};先运行 ${PROJECT_SUMI} task "<意图>" 查看目录`);
135
+ const data = collectContext(repo, { ...input, select: selected });
136
+ const selectedItems = data.items.filter((i) => selected.some((id) => i.ref === id || i.aliases?.includes(id)));
137
+ const empty = selected.filter((id) => !selectedItems.some((item) => item.ref === id || item.aliases?.includes(id)));
138
+ if (empty.length)
139
+ throw new KernelError(`任务上下文 ID 没有可读取的条目:${empty.join('、')};请检查提供者的 select 实现`);
140
+ const selectedRefs = new Set(selectedItems.flatMap((item) => [item.ref, ...(item.aliases ?? [])]));
141
+ const selectedRules = [...data.rules, ...data.generalRules].filter((rule) => ruleRefs(rule.text).some((ref) => selectedRefs.has(`${ref.kind}:${ref.target}`)));
142
+ const rows = [
143
+ ...selectedItems.map((i) => ({
144
+ key: `item:${i.ref}`,
145
+ text: `- ${i.category ? `${i.category} ` : ''}[${i.ref}] ${i.text}${i.source ? `(来源:${i.source})` : ''}`,
146
+ })),
147
+ ...selectedRules.map((r) => ({ key: `rule:${r.file}:${r.line}`, text: `- ${r.file}:${r.line} ${r.text}` })),
148
+ ...data.plugins.filter((p) => !p.global).map((p) => ({ key: `plugin:${p.id}`, text: `- 机械门 ${p.id}:${p.description}` })),
149
+ ];
150
+ const seen = session ? new Set(readContextSession(repo, session)?.keys ?? []) : new Set();
151
+ const fresh = rows.filter((r) => !seen.has(r.key));
152
+ const footer = `\n原文:${PROJECT_SUMI} task --select ${selected.join(',')}${paths.length ? `;路径:${PROJECT_SUMI} context <路径...>` : ''}`;
153
+ const declared = [...loadRegistry(repo, config).plugins.values()].flatMap(({ decl }) => decl.taskTopics?.[input.kind] ? [decl.taskTopics[input.kind]] : []);
154
+ if (new Set(declared).size > 1)
155
+ throw new KernelError(`任务类型 ${input.kind} 的指令主题声明冲突:${declared.join('、')}`);
156
+ const topicName = declared[0] ?? 'develop';
157
+ const topic = topics(repo).get(topicName);
158
+ const workflow = topic
159
+ ? `\n流程(${topicName}):${projectInstruction(topic.text(topicContext(repo)))
160
+ .replace(/\s+/g, ' ')
161
+ .slice(0, 300)};完整:${PROJECT_SUMI} instructions ${topicName}`
162
+ : `\n流程:${PROJECT_SUMI} instructions develop`;
163
+ const text = [`已选择:${selected.join('、')}。${workflow}`, ...fresh.map((row) => row.text), footer].join('\n');
164
+ const deliveryKeys = fresh.map((row) => row.key);
165
+ emit(io, args, { phase: 'selected', count: deliveryKeys.length, text, deliveryKeys }, text);
166
+ if (session && deliveryKeys.length && !args.flags['no-record'])
167
+ saveContextSession(repo, session, deliveryKeys);
168
+ return 0;
169
+ });
170
+ //# sourceMappingURL=task.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task.js","sourceRoot":"","sources":["../src/task.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare const PAGE = "<!doctype html>\n<html lang=\"zh-CN\">\n<head>\n<meta charset=\"utf-8\"><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n<title>Sumi \u00B7 \u4F1A\u8BDD\u8BC1\u636E</title>\n<style>\n:root{font-family:Inter,\"PingFang SC\",\"Microsoft YaHei\",system-ui,sans-serif;color-scheme:light;background:#f4f6f5;color:#172923;--ink:#172923;--muted:#64756d;--line:#dbe3de;--accent:#145c47;--surface:#fff;--soft:#eaf2ec}\n*{box-sizing:border-box}body{margin:0}button{font:inherit}::selection{background:#b9dcc7;color:#102b20}\n.shell{max-width:1440px;margin:auto;padding:32px clamp(20px,4vw,64px) 80px}\n.top{display:flex;justify-content:space-between;gap:24px;align-items:flex-start;padding-bottom:28px;border-bottom:1px solid var(--line)}\n.brand{display:flex;align-items:center;gap:12px;color:var(--accent);font-size:14px;font-weight:750;letter-spacing:.03em}.mark{display:grid;place-items:center;width:30px;height:30px;border-radius:9px;background:var(--accent);color:white;font-size:18px;font-weight:800}\nh1{font-size:clamp(30px,3.5vw,48px);letter-spacing:-.035em;line-height:1.12;margin:25px 0 10px}h2{font-size:19px;letter-spacing:-.02em;margin:0}p{margin:0;line-height:1.6}.intro{color:var(--muted);max-width:68ch;font-size:14px}\n.toolbar{display:flex;gap:12px;align-items:center;white-space:nowrap}.live{color:var(--accent);font-size:12px;font-weight:700;display:flex;gap:8px;align-items:center}.live:before{content:\"\";width:7px;height:7px;border-radius:50%;background:#279c6c;box-shadow:0 0 0 3px #d8eee2}\nbutton{background:white;border:1px solid #b8c9be;color:var(--ink);border-radius:9px;padding:9px 15px;cursor:pointer;font-weight:650}button:hover{background:var(--soft)}button:focus-visible,summary:focus-visible{outline:3px solid #75b596;outline-offset:3px}\n.status{display:flex;flex-wrap:wrap;gap:9px 22px;align-items:center;padding:18px 0 24px;font-size:12px;color:var(--muted)}.status strong{color:var(--ink)}.status .warn{color:#9b552d}.status .ok{color:var(--accent)}\n.panel{background:var(--surface);border:1px solid var(--line);border-radius:14px;min-width:0;overflow:hidden}.panel-head{padding:22px 24px 18px;border-bottom:1px solid #edf1ee;display:flex;align-items:start;justify-content:space-between;gap:16px}.panel-head p{color:var(--muted);font-size:12px;margin-top:5px}.count{background:var(--soft);color:var(--accent);font-size:12px;font-weight:750;min-width:28px;text-align:center;padding:5px 8px;border-radius:7px;font-variant-numeric:tabular-nums}\n.filters{display:flex;gap:7px;flex-wrap:wrap;padding:17px 24px;border-bottom:1px solid #edf1ee}.filters button{padding:6px 11px;border:0;background:transparent;color:var(--muted);font-size:12px;font-weight:650}.filters button[aria-pressed=\"true\"]{background:var(--accent);color:white}.filters button:hover:not([aria-pressed=\"true\"]){background:var(--soft);color:var(--ink)}\n.timeline{list-style:none;margin:0;padding:8px 28px 28px}.event{display:grid;grid-template-columns:112px 24px minmax(0,1fr);min-height:90px}.event-time{padding-top:21px;color:var(--muted);font-size:11px;font-variant-numeric:tabular-nums}.rail{position:relative}.rail:before{content:\"\";position:absolute;top:0;bottom:0;left:11px;width:1px;background:#d7e4db}.rail:after{content:\"\";position:absolute;top:22px;left:6px;width:11px;height:11px;border:2px solid white;border-radius:50%;background:#89ae9a;box-shadow:0 0 0 1px #89ae9a}.event.injection .rail:after{background:var(--accent);box-shadow:0 0 0 1px var(--accent)}.event.agent-read .rail:after{background:#3c78a0;box-shadow:0 0 0 1px #3c78a0}.event.prompt .rail:after{background:#d2a357;box-shadow:0 0 0 1px #d2a357}.event-body{min-width:0;padding:17px 0 24px 22px;border-bottom:1px solid #edf1ee}.event:last-child .event-body{border-bottom:0}.event-title{display:flex;flex-wrap:wrap;gap:8px 12px;align-items:center;font-size:15px;font-weight:750;overflow-wrap:anywhere}.type{color:var(--accent);background:var(--soft);padding:4px 7px;border-radius:5px;font-size:11px;font-weight:750}.event.agent-read .type{color:#265d80;background:#eaf2f8}.event.prompt .type{color:#8b5924;background:#f8eee0}.event-summary{font-size:12px;color:var(--muted);margin-top:6px;overflow-wrap:anywhere}.excerpt{white-space:pre-wrap;overflow-wrap:anywhere;font-size:13px;line-height:1.6;margin-top:12px;max-width:75ch}.event details{margin-top:10px}.event summary{cursor:pointer;display:inline-block;color:var(--accent);font-size:12px;font-weight:700}.event summary:hover{text-decoration:underline;text-underline-offset:3px}.event summary:focus-visible{outline:3px solid #75b596;outline-offset:3px}.event pre{white-space:pre-wrap;overflow-wrap:anywhere;max-height:380px;overflow:auto;background:#f4f7f5;border-radius:8px;padding:16px;margin:12px 0 0;font:12px/1.65 ui-monospace,SFMono-Regular,Menlo,monospace;color:#24382f}.empty{padding:28px;color:var(--muted);font-size:13px;line-height:1.65}.empty strong{display:block;color:var(--ink);margin-bottom:4px}\n.read-boundary{padding:18px 24px 20px;background:#e9efeb;border-top:1px solid var(--line);font-size:12px;line-height:1.6;color:#43574c}.read-boundary strong{display:block;color:var(--ink);margin-bottom:3px}\n.foot{margin-top:24px;color:var(--muted);font-size:12px;line-height:1.65;max-width:85ch}*{scrollbar-color:#b4c7ba transparent;scrollbar-width:thin}\n@media(max-width:850px){.top{gap:16px}.shell{padding-top:22px}}\n@media(max-width:560px){.top{display:block}.toolbar{margin-top:20px;justify-content:space-between}.panel-head{padding-left:18px;padding-right:18px}.filters{padding-left:14px;padding-right:14px}.timeline{padding-left:14px;padding-right:18px}.event{grid-template-columns:70px 20px minmax(0,1fr)}.event-body{padding-left:12px}.event-time{font-size:10px}.status{gap:8px 15px}}\n</style>\n</head><body><div class=\"shell\">\n<header class=\"top\"><div><div class=\"brand\"><span class=\"mark\" aria-hidden=\"true\">S</span><span>SUMI / \u89C2\u5BDF\u53F0</span></div><h1>\u4F1A\u8BDD\u8BC1\u636E</h1><p class=\"intro\">\u6CBF\u4E00\u6B21\u5F00\u53D1\u4F1A\u8BDD\u67E5\u770B\u8F93\u5165\u3001Sumi \u9001\u51FA\u7684\u4E0A\u4E0B\u6587\u4E0E\u53EF\u9A8C\u8BC1\u7684\u8BFB\u53D6\u8BB0\u5F55\u3002</p></div><div class=\"toolbar\"><span class=\"live\">\u672C\u5730\u91C7\u96C6\u4E2D</span><button id=\"refresh\" type=\"button\">\u5237\u65B0\u6570\u636E</button></div></header>\n<div id=\"status\" class=\"status\" role=\"status\"></div>\n<main class=\"panel timeline-panel\" aria-labelledby=\"timeline-title\">\n<div class=\"panel-head\"><div><h2 id=\"timeline-title\">\u4E8B\u4EF6\u65F6\u95F4\u7EBF</h2><p>\u4ECE\u4E0A\u5230\u4E0B\u6309\u53D1\u751F\u65F6\u95F4\u6392\u5217\uFF1B\u5148\u770B\u6765\u6E90\u548C\u6587\u6863\u540D\uFF0C\u5C55\u5F00\u67E5\u770B\u5168\u6587</p></div><span id=\"timeline-count\" class=\"count\">0</span></div>\n<div class=\"filters\" role=\"group\" aria-label=\"\u7B5B\u9009\u4E8B\u4EF6\"><button type=\"button\" data-filter=\"all\" aria-pressed=\"true\">\u5168\u90E8</button><button type=\"button\" data-filter=\"prompt\" aria-pressed=\"false\">\u7528\u6237\u63D0\u793A\u8BCD</button><button type=\"button\" data-filter=\"injection\" aria-pressed=\"false\">Sumi \u6CE8\u5165</button><button type=\"button\" data-filter=\"agent-read\" aria-pressed=\"false\">Agent \u8BFB\u53D6</button><button type=\"button\" data-filter=\"document\" aria-pressed=\"false\">Sumi \u8BFB\u53D6</button><button type=\"button\" data-filter=\"command\" aria-pressed=\"false\">\u547D\u4EE4</button></div>\n<ol id=\"timeline\" class=\"timeline\"></ol>\n<div class=\"read-boundary\"><strong>\u8BFB\u53D6\u8BC1\u636E\u8303\u56F4</strong>\u201CAgent \u8BFB\u53D6\u201D\u6765\u81EA\u5BBF\u4E3B Read \u5DE5\u5177\u6210\u529F\u8FD4\u56DE\u7684\u9879\u76EE\u6587\u4EF6\u5185\u5BB9\uFF1B\u201CSumi \u8BFB\u53D6\u201D\u4EC5\u8868\u793A Sumi \u6253\u5F00\u4E86\u6587\u6863\uFF0C\u201CSumi \u6CE8\u5165\u201D\u4EC5\u8868\u793A\u6587\u672C\u5DF2\u8F93\u51FA\u7ED9 AI \u5BBF\u4E3B\u3002Shell\u3001MCP \u548C\u5BBF\u4E3B\u81EA\u52A8\u52A0\u8F7D\u7B49\u5176\u4ED6\u8BFB\u53D6\u8DEF\u5F84\u4ECD\u4E0D\u5728\u6B64\u9879\u89C2\u6D4B\u8303\u56F4\u5185\uFF1B\u4EFB\u4F55\u4E8B\u4EF6\u90FD\u4E0D\u80FD\u8BC1\u660E AI \u7406\u89E3\u6216\u9075\u5FAA\u4E86\u5185\u5BB9\u3002</div>\n</main><p class=\"foot\">\u4EC5\u91C7\u96C6\u670D\u52A1\u542F\u52A8\u540E\u7684\u4E8B\u4EF6\uFF0C\u5185\u5BB9\u4FDD\u5B58\u5728\u672C\u9879\u76EE .sumi/ \u4E2D\uFF0C\u91CD\u542F\u4F1A\u6E05\u7A7A\u3002\u8BB0\u5F55\u53EF\u80FD\u5305\u542B\u63D0\u793A\u8BCD\u548C\u5F00\u53D1\u4E0A\u4E0B\u6587\u3002</p></div>\n<script>\nconst byId=(id)=>document.getElementById(id);\nlet lastSnapshot='';\nlet allEvents=[];\nlet activeFilter='all';\nfunction make(tag,className,value){const node=document.createElement(tag);if(className)node.className=className;if(value!==undefined)node.textContent=String(value);return node}\nfunction timeOf(value){if(!value)return '\u65F6\u95F4\u672A\u77E5';const date=new Date(value);return Number.isNaN(date.getTime())?String(value):date.toLocaleTimeString('zh-CN',{hour12:false})}\nfunction eventLabel(event){return {prompt:'\u7528\u6237\u63D0\u793A\u8BCD',injection:'Sumi \u6CE8\u5165','agent-read':'Agent \u8BFB\u53D6',document:'Sumi \u8BFB\u53D6',command:'Sumi \u547D\u4EE4',diagnostic:'\u91C7\u96C6\u8BCA\u65AD'}[event.kind]||'\u5176\u4ED6\u4E8B\u4EF6'}\nfunction eventTitle(event){if(event.kind==='document'||event.kind==='agent-read')return event.source||'\u6765\u6E90\u672A\u77E5\u7684\u6587\u6863';if(event.kind==='command')return event.command||'\u672A\u77E5\u547D\u4EE4';if(event.kind==='injection')return event.channel==='before-edit'?'\u7F16\u8F91\u524D\u4E0A\u4E0B\u6587':'\u63D0\u793A\u8BCD\u4E0A\u4E0B\u6587';if(event.kind==='prompt')return event.source?event.source+' \u7684\u7528\u6237\u8F93\u5165':'\u7528\u6237\u8F93\u5165';return '\u91C7\u96C6\u72B6\u6001'}\nfunction eventSummary(event){const parts=[];if(event.session)parts.push('\u4F1A\u8BDD '+event.session);if(event.kind==='agent-read')parts.push((event.channel||'\u5BBF\u4E3B')+' Read \u5DE5\u5177\u8FD4\u56DE\u7684\u9879\u76EE\u6587\u4EF6\u5185\u5BB9');if(event.kind==='document')parts.push('Sumi \u6253\u5F00\u4E86\u6B64\u6587\u6863\uFF1B\u4E0D\u7B49\u4E8E AI \u5DF2\u8BFB');if(event.kind==='injection')parts.push('\u5DF2\u8F93\u51FA\u7ED9 AI \u5BBF\u4E3B\uFF1B\u4E0D\u7B49\u4E8E AI \u5DF2\u8BFB');if(event.kind==='command'){if(Array.isArray(event.args)&&event.args.length)parts.push('\u53C2\u6570\uFF1A'+event.args.join(' '));if(event.exitCode!==undefined)parts.push('\u9000\u51FA\u7801 '+event.exitCode)}return parts.join(' \u00B7 ')}\nfunction eventText(event){if(event.kind==='command')return event.output?'\u8F93\u51FA\uFF1A'+event.output:'\u65E0\u8F93\u51FA';return String(event.content??'')}\nfunction renderTimeline(){const target=byId('timeline');const shown=activeFilter==='all'?allEvents:allEvents.filter(e=>e.kind===activeFilter);target.replaceChildren();byId('timeline-count').textContent=String(shown.length);if(!shown.length){const empty=make('li','empty');empty.append(make('strong','',activeFilter==='all'?'\u6682\u65E0\u4E8B\u4EF6':'\u6B64\u7C7B\u4E8B\u4EF6\u5C1A\u65E0\u8BB0\u5F55'),document.createTextNode(activeFilter==='injection'?'\u5F53\u524D\u6CA1\u6709 hook \u4E0A\u4E0B\u6587\u8F93\u51FA\u8BC1\u636E\u3002':'\u670D\u52A1\u8FD0\u884C\u671F\u95F4\u7684\u65B0\u4E8B\u4EF6\u4F1A\u51FA\u73B0\u5728\u8FD9\u91CC\u3002'));target.append(empty);return}for(const event of shown){const row=make('li','event '+String(event.kind||'other'));const time=make('time','event-time',timeOf(event.at));if(event.at)time.dateTime=event.at;const rail=make('span','rail');rail.setAttribute('aria-hidden','true');const body=make('div','event-body');const title=make('div','event-title');title.append(make('span','type',eventLabel(event)),make('span','',eventTitle(event)));body.append(title);const summary=eventSummary(event);if(summary)body.append(make('p','event-summary',summary));const full=eventText(event);if(event.kind==='prompt'&&full){body.append(make('p','excerpt',full.length>180?full.slice(0,180)+'\u2026':full))}if(full&&(event.kind!=='prompt'||full.length>180)){const details=make('details','');const label=event.kind==='document'||event.kind==='agent-read'?'\u67E5\u770B\u8BFB\u53D6\u5185\u5BB9':event.kind==='injection'?'\u67E5\u770B\u6CE8\u5165\u5168\u6587':event.kind==='command'?'\u67E5\u770B\u547D\u4EE4\u8F93\u51FA':'\u67E5\u770B\u63D0\u793A\u8BCD\u5168\u6587';details.append(make('summary','',label),make('pre','',full));body.append(details)}row.append(time,rail,body);target.append(row)}}\nasync function refresh(){try{const [eventsResponse,statusResponse]=await Promise.all([fetch('/api/events',{cache:'no-store'}),fetch('/api/status',{cache:'no-store'})]);if(!eventsResponse.ok||!statusResponse.ok)throw new Error('\u8BFB\u53D6\u5931\u8D25');const [events,status]=await Promise.all([eventsResponse.json(),statusResponse.json()]);const snapshot=JSON.stringify([events,status]);if(snapshot===lastSnapshot)return;lastSnapshot=snapshot;allEvents=events;renderTimeline();const prompts=events.filter(e=>e.kind==='prompt').length,injections=events.filter(e=>e.kind==='injection').length,reads=events.filter(e=>e.kind==='document').length,agentReads=events.filter(e=>e.kind==='agent-read').length;const statusBox=byId('status');statusBox.replaceChildren();for(const [value,kind] of [['\u91C7\u96C6\u5668 '+status.observer+' \u00B7 \u9879\u76EE\u5165\u53E3 '+(status.project||'\u672A\u77E5'),status.sameRuntime?'ok':'warn'],['\u4EE3\u7406 '+(status.agents.join('\u3001')||'\u672A\u914D\u7F6E'),''],['\u63D0\u793A\u8BCD '+prompts+' \u00B7 \u6CE8\u5165 '+injections+' \u00B7 Agent \u8BFB\u53D6 '+agentReads+' \u00B7 Sumi \u8BFB\u53D6 '+reads,'']]){statusBox.append(make('span',kind,value))}if(!status.sameRuntime)statusBox.append(make('strong','warn','\u91C7\u96C6\u5668\u4E0E\u9879\u76EE\u6B63\u5F0F\u5165\u53E3\u4E0D\u662F\u540C\u4E00\u6784\u5EFA\uFF0C\u6B63\u5F0F Sumi \u547D\u4EE4\u53EF\u80FD\u4E0D\u4F1A\u88AB\u8BB0\u5F55\u3002'))}catch{lastSnapshot='';byId('status').textContent='\u65E0\u6CD5\u8BFB\u53D6\u672C\u5730\u4E8B\u4EF6\uFF1B\u8BF7\u786E\u8BA4\u53EF\u89C6\u5316\u670D\u52A1\u4ECD\u5728\u8FD0\u884C\u3002'}}\nfor(const button of document.querySelectorAll('[data-filter]'))button.addEventListener('click',()=>{activeFilter=button.dataset.filter;for(const option of document.querySelectorAll('[data-filter]'))option.setAttribute('aria-pressed',String(option===button));renderTimeline()});\nbyId('refresh').addEventListener('click',refresh);refresh();setInterval(refresh,2000);\n</script></body></html>";
@@ -0,0 +1,49 @@
1
+ export const PAGE = `<!doctype html>
2
+ <html lang="zh-CN">
3
+ <head>
4
+ <meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1">
5
+ <title>Sumi · 会话证据</title>
6
+ <style>
7
+ :root{font-family:Inter,"PingFang SC","Microsoft YaHei",system-ui,sans-serif;color-scheme:light;background:#f4f6f5;color:#172923;--ink:#172923;--muted:#64756d;--line:#dbe3de;--accent:#145c47;--surface:#fff;--soft:#eaf2ec}
8
+ *{box-sizing:border-box}body{margin:0}button{font:inherit}::selection{background:#b9dcc7;color:#102b20}
9
+ .shell{max-width:1440px;margin:auto;padding:32px clamp(20px,4vw,64px) 80px}
10
+ .top{display:flex;justify-content:space-between;gap:24px;align-items:flex-start;padding-bottom:28px;border-bottom:1px solid var(--line)}
11
+ .brand{display:flex;align-items:center;gap:12px;color:var(--accent);font-size:14px;font-weight:750;letter-spacing:.03em}.mark{display:grid;place-items:center;width:30px;height:30px;border-radius:9px;background:var(--accent);color:white;font-size:18px;font-weight:800}
12
+ h1{font-size:clamp(30px,3.5vw,48px);letter-spacing:-.035em;line-height:1.12;margin:25px 0 10px}h2{font-size:19px;letter-spacing:-.02em;margin:0}p{margin:0;line-height:1.6}.intro{color:var(--muted);max-width:68ch;font-size:14px}
13
+ .toolbar{display:flex;gap:12px;align-items:center;white-space:nowrap}.live{color:var(--accent);font-size:12px;font-weight:700;display:flex;gap:8px;align-items:center}.live:before{content:"";width:7px;height:7px;border-radius:50%;background:#279c6c;box-shadow:0 0 0 3px #d8eee2}
14
+ button{background:white;border:1px solid #b8c9be;color:var(--ink);border-radius:9px;padding:9px 15px;cursor:pointer;font-weight:650}button:hover{background:var(--soft)}button:focus-visible,summary:focus-visible{outline:3px solid #75b596;outline-offset:3px}
15
+ .status{display:flex;flex-wrap:wrap;gap:9px 22px;align-items:center;padding:18px 0 24px;font-size:12px;color:var(--muted)}.status strong{color:var(--ink)}.status .warn{color:#9b552d}.status .ok{color:var(--accent)}
16
+ .panel{background:var(--surface);border:1px solid var(--line);border-radius:14px;min-width:0;overflow:hidden}.panel-head{padding:22px 24px 18px;border-bottom:1px solid #edf1ee;display:flex;align-items:start;justify-content:space-between;gap:16px}.panel-head p{color:var(--muted);font-size:12px;margin-top:5px}.count{background:var(--soft);color:var(--accent);font-size:12px;font-weight:750;min-width:28px;text-align:center;padding:5px 8px;border-radius:7px;font-variant-numeric:tabular-nums}
17
+ .filters{display:flex;gap:7px;flex-wrap:wrap;padding:17px 24px;border-bottom:1px solid #edf1ee}.filters button{padding:6px 11px;border:0;background:transparent;color:var(--muted);font-size:12px;font-weight:650}.filters button[aria-pressed="true"]{background:var(--accent);color:white}.filters button:hover:not([aria-pressed="true"]){background:var(--soft);color:var(--ink)}
18
+ .timeline{list-style:none;margin:0;padding:8px 28px 28px}.event{display:grid;grid-template-columns:112px 24px minmax(0,1fr);min-height:90px}.event-time{padding-top:21px;color:var(--muted);font-size:11px;font-variant-numeric:tabular-nums}.rail{position:relative}.rail:before{content:"";position:absolute;top:0;bottom:0;left:11px;width:1px;background:#d7e4db}.rail:after{content:"";position:absolute;top:22px;left:6px;width:11px;height:11px;border:2px solid white;border-radius:50%;background:#89ae9a;box-shadow:0 0 0 1px #89ae9a}.event.injection .rail:after{background:var(--accent);box-shadow:0 0 0 1px var(--accent)}.event.agent-read .rail:after{background:#3c78a0;box-shadow:0 0 0 1px #3c78a0}.event.prompt .rail:after{background:#d2a357;box-shadow:0 0 0 1px #d2a357}.event-body{min-width:0;padding:17px 0 24px 22px;border-bottom:1px solid #edf1ee}.event:last-child .event-body{border-bottom:0}.event-title{display:flex;flex-wrap:wrap;gap:8px 12px;align-items:center;font-size:15px;font-weight:750;overflow-wrap:anywhere}.type{color:var(--accent);background:var(--soft);padding:4px 7px;border-radius:5px;font-size:11px;font-weight:750}.event.agent-read .type{color:#265d80;background:#eaf2f8}.event.prompt .type{color:#8b5924;background:#f8eee0}.event-summary{font-size:12px;color:var(--muted);margin-top:6px;overflow-wrap:anywhere}.excerpt{white-space:pre-wrap;overflow-wrap:anywhere;font-size:13px;line-height:1.6;margin-top:12px;max-width:75ch}.event details{margin-top:10px}.event summary{cursor:pointer;display:inline-block;color:var(--accent);font-size:12px;font-weight:700}.event summary:hover{text-decoration:underline;text-underline-offset:3px}.event summary:focus-visible{outline:3px solid #75b596;outline-offset:3px}.event pre{white-space:pre-wrap;overflow-wrap:anywhere;max-height:380px;overflow:auto;background:#f4f7f5;border-radius:8px;padding:16px;margin:12px 0 0;font:12px/1.65 ui-monospace,SFMono-Regular,Menlo,monospace;color:#24382f}.empty{padding:28px;color:var(--muted);font-size:13px;line-height:1.65}.empty strong{display:block;color:var(--ink);margin-bottom:4px}
19
+ .read-boundary{padding:18px 24px 20px;background:#e9efeb;border-top:1px solid var(--line);font-size:12px;line-height:1.6;color:#43574c}.read-boundary strong{display:block;color:var(--ink);margin-bottom:3px}
20
+ .foot{margin-top:24px;color:var(--muted);font-size:12px;line-height:1.65;max-width:85ch}*{scrollbar-color:#b4c7ba transparent;scrollbar-width:thin}
21
+ @media(max-width:850px){.top{gap:16px}.shell{padding-top:22px}}
22
+ @media(max-width:560px){.top{display:block}.toolbar{margin-top:20px;justify-content:space-between}.panel-head{padding-left:18px;padding-right:18px}.filters{padding-left:14px;padding-right:14px}.timeline{padding-left:14px;padding-right:18px}.event{grid-template-columns:70px 20px minmax(0,1fr)}.event-body{padding-left:12px}.event-time{font-size:10px}.status{gap:8px 15px}}
23
+ </style>
24
+ </head><body><div class="shell">
25
+ <header class="top"><div><div class="brand"><span class="mark" aria-hidden="true">S</span><span>SUMI / 观察台</span></div><h1>会话证据</h1><p class="intro">沿一次开发会话查看输入、Sumi 送出的上下文与可验证的读取记录。</p></div><div class="toolbar"><span class="live">本地采集中</span><button id="refresh" type="button">刷新数据</button></div></header>
26
+ <div id="status" class="status" role="status"></div>
27
+ <main class="panel timeline-panel" aria-labelledby="timeline-title">
28
+ <div class="panel-head"><div><h2 id="timeline-title">事件时间线</h2><p>从上到下按发生时间排列;先看来源和文档名,展开查看全文</p></div><span id="timeline-count" class="count">0</span></div>
29
+ <div class="filters" role="group" aria-label="筛选事件"><button type="button" data-filter="all" aria-pressed="true">全部</button><button type="button" data-filter="prompt" aria-pressed="false">用户提示词</button><button type="button" data-filter="injection" aria-pressed="false">Sumi 注入</button><button type="button" data-filter="agent-read" aria-pressed="false">Agent 读取</button><button type="button" data-filter="document" aria-pressed="false">Sumi 读取</button><button type="button" data-filter="command" aria-pressed="false">命令</button></div>
30
+ <ol id="timeline" class="timeline"></ol>
31
+ <div class="read-boundary"><strong>读取证据范围</strong>“Agent 读取”来自宿主 Read 工具成功返回的项目文件内容;“Sumi 读取”仅表示 Sumi 打开了文档,“Sumi 注入”仅表示文本已输出给 AI 宿主。Shell、MCP 和宿主自动加载等其他读取路径仍不在此项观测范围内;任何事件都不能证明 AI 理解或遵循了内容。</div>
32
+ </main><p class="foot">仅采集服务启动后的事件,内容保存在本项目 .sumi/ 中,重启会清空。记录可能包含提示词和开发上下文。</p></div>
33
+ <script>
34
+ const byId=(id)=>document.getElementById(id);
35
+ let lastSnapshot='';
36
+ let allEvents=[];
37
+ let activeFilter='all';
38
+ function make(tag,className,value){const node=document.createElement(tag);if(className)node.className=className;if(value!==undefined)node.textContent=String(value);return node}
39
+ function timeOf(value){if(!value)return '时间未知';const date=new Date(value);return Number.isNaN(date.getTime())?String(value):date.toLocaleTimeString('zh-CN',{hour12:false})}
40
+ function eventLabel(event){return {prompt:'用户提示词',injection:'Sumi 注入','agent-read':'Agent 读取',document:'Sumi 读取',command:'Sumi 命令',diagnostic:'采集诊断'}[event.kind]||'其他事件'}
41
+ function eventTitle(event){if(event.kind==='document'||event.kind==='agent-read')return event.source||'来源未知的文档';if(event.kind==='command')return event.command||'未知命令';if(event.kind==='injection')return event.channel==='before-edit'?'编辑前上下文':'提示词上下文';if(event.kind==='prompt')return event.source?event.source+' 的用户输入':'用户输入';return '采集状态'}
42
+ function eventSummary(event){const parts=[];if(event.session)parts.push('会话 '+event.session);if(event.kind==='agent-read')parts.push((event.channel||'宿主')+' Read 工具返回的项目文件内容');if(event.kind==='document')parts.push('Sumi 打开了此文档;不等于 AI 已读');if(event.kind==='injection')parts.push('已输出给 AI 宿主;不等于 AI 已读');if(event.kind==='command'){if(Array.isArray(event.args)&&event.args.length)parts.push('参数:'+event.args.join(' '));if(event.exitCode!==undefined)parts.push('退出码 '+event.exitCode)}return parts.join(' · ')}
43
+ function eventText(event){if(event.kind==='command')return event.output?'输出:'+event.output:'无输出';return String(event.content??'')}
44
+ function renderTimeline(){const target=byId('timeline');const shown=activeFilter==='all'?allEvents:allEvents.filter(e=>e.kind===activeFilter);target.replaceChildren();byId('timeline-count').textContent=String(shown.length);if(!shown.length){const empty=make('li','empty');empty.append(make('strong','',activeFilter==='all'?'暂无事件':'此类事件尚无记录'),document.createTextNode(activeFilter==='injection'?'当前没有 hook 上下文输出证据。':'服务运行期间的新事件会出现在这里。'));target.append(empty);return}for(const event of shown){const row=make('li','event '+String(event.kind||'other'));const time=make('time','event-time',timeOf(event.at));if(event.at)time.dateTime=event.at;const rail=make('span','rail');rail.setAttribute('aria-hidden','true');const body=make('div','event-body');const title=make('div','event-title');title.append(make('span','type',eventLabel(event)),make('span','',eventTitle(event)));body.append(title);const summary=eventSummary(event);if(summary)body.append(make('p','event-summary',summary));const full=eventText(event);if(event.kind==='prompt'&&full){body.append(make('p','excerpt',full.length>180?full.slice(0,180)+'…':full))}if(full&&(event.kind!=='prompt'||full.length>180)){const details=make('details','');const label=event.kind==='document'||event.kind==='agent-read'?'查看读取内容':event.kind==='injection'?'查看注入全文':event.kind==='command'?'查看命令输出':'查看提示词全文';details.append(make('summary','',label),make('pre','',full));body.append(details)}row.append(time,rail,body);target.append(row)}}
45
+ async function refresh(){try{const [eventsResponse,statusResponse]=await Promise.all([fetch('/api/events',{cache:'no-store'}),fetch('/api/status',{cache:'no-store'})]);if(!eventsResponse.ok||!statusResponse.ok)throw new Error('读取失败');const [events,status]=await Promise.all([eventsResponse.json(),statusResponse.json()]);const snapshot=JSON.stringify([events,status]);if(snapshot===lastSnapshot)return;lastSnapshot=snapshot;allEvents=events;renderTimeline();const prompts=events.filter(e=>e.kind==='prompt').length,injections=events.filter(e=>e.kind==='injection').length,reads=events.filter(e=>e.kind==='document').length,agentReads=events.filter(e=>e.kind==='agent-read').length;const statusBox=byId('status');statusBox.replaceChildren();for(const [value,kind] of [['采集器 '+status.observer+' · 项目入口 '+(status.project||'未知'),status.sameRuntime?'ok':'warn'],['代理 '+(status.agents.join('、')||'未配置'),''],['提示词 '+prompts+' · 注入 '+injections+' · Agent 读取 '+agentReads+' · Sumi 读取 '+reads,'']]){statusBox.append(make('span',kind,value))}if(!status.sameRuntime)statusBox.append(make('strong','warn','采集器与项目正式入口不是同一构建,正式 Sumi 命令可能不会被记录。'))}catch{lastSnapshot='';byId('status').textContent='无法读取本地事件;请确认可视化服务仍在运行。'}}
46
+ for(const button of document.querySelectorAll('[data-filter]'))button.addEventListener('click',()=>{activeFilter=button.dataset.filter;for(const option of document.querySelectorAll('[data-filter]'))option.setAttribute('aria-pressed',String(option===button));renderTimeline()});
47
+ byId('refresh').addEventListener('click',refresh);refresh();setInterval(refresh,2000);
48
+ </script></body></html>`;
49
+ //# sourceMappingURL=visualize-page.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"visualize-page.js","sourceRoot":"","sources":["../src/visualize-page.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,IAAI,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wBA+CI,CAAC"}
@@ -0,0 +1,5 @@
1
+ export { recordTrace } from '@sumi/plugin-sdk';
2
+ export declare function startVisualization(root: string, port: number): Promise<{
3
+ url: string;
4
+ close: () => Promise<void>;
5
+ }>;