@kenkaiiii/ggcoder 4.3.184 → 4.3.185
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/dist/cli.js +1 -2
- package/dist/cli.js.map +1 -1
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +5 -4
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/prompt-commands.d.ts.map +1 -1
- package/dist/core/prompt-commands.js +16 -5
- package/dist/core/prompt-commands.js.map +1 -1
- package/dist/core/prompt-commands.test.d.ts +2 -0
- package/dist/core/prompt-commands.test.d.ts.map +1 -0
- package/dist/core/prompt-commands.test.js +16 -0
- package/dist/core/prompt-commands.test.js.map +1 -0
- package/dist/core/style-packs/index.d.ts.map +1 -1
- package/dist/core/style-packs/index.js +8 -9
- package/dist/core/style-packs/index.js.map +1 -1
- package/dist/interactive.d.ts.map +1 -1
- package/dist/interactive.js +8 -4
- package/dist/interactive.js.map +1 -1
- package/dist/system-prompt.d.ts.map +1 -1
- package/dist/system-prompt.js +102 -108
- package/dist/system-prompt.js.map +1 -1
- package/dist/system-prompt.test.d.ts +2 -0
- package/dist/system-prompt.test.d.ts.map +1 -0
- package/dist/system-prompt.test.js +104 -0
- package/dist/system-prompt.test.js.map +1 -0
- package/dist/tools/prompt-hints.js +4 -4
- package/dist/tools/prompt-hints.js.map +1 -1
- package/dist/ui/App.d.ts.map +1 -1
- package/dist/ui/App.js +71 -42
- package/dist/ui/App.js.map +1 -1
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/style-packs/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC;;;;;GAKG;AACH,MAAM,UAAU,QAAQ,CAAC,EAAc,EAAE,GAAW;IAClD,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;IACjE,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;QACvC,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;YAClB,OAAO,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;QACvD,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,2CAA2C;IAC7C,CAAC;IACD,OAAO,KAAK,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC;AAC3B,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,uBAAuB,CAAC,MAAuB,EAAE,GAAW;IAC1E,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACjC,MAAM,GAAG,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAC3C,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;QACrB,MAAM,IAAI,GAAG,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QAC/B,IAAI,IAAI;YAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IACD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAClC,OAAO,CACL,6BAA6B;QAC7B,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/style-packs/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC;;;;;GAKG;AACH,MAAM,UAAU,QAAQ,CAAC,EAAc,EAAE,GAAW;IAClD,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;IACjE,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;QACvC,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;YAClB,OAAO,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;QACvD,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,2CAA2C;IAC7C,CAAC;IACD,OAAO,KAAK,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC;AAC3B,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,uBAAuB,CAAC,MAAuB,EAAE,GAAW;IAC1E,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACjC,MAAM,GAAG,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAC3C,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;QACrB,MAAM,IAAI,GAAG,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QAC/B,IAAI,IAAI;YAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IACD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAClC,OAAO,CACL,6BAA6B;QAC7B,wJAAwJ;QACxJ,GAAG,2BAA2B,MAAM;QACpC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CACnB,CAAC;AACJ,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,2BAA2B,GAAG;;;;;;;;;uJASmH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interactive.d.ts","sourceRoot":"","sources":["../src/interactive.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAyB5C,wBAAsB,cAAc,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"interactive.d.ts","sourceRoot":"","sources":["../src/interactive.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAyB5C,wBAAsB,cAAc,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAmKrE"}
|
package/dist/interactive.js
CHANGED
|
@@ -21,14 +21,18 @@ export async function runInteractive(config) {
|
|
|
21
21
|
await fs.mkdir(path.join(localGGDir, "skills"), { recursive: true });
|
|
22
22
|
await fs.mkdir(path.join(localGGDir, "commands"), { recursive: true });
|
|
23
23
|
await fs.mkdir(path.join(localGGDir, "agents"), { recursive: true });
|
|
24
|
-
// Discover skills
|
|
24
|
+
// Discover skills and create tools before building the prompt so tool names are accurate.
|
|
25
25
|
const skills = await discoverSkills({
|
|
26
26
|
globalSkillsDir: paths.skillsDir,
|
|
27
27
|
projectDir: cwd,
|
|
28
28
|
});
|
|
29
|
-
const
|
|
30
|
-
|
|
31
|
-
|
|
29
|
+
const { tools, processManager } = createTools(cwd, {
|
|
30
|
+
skills,
|
|
31
|
+
provider,
|
|
32
|
+
model,
|
|
33
|
+
});
|
|
34
|
+
const systemPrompt = config.systemPrompt ??
|
|
35
|
+
(await buildSystemPrompt(cwd, skills, false, undefined, tools.map((tool) => tool.name)));
|
|
32
36
|
process.on("exit", () => processManager.shutdownAll());
|
|
33
37
|
const authStorage = new AuthStorage(paths.authFile);
|
|
34
38
|
await authStorage.load();
|
package/dist/interactive.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interactive.js","sourceRoot":"","sources":["../src/interactive.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,wBAAwB,CAAC;AAC9C,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAmB,MAAM,qBAAqB,CAAC;AAGjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EACL,aAAa,EACb,WAAW,EACX,oBAAoB,EACpB,cAAc,GAEf,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,mBAAmB,EACnB,iBAAiB,EACjB,WAAW,EACX,WAAW,EACX,aAAa,GACd,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAE5D,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,MAAiB;IACpD,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,MAAM,CAAC;IAExC,0BAA0B;IAC1B,MAAM,KAAK,GAAG,MAAM,aAAa,EAAE,CAAC;IAEpC,6CAA6C;IAC7C,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACzC,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACrE,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACvE,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAErE,
|
|
1
|
+
{"version":3,"file":"interactive.js","sourceRoot":"","sources":["../src/interactive.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"system-prompt.d.ts","sourceRoot":"","sources":["../src/system-prompt.ts"],"names":[],"mappings":"AAGA,OAAO,EAAyB,KAAK,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAErE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"system-prompt.d.ts","sourceRoot":"","sources":["../src/system-prompt.ts"],"names":[],"mappings":"AAGA,OAAO,EAAyB,KAAK,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAErE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAwK9D;;;;;;GAMG;AACH,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,MAAM,EACX,MAAM,CAAC,EAAE,KAAK,EAAE,EAChB,QAAQ,CAAC,EAAE,OAAO,EAClB,gBAAgB,CAAC,EAAE,MAAM,EACzB,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,EAC7B,eAAe,CAAC,EAAE,GAAG,CAAC,UAAU,CAAC,GAChC,OAAO,CAAC,MAAM,CAAC,CAkDjB"}
|
package/dist/system-prompt.js
CHANGED
|
@@ -6,21 +6,14 @@ import { TOOL_PROMPT_HINTS, DEFAULT_TOOL_NAMES } from "./tools/prompt-hints.js";
|
|
|
6
6
|
import { renderStylePacksSection } from "./core/style-packs/index.js";
|
|
7
7
|
import { detectVerifyCommands, renderVerifySection } from "./core/verify-commands.js";
|
|
8
8
|
const CONTEXT_FILES = ["AGENTS.md", "CLAUDE.md", ".cursorrules", "CONVENTIONS.md"];
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
* @param toolNames — if provided, the Tools section only lists these tools.
|
|
13
|
-
* Pass `tools.map(t => t.name)` from the session so the prompt reflects
|
|
14
|
-
* exactly what the model can call. Defaults to the full built-in set.
|
|
15
|
-
*/
|
|
16
|
-
export async function buildSystemPrompt(cwd, skills, planMode, approvedPlanPath, toolNames, activeLanguages) {
|
|
17
|
-
const sections = [];
|
|
18
|
-
// 1. Identity
|
|
19
|
-
sections.push(`You are GG Coder by Ken Kai — a coding agent that works directly in the user's codebase. ` +
|
|
9
|
+
const UNCACHED_MARKER = "<!-- uncached -->";
|
|
10
|
+
function renderIdentitySection() {
|
|
11
|
+
return (`You are GG Coder by Ken Kai — a coding agent that works directly in the user's codebase. ` +
|
|
20
12
|
`You explore, understand, change, and verify code — completing tasks end-to-end ` +
|
|
21
13
|
`rather than just suggesting edits.`);
|
|
22
|
-
|
|
23
|
-
|
|
14
|
+
}
|
|
15
|
+
function renderTalkSection() {
|
|
16
|
+
return (`## How to Talk\n\n` +
|
|
24
17
|
`**Between tool calls**: one short sentence max — what you're doing next. ` +
|
|
25
18
|
`No quoting tool output, no restating the problem, no thinking out loud. Think silently, then act.\n\n` +
|
|
26
19
|
`**Final replies**: 1–3 sentences, hard cap 5. No preamble, no recap, no "let me know if…". ` +
|
|
@@ -31,8 +24,9 @@ export async function buildSystemPrompt(cwd, skills, planMode, approvedPlanPath,
|
|
|
31
24
|
`Good: "Found it — forms.css global rule out-specifies mine. Fixing." [edit]\n\n` +
|
|
32
25
|
`**Exceptions**: ask before destructive actions, surface real tradeoffs, admit unverified claims. ` +
|
|
33
26
|
`Plan mode is exempt.`);
|
|
34
|
-
|
|
35
|
-
|
|
27
|
+
}
|
|
28
|
+
function renderWorkSection() {
|
|
29
|
+
return (`## How to Work\n\n` +
|
|
36
30
|
`- **Read before \`edit\`/\`write\`.** No edit/write without a prior read this session — missed reads waste the payload.\n` +
|
|
37
31
|
`- **Re-read after mutating tools.** Anything that rewrites files on disk (formatter, \`lint --fix\`, codemods, codegen, \`git checkout --\`) invalidates your cached view. Read the file again before the next \`edit\`/\`write\` — stale \`old_string\` matches fail, or worse, silently overwrite the mutation.\n` +
|
|
38
32
|
`- **Compute in bash, write with \`edit\`.** When a task needs computation (word counts, regex, padding, structural validation), use bash for the computation and the \`edit\` tool to apply the result. Shelling out to \`python -c '... f.write(...)'\` or \`sed -i\` loses read-tracking, partial-apply, indent forgiveness, and actionable error messages — and a mid-script crash leaves the file in unknown state.\n` +
|
|
@@ -41,73 +35,60 @@ export async function buildSystemPrompt(cwd, skills, planMode, approvedPlanPath,
|
|
|
41
35
|
`- **Just do it.** Routine follow-up (build, migrate, seed, re-run) is yours — don't ask.\n` +
|
|
42
36
|
`- **Ask first for destructive actions**: deleting files, force-push, dropping data, killing processes, \`rm -rf\`, \`--hard\`, \`--force\`.\n` +
|
|
43
37
|
`- **Investigate unexpected state** (unfamiliar files, branches, locks) — may be the user's in-progress work.\n` +
|
|
44
|
-
`- **Precedence when rules conflict** (highest first): CLAUDE.md /
|
|
38
|
+
`- **Precedence when rules conflict** (highest first): AGENTS.md / CLAUDE.md / .cursorrules / CONVENTIONS.md → existing patterns in the edited file/module → Language Style Packs → defaults in this prompt.\n` +
|
|
45
39
|
`- **Verify after meaningful edits.** When a Verification section is present, run the relevant commands for the language(s) you touched. Fix failures before reporting completion.\n` +
|
|
46
40
|
`- **Untracked files → \`.gitignore\`**: artifacts, configs, secrets, logs, scratch, \`.env\`, caches.\n` +
|
|
47
41
|
`- **Never fake verification.** If you didn't run the check or it failed, say so. Don't invent results.`);
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
if (approvedPlanPath
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
` 1. A library import — \`from "remotion"\`, \`import { spring }\`, \`from "@remotion/captions"\`\n` +
|
|
90
|
-
` 2. A known identifier/prop/hook — \`useVideoConfig\`, \`interpolate(\`, \`<Sequence\`, \`SubtitlePage\`\n` +
|
|
91
|
-
` 3. A unique config key — \`"defaultExport":\`, \`assetsInclude:\`\n` +
|
|
92
|
-
` Bad: \`karaoke word animation subtitle\` → zero hits, every time. Good: \`from "@remotion/captions"\` + \`peek: true\` → real files; then narrow with \`repo\` + \`path\` and read them.\n` +
|
|
93
|
-
` - **Filename + topic ≠ query.** \`Page.tsx tiktok\` won't match. Use \`path: "Page.tsx"\` + \`repo: "remotion-dev"\` + a literal token in \`query\`.\n` +
|
|
94
|
-
` - Filters: \`language: ["TypeScript"]\`, \`repo: "owner/name"\` (substring), \`path: "src/components/"\` (substring), \`matchCase\`, \`useRegexp\`.\n` +
|
|
95
|
-
` - Workflow: \`peek: true\` first → paths + match counts only (cheap triage). Then call again narrowed by \`repo\` + \`path\` for full snippets. Paginate with \`offset\`.\n` +
|
|
96
|
-
` - Defaults exclude tests, \`node_modules\`, vendored, build, and generated files — pass \`includeTests: true\` or \`includeVendored: true\` to widen.\n` +
|
|
97
|
-
` - Token budget: \`maxResults\` defaults to 10 (cap 200), \`contextLines\` defaults to 5 (range 0–20). Keep both small unless you need more.\n` +
|
|
98
|
-
` - RE2 regex only: no lookahead/lookbehind/backrefs; multi-line patterns need \`(?s)\` prefix.\n` +
|
|
99
|
-
`- Applies to everything — APIs, CLI flags, configs (vite.config.ts, package.json, Dockerfile, GH Actions), shell idioms, schema shapes, error wording, conventions. Not just "unfamiliar" code.`);
|
|
100
|
-
// 4. Code Quality
|
|
101
|
-
sections.push(`## Code Quality\n\n` +
|
|
42
|
+
}
|
|
43
|
+
function renderPlanModeSection() {
|
|
44
|
+
return (`## Plan Mode (ACTIVE)\n\n` +
|
|
45
|
+
`You are in PLAN MODE. Research and design an implementation plan before writing any code.\n\n` +
|
|
46
|
+
`### Workflow\n` +
|
|
47
|
+
`1. Explore: read, grep, find, ls to understand the codebase\n` +
|
|
48
|
+
`2. Research: \`web_search\` + \`web_fetch\` for docs; \`mcp__kencode-search__searchCode\` for real code samples — literal text or RE2 regex (NOT semantic); start with \`peek: true\` for paths+counts, then drill in narrowed by \`repo\` + \`path\` (full usage in Research & Verification below)\n` +
|
|
49
|
+
`3. Draft: write the plan to .gg/plans/<name>.md\n` +
|
|
50
|
+
`4. Submit: call exit_plan with the plan path\n\n` +
|
|
51
|
+
`### Rules\n` +
|
|
52
|
+
`- bash, edit, write (except to .gg/plans/), and subagent are restricted\n` +
|
|
53
|
+
`- Be specific: exact file paths, function names, line numbers\n` +
|
|
54
|
+
`- Note risks and verification criteria\n\n` +
|
|
55
|
+
`### Plan Format\n` +
|
|
56
|
+
`Plan can have any structure, but it MUST end with a section titled exactly \`## Steps\` ` +
|
|
57
|
+
`containing a single flat numbered list. This section is parsed by the progress widget — ` +
|
|
58
|
+
`the ONLY source of truth for step tracking. Do NOT put numbered lists elsewhere.`);
|
|
59
|
+
}
|
|
60
|
+
async function renderApprovedPlanSection(approvedPlanPath, planMode) {
|
|
61
|
+
if (!approvedPlanPath || planMode)
|
|
62
|
+
return null;
|
|
63
|
+
const planContent = await fs.readFile(approvedPlanPath, "utf-8").catch(() => null);
|
|
64
|
+
if (planContent === null)
|
|
65
|
+
return null;
|
|
66
|
+
if (!planContent.trim())
|
|
67
|
+
return null;
|
|
68
|
+
return (`## Approved Plan\n\n` +
|
|
69
|
+
`Follow this plan strictly. File: ${approvedPlanPath}\n\n` +
|
|
70
|
+
`<approved_plan>\n${planContent.trim()}\n</approved_plan>\n\n` +
|
|
71
|
+
`- Follow step order. Don't deviate without user confirmation.\n` +
|
|
72
|
+
`- After each step from \`## Steps\`, output \`[DONE:n]\` (e.g. \`[DONE:1]\`) to update the progress widget, then continue with step n+1 in the same turn.`);
|
|
73
|
+
}
|
|
74
|
+
function renderResearchSection() {
|
|
75
|
+
return (`## Research & Verification\n\n` +
|
|
76
|
+
`Do not assume current APIs, CLI flags, config schema, or error wording — verify.\n\n` +
|
|
77
|
+
`- **Docs first**: use \`web_search\` to find authoritative pages, then \`web_fetch\` to read them.\n` +
|
|
78
|
+
`- **Real code second**: use \`mcp__kencode-search__searchCode\` for literal text or RE2 regex only; it is NOT semantic search. For concepts, search tokens real files contain: imports, identifiers/hooks/props, or config keys. Put filenames in \`path\`, repos/topics in \`repo\`, code tokens in \`query\`. Start with \`peek: true\`, then narrow by \`repo\` + \`path\` for snippets.\n` +
|
|
79
|
+
`- **Verify after edits**: run relevant checks, read failures, fix them, and never report unrun or failing checks as passing.`);
|
|
80
|
+
}
|
|
81
|
+
function renderCodeQualitySection() {
|
|
82
|
+
return (`## Code Quality\n\n` +
|
|
102
83
|
`- Descriptive names that reveal intent. Define types before implementation.\n` +
|
|
103
84
|
`- No dead code, no commented-out code. No stubs or placeholders unless asked.\n` +
|
|
104
85
|
`- Handle errors at I/O, user input, and external API boundaries.\n` +
|
|
105
86
|
`- Prefer existing dependencies. Don't refactor or reorganize unprompted.`);
|
|
106
|
-
|
|
87
|
+
}
|
|
88
|
+
function renderToolsSection(toolNames, planMode) {
|
|
107
89
|
const activeTools = toolNames ?? DEFAULT_TOOL_NAMES;
|
|
108
90
|
const toolLines = [];
|
|
109
91
|
for (const name of activeTools) {
|
|
110
|
-
// In plan mode, hide enter_plan (already entered); outside plan mode, hide exit_plan.
|
|
111
92
|
if (planMode && name === "enter_plan")
|
|
112
93
|
continue;
|
|
113
94
|
if (!planMode && name === "exit_plan")
|
|
@@ -116,10 +97,9 @@ export async function buildSystemPrompt(cwd, skills, planMode, approvedPlanPath,
|
|
|
116
97
|
if (hint)
|
|
117
98
|
toolLines.push(`- **${name}**: ${hint}`);
|
|
118
99
|
}
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
// 6. Project context — walk from cwd to root looking for context files
|
|
100
|
+
return toolLines.length > 0 ? `## Tools\n\n${toolLines.join("\n")}` : null;
|
|
101
|
+
}
|
|
102
|
+
async function collectProjectContext(cwd) {
|
|
123
103
|
const contextParts = [];
|
|
124
104
|
let dir = cwd;
|
|
125
105
|
const visited = new Set();
|
|
@@ -133,7 +113,7 @@ export async function buildSystemPrompt(cwd, skills, planMode, approvedPlanPath,
|
|
|
133
113
|
contextParts.push(`### ${relPath}\n\n${content.trim()}`);
|
|
134
114
|
}
|
|
135
115
|
catch {
|
|
136
|
-
// File doesn't exist, skip
|
|
116
|
+
// File doesn't exist, skip.
|
|
137
117
|
}
|
|
138
118
|
}
|
|
139
119
|
const parent = path.dirname(dir);
|
|
@@ -141,29 +121,56 @@ export async function buildSystemPrompt(cwd, skills, planMode, approvedPlanPath,
|
|
|
141
121
|
break;
|
|
142
122
|
dir = parent;
|
|
143
123
|
}
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
124
|
+
return contextParts;
|
|
125
|
+
}
|
|
126
|
+
function renderProjectContextSection(contextParts) {
|
|
127
|
+
if (contextParts.length === 0)
|
|
128
|
+
return null;
|
|
129
|
+
return (`## Project Context\n\n` +
|
|
130
|
+
`**Highest precedence** — AGENTS.md / CLAUDE.md override Language Style Packs and all default guidance. ` +
|
|
131
|
+
`When these files conflict with anything else in this prompt, follow the project file.\n\n` +
|
|
132
|
+
contextParts.join("\n\n"));
|
|
133
|
+
}
|
|
134
|
+
function renderEnvironmentSection(cwd) {
|
|
135
|
+
return `## Environment\n\n- Working directory: ${cwd}\n- Platform: ${process.platform}`;
|
|
136
|
+
}
|
|
137
|
+
function renderUncachedDateSuffix() {
|
|
138
|
+
const today = new Date();
|
|
139
|
+
const day = today.getDate();
|
|
140
|
+
const month = today.toLocaleString("en-US", { month: "long" });
|
|
141
|
+
const year = today.getFullYear();
|
|
142
|
+
return `${UNCACHED_MARKER}\nToday's date: ${day} ${month} ${year}`;
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Build the system prompt dynamically based on cwd and context.
|
|
146
|
+
*
|
|
147
|
+
* @param toolNames — if provided, the Tools section only lists these tools.
|
|
148
|
+
* Pass `tools.map(t => t.name)` from the session so the prompt reflects
|
|
149
|
+
* exactly what the model can call. Defaults to the full built-in set.
|
|
150
|
+
*/
|
|
151
|
+
export async function buildSystemPrompt(cwd, skills, planMode, approvedPlanPath, toolNames, activeLanguages) {
|
|
152
|
+
const sections = [renderIdentitySection(), renderTalkSection(), renderWorkSection()];
|
|
153
|
+
if (planMode)
|
|
154
|
+
sections.push(renderPlanModeSection());
|
|
155
|
+
const approvedPlanSection = await renderApprovedPlanSection(approvedPlanPath, planMode);
|
|
156
|
+
if (approvedPlanSection)
|
|
157
|
+
sections.push(approvedPlanSection);
|
|
158
|
+
sections.push(renderResearchSection(), renderCodeQualitySection());
|
|
159
|
+
const toolsSection = renderToolsSection(toolNames, planMode);
|
|
160
|
+
if (toolsSection)
|
|
161
|
+
sections.push(toolsSection);
|
|
162
|
+
const projectContextSection = renderProjectContextSection(await collectProjectContext(cwd));
|
|
163
|
+
if (projectContextSection)
|
|
164
|
+
sections.push(projectContextSection);
|
|
153
165
|
if (activeLanguages && activeLanguages.size > 0) {
|
|
154
166
|
const stylePacks = renderStylePacksSection(activeLanguages, cwd);
|
|
155
167
|
if (stylePacks)
|
|
156
168
|
sections.push(stylePacks);
|
|
157
|
-
// 6c. Verification — detected commands for the active languages, so the
|
|
158
|
-
// agent can close the feedback loop after pack-influenced edits. Without
|
|
159
|
-
// this anchor, packs are advisory; with it, the model has concrete
|
|
160
|
-
// commands to run and verify against.
|
|
161
169
|
const verifyCmds = detectVerifyCommands(cwd, activeLanguages);
|
|
162
170
|
const verifySection = renderVerifySection(verifyCmds);
|
|
163
171
|
if (verifySection)
|
|
164
172
|
sections.push(verifySection);
|
|
165
173
|
}
|
|
166
|
-
// 7. Eyes — open improvement signals from past probe use (gated on .gg/eyes/manifest.json)
|
|
167
174
|
if (isEyesActive(cwd)) {
|
|
168
175
|
const open = readJournal({ status: "open", order: "desc", limit: 10 }, cwd);
|
|
169
176
|
if (open.length > 0) {
|
|
@@ -173,30 +180,17 @@ export async function buildSystemPrompt(cwd, skills, planMode, approvedPlanPath,
|
|
|
173
180
|
return `- ${date} · *${e.kind}*${probeTag}: ${e.reason}`;
|
|
174
181
|
});
|
|
175
182
|
sections.push(`## Eyes — Open Improvement Signals\n\n` +
|
|
176
|
-
`These
|
|
177
|
-
`
|
|
178
|
-
`inadequate capability would force you to **guess, skip verification, or hand-wave**, ` +
|
|
179
|
-
`surface the tradeoff in conversation rather than working around it silently — give the ` +
|
|
180
|
-
`user the choice to fix the probe first.\n\n` +
|
|
183
|
+
`These unresolved signals from this project's perception probes (\`.gg/eyes/\`) may bear on the work. ` +
|
|
184
|
+
`If a missing capability would force guessing or skipped verification, surface the tradeoff instead.\n\n` +
|
|
181
185
|
lines.join("\n"));
|
|
182
186
|
}
|
|
183
187
|
}
|
|
184
|
-
// 9. Skills
|
|
185
188
|
if (skills && skills.length > 0) {
|
|
186
189
|
const skillsSection = formatSkillsForPrompt(skills);
|
|
187
|
-
if (skillsSection)
|
|
190
|
+
if (skillsSection)
|
|
188
191
|
sections.push(skillsSection);
|
|
189
|
-
}
|
|
190
192
|
}
|
|
191
|
-
|
|
192
|
-
sections.push(`## Environment\n\n` + `- Working directory: ${cwd}\n` + `- Platform: ${process.platform}`);
|
|
193
|
-
// Dynamic section (uncached) — separated by marker so the transform layer
|
|
194
|
-
// can split the system prompt into cached + uncached blocks.
|
|
195
|
-
const today = new Date();
|
|
196
|
-
const day = today.getDate();
|
|
197
|
-
const month = today.toLocaleString("en-US", { month: "long" });
|
|
198
|
-
const year = today.getFullYear();
|
|
199
|
-
sections.push(`<!-- uncached -->\nToday's date: ${day} ${month} ${year}`);
|
|
193
|
+
sections.push(renderEnvironmentSection(cwd), renderUncachedDateSuffix());
|
|
200
194
|
return sections.join("\n\n");
|
|
201
195
|
}
|
|
202
196
|
//# sourceMappingURL=system-prompt.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"system-prompt.js","sourceRoot":"","sources":["../src/system-prompt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,EAAE,qBAAqB,EAAc,MAAM,kBAAkB,CAAC;AACrE,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAEhF,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AACtE,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAEtF,MAAM,aAAa,GAAG,CAAC,WAAW,EAAE,WAAW,EAAE,cAAc,EAAE,gBAAgB,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"system-prompt.js","sourceRoot":"","sources":["../src/system-prompt.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"system-prompt.test.d.ts","sourceRoot":"","sources":["../src/system-prompt.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import fs from "node:fs/promises";
|
|
2
|
+
import os from "node:os";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import { afterEach, describe, expect, it } from "vitest";
|
|
5
|
+
import { buildSystemPrompt } from "./system-prompt.js";
|
|
6
|
+
const tempDirs = [];
|
|
7
|
+
async function makeProject(files = {}) {
|
|
8
|
+
const cwd = await fs.mkdtemp(path.join(os.tmpdir(), "ggcoder-system-prompt-"));
|
|
9
|
+
tempDirs.push(cwd);
|
|
10
|
+
for (const [relativePath, content] of Object.entries(files)) {
|
|
11
|
+
const filePath = path.join(cwd, relativePath);
|
|
12
|
+
await fs.mkdir(path.dirname(filePath), { recursive: true });
|
|
13
|
+
await fs.writeFile(filePath, content, "utf-8");
|
|
14
|
+
}
|
|
15
|
+
return cwd;
|
|
16
|
+
}
|
|
17
|
+
function sectionIndex(prompt, heading) {
|
|
18
|
+
const index = prompt.indexOf(heading);
|
|
19
|
+
expect(index, `${heading} should exist`).toBeGreaterThanOrEqual(0);
|
|
20
|
+
return index;
|
|
21
|
+
}
|
|
22
|
+
function toolsSection(prompt) {
|
|
23
|
+
const start = sectionIndex(prompt, "## Tools");
|
|
24
|
+
const rest = prompt.slice(start);
|
|
25
|
+
const next = rest.indexOf("\n\n## ", "## Tools".length);
|
|
26
|
+
return next === -1 ? rest : rest.slice(0, next);
|
|
27
|
+
}
|
|
28
|
+
afterEach(async () => {
|
|
29
|
+
await Promise.all(tempDirs.splice(0).map((dir) => fs.rm(dir, { recursive: true, force: true })));
|
|
30
|
+
});
|
|
31
|
+
describe("buildSystemPrompt", () => {
|
|
32
|
+
it("renders deterministic section order and keeps only the volatile date after the marker", async () => {
|
|
33
|
+
const cwd = await makeProject({
|
|
34
|
+
"CLAUDE.md": "Project rules win.",
|
|
35
|
+
"package.json": JSON.stringify({ scripts: { check: "tsc --noEmit" } }),
|
|
36
|
+
"tsconfig.json": "{}",
|
|
37
|
+
});
|
|
38
|
+
const prompt = await buildSystemPrompt(cwd, [{ name: "find-skills", description: "Find skills.", content: "", source: "test" }], false, undefined, ["read", "edit", "web_search", "enter_plan", "exit_plan", "skill"], new Set(["typescript"]));
|
|
39
|
+
expect(prompt.startsWith("You are GG Coder by Ken Kai")).toBe(true);
|
|
40
|
+
expect(sectionIndex(prompt, "## How to Talk")).toBeLessThan(sectionIndex(prompt, "## How to Work"));
|
|
41
|
+
expect(sectionIndex(prompt, "## How to Work")).toBeLessThan(sectionIndex(prompt, "## Research & Verification"));
|
|
42
|
+
expect(sectionIndex(prompt, "## Research & Verification")).toBeLessThan(sectionIndex(prompt, "## Code Quality"));
|
|
43
|
+
expect(sectionIndex(prompt, "## Code Quality")).toBeLessThan(sectionIndex(prompt, "## Tools"));
|
|
44
|
+
expect(sectionIndex(prompt, "## Tools")).toBeLessThan(sectionIndex(prompt, "## Project Context"));
|
|
45
|
+
expect(sectionIndex(prompt, "## Project Context")).toBeLessThan(sectionIndex(prompt, "## Language Style Packs"));
|
|
46
|
+
expect(sectionIndex(prompt, "## Language Style Packs")).toBeLessThan(sectionIndex(prompt, "## Verification"));
|
|
47
|
+
expect(sectionIndex(prompt, "## Verification")).toBeLessThan(sectionIndex(prompt, "## Skills"));
|
|
48
|
+
expect(sectionIndex(prompt, "## Skills")).toBeLessThan(sectionIndex(prompt, "## Environment"));
|
|
49
|
+
const marker = "<!-- uncached -->";
|
|
50
|
+
expect(prompt.match(new RegExp(marker, "g"))).toHaveLength(1);
|
|
51
|
+
const afterMarker = prompt.slice(prompt.indexOf(marker) + marker.length).trim();
|
|
52
|
+
expect(afterMarker).toMatch(/^Today's date: \d{1,2} [A-Za-z]+ \d{4}$/);
|
|
53
|
+
});
|
|
54
|
+
it("lists exactly available known tools and hides unavailable plan transition tools", async () => {
|
|
55
|
+
const cwd = await makeProject();
|
|
56
|
+
const normalPrompt = await buildSystemPrompt(cwd, undefined, false, undefined, [
|
|
57
|
+
"read",
|
|
58
|
+
"web_search",
|
|
59
|
+
"exit_plan",
|
|
60
|
+
"not_a_tool",
|
|
61
|
+
]);
|
|
62
|
+
const normalTools = toolsSection(normalPrompt);
|
|
63
|
+
expect(normalTools).toContain("**read**");
|
|
64
|
+
expect(normalTools).toContain("**web_search**");
|
|
65
|
+
expect(normalTools).not.toContain("**exit_plan**");
|
|
66
|
+
expect(normalTools).not.toContain("not_a_tool");
|
|
67
|
+
expect(normalTools).not.toContain("**edit**");
|
|
68
|
+
const planPrompt = await buildSystemPrompt(cwd, undefined, true, undefined, [
|
|
69
|
+
"read",
|
|
70
|
+
"enter_plan",
|
|
71
|
+
"exit_plan",
|
|
72
|
+
]);
|
|
73
|
+
const planTools = toolsSection(planPrompt);
|
|
74
|
+
expect(planTools).toContain("**read**");
|
|
75
|
+
expect(planTools).toContain("**exit_plan**");
|
|
76
|
+
expect(planTools).not.toContain("**enter_plan**");
|
|
77
|
+
});
|
|
78
|
+
it("places project-context precedence next to project context before style packs", async () => {
|
|
79
|
+
const cwd = await makeProject({
|
|
80
|
+
"AGENTS.md": "Use tabs for this fixture.",
|
|
81
|
+
"tsconfig.json": "{}",
|
|
82
|
+
});
|
|
83
|
+
const prompt = await buildSystemPrompt(cwd, undefined, false, undefined, ["read"], new Set(["typescript"]));
|
|
84
|
+
const projectContextIndex = sectionIndex(prompt, "## Project Context");
|
|
85
|
+
const precedenceIndex = prompt.indexOf("**Highest precedence**", projectContextIndex);
|
|
86
|
+
expect(precedenceIndex).toBeGreaterThan(projectContextIndex);
|
|
87
|
+
expect(precedenceIndex).toBeLessThan(sectionIndex(prompt, "### AGENTS.md"));
|
|
88
|
+
expect(sectionIndex(prompt, "## Project Context")).toBeLessThan(sectionIndex(prompt, "## Language Style Packs"));
|
|
89
|
+
expect(prompt).toContain("AGENTS.md / CLAUDE.md override Language Style Packs");
|
|
90
|
+
});
|
|
91
|
+
it("keeps kencode guidance concise while preserving literal search requirements", async () => {
|
|
92
|
+
const cwd = await makeProject();
|
|
93
|
+
const prompt = await buildSystemPrompt(cwd, undefined, false, undefined, [
|
|
94
|
+
"mcp__kencode-search__searchCode",
|
|
95
|
+
]);
|
|
96
|
+
const tools = toolsSection(prompt);
|
|
97
|
+
expect(tools).toContain("literal text or RE2 regex");
|
|
98
|
+
expect(tools).toContain("NOT semantic");
|
|
99
|
+
expect(tools).toContain("peek: true");
|
|
100
|
+
expect(tools).not.toContain("zero hits, every time");
|
|
101
|
+
expect(tools.length).toBeLessThan(550);
|
|
102
|
+
});
|
|
103
|
+
});
|
|
104
|
+
//# sourceMappingURL=system-prompt.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"system-prompt.test.js","sourceRoot":"","sources":["../src/system-prompt.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,9 +6,9 @@
|
|
|
6
6
|
*/
|
|
7
7
|
export const TOOL_PROMPT_HINTS = {
|
|
8
8
|
read: "Read file contents. Use offset/limit for large files.",
|
|
9
|
-
write: "Create or
|
|
10
|
-
edit: "
|
|
11
|
-
bash: "Run shell commands
|
|
9
|
+
write: "Create or overwrite files; read existing files first. Prefer edit for changes.",
|
|
10
|
+
edit: "Apply surgical { old_text, new_text } edits from a prior read. Use exact text; retry only failed edits; replace_all for renames.",
|
|
11
|
+
bash: "Run shell commands from project root; use for computation and long/background processes, not direct file rewrites.",
|
|
12
12
|
find: "Find files/dirs by name pattern. Faster than bash find, respects .gitignore.",
|
|
13
13
|
grep: "Regex search across files. Use for usages, definitions, imports.",
|
|
14
14
|
ls: "List directory contents.",
|
|
@@ -19,7 +19,7 @@ export const TOOL_PROMPT_HINTS = {
|
|
|
19
19
|
tasks: "Manage the Ctrl+T task pane (add/list/done/remove). Only when the user explicitly asks. Do NOT auto-run.",
|
|
20
20
|
subagent: "Delegate focused, isolated subtasks (research, parallel exploration).",
|
|
21
21
|
skill: "Invoke a named skill for specialized instructions.",
|
|
22
|
-
"mcp__kencode-search__searchCode":
|
|
22
|
+
"mcp__kencode-search__searchCode": "Search public GitHub code by literal text or RE2 regex; NOT semantic. Anchor concepts on imports/identifiers/config keys. Put filenames in `path`, topics in `repo`, code tokens in `query`. Start with `peek: true`, then narrow by `repo` + `path` for snippets. RE2 only; multi-line needs `(?s)`.",
|
|
23
23
|
enter_plan: "Enter plan mode for read-only research + planning on complex multi-file tasks.",
|
|
24
24
|
exit_plan: "Submit your plan for user review and exit plan mode.",
|
|
25
25
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompt-hints.js","sourceRoot":"","sources":["../../src/tools/prompt-hints.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAA2B;IACvD,IAAI,EAAE,uDAAuD;IAC7D,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"prompt-hints.js","sourceRoot":"","sources":["../../src/tools/prompt-hints.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAA2B;IACvD,IAAI,EAAE,uDAAuD;IAC7D,KAAK,EAAE,gFAAgF;IACvF,IAAI,EAAE,kIAAkI;IACxI,IAAI,EAAE,oHAAoH;IAC1H,IAAI,EAAE,8EAA8E;IACpF,IAAI,EAAE,kEAAkE;IACxE,EAAE,EAAE,0BAA0B;IAC9B,SAAS,EAAE,oDAAoD;IAC/D,UAAU,EAAE,qDAAqD;IACjE,WAAW,EAAE,kDAAkD;IAC/D,SAAS,EAAE,kCAAkC;IAC7C,KAAK,EACH,0GAA0G;IAC5G,QAAQ,EAAE,uEAAuE;IACjF,KAAK,EAAE,oDAAoD;IAC3D,iCAAiC,EAC/B,uSAAuS;IACzS,UAAU,EAAE,gFAAgF;IAC5F,SAAS,EAAE,sDAAsD;CAClE,CAAC;AAEF,oEAAoE;AACpE,MAAM,CAAC,MAAM,kBAAkB,GAAsB;IACnD,MAAM;IACN,OAAO;IACP,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,IAAI;IACJ,WAAW;IACX,aAAa;IACb,WAAW;IACX,OAAO;IACP,UAAU;IACV,OAAO;IACP,iCAAiC;IACjC,YAAY;IACZ,WAAW;CACZ,CAAC"}
|