@kenkaiiii/ggcoder 5.69.0 → 5.71.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/assets/motion/bin/contact-sheet.mjs +9 -3
- package/assets/motion/bin/cues.mjs +337 -0
- package/assets/motion/bin/library.mjs +53 -10
- package/assets/motion/bin/motion-blur.mjs +943 -0
- package/assets/motion/bin/motion-check.mjs +354 -3
- package/assets/motion/bin/music-fit.mjs +436 -0
- package/assets/motion/bin/pdf-extract.mjs +22 -10
- package/assets/motion/bin/reference-study.mjs +346 -0
- package/assets/motion/bin/score-synth.mjs +1052 -93
- package/assets/motion/library/README.md +50 -14
- package/assets/motion/library/kit/moves.js +1981 -0
- package/assets/motion/library/library.json +232 -0
- package/assets/motion/library/pieces/camera-rig/meta.json +13 -0
- package/assets/motion/library/pieces/camera-rig/piece.html +153 -0
- package/assets/motion/library/pieces/camera-rig/preview.jpg +0 -0
- package/assets/motion/library/pieces/chain-knock/meta.json +13 -0
- package/assets/motion/library/pieces/chain-knock/piece.html +195 -0
- package/assets/motion/library/pieces/chain-knock/preview.jpg +0 -0
- package/assets/motion/library/pieces/gather-to-logo/meta.json +13 -0
- package/assets/motion/library/pieces/gather-to-logo/piece.html +159 -0
- package/assets/motion/library/pieces/gather-to-logo/preview.jpg +0 -0
- package/assets/motion/library/pieces/morph-carry/meta.json +13 -0
- package/assets/motion/library/pieces/morph-carry/piece.html +173 -0
- package/assets/motion/library/pieces/morph-carry/preview.jpg +0 -0
- package/assets/motion/library/pieces/one-shape-journey/meta.json +13 -0
- package/assets/motion/library/pieces/one-shape-journey/piece.html +195 -0
- package/assets/motion/library/pieces/one-shape-journey/preview.jpg +0 -0
- package/assets/motion/library/pieces/open-from-subject/meta.json +13 -0
- package/assets/motion/library/pieces/open-from-subject/piece.html +168 -0
- package/assets/motion/library/pieces/open-from-subject/preview.jpg +0 -0
- package/assets/motion/library/pieces/request-to-result/meta.json +13 -0
- package/assets/motion/library/pieces/request-to-result/piece.html +212 -0
- package/assets/motion/library/pieces/request-to-result/preview.jpg +0 -0
- package/assets/motion/library/pieces/scale-dive/meta.json +13 -0
- package/assets/motion/library/pieces/scale-dive/piece.html +321 -0
- package/assets/motion/library/pieces/scale-dive/preview.jpg +0 -0
- package/assets/motion/library/pieces/screen-replica-steps/meta.json +13 -0
- package/assets/motion/library/pieces/screen-replica-steps/piece.html +366 -0
- package/assets/motion/library/pieces/screen-replica-steps/preview.jpg +0 -0
- package/assets/motion/library/pieces/zoom-into-card/meta.json +13 -0
- package/assets/motion/library/pieces/zoom-into-card/piece.html +179 -0
- package/assets/motion/library/pieces/zoom-into-card/preview.jpg +0 -0
- package/assets/motion/library/sheets/diagram.jpg +0 -0
- package/assets/motion/library/sheets/frame.jpg +0 -0
- package/assets/motion/library/sheets/transition.jpg +0 -0
- package/assets/motion/library/sheets/ui.jpg +0 -0
- package/assets/motion/references/build-sheet.md +206 -0
- package/assets/motion/references/runtime/determinism-rules.md +1 -1
- package/assets/motion/references/runtime/gsap-easing-and-stagger.md +29 -29
- package/assets/motion/references/runtime/inputs-and-assets.md +7 -12
- package/assets/motion/references/runtime/lint-validate-inspect.md +3 -3
- package/assets/motion/references/runtime/minimal-composition.md +1 -1
- package/assets/motion/references/runtime/preview-render.md +3 -3
- package/assets/motion/skills/app-walkthrough/SKILL.md +66 -0
- package/assets/motion/skills/before-after/SKILL.md +53 -0
- package/assets/motion/skills/brand-kit/SKILL.md +3 -3
- package/assets/motion/skills/dev-tool-video/SKILL.md +57 -0
- package/assets/motion/skills/launch-video/SKILL.md +62 -0
- package/assets/motion/skills/match-reference/SKILL.md +58 -0
- package/assets/motion/skills/motion/SKILL.md +78 -85
- package/assets/motion/skills/source-ingest/SKILL.md +17 -6
- package/assets/motion/skills/website-video/SKILL.md +59 -0
- package/assets/skills/bulletproof/SKILL.md +36 -11
- package/assets/skills/bulletproof/references/agent-surface.md +19 -9
- package/assets/skills/bulletproof/references/audit-protocol.md +20 -5
- package/assets/skills/bulletproof/references/platform-playbooks.md +5 -4
- package/assets/skills/bulletproof/references/provenance.md +26 -1
- package/assets/skills/bulletproof/references/secure-defaults.md +6 -5
- package/assets/skills/bulletproof/references/supply-chain.md +21 -17
- package/assets/skills/bulletproof/references/threat-landscape.md +28 -26
- package/assets/skills/bulletproof/references/verification.md +2 -0
- package/assets/skills/clarify/SKILL.md +25 -16
- package/assets/skills/code-review/SKILL.md +71 -13
- package/assets/skills/code-review/references/agent-diffs.md +27 -0
- package/assets/skills/code-review/references/tests.md +19 -0
- package/assets/skills/compliance-guard/SKILL.md +20 -5
- package/assets/skills/compliance-guard/references/artifacts.md +1 -1
- package/assets/skills/compliance-guard/references/eu-uk.md +16 -16
- package/assets/skills/compliance-guard/references/lawsuit-vectors.md +5 -5
- package/assets/skills/compliance-guard/references/provenance.md +41 -2
- package/assets/skills/compliance-guard/references/sector-gates.md +3 -3
- package/assets/skills/compliance-guard/references/security-baseline.md +2 -2
- package/assets/skills/compliance-guard/references/trigger-map.md +5 -5
- package/assets/skills/compliance-guard/references/us.md +27 -21
- package/assets/skills/durable/SKILL.md +87 -79
- package/assets/skills/durable/references/agent-db-safety.md +69 -0
- package/assets/skills/durable/references/backups-and-runtime.md +19 -12
- package/assets/skills/durable/references/migrations-and-schema.md +13 -6
- package/assets/skills/evidence-led-ui/SKILL.md +69 -127
- package/assets/skills/evidence-led-ui/references/anti-defaults.md +107 -208
- package/assets/skills/evidence-led-ui/references/direction.md +124 -0
- package/assets/skills/evidence-led-ui/references/production-contract.md +8 -0
- package/assets/skills/evidence-led-ui/references/provenance.md +24 -1
- package/assets/skills/lean/SKILL.md +90 -71
- package/assets/skills/lean/references/memory-and-processes.md +3 -2
- package/assets/skills/lean/references/playbooks.md +37 -12
- package/assets/skills/refactoring/SKILL.md +24 -3
- package/assets/skills/refactoring/references/agent-pitfalls.md +4 -1
- package/assets/skills/refactoring/references/legacy.md +21 -0
- package/assets/skills/root-cause/SKILL.md +20 -10
- package/assets/skills/shared-language/SKILL.md +16 -14
- package/assets/skills/tdd/SKILL.md +27 -15
- package/dist/app-sidecar.js +56 -33
- package/dist/app-sidecar.js.map +1 -1
- package/dist/cli.js +2 -11
- package/dist/cli.js.map +1 -1
- package/dist/core/acceptance-checks.d.ts +48 -0
- package/dist/core/acceptance-checks.js +144 -0
- package/dist/core/acceptance-checks.js.map +1 -0
- package/dist/core/agent-session.d.ts +32 -70
- package/dist/core/agent-session.js +92 -413
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/agents.d.ts +6 -5
- package/dist/core/agents.js.map +1 -1
- package/dist/core/bundled-agents.js +1 -3
- package/dist/core/bundled-agents.js.map +1 -1
- package/dist/core/compaction/compactor.js +78 -48
- package/dist/core/compaction/compactor.js.map +1 -1
- package/dist/core/mcp/content.js +6 -2
- package/dist/core/mcp/content.js.map +1 -1
- package/dist/core/model-unavailable.d.ts +14 -0
- package/dist/core/model-unavailable.js +23 -0
- package/dist/core/model-unavailable.js.map +1 -0
- package/dist/core/node-debugger.d.ts +148 -0
- package/dist/core/node-debugger.js +642 -0
- package/dist/core/node-debugger.js.map +1 -0
- package/dist/core/process-manager.d.ts +14 -0
- package/dist/core/process-manager.js +61 -0
- package/dist/core/process-manager.js.map +1 -1
- package/dist/core/session-history.d.ts +12 -0
- package/dist/core/session-history.js +27 -0
- package/dist/core/session-history.js.map +1 -1
- package/dist/core/settings-manager.d.ts +0 -1
- package/dist/core/settings-manager.js +2 -5
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/skills.js +3 -1
- package/dist/core/skills.js.map +1 -1
- package/dist/core/subagent-manager.d.ts +11 -5
- package/dist/core/subagent-manager.js +15 -7
- package/dist/core/subagent-manager.js.map +1 -1
- package/dist/core/test-impact.d.ts +73 -0
- package/dist/core/test-impact.js +467 -0
- package/dist/core/test-impact.js.map +1 -0
- package/dist/core/thinking-level.d.ts +1 -1
- package/dist/core/thinking-level.js +1 -1
- package/dist/core/thinking-level.js.map +1 -1
- package/dist/core/verification-gate.d.ts +8 -98
- package/dist/core/verification-gate.js +26 -256
- package/dist/core/verification-gate.js.map +1 -1
- package/dist/interactive.js +2 -1
- package/dist/interactive.js.map +1 -1
- package/dist/modes/subagent-worker-mode.js +17 -5
- package/dist/modes/subagent-worker-mode.js.map +1 -1
- package/dist/motion-agent/motion-agent.d.ts +6 -2
- package/dist/motion-agent/motion-agent.js +5 -7
- package/dist/motion-agent/motion-agent.js.map +1 -1
- package/dist/motion-agent/motion-prompt.d.ts +1 -1
- package/dist/motion-agent/motion-prompt.js +14 -19
- package/dist/motion-agent/motion-prompt.js.map +1 -1
- package/dist/motion-agent/motion-review.d.ts +5 -1
- package/dist/motion-agent/motion-review.js +8 -3
- package/dist/motion-agent/motion-review.js.map +1 -1
- package/dist/motion-agent/motion-studio-context.js +1 -1
- package/dist/motion-agent/motion-studio-context.js.map +1 -1
- package/dist/system-prompt.js +3 -1
- package/dist/system-prompt.js.map +1 -1
- package/dist/test-support/keep-alive.d.ts +14 -0
- package/dist/test-support/keep-alive.js +17 -0
- package/dist/test-support/keep-alive.js.map +1 -0
- package/dist/tools/bash-read-evidence.d.ts +10 -0
- package/dist/tools/bash-read-evidence.js +133 -0
- package/dist/tools/bash-read-evidence.js.map +1 -0
- package/dist/tools/bash.d.ts +10 -1
- package/dist/tools/bash.js +66 -3
- package/dist/tools/bash.js.map +1 -1
- package/dist/tools/debug.d.ts +54 -0
- package/dist/tools/debug.js +233 -0
- package/dist/tools/debug.js.map +1 -0
- package/dist/tools/edit.js +12 -4
- package/dist/tools/edit.js.map +1 -1
- package/dist/tools/index.d.ts +19 -2
- package/dist/tools/index.js +46 -6
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/prompt-hints.js +2 -0
- package/dist/tools/prompt-hints.js.map +1 -1
- package/dist/tools/read-tracker.d.ts +5 -0
- package/dist/tools/read-tracker.js +19 -9
- package/dist/tools/read-tracker.js.map +1 -1
- package/dist/tools/skill.js +5 -0
- package/dist/tools/skill.js.map +1 -1
- package/dist/tools/steroids.d.ts +1 -1
- package/dist/tools/subagent-control.js +11 -3
- package/dist/tools/subagent-control.js.map +1 -1
- package/dist/tools/subagent-shared.d.ts +16 -8
- package/dist/tools/subagent-shared.js +21 -15
- package/dist/tools/subagent-shared.js.map +1 -1
- package/dist/tools/subagent.d.ts +8 -2
- package/dist/tools/subagent.js +16 -9
- package/dist/tools/subagent.js.map +1 -1
- package/dist/tools/tool-tiers.d.ts +2 -2
- package/dist/tools/tool-tiers.js +3 -2
- package/dist/tools/tool-tiers.js.map +1 -1
- package/dist/ui/App.d.ts +0 -7
- package/dist/ui/App.js +6 -79
- package/dist/ui/App.js.map +1 -1
- package/dist/ui/hooks/useAgentLoop.d.ts +0 -7
- package/dist/ui/hooks/useAgentLoop.js +1 -119
- package/dist/ui/hooks/useAgentLoop.js.map +1 -1
- package/dist/ui/render.d.ts +0 -4
- package/dist/ui/render.js +0 -2
- package/dist/ui/render.js.map +1 -1
- package/dist/utils/image.d.ts +14 -0
- package/dist/utils/image.js +16 -0
- package/dist/utils/image.js.map +1 -1
- package/package.json +4 -4
- package/assets/motion/references/motion-language.md +0 -128
- package/assets/motion/skills/video-qa/SKILL.md +0 -89
- package/dist/core/ideal-review-subagent.d.ts +0 -56
- package/dist/core/ideal-review-subagent.js +0 -112
- package/dist/core/ideal-review-subagent.js.map +0 -1
- package/dist/core/ideal-review.d.ts +0 -82
- package/dist/core/ideal-review.js +0 -242
- package/dist/core/ideal-review.js.map +0 -1
- package/dist/motion-agent/motion-check-tool.d.ts +0 -42
- package/dist/motion-agent/motion-check-tool.js +0 -564
- package/dist/motion-agent/motion-check-tool.js.map +0 -1
|
@@ -0,0 +1,467 @@
|
|
|
1
|
+
import { execFile } from "node:child_process";
|
|
2
|
+
import fs from "node:fs/promises";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import { promisify } from "node:util";
|
|
5
|
+
import { log } from "./logger.js";
|
|
6
|
+
/**
|
|
7
|
+
* Edit impact for JavaScript/TypeScript projects: which tests actually reach a
|
|
8
|
+
* changed file through its import graph (with the command that runs exactly
|
|
9
|
+
* those), and which importers still use an export the edit removed.
|
|
10
|
+
*
|
|
11
|
+
* The sibling-test check (`detectTestDrift`) only sees `foo.test.ts` next to
|
|
12
|
+
* `foo.ts`; the tests that break when a shared helper changes usually live
|
|
13
|
+
* elsewhere. Built from relative imports only — package-name imports across a
|
|
14
|
+
* workspace and path aliases are not followed, so the list can be incomplete
|
|
15
|
+
* but never names a test with no import path to the change.
|
|
16
|
+
*/
|
|
17
|
+
const execFileAsync = promisify(execFile);
|
|
18
|
+
const SOURCE_GLOB = "**/*.{ts,tsx,mts,cts,js,jsx,mjs,cjs}";
|
|
19
|
+
const IGNORED_DIRS = [
|
|
20
|
+
"**/node_modules/**",
|
|
21
|
+
"**/.git/**",
|
|
22
|
+
"**/dist/**",
|
|
23
|
+
"**/build/**",
|
|
24
|
+
"**/coverage/**",
|
|
25
|
+
"**/target/**",
|
|
26
|
+
"**/.next/**",
|
|
27
|
+
];
|
|
28
|
+
const RESOLVE_EXTS = [".ts", ".tsx", ".mts", ".cts", ".js", ".jsx", ".mjs", ".cjs"];
|
|
29
|
+
const TEST_FILE_RE = /\.(test|spec)\.[cm]?[jt]sx?$/;
|
|
30
|
+
const MAX_FILES = 10_000;
|
|
31
|
+
const MAX_FILE_BYTES = 512 * 1024;
|
|
32
|
+
const READ_BATCH = 64;
|
|
33
|
+
/** Reverse-import hops searched for tests; deep chains reach nearly everything. */
|
|
34
|
+
const MAX_DEPTH = 6;
|
|
35
|
+
/** Longest the first scan may hold an edit result; it finishes in the background. */
|
|
36
|
+
const NOTE_SCAN_BUDGET_MS = 1_500;
|
|
37
|
+
/** Tests named in one note; a longer list is noise the model will not read. */
|
|
38
|
+
const MAX_LISTED_TESTS = 8;
|
|
39
|
+
/** Test files one command names before it falls back to the package suite. */
|
|
40
|
+
const MAX_COMMAND_TESTS = 20;
|
|
41
|
+
const MAX_LISTED_CALLERS = 6;
|
|
42
|
+
/** A full rescan is reused this long; edits made through the tools update it directly. */
|
|
43
|
+
const RESCAN_AFTER_MS = 30_000;
|
|
44
|
+
const IMPORT_FROM_RE = /(?:^|[\s;])(?:import|export)\s+(type\s+)?([^'"`;]*?)\s*from\s*["']([^"']+)["']/g;
|
|
45
|
+
const BARE_IMPORT_RE = /(?:^|[\s;])import\s*["']([^"']+)["']/g;
|
|
46
|
+
const DYNAMIC_IMPORT_RE = /\b(?:import|require|vi\.mock|jest\.mock)\s*\(\s*["']([^"']+)["']/g;
|
|
47
|
+
/** Names an import clause pulls in by name: `Foo, { a, b as c, type D }` → default, a, b, D. */
|
|
48
|
+
function importedNames(clause) {
|
|
49
|
+
const names = [];
|
|
50
|
+
const braces = /\{([^}]*)\}/.exec(clause);
|
|
51
|
+
if (braces?.[1]) {
|
|
52
|
+
for (const part of braces[1].split(",")) {
|
|
53
|
+
const name = part
|
|
54
|
+
.trim()
|
|
55
|
+
.replace(/^type\s+/, "")
|
|
56
|
+
.split(/\s+as\s+/)[0]
|
|
57
|
+
?.trim();
|
|
58
|
+
if (name && /^[\w$]+$/.test(name))
|
|
59
|
+
names.push(name);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
const head = clause.replace(/\{[^}]*\}/, "").replace(/^type\s+/, "");
|
|
63
|
+
const defaultName = head.split(",")[0]?.trim();
|
|
64
|
+
if (defaultName && /^[\w$]+$/.test(defaultName))
|
|
65
|
+
names.push("default");
|
|
66
|
+
return names;
|
|
67
|
+
}
|
|
68
|
+
/** Names a module exports, from its source text. */
|
|
69
|
+
export function parseExports(source) {
|
|
70
|
+
const exports = new Set();
|
|
71
|
+
const declRe = /^\s*export\s+(?:declare\s+)?(?:default\s+)?(?:async\s+)?(?:abstract\s+)?(?:function\*?|const|let|var|class|interface|type|enum|namespace)\s+([\w$]+)/gm;
|
|
72
|
+
for (const match of source.matchAll(declRe)) {
|
|
73
|
+
if (match[1])
|
|
74
|
+
exports.add(match[1]);
|
|
75
|
+
}
|
|
76
|
+
for (const match of source.matchAll(/^\s*export\s+(?:type\s+)?\{([^}]*)\}/gm)) {
|
|
77
|
+
for (const part of (match[1] ?? "").split(",")) {
|
|
78
|
+
const pieces = part
|
|
79
|
+
.trim()
|
|
80
|
+
.replace(/^type\s+/, "")
|
|
81
|
+
.split(/\s+as\s+/);
|
|
82
|
+
const name = (pieces[1] ?? pieces[0])?.trim();
|
|
83
|
+
if (name && /^[\w$]+$/.test(name))
|
|
84
|
+
exports.add(name);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
if (/^\s*export\s+default\b/m.test(source))
|
|
88
|
+
exports.add("default");
|
|
89
|
+
return exports;
|
|
90
|
+
}
|
|
91
|
+
function stripComments(source) {
|
|
92
|
+
return source.replace(/\/\*[\s\S]*?\*\//g, "").replace(/(^|[^:\\])\/\/.*$/gm, "$1");
|
|
93
|
+
}
|
|
94
|
+
/** Relative imports of one file, resolved against the set of known files. */
|
|
95
|
+
function parseImports(file, source, resolve) {
|
|
96
|
+
const text = stripComments(source);
|
|
97
|
+
const refs = new Map();
|
|
98
|
+
const add = (spec, names) => {
|
|
99
|
+
if (!spec.startsWith("."))
|
|
100
|
+
return;
|
|
101
|
+
const target = resolve(file, spec);
|
|
102
|
+
if (!target)
|
|
103
|
+
return;
|
|
104
|
+
const set = refs.get(target) ?? new Set();
|
|
105
|
+
for (const name of names)
|
|
106
|
+
set.add(name);
|
|
107
|
+
refs.set(target, set);
|
|
108
|
+
};
|
|
109
|
+
for (const match of text.matchAll(IMPORT_FROM_RE)) {
|
|
110
|
+
add(match[3] ?? "", importedNames(match[2] ?? ""));
|
|
111
|
+
}
|
|
112
|
+
for (const match of text.matchAll(BARE_IMPORT_RE))
|
|
113
|
+
add(match[1] ?? "", []);
|
|
114
|
+
for (const match of text.matchAll(DYNAMIC_IMPORT_RE))
|
|
115
|
+
add(match[1] ?? "", []);
|
|
116
|
+
return [...refs].map(([target, names]) => ({ target, names: [...names].sort() }));
|
|
117
|
+
}
|
|
118
|
+
function shellQuote(value) {
|
|
119
|
+
return /^[\w@%+=:,./-]+$/.test(value) ? value : `'${value.replace(/'/g, `'\\''`)}'`;
|
|
120
|
+
}
|
|
121
|
+
function toPosix(p) {
|
|
122
|
+
return p.split(path.sep).join("/");
|
|
123
|
+
}
|
|
124
|
+
export class TestImpactIndex {
|
|
125
|
+
cwd;
|
|
126
|
+
entries = new Map();
|
|
127
|
+
importers = new Map();
|
|
128
|
+
known = new Set();
|
|
129
|
+
scannedAt = -Infinity;
|
|
130
|
+
scanning;
|
|
131
|
+
/** Export sets captured just before a tool write, keyed by absolute path. */
|
|
132
|
+
preWriteExports = new Map();
|
|
133
|
+
/** Files whose reaching tests were already shown; later edits stay quiet. */
|
|
134
|
+
shown = new Set();
|
|
135
|
+
runnerCache = new Map();
|
|
136
|
+
now;
|
|
137
|
+
constructor(cwd, options = {}) {
|
|
138
|
+
this.cwd = cwd;
|
|
139
|
+
this.now = options.now ?? Date.now;
|
|
140
|
+
}
|
|
141
|
+
/** Record a file's exports before a tool overwrites it. */
|
|
142
|
+
async beforeWrite(absPath) {
|
|
143
|
+
if (!this.isSource(absPath))
|
|
144
|
+
return;
|
|
145
|
+
try {
|
|
146
|
+
this.preWriteExports.set(absPath, parseExports(await fs.readFile(absPath, "utf-8")));
|
|
147
|
+
}
|
|
148
|
+
catch {
|
|
149
|
+
this.preWriteExports.delete(absPath); // new file: nothing could be removed
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Model-facing note for a just-written file: the tests that reach it (first
|
|
154
|
+
* edit of each file only) and importers left using a removed export (every
|
|
155
|
+
* time). Empty when there is nothing to say.
|
|
156
|
+
*/
|
|
157
|
+
async noteAfterWrite(absPath, content) {
|
|
158
|
+
if (!this.isSource(absPath))
|
|
159
|
+
return "";
|
|
160
|
+
const started = this.now();
|
|
161
|
+
try {
|
|
162
|
+
const before = this.preWriteExports.get(absPath);
|
|
163
|
+
this.preWriteExports.delete(absPath);
|
|
164
|
+
// Never hold the edit for a cold scan of a huge tree: say nothing this
|
|
165
|
+
// time (and do not mark the file shown) and let the scan finish behind.
|
|
166
|
+
const scan = this.ensureScanned();
|
|
167
|
+
let timer;
|
|
168
|
+
const ready = await Promise.race([
|
|
169
|
+
scan.then(() => true),
|
|
170
|
+
new Promise((resolve) => {
|
|
171
|
+
timer = setTimeout(() => resolve(false), NOTE_SCAN_BUDGET_MS);
|
|
172
|
+
}),
|
|
173
|
+
]).finally(() => clearTimeout(timer));
|
|
174
|
+
if (!ready) {
|
|
175
|
+
void scan.then(() => this.updateEntry(absPath, content)).catch(() => undefined);
|
|
176
|
+
return "";
|
|
177
|
+
}
|
|
178
|
+
this.updateEntry(absPath, content);
|
|
179
|
+
const brokenCallers = before ? this.brokenCallers(absPath, before) : [];
|
|
180
|
+
const showTests = !this.shown.has(absPath);
|
|
181
|
+
this.shown.add(absPath);
|
|
182
|
+
const impact = showTests
|
|
183
|
+
? await this.impactFor([absPath], brokenCallers)
|
|
184
|
+
: { tests: [], fartherTests: 0, commands: [], brokenCallers };
|
|
185
|
+
return formatEditImpactNote(toPosix(path.relative(this.cwd, absPath)), impact);
|
|
186
|
+
}
|
|
187
|
+
catch (error) {
|
|
188
|
+
log("WARN", "test-impact", "Edit impact failed", { error: String(error) });
|
|
189
|
+
return "";
|
|
190
|
+
}
|
|
191
|
+
finally {
|
|
192
|
+
log("INFO", "test-impact", "Edit impact computed", {
|
|
193
|
+
file: absPath,
|
|
194
|
+
elapsedMs: String(this.now() - started),
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
/** Tests and commands covering a set of changed files (cwd-relative or absolute). */
|
|
199
|
+
async impactFor(files, brokenCallers = []) {
|
|
200
|
+
await this.ensureScanned();
|
|
201
|
+
const tests = new Set();
|
|
202
|
+
let farther = 0;
|
|
203
|
+
for (const file of files) {
|
|
204
|
+
const reach = this.reachingTests(path.resolve(this.cwd, file));
|
|
205
|
+
for (const test of reach.tests)
|
|
206
|
+
tests.add(test);
|
|
207
|
+
farther += reach.farther;
|
|
208
|
+
}
|
|
209
|
+
const sorted = [...tests].sort();
|
|
210
|
+
return {
|
|
211
|
+
tests: sorted.map((t) => toPosix(path.relative(this.cwd, t))),
|
|
212
|
+
fartherTests: farther,
|
|
213
|
+
commands: await this.commandsFor(sorted),
|
|
214
|
+
brokenCallers,
|
|
215
|
+
};
|
|
216
|
+
}
|
|
217
|
+
isSource(absPath) {
|
|
218
|
+
return (RESOLVE_EXTS.includes(path.extname(absPath)) &&
|
|
219
|
+
!absPath.includes(`${path.sep}node_modules${path.sep}`));
|
|
220
|
+
}
|
|
221
|
+
async ensureScanned() {
|
|
222
|
+
if (this.now() - this.scannedAt < RESCAN_AFTER_MS)
|
|
223
|
+
return;
|
|
224
|
+
this.scanning ??= this.scan().finally(() => {
|
|
225
|
+
this.scanning = undefined;
|
|
226
|
+
});
|
|
227
|
+
await this.scanning;
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Source files under cwd, cwd-relative and sorted. `git ls-files` first: it
|
|
231
|
+
* applies every nested .gitignore and never walks ignored trees (measured on
|
|
232
|
+
* this repo: 17ms vs 12s for a directory walk that descends into build
|
|
233
|
+
* output before filtering). The walk is the fallback outside a git checkout.
|
|
234
|
+
*/
|
|
235
|
+
async listSourceFiles() {
|
|
236
|
+
try {
|
|
237
|
+
const { stdout } = await execFileAsync("git", ["ls-files", "-co", "--exclude-standard", "-z", "--", ...RESOLVE_EXTS.map((e) => `*${e}`)], { cwd: this.cwd, timeout: 10_000, maxBuffer: 64 * 1024 * 1024 });
|
|
238
|
+
return stdout
|
|
239
|
+
.split("\0")
|
|
240
|
+
.filter((rel) => rel && !rel.split("/").includes("node_modules"))
|
|
241
|
+
.sort();
|
|
242
|
+
}
|
|
243
|
+
catch {
|
|
244
|
+
// Not a git checkout, or git is unavailable.
|
|
245
|
+
}
|
|
246
|
+
const [fg, ignore] = await Promise.all([import("fast-glob"), import("ignore")]);
|
|
247
|
+
const ig = ignore.default();
|
|
248
|
+
try {
|
|
249
|
+
ig.add(await fs.readFile(path.join(this.cwd, ".gitignore"), "utf-8"));
|
|
250
|
+
}
|
|
251
|
+
catch {
|
|
252
|
+
// No root .gitignore: the fixed ignore list still applies.
|
|
253
|
+
}
|
|
254
|
+
const entries = await fg.default(SOURCE_GLOB, {
|
|
255
|
+
cwd: this.cwd,
|
|
256
|
+
onlyFiles: true,
|
|
257
|
+
ignore: IGNORED_DIRS,
|
|
258
|
+
suppressErrors: true,
|
|
259
|
+
followSymbolicLinks: false,
|
|
260
|
+
});
|
|
261
|
+
return entries.filter((entry) => !ig.ignores(entry)).sort();
|
|
262
|
+
}
|
|
263
|
+
async scan() {
|
|
264
|
+
const started = this.now();
|
|
265
|
+
const relative = (await this.listSourceFiles()).slice(0, MAX_FILES);
|
|
266
|
+
const found = [];
|
|
267
|
+
for (let i = 0; i < relative.length; i += READ_BATCH) {
|
|
268
|
+
const batch = relative.slice(i, i + READ_BATCH).map((rel) => path.resolve(this.cwd, rel));
|
|
269
|
+
const stats = await Promise.all(batch.map((file) => fs.stat(file).catch(() => undefined)));
|
|
270
|
+
batch.forEach((file, j) => {
|
|
271
|
+
const stat = stats[j];
|
|
272
|
+
// Listed but deleted since (git ls-files -c), or not a regular file.
|
|
273
|
+
if (stat?.isFile())
|
|
274
|
+
found.push({ file, size: stat.size, mtimeMs: stat.mtimeMs });
|
|
275
|
+
});
|
|
276
|
+
}
|
|
277
|
+
// The full file set must be known before any import is resolved against it.
|
|
278
|
+
this.known = new Set(found.map((entry) => entry.file));
|
|
279
|
+
for (const file of [...this.entries.keys()]) {
|
|
280
|
+
if (!this.known.has(file))
|
|
281
|
+
this.removeEntry(file);
|
|
282
|
+
}
|
|
283
|
+
const stale = found.filter((entry) => entry.size <= MAX_FILE_BYTES && this.entries.get(entry.file)?.mtimeMs !== entry.mtimeMs);
|
|
284
|
+
// Read in parallel batches; parse in sorted order so the graph is deterministic.
|
|
285
|
+
for (let i = 0; i < stale.length; i += READ_BATCH) {
|
|
286
|
+
const batch = stale.slice(i, i + READ_BATCH);
|
|
287
|
+
const contents = await Promise.all(batch.map((entry) => fs.readFile(entry.file, "utf-8").catch(() => undefined)));
|
|
288
|
+
batch.forEach((entry, j) => {
|
|
289
|
+
const content = contents[j];
|
|
290
|
+
if (content !== undefined)
|
|
291
|
+
this.updateEntry(entry.file, content, entry.mtimeMs);
|
|
292
|
+
});
|
|
293
|
+
}
|
|
294
|
+
this.scannedAt = this.now();
|
|
295
|
+
log("INFO", "test-impact", "Import graph scanned", {
|
|
296
|
+
files: String(this.known.size),
|
|
297
|
+
elapsedMs: String(this.now() - started),
|
|
298
|
+
});
|
|
299
|
+
}
|
|
300
|
+
resolveSpec = (from, spec) => {
|
|
301
|
+
const base = path.resolve(path.dirname(from), spec);
|
|
302
|
+
const stem = base.replace(/\.(?:[cm]?js|jsx)$/, "");
|
|
303
|
+
const candidates = [
|
|
304
|
+
base,
|
|
305
|
+
...RESOLVE_EXTS.map((ext) => `${stem}${ext}`),
|
|
306
|
+
...RESOLVE_EXTS.map((ext) => path.join(base, `index${ext}`)),
|
|
307
|
+
];
|
|
308
|
+
return candidates.find((candidate) => this.known.has(candidate));
|
|
309
|
+
};
|
|
310
|
+
updateEntry(file, content, mtimeMs = this.now()) {
|
|
311
|
+
this.known.add(file);
|
|
312
|
+
this.removeEntry(file);
|
|
313
|
+
const imports = parseImports(file, content, this.resolveSpec);
|
|
314
|
+
this.entries.set(file, { mtimeMs, imports, exports: parseExports(content) });
|
|
315
|
+
for (const ref of imports) {
|
|
316
|
+
const set = this.importers.get(ref.target) ?? new Set();
|
|
317
|
+
set.add(file);
|
|
318
|
+
this.importers.set(ref.target, set);
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
removeEntry(file) {
|
|
322
|
+
const entry = this.entries.get(file);
|
|
323
|
+
if (!entry)
|
|
324
|
+
return;
|
|
325
|
+
for (const ref of entry.imports)
|
|
326
|
+
this.importers.get(ref.target)?.delete(file);
|
|
327
|
+
this.entries.delete(file);
|
|
328
|
+
}
|
|
329
|
+
/**
|
|
330
|
+
* Tests reaching `file`, nearest import layer first. A layer is added while
|
|
331
|
+
* the running total stays at or under {@link MAX_COMMAND_TESTS}, and the
|
|
332
|
+
* first layer that finds any test is always added. Without the cap a shared
|
|
333
|
+
* hub (a session object most tests construct) makes a leaf helper "reach"
|
|
334
|
+
* half the suite, and a list that long is a list nobody runs. `farther`
|
|
335
|
+
* counts the reaching tests left out.
|
|
336
|
+
*/
|
|
337
|
+
reachingTests(file) {
|
|
338
|
+
const tests = new Set();
|
|
339
|
+
if (TEST_FILE_RE.test(file))
|
|
340
|
+
tests.add(file);
|
|
341
|
+
const seen = new Set([file]);
|
|
342
|
+
let frontier = [file];
|
|
343
|
+
let farther = 0;
|
|
344
|
+
let collecting = true;
|
|
345
|
+
for (let depth = 1; depth <= MAX_DEPTH && frontier.length > 0; depth++) {
|
|
346
|
+
const layer = [];
|
|
347
|
+
const next = [];
|
|
348
|
+
for (const current of frontier) {
|
|
349
|
+
for (const importer of this.importers.get(current) ?? []) {
|
|
350
|
+
if (seen.has(importer))
|
|
351
|
+
continue;
|
|
352
|
+
seen.add(importer);
|
|
353
|
+
if (TEST_FILE_RE.test(importer))
|
|
354
|
+
layer.push(importer);
|
|
355
|
+
else
|
|
356
|
+
next.push(importer);
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
if (collecting && (tests.size === 0 || tests.size + layer.length <= MAX_COMMAND_TESTS)) {
|
|
360
|
+
for (const test of layer)
|
|
361
|
+
tests.add(test);
|
|
362
|
+
}
|
|
363
|
+
else {
|
|
364
|
+
if (layer.length > 0)
|
|
365
|
+
collecting = false;
|
|
366
|
+
farther += layer.length;
|
|
367
|
+
}
|
|
368
|
+
frontier = next;
|
|
369
|
+
}
|
|
370
|
+
return { tests: [...tests], farther };
|
|
371
|
+
}
|
|
372
|
+
brokenCallers(file, before) {
|
|
373
|
+
const after = this.entries.get(file)?.exports ?? new Set();
|
|
374
|
+
const removed = [...before].filter((name) => !after.has(name)).sort();
|
|
375
|
+
const result = [];
|
|
376
|
+
for (const name of removed) {
|
|
377
|
+
const users = [...(this.importers.get(file) ?? [])]
|
|
378
|
+
.filter((importer) => this.entries
|
|
379
|
+
.get(importer)
|
|
380
|
+
?.imports.some((ref) => ref.target === file && ref.names.includes(name)))
|
|
381
|
+
.map((importer) => toPosix(path.relative(this.cwd, importer)))
|
|
382
|
+
.sort();
|
|
383
|
+
if (users.length > 0)
|
|
384
|
+
result.push({ name, importers: users });
|
|
385
|
+
}
|
|
386
|
+
return result;
|
|
387
|
+
}
|
|
388
|
+
/** Nearest package.json's test runner (vitest or jest), walking up to cwd. */
|
|
389
|
+
runnerFor(dir) {
|
|
390
|
+
let cached = this.runnerCache.get(dir);
|
|
391
|
+
if (!cached) {
|
|
392
|
+
cached = (async () => {
|
|
393
|
+
try {
|
|
394
|
+
const pkg = JSON.parse(await fs.readFile(path.join(dir, "package.json"), "utf-8"));
|
|
395
|
+
const deps = { ...pkg.dependencies, ...pkg.devDependencies };
|
|
396
|
+
if ("vitest" in deps)
|
|
397
|
+
return `${dir}\u0000vitest`;
|
|
398
|
+
if ("jest" in deps)
|
|
399
|
+
return `${dir}\u0000jest`;
|
|
400
|
+
}
|
|
401
|
+
catch {
|
|
402
|
+
// No package.json here: keep walking up.
|
|
403
|
+
}
|
|
404
|
+
const parent = path.dirname(dir);
|
|
405
|
+
if (dir === this.cwd || parent === dir || !parent.startsWith(this.cwd))
|
|
406
|
+
return undefined;
|
|
407
|
+
return this.runnerFor(parent);
|
|
408
|
+
})();
|
|
409
|
+
this.runnerCache.set(dir, cached);
|
|
410
|
+
}
|
|
411
|
+
return cached;
|
|
412
|
+
}
|
|
413
|
+
async commandsFor(tests) {
|
|
414
|
+
const groups = new Map();
|
|
415
|
+
for (const test of tests) {
|
|
416
|
+
const runner = await this.runnerFor(path.dirname(test));
|
|
417
|
+
if (!runner)
|
|
418
|
+
continue;
|
|
419
|
+
const list = groups.get(runner) ?? [];
|
|
420
|
+
list.push(test);
|
|
421
|
+
groups.set(runner, list);
|
|
422
|
+
}
|
|
423
|
+
const commands = [];
|
|
424
|
+
for (const [key, files] of [...groups].sort(([a], [b]) => a.localeCompare(b))) {
|
|
425
|
+
const [dir = this.cwd, runner = "vitest"] = key.split("\u0000");
|
|
426
|
+
const base = runner === "vitest" ? "npx vitest run" : "npx jest";
|
|
427
|
+
const args = files.length > MAX_COMMAND_TESTS
|
|
428
|
+
? ""
|
|
429
|
+
: ` ${files.map((f) => shellQuote(toPosix(path.relative(dir, f)))).join(" ")}`;
|
|
430
|
+
const rel = toPosix(path.relative(this.cwd, dir));
|
|
431
|
+
commands.push(`${rel ? `cd ${shellQuote(rel)} && ` : ""}${base}${args}`);
|
|
432
|
+
}
|
|
433
|
+
return commands;
|
|
434
|
+
}
|
|
435
|
+
}
|
|
436
|
+
/** The note appended to a successful edit/write result. Empty when nothing applies. */
|
|
437
|
+
export function formatEditImpactNote(relPath, impact) {
|
|
438
|
+
const lines = [];
|
|
439
|
+
if (impact.tests.length > 0) {
|
|
440
|
+
const shown = impact.tests.slice(0, MAX_LISTED_TESTS).join(", ");
|
|
441
|
+
const more = impact.tests.length > MAX_LISTED_TESTS
|
|
442
|
+
? `, +${impact.tests.length - MAX_LISTED_TESTS} more`
|
|
443
|
+
: "";
|
|
444
|
+
const farther = impact.fartherTests > 0
|
|
445
|
+
? ` (${impact.fartherTests} more reach it only through more layers of imports)`
|
|
446
|
+
: "";
|
|
447
|
+
lines.push(`Nearest tests that import ${relPath} (directly or through other files): ${shown}${more}${farther}`);
|
|
448
|
+
for (const command of impact.commands)
|
|
449
|
+
lines.push(`Run them: \`${command}\``);
|
|
450
|
+
}
|
|
451
|
+
for (const { name, importers } of impact.brokenCallers) {
|
|
452
|
+
const shown = importers.slice(0, MAX_LISTED_CALLERS).join(", ");
|
|
453
|
+
const more = importers.length > MAX_LISTED_CALLERS
|
|
454
|
+
? `, +${importers.length - MAX_LISTED_CALLERS} more`
|
|
455
|
+
: "";
|
|
456
|
+
lines.push(`Possibly broken callers: this edit removed the export \`${name}\`, still imported by ${shown}${more}.`);
|
|
457
|
+
}
|
|
458
|
+
return lines.length > 0 ? `\n\n${lines.join("\n")}` : "";
|
|
459
|
+
}
|
|
460
|
+
/** One line for the verification demand: which tests reach the changed files, and how to run them. */
|
|
461
|
+
export function formatImpactForVerification(impact) {
|
|
462
|
+
if (impact.tests.length === 0 || impact.commands.length === 0)
|
|
463
|
+
return "";
|
|
464
|
+
const count = impact.tests.length === 1 ? "1 test file reaches" : `${impact.tests.length} test files reach`;
|
|
465
|
+
return `\n${count} these changes: ${impact.commands.map((c) => `\`${c}\``).join(" ; ")}`;
|
|
466
|
+
}
|
|
467
|
+
//# sourceMappingURL=test-impact.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-impact.js","sourceRoot":"","sources":["../../src/core/test-impact.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export { getSupportedThinkingLevels, isThinkingLevelSupported, getNextThinkingLevel, clampThinkingForPlanMode, } from "@kenkaiiii/gg-core";
|
|
1
|
+
export { getSupportedThinkingLevels, getLowestThinkingLevel, isThinkingLevelSupported, getNextThinkingLevel, clampThinkingForPlanMode, } from "@kenkaiiii/gg-core";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
// Moved to @kenkaiiii/gg-core. This shim re-exports it so existing relative
|
|
2
2
|
// imports (`./thinking-level.js`) keep resolving unchanged.
|
|
3
|
-
export { getSupportedThinkingLevels, isThinkingLevelSupported, getNextThinkingLevel, clampThinkingForPlanMode, } from "@kenkaiiii/gg-core";
|
|
3
|
+
export { getSupportedThinkingLevels, getLowestThinkingLevel, isThinkingLevelSupported, getNextThinkingLevel, clampThinkingForPlanMode, } from "@kenkaiiii/gg-core";
|
|
4
4
|
//# sourceMappingURL=thinking-level.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"thinking-level.js","sourceRoot":"","sources":["../../src/core/thinking-level.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,4DAA4D;AAC5D,OAAO,EACL,0BAA0B,EAC1B,wBAAwB,EACxB,oBAAoB,EACpB,wBAAwB,GACzB,MAAM,oBAAoB,CAAC"}
|
|
1
|
+
{"version":3,"file":"thinking-level.js","sourceRoot":"","sources":["../../src/core/thinking-level.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,4DAA4D;AAC5D,OAAO,EACL,0BAA0B,EAC1B,sBAAsB,EACtB,wBAAwB,EACxB,oBAAoB,EACpB,wBAAwB,GACzB,MAAM,oBAAoB,CAAC"}
|