@kkelly-offical/kkcode 0.1.3 → 0.1.7

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 (66) hide show
  1. package/README.md +110 -172
  2. package/package.json +46 -46
  3. package/src/agent/agent.mjs +220 -170
  4. package/src/agent/prompt/bug-hunter.txt +90 -0
  5. package/src/agent/prompt/frontend-designer.txt +58 -0
  6. package/src/agent/prompt/longagent-blueprint-agent.txt +83 -0
  7. package/src/agent/prompt/longagent-coding-agent.txt +37 -0
  8. package/src/agent/prompt/longagent-debugging-agent.txt +46 -0
  9. package/src/agent/prompt/longagent-preview-agent.txt +63 -0
  10. package/src/config/defaults.mjs +260 -195
  11. package/src/config/schema.mjs +71 -6
  12. package/src/core/constants.mjs +91 -46
  13. package/src/index.mjs +1 -1
  14. package/src/knowledge/frontend-aesthetics.txt +39 -0
  15. package/src/knowledge/loader.mjs +2 -1
  16. package/src/knowledge/tailwind.txt +12 -3
  17. package/src/mcp/client-http.mjs +141 -157
  18. package/src/mcp/client-sse.mjs +288 -286
  19. package/src/mcp/client-stdio.mjs +533 -451
  20. package/src/mcp/constants.mjs +2 -0
  21. package/src/mcp/registry.mjs +479 -394
  22. package/src/mcp/stdio-framing.mjs +133 -127
  23. package/src/mcp/tool-result.mjs +24 -0
  24. package/src/observability/index.mjs +42 -0
  25. package/src/observability/metrics.mjs +137 -0
  26. package/src/observability/tracer.mjs +137 -0
  27. package/src/orchestration/background-manager.mjs +372 -358
  28. package/src/orchestration/background-worker.mjs +305 -245
  29. package/src/orchestration/longagent-manager.mjs +171 -116
  30. package/src/orchestration/stage-scheduler.mjs +728 -489
  31. package/src/permission/exec-policy.mjs +9 -11
  32. package/src/provider/anthropic.mjs +1 -0
  33. package/src/provider/openai.mjs +340 -339
  34. package/src/provider/retry-policy.mjs +68 -68
  35. package/src/provider/router.mjs +241 -228
  36. package/src/provider/sse.mjs +104 -91
  37. package/src/repl.mjs +59 -7
  38. package/src/session/checkpoint.mjs +66 -3
  39. package/src/session/compaction.mjs +298 -276
  40. package/src/session/engine.mjs +232 -225
  41. package/src/session/longagent-4stage.mjs +460 -0
  42. package/src/session/longagent-hybrid.mjs +1097 -0
  43. package/src/session/longagent-plan.mjs +365 -329
  44. package/src/session/longagent-project-memory.mjs +53 -0
  45. package/src/session/longagent-scaffold.mjs +291 -100
  46. package/src/session/longagent-task-bus.mjs +54 -0
  47. package/src/session/longagent-utils.mjs +472 -0
  48. package/src/session/longagent.mjs +900 -1462
  49. package/src/session/loop.mjs +65 -40
  50. package/src/session/project-context.mjs +30 -0
  51. package/src/session/prompt/agent.txt +25 -0
  52. package/src/session/prompt/plan.txt +31 -9
  53. package/src/session/rollback.mjs +196 -0
  54. package/src/session/store.mjs +519 -503
  55. package/src/session/system-prompt.mjs +273 -260
  56. package/src/session/task-validator.mjs +4 -3
  57. package/src/skill/builtin/design.mjs +76 -0
  58. package/src/skill/builtin/frontend.mjs +8 -0
  59. package/src/skill/registry.mjs +390 -336
  60. package/src/storage/ghost-commit-store.mjs +18 -8
  61. package/src/tool/executor.mjs +11 -0
  62. package/src/tool/git-auto.mjs +0 -19
  63. package/src/tool/question-prompt.mjs +93 -86
  64. package/src/tool/registry.mjs +71 -37
  65. package/src/ui/activity-renderer.mjs +664 -410
  66. package/src/util/git.mjs +23 -0
@@ -34,7 +34,11 @@ function createMatcher(pattern) {
34
34
  return (cmd) => pattern.test(cmd)
35
35
  }
36
36
  if (Array.isArray(pattern)) {
37
- // 数组表示命令必须按顺序包含所有元素(用于匹配 git commit)
37
+ // RegExp 数组:任一匹配即命中
38
+ if (pattern[0] instanceof RegExp) {
39
+ return (cmd) => pattern.some(re => re.test(cmd))
40
+ }
41
+ // 字符串数组:按顺序包含所有元素(用于匹配 git commit)
38
42
  return (cmd) => {
39
43
  const parts = cmd.toLowerCase().split(/\s+/)
40
44
  let patternIdx = 0
@@ -295,21 +299,15 @@ export function checkBashAllowed(command, config = {}) {
295
299
  const result = evaluateCommand(command)
296
300
 
297
301
  if (result.isForbidden()) {
298
- // 全自动化模式下,危险操作可能被允许(如果 allow_dangerous_ops 启用)
302
+ // 全自动化模式下,仅 git_safety 类别的危险操作可被允许
299
303
  if (fullAuto && allowDangerous && result.category === "git_safety") {
300
304
  return {
301
305
  allowed: true,
302
- warning: `Dangerous operation allowed in full-auto mode: ${result.reason}`
303
- }
304
- }
305
-
306
- if (fullAuto && allowDangerous) {
307
- return {
308
- allowed: true,
309
- warning: `Operation allowed in full-auto mode with dangerous_ops enabled: ${result.reason}`
306
+ warning: `Dangerous git operation allowed in full-auto mode: ${result.reason}`
310
307
  }
311
308
  }
312
-
309
+
310
+ // 其他 forbidden 类别(fs_safety, network_safety 等)始终禁止
313
311
  return {
314
312
  allowed: false,
315
313
  reason: result.reason
@@ -290,6 +290,7 @@ export async function* requestAnthropicStream(input) {
290
290
  }
291
291
  break
292
292
  } catch (err) {
293
+ clearTimeout(connTimer)
293
294
  if (signal?.aborted) throw err
294
295
  const isNetwork = err?.code === "ETIMEDOUT" || err?.code === "ECONNRESET" || err?.name === "AbortError"
295
296
  if (!isNetwork || attempt >= attempts) throw err