@kenkaiiii/ggcoder 5.74.3 → 5.75.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (215) hide show
  1. package/README.md +1 -1
  2. package/assets/skills/bulletproof/SKILL.md +1 -1
  3. package/assets/skills/clarify/SKILL.md +1 -1
  4. package/assets/skills/code-review/SKILL.md +1 -1
  5. package/assets/skills/compliance-guard/SKILL.md +1 -1
  6. package/assets/skills/durable/SKILL.md +1 -1
  7. package/assets/skills/evidence-led-ui/SKILL.md +1 -1
  8. package/assets/skills/lean/SKILL.md +1 -1
  9. package/assets/skills/refactoring/SKILL.md +1 -1
  10. package/assets/skills/root-cause/SKILL.md +1 -1
  11. package/assets/skills/shared-language/SKILL.md +1 -1
  12. package/assets/skills/tdd/SKILL.md +1 -1
  13. package/dist/app-sidecar/app-settings.d.ts +65 -0
  14. package/dist/app-sidecar/app-settings.js +147 -0
  15. package/dist/app-sidecar/app-settings.js.map +1 -0
  16. package/dist/app-sidecar/attachments.d.ts +11 -0
  17. package/dist/app-sidecar/attachments.js +47 -0
  18. package/dist/app-sidecar/attachments.js.map +1 -0
  19. package/dist/app-sidecar/auth-routes.d.ts +3 -0
  20. package/dist/app-sidecar/auth-routes.js +290 -0
  21. package/dist/app-sidecar/auth-routes.js.map +1 -0
  22. package/dist/app-sidecar/autopilot-runner.d.ts +61 -0
  23. package/dist/app-sidecar/autopilot-runner.js +367 -0
  24. package/dist/app-sidecar/autopilot-runner.js.map +1 -0
  25. package/dist/app-sidecar/file-search.d.ts +15 -0
  26. package/dist/app-sidecar/file-search.js +103 -0
  27. package/dist/app-sidecar/file-search.js.map +1 -0
  28. package/dist/app-sidecar/hf-pull-manager.d.ts +20 -0
  29. package/dist/app-sidecar/hf-pull-manager.js +224 -0
  30. package/dist/app-sidecar/hf-pull-manager.js.map +1 -0
  31. package/dist/app-sidecar/history-routes.d.ts +3 -0
  32. package/dist/app-sidecar/history-routes.js +375 -0
  33. package/dist/app-sidecar/history-routes.js.map +1 -0
  34. package/dist/app-sidecar/history.d.ts +67 -0
  35. package/dist/app-sidecar/history.js +23 -0
  36. package/dist/app-sidecar/history.js.map +1 -0
  37. package/dist/app-sidecar/http.d.ts +5 -0
  38. package/dist/app-sidecar/http.js +27 -0
  39. package/dist/app-sidecar/http.js.map +1 -0
  40. package/dist/app-sidecar/integration-routes.d.ts +3 -0
  41. package/dist/app-sidecar/integration-routes.js +286 -0
  42. package/dist/app-sidecar/integration-routes.js.map +1 -0
  43. package/dist/app-sidecar/json-mode.d.ts +10 -0
  44. package/dist/app-sidecar/json-mode.js +73 -0
  45. package/dist/app-sidecar/json-mode.js.map +1 -0
  46. package/dist/app-sidecar/keep-awake.d.ts +4 -0
  47. package/dist/app-sidecar/keep-awake.js +5 -0
  48. package/dist/app-sidecar/keep-awake.js.map +1 -0
  49. package/dist/app-sidecar/ken-context.d.ts +20 -0
  50. package/dist/app-sidecar/ken-context.js +55 -0
  51. package/dist/app-sidecar/ken-context.js.map +1 -0
  52. package/dist/app-sidecar/mcp-routes.d.ts +3 -0
  53. package/dist/app-sidecar/mcp-routes.js +185 -0
  54. package/dist/app-sidecar/mcp-routes.js.map +1 -0
  55. package/dist/app-sidecar/mcp-rows.d.ts +31 -0
  56. package/dist/app-sidecar/mcp-rows.js +77 -0
  57. package/dist/app-sidecar/mcp-rows.js.map +1 -0
  58. package/dist/app-sidecar/progress-manager.d.ts +10 -0
  59. package/dist/app-sidecar/progress-manager.js +116 -0
  60. package/dist/app-sidecar/progress-manager.js.map +1 -0
  61. package/dist/app-sidecar/prompt-routes.d.ts +3 -0
  62. package/dist/app-sidecar/prompt-routes.js +354 -0
  63. package/dist/app-sidecar/prompt-routes.js.map +1 -0
  64. package/dist/app-sidecar/repo-polls.d.ts +15 -0
  65. package/dist/app-sidecar/repo-polls.js +25 -0
  66. package/dist/app-sidecar/repo-polls.js.map +1 -0
  67. package/dist/app-sidecar/route-context.d.ts +145 -0
  68. package/dist/app-sidecar/route-context.js +2 -0
  69. package/dist/app-sidecar/route-context.js.map +1 -0
  70. package/dist/app-sidecar/run-control-routes.d.ts +3 -0
  71. package/dist/app-sidecar/run-control-routes.js +430 -0
  72. package/dist/app-sidecar/run-control-routes.js.map +1 -0
  73. package/dist/app-sidecar/session-routes.d.ts +3 -0
  74. package/dist/app-sidecar/session-routes.js +115 -0
  75. package/dist/app-sidecar/session-routes.js.map +1 -0
  76. package/dist/app-sidecar/session-types.d.ts +39 -0
  77. package/dist/app-sidecar/session-types.js +5 -0
  78. package/dist/app-sidecar/session-types.js.map +1 -0
  79. package/dist/app-sidecar/task-routes.d.ts +3 -0
  80. package/dist/app-sidecar/task-routes.js +149 -0
  81. package/dist/app-sidecar/task-routes.js.map +1 -0
  82. package/dist/app-sidecar/usage.d.ts +19 -0
  83. package/dist/app-sidecar/usage.js +153 -0
  84. package/dist/app-sidecar/usage.js.map +1 -0
  85. package/dist/app-sidecar/workspace-routes.d.ts +3 -0
  86. package/dist/app-sidecar/workspace-routes.js +244 -0
  87. package/dist/app-sidecar/workspace-routes.js.map +1 -0
  88. package/dist/app-sidecar.js +467 -3775
  89. package/dist/app-sidecar.js.map +1 -1
  90. package/dist/cli.js +2 -2
  91. package/dist/cli.js.map +1 -1
  92. package/dist/config.js +1 -1
  93. package/dist/core/acceptance-checks.js +3 -9
  94. package/dist/core/acceptance-checks.js.map +1 -1
  95. package/dist/core/agent-session/helpers.d.ts +26 -0
  96. package/dist/core/agent-session/helpers.js +47 -0
  97. package/dist/core/agent-session/helpers.js.map +1 -0
  98. package/dist/core/agent-session/mcp-tools.d.ts +68 -0
  99. package/dist/core/agent-session/mcp-tools.js +195 -0
  100. package/dist/core/agent-session/mcp-tools.js.map +1 -0
  101. package/dist/core/agent-session/run-loop-monitor.d.ts +63 -0
  102. package/dist/core/agent-session/run-loop-monitor.js +164 -0
  103. package/dist/core/agent-session/run-loop-monitor.js.map +1 -0
  104. package/dist/core/agent-session/transcript-markers.d.ts +57 -0
  105. package/dist/core/agent-session/transcript-markers.js +166 -0
  106. package/dist/core/agent-session/transcript-markers.js.map +1 -0
  107. package/dist/core/agent-session/verification-tracker.d.ts +46 -0
  108. package/dist/core/agent-session/verification-tracker.js +246 -0
  109. package/dist/core/agent-session/verification-tracker.js.map +1 -0
  110. package/dist/core/agent-session.d.ts +21 -87
  111. package/dist/core/agent-session.js +141 -712
  112. package/dist/core/agent-session.js.map +1 -1
  113. package/dist/core/auth-providers.js +3 -3
  114. package/dist/core/auth-providers.js.map +1 -1
  115. package/dist/core/bundled-agents.js +6 -6
  116. package/dist/core/bundled-agents.js.map +1 -1
  117. package/dist/core/checklist-git.d.ts +19 -0
  118. package/dist/core/checklist-git.js +54 -0
  119. package/dist/core/checklist-git.js.map +1 -0
  120. package/dist/core/checklist-items.d.ts +10 -1
  121. package/dist/core/checklist-items.js +22 -0
  122. package/dist/core/checklist-items.js.map +1 -1
  123. package/dist/core/checklist-prompt.d.ts +5 -1
  124. package/dist/core/checklist-prompt.js +16 -5
  125. package/dist/core/checklist-prompt.js.map +1 -1
  126. package/dist/core/checklist-snapshot.d.ts +5 -1
  127. package/dist/core/checklist-snapshot.js +19 -2
  128. package/dist/core/checklist-snapshot.js.map +1 -1
  129. package/dist/core/context-limits.js +1 -1
  130. package/dist/core/context-limits.js.map +1 -1
  131. package/dist/core/skills.js +6 -9
  132. package/dist/core/skills.js.map +1 -1
  133. package/dist/core/style-packs/index.js +2 -11
  134. package/dist/core/style-packs/index.js.map +1 -1
  135. package/dist/core/style-packs/packs.d.ts +3 -12
  136. package/dist/core/style-packs/packs.js +132 -173
  137. package/dist/core/style-packs/packs.js.map +1 -1
  138. package/dist/system-prompt.js +55 -78
  139. package/dist/system-prompt.js.map +1 -1
  140. package/dist/tools/ask-user.js +13 -74
  141. package/dist/tools/ask-user.js.map +1 -1
  142. package/dist/tools/bash.js +13 -78
  143. package/dist/tools/bash.js.map +1 -1
  144. package/dist/tools/checklist.d.ts +2 -10
  145. package/dist/tools/checklist.js +7 -39
  146. package/dist/tools/checklist.js.map +1 -1
  147. package/dist/tools/code-nav.js +7 -29
  148. package/dist/tools/code-nav.js.map +1 -1
  149. package/dist/tools/edit.d.ts +3 -9
  150. package/dist/tools/edit.js +92 -65
  151. package/dist/tools/edit.js.map +1 -1
  152. package/dist/tools/enter-plan.js +2 -7
  153. package/dist/tools/enter-plan.js.map +1 -1
  154. package/dist/tools/exit-plan.js +2 -3
  155. package/dist/tools/exit-plan.js.map +1 -1
  156. package/dist/tools/find.js +3 -4
  157. package/dist/tools/find.js.map +1 -1
  158. package/dist/tools/grep.js +6 -18
  159. package/dist/tools/grep.js.map +1 -1
  160. package/dist/tools/ls.js +3 -3
  161. package/dist/tools/ls.js.map +1 -1
  162. package/dist/tools/prompt-hints.js +34 -47
  163. package/dist/tools/prompt-hints.js.map +1 -1
  164. package/dist/tools/read.js +8 -20
  165. package/dist/tools/read.js.map +1 -1
  166. package/dist/tools/search-code.js +4 -12
  167. package/dist/tools/search-code.js.map +1 -1
  168. package/dist/tools/skill.js +13 -7
  169. package/dist/tools/skill.js.map +1 -1
  170. package/dist/tools/subagent-control.js +7 -22
  171. package/dist/tools/subagent-control.js.map +1 -1
  172. package/dist/tools/subagent.js +4 -7
  173. package/dist/tools/subagent.js.map +1 -1
  174. package/dist/tools/task-output.js +4 -15
  175. package/dist/tools/task-output.js.map +1 -1
  176. package/dist/tools/task-send.js +5 -17
  177. package/dist/tools/task-send.js.map +1 -1
  178. package/dist/tools/task-stop.js +2 -2
  179. package/dist/tools/task-stop.js.map +1 -1
  180. package/dist/tools/tool-search.js +2 -7
  181. package/dist/tools/tool-search.js.map +1 -1
  182. package/dist/tools/tool-tiers.d.ts +17 -4
  183. package/dist/tools/tool-tiers.js +38 -15
  184. package/dist/tools/tool-tiers.js.map +1 -1
  185. package/dist/tools/web-fetch.js +7 -33
  186. package/dist/tools/web-fetch.js.map +1 -1
  187. package/dist/tools/write.js +3 -4
  188. package/dist/tools/write.js.map +1 -1
  189. package/dist/ui/components/Footer.js +1 -2
  190. package/dist/ui/components/Footer.js.map +1 -1
  191. package/dist/utils/shared-poll.d.ts +37 -0
  192. package/dist/utils/shared-poll.js +104 -0
  193. package/dist/utils/shared-poll.js.map +1 -0
  194. package/package.json +7 -4
  195. package/dist/core/api-benchmark.d.ts +0 -63
  196. package/dist/core/api-benchmark.js +0 -381
  197. package/dist/core/api-benchmark.js.map +0 -1
  198. package/dist/core/bash-spawn-benchmark.d.ts +0 -1
  199. package/dist/core/bash-spawn-benchmark.js +0 -139
  200. package/dist/core/bash-spawn-benchmark.js.map +0 -1
  201. package/dist/core/cache-warm-benchmark.d.ts +0 -21
  202. package/dist/core/cache-warm-benchmark.js +0 -170
  203. package/dist/core/cache-warm-benchmark.js.map +0 -1
  204. package/dist/core/fast-apply-benchmark.d.ts +0 -25
  205. package/dist/core/fast-apply-benchmark.js +0 -284
  206. package/dist/core/fast-apply-benchmark.js.map +0 -1
  207. package/dist/core/hashline-edit-benchmark.d.ts +0 -88
  208. package/dist/core/hashline-edit-benchmark.js +0 -518
  209. package/dist/core/hashline-edit-benchmark.js.map +0 -1
  210. package/dist/core/semantic-search-benchmark.d.ts +0 -36
  211. package/dist/core/semantic-search-benchmark.js +0 -211
  212. package/dist/core/semantic-search-benchmark.js.map +0 -1
  213. package/dist/core/speed-benchmark.d.ts +0 -132
  214. package/dist/core/speed-benchmark.js +0 -410
  215. package/dist/core/speed-benchmark.js.map +0 -1
package/README.md CHANGED
@@ -69,7 +69,7 @@ Switch mid-conversation with `/model`. Not locked to anyone.
69
69
 
70
70
  | Provider | Models | Auth |
71
71
  | ----------------- | ------------------------------------------------------------------ | ---------------- |
72
- | **Anthropic** | Claude Fable 5.1, Opus 5.5, Sonnet 5.5, Haiku 4.5 | OAuth |
72
+ | **Anthropic** | Claude Fable 5.1, Opus 5.5, Sonnet 5.5, Haiku 5.5 | OAuth |
73
73
  | **OpenAI** | GPT-6 Astra, GPT-6.1 Sol, GPT-6 Luna | OAuth |
74
74
  | **Moonshot** | Kimi K3, K2.8 Preview (Kimi sign-in), K2.7 Code | OAuth or API key |
75
75
  | **Z.AI (GLM)** | GLM-5.3, GLM-5.3-Flash (image) | API key |
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: bulletproof
3
- description: Use when writing or reviewing code an attacker can reach — auth, sessions, tokens, crypto; untrusted input (requests, files, archives, repo content, model/tool output); secrets; per-user or multi-tenant data access (incl. Supabase/Firebase RLS); dependencies, install scripts, CI/CD, publishing, signing, updates; shelling out, deserialization, dynamic loading; LLM/agent/MCP tools; and pre-ship "can this be hacked" reviews, hardening, or suspected compromise. Fires mid-build on adding a login, upload, webhook, dependency, or tool. Do NOT use for local CLIs/libraries/scripts with no auth, network, secrets or multi-user data, styling/copy/docs, or legal/privacy questions (compliance-guard).
3
+ description: "Use for attacker-reachable code: auth, tokens, crypto, untrusted input, secrets, tenant data, CI, agent tools. Do NOT use for local scripts without auth or network."
4
4
  license: Apache-2.0. Content is defensive engineering guidance, not a security certification or a penetration test. See references/provenance.md.
5
5
  compatibility: Works offline from the bundled references, which are a snapshot dated 3 October 2026. Version numbers, CVEs, and incident details decay fast; re-verify date-sensitive claims with web access before stating them as current. Never certifies that software is secure.
6
6
  ---
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: clarify
3
- description: Use when requirements or a design are genuinely unsettled — the user asks to interrogate, sharpen, or stress-test a plan or spec before building, a new app or feature request leaves costly-to-reverse product decisions open, or mid-build discovery hits a decision that materially changes the result (scope, data model, UX, tradeoff). Settled terms and hard-to-reverse calls hand off to shared-language. Do NOT use for routine changes, clear bug reports (root-cause), reviewing finished work (code-review), or work whose requirements are already settled — bias to action there.
3
+ description: Use when requirements are genuinely unsettled. Do NOT use for routine work.
4
4
  ---
5
5
 
6
6
  # Clarify
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: code-review
3
- description: Use when the user asks to review written work — a diff, PR, branch, commit range, or agent-generated change — or says "review before merge", "is this really done?", "check what the agent did". Checks spec compliance and build quality separately, verifies PR/"done" claims against the diff, and reports file:line findings by severity. Do NOT use while still mid-build (finish and run checks instead), for a plain diff summary, or for security review (bulletproof), performance (lean), migrations/data loss (durable), or UI review (evidence-led-ui).
3
+ description: Use when asked to review a diff, PR or finished work. Do NOT use mid-build.
4
4
  ---
5
5
 
6
6
  # Code Review
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: compliance-guard
3
- description: Use when shipping something real users reach and the work carries legal exposure — pre-launch or "is this safe to ship" reviews; mid-build features adding personal data, pixels/cookies, payments or auto-renewal, uploads/UGC, email/SMS/push, AI chatbots, minors, biometrics, scraping; drafting privacy policies, terms, disclosures. Also when a feature may need a licence or be illegal: health, finance, money movement, crypto, gambling, adult content, background checks, automated hiring/lending/housing decisions. Do NOT use for local-only scripts, prototypes with no real users or data, or changes touching no data, money, users or public surface; security hardening is bulletproof's lane.
3
+ description: Use when shipping to real users risks legal exposure (personal data, payments, minors). Do NOT use for local work.
4
4
  license: Apache-2.0. Content is engineering guidance, not legal advice. See references/provenance.md.
5
5
  compatibility: Static review works offline from the bundled references. Legal status changes constantly; date-sensitive claims must be re-verified with web access before being stated as current. Never certifies compliance.
6
6
  ---
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: durable
3
- description: Use when user data must not be lost or corrupted — creating the first table/schema, writing or running migrations, backfills/imports, any destructive op (delete, drop, truncate, reset, overwrite), before the agent itself runs a command against a database that may hold real data, setting up backups/recovery, or moving data between systems; plus "is my data safe / back up my app" checks. Any store — SQL, document, serverless, files, queues. Do NOT use for query speed or pool sizing (that is lean), access control over data (that is bulletproof), or privacy/legal deletion regimes (that is compliance-guard).
3
+ description: "Use when data could be lost: migrations, destructive ops, real databases. Do NOT use for query speed."
4
4
  license: Data-durability engineering guidance, not a DBA certification. Sources and snapshot date are recorded at the foot of each reference file.
5
5
  compatibility: Snapshot dated 3 October 2026. Version behaviours, provider retention defaults and tool flags decay — re-verify with web access before asserting them as current.
6
6
  ---
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: evidence-led-ui
3
- description: Use when building or changing web/mobile UI: net-new screens or pages, redesigns, design systems, visual polish, UI review, and mid-build edits touching colour, type, spacing, icons, focus/hover/selected states, borders, dropdown icons, motion, or UI copy layout. Also use when output looks generic or AI-made. Small styling fixes take the small-edit path. Do NOT use for behavior-only wiring with no visual state, copy-only text changes, database/API schemas, CLI output, or standalone image generation; speed/bundle work is lean, legal/privacy review of public pages is compliance-guard.
3
+ description: Use when building or reviewing UI visuals. Do NOT use for behaviour-only changes.
4
4
  license: See LICENSES.md
5
5
  compatibility: Full review requires filesystem inspection and rendered screenshots (deferred `screenshot` tool); web research and device tooling are optional and unavailable checks must be reported as unverified.
6
6
  ---
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: lean
3
- description: Use when speed or resource use matters — while writing features that load, render lists, fetch, poll, spawn processes or cache (inline gate); on "slow / laggy / eating RAM / fans spinning", leaks, zombie or orphan processes, bundle bloat, dead code, Core Web Vitals; for a performance pass or pre-ship "will this run smoothly" check. Any stack — web, backend/API/CLI, desktop (Electron, Tauri), mobile, native, game, ML. Do NOT use for correctness bugs where speed is not the complaint, copy/docs-only changes, design or visual polish (evidence-led-ui), data-loss or migration safety (durable), or when the user explicitly deprioritizes performance.
3
+ description: Use when speed or resource use matters. Do NOT use for correctness bugs.
4
4
  license: Performance engineering guidance, not a benchmark certification. Sources and snapshot date are recorded at the foot of each reference file.
5
5
  compatibility: Snapshot dated 3 October 2026. Thresholds, tool names, and defaults decay — re-verify with web access before asserting them as current. Claims sourced to that date carry a SNAPSHOT marker.
6
6
  ---
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: refactoring
3
- description: Use for behavior-preserving restructuring: extract, move, split, deduplicate, plan a refactor, or migrate an implementation behind an unchanged contract. Baseline tests, small steps, revert-on-red. Do NOT use for requested behavior or API-contract changes (including new return/error semantics), even when called a "refactor"; use the normal implementation workflow with regression tests and update affected callers together. Also exclude bug fixes (root-cause when stubborn), performance work (lean), data migrations (durable), styling/copy, TDD's refactor step (tdd), and rewrites.
3
+ description: Use for behaviour-preserving restructuring behind an unchanged contract. Do NOT use for renames, bug fixes or behaviour changes.
4
4
  license: Behavior-preservation methodology synthesized from public sources (Fowler's Refactoring catalog, Tidy First?, and community agent skills by bienhoang, wondelai, mattpocock, jeffallan, vasilyu1983), audited 2026-09-12.
5
5
  ---
6
6
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: root-cause
3
- description: Use when a bug resists the obvious fix, behaviour makes no sense, a symptom keeps coming back, a test is flaky, something "worked last week", or the user asks why something happens and the answer is not on the surface — including mid-build when a second fix attempt fails. Do NOT use for bugs with a clear repro and an obvious cause (reproduce, fix, re-run directly), security incident triage (bulletproof), or reviewing a diff (code-review).
3
+ description: Use when a bug resists the obvious fix or is flaky. Do NOT use when the cause is obvious.
4
4
  ---
5
5
 
6
6
  # Root-Cause
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: shared-language
3
- description: Use when a project's domain vocabulary is fuzzy or drifting (two names for one thing, one name for two), naming decisions keep recurring, or a hard-to-reverse architectural decision needs recording so it is not re-litigated or re-suggested — including mid-build when a term settles or a change contradicts an ADR. Do NOT use for throwaway scripts, projects too small to have recurring vocabulary, interviewing for requirements (clarify), or renames with no vocabulary decision (refactoring).
3
+ description: Use when domain terms drift or a decision needs an ADR. Do NOT use for renames.
4
4
  ---
5
5
 
6
6
  # Shared Language
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: tdd
3
- description: Use when the user asks for test-driven development, red-green-refactor, "write the test first", or wants a feature or bug fix built test-first — including mid-build when they ask to switch to test-first. Do NOT use when tests are a verification step after the build, the project has no suite and the user has not asked for one, the change is throwaway probe code, or the goal is restructuring without behaviour change (refactoring) or finding an unknown cause (root-cause).
3
+ description: Use when asked for test-first development. Do NOT use for post-build tests.
4
4
  ---
5
5
 
6
6
  # TDD
@@ -0,0 +1,65 @@
1
+ import type { Provider, ThinkingLevel } from "@kenkaiiii/gg-ai";
2
+ import type { KenModelPref } from "../core/ken-model.js";
3
+ export declare const ALL_PROVIDERS: Provider[];
4
+ /** Per-project model + thinking preferences. Persisted so each window (one
5
+ * project cwd) restores its OWN model across app restarts — instead of every
6
+ * window reading the same single global slot that the last writer clobbered. */
7
+ export interface ProjectModelPrefs {
8
+ provider: Provider;
9
+ model: string;
10
+ thinkingEnabled?: boolean;
11
+ thinkingLevel?: ThinkingLevel;
12
+ }
13
+ export interface AppSettings {
14
+ /** Folder new projects are created inside. Defaults to ~/gg-projects. */
15
+ projectsRoot: string;
16
+ /** Model + thinking prefs keyed by normalized project cwd. A window restores
17
+ * its own entry on boot; absent → global settings.json → provider default. */
18
+ projectModels?: Record<string, ProjectModelPrefs>;
19
+ /** Autopilot (auto-review) on/off keyed by normalized project cwd. Per-window
20
+ * (one window = one cwd); absent/false → off. Restored on boot. */
21
+ autopilot?: Record<string, boolean>;
22
+ /** Ken's model override keyed by normalized project cwd. Absent → Ken follows
23
+ * GG Coder's model (the historical behavior). Set → Ken (chat + autopilot)
24
+ * uses this model regardless of GG Coder's. */
25
+ kenModels?: Record<string, KenModelPref>;
26
+ /** Extra folders scanned for projects alongside `projectsRoot`. */
27
+ projectRoots?: string[];
28
+ /** Project paths dismissed from the picker, as normalized cwds. */
29
+ hiddenProjects?: string[];
30
+ }
31
+ export declare function stringArray(value: unknown): string[] | undefined;
32
+ export declare function appSettingsFile(): string;
33
+ export declare function defaultProjectsRoot(): string;
34
+ /** Normalize a project cwd to a stable settings key so trailing slashes /
35
+ * relative segments collapse — the same project always maps to one entry. */
36
+ export declare function projectModelKey(cwd: string): string;
37
+ export declare function loadAppSettings(): Promise<AppSettings>;
38
+ export declare function saveAppSettings(settings: AppSettings): Promise<void>;
39
+ /** Read this project's persisted model/thinking prefs, if any. */
40
+ export declare function loadProjectModelPrefs(cwd: string): Promise<ProjectModelPrefs | undefined>;
41
+ /** Persist this project's model/thinking prefs via read-modify-write so the rest
42
+ * of the settings file (projectsRoot, other projects' entries) is preserved. */
43
+ export declare function saveProjectModelPrefs(cwd: string, prefs: ProjectModelPrefs): Promise<void>;
44
+ /** Read this project's persisted Ken model override, if any. */
45
+ export declare function loadKenModelPref(cwd: string): Promise<KenModelPref | undefined>;
46
+ /** Persist (or with null, clear) this project's Ken model override via
47
+ * read-modify-write so the rest of the settings file is preserved. */
48
+ export declare function saveKenModelPref(cwd: string, pref: KenModelPref | null): Promise<void>;
49
+ /** Read this project's persisted autopilot flag (default off). */
50
+ export declare function loadAutopilot(cwd: string): Promise<boolean>;
51
+ /** Persist this project's autopilot flag via read-modify-write so the rest of
52
+ * the settings file (projectsRoot, model map, other projects) is preserved. */
53
+ export declare function saveAutopilot(cwd: string, enabled: boolean): Promise<void>;
54
+ /**
55
+ * Persist the active model selection to ~/.gg/settings.json so it survives app
56
+ * restarts. Mirrors the CLI's handleModelSelect persistence (App.tsx).
57
+ */
58
+ export declare function persistModelSelection(settingsFile: string, provider: Provider, model: string): Promise<void>;
59
+ /**
60
+ * Persist the thinking level to ~/.gg/settings.json so it survives app restarts.
61
+ * Mirrors the CLI's handleToggleThinking persistence (App.tsx).
62
+ */
63
+ export declare function persistThinkingLevel(settingsFile: string, level: ThinkingLevel | undefined): Promise<void>;
64
+ /** Validate a project folder name: lowercase letters, digits, dashes only. */
65
+ export declare function isValidProjectName(name: string): boolean;
@@ -0,0 +1,147 @@
1
+ import fs from "node:fs/promises";
2
+ import os from "node:os";
3
+ import path from "node:path";
4
+ import { SettingsManager } from "../core/settings-manager.js";
5
+ import { log } from "../core/logger.js";
6
+ export const ALL_PROVIDERS = [
7
+ // US
8
+ "anthropic",
9
+ "openai",
10
+ "gemini",
11
+ "xai",
12
+ // China
13
+ "moonshot",
14
+ "glm",
15
+ "minimax",
16
+ "xiaomi",
17
+ "deepseek",
18
+ // Open-community gateway, before the provider-agnostic one
19
+ "huggingface",
20
+ // Japan, then provider-agnostic gateway last
21
+ "sakana",
22
+ "openrouter",
23
+ ];
24
+ export function stringArray(value) {
25
+ if (!Array.isArray(value))
26
+ return undefined;
27
+ const out = value.filter((v) => typeof v === "string" && v.trim().length > 0);
28
+ return out.length > 0 ? out : undefined;
29
+ }
30
+ export function appSettingsFile() {
31
+ return path.join(os.homedir(), ".gg", "gg-app.json");
32
+ }
33
+ export function defaultProjectsRoot() {
34
+ return path.join(os.homedir(), "gg-projects");
35
+ }
36
+ /** Normalize a project cwd to a stable settings key so trailing slashes /
37
+ * relative segments collapse — the same project always maps to one entry. */
38
+ export function projectModelKey(cwd) {
39
+ return path.resolve(cwd);
40
+ }
41
+ export async function loadAppSettings() {
42
+ try {
43
+ const raw = JSON.parse(await fs.readFile(appSettingsFile(), "utf-8"));
44
+ return {
45
+ projectsRoot: typeof raw.projectsRoot === "string" && raw.projectsRoot.trim()
46
+ ? raw.projectsRoot
47
+ : defaultProjectsRoot(),
48
+ // Preserve the per-project map verbatim (validated + written by the
49
+ // model/thinking handlers below).
50
+ projectModels: raw.projectModels && typeof raw.projectModels === "object" ? raw.projectModels : undefined,
51
+ autopilot: raw.autopilot && typeof raw.autopilot === "object" ? raw.autopilot : undefined,
52
+ kenModels: raw.kenModels && typeof raw.kenModels === "object" ? raw.kenModels : undefined,
53
+ projectRoots: stringArray(raw.projectRoots),
54
+ hiddenProjects: stringArray(raw.hiddenProjects),
55
+ };
56
+ }
57
+ catch {
58
+ return { projectsRoot: defaultProjectsRoot() };
59
+ }
60
+ }
61
+ export async function saveAppSettings(settings) {
62
+ await fs.mkdir(path.dirname(appSettingsFile()), { recursive: true });
63
+ await fs.writeFile(appSettingsFile(), JSON.stringify(settings, null, 2), "utf-8");
64
+ }
65
+ /** Read this project's persisted model/thinking prefs, if any. */
66
+ export async function loadProjectModelPrefs(cwd) {
67
+ const s = await loadAppSettings();
68
+ return s.projectModels?.[projectModelKey(cwd)];
69
+ }
70
+ /** Persist this project's model/thinking prefs via read-modify-write so the rest
71
+ * of the settings file (projectsRoot, other projects' entries) is preserved. */
72
+ export async function saveProjectModelPrefs(cwd, prefs) {
73
+ const s = await loadAppSettings();
74
+ const key = projectModelKey(cwd);
75
+ s.projectModels = { ...(s.projectModels ?? {}), [key]: prefs };
76
+ await saveAppSettings(s);
77
+ }
78
+ /** Read this project's persisted Ken model override, if any. */
79
+ export async function loadKenModelPref(cwd) {
80
+ const s = await loadAppSettings();
81
+ return s.kenModels?.[projectModelKey(cwd)];
82
+ }
83
+ /** Persist (or with null, clear) this project's Ken model override via
84
+ * read-modify-write so the rest of the settings file is preserved. */
85
+ export async function saveKenModelPref(cwd, pref) {
86
+ const s = await loadAppSettings();
87
+ const key = projectModelKey(cwd);
88
+ const next = { ...(s.kenModels ?? {}) };
89
+ if (pref)
90
+ next[key] = pref;
91
+ else
92
+ delete next[key];
93
+ s.kenModels = next;
94
+ await saveAppSettings(s);
95
+ }
96
+ /** Read this project's persisted autopilot flag (default off). */
97
+ export async function loadAutopilot(cwd) {
98
+ const s = await loadAppSettings();
99
+ return s.autopilot?.[projectModelKey(cwd)] ?? false;
100
+ }
101
+ /** Persist this project's autopilot flag via read-modify-write so the rest of
102
+ * the settings file (projectsRoot, model map, other projects) is preserved. */
103
+ export async function saveAutopilot(cwd, enabled) {
104
+ const s = await loadAppSettings();
105
+ const key = projectModelKey(cwd);
106
+ s.autopilot = { ...(s.autopilot ?? {}), [key]: enabled };
107
+ await saveAppSettings(s);
108
+ }
109
+ /**
110
+ * Persist the active model selection to ~/.gg/settings.json so it survives app
111
+ * restarts. Mirrors the CLI's handleModelSelect persistence (App.tsx).
112
+ */
113
+ export async function persistModelSelection(settingsFile, provider, model) {
114
+ try {
115
+ const sm = new SettingsManager(settingsFile);
116
+ await sm.load();
117
+ await sm.set("defaultProvider", provider);
118
+ await sm.set("defaultModel", model);
119
+ }
120
+ catch (err) {
121
+ log("WARN", "app-sidecar", "failed to persist model selection", { err: String(err) });
122
+ }
123
+ }
124
+ /**
125
+ * Persist the thinking level to ~/.gg/settings.json so it survives app restarts.
126
+ * Mirrors the CLI's handleToggleThinking persistence (App.tsx).
127
+ */
128
+ export async function persistThinkingLevel(settingsFile, level) {
129
+ try {
130
+ const sm = new SettingsManager(settingsFile);
131
+ await sm.load();
132
+ await sm.set("thinkingEnabled", !!level);
133
+ if (level)
134
+ await sm.set("thinkingLevel", level);
135
+ }
136
+ catch (err) {
137
+ log("WARN", "app-sidecar", "failed to persist thinking level", { err: String(err) });
138
+ }
139
+ }
140
+ /** Validate a project folder name: lowercase letters, digits, dashes only. */
141
+ export function isValidProjectName(name) {
142
+ return /^[a-z0-9]+(?:-[a-z0-9]+)*$/.test(name);
143
+ }
144
+ // ── History reconstruction types ──────────────────────────
145
+ // Mirrors HistoryEntry in gg-app/src/agent.ts — the wire shape the webview
146
+ // receives from GET /history. Fields beyond role/text carry the transcript
147
+ //# sourceMappingURL=app-settings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-settings.js","sourceRoot":"","sources":["../../src/app-sidecar/app-settings.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ export interface AppAttachment {
2
+ kind: "image" | "video" | "file";
3
+ name: string;
4
+ mediaType: string;
5
+ /** base64 (no data: prefix). */
6
+ data: string;
7
+ }
8
+ export interface PreparedAttachment extends AppAttachment {
9
+ path?: string;
10
+ }
11
+ export declare function prepareAttachments(cwd: string, attachments: AppAttachment[]): Promise<PreparedAttachment[]>;
@@ -0,0 +1,47 @@
1
+ import fs from "node:fs/promises";
2
+ import path from "node:path";
3
+ import { shrinkToFit, validateVisionImage } from "../utils/image.js";
4
+ export async function prepareAttachments(cwd, attachments) {
5
+ const dir = path.join(cwd, ".gg", "uploads");
6
+ await fs.mkdir(dir, { recursive: true }).catch(() => { });
7
+ const out = [];
8
+ for (const a of attachments) {
9
+ // Sanitize the filename and prefix with a short timestamp to avoid clobber.
10
+ const safe = a.name.replace(/[^\w.-]+/g, "_").slice(-80) || "file";
11
+ const fileName = `${Date.now().toString(36)}-${safe}`;
12
+ const filePath = path.join(dir, fileName);
13
+ const buf = Buffer.from(a.data, "base64");
14
+ // Validate and cap image attachments before they become native image content
15
+ // blocks. Anthropic applies a 2000 px per-dimension cap once conversation
16
+ // history contains more than 20 images, so every attachment must be safe for
17
+ // later turns too. Keep the original on disk, but send the resized bytes.
18
+ // Corrupt or unsupported images become plain files so they cannot reject the
19
+ // entire provider request.
20
+ let prepared = { ...a };
21
+ if (a.kind === "image") {
22
+ try {
23
+ const resized = await shrinkToFit(buf, a.mediaType);
24
+ const validatedType = await validateVisionImage(resized.buffer);
25
+ prepared = validatedType
26
+ ? {
27
+ ...a,
28
+ mediaType: validatedType,
29
+ data: resized.buffer.toString("base64"),
30
+ }
31
+ : { ...a, kind: "file" };
32
+ }
33
+ catch {
34
+ prepared = { ...a, kind: "file" };
35
+ }
36
+ }
37
+ try {
38
+ await fs.writeFile(filePath, buf);
39
+ out.push({ ...prepared, path: filePath });
40
+ }
41
+ catch {
42
+ out.push({ ...prepared });
43
+ }
44
+ }
45
+ return out;
46
+ }
47
+ //# sourceMappingURL=attachments.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attachments.js","sourceRoot":"","sources":["../../src/app-sidecar/attachments.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAiBrE,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,GAAW,EACX,WAA4B;IAE5B,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;IAC7C,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IACzD,MAAM,GAAG,GAAyB,EAAE,CAAC;IACrC,KAAK,MAAM,CAAC,IAAI,WAAW,EAAE,CAAC;QAC5B,4EAA4E;QAC5E,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,IAAI,MAAM,CAAC;QACnE,MAAM,QAAQ,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC;QACtD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QAC1C,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAC1C,6EAA6E;QAC7E,0EAA0E;QAC1E,6EAA6E;QAC7E,0EAA0E;QAC1E,6EAA6E;QAC7E,2BAA2B;QAC3B,IAAI,QAAQ,GAAuB,EAAE,GAAG,CAAC,EAAE,CAAC;QAC5C,IAAI,CAAC,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YACvB,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC;gBACpD,MAAM,aAAa,GAAG,MAAM,mBAAmB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;gBAChE,QAAQ,GAAG,aAAa;oBACtB,CAAC,CAAC;wBACE,GAAG,CAAC;wBACJ,SAAS,EAAE,aAAa;wBACxB,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC;qBACxC;oBACH,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;YAC7B,CAAC;YAAC,MAAM,CAAC;gBACP,QAAQ,GAAG,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;YACpC,CAAC;QACH,CAAC;QACD,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;YAClC,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC5C,CAAC;QAAC,MAAM,CAAC;YACP,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,QAAQ,EAAE,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type http from "node:http";
2
+ import type { SessionRouteContext } from "./route-context.js";
3
+ export declare function handleAuthRoutes(ctx: SessionRouteContext, req: http.IncomingMessage, res: http.ServerResponse, url: string, method: string): boolean;