@visorcraft/idlehands 1.1.6 → 1.1.8

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 (122) hide show
  1. package/README.md +32 -0
  2. package/dist/agent/formatting.js +251 -0
  3. package/dist/agent/formatting.js.map +1 -0
  4. package/dist/agent/review-artifact.js +147 -0
  5. package/dist/agent/review-artifact.js.map +1 -0
  6. package/dist/agent/tool-calls.js +226 -0
  7. package/dist/agent/tool-calls.js.map +1 -0
  8. package/dist/agent.js +314 -695
  9. package/dist/agent.js.map +1 -1
  10. package/dist/anton/controller.js +1 -1
  11. package/dist/anton/controller.js.map +1 -1
  12. package/dist/anton/lock.js +0 -3
  13. package/dist/anton/lock.js.map +1 -1
  14. package/dist/anton/parser.js +0 -1
  15. package/dist/anton/parser.js.map +1 -1
  16. package/dist/anton/reporter.js +1 -1
  17. package/dist/anton/reporter.js.map +1 -1
  18. package/dist/bot/commands.js +3 -2
  19. package/dist/bot/commands.js.map +1 -1
  20. package/dist/bot/confirm-telegram.js +2 -1
  21. package/dist/bot/confirm-telegram.js.map +1 -1
  22. package/dist/bot/discord-routing.js +179 -0
  23. package/dist/bot/discord-routing.js.map +1 -0
  24. package/dist/bot/discord-streaming.js +171 -0
  25. package/dist/bot/discord-streaming.js.map +1 -0
  26. package/dist/bot/discord.js +25 -221
  27. package/dist/bot/discord.js.map +1 -1
  28. package/dist/bot/format.js +2 -25
  29. package/dist/bot/format.js.map +1 -1
  30. package/dist/bot/telegram.js +56 -12
  31. package/dist/bot/telegram.js.map +1 -1
  32. package/dist/cli/args.js +4 -1
  33. package/dist/cli/args.js.map +1 -1
  34. package/dist/cli/build-repl-context.js.map +1 -1
  35. package/dist/cli/command-registry.js +2 -1
  36. package/dist/cli/command-registry.js.map +1 -1
  37. package/dist/cli/command-utils.js +27 -0
  38. package/dist/cli/command-utils.js.map +1 -0
  39. package/dist/cli/commands/anton.js +3 -2
  40. package/dist/cli/commands/anton.js.map +1 -1
  41. package/dist/cli/commands/model.js +8 -7
  42. package/dist/cli/commands/model.js.map +1 -1
  43. package/dist/cli/commands/project.js +5 -4
  44. package/dist/cli/commands/project.js.map +1 -1
  45. package/dist/cli/commands/session.js +118 -8
  46. package/dist/cli/commands/session.js.map +1 -1
  47. package/dist/cli/commands/tools.js +4 -3
  48. package/dist/cli/commands/tools.js.map +1 -1
  49. package/dist/cli/input.js +2 -1
  50. package/dist/cli/input.js.map +1 -1
  51. package/dist/cli/repl-dispatch.js +85 -0
  52. package/dist/cli/repl-dispatch.js.map +1 -0
  53. package/dist/cli/runtime-cmds.js +7 -7
  54. package/dist/cli/runtime-cmds.js.map +1 -1
  55. package/dist/cli/service.js +0 -14
  56. package/dist/cli/service.js.map +1 -1
  57. package/dist/cli/setup.js +25 -5
  58. package/dist/cli/setup.js.map +1 -1
  59. package/dist/cli/watch.js +2 -1
  60. package/dist/cli/watch.js.map +1 -1
  61. package/dist/client.js +51 -4
  62. package/dist/client.js.map +1 -1
  63. package/dist/config.js +79 -0
  64. package/dist/config.js.map +1 -1
  65. package/dist/context.js +101 -10
  66. package/dist/context.js.map +1 -1
  67. package/dist/harnesses.js +1 -1
  68. package/dist/harnesses.js.map +1 -1
  69. package/dist/hooks/index.js +5 -0
  70. package/dist/hooks/index.js.map +1 -0
  71. package/dist/hooks/loader.js +58 -0
  72. package/dist/hooks/loader.js.map +1 -0
  73. package/dist/hooks/manager.js +180 -0
  74. package/dist/hooks/manager.js.map +1 -0
  75. package/dist/hooks/plugins/example-console.js +24 -0
  76. package/dist/hooks/plugins/example-console.js.map +1 -0
  77. package/dist/hooks/scaffold.js +53 -0
  78. package/dist/hooks/scaffold.js.map +1 -0
  79. package/dist/hooks/types.js +8 -0
  80. package/dist/hooks/types.js.map +1 -0
  81. package/dist/index.js +16 -64
  82. package/dist/index.js.map +1 -1
  83. package/dist/progress/agent-hooks.js +37 -0
  84. package/dist/progress/agent-hooks.js.map +1 -0
  85. package/dist/progress/ir.js +7 -0
  86. package/dist/progress/ir.js.map +1 -0
  87. package/dist/progress/progress-message-renderer.js +63 -0
  88. package/dist/progress/progress-message-renderer.js.map +1 -0
  89. package/dist/progress/serialize-discord.js +60 -0
  90. package/dist/progress/serialize-discord.js.map +1 -0
  91. package/dist/progress/serialize-telegram.js +55 -0
  92. package/dist/progress/serialize-telegram.js.map +1 -0
  93. package/dist/progress/serialize-tui.js +39 -0
  94. package/dist/progress/serialize-tui.js.map +1 -0
  95. package/dist/progress/tool-summary.js +58 -0
  96. package/dist/progress/tool-summary.js.map +1 -0
  97. package/dist/progress/tool-tail.js +48 -0
  98. package/dist/progress/tool-tail.js.map +1 -0
  99. package/dist/progress/turn-progress.js +215 -0
  100. package/dist/progress/turn-progress.js.map +1 -0
  101. package/dist/replay.js +2 -5
  102. package/dist/replay.js.map +1 -1
  103. package/dist/safety.js +0 -1
  104. package/dist/safety.js.map +1 -1
  105. package/dist/spinner.js +8 -0
  106. package/dist/spinner.js.map +1 -1
  107. package/dist/tools.js +422 -29
  108. package/dist/tools.js.map +1 -1
  109. package/dist/tui/branch-picker.js.map +1 -1
  110. package/dist/tui/command-handler.js.map +1 -1
  111. package/dist/tui/controller.js +417 -33
  112. package/dist/tui/controller.js.map +1 -1
  113. package/dist/tui/keymap.js +15 -0
  114. package/dist/tui/keymap.js.map +1 -1
  115. package/dist/tui/render.js +115 -3
  116. package/dist/tui/render.js.map +1 -1
  117. package/dist/tui/state.js +82 -1
  118. package/dist/tui/state.js.map +1 -1
  119. package/dist/upgrade.js.map +1 -1
  120. package/dist/utils.js +17 -0
  121. package/dist/utils.js.map +1 -1
  122. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE5C,KAAK,UAAU,YAAY,CAAC,CAAS;IACnC,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC5B,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE;YAAE,OAAO,IAAI,CAAC;QAC9B,OAAO,MAAM,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IACtC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,GAAoB;IAC3D,IAAI,GAAG,CAAC,UAAU;QAAE,OAAO,EAAE,CAAC;IAE9B,MAAM,SAAS,GAAG,GAAG,CAAC,kBAAkB,IAAI,IAAI,CAAC;IACjD,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;IAE5D,yEAAyE;IACzE,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,IAAI,GAAG,CAAC,YAAY,IAAI,GAAG,CAAC,YAAY,CAAC,IAAI,EAAE,EAAE,CAAC;QAChD,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC;IAC3C,CAAC;IACD,MAAM,KAAK,GAAG,GAAG,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,CAAC;IAC3E,KAAK,MAAM,CAAC,IAAI,KAAK;QAAE,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAE1C,8BAA8B;IAC9B,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;QAC3B,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACvD,MAAM,GAAG,GAAG,MAAM,YAAY,CAAC,GAAG,CAAC,CAAC;QACpC,IAAI,CAAC,GAAG;YAAE,SAAS;QAEnB,MAAM,KAAK,GAAG,yBAAyB,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,yBAAyB,CAAC;QACpF,MAAM,CAAC,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;QAEhC,IAAI,CAAC,GAAG,SAAS,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CACb,4BAA4B,CAAC,YAAY,GAAG,aAAa,SAAS,IAAI;gBACtE,sCAAsC,CACvC,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC;YACb,qDAAqD;YACrD,MAAM,IAAI,GAAG,8BAA8B,CAAC,+BAA+B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC;YACjG,OAAO,GAAG,IAAI,KAAK,KAAK,EAAE,CAAC;QAC7B,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,EAAE,CAAC;AACZ,CAAC"}
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"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"}
package/dist/harnesses.js CHANGED
@@ -15,7 +15,7 @@ const HARNESS = [
15
15
  thinking: { format: 'xml', openTag: '<think>', closeTag: '</think>', strip: true },
16
16
  toolCalls: { reliableToolCallsArray: false, contentFallbackLikely: true, parallelCalls: true, retryOnMalformed: 3 },
17
17
  quirks: DEFAULT_QUIRKS,
18
- systemPromptSuffix: 'Prefer write_file over edit_file when replacing large sections or rewriting files. edit_file is only for small, surgical changes where you can reproduce the exact old_text.\nWhen answering questions about code, search first (search_files or grep), then read only the relevant files. Never scan an entire directory by reading files one by one.'
18
+ systemPromptSuffix: 'Prefer apply_patch or edit_range for most edits. Use write_file for full rewrites, and use edit_file only for exact old_text replacement when necessary.\nWhen answering questions about code, search first (search_files or grep), then read only the relevant files. Never scan an entire directory by reading files one by one.'
19
19
  },
20
20
  {
21
21
  id: 'qwen3-moe',
@@ -1 +1 @@
1
- {"version":3,"file":"harnesses.js","sourceRoot":"","sources":["../src/harnesses.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"harnesses.js","sourceRoot":"","sources":["../src/harnesses.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AACpD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AA4DvC,oGAAoG;AACpG,MAAM,gBAAgB,GAAoB,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AACnH,MAAM,kBAAkB,GAAqB,EAAE,sBAAsB,EAAE,KAAK,EAAE,qBAAqB,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAC,EAAE,CAAC;AACtJ,MAAM,cAAc,GAAkB,EAAE,mBAAmB,EAAE,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,uBAAuB,EAAE,KAAK,EAAE,mCAAmC,EAAE,KAAK,EAAE,CAAC;AAC1K,MAAM,qBAAqB,GAAkB,EAAE,GAAG,cAAc,EAAE,mCAAmC,EAAE,IAAI,EAAE,CAAC;AAE9G,MAAM,OAAO,GAAc;IACzB;QACE,EAAE,EAAE,aAAa;QACjB,KAAK,EAAE,CAAC,cAAc,CAAC;QACvB,WAAW,EAAE,sCAAsC;QACnD,QAAQ,EAAE,EAAE,WAAW,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE;QACjG,QAAQ,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE;QAClF,SAAS,EAAE,EAAE,sBAAsB,EAAE,KAAK,EAAE,qBAAqB,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAC,EAAE;QACnH,MAAM,EAAE,cAAc;QACtB,kBAAkB,EAAE,oUAAoU;KACzV;IACD;QACE,EAAE,EAAE,WAAW;QACf,KAAK,EAAE,CAAC,QAAQ,CAAC;QACjB,WAAW,EAAE,uCAAuC;QACpD,QAAQ,EAAE,EAAE,WAAW,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE;QAClG,QAAQ,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE;QAClF,SAAS,EAAE,EAAE,sBAAsB,EAAE,IAAI,EAAE,qBAAqB,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAC,EAAE;QAClH,MAAM,EAAE,qBAAqB;KAC9B;IACD;QACE,EAAE,EAAE,MAAM;QACV,KAAK,EAAE,CAAC,OAAO,CAAC;QAChB,WAAW,EAAE,yCAAyC;QACtD,QAAQ,EAAE,EAAE,WAAW,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE;QAClG,QAAQ,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE;QAC1C,SAAS,EAAE,EAAE,sBAAsB,EAAE,IAAI,EAAE,qBAAqB,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAC,EAAE;QAClH,MAAM,EAAE,qBAAqB;KAC9B;IACD;QACE,EAAE,EAAE,UAAU;QACd,KAAK,EAAE,CAAC,WAAW,CAAC;QACpB,WAAW,EAAE,oEAAoE;QACjF,QAAQ,EAAE,EAAE,WAAW,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE;QAClG,QAAQ,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE;QAC1C,SAAS,EAAE,EAAE,sBAAsB,EAAE,KAAK,EAAE,qBAAqB,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC,EAAE;QACpH,MAAM,EAAE,EAAE,GAAG,qBAAqB,EAAE,mBAAmB,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,qBAAqB,EAAE,EAAE,EAAE;KACnH;IACD;QACE,EAAE,EAAE,SAAS;QACb,KAAK,EAAE,CAAC,UAAU,CAAC;QACnB,WAAW,EAAE,kEAAkE;QAC/E,QAAQ,EAAE,EAAE,WAAW,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE;QAClG,QAAQ,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE;QAC1C,SAAS,EAAE,EAAE,sBAAsB,EAAE,IAAI,EAAE,qBAAqB,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAC,EAAE;QACnH,MAAM,EAAE,cAAc;KACvB;IACD;QACE,EAAE,EAAE,SAAS;QACb,KAAK,EAAE,CAAC,UAAU,EAAE,UAAU,CAAC;QAC/B,WAAW,EAAE,mEAAmE;QAChF,QAAQ,EAAE,EAAE,WAAW,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE;QAClG,QAAQ,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE;QAC1C,SAAS,EAAE,EAAE,sBAAsB,EAAE,IAAI,EAAE,qBAAqB,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAC,EAAE;QACnH,MAAM,EAAE,EAAE,GAAG,cAAc,EAAE,qBAAqB,EAAE,EAAE,EAAE;QACxD,kBAAkB,EAAE,0KAA0K;KAC/L;IACD;QACE,EAAE,EAAE,OAAO;QACX,KAAK,EAAE,CAAC,QAAQ,CAAC;QACjB,WAAW,EAAE,gCAAgC;QAC7C,QAAQ,EAAE,EAAE,WAAW,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE;QAClG,QAAQ,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE;QAC1C,SAAS,EAAE,EAAE,sBAAsB,EAAE,KAAK,EAAE,qBAAqB,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC,EAAE;QACpH,MAAM,EAAE,qBAAqB;QAC7B,kBAAkB,EAAE,0KAA0K;KAC/L;IACD;QACE,EAAE,EAAE,SAAS;QACb,KAAK,EAAE,CAAC,IAAI,CAAC;QACb,WAAW,EAAE,gEAAgE;QAC7E,QAAQ,EAAE,EAAE,WAAW,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE;QAClG,QAAQ,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE;QAClF,SAAS,EAAE,EAAE,sBAAsB,EAAE,KAAK,EAAE,qBAAqB,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAC,EAAE;QACnH,MAAM,EAAE,cAAc;QACtB,kBAAkB,EAAE,0KAA0K;KAC/L;CACF,CAAC;AAEF;;;;GAIG;AACH,SAAS,iBAAiB;IACxB,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,EAAE,EAAE,WAAW,CAAC,CAAC;IAC3C,IAAI,KAAe,CAAC;IACpB,IAAI,CAAC;QACH,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;IAC5D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,MAAM,GAAc,EAAE,CAAC;IAC7B,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;YAC3D,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK;gBAAE,SAAS;YAEpC,MAAM,OAAO,GAAY;gBACvB,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;gBAClB,KAAK,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAC7D,CAAC,CAAU,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAC3C;gBACD,WAAW,EAAE,MAAM,CAAC,GAAG,CAAC,WAAW,IAAI,iBAAiB,GAAG,CAAC,EAAE,EAAE,CAAC;gBACjE,cAAc,EAAE,OAAO,GAAG,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS;gBACxF,QAAQ,EAAE;oBACR,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,IAAI,GAAG,CAAC,QAAQ,EAAE,WAAW;oBACjE,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,KAAK,IAAI,GAAG,CAAC,QAAQ,EAAE,KAAK;oBAC/C,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,IAAI,GAAG,CAAC,QAAQ,EAAE,UAAU;oBAC9D,QAAQ,EAAE,GAAG,CAAC,QAAQ,EAAE,QAAQ;iBACjC;gBACD,QAAQ,EAAE,EAAE,GAAG,gBAAgB,EAAE,GAAG,CAAC,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC,EAAE;gBAC1D,SAAS,EAAE,EAAE,GAAG,kBAAkB,EAAE,GAAG,CAAC,GAAG,CAAC,SAAS,IAAI,EAAE,CAAC,EAAE;gBAC9D,MAAM,EAAE,EAAE,GAAG,cAAc,EAAE,GAAG,CAAC,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE;gBACpD,kBAAkB,EAAE,GAAG,CAAC,kBAAkB;aAC3C,CAAC;YACF,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACvB,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,CAAC,IAAI,CAAC,iCAAiC,CAAC,KAAK,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACpG,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,IAAI,gBAAgB,GAAqB,IAAI,CAAC;AAE9C,wFAAwF;AACxF,SAAS,kBAAkB;IACzB,IAAI,gBAAgB;QAAE,OAAO,gBAAgB,CAAC;IAE9C,MAAM,IAAI,GAAG,iBAAiB,EAAE,CAAC;IACjC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;QACjB,gBAAgB,GAAG,OAAO,CAAC;QAC3B,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,2EAA2E;IAC3E,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC7C,MAAM,MAAM,GAAG;QACb,GAAG,IAAI;QACP,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;KAC3C,CAAC;IACF,gBAAgB,GAAG,MAAM,CAAC;IAC1B,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,kDAAkD;AAClD,MAAM,UAAU,kBAAkB;IAChC,gBAAgB,GAAG,IAAI,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,OAAe,EAAE,UAAmB;IAChE,MAAM,SAAS,GAAG,kBAAkB,EAAE,CAAC;IACvC,IAAI,UAAU,EAAE,CAAC;QACf,MAAM,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,UAAU,CAAC,CAAC;QACrD,IAAI,CAAC;YAAE,OAAO,CAAC,CAAC;IAClB,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;QAC1B,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;YACxB,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAAE,OAAO,CAAC,CAAC;YAC3D,IAAI,CAAC,YAAY,MAAM,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC;gBAAE,OAAO,CAAC,CAAC;QACvD,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACzC,CAAC"}
@@ -0,0 +1,5 @@
1
+ export { HookManager } from './manager.js';
2
+ export { loadHookPlugins } from './loader.js';
3
+ export { scaffoldHookPlugin, normalizePluginName } from './scaffold.js';
4
+ export { HOOK_CAPABILITIES, } from './types.js';
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAyB,MAAM,aAAa,CAAC;AACrE,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAiC,MAAM,eAAe,CAAC;AACvG,OAAO,EACL,iBAAiB,GAClB,MAAM,YAAY,CAAC"}
@@ -0,0 +1,58 @@
1
+ import path from 'node:path';
2
+ import { pathToFileURL } from 'node:url';
3
+ function isHookPlugin(value) {
4
+ if (!value || typeof value !== 'object')
5
+ return false;
6
+ if (value.hooks && typeof value.hooks !== 'object')
7
+ return false;
8
+ if (value.setup && typeof value.setup !== 'function')
9
+ return false;
10
+ return Boolean(value.hooks || value.setup);
11
+ }
12
+ async function pluginFromModule(mod) {
13
+ const candidates = [
14
+ mod?.default,
15
+ mod?.plugin,
16
+ typeof mod?.createPlugin === 'function' ? await mod.createPlugin() : null,
17
+ ];
18
+ for (const candidate of candidates) {
19
+ if (isHookPlugin(candidate))
20
+ return candidate;
21
+ }
22
+ return null;
23
+ }
24
+ export async function loadHookPlugins(opts) {
25
+ const strict = opts.strict === true;
26
+ const logger = opts.logger ?? ((message) => {
27
+ if (!process.env.IDLEHANDS_QUIET_WARNINGS) {
28
+ console.warn(message);
29
+ }
30
+ });
31
+ const loaded = [];
32
+ for (const entry of opts.pluginPaths) {
33
+ const trimmed = String(entry ?? '').trim();
34
+ if (!trimmed)
35
+ continue;
36
+ const abs = path.isAbsolute(trimmed) ? trimmed : path.resolve(opts.cwd, trimmed);
37
+ try {
38
+ const mod = await import(pathToFileURL(abs).href);
39
+ const plugin = await pluginFromModule(mod);
40
+ if (!plugin) {
41
+ const msg = `[hooks] plugin ${abs} did not export a valid hook plugin`;
42
+ if (strict)
43
+ throw new Error(msg);
44
+ logger(msg);
45
+ continue;
46
+ }
47
+ loaded.push({ path: abs, plugin });
48
+ }
49
+ catch (error) {
50
+ const msg = `[hooks] failed to load plugin ${abs}: ${error?.message ?? String(error)}`;
51
+ if (strict)
52
+ throw new Error(msg);
53
+ logger(msg);
54
+ }
55
+ }
56
+ return loaded;
57
+ }
58
+ //# sourceMappingURL=loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/hooks/loader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,180 @@
1
+ import { HOOK_CAPABILITIES, } from './types.js';
2
+ const defaultLogger = (message) => {
3
+ if (!process.env.IDLEHANDS_QUIET_WARNINGS) {
4
+ console.warn(message);
5
+ }
6
+ };
7
+ function clampCapabilities(caps) {
8
+ const raw = Array.isArray(caps) && caps.length ? caps : ['observe'];
9
+ const allowed = new Set(HOOK_CAPABILITIES);
10
+ const uniq = new Set();
11
+ for (const cap of raw) {
12
+ if (allowed.has(cap))
13
+ uniq.add(cap);
14
+ }
15
+ if (uniq.size === 0)
16
+ uniq.add('observe');
17
+ return [...uniq];
18
+ }
19
+ function pushLimited(list, value, max = 25) {
20
+ list.push(value);
21
+ if (list.length > max)
22
+ list.splice(0, list.length - max);
23
+ }
24
+ function redactPayload(event, payload, caps) {
25
+ const out = JSON.parse(JSON.stringify(payload));
26
+ if (event === 'ask_start' && !caps.has('read_prompts')) {
27
+ out.instruction = '[redacted: missing read_prompts capability]';
28
+ }
29
+ if (event === 'ask_end' && !caps.has('read_responses')) {
30
+ out.text = '[redacted: missing read_responses capability]';
31
+ }
32
+ if (event === 'tool_call' && !caps.has('read_tool_args')) {
33
+ if (out.call && typeof out.call === 'object') {
34
+ out.call.args = {};
35
+ }
36
+ }
37
+ if (event === 'tool_result' && !caps.has('read_tool_results')) {
38
+ if (out.result && typeof out.result === 'object') {
39
+ out.result.result = '[redacted: missing read_tool_results capability]';
40
+ }
41
+ }
42
+ if (event === 'tool_stream' && !caps.has('read_tool_results')) {
43
+ if (out.stream && typeof out.stream === 'object') {
44
+ out.stream.chunk = '[redacted: missing read_tool_results capability]';
45
+ }
46
+ }
47
+ return out;
48
+ }
49
+ export class HookManager {
50
+ handlers = new Map();
51
+ enabled;
52
+ strict;
53
+ warnMs;
54
+ logger;
55
+ getContext;
56
+ allowedCapabilities;
57
+ eventCounts = new Map();
58
+ recentErrors = [];
59
+ recentSlowHandlers = [];
60
+ plugins = [];
61
+ constructor(opts) {
62
+ this.enabled = opts.enabled !== false;
63
+ this.strict = opts.strict === true;
64
+ this.warnMs = Math.max(0, Math.floor(opts.warnMs ?? 250));
65
+ this.logger = opts.logger ?? defaultLogger;
66
+ this.getContext = opts.context;
67
+ const allowed = clampCapabilities(opts.allowedCapabilities);
68
+ this.allowedCapabilities = new Set(allowed);
69
+ if (!this.allowedCapabilities.has('observe')) {
70
+ this.allowedCapabilities.add('observe');
71
+ }
72
+ }
73
+ isEnabled() {
74
+ return this.enabled;
75
+ }
76
+ getSnapshot() {
77
+ const handlers = [];
78
+ for (const [event, list] of this.handlers) {
79
+ for (const item of list) {
80
+ handlers.push({ source: item.source, event });
81
+ }
82
+ }
83
+ const counts = {};
84
+ for (const [event, count] of this.eventCounts) {
85
+ counts[event] = count;
86
+ }
87
+ return {
88
+ enabled: this.enabled,
89
+ strict: this.strict,
90
+ allowedCapabilities: [...this.allowedCapabilities],
91
+ plugins: [...this.plugins],
92
+ handlers,
93
+ eventCounts: counts,
94
+ recentErrors: [...this.recentErrors],
95
+ recentSlowHandlers: [...this.recentSlowHandlers],
96
+ };
97
+ }
98
+ on(event, handler, source = 'runtime', capabilities) {
99
+ if (!this.enabled)
100
+ return;
101
+ const list = this.handlers.get(event) ?? [];
102
+ list.push({
103
+ source,
104
+ fn: handler,
105
+ capabilities: new Set(clampCapabilities(capabilities)),
106
+ });
107
+ this.handlers.set(event, list);
108
+ }
109
+ async registerPlugin(plugin, source) {
110
+ if (!this.enabled)
111
+ return;
112
+ const requested = clampCapabilities(plugin.capabilities);
113
+ const granted = requested.filter((c) => this.allowedCapabilities.has(c));
114
+ const denied = requested.filter((c) => !this.allowedCapabilities.has(c));
115
+ if (granted.length === 0) {
116
+ granted.push('observe');
117
+ }
118
+ if (denied.length > 0) {
119
+ const msg = `[hooks] plugin ${source} requested denied capabilities: ${denied.join(', ')}`;
120
+ if (this.strict)
121
+ throw new Error(msg);
122
+ this.logger(msg);
123
+ }
124
+ this.plugins.push({
125
+ source,
126
+ name: plugin.name || source,
127
+ requestedCapabilities: requested,
128
+ grantedCapabilities: granted,
129
+ deniedCapabilities: denied,
130
+ });
131
+ if (plugin.hooks && typeof plugin.hooks === 'object') {
132
+ for (const [event, value] of Object.entries(plugin.hooks)) {
133
+ const list = Array.isArray(value) ? value : [value];
134
+ for (const fn of list) {
135
+ if (typeof fn === 'function') {
136
+ this.on(event, fn, source, granted);
137
+ }
138
+ }
139
+ }
140
+ }
141
+ if (typeof plugin.setup === 'function') {
142
+ await plugin.setup({
143
+ on: (event, handler) => this.on(event, handler, source, granted),
144
+ context: this.getContext(),
145
+ });
146
+ }
147
+ }
148
+ async emit(event, payload) {
149
+ if (!this.enabled)
150
+ return;
151
+ const list = this.handlers.get(event);
152
+ if (!list || list.length === 0)
153
+ return;
154
+ this.eventCounts.set(event, (this.eventCounts.get(event) ?? 0) + 1);
155
+ const ctx = this.getContext();
156
+ for (const handler of list) {
157
+ const started = Date.now();
158
+ try {
159
+ const safePayload = redactPayload(event, payload, handler.capabilities);
160
+ await handler.fn(safePayload, ctx);
161
+ }
162
+ catch (error) {
163
+ const msg = `[hooks] ${event} handler failed (${handler.source}): ${error?.message ?? String(error)}`;
164
+ pushLimited(this.recentErrors, msg);
165
+ if (this.strict)
166
+ throw new Error(msg);
167
+ this.logger(msg);
168
+ }
169
+ finally {
170
+ const elapsed = Date.now() - started;
171
+ if (this.warnMs > 0 && elapsed >= this.warnMs) {
172
+ const slow = `[hooks] ${event} handler slow (${handler.source}): ${elapsed}ms`;
173
+ pushLimited(this.recentSlowHandlers, slow);
174
+ this.logger(slow);
175
+ }
176
+ }
177
+ }
178
+ }
179
+ }
180
+ //# sourceMappingURL=manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/hooks/manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Example hook plugin.
3
+ *
4
+ * Configure in config.json:
5
+ * {
6
+ * "hooks": {
7
+ * "plugin_paths": ["./dist/hooks/plugins/example-console.js"]
8
+ * }
9
+ * }
10
+ */
11
+ const plugin = {
12
+ name: 'example-console',
13
+ hooks: {
14
+ ask_start: ({ askId, instruction }, ctx) => {
15
+ const preview = instruction.length > 120 ? `${instruction.slice(0, 120)}…` : instruction;
16
+ console.error(`[hook:example-console] ask_start ${askId} model=${ctx.model} prompt=${preview}`);
17
+ },
18
+ ask_end: ({ askId, turns, toolCalls }) => {
19
+ console.error(`[hook:example-console] ask_end ${askId} turns=${turns} toolCalls=${toolCalls}`);
20
+ },
21
+ },
22
+ };
23
+ export default plugin;
24
+ //# sourceMappingURL=example-console.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"example-console.js","sourceRoot":"","sources":["../../../src/hooks/plugins/example-console.ts"],"names":[],"mappings":"AAEA;;;;;;;;;GASG;AACH,MAAM,MAAM,GAAe;IACzB,IAAI,EAAE,iBAAiB;IACvB,KAAK,EAAE;QACL,SAAS,EAAE,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,GAAG,EAAE,EAAE;YACzC,MAAM,OAAO,GAAG,WAAW,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC;YACzF,OAAO,CAAC,KAAK,CAAC,oCAAoC,KAAK,UAAU,GAAG,CAAC,KAAK,WAAW,OAAO,EAAE,CAAC,CAAC;QAClG,CAAC;QACD,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE;YACvC,OAAO,CAAC,KAAK,CAAC,kCAAkC,KAAK,UAAU,KAAK,cAAc,SAAS,EAAE,CAAC,CAAC;QACjG,CAAC;KACF;CACF,CAAC;AAEF,eAAe,MAAM,CAAC"}
@@ -0,0 +1,53 @@
1
+ import fs from 'node:fs/promises';
2
+ import path from 'node:path';
3
+ export function normalizePluginName(raw) {
4
+ const cleaned = String(raw ?? '').trim().toLowerCase();
5
+ if (!cleaned)
6
+ return '';
7
+ if (!/^[a-z0-9][a-z0-9._-]*$/.test(cleaned))
8
+ return '';
9
+ return cleaned;
10
+ }
11
+ function templateIndex(pluginName) {
12
+ return `import type { HookPlugin } from 'idlehands/dist/hooks/index.js';
13
+
14
+ const plugin: HookPlugin = {
15
+ name: '${pluginName}',
16
+ capabilities: ['observe'],
17
+ hooks: {
18
+ ask_start: ({ askId }, ctx) => {
19
+ console.error(\`[${pluginName}] ask_start \${askId} model=\${ctx.model}\`);
20
+ },
21
+ },
22
+ };
23
+
24
+ export default plugin;
25
+ `;
26
+ }
27
+ function templateReadme(pluginName) {
28
+ return `# ${pluginName}\n\nGenerated hook plugin scaffold for Idle Hands.\n\n## Files\n\n- \`index.ts\` — plugin entry (default export)\n\n## Configure Idle Hands\n\nAdd this plugin path to your config:\n\n\`\`\`json\n{\n "hooks": {\n "plugin_paths": ["./plugins/${pluginName}/dist/index.js"]\n }\n}\n\`\`\`\n\nThen build your plugin and restart Idle Hands.\n`;
29
+ }
30
+ export async function scaffoldHookPlugin(opts) {
31
+ const pluginName = normalizePluginName(opts.pluginName);
32
+ if (!pluginName) {
33
+ throw new Error('Invalid plugin name. Use lowercase letters/numbers plus . _ -');
34
+ }
35
+ const targetDir = path.resolve(opts.baseDir, pluginName);
36
+ const exists = await fs.stat(targetDir).then(() => true).catch(() => false);
37
+ if (exists && !opts.force) {
38
+ throw new Error(`Target already exists: ${targetDir}`);
39
+ }
40
+ await fs.mkdir(targetDir, { recursive: true });
41
+ const files = [
42
+ path.join(targetDir, 'index.ts'),
43
+ path.join(targetDir, 'README.md'),
44
+ ];
45
+ await fs.writeFile(files[0], templateIndex(pluginName), 'utf8');
46
+ await fs.writeFile(files[1], templateReadme(pluginName), 'utf8');
47
+ return {
48
+ pluginName,
49
+ targetDir,
50
+ files,
51
+ };
52
+ }
53
+ //# sourceMappingURL=scaffold.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scaffold.js","sourceRoot":"","sources":["../../src/hooks/scaffold.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAQ7B,MAAM,UAAU,mBAAmB,CAAC,GAAW;IAC7C,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACvD,IAAI,CAAC,OAAO;QAAE,OAAO,EAAE,CAAC;IACxB,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,EAAE,CAAC;IACvD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,aAAa,CAAC,UAAkB;IACvC,OAAO;;;WAGE,UAAU;;;;yBAII,UAAU;;;;;;CAMlC,CAAC;AACF,CAAC;AAED,SAAS,cAAc,CAAC,UAAkB;IACxC,OAAO,KAAK,UAAU,uPAAuP,UAAU,sFAAsF,CAAC;AAChX,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,IAIxC;IACC,MAAM,UAAU,GAAG,mBAAmB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACxD,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,+DAA+D,CAAC,CAAC;IACnF,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IAEzD,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;IAC5E,IAAI,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,0BAA0B,SAAS,EAAE,CAAC,CAAC;IACzD,CAAC;IAED,MAAM,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE/C,MAAM,KAAK,GAAG;QACZ,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC;QAChC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC;KAClC,CAAC;IAEF,MAAM,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,aAAa,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC,CAAC;IAChE,MAAM,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,cAAc,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC,CAAC;IAEjE,OAAO;QACL,UAAU;QACV,SAAS;QACT,KAAK;KACN,CAAC;AACJ,CAAC"}
@@ -0,0 +1,8 @@
1
+ export const HOOK_CAPABILITIES = [
2
+ 'observe',
3
+ 'read_prompts',
4
+ 'read_responses',
5
+ 'read_tool_args',
6
+ 'read_tool_results',
7
+ ];
8
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/hooks/types.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,SAAS;IACT,cAAc;IACd,gBAAgB;IAChB,gBAAgB;IAChB,mBAAmB;CACX,CAAC"}
package/dist/index.js CHANGED
@@ -14,7 +14,7 @@ import { unifiedDiffFromBuffers } from './replay_cli.js';
14
14
  import { makeStyler, resolveColorMode, colorizeUnifiedDiff, warn as warnFmt, err as errFmt } from './term.js';
15
15
  import { resolveTheme } from './themes.js';
16
16
  import { createVimState, handleVimKeypress } from './vim.js';
17
- import { loadCustomCommands, expandArgs } from './commands.js';
17
+ import { loadCustomCommands } from './commands.js';
18
18
  import { performUpgrade, performRollback, dailyUpdateCheck, detectInstallSource } from './upgrade.js';
19
19
  import { setLockdown, setSafetyLogging, loadSafetyConfig } from './safety.js';
20
20
  import { loadGitStartupSummary } from './git.js';
@@ -22,7 +22,7 @@ import { loadGitStartupSummary } from './git.js';
22
22
  import { parseArgs, asNum, asBool, friendlyError, loadMcpServerConfigFile, printHelp, } from './cli/args.js';
23
23
  import { readUserInput, readStdinIfPiped, reverseSearchHistory, isPathCompletionContext, expandAtFileRefs, expandPromptImages, } from './cli/input.js';
24
24
  import { lastSessionPath, namedSessionPath, projectSessionPath, loadPromptTemplates, loadHistory, appendHistoryLine, rotateHistoryIfNeeded, } from './cli/session-state.js';
25
- import { runDirectShellCommand } from './cli/shell.js';
25
+ import { runReplPreTurn } from './cli/repl-dispatch.js';
26
26
  import { replayCaptureFile, formatStatusLine, renderStartupBanner, formatCount, endpointLooksLocal, } from './cli/status.js';
27
27
  import { generateInitContext, formatInitSummary, } from './cli/init.js';
28
28
  import { buildReplContext } from './cli/build-repl-context.js';
@@ -30,7 +30,7 @@ import { runAgentTurnWithSpinner } from './cli/agent-turn.js';
30
30
  import { printBotHelp, runBotSubcommand } from './cli/bot.js';
31
31
  import { runHostsSubcommand, runBackendsSubcommand, runModelsSubcommand, runSelectSubcommand, runHealthSubcommand } from './cli/runtime-cmds.js';
32
32
  import { runOneShot } from './cli/oneshot.js';
33
- import { registerAll, findCommand, allCommandNames } from './cli/command-registry.js';
33
+ import { registerAll, allCommandNames } from './cli/command-registry.js';
34
34
  import { sessionCommands } from './cli/commands/session.js';
35
35
  import { runtimeCommands } from './cli/commands/runtime.js';
36
36
  import { modelCommands } from './cli/commands/model.js';
@@ -198,6 +198,9 @@ async function main() {
198
198
  top_p: asNum(args['top-p'] ?? args.top_p),
199
199
  timeout: asNum(args.timeout),
200
200
  response_timeout: asNum(args['response-timeout'] ?? args.response_timeout),
201
+ connection_timeout: asNum(args['connection-timeout'] ?? args.connection_timeout),
202
+ initial_connection_check: asBool(args['initial-connection-check'] ?? args.initial_connection_check),
203
+ initial_connection_timeout: asNum(args['initial-connection-timeout'] ?? args.initial_connection_timeout),
201
204
  max_iterations: asNum(args['max-iterations'] ?? args.max_iterations),
202
205
  context_window: asNum(args['context-window'] ?? args.context_window),
203
206
  approval_mode: typeof args['approval-mode'] === 'string'
@@ -682,68 +685,17 @@ async function main() {
682
685
  console.log('⚠️ Anton is running. File changes may conflict. Use /anton stop first, or proceed at your own risk.');
683
686
  }
684
687
  }
685
- // Direct shell execution
686
- const shouldRunShell = (ctx.shellMode && !line.startsWith('/')) || /^!{1,2}\s*\S/.test(line);
687
- if (shouldRunShell) {
688
- const injectOutput = !ctx.shellMode && line.startsWith('!!');
689
- const command = ctx.shellMode ? line : line.slice(injectOutput ? 2 : 1).trim();
690
- if (!command) {
691
- console.log('Usage: !<command> (or !!<command> to also inject output into context)');
692
- continue;
693
- }
694
- const timeoutSec = config.mode === 'sys' ? 60 : 30;
695
- console.log(S.dim(`[shell] $ ${command}`));
696
- const result = await runDirectShellCommand({
697
- command, cwd: projectDir(config), timeoutSec,
698
- onStart: (proc) => { ctx.activeShellProc = proc; },
699
- onStop: () => { ctx.activeShellProc = null; },
700
- });
701
- if (result.timedOut)
702
- console.log(warnFmt(`[shell] killed after ${timeoutSec}s timeout`, S));
703
- if (!result.timedOut && result.rc !== 0)
704
- console.log(warnFmt(`[shell] exited with rc=${result.rc}`, S));
705
- if (injectOutput) {
706
- const merged = `${result.out}${result.err}`.slice(-4000);
707
- session.messages.push({ role: 'user', content: `[Shell output]\n$ ${command}\n${merged}` });
708
- console.log(S.dim('[shell] output injected into conversation context.'));
709
- }
710
- continue;
711
- }
712
- // Slash command dispatch via registry
713
- const [slashHeadRaw, ...slashRest] = line.split(/\s+/);
714
- const slashHead = slashHeadRaw.toLowerCase();
715
- const registeredCmd = findCommand(line);
716
- if (registeredCmd) {
717
- const cmdArgs = line.replace(/^\S+\s*/, '').trim();
718
- try {
719
- const handled = await registeredCmd.execute(ctx, cmdArgs, line);
720
- S = ctx.S; // sync in case command changed styler (e.g. /theme)
721
- if (handled)
722
- continue;
723
- }
724
- catch (e) {
725
- console.error(errFmt(`${registeredCmd.name}: ${e?.message ?? String(e)}`, S));
726
- continue;
727
- }
728
- }
729
- // Template expansion (fall through to agent turn)
730
- if (line.startsWith('/') && Object.prototype.hasOwnProperty.call(promptTemplates, slashHead)) {
731
- const template = promptTemplates[slashHead];
732
- ctx.pendingTemplate = template;
733
- console.log(S.dim(`[template] queued from ${slashHead}. Your next prompt will be prefixed.`));
688
+ const preTurn = await runReplPreTurn({
689
+ line,
690
+ ctx,
691
+ session: session,
692
+ config: config,
693
+ promptTemplates,
694
+ });
695
+ S = ctx.S;
696
+ line = preTurn.line;
697
+ if (preTurn.handled)
734
698
  continue;
735
- }
736
- // Custom command expansion (modifies line, falls through to agent turn)
737
- if (line.startsWith('/') && ctx.customCommands.has(slashHead)) {
738
- const cmd = ctx.customCommands.get(slashHead);
739
- const expanded = expandArgs(cmd.template, slashRest).trim();
740
- if (!expanded) {
741
- console.log(warnFmt(`[command] ${slashHead} expanded to empty prompt.`, S));
742
- continue;
743
- }
744
- line = expanded;
745
- console.log(S.dim(`[command] ${slashHead} → prompt injected (${cmd.source})`));
746
- }
747
699
  // ── Agent turn ──
748
700
  try {
749
701
  const expandedRes = await expandAtFileRefs(line, projectDir(config), config.context_max_tokens ?? 8192);