@kenkaiiii/ggcoder 5.22.5 → 5.23.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/dist/config.js +38 -0
- package/dist/config.js.map +1 -1
- package/dist/core/auth-providers.js +1 -1
- package/dist/core/auth-providers.js.map +1 -1
- package/dist/core/prompt-commands.d.ts.map +1 -1
- package/dist/core/prompt-commands.js +29 -111
- package/dist/core/prompt-commands.js.map +1 -1
- package/dist/core/prompt-commands.test.js +14 -10
- package/dist/core/prompt-commands.test.js.map +1 -1
- package/dist/core/setup-history.d.ts +0 -6
- package/dist/core/setup-history.d.ts.map +1 -1
- package/dist/core/setup-history.js +2 -18
- package/dist/core/setup-history.js.map +1 -1
- package/dist/core/setup-history.test.js +11 -26
- package/dist/core/setup-history.test.js.map +1 -1
- package/dist/core/slash-commands.d.ts.map +1 -1
- package/dist/core/slash-commands.js +3 -7
- package/dist/core/slash-commands.js.map +1 -1
- package/dist/system-prompt.d.ts.map +1 -1
- package/dist/system-prompt.js +18 -14
- package/dist/system-prompt.js.map +1 -1
- package/dist/system-prompt.test.js +18 -14
- package/dist/system-prompt.test.js.map +1 -1
- package/dist/tools/prompt-hints.js +1 -1
- package/dist/tools/prompt-hints.js.map +1 -1
- package/dist/ui/App.d.ts.map +1 -1
- package/dist/ui/App.js +5 -79
- package/dist/ui/App.js.map +1 -1
- package/dist/ui/app-items.d.ts +1 -12
- package/dist/ui/app-items.d.ts.map +1 -1
- package/dist/ui/app-items.js.map +1 -1
- package/dist/ui/components/Footer.d.ts.map +1 -1
- package/dist/ui/components/Footer.js +2 -1
- package/dist/ui/components/Footer.js.map +1 -1
- package/dist/ui/login.js +1 -1
- package/dist/ui/login.js.map +1 -1
- package/dist/ui/terminal-history-status-renderers.d.ts +1 -2
- package/dist/ui/terminal-history-status-renderers.d.ts.map +1 -1
- package/dist/ui/terminal-history-status-renderers.js +2 -15
- package/dist/ui/terminal-history-status-renderers.js.map +1 -1
- package/dist/ui/terminal-history.d.ts.map +1 -1
- package/dist/ui/terminal-history.js +2 -4
- package/dist/ui/terminal-history.js.map +1 -1
- package/dist/ui/transcript/MiscRows.d.ts +1 -4
- package/dist/ui/transcript/MiscRows.d.ts.map +1 -1
- package/dist/ui/transcript/MiscRows.js +2 -7
- package/dist/ui/transcript/MiscRows.js.map +1 -1
- package/dist/ui/transcript/TranscriptRenderer.d.ts.map +1 -1
- package/dist/ui/transcript/TranscriptRenderer.js +1 -3
- package/dist/ui/transcript/TranscriptRenderer.js.map +1 -1
- package/dist/ui/transcript/presentation.d.ts +1 -9
- package/dist/ui/transcript/presentation.d.ts.map +1 -1
- package/dist/ui/transcript/presentation.js +0 -9
- package/dist/ui/transcript/presentation.js.map +1 -1
- package/dist/ui/transcript/spacing.d.ts +2 -2
- package/dist/ui/transcript/spacing.d.ts.map +1 -1
- package/dist/ui/transcript/spacing.js +0 -1
- package/dist/ui/transcript/spacing.js.map +1 -1
- package/dist/ui/transcript/spacing.test.js +1 -3
- package/dist/ui/transcript/spacing.test.js.map +1 -1
- package/dist/ui/tui-history-parity.test.js +2 -9
- package/dist/ui/tui-history-parity.test.js.map +1 -1
- package/package.json +4 -4
package/dist/config.js
CHANGED
|
@@ -157,6 +157,44 @@ When given a task:
|
|
|
157
157
|
- **Blocked/Notes**: anything unfinished, assumed, or left for follow-up
|
|
158
158
|
|
|
159
159
|
Do the work, don't just describe it. Don't over-engineer.
|
|
160
|
+
`,
|
|
161
|
+
"auditor.md": `---
|
|
162
|
+
name: auditor
|
|
163
|
+
description: "Defensive security analyst \u2014 finds exploitable weaknesses with concrete vulnerability scenarios"
|
|
164
|
+
tools: read, grep, find, ls, source_path
|
|
165
|
+
---
|
|
166
|
+
|
|
167
|
+
You are Auditor, a defensive security analyst. You review code the owner asked to have reviewed so weaknesses can be patched before they ship. You are read-only: report findings, never modify anything. Never produce working exploit code or payloads \u2014 describe each risk at the data-flow level so it maps directly to a fix.
|
|
168
|
+
|
|
169
|
+
For the vulnerability class you are assigned:
|
|
170
|
+
1. **Trace data flow** from the provided Sources to Sinks \u2014 no pattern-matching without a traced path
|
|
171
|
+
2. Apply the untrusted-vs-trusted decision: is the input actually reachable by an untrusted party, or is it a settings constant / build-time string / server-controlled value?
|
|
172
|
+
3. Describe a concrete **risk scenario** \u2014 what kind of input reaches the source, how the system processes it, what exposure results. If you can't describe the steps, don't flag it
|
|
173
|
+
4. Assign **confidence 0.0\u20131.0**; drop everything below 0.8 before returning
|
|
174
|
+
5. Be framework-aware: ORM parameterization, auto-escaping, and memory-safe languages eliminate whole classes \u2014 don't flag what the framework already handles
|
|
175
|
+
|
|
176
|
+
Never flag: DOS without an amplification primitive, theoretical races, log spoofing, env-var trust, client-side checks backed by server validation, findings in docs/tests/fixtures, dev-only tooling, or style preferences.
|
|
177
|
+
|
|
178
|
+
Report each finding: location (file:line), source \u2192 sink path, risk scenario, impact, concrete code-level fix, confidence.
|
|
179
|
+
`,
|
|
180
|
+
"skeptic.md": `---
|
|
181
|
+
name: skeptic
|
|
182
|
+
description: "Rigorous false-positive reviewer \u2014 disproves security findings and applies exclusion rules strictly"
|
|
183
|
+
tools: read, grep, find, ls, source_path
|
|
184
|
+
---
|
|
185
|
+
|
|
186
|
+
You are Skeptic, a false-positive reviewer for security findings. Start from "this is a false positive" and try to disprove each finding you are given \u2014 only findings that survive your challenge are confirmed.
|
|
187
|
+
|
|
188
|
+
For each finding:
|
|
189
|
+
1. Re-read the actual code at the cited location \u2014 does the claimed source \u2192 sink path really exist as described?
|
|
190
|
+
2. Hunt for sanitization, validation, framework protection, or unreachable preconditions between source and sink
|
|
191
|
+
3. Check whether the "untrusted" input is truly attacker-reachable, or is server-controlled config / env / build-time data
|
|
192
|
+
4. Apply exclusions strictly: DOS and rate-limit noise, theoretical races, log spoofing, env-var trust, client-side checks backed by server validation, docs/test/fixture code, dev-only tooling, style preferences \u2014 all DROP
|
|
193
|
+
|
|
194
|
+
Verdict per finding, with one-line justification:
|
|
195
|
+
- **CONFIRM** \u2014 the path is real and reachable; evidence held up
|
|
196
|
+
- **DOWNGRADE** \u2014 real but overstated; state the correct severity and why
|
|
197
|
+
- **DROP** \u2014 disproved; cite the disproving evidence (file:line)
|
|
160
198
|
`,
|
|
161
199
|
};
|
|
162
200
|
for (const [filename, content] of Object.entries(defaults)) {
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth-providers.js","sourceRoot":"","sources":["../../src/core/auth-providers.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,gFAAgF;AAChF,6EAA6E;AAC7E,0EAA0E;AAE1E,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAyCxD,MAAM,CAAC,MAAM,cAAc,GAAuB;IAChD;QACE,KAAK,EAAE,WAAW;QAClB,KAAK,EAAE,WAAW;QAClB,WAAW,EAAE
|
|
1
|
+
{"version":3,"file":"auth-providers.js","sourceRoot":"","sources":["../../src/core/auth-providers.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,gFAAgF;AAChF,6EAA6E;AAC7E,0EAA0E;AAE1E,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAyCxD,MAAM,CAAC,MAAM,cAAc,GAAuB;IAChD;QACE,KAAK,EAAE,WAAW;QAClB,KAAK,EAAE,WAAW;QAClB,WAAW,EAAE,6CAA6C;QAC1D,OAAO,EAAE,CAAC,OAAO,CAAC;KACnB;IACD;QACE,KAAK,EAAE,QAAQ;QACf,KAAK,EAAE,QAAQ;QACf,WAAW,EAAE,mDAAmD;QAChE,OAAO,EAAE,CAAC,OAAO,CAAC;KACnB;IACD;QACE,KAAK,EAAE,QAAQ;QACf,KAAK,EAAE,QAAQ;QACf,WAAW,EAAE,mEAAmE;QAChF,OAAO,EAAE,CAAC,OAAO,CAAC;KACnB;IACD;QACE,KAAK,EAAE,KAAK;QACZ,KAAK,EAAE,YAAY;QACnB,WAAW,EAAE,UAAU;QACvB,OAAO,EAAE,CAAC,QAAQ,CAAC;QACnB,WAAW,EAAE,KAAK;KACnB;IACD;QACE,KAAK,EAAE,UAAU;QACjB,KAAK,EAAE,UAAU;QACjB,WAAW,EAAE,uCAAuC;QACpD,OAAO,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC;QAC5B,WAAW,EAAE,UAAU;KACxB;IACD;QACE,KAAK,EAAE,KAAK;QACZ,KAAK,EAAE,YAAY;QACnB,WAAW,EAAE,0CAA0C;QACvD,OAAO,EAAE,CAAC,QAAQ,CAAC;QACnB,WAAW,EAAE,MAAM;KACpB;IACD;QACE,KAAK,EAAE,SAAS;QAChB,KAAK,EAAE,SAAS;QAChB,WAAW,EAAE,YAAY;QACzB,OAAO,EAAE,CAAC,QAAQ,CAAC;QACnB,WAAW,EAAE,SAAS;KACvB;IACD;QACE,KAAK,EAAE,QAAQ;QACf,KAAK,EAAE,eAAe;QACtB,WAAW,EAAE,gFAAgF;QAC7F,OAAO,EAAE,CAAC,QAAQ,CAAC;QACnB,WAAW,EAAE,aAAa;QAC1B,aAAa,EAAE,0CAA0C;QACzD,cAAc,EAAE;YACd;gBACE,GAAG,EAAE,QAAQ;gBACb,KAAK,EAAE,YAAY;gBACnB,OAAO,EAAE,0CAA0C;aACpD;YACD;gBACE,GAAG,EAAE,kBAAkB;gBACvB,KAAK,EAAE,uCAAuC;gBAC9C,OAAO,EAAE,+BAA+B;aACzC;SACF;KACF;IACD;QACE,KAAK,EAAE,UAAU;QACjB,KAAK,EAAE,UAAU;QACjB,WAAW,EAAE,2BAA2B;QACxC,OAAO,EAAE,CAAC,QAAQ,CAAC;QACnB,WAAW,EAAE,UAAU;KACxB;IACD;QACE,KAAK,EAAE,QAAQ;QACf,KAAK,EAAE,eAAe;QACtB,WAAW,EAAE,kBAAkB;QAC/B,OAAO,EAAE,CAAC,QAAQ,CAAC;QACnB,WAAW,EAAE,QAAQ;KACtB;IACD;QACE,KAAK,EAAE,YAAY;QACnB,KAAK,EAAE,YAAY;QACnB,WAAW,EAAE,wBAAwB;QACrC,OAAO,EAAE,CAAC,QAAQ,CAAC;QACnB,WAAW,EAAE,YAAY;KAC1B;CACF,CAAC;AAEF,MAAM,UAAU,eAAe,CAAC,KAAa;IAC3C,OAAO,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC;AACvD,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompt-commands.d.ts","sourceRoot":"","sources":["../../src/core/prompt-commands.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;CAChB;
|
|
1
|
+
{"version":3,"file":"prompt-commands.d.ts","sourceRoot":"","sources":["../../src/core/prompt-commands.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;CAChB;AA0BD,eAAO,MAAM,eAAe,EAAE,aAAa,EA+gB1C,CAAC;AAEF,gDAAgD;AAChD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAExE"}
|
|
@@ -16,6 +16,11 @@ const TASKS_ADDED_NOTICE = IS_GG_APP
|
|
|
16
16
|
const CLAUDE_MD_RESTART_NOTICE = IS_GG_APP
|
|
17
17
|
? '> ⚠️ CLAUDE.md was created/updated. GG App loads it fresh per session, so start a **New Session** (click "+ New") before continuing. Without a new session, I won\'t see the new context.'
|
|
18
18
|
: "> ⚠️ CLAUDE.md was created/updated. ggcoder loads it at startup, so **exit and restart ggcoder** (`/quit` then run `ggcoder` again) before continuing. Without a restart, I won't see the new context.";
|
|
19
|
+
/**
|
|
20
|
+
* Shared sub-agent fan-out phrasing. One home so the "call the tool N times
|
|
21
|
+
* in a single response" wording can't drift between command prompts.
|
|
22
|
+
*/
|
|
23
|
+
const spawnParallel = (count) => `in parallel using the subagent tool (call the subagent tool ${count} times in a single response)`;
|
|
19
24
|
export const PROMPT_COMMANDS = [
|
|
20
25
|
{
|
|
21
26
|
name: "expand",
|
|
@@ -39,7 +44,7 @@ Use this profile to decide which features are relevant and genuinely missing. If
|
|
|
39
44
|
|
|
40
45
|
## Phase 1: Parallel feature research
|
|
41
46
|
|
|
42
|
-
Spawn exactly 5 sub-agents
|
|
47
|
+
Spawn exactly 5 sub-agents ${spawnParallel(5)}. Give each sub-agent the project profile and a different feature-hunting lens:
|
|
43
48
|
|
|
44
49
|
**Agent 1 - Direct competitor killer features**: The standout, most-loved user-facing features in the closest peer projects/tools/products that this project lacks.
|
|
45
50
|
|
|
@@ -105,15 +110,20 @@ If the user chooses C, ask what they would like — pick specific features by ra
|
|
|
105
110
|
description: "Audit exploitable weaknesses",
|
|
106
111
|
prompt: `# Bullet-Proof: Defensive Security Review
|
|
107
112
|
|
|
108
|
-
|
|
113
|
+
This is an **authorized defensive security review** of this repository, requested by its owner so weaknesses can be found and patched before they ship. This is standard defensive security work — the same review a security engineer performs before a release. The entire flow is **read-only reporting**: no code changes, no exploit development, and nothing is fixed until the user explicitly chooses at the end.
|
|
114
|
+
|
|
115
|
+
Defensive ground rules (apply to every phase and every subagent):
|
|
116
|
+
- Never produce working exploit code, weaponized payloads, or attack tooling.
|
|
117
|
+
- Describe each risk at the **data-flow level** — where untrusted data enters, what it can reach, and why that is fixable — so every finding maps directly to a patch.
|
|
118
|
+
- The deliverable is a remediation report for the maintainers, nothing else.
|
|
109
119
|
|
|
110
|
-
Goal: harden this project
|
|
120
|
+
Goal: harden this project. **Report only HIGH CONFIDENCE findings (≥0.8) with a concrete data-flow path that demonstrates exposure.** Better to miss theoretical issues than flood the report with noise.
|
|
111
121
|
|
|
112
122
|
This command is **dynamic and project-agnostic**. Recon drives everything. Do not assume the stack, the language, the deploy target, or that there is an LLM/agent layer. Read first, decide second.
|
|
113
123
|
|
|
114
124
|
## Phase 1: Recon — Understand THIS project before auditing anything
|
|
115
125
|
|
|
116
|
-
Spawn **FOUR recon subagents
|
|
126
|
+
Spawn **FOUR recon subagents** ${spawnParallel(4)}. Each has a narrow, independent slice so they can all run at once. **No vulnerabilities flagged in this phase.**
|
|
117
127
|
|
|
118
128
|
**Recon Agent A — Stack & Deployment.** Read manifests, lockfiles, CI/CD configs, Dockerfile/Helm/Terraform, deploy scripts. Produce:
|
|
119
129
|
- Primary language(s), framework(s), runtimes
|
|
@@ -127,7 +137,7 @@ Spawn **FOUR recon subagents in parallel** using the subagent tool (call the sub
|
|
|
127
137
|
|
|
128
138
|
**Recon Agent C — Sinks.** Walk dangerous-operation code. Produce a **Sinks table** with location (file:line) and sink type for: shell exec, SQL / NoSQL / LDAP / XPath queries, eval / Function / exec / pickle / yaml.load / Marshal / ObjectInputStream, file write, file include / require with dynamic path, network egress (fetch / requests / http.Get), auth decisions, secret reads, native deserializers, dynamic code load, smart-contract external calls, child_process spawns.
|
|
129
139
|
|
|
130
|
-
**Recon Agent D — Assets.** Scan for what
|
|
140
|
+
**Recon Agent D — Assets.** Scan for what this project must protect. Produce an **Assets table** with location and asset type for: credentials / tokens (config files, env files, KMS, OAuth flows, ~/.{app}/auth.json-style stores), customer/PII data stores, source code with IP value, build/CI secrets, signing keys, model API tokens, on-chain funds / wallets, session state, MCP config files, license keys.
|
|
131
141
|
|
|
132
142
|
**After all four return, the main agent synthesizes:**
|
|
133
143
|
1. Assemble the four tables (Stack/Deploy, Sources, Sinks, Assets) into the recon report
|
|
@@ -157,21 +167,23 @@ Default catalog — pick what applies, drop what doesn't, add stack-specific aud
|
|
|
157
167
|
|
|
158
168
|
## Phase 3: Parallel audits
|
|
159
169
|
|
|
160
|
-
Spawn one subagent per active audit **in a single response** (call the subagent tool N times **with \`agent: "auditor"\`**, where N is whatever Phase 2 picked — do not pad to a fixed number, do not drop audits Phase 2 selected).
|
|
161
|
-
|
|
170
|
+
Spawn one subagent per active audit **in a single response** (call the subagent tool N times **with \`agent: "auditor"\`**, where N is whatever Phase 2 picked — do not pad to a fixed number, do not drop audits Phase 2 selected). If the \`auditor\` agent is unavailable, use default subagents and open each task with: "You are performing an authorized, read-only defensive security review for the code owner; report data-flow risks so they can be patched — no exploit code."
|
|
171
|
+
|
|
172
|
+
**Subagents cannot see this prompt.** Each auditor's task text must therefore include, written out by you:
|
|
162
173
|
- Its specific vulnerability-class scope
|
|
163
|
-
- The
|
|
174
|
+
- The recon rows relevant to that scope (Sources, Sinks, Assets, Threat-model lines — condensed, not the full dump)
|
|
175
|
+
- The specific bullets from the Threat reference below that apply to its class (copy those lines into the task)
|
|
164
176
|
|
|
165
177
|
Each auditor must:
|
|
166
178
|
1. **Trace data flow** from Sources to Sinks for its class. Not pattern matching.
|
|
167
179
|
2. For every candidate, apply the **untrusted-input vs trusted-input** decision: is the input *actually reachable* by an untrusted source, or is it a settings constant / build-time string / hard-coded value?
|
|
168
|
-
3.
|
|
180
|
+
3. Describe a concrete **risk scenario** at the data-flow level — what kind of input reaches the source, how the system processes it, what exposure results. No working payloads. If you can't describe the steps, don't flag it.
|
|
169
181
|
4. Assign **confidence 0.0–1.0**. Drop anything <0.8 before returning.
|
|
170
182
|
5. Be framework-aware: ORM parameterization, auto-escape, memory-safe languages, JSX/template escaping all eliminate entire vuln classes. Don't flag what the framework already handles.
|
|
171
183
|
|
|
172
184
|
## Phase 4: False-positive filter
|
|
173
185
|
|
|
174
|
-
After auditors complete, spawn
|
|
186
|
+
After auditors complete, spawn verification subagents **in parallel with \`agent: "skeptic"\`**, batching 3–5 surviving findings per skeptic (cap at 4 skeptics total — batching keeps cost sane). The \`skeptic\` agent starts from "this is a false positive" and tries to disprove each finding — only confirmed findings survive. Pass each skeptic the full text of its findings (location, source/sink, risk scenario, claimed confidence); skeptics cannot see this prompt or the auditors' context. Drop anything returned as DROP; lower severity for DOWNGRADE.
|
|
175
187
|
|
|
176
188
|
**Hard exclusions — do NOT report these, even if real:**
|
|
177
189
|
- DOS / rate-limiting / memory exhaustion without a clear amplification primitive
|
|
@@ -216,9 +228,9 @@ Threat model: [from recon]
|
|
|
216
228
|
- Category: <slug> CWE: CWE-XXX Confidence: 0.95
|
|
217
229
|
- Exposure surface: <entry point from Sources>
|
|
218
230
|
- Source → Sink: <e.g. \`POST /api/foo body.userId\` → \`subprocess.run(..., shell=True)\`>
|
|
219
|
-
-
|
|
220
|
-
1. Untrusted input <
|
|
221
|
-
2.
|
|
231
|
+
- Risk scenario (data-flow level, no payloads):
|
|
232
|
+
1. Untrusted input of <shape/kind> reaches <source>
|
|
233
|
+
2. The system processes it as <what>
|
|
222
234
|
3. Result: <RCE / data exposure / auth bypass>
|
|
223
235
|
- Impact: <blast radius — what is exposed, how far it spreads>
|
|
224
236
|
- Fix: <concrete remediation, code-level>
|
|
@@ -245,7 +257,7 @@ If the user chooses A, B, or C, do not fix directly. Instead, add one task per s
|
|
|
245
257
|
|
|
246
258
|
## Threat reference (May 2026)
|
|
247
259
|
|
|
248
|
-
|
|
260
|
+
Defensive reference material from public incident reports and OWASP — patterns to check for, not techniques to reproduce. Copy the relevant bullets into each auditor's task (Phase 3); do not dump them into the report.
|
|
249
261
|
|
|
250
262
|
**OWASP Top 10:2025** — A01 Broken Access Control (now includes SSRF), A02 Misconfig, **A03 Supply Chain Failures (new)**, A05 Injection (now includes prompt injection), **A10 Mishandling Exceptional Conditions (new — fail-open patterns)**.
|
|
251
263
|
|
|
@@ -255,7 +267,7 @@ Cite these as needed per audit. Do not dump them into the report — use them to
|
|
|
255
267
|
|
|
256
268
|
**OWASP Top 10 for Agents 2026 (ASI01–10)** — Goal hijack, tool misuse, identity/privilege abuse, agentic supply chain, unexpected code exec, memory/context poisoning, inter-agent comms, cascading failures, human-trust exploit, rogue agents.
|
|
257
269
|
|
|
258
|
-
**Real 2024-2026 incidents —
|
|
270
|
+
**Real 2024-2026 public incidents — patterns to grep for defensively:**
|
|
259
271
|
- tj-actions/changed-files (Mar 14-15 2025, CVE-2025-30066, 23k repos) → unpinned GH Actions, \`uses: foo/bar@main\` / mutable tags, runner-memory secret dumps
|
|
260
272
|
- TanStack Mini Shai-Hulud (May 11 2026, CVE-2026-45321, CVSS 9.6 — 84 versions across 42 \`@tanstack/*\` + UiPath/Mistral/Guardrails/OpenSearch, 169+ packages total, "TeamPCP") → self-spreading npm worm, \`pull_request_target\` + cache poisoning + OIDC token extraction from \`/proc/<pid>/mem\`, persistent \`gh-token-monitor\` daemon
|
|
261
273
|
- Slopsquatting (ongoing 2025-2026, \`react-codeshift\` Jan 2026) → AI coding assistants hallucinate ~20% non-existent package names (open-source models ~21.7%, GPT-4 ~5.2%); malicious parties register the hallucinated names on npm/PyPI. **Verify every package actually existed BEFORE the agent suggested it** — check registry age, download history, author identity
|
|
@@ -310,7 +322,7 @@ If CLAUDE.md does NOT exist:
|
|
|
310
322
|
|
|
311
323
|
Derive every fact from the actual project — source code, entry points, manifests, and config. Treat README, docs, and code comments as unverified hints that are frequently stale: never copy claims from them, and only state things you can confirm from the code and config themselves.
|
|
312
324
|
|
|
313
|
-
Spawn 3 sub-agents
|
|
325
|
+
Spawn 3 sub-agents ${spawnParallel(3)}:
|
|
314
326
|
|
|
315
327
|
1. **Project Purpose Agent**: Determine what the project actually does from its real code — entry points, main modules, exported/public APIs, CLI commands, routes, and manifests. Do not rely on the README's description.
|
|
316
328
|
2. **Directory Structure Agent**: Map out the folder structure and what each folder contains
|
|
@@ -478,7 +490,7 @@ Illustrative only (not prescriptive):
|
|
|
478
490
|
|
|
479
491
|
## Phase 3: Parallel sweep
|
|
480
492
|
|
|
481
|
-
Spawn one sub-agent per domain you chose,
|
|
493
|
+
Spawn one sub-agent per domain you chose, ${spawnParallel("N")} — one task per domain. Each explores its assigned domain and returns skill-worthy opportunities.
|
|
482
494
|
|
|
483
495
|
**Skill-worthy means**: a recurring activity someone will do on THIS project — shipping, reviewing, migrating, debugging, onboarding, whatever applies — where a reusable instruction set would make it **faster** (efficient), **lower-effort** (easier), or **less likely to break something** (safer). The test is: will this skill save real time, reduce real cognitive load, or prevent real mistakes, repeatedly, on this project? If no, drop it. A domain returning zero candidates is a valid outcome.
|
|
484
496
|
|
|
@@ -536,100 +548,6 @@ If strong candidates had no ecosystem match, list them at the bottom:
|
|
|
536
548
|
|
|
537
549
|
After presenting the list, ask which (if any) to install. Install nothing without explicit confirmation. Once confirmed, hand off to find-skills to perform the actual install.`,
|
|
538
550
|
},
|
|
539
|
-
{
|
|
540
|
-
name: "setup",
|
|
541
|
-
aliases: ["setup-project"],
|
|
542
|
-
description: "Audit project setup",
|
|
543
|
-
prompt: `Audit this project across six categories and report gaps. **Do not fix anything yet.** Wait for me to choose what to address after the report.
|
|
544
|
-
|
|
545
|
-
Language-agnostic and project-agnostic — adapt findings to the languages and stack actually present. Ignore categories that don't apply (e.g. skip CI for a local-only scratchpad).
|
|
546
|
-
|
|
547
|
-
## Categories
|
|
548
|
-
|
|
549
|
-
### 1. Project hygiene
|
|
550
|
-
|
|
551
|
-
- \`.gitignore\` present and covers the active language(s)?
|
|
552
|
-
- \`README.md\` present with at least install + run instructions?
|
|
553
|
-
- License file present (if this looks like a public/shareable project)?
|
|
554
|
-
- \`.editorconfig\` present?
|
|
555
|
-
- Git initialized? (\`.git\` directory exists)
|
|
556
|
-
|
|
557
|
-
### 2. Toolchain version pinning
|
|
558
|
-
|
|
559
|
-
- Language version pinned in a canonical file: \`.nvmrc\` / \`package.json#engines\` (Node), \`.python-version\` / \`pyproject.toml#requires-python\` (Python), \`rust-toolchain.toml\` (Rust), the \`go\` line in \`go.mod\`, \`.ruby-version\` (Ruby), etc.
|
|
560
|
-
- Lockfile present and committed? (\`package-lock.json\`, \`pnpm-lock.yaml\`, \`yarn.lock\`, \`bun.lockb\`, \`uv.lock\`, \`poetry.lock\`, \`Cargo.lock\`, \`go.sum\`, \`Gemfile.lock\`, \`composer.lock\`)
|
|
561
|
-
|
|
562
|
-
### 3. Code quality tooling
|
|
563
|
-
|
|
564
|
-
For each active language, check that a formatter, linter, and (where applicable) type checker are configured:
|
|
565
|
-
- **Formatter**: Prettier / ruff format / gofmt (built-in) / rustfmt (built-in) / clang-format / etc.
|
|
566
|
-
- **Linter**: ESLint / Ruff / golangci-lint / Clippy / etc. — with a reasonable strictness preset
|
|
567
|
-
- **Type checker** (statically-typed langs only): tsc strict, Pyright strict, mypy strict
|
|
568
|
-
- **Test framework**: vitest / jest / pytest / go test / cargo test / rspec / etc.
|
|
569
|
-
|
|
570
|
-
Report which are present, missing, or configured below the pack's strictness recommendation.
|
|
571
|
-
|
|
572
|
-
### 4. Verify pipeline
|
|
573
|
-
|
|
574
|
-
- Are \`lint\` / \`typecheck\` / \`format:check\` / \`test\` (or language-equivalent) wired as runnable commands? (scripts in \`package.json\`, \`pyproject.toml\`, a \`Makefile\`, or \`justfile\`)
|
|
575
|
-
- Pre-commit hook configured? (\`.husky/\`, \`pre-commit\` framework, \`lefthook\`, etc.) — nice-to-have, not required.
|
|
576
|
-
- CI config present? (\`.github/workflows/\`, \`.gitlab-ci.yml\`, \`.circleci/\`, etc.)
|
|
577
|
-
|
|
578
|
-
### 5. Style pack alignment
|
|
579
|
-
|
|
580
|
-
"Active style packs" refers specifically to the per-language sub-sections inside the **Language Style Packs** section in your system prompt (e.g. \`### TypeScript\`, \`### Python\`, \`### Go\`). It does **NOT** include the cross-cutting \`### Agent-Written Code\` preamble that sits above them — those are guidelines for how code is *written*, not project-scaffolding to audit. It also does **NOT** include Skills (\`.gg/skills/\`) or any other extension category. If the Language Style Packs section is absent or empty, **skip this entire section entirely** — do not substitute Skills or any other concept.
|
|
581
|
-
|
|
582
|
-
When per-language packs are present, compare the project against each pack's **Tooling** bullet and the system prompt's **Verification** commands. For tool recommendations or config semantics, verify against official docs when local files are ambiguous:
|
|
583
|
-
- Tooling: which strict-mode flags or lint-rule presets does the pack recommend that the project is missing? (e.g. \`tsconfig\` missing \`noUncheckedIndexedAccess\`, \`pyproject\` missing \`[tool.ruff]\`, Go project missing \`golangci-lint\` config).
|
|
584
|
-
- Dependencies: list which pack-mentioned libs (Zod, Pydantic, thiserror, anyhow, etc.) the project uses, has an equivalent for, or lacks. **Observation only — no recommendation to install.**
|
|
585
|
-
|
|
586
|
-
### 6. Documentation hygiene
|
|
587
|
-
|
|
588
|
-
- \`CLAUDE.md\` or \`AGENTS.md\` present?
|
|
589
|
-
- Public API documented? (top-level docstrings, type signatures, or README examples)
|
|
590
|
-
- Architecture doc for non-trivial projects? (\`ARCHITECTURE.md\`, \`docs/architecture/\`, ADRs)
|
|
591
|
-
|
|
592
|
-
## How to investigate
|
|
593
|
-
|
|
594
|
-
- Read the project root + obvious config locations (\`./\`, \`.github/\`, \`.husky/\`, \`docs/\`).
|
|
595
|
-
- Don't recurse into \`node_modules\`, \`dist\`, \`build\`, \`target\`, vendored folders.
|
|
596
|
-
- Use \`ls\`, \`read\`, \`find\` (with name patterns) — do not \`grep\` source code for this audit; it's about scaffolding, not code review.
|
|
597
|
-
- Cap at ~20 file reads total. If a file is huge (e.g. \`pnpm-lock.yaml\`), don't read its body — presence is what matters.
|
|
598
|
-
|
|
599
|
-
## Output format
|
|
600
|
-
|
|
601
|
-
A single Markdown report, organized by category. Within each category, mark each item as one of:
|
|
602
|
-
- \`[OK]\` — present and reasonable
|
|
603
|
-
- \`[GAP]\` — missing or misconfigured; safe to add/fix
|
|
604
|
-
- \`[INFO]\` — observation only, no action implied
|
|
605
|
-
- \`[N/A]\` — doesn't apply to this project (omit from output if obvious)
|
|
606
|
-
|
|
607
|
-
Keep each line to one sentence. No prose paragraphs.
|
|
608
|
-
|
|
609
|
-
At the end:
|
|
610
|
-
|
|
611
|
-
\`\`\`
|
|
612
|
-
## Summary
|
|
613
|
-
|
|
614
|
-
<N> gaps in hygiene, <N> in tooling, <N> in verify pipeline, <N> in style-pack alignment.
|
|
615
|
-
|
|
616
|
-
Which (if any) would you like me to fix? Options:
|
|
617
|
-
- A) Add tasks for all [GAP] items that are safe + additive (no overwrites)
|
|
618
|
-
- B) Add tasks for a category: hygiene / tooling / verify / style-pack alignment
|
|
619
|
-
- C) Add tasks for specific items — tell me which
|
|
620
|
-
- D) None — just the report
|
|
621
|
-
\`\`\`
|
|
622
|
-
|
|
623
|
-
## Rules
|
|
624
|
-
|
|
625
|
-
- **Report only.** No edits, no installs, no commits without explicit user confirmation after the report.
|
|
626
|
-
- **Task handoff for fixes.** If the user chooses A, B, or C, do not fix directly. Add one task per selected gap or tightly coupled gap group using the \`tasks\` tool (action=add). Each task needs a short title and a standalone prompt that includes the gap, affected files/configs, safe-additive constraints, implementation instructions, project verification commands, and instructions to verify relevant tool/config semantics against official docs before completing the task. Use kencode search only for code-level examples, not as proof of scaffolding requirements. After adding the tasks, tell the user exactly: "${TASKS_ADDED_NOTICE}" Do not begin executing them unless the user explicitly says so.
|
|
627
|
-
- **No code refactors recommended.** This audit is about scaffolding/tooling, not code review. Use \`/scan\` or \`/verify\` for code-level findings.
|
|
628
|
-
- **No dependency installations in the report.** Listing them as observations is fine; recommending installation is not — that's the user's call.
|
|
629
|
-
- **Skip empty categories.** If a category has no findings, omit it.
|
|
630
|
-
- **Adapt to scale.** A 50-line script doesn't need CI, a license, or an ARCHITECTURE.md. Use judgment.
|
|
631
|
-
- **Brand-new empty project**: report "Empty project — nothing to audit. To bootstrap, tell me the stack you want and I'll scaffold from scratch." and stop.`,
|
|
632
|
-
},
|
|
633
551
|
];
|
|
634
552
|
/** Look up a prompt command by name or alias */
|
|
635
553
|
export function getPromptCommand(name) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompt-commands.js","sourceRoot":"","sources":["../../src/core/prompt-commands.ts"],"names":[],"mappings":"AAAA;;;GAGG;AASH;;;;;;GAMG;AACH,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,KAAK,SAAS,CAAC;AAExD,MAAM,kBAAkB,GAAG,SAAS;IAClC,CAAC,CAAC,2EAA2E;IAC7E,CAAC,CAAC,+DAA+D,CAAC;AAEpE,MAAM,wBAAwB,GAAG,SAAS;IACxC,CAAC,CAAC,2LAA2L;IAC7L,CAAC,CAAC,wMAAwM,CAAC;AAE7M,MAAM,CAAC,MAAM,eAAe,GAAoB;IAC9C;QACE,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,EAAE;QACX,WAAW,EAAE,mCAAmC;QAChD,MAAM,EAAE
|
|
1
|
+
{"version":3,"file":"prompt-commands.js","sourceRoot":"","sources":["../../src/core/prompt-commands.ts"],"names":[],"mappings":"AAAA;;;GAGG;AASH;;;;;;GAMG;AACH,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,KAAK,SAAS,CAAC;AAExD,MAAM,kBAAkB,GAAG,SAAS;IAClC,CAAC,CAAC,2EAA2E;IAC7E,CAAC,CAAC,+DAA+D,CAAC;AAEpE,MAAM,wBAAwB,GAAG,SAAS;IACxC,CAAC,CAAC,2LAA2L;IAC7L,CAAC,CAAC,wMAAwM,CAAC;AAE7M;;;GAGG;AACH,MAAM,aAAa,GAAG,CAAC,KAAsB,EAAU,EAAE,CACvD,+DAA+D,KAAK,8BAA8B,CAAC;AAErG,MAAM,CAAC,MAAM,eAAe,GAAoB;IAC9C;QACE,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,EAAE;QACX,WAAW,EAAE,mCAAmC;QAChD,MAAM,EAAE;;;;;;;;;;;;;;;;;;6BAkBiB,aAAa,CAAC,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;0KA0D6H;KACvK;IACD;QACE,IAAI,EAAE,cAAc;QACpB,OAAO,EAAE,CAAC,IAAI,CAAC;QACf,WAAW,EAAE,8BAA8B;QAC3C,MAAM,EAAE;;;;;;;;;;;;;;;iCAeqB,aAAa,CAAC,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gsBAkI+oB,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qEA4C7oB;KAClE;IACD;QACE,IAAI,EAAE,MAAM;QACZ,OAAO,EAAE,EAAE;QACX,WAAW,EAAE,+CAA+C;QAC5D,MAAM,EAAE;;;;;;;;;;;;;;;;;;;qBAmBS,aAAa,CAAC,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAwCnC,wBAAwB,EAAE;KACzB;IACD;QACE,IAAI,EAAE,cAAc;QACpB,OAAO,EAAE,EAAE;QACX,WAAW,EAAE,4BAA4B;QACzC,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mLA0DuK;KAChL;IACD;QACE,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,EAAE;QACX,WAAW,EAAE,yBAAyB;QACtC,MAAM,EAAE;;;;;;;;;;;;;;;iFAeqE;KAC9E;IACD;QACE,IAAI,EAAE,cAAc;QACpB,OAAO,EAAE,EAAE;QACX,WAAW,EAAE,yBAAyB;QACtC,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4CAqCgC,aAAa,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gLAwDkH;KAC7K;CACF,CAAC;AAEF,gDAAgD;AAChD,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC3C,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,IAAI,IAAI,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;AACxF,CAAC"}
|
|
@@ -5,29 +5,32 @@ describe("prompt commands", () => {
|
|
|
5
5
|
expect(PROMPT_COMMANDS.find((command) => command.name === "goal")).toBeUndefined();
|
|
6
6
|
expect(PROMPT_COMMANDS.find((command) => command.aliases.includes("g"))).toBeUndefined();
|
|
7
7
|
});
|
|
8
|
-
it("hands
|
|
9
|
-
const setup = PROMPT_COMMANDS.find((command) => command.name === "setup");
|
|
8
|
+
it("hands bullet-proof fixes off to the tasks tool, not a Goal", () => {
|
|
10
9
|
const bulletProof = PROMPT_COMMANDS.find((command) => command.name === "bullet-proof");
|
|
11
|
-
expect(setup?.prompt).toContain("`tasks` tool");
|
|
12
|
-
expect(setup?.prompt).toContain("Press Ctrl+T to open the task list");
|
|
13
|
-
expect(setup?.prompt).not.toContain("Create a Goal");
|
|
14
|
-
expect(setup?.prompt).not.toContain("Press CTRL + G");
|
|
15
10
|
expect(bulletProof?.prompt).toContain("`tasks` tool");
|
|
16
11
|
expect(bulletProof?.prompt).toContain("Press Ctrl+T to open the task list");
|
|
17
12
|
expect(bulletProof?.prompt).not.toContain("Create a Goal");
|
|
18
13
|
expect(bulletProof?.prompt).not.toContain("Press CTRL + G");
|
|
19
14
|
});
|
|
15
|
+
it("frames bullet-proof as an authorized defensive review with no exploit output", () => {
|
|
16
|
+
const bulletProof = PROMPT_COMMANDS.find((command) => command.name === "bullet-proof");
|
|
17
|
+
expect(bulletProof?.prompt).toContain("authorized defensive security review");
|
|
18
|
+
expect(bulletProof?.prompt).toContain("Never produce working exploit code");
|
|
19
|
+
expect(bulletProof?.prompt).toContain("data-flow level");
|
|
20
|
+
// Subagents never see the command prompt — the handoff must say so.
|
|
21
|
+
expect(bulletProof?.prompt).toContain("Subagents cannot see this prompt.");
|
|
22
|
+
// Skeptic verification is batched to keep fan-out cost bounded.
|
|
23
|
+
expect(bulletProof?.prompt).toContain("batching 3–5 surviving findings per skeptic");
|
|
24
|
+
expect(bulletProof?.prompt).not.toContain("<specific payload>");
|
|
25
|
+
});
|
|
20
26
|
it("points at the app's Tasks button / New Session instead of CLI keybinds when run under gg-app", async () => {
|
|
21
27
|
const previous = process.env.GG_APP_PORT;
|
|
22
28
|
process.env.GG_APP_PORT = "0";
|
|
23
29
|
vi.resetModules();
|
|
24
30
|
try {
|
|
25
31
|
const { PROMPT_COMMANDS: appPromptCommands } = await import("./prompt-commands.js");
|
|
26
|
-
const setup = appPromptCommands.find((command) => command.name === "setup");
|
|
27
32
|
const bulletProof = appPromptCommands.find((command) => command.name === "bullet-proof");
|
|
28
33
|
const init = appPromptCommands.find((command) => command.name === "init");
|
|
29
|
-
expect(setup?.prompt).toContain('Click the "Tasks" button');
|
|
30
|
-
expect(setup?.prompt).not.toContain("Ctrl+T");
|
|
31
34
|
expect(bulletProof?.prompt).toContain('Click the "Tasks" button');
|
|
32
35
|
expect(bulletProof?.prompt).not.toContain("Ctrl+T");
|
|
33
36
|
expect(init?.prompt).toContain("New Session");
|
|
@@ -51,11 +54,12 @@ describe("prompt commands", () => {
|
|
|
51
54
|
"simplify",
|
|
52
55
|
"batch",
|
|
53
56
|
"research",
|
|
57
|
+
"setup",
|
|
54
58
|
"setup-lint",
|
|
55
59
|
`setup-${"tests"}`,
|
|
56
60
|
"setup-update",
|
|
57
61
|
];
|
|
58
|
-
const removedAliases = ["depcheck", "depsource"];
|
|
62
|
+
const removedAliases = ["depcheck", "depsource", "setup-project"];
|
|
59
63
|
for (const name of removedCommandNames) {
|
|
60
64
|
expect(PROMPT_COMMANDS.find((command) => command.name === name)).toBeUndefined();
|
|
61
65
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompt-commands.test.js","sourceRoot":"","sources":["../../src/core/prompt-commands.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAC7C,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;QACnF,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;IAC3F,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"prompt-commands.test.js","sourceRoot":"","sources":["../../src/core/prompt-commands.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,3 @@
|
|
|
1
|
-
/** Returns true if this cwd has never been audited by /setup before. */
|
|
2
|
-
export declare function isFirstTimeSetup(cwd: string): boolean;
|
|
3
|
-
/** Mark this cwd as audited. Called immediately after the auto-run fires
|
|
4
|
-
* (whether or not the agent actually completes the audit) so we never
|
|
5
|
-
* double-trigger across sessions. */
|
|
6
|
-
export declare function markSetupAudited(cwd: string): void;
|
|
7
1
|
/** Returns the language ids that have already been announced via the
|
|
8
2
|
* "STYLE PACK ACTIVE" badge for this cwd. */
|
|
9
3
|
export declare function getAnnouncedLanguages(cwd: string): string[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup-history.d.ts","sourceRoot":"","sources":["../../src/core/setup-history.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"setup-history.d.ts","sourceRoot":"","sources":["../../src/core/setup-history.ts"],"names":[],"mappings":"AAgDA;8CAC8C;AAC9C,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAG3D;AAED;oCACoC;AACpC,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CASlF"}
|
|
@@ -3,13 +3,11 @@ import path from "node:path";
|
|
|
3
3
|
import os from "node:os";
|
|
4
4
|
const HISTORY_PATH = path.join(os.homedir(), ".gg", "setup-history.json");
|
|
5
5
|
/**
|
|
6
|
-
* Persisted
|
|
7
|
-
* `/setup`. Used to gate the first-time auto-run: we want the audit to fire
|
|
8
|
-
* exactly once per project, not once per session.
|
|
6
|
+
* Persisted per-project UI-notification history (style-pack badge announcements).
|
|
9
7
|
*
|
|
10
8
|
* Stored at `~/.gg/setup-history.json`. Keys are absolute cwd paths. The file
|
|
11
9
|
* is small (one line per project the user has ever opened with ggcoder) and
|
|
12
|
-
* read/written on session start only
|
|
10
|
+
* read/written on session start only — not in any hot path.
|
|
13
11
|
*/
|
|
14
12
|
function readHistory() {
|
|
15
13
|
try {
|
|
@@ -34,20 +32,6 @@ function writeHistory(history) {
|
|
|
34
32
|
next session, which is annoying but not broken. */
|
|
35
33
|
}
|
|
36
34
|
}
|
|
37
|
-
/** Returns true if this cwd has never been audited by /setup before. */
|
|
38
|
-
export function isFirstTimeSetup(cwd) {
|
|
39
|
-
const history = readHistory();
|
|
40
|
-
return history[cwd]?.lastAuditedAt === undefined;
|
|
41
|
-
}
|
|
42
|
-
/** Mark this cwd as audited. Called immediately after the auto-run fires
|
|
43
|
-
* (whether or not the agent actually completes the audit) so we never
|
|
44
|
-
* double-trigger across sessions. */
|
|
45
|
-
export function markSetupAudited(cwd) {
|
|
46
|
-
const history = readHistory();
|
|
47
|
-
const existing = history[cwd] ?? {};
|
|
48
|
-
history[cwd] = { ...existing, lastAuditedAt: new Date().toISOString() };
|
|
49
|
-
writeHistory(history);
|
|
50
|
-
}
|
|
51
35
|
/** Returns the language ids that have already been announced via the
|
|
52
36
|
* "STYLE PACK ACTIVE" badge for this cwd. */
|
|
53
37
|
export function getAnnouncedLanguages(cwd) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup-history.js","sourceRoot":"","sources":["../../src/core/setup-history.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,SAAS,CAAC;AAEzB,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,oBAAoB,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"setup-history.js","sourceRoot":"","sources":["../../src/core/setup-history.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,SAAS,CAAC;AAEzB,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,oBAAoB,CAAC,CAAC;AAc1E;;;;;;GAMG;AACH,SAAS,WAAW;IAClB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QACnD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAY,CAAC;QAC1C,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YACnE,OAAO,MAAsB,CAAC;QAChC,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,kDAAkD;IACpD,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,YAAY,CAAC,OAAqB;IACzC,IAAI,CAAC;QACH,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9D,EAAE,CAAC,aAAa,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IAC5E,CAAC;IAAC,MAAM,CAAC;QACP;6DACqD;IACvD,CAAC;AACH,CAAC;AAED;8CAC8C;AAC9C,MAAM,UAAU,qBAAqB,CAAC,GAAW;IAC/C,MAAM,OAAO,GAAG,WAAW,EAAE,CAAC;IAC9B,OAAO,OAAO,CAAC,GAAG,CAAC,EAAE,kBAAkB,IAAI,EAAE,CAAC;AAChD,CAAC;AAED;oCACoC;AACpC,MAAM,UAAU,sBAAsB,CAAC,GAAW,EAAE,KAAwB;IAC1E,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAC/B,MAAM,OAAO,GAAG,WAAW,EAAE,CAAC;IAC9B,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;IACpC,MAAM,IAAI,GAAG,QAAQ,CAAC,kBAAkB,IAAI,EAAE,CAAC;IAC/C,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACxD,IAAI,MAAM,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM;QAAE,OAAO;IAC1C,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC3D,YAAY,CAAC,OAAO,CAAC,CAAC;AACxB,CAAC"}
|
|
@@ -20,33 +20,16 @@ async function loadModule() {
|
|
|
20
20
|
return await import("./setup-history.js");
|
|
21
21
|
}
|
|
22
22
|
describe("setup-history", () => {
|
|
23
|
-
it("
|
|
24
|
-
const {
|
|
25
|
-
expect(
|
|
26
|
-
});
|
|
27
|
-
it("markSetupAudited persists the cwd entry", async () => {
|
|
28
|
-
const { isFirstTimeSetup, markSetupAudited } = await loadModule();
|
|
29
|
-
const cwd = "/tmp/first-project";
|
|
30
|
-
expect(isFirstTimeSetup(cwd)).toBe(true);
|
|
31
|
-
markSetupAudited(cwd);
|
|
32
|
-
expect(isFirstTimeSetup(cwd)).toBe(false);
|
|
33
|
-
});
|
|
34
|
-
it("treats distinct cwds independently", async () => {
|
|
35
|
-
const { isFirstTimeSetup, markSetupAudited } = await loadModule();
|
|
36
|
-
markSetupAudited("/tmp/project-a");
|
|
37
|
-
expect(isFirstTimeSetup("/tmp/project-a")).toBe(false);
|
|
38
|
-
expect(isFirstTimeSetup("/tmp/project-b")).toBe(true);
|
|
23
|
+
it("getAnnouncedLanguages returns [] when never announced", async () => {
|
|
24
|
+
const { getAnnouncedLanguages } = await loadModule();
|
|
25
|
+
expect(getAnnouncedLanguages("/tmp/fresh")).toEqual([]);
|
|
39
26
|
});
|
|
40
27
|
it("tolerates corrupt history files (treats as empty)", async () => {
|
|
41
28
|
const ggDir = path.join(tmpHome, ".gg");
|
|
42
29
|
fs.mkdirSync(ggDir, { recursive: true });
|
|
43
30
|
fs.writeFileSync(path.join(ggDir, "setup-history.json"), "{ not valid json");
|
|
44
|
-
const { isFirstTimeSetup } = await loadModule();
|
|
45
|
-
expect(isFirstTimeSetup("/tmp/anywhere")).toBe(true);
|
|
46
|
-
});
|
|
47
|
-
it("getAnnouncedLanguages returns [] when never announced", async () => {
|
|
48
31
|
const { getAnnouncedLanguages } = await loadModule();
|
|
49
|
-
expect(getAnnouncedLanguages("/tmp/
|
|
32
|
+
expect(getAnnouncedLanguages("/tmp/anywhere")).toEqual([]);
|
|
50
33
|
});
|
|
51
34
|
it("markLanguagesAnnounced persists and dedupes across calls", async () => {
|
|
52
35
|
const { getAnnouncedLanguages, markLanguagesAnnounced } = await loadModule();
|
|
@@ -56,14 +39,16 @@ describe("setup-history", () => {
|
|
|
56
39
|
markLanguagesAnnounced(cwd, ["typescript", "rust"]);
|
|
57
40
|
expect(getAnnouncedLanguages(cwd).sort()).toEqual(["rust", "typescript"]);
|
|
58
41
|
});
|
|
59
|
-
it("
|
|
60
|
-
const
|
|
42
|
+
it("preserves legacy lastAuditedAt entries without clobbering", async () => {
|
|
43
|
+
const ggDir = path.join(tmpHome, ".gg");
|
|
44
|
+
fs.mkdirSync(ggDir, { recursive: true });
|
|
61
45
|
const cwd = "/tmp/coexist";
|
|
46
|
+
fs.writeFileSync(path.join(ggDir, "setup-history.json"), JSON.stringify({ [cwd]: { lastAuditedAt: "2026-01-01T00:00:00.000Z" } }));
|
|
47
|
+
const { getAnnouncedLanguages, markLanguagesAnnounced } = await loadModule();
|
|
62
48
|
markLanguagesAnnounced(cwd, ["python"]);
|
|
63
|
-
expect(isFirstTimeSetup(cwd)).toBe(true);
|
|
64
|
-
markSetupAudited(cwd);
|
|
65
|
-
expect(isFirstTimeSetup(cwd)).toBe(false);
|
|
66
49
|
expect(getAnnouncedLanguages(cwd)).toEqual(["python"]);
|
|
50
|
+
const raw = JSON.parse(fs.readFileSync(path.join(ggDir, "setup-history.json"), "utf-8"));
|
|
51
|
+
expect(raw[cwd].lastAuditedAt).toBe("2026-01-01T00:00:00.000Z");
|
|
67
52
|
});
|
|
68
53
|
it("markLanguagesAnnounced is a no-op for empty input", async () => {
|
|
69
54
|
const { getAnnouncedLanguages, markLanguagesAnnounced } = await loadModule();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup-history.test.js","sourceRoot":"","sources":["../../src/core/setup-history.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AACzE,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,IAAI,OAAe,CAAC;AAEpB,UAAU,CAAC,GAAG,EAAE;IACd,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,gBAAgB,CAAC,CAAC,CAAC;IACnE,wEAAwE;IACxE,qDAAqD;IACrD,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;IACjD,0EAA0E;IAC1E,wEAAwE;IACxE,EAAE,CAAC,YAAY,EAAE,CAAC;AACpB,CAAC,CAAC,CAAC;AAEH,SAAS,CAAC,GAAG,EAAE;IACb,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACrD,EAAE,CAAC,eAAe,EAAE,CAAC;AACvB,CAAC,CAAC,CAAC;AAEH,KAAK,UAAU,UAAU;IACvB,OAAO,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;AAC5C,CAAC;AAED,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"setup-history.test.js","sourceRoot":"","sources":["../../src/core/setup-history.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slash-commands.d.ts","sourceRoot":"","sources":["../../src/core/slash-commands.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,mBAAmB;IAElC,WAAW,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAChE,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7B,UAAU,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAChC,YAAY,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IACpC,WAAW,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC3C,UAAU,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3D,YAAY,EAAE,MAAM,MAAM,CAAC;IAC3B,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,oDAAoD;IACpD,MAAM,EAAE,CAAC,SAAS,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAChD,gDAAgD;IAChD,YAAY,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;CACrC;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,mBAAmB,KAAK,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC;CACnF;AAID,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,QAAQ,CAAmC;IAEnD,QAAQ,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI;IAOrC,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAS9B,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAI3C,MAAM,IAAI,YAAY,EAAE;IAaxB,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IASrD,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;CASnF;AAID,wBAAgB,qBAAqB,IAAI,YAAY,EAAE,
|
|
1
|
+
{"version":3,"file":"slash-commands.d.ts","sourceRoot":"","sources":["../../src/core/slash-commands.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,mBAAmB;IAElC,WAAW,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAChE,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7B,UAAU,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAChC,YAAY,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IACpC,WAAW,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC3C,UAAU,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3D,YAAY,EAAE,MAAM,MAAM,CAAC;IAC3B,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,oDAAoD;IACpD,MAAM,EAAE,CAAC,SAAS,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAChD,gDAAgD;IAChD,YAAY,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;CACrC;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,mBAAmB,KAAK,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC;CACnF;AAID,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,QAAQ,CAAmC;IAEnD,QAAQ,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI;IAOrC,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAS9B,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAI3C,MAAM,IAAI,YAAY,EAAE;IAaxB,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IASrD,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;CASnF;AAID,wBAAgB,qBAAqB,IAAI,YAAY,EAAE,CAoItD"}
|