@fantasticit/sumi 0.7.6 → 0.9.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.
- package/README.md +18 -17
- package/dist/adapters.d.ts +3 -0
- package/dist/adapters.js +30 -4
- package/dist/adapters.js.map +1 -1
- package/dist/agent-hooks.d.ts +4 -1
- package/dist/agent-hooks.js +157 -12
- package/dist/agent-hooks.js.map +1 -1
- package/dist/cli.js +41 -2
- package/dist/cli.js.map +1 -1
- package/dist/context.js +4 -4
- package/dist/context.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/instructions.js +3 -1
- package/dist/instructions.js.map +1 -1
- package/dist/trace.d.ts +16 -0
- package/dist/trace.js +30 -0
- package/dist/trace.js.map +1 -0
- package/dist/visualize-page.d.ts +1 -0
- package/dist/visualize-page.js +49 -0
- package/dist/visualize-page.js.map +1 -0
- package/dist/visualize.d.ts +5 -0
- package/dist/visualize.js +176 -0
- package/dist/visualize.js.map +1 -0
- package/node_modules/@sumi/create/dist/scaffold.js +6 -0
- package/node_modules/@sumi/create/dist/scaffold.js.map +1 -1
- package/node_modules/@sumi/create/package.json +1 -1
- package/node_modules/@sumi/create/template/AGENTS.md +2 -0
- package/node_modules/@sumi/create/template/control/config.yaml +2 -0
- package/node_modules/@sumi/create/template/control/flows/change.flow.yaml +6 -0
- package/node_modules/@sumi/create/template/control/flows/check.flow.yaml +24 -0
- package/node_modules/@sumi/create/template/control/rubrics/behavior.yaml +17 -0
- package/node_modules/@sumi/create/template/control/rubrics/business-impact.yaml +6 -0
- package/node_modules/@sumi/create/template/control/rubrics/omission.yaml +13 -0
- package/node_modules/@sumi/create/template/control/rules/development.md +61 -0
- package/node_modules/@sumi/create/template/init/AGENTS.md +2 -0
- package/node_modules/@sumi/create/template/init/control/flows/check.flow.yaml +2 -0
- package/node_modules/@sumi/kernel/dist/brief.d.ts +1 -0
- package/node_modules/@sumi/kernel/dist/brief.js +1 -0
- package/node_modules/@sumi/kernel/dist/brief.js.map +1 -1
- package/node_modules/@sumi/kernel/dist/engine.js +1 -0
- package/node_modules/@sumi/kernel/dist/engine.js.map +1 -1
- package/node_modules/@sumi/kernel/package.json +2 -2
- package/node_modules/@sumi/plugin-sdk/README.md +2 -2
- package/node_modules/@sumi/plugin-sdk/dist/index.d.ts +1 -0
- package/node_modules/@sumi/plugin-sdk/dist/index.js +1 -0
- package/node_modules/@sumi/plugin-sdk/dist/index.js.map +1 -1
- package/node_modules/@sumi/plugin-sdk/dist/protocol.d.ts +6 -0
- package/node_modules/@sumi/plugin-sdk/dist/protocol.js.map +1 -1
- package/node_modules/@sumi/plugin-sdk/dist/trace.d.ts +16 -0
- package/node_modules/@sumi/plugin-sdk/dist/trace.js +58 -0
- package/node_modules/@sumi/plugin-sdk/dist/trace.js.map +1 -0
- package/node_modules/@sumi/plugin-sdk/dist/validate.js +15 -3
- package/node_modules/@sumi/plugin-sdk/dist/validate.js.map +1 -1
- package/node_modules/@sumi/plugin-sdk/package.json +1 -1
- package/node_modules/@sumi/plugins-core/dist/agent-rules.d.ts +5 -0
- package/node_modules/@sumi/plugins-core/dist/agent-rules.js +66 -0
- package/node_modules/@sumi/plugins-core/dist/agent-rules.js.map +1 -0
- package/node_modules/@sumi/plugins-core/dist/commands/agent-rules-before-edit.d.ts +1 -0
- package/node_modules/@sumi/plugins-core/dist/commands/agent-rules-before-edit.js +10 -0
- package/node_modules/@sumi/plugins-core/dist/commands/agent-rules-before-edit.js.map +1 -0
- package/node_modules/@sumi/plugins-core/dist/commands/agent-rules-prompt.d.ts +1 -0
- package/node_modules/@sumi/plugins-core/dist/commands/agent-rules-prompt.js +8 -0
- package/node_modules/@sumi/plugins-core/dist/commands/agent-rules-prompt.js.map +1 -0
- package/node_modules/@sumi/plugins-core/dist/plugins/agent-rules.d.ts +1 -0
- package/node_modules/@sumi/plugins-core/dist/plugins/agent-rules.js +19 -0
- package/node_modules/@sumi/plugins-core/dist/plugins/agent-rules.js.map +1 -0
- package/node_modules/@sumi/plugins-core/dist/plugins/test-affected.js +107 -15
- package/node_modules/@sumi/plugins-core/dist/plugins/test-affected.js.map +1 -1
- package/node_modules/@sumi/plugins-core/package.json +2 -2
- package/node_modules/@sumi/plugins-core/sumi-plugins.yaml +20 -0
- package/node_modules/@sumi/plugins-governance/README.md +3 -3
- package/node_modules/@sumi/plugins-governance/dist/checkout.d.ts +2 -0
- package/node_modules/@sumi/plugins-governance/dist/checkout.js.map +1 -1
- package/node_modules/@sumi/plugins-governance/dist/commands/pr-report-check.js +2 -0
- package/node_modules/@sumi/plugins-governance/dist/commands/pr-report-check.js.map +1 -1
- package/node_modules/@sumi/plugins-governance/dist/commands/pr-report.js +3 -3
- package/node_modules/@sumi/plugins-governance/dist/commands/pr-report.js.map +1 -1
- package/node_modules/@sumi/plugins-governance/dist/pr-report-sections.d.ts +6 -0
- package/node_modules/@sumi/plugins-governance/dist/pr-report-sections.js +13 -0
- package/node_modules/@sumi/plugins-governance/dist/pr-report-sections.js.map +1 -0
- package/node_modules/@sumi/plugins-governance/dist/pr-report-status.d.ts +1 -0
- package/node_modules/@sumi/plugins-governance/dist/pr-report-status.js +15 -12
- package/node_modules/@sumi/plugins-governance/dist/pr-report-status.js.map +1 -1
- package/node_modules/@sumi/plugins-governance/instructions/push.md +1 -1
- package/node_modules/@sumi/plugins-governance/package.json +2 -2
- package/node_modules/@sumi/plugins-openspec/dist/impact-consistency.d.ts +11 -0
- package/node_modules/@sumi/plugins-openspec/dist/impact-consistency.js +67 -0
- package/node_modules/@sumi/plugins-openspec/dist/impact-consistency.js.map +1 -0
- package/node_modules/@sumi/plugins-openspec/dist/plugins/impact-consistency.d.ts +1 -0
- package/node_modules/@sumi/plugins-openspec/dist/plugins/impact-consistency.js +63 -0
- package/node_modules/@sumi/plugins-openspec/dist/plugins/impact-consistency.js.map +1 -0
- package/node_modules/@sumi/plugins-openspec/package.json +4 -2
- package/node_modules/@sumi/plugins-openspec/sumi-plugins.yaml +6 -0
- package/node_modules/@sumi/plugins-precedent/dist/candidates.d.ts +1 -0
- package/node_modules/@sumi/plugins-precedent/dist/commands/context.js +6 -0
- package/node_modules/@sumi/plugins-precedent/dist/commands/context.js.map +1 -1
- package/node_modules/@sumi/plugins-precedent/dist/commands/impact-submit.d.ts +1 -0
- package/node_modules/@sumi/plugins-precedent/dist/commands/impact-submit.js +21 -0
- package/node_modules/@sumi/plugins-precedent/dist/commands/impact-submit.js.map +1 -0
- package/node_modules/@sumi/plugins-precedent/dist/impact-candidates.d.ts +6 -0
- package/node_modules/@sumi/plugins-precedent/dist/impact-candidates.js +51 -0
- package/node_modules/@sumi/plugins-precedent/dist/impact-candidates.js.map +1 -0
- package/node_modules/@sumi/plugins-precedent/dist/impact-state.d.ts +14 -0
- package/node_modules/@sumi/plugins-precedent/dist/impact-state.js +60 -0
- package/node_modules/@sumi/plugins-precedent/dist/impact-state.js.map +1 -0
- package/node_modules/@sumi/plugins-precedent/dist/impact.d.ts +52 -0
- package/node_modules/@sumi/plugins-precedent/dist/impact.js +253 -0
- package/node_modules/@sumi/plugins-precedent/dist/impact.js.map +1 -0
- package/node_modules/@sumi/plugins-precedent/dist/index.d.ts +2 -0
- package/node_modules/@sumi/plugins-precedent/dist/index.js +2 -0
- package/node_modules/@sumi/plugins-precedent/dist/index.js.map +1 -1
- package/node_modules/@sumi/plugins-precedent/dist/plugins/harvest.js +31 -5
- package/node_modules/@sumi/plugins-precedent/dist/plugins/harvest.js.map +1 -1
- package/node_modules/@sumi/plugins-precedent/dist/plugins/impact.d.ts +1 -0
- package/node_modules/@sumi/plugins-precedent/dist/plugins/impact.js +60 -0
- package/node_modules/@sumi/plugins-precedent/dist/plugins/impact.js.map +1 -0
- package/node_modules/@sumi/plugins-precedent/package.json +3 -3
- package/node_modules/@sumi/plugins-precedent/sumi-plugins.yaml +9 -0
- package/node_modules/@sumi/plugins-review/README.md +37 -11
- package/node_modules/@sumi/plugins-review/dist/commands/host-model-hook.d.ts +1 -0
- package/node_modules/@sumi/plugins-review/dist/commands/host-model-hook.js +15 -0
- package/node_modules/@sumi/plugins-review/dist/commands/host-model-hook.js.map +1 -0
- package/node_modules/@sumi/plugins-review/dist/commands/model-recheck.d.ts +1 -0
- package/node_modules/@sumi/plugins-review/dist/commands/model-recheck.js +71 -0
- package/node_modules/@sumi/plugins-review/dist/commands/model-recheck.js.map +1 -0
- package/node_modules/@sumi/plugins-review/dist/commands/submit.js +32 -67
- package/node_modules/@sumi/plugins-review/dist/commands/submit.js.map +1 -1
- package/node_modules/@sumi/plugins-review/dist/model-execution.d.ts +30 -0
- package/node_modules/@sumi/plugins-review/dist/model-execution.js +188 -0
- package/node_modules/@sumi/plugins-review/dist/model-execution.js.map +1 -0
- package/node_modules/@sumi/plugins-review/dist/model-independence.d.ts +11 -0
- package/node_modules/@sumi/plugins-review/dist/model-independence.js +23 -0
- package/node_modules/@sumi/plugins-review/dist/model-independence.js.map +1 -0
- package/node_modules/@sumi/plugins-review/dist/plugins/independent-recheck.d.ts +1 -0
- package/node_modules/@sumi/plugins-review/dist/plugins/independent-recheck.js +108 -0
- package/node_modules/@sumi/plugins-review/dist/plugins/independent-recheck.js.map +1 -0
- package/node_modules/@sumi/plugins-review/dist/plugins/rubric.js +120 -9
- package/node_modules/@sumi/plugins-review/dist/plugins/rubric.js.map +1 -1
- package/node_modules/@sumi/plugins-review/dist/plugins/validation.d.ts +1 -0
- package/node_modules/@sumi/plugins-review/dist/plugins/validation.js +35 -0
- package/node_modules/@sumi/plugins-review/dist/plugins/validation.js.map +1 -0
- package/node_modules/@sumi/plugins-review/dist/recheck.d.ts +52 -0
- package/node_modules/@sumi/plugins-review/dist/recheck.js +154 -0
- package/node_modules/@sumi/plugins-review/dist/recheck.js.map +1 -0
- package/node_modules/@sumi/plugins-review/dist/review-evidence.d.ts +3 -0
- package/node_modules/@sumi/plugins-review/dist/review-evidence.js +58 -0
- package/node_modules/@sumi/plugins-review/dist/review-evidence.js.map +1 -0
- package/node_modules/@sumi/plugins-review/dist/review.d.ts +58 -1
- package/node_modules/@sumi/plugins-review/dist/review.js +175 -11
- package/node_modules/@sumi/plugins-review/dist/review.js.map +1 -1
- package/node_modules/@sumi/plugins-review/dist/submission.d.ts +11 -0
- package/node_modules/@sumi/plugins-review/dist/submission.js +115 -0
- package/node_modules/@sumi/plugins-review/dist/submission.js.map +1 -0
- package/node_modules/@sumi/plugins-review/dist/validation-receipt.d.ts +8 -0
- package/node_modules/@sumi/plugins-review/dist/validation-receipt.js +110 -0
- package/node_modules/@sumi/plugins-review/dist/validation-receipt.js.map +1 -0
- package/node_modules/@sumi/plugins-review/package.json +4 -3
- package/node_modules/@sumi/plugins-review/sumi-plugins.yaml +21 -0
- package/package.json +10 -10
package/dist/cli.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { dirname, resolve } from 'node:path';
|
|
2
2
|
import { CONFIG_FILE, getCliBuild, getCliVersion, KernelError, loadConfig, loadRegistry, resolveArgv, run, } from '@sumi/kernel';
|
|
3
|
-
import { cleanEnv, configFile, PROJECT_SUMI_ARGV, spawnCommandSync } from '@sumi/plugin-sdk';
|
|
3
|
+
import { cleanEnv, configFile, PROJECT_SUMI_ARGV, recordTrace, spawnCommandSync } from '@sumi/plugin-sdk';
|
|
4
4
|
const MULTI_FLAGS = new Set(['label']);
|
|
5
5
|
/** 把插件使用的逻辑 `sumi` 命令映射到受管项目的固定入口。 */
|
|
6
6
|
function projectNextAction(action) {
|
|
@@ -115,7 +115,7 @@ function usage(pluginCommands) {
|
|
|
115
115
|
lines.push(` ${name.padEnd(12)} (插件命令)`);
|
|
116
116
|
return lines.join('\n');
|
|
117
117
|
}
|
|
118
|
-
|
|
118
|
+
async function mainImpl(argv, io) {
|
|
119
119
|
const [name, ...rest] = argv;
|
|
120
120
|
if (name === '--version' || name === 'version') {
|
|
121
121
|
const version = getCliVersion() ?? 'unknown';
|
|
@@ -168,4 +168,43 @@ export async function main(argv, io) {
|
|
|
168
168
|
throw error;
|
|
169
169
|
}
|
|
170
170
|
}
|
|
171
|
+
export async function main(argv, io) {
|
|
172
|
+
if (argv[0] === 'visualize')
|
|
173
|
+
return mainImpl(argv, io);
|
|
174
|
+
const root = findRoot(io.cwd);
|
|
175
|
+
let output = '';
|
|
176
|
+
let truncated = false;
|
|
177
|
+
let first = true;
|
|
178
|
+
const capture = (value) => {
|
|
179
|
+
if (!first && output.length < 131000)
|
|
180
|
+
output += '\n';
|
|
181
|
+
first = false;
|
|
182
|
+
const remaining = 131000 - output.length;
|
|
183
|
+
if (remaining > 0)
|
|
184
|
+
output += value.slice(0, remaining);
|
|
185
|
+
if (value.length > remaining)
|
|
186
|
+
truncated = true;
|
|
187
|
+
};
|
|
188
|
+
const wrapped = {
|
|
189
|
+
...io,
|
|
190
|
+
out: (value) => {
|
|
191
|
+
capture(value);
|
|
192
|
+
io.out(value);
|
|
193
|
+
},
|
|
194
|
+
err: (value) => {
|
|
195
|
+
capture(value);
|
|
196
|
+
io.err(value);
|
|
197
|
+
},
|
|
198
|
+
};
|
|
199
|
+
const code = await mainImpl(argv, wrapped);
|
|
200
|
+
if (root)
|
|
201
|
+
recordTrace(root, {
|
|
202
|
+
kind: 'command',
|
|
203
|
+
command: argv[0] ?? 'help',
|
|
204
|
+
args: argv.slice(1),
|
|
205
|
+
exitCode: code,
|
|
206
|
+
output: truncated ? `${output}\n[已截断]` : output,
|
|
207
|
+
});
|
|
208
|
+
return code;
|
|
209
|
+
}
|
|
171
210
|
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/context.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
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, saveContextSession, 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,可以尚不存在)展开为仓库相对路径,去掉排除路径。 */
|
|
@@ -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
|
-
|
|
30
|
-
|
|
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 });
|
package/dist/context.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC7D,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,YAAY,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChH,OAAO,EACL,QAAQ,EACR,QAAQ,EACR,kBAAkB,EAClB,gBAAgB,GAKjB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAgB9D,MAAM,IAAI,GAAG,QAAQ,CAAC;AAEtB,8CAA8C;AAC9C,MAAM,UAAU,MAAM,CAAC,IAAY,EAAE,GAAW,EAAE,MAAgB,EAAE,OAAiB;IACnF,MAAM,GAAG,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAC5B,MAAM,GAAG,GAAG,IAAI,GAAG,EAAU,CAAC;IAC9B,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACtE,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;YAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;aAC/E,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;YAChF,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACxE,CAAC;;YAAM,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACtB,CAAC;IACD,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AAC7D,CAAC;AAED,gCAAgC;AAChC,SAAS,SAAS,CAAC,IAAY,EAAE,YAAsB;IACrD,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,WAAW,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACjH,MAAM,GAAG,GAAe,EAAE,CAAC;IAC3B,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE,CAAC;QACxB,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
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,WAAW,CAAC;AACnB,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"}
|
package/dist/instructions.js
CHANGED
|
@@ -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 与各主题指令共用这一份。 */
|
|
@@ -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
|
});
|
package/dist/instructions.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instructions.js","sourceRoot":"","sources":["../src/instructions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAChE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACrE,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"instructions.js","sourceRoot":"","sources":["../src/instructions.ts"],"names":[],"mappings":"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"}
|
package/dist/trace.d.ts
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export interface TraceEvent {
|
|
2
|
+
kind: 'command' | 'document' | 'injection';
|
|
3
|
+
command?: string;
|
|
4
|
+
args?: string[];
|
|
5
|
+
exitCode?: number;
|
|
6
|
+
output?: string;
|
|
7
|
+
source?: string;
|
|
8
|
+
content?: string;
|
|
9
|
+
session?: string;
|
|
10
|
+
channel?: string;
|
|
11
|
+
}
|
|
12
|
+
export declare const activeFile: (root: string) => string;
|
|
13
|
+
export declare const eventsFile: (root: string) => string;
|
|
14
|
+
export declare function traceActive(root: string): boolean;
|
|
15
|
+
/** 只在用户主动启动的本地服务存活时记录;日志位于项目忽略目录。 */
|
|
16
|
+
export declare function recordTrace(root: string, event: TraceEvent): void;
|
package/dist/trace.js
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { appendFileSync, readFileSync } from 'node:fs';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
const folder = (root) => join(root, '.sumi/visualize');
|
|
4
|
+
export const activeFile = (root) => join(folder(root), 'active.json');
|
|
5
|
+
export const eventsFile = (root) => join(folder(root), 'events.jsonl');
|
|
6
|
+
export function traceActive(root) {
|
|
7
|
+
try {
|
|
8
|
+
const state = JSON.parse(readFileSync(activeFile(root), 'utf8'));
|
|
9
|
+
if (!Number.isInteger(state.pid) || state.pid <= 0)
|
|
10
|
+
return false;
|
|
11
|
+
process.kill(state.pid, 0);
|
|
12
|
+
return true;
|
|
13
|
+
}
|
|
14
|
+
catch {
|
|
15
|
+
return false;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
/** 只在用户主动启动的本地服务存活时记录;日志位于项目忽略目录。 */
|
|
19
|
+
export function recordTrace(root, event) {
|
|
20
|
+
if (!traceActive(root))
|
|
21
|
+
return;
|
|
22
|
+
try {
|
|
23
|
+
const capped = Object.fromEntries(Object.entries(event).map(([key, value]) => typeof value === 'string' && value.length > 131072 ? [key, `${value.slice(0, 131072)}\n[已截断]`] : [key, value]));
|
|
24
|
+
appendFileSync(eventsFile(root), `${JSON.stringify({ at: new Date().toISOString(), ...capped })}\n`, { mode: 0o600 });
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
// 可视化不得影响命令和 hook 的主功能。
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=trace.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trace.js","sourceRoot":"","sources":["../src/trace.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAcjC,MAAM,MAAM,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAC;AAC/D,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,aAAa,CAAC,CAAC;AAC9E,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,cAAc,CAAC,CAAC;AAE/E,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,CAAsB,CAAC;QACtF,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,IAAK,KAAK,CAAC,GAAc,IAAI,CAAC;YAAE,OAAO,KAAK,CAAC;QAC7E,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAa,EAAE,CAAC,CAAC,CAAC;QACrC,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,qCAAqC;AACrC,MAAM,UAAU,WAAW,CAAC,IAAY,EAAE,KAAiB;IACzD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;QAAE,OAAO;IAC/B,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,CAC/B,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CACzC,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,CAC9G,CACF,CAAC;QACF,cAAc,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,GAAG,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACxH,CAAC;IAAC,MAAM,CAAC;QACP,wBAAwB;IAC1B,CAAC;AACH,CAAC"}
|
|
@@ -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\">Sumi \u547D\u4EE4\u4E0E\u5DF2\u63A5\u7EBF hook \u7684\u4E8B\u4EF6\u4F1A\u6301\u7EED\u4FDD\u5B58\u5728\u672C\u9879\u76EE .sumi/visualize/events.jsonl\uFF0C\u5373\u4F7F\u9875\u9762\u672A\u542F\u52A8\u6216\u670D\u52A1\u5DF2\u5173\u95ED\u3002\u9875\u9762\u5C55\u793A\u6700\u8FD1 500 \u6761\u4E8B\u4EF6\uFF0C\u65E5\u5FD7\u4E0D\u4F1A\u56E0\u91CD\u542F\u6E05\u7A7A\uFF1B\u53EF\u624B\u52A8\u5220\u9664\u8BE5\u6587\u4EF6\u6E05\u7406\u5386\u53F2\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':'\u65B0\u4E8B\u4EF6\u4F1A\u6301\u7EED\u5199\u5165\u672C\u5730\u65E5\u5FD7\uFF0C\u5E76\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 命令与已接线 hook 的事件会持续保存在本项目 .sumi/visualize/events.jsonl,即使页面未启动或服务已关闭。页面展示最近 500 条事件,日志不会因重启清空;可手动删除该文件清理历史。记录可能包含提示词和开发上下文。</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,176 @@
|
|
|
1
|
+
import { chmodSync, closeSync, existsSync, mkdirSync, openSync, readFileSync, readSync, rmSync, statSync, writeFileSync } from 'node:fs';
|
|
2
|
+
import { createServer } from 'node:http';
|
|
3
|
+
import { join } from 'node:path';
|
|
4
|
+
import { getCliBuild, getCliVersion, KernelError } from '@sumi/kernel';
|
|
5
|
+
import { activeFile, configFile, eventsFile, traceActive } from '@sumi/plugin-sdk';
|
|
6
|
+
import { parse } from 'yaml';
|
|
7
|
+
import { registerCommand, requireRoot } from './cli.js';
|
|
8
|
+
import { PAGE } from './visualize-page.js';
|
|
9
|
+
export { recordTrace } from '@sumi/plugin-sdk';
|
|
10
|
+
const folder = (root) => join(root, '.sumi/visualize');
|
|
11
|
+
function captureStatus(root) {
|
|
12
|
+
const observer = getCliVersion() ?? 'unknown';
|
|
13
|
+
try {
|
|
14
|
+
const path = configFile(root);
|
|
15
|
+
const config = parse(readFileSync(join(root, path ?? 'control/config.yaml'), 'utf8'));
|
|
16
|
+
const project = typeof config.sumi === 'string' ? config.sumi : null;
|
|
17
|
+
const agents = Array.isArray(config.agents) ? config.agents.filter((value) => typeof value === 'string') : [];
|
|
18
|
+
const sameRuntime = project === observer && typeof config.sumiBuild === 'string' && getCliBuild() !== null && config.sumiBuild === getCliBuild();
|
|
19
|
+
return { observer, project, sameRuntime, agents };
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
return { observer, project: null, sameRuntime: false, agents: [] };
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
function recentEvents(root) {
|
|
26
|
+
try {
|
|
27
|
+
const file = eventsFile(root);
|
|
28
|
+
const size = statSync(file).size;
|
|
29
|
+
const maxBytes = 16 * 1024 * 1024;
|
|
30
|
+
const offset = Math.max(0, size - maxBytes);
|
|
31
|
+
const buffer = Buffer.alloc(size - offset);
|
|
32
|
+
const fd = openSync(file, 'r');
|
|
33
|
+
let bytesRead = 0;
|
|
34
|
+
let startsMidLine = offset > 0;
|
|
35
|
+
try {
|
|
36
|
+
if (offset > 0) {
|
|
37
|
+
const previous = Buffer.alloc(1);
|
|
38
|
+
startsMidLine = readSync(fd, previous, 0, 1, offset - 1) !== 1 || previous[0] !== 10;
|
|
39
|
+
}
|
|
40
|
+
while (bytesRead < buffer.length) {
|
|
41
|
+
const count = readSync(fd, buffer, bytesRead, buffer.length - bytesRead, offset + bytesRead);
|
|
42
|
+
if (count === 0)
|
|
43
|
+
break;
|
|
44
|
+
bytesRead += count;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
finally {
|
|
48
|
+
closeSync(fd);
|
|
49
|
+
}
|
|
50
|
+
const contents = buffer.toString('utf8', 0, bytesRead);
|
|
51
|
+
const completeLines = startsMidLine ? contents.slice(contents.indexOf('\n') + 1) : contents;
|
|
52
|
+
const events = completeLines
|
|
53
|
+
.trim()
|
|
54
|
+
.split('\n')
|
|
55
|
+
.filter(Boolean)
|
|
56
|
+
.flatMap((line) => {
|
|
57
|
+
try {
|
|
58
|
+
const event = JSON.parse(line);
|
|
59
|
+
return event && typeof event === 'object' && !Array.isArray(event) && 'kind' in event && typeof event.kind === 'string'
|
|
60
|
+
? [event]
|
|
61
|
+
: [];
|
|
62
|
+
}
|
|
63
|
+
catch {
|
|
64
|
+
return [];
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
const diagnostics = [];
|
|
68
|
+
if (offset > 0)
|
|
69
|
+
diagnostics.push({ kind: 'diagnostic', content: '仅读取最近 16 MiB 的记录;更早事件仍保存在项目本地日志中' });
|
|
70
|
+
if (events.length > 500)
|
|
71
|
+
diagnostics.push({ kind: 'diagnostic', content: '仅显示最近 500 条有效事件;更早事件仍保存在项目本地日志中' });
|
|
72
|
+
const eventTime = (event) => {
|
|
73
|
+
if (!event || typeof event !== 'object' || !('at' in event) || typeof event.at !== 'string')
|
|
74
|
+
return Infinity;
|
|
75
|
+
const time = Date.parse(event.at);
|
|
76
|
+
return Number.isNaN(time) ? Infinity : time;
|
|
77
|
+
};
|
|
78
|
+
return [
|
|
79
|
+
...diagnostics,
|
|
80
|
+
...events.slice(-500).sort((left, right) => {
|
|
81
|
+
const leftTime = eventTime(left);
|
|
82
|
+
const rightTime = eventTime(right);
|
|
83
|
+
return leftTime === rightTime ? 0 : leftTime < rightTime ? -1 : 1;
|
|
84
|
+
}),
|
|
85
|
+
];
|
|
86
|
+
}
|
|
87
|
+
catch {
|
|
88
|
+
return [];
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
export async function startVisualization(root, port) {
|
|
92
|
+
if (traceActive(root))
|
|
93
|
+
throw new KernelError('本项目已有运行中的可视化服务');
|
|
94
|
+
mkdirSync(folder(root), { recursive: true, mode: 0o700 });
|
|
95
|
+
chmodSync(folder(root), 0o700);
|
|
96
|
+
if (existsSync(eventsFile(root)))
|
|
97
|
+
chmodSync(eventsFile(root), 0o600);
|
|
98
|
+
const server = createServer((req, res) => {
|
|
99
|
+
res.setHeader('Cache-Control', 'no-store');
|
|
100
|
+
res.setHeader('X-Content-Type-Options', 'nosniff');
|
|
101
|
+
res.setHeader('Content-Security-Policy', "default-src 'none'; script-src 'unsafe-inline'; style-src 'unsafe-inline'; connect-src 'self'");
|
|
102
|
+
const address = server.address();
|
|
103
|
+
if (!address || typeof address === 'string' || req.headers.host !== `127.0.0.1:${address.port}`) {
|
|
104
|
+
res.statusCode = 403;
|
|
105
|
+
res.end('Forbidden');
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
if (req.url === '/api/events') {
|
|
109
|
+
res.setHeader('Content-Type', 'application/json; charset=utf-8');
|
|
110
|
+
res.end(JSON.stringify(recentEvents(root)));
|
|
111
|
+
}
|
|
112
|
+
else if (req.url === '/api/status') {
|
|
113
|
+
res.setHeader('Content-Type', 'application/json; charset=utf-8');
|
|
114
|
+
res.end(JSON.stringify(captureStatus(root)));
|
|
115
|
+
}
|
|
116
|
+
else if (req.url === '/') {
|
|
117
|
+
res.setHeader('Content-Type', 'text/html; charset=utf-8');
|
|
118
|
+
res.end(PAGE);
|
|
119
|
+
}
|
|
120
|
+
else {
|
|
121
|
+
res.statusCode = 404;
|
|
122
|
+
res.end('Not found');
|
|
123
|
+
}
|
|
124
|
+
});
|
|
125
|
+
try {
|
|
126
|
+
await new Promise((resolve, reject) => {
|
|
127
|
+
server.once('error', reject);
|
|
128
|
+
server.listen(port, '127.0.0.1', resolve);
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
catch (error) {
|
|
132
|
+
throw new KernelError(`无法启动可视化服务:${error.message}`);
|
|
133
|
+
}
|
|
134
|
+
const address = server.address();
|
|
135
|
+
const actualPort = address && typeof address === 'object' ? address.port : port;
|
|
136
|
+
try {
|
|
137
|
+
writeFileSync(activeFile(root), JSON.stringify({ pid: process.pid }), { mode: 0o600 });
|
|
138
|
+
}
|
|
139
|
+
catch (error) {
|
|
140
|
+
await new Promise((resolve) => server.close(() => resolve()));
|
|
141
|
+
throw new KernelError(`无法初始化可视化记录:${error.message}`);
|
|
142
|
+
}
|
|
143
|
+
const close = async () => {
|
|
144
|
+
await new Promise((resolve) => server.close(() => resolve()));
|
|
145
|
+
if (existsSync(activeFile(root))) {
|
|
146
|
+
try {
|
|
147
|
+
const state = JSON.parse(readFileSync(activeFile(root), 'utf8'));
|
|
148
|
+
if (state.pid === process.pid)
|
|
149
|
+
rmSync(activeFile(root));
|
|
150
|
+
}
|
|
151
|
+
catch {
|
|
152
|
+
/* 其他进程已接管 */
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
};
|
|
156
|
+
return { url: `http://127.0.0.1:${actualPort}`, close };
|
|
157
|
+
}
|
|
158
|
+
registerCommand('visualize', '启动本地 HTML 服务:sumi visualize [--port <端口>]', { flags: ['port'] }, async (args, io, root) => {
|
|
159
|
+
const raw = args.flags.port ?? '0';
|
|
160
|
+
if (typeof raw !== 'string' || !/^(0|[1-9][0-9]*)$/.test(raw) || Number(raw) > 65535)
|
|
161
|
+
throw new KernelError('--port 必须是 0 到 65535 的整数');
|
|
162
|
+
const port = Number(raw);
|
|
163
|
+
const server = await startVisualization(requireRoot(root), port);
|
|
164
|
+
io.out(`Sumi 可视化服务:${server.url}`);
|
|
165
|
+
try {
|
|
166
|
+
await new Promise((resolve) => {
|
|
167
|
+
process.once('SIGINT', resolve);
|
|
168
|
+
process.once('SIGTERM', resolve);
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
finally {
|
|
172
|
+
await server.close();
|
|
173
|
+
}
|
|
174
|
+
return 0;
|
|
175
|
+
});
|
|
176
|
+
//# sourceMappingURL=visualize.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"visualize.js","sourceRoot":"","sources":["../src/visualize.ts"],"names":[],"mappings":"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"}
|