@kkelly-offical/kkcode 0.1.3 → 0.1.6

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 (58) hide show
  1. package/README.md +110 -172
  2. package/package.json +46 -46
  3. package/src/agent/agent.mjs +41 -0
  4. package/src/agent/prompt/frontend-designer.txt +58 -0
  5. package/src/agent/prompt/longagent-blueprint-agent.txt +83 -0
  6. package/src/agent/prompt/longagent-coding-agent.txt +37 -0
  7. package/src/agent/prompt/longagent-debugging-agent.txt +46 -0
  8. package/src/agent/prompt/longagent-preview-agent.txt +63 -0
  9. package/src/config/defaults.mjs +260 -195
  10. package/src/config/schema.mjs +71 -6
  11. package/src/core/constants.mjs +91 -46
  12. package/src/index.mjs +1 -1
  13. package/src/knowledge/frontend-aesthetics.txt +39 -0
  14. package/src/knowledge/loader.mjs +2 -1
  15. package/src/knowledge/tailwind.txt +12 -3
  16. package/src/mcp/client-http.mjs +141 -157
  17. package/src/mcp/client-sse.mjs +288 -286
  18. package/src/mcp/client-stdio.mjs +533 -451
  19. package/src/mcp/constants.mjs +2 -0
  20. package/src/mcp/registry.mjs +479 -394
  21. package/src/mcp/stdio-framing.mjs +133 -127
  22. package/src/mcp/tool-result.mjs +24 -0
  23. package/src/observability/index.mjs +42 -0
  24. package/src/observability/metrics.mjs +137 -0
  25. package/src/observability/tracer.mjs +137 -0
  26. package/src/orchestration/background-manager.mjs +372 -358
  27. package/src/orchestration/background-worker.mjs +305 -245
  28. package/src/orchestration/longagent-manager.mjs +171 -116
  29. package/src/orchestration/stage-scheduler.mjs +728 -489
  30. package/src/permission/exec-policy.mjs +9 -11
  31. package/src/provider/anthropic.mjs +1 -0
  32. package/src/provider/openai.mjs +340 -339
  33. package/src/provider/retry-policy.mjs +68 -68
  34. package/src/provider/router.mjs +241 -228
  35. package/src/provider/sse.mjs +104 -91
  36. package/src/repl.mjs +1 -1
  37. package/src/session/checkpoint.mjs +66 -3
  38. package/src/session/engine.mjs +227 -225
  39. package/src/session/longagent-4stage.mjs +460 -0
  40. package/src/session/longagent-hybrid.mjs +1081 -0
  41. package/src/session/longagent-plan.mjs +365 -329
  42. package/src/session/longagent-project-memory.mjs +53 -0
  43. package/src/session/longagent-scaffold.mjs +291 -100
  44. package/src/session/longagent-task-bus.mjs +54 -0
  45. package/src/session/longagent-utils.mjs +472 -0
  46. package/src/session/longagent.mjs +884 -1462
  47. package/src/session/project-context.mjs +30 -0
  48. package/src/session/store.mjs +510 -503
  49. package/src/session/task-validator.mjs +4 -3
  50. package/src/skill/builtin/design.mjs +76 -0
  51. package/src/skill/builtin/frontend.mjs +8 -0
  52. package/src/skill/registry.mjs +390 -336
  53. package/src/storage/ghost-commit-store.mjs +18 -8
  54. package/src/tool/executor.mjs +11 -0
  55. package/src/tool/git-auto.mjs +0 -19
  56. package/src/tool/registry.mjs +71 -37
  57. package/src/ui/activity-renderer.mjs +664 -410
  58. 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