@kenkaiiii/ggcoder 5.68.1 → 5.70.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.
Files changed (120) hide show
  1. package/dist/app-sidecar.js +37 -11
  2. package/dist/app-sidecar.js.map +1 -1
  3. package/dist/cli.js +17 -19
  4. package/dist/cli.js.map +1 -1
  5. package/dist/core/acceptance-checks.d.ts +48 -0
  6. package/dist/core/acceptance-checks.js +144 -0
  7. package/dist/core/acceptance-checks.js.map +1 -0
  8. package/dist/core/agent-session.d.ts +26 -0
  9. package/dist/core/agent-session.js +121 -5
  10. package/dist/core/agent-session.js.map +1 -1
  11. package/dist/core/agents.d.ts +6 -5
  12. package/dist/core/agents.js.map +1 -1
  13. package/dist/core/bundled-agents.js +1 -3
  14. package/dist/core/bundled-agents.js.map +1 -1
  15. package/dist/core/cache-diagnostics.d.ts +6 -0
  16. package/dist/core/cache-diagnostics.js +31 -0
  17. package/dist/core/cache-diagnostics.js.map +1 -1
  18. package/dist/core/cache-expiry.d.ts +87 -0
  19. package/dist/core/cache-expiry.js +111 -0
  20. package/dist/core/cache-expiry.js.map +1 -0
  21. package/dist/core/compaction/compactor.js +78 -48
  22. package/dist/core/compaction/compactor.js.map +1 -1
  23. package/dist/core/destructive-git-guard.d.ts +27 -0
  24. package/dist/core/destructive-git-guard.js +94 -54
  25. package/dist/core/destructive-git-guard.js.map +1 -1
  26. package/dist/core/injection-detect.d.ts +38 -0
  27. package/dist/core/injection-detect.js +232 -0
  28. package/dist/core/injection-detect.js.map +1 -0
  29. package/dist/core/mcp/client.d.ts +72 -0
  30. package/dist/core/mcp/client.js +264 -41
  31. package/dist/core/mcp/client.js.map +1 -1
  32. package/dist/core/mcp/store.d.ts +6 -1
  33. package/dist/core/mcp/store.js +12 -1
  34. package/dist/core/mcp/store.js.map +1 -1
  35. package/dist/core/mcp/types.d.ts +18 -0
  36. package/dist/core/model-unavailable.d.ts +14 -0
  37. package/dist/core/model-unavailable.js +23 -0
  38. package/dist/core/model-unavailable.js.map +1 -0
  39. package/dist/core/node-debugger.d.ts +148 -0
  40. package/dist/core/node-debugger.js +642 -0
  41. package/dist/core/node-debugger.js.map +1 -0
  42. package/dist/core/persistent-shell.d.ts +58 -6
  43. package/dist/core/persistent-shell.js +331 -49
  44. package/dist/core/persistent-shell.js.map +1 -1
  45. package/dist/core/process-manager.d.ts +14 -0
  46. package/dist/core/process-manager.js +61 -0
  47. package/dist/core/process-manager.js.map +1 -1
  48. package/dist/core/progress/git-xp.js +8 -14
  49. package/dist/core/progress/git-xp.js.map +1 -1
  50. package/dist/core/subagent-manager.d.ts +20 -5
  51. package/dist/core/subagent-manager.js +22 -8
  52. package/dist/core/subagent-manager.js.map +1 -1
  53. package/dist/core/subagent-receipt.d.ts +54 -0
  54. package/dist/core/subagent-receipt.js +276 -0
  55. package/dist/core/subagent-receipt.js.map +1 -0
  56. package/dist/core/subagent-turn-record.d.ts +2 -0
  57. package/dist/core/subagent-turn-record.js.map +1 -1
  58. package/dist/core/test-impact.d.ts +73 -0
  59. package/dist/core/test-impact.js +467 -0
  60. package/dist/core/test-impact.js.map +1 -0
  61. package/dist/core/thinking-level.d.ts +1 -1
  62. package/dist/core/thinking-level.js +1 -1
  63. package/dist/core/thinking-level.js.map +1 -1
  64. package/dist/core/verification-gate.d.ts +2 -0
  65. package/dist/core/verification-gate.js +4 -0
  66. package/dist/core/verification-gate.js.map +1 -1
  67. package/dist/core/verification-snapshot.js +3 -5
  68. package/dist/core/verification-snapshot.js.map +1 -1
  69. package/dist/core/workspace-guard.d.ts +18 -7
  70. package/dist/core/workspace-guard.js +227 -60
  71. package/dist/core/workspace-guard.js.map +1 -1
  72. package/dist/interactive.js +2 -1
  73. package/dist/interactive.js.map +1 -1
  74. package/dist/modes/subagent-worker-mode.js +34 -6
  75. package/dist/modes/subagent-worker-mode.js.map +1 -1
  76. package/dist/test-support/keep-alive.d.ts +14 -0
  77. package/dist/test-support/keep-alive.js +17 -0
  78. package/dist/test-support/keep-alive.js.map +1 -0
  79. package/dist/tools/bash.d.ts +10 -1
  80. package/dist/tools/bash.js +78 -7
  81. package/dist/tools/bash.js.map +1 -1
  82. package/dist/tools/debug.d.ts +54 -0
  83. package/dist/tools/debug.js +233 -0
  84. package/dist/tools/debug.js.map +1 -0
  85. package/dist/tools/index.d.ts +13 -2
  86. package/dist/tools/index.js +41 -6
  87. package/dist/tools/index.js.map +1 -1
  88. package/dist/tools/prompt-hints.js +2 -0
  89. package/dist/tools/prompt-hints.js.map +1 -1
  90. package/dist/tools/read.js +3 -2
  91. package/dist/tools/read.js.map +1 -1
  92. package/dist/tools/subagent-control.js +44 -8
  93. package/dist/tools/subagent-control.js.map +1 -1
  94. package/dist/tools/subagent-shared.d.ts +29 -8
  95. package/dist/tools/subagent-shared.js +45 -14
  96. package/dist/tools/subagent-shared.js.map +1 -1
  97. package/dist/tools/subagent.d.ts +8 -2
  98. package/dist/tools/subagent.js +28 -10
  99. package/dist/tools/subagent.js.map +1 -1
  100. package/dist/tools/task-output.js +3 -2
  101. package/dist/tools/task-output.js.map +1 -1
  102. package/dist/tools/tool-tiers.d.ts +2 -2
  103. package/dist/tools/tool-tiers.js +3 -2
  104. package/dist/tools/tool-tiers.js.map +1 -1
  105. package/dist/tools/truncate.d.ts +21 -0
  106. package/dist/tools/truncate.js +187 -0
  107. package/dist/tools/truncate.js.map +1 -1
  108. package/dist/tools/ui-adopt.js +2 -0
  109. package/dist/tools/ui-adopt.js.map +1 -1
  110. package/dist/utils/git.d.ts +77 -0
  111. package/dist/utils/git.js +285 -21
  112. package/dist/utils/git.js.map +1 -1
  113. package/dist/utils/github-ci.js +2 -1
  114. package/dist/utils/github-ci.js.map +1 -1
  115. package/dist/utils/github.js +11 -9
  116. package/dist/utils/github.js.map +1 -1
  117. package/dist/utils/process.d.ts +20 -0
  118. package/dist/utils/process.js +98 -0
  119. package/dist/utils/process.js.map +1 -1
  120. package/package.json +4 -4
@@ -42,6 +42,7 @@ import { sessionToMarkdown, defaultExportFilename, } from "./core/session-export
42
42
  import { AuthStorage } from "./core/auth-storage.js";
43
43
  import { advancesPhase, explainPullFailure, isGgufShard, isValidHfRepoId, parseOllamaPullLine, pickGgufQuant, SHARDED_MESSAGE, toHfSearchRow, } from "./hf-pull.js";
44
44
  import { cleanupToolOutputs } from "./tools/overflow.js";
45
+ import { spawnedTasks } from "./tools/subagent-shared.js";
45
46
  import { readCappedBody } from "./utils/http-body.js";
46
47
  import { fetchSubscriptionUsage, SubscriptionUsageError, XIAOMI_CREDITS_KEY, dualAuthProvider, oauthStorageKey, discoverLocalModels, findProbedModel, formatLocalModelId, parseLocalModelId, probeEndpoint, toModelInfo as localModelInfo, } from "@kenkaiiii/gg-core";
47
48
  import { LocalEndpointError, addCustomEndpoint, listAllEndpoints, removeCustomEndpoint, syncEndpointCredentials, } from "./core/local-endpoint-store.js";
@@ -995,6 +996,11 @@ async function main() {
995
996
  const shutdown = installTerminationHandlers({
996
997
  scope: "app-sidecar",
997
998
  teardown: async () => {
999
+ // Before any await: background commands live outside the daemon's process
1000
+ // group, and the app force-kills that group after 3 s. If a slow session
1001
+ // teardown is still pending then, these would never be stopped.
1002
+ for (const c of sessions.values())
1003
+ c.stopBackgroundProcesses();
998
1004
  clearInterval(parentWatch);
999
1005
  // Radio playback is app-wide (one stream across all windows), so it stops
1000
1006
  // at the daemon level, not per session.
@@ -1993,6 +1999,12 @@ async function createSession(deps, opts) {
1993
1999
  session.eventBus.on("subagent_state", (d) => broadcast("subagent_state", d));
1994
2000
  session.eventBus.on("compaction_start", (d) => broadcast("compaction_start", d));
1995
2001
  session.eventBus.on("compaction_end", (d) => broadcast("compaction_end", d));
2002
+ // Cold-prompt-cache notice: push the fresh TTL anchor + context size whenever
2003
+ // a run or compaction settles. Expiry itself is time-based, so the webview
2004
+ // also re-reads `cacheExpiry` from /state when the user returns or types.
2005
+ for (const ev of ["agent_done", "compaction_end", "model_change"]) {
2006
+ session.eventBus.on(ev, () => broadcast("cache_expiry", session.getCacheExpiryStatus()));
2007
+ }
1996
2008
  // Keep the computer awake while this window's agent works: owned runs and
1997
2009
  // autopilot cycles (RunLifecycle state), Ken replies, and background
1998
2010
  // sub-agents that outlive their parent run. Released on settle (completed,
@@ -2930,6 +2942,7 @@ async function createSession(deps, opts) {
2930
2942
  supportedThinkingLevels: getSupportedThinkingLevels(st.provider, st.model),
2931
2943
  supportsVideo: getModel(st.model)?.supportsVideo ?? false,
2932
2944
  autopilot,
2945
+ cacheExpiry: session.getCacheExpiryStatus(),
2933
2946
  ...kenStatePayload(),
2934
2947
  ...footerExtras(),
2935
2948
  });
@@ -3550,18 +3563,25 @@ async function createSession(deps, opts) {
3550
3563
  if (msg.role === "assistant" && typeof msg.content !== "string") {
3551
3564
  const subagentCalls = msg.content.filter((c) => c.type === "tool_call" && (c.name === "subagent" || c.name === "spawn_agent"));
3552
3565
  if (subagentCalls.length > 0) {
3553
- const agents = subagentCalls.map((c) => {
3566
+ const agents = subagentCalls.flatMap((c) => {
3554
3567
  const result = toolResultMap.get(c.id);
3555
- return {
3556
- agentName: c.name === "spawn_agent" && typeof c.args?.task_name === "string"
3557
- ? c.args.task_name
3558
- : typeof c.args?.agent === "string"
3559
- ? c.args.agent
3560
- : undefined,
3561
- // Async workers are intentionally non-resumable; restored rows are historical.
3562
- status: result?.isError ? "error" : "done",
3563
- toolUseCount: 0,
3564
- };
3568
+ // Async workers are intentionally non-resumable; restored rows are historical.
3569
+ const status = result?.isError ? "error" : "done";
3570
+ if (c.name === "spawn_agent") {
3571
+ // One row per child: a batch call starts several.
3572
+ return spawnedTasks(c.args).map((spawn) => ({
3573
+ agentName: spawn.task_name ?? spawn.agent,
3574
+ status,
3575
+ toolUseCount: 0,
3576
+ }));
3577
+ }
3578
+ return [
3579
+ {
3580
+ agentName: typeof c.args?.agent === "string" ? c.args.agent : undefined,
3581
+ status,
3582
+ toolUseCount: 0,
3583
+ },
3584
+ ];
3565
3585
  });
3566
3586
  history.push({
3567
3587
  role: "assistant",
@@ -5223,6 +5243,11 @@ async function createSession(deps, opts) {
5223
5243
  await kenAutoSession?.dispose().catch(() => { });
5224
5244
  await session.dispose().catch(() => { });
5225
5245
  }
5246
+ function stopBackgroundProcesses() {
5247
+ session.stopBackgroundProcesses();
5248
+ kenSession?.stopBackgroundProcesses();
5249
+ kenAutoSession?.stopBackgroundProcesses();
5250
+ }
5226
5251
  return {
5227
5252
  id: opts.id,
5228
5253
  mode,
@@ -5236,6 +5261,7 @@ async function createSession(deps, opts) {
5236
5261
  broadcast,
5237
5262
  handle,
5238
5263
  dispose,
5264
+ stopBackgroundProcesses,
5239
5265
  };
5240
5266
  }
5241
5267
  main().catch(async (err) => {