neoctl 0.2.11 → 0.2.12

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 (79) hide show
  1. package/dist/index.d.ts +0 -1
  2. package/dist/index.js +0 -1
  3. package/dist/index.js.map +1 -1
  4. package/dist/repl/index.js +3114 -314
  5. package/dist/repl/index.js.map +1 -1
  6. package/dist/tools/builtins/image-note-tool.js +1 -5
  7. package/dist/tools/builtins/image-note-tool.js.map +1 -1
  8. package/dist/web/html.js +8 -14
  9. package/dist/web/html.js.map +1 -1
  10. package/dist/web/index.d.ts +0 -5
  11. package/dist/web/index.js +5 -41
  12. package/dist/web/index.js.map +1 -1
  13. package/package.json +1 -1
  14. package/scripts/install-ripgrep.cjs +196 -196
  15. package/vendor/ripgrep/darwin-arm64/COPYING +3 -3
  16. package/vendor/ripgrep/darwin-arm64/LICENSE-MIT +21 -21
  17. package/vendor/ripgrep/darwin-arm64/UNLICENSE +24 -24
  18. package/vendor/ripgrep/darwin-arm64/manifest.json +7 -7
  19. package/vendor/ripgrep/darwin-x64/COPYING +3 -3
  20. package/vendor/ripgrep/darwin-x64/LICENSE-MIT +21 -21
  21. package/vendor/ripgrep/darwin-x64/UNLICENSE +24 -24
  22. package/vendor/ripgrep/darwin-x64/manifest.json +7 -7
  23. package/vendor/ripgrep/linux-arm64/COPYING +3 -3
  24. package/vendor/ripgrep/linux-arm64/LICENSE-MIT +21 -21
  25. package/vendor/ripgrep/linux-arm64/UNLICENSE +24 -24
  26. package/vendor/ripgrep/linux-arm64/manifest.json +7 -7
  27. package/vendor/ripgrep/linux-x64/COPYING +3 -3
  28. package/vendor/ripgrep/linux-x64/LICENSE-MIT +21 -21
  29. package/vendor/ripgrep/linux-x64/UNLICENSE +24 -24
  30. package/vendor/ripgrep/linux-x64/manifest.json +7 -7
  31. package/vendor/ripgrep/win32-arm64/manifest.json +7 -7
  32. package/dist/repl/browser.d.ts +0 -232
  33. package/dist/repl/browser.js +0 -156
  34. package/dist/repl/browser.js.map +0 -1
  35. package/dist/repl/env-file.d.ts +0 -4
  36. package/dist/repl/env-file.js +0 -97
  37. package/dist/repl/env-file.js.map +0 -1
  38. package/dist/repl/foreground-exec.d.ts +0 -10
  39. package/dist/repl/foreground-exec.js +0 -34
  40. package/dist/repl/foreground-exec.js.map +0 -1
  41. package/dist/repl/login-view.d.ts +0 -75
  42. package/dist/repl/login-view.js +0 -38
  43. package/dist/repl/login-view.js.map +0 -1
  44. package/dist/repl/login.d.ts +0 -14
  45. package/dist/repl/login.js +0 -165
  46. package/dist/repl/login.js.map +0 -1
  47. package/dist/repl/message-rendering.d.ts +0 -99
  48. package/dist/repl/message-rendering.js +0 -476
  49. package/dist/repl/message-rendering.js.map +0 -1
  50. package/dist/repl/prompt-payload.d.ts +0 -9
  51. package/dist/repl/prompt-payload.js +0 -64
  52. package/dist/repl/prompt-payload.js.map +0 -1
  53. package/dist/repl/prompt-view.d.ts +0 -235
  54. package/dist/repl/prompt-view.js +0 -184
  55. package/dist/repl/prompt-view.js.map +0 -1
  56. package/dist/repl/repl-types.d.ts +0 -88
  57. package/dist/repl/repl-types.js +0 -2
  58. package/dist/repl/repl-types.js.map +0 -1
  59. package/dist/repl/runtime.d.ts +0 -33
  60. package/dist/repl/runtime.js +0 -202
  61. package/dist/repl/runtime.js.map +0 -1
  62. package/dist/repl/slash-completion.d.ts +0 -28
  63. package/dist/repl/slash-completion.js +0 -287
  64. package/dist/repl/slash-completion.js.map +0 -1
  65. package/dist/repl/status-panel.d.ts +0 -234
  66. package/dist/repl/status-panel.js +0 -509
  67. package/dist/repl/status-panel.js.map +0 -1
  68. package/dist/repl/terminal.d.ts +0 -19
  69. package/dist/repl/terminal.js +0 -81
  70. package/dist/repl/terminal.js.map +0 -1
  71. package/dist/repl/tool-rendering.d.ts +0 -6
  72. package/dist/repl/tool-rendering.js +0 -502
  73. package/dist/repl/tool-rendering.js.map +0 -1
  74. package/dist/repl/usage.d.ts +0 -17
  75. package/dist/repl/usage.js +0 -57
  76. package/dist/repl/usage.js.map +0 -1
  77. package/dist/tips.d.ts +0 -10
  78. package/dist/tips.js +0 -168
  79. package/dist/tips.js.map +0 -1
@@ -144,15 +144,11 @@ export function createImageNoteTool() {
144
144
  renderToolResultMessage(result, request) {
145
145
  if (!request)
146
146
  return undefined;
147
- const output = result.output;
148
- const text = result.ok
149
- ? `Recorded semantic notes for images: ${output.recorded.map((item) => item.imageRef).join(", ")}.`
150
- : `Image note result: recorded ${output.recorded?.length ?? 0}, failed ${output.failed?.map((item) => `${item.imageRef}: ${item.error}`).join("; ") ?? "unknown"}.`;
151
147
  return {
152
148
  id: `${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 10)}`,
153
149
  role: "tool_result",
154
150
  createdAt: new Date().toISOString(),
155
- blocks: [{ type: "tool_result", toolUseId: request.id, name: request.name, ok: result.ok, output: text }],
151
+ blocks: [{ type: "tool_result", toolUseId: request.id, name: request.name, ok: result.ok, output: result.output }],
156
152
  };
157
153
  },
158
154
  };
@@ -1 +1 @@
1
- {"version":3,"file":"image-note-tool.js","sourceRoot":"","sources":["../../../src/tools/builtins/image-note-tool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,4BAA4B,EAAE,MAAM,gCAAgC,CAAC;AAC9E,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,4BAA4B,EAAuC,MAAM,2BAA2B,CAAC;AA6B9G,MAAM,UAAU,mBAAmB;IACjC,OAAO;QACL,IAAI,EAAE,YAAY;QAClB,OAAO,EAAE,CAAC,YAAY,EAAE,gBAAgB,CAAC;QACzC,WAAW,EACT,yFAAyF;YACzF,2FAA2F;YAC3F,wEAAwE;YACxE,uFAAuF;YACvF,gDAAgD;QAClD,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,QAAQ,EAAE;oBACR,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,+IAA+I;iBAC7J;gBACD,OAAO,EAAE;oBACP,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,2IAA2I;iBACzJ;gBACD,OAAO,EAAE;oBACP,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,0HAA0H;iBACxI;gBACD,YAAY,EAAE;oBACZ,IAAI,EAAE,OAAO;oBACb,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;oBACzB,WAAW,EAAE,0HAA0H;iBACxI;gBACD,IAAI,EAAE;oBACJ,IAAI,EAAE,OAAO;oBACb,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;oBACzB,WAAW,EAAE,mGAAmG;iBACjH;gBACD,SAAS,EAAE;oBACT,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,CAAC,WAAW,EAAE,gBAAgB,EAAE,QAAQ,CAAC;oBAC/C,WAAW,EAAE,mOAAmO;iBACjP;gBACD,QAAQ,EAAE;oBACR,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,oGAAoG;iBAClH;gBACD,KAAK,EAAE;oBACL,IAAI,EAAE,OAAO;oBACb,WAAW,EAAE,iEAAiE;oBAC9E,KAAK,EAAE;wBACL,IAAI,EAAE,QAAQ;wBACd,UAAU,EAAE;4BACV,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,iCAAiC,EAAE;4BAC5E,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,wDAAwD,EAAE;4BAClG,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,8CAA8C,EAAE;4BACxF,YAAY,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,WAAW,EAAE,4BAA4B,EAAE;4BACrG,IAAI,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,WAAW,EAAE,uBAAuB,EAAE;4BACxF,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,gBAAgB,EAAE,QAAQ,CAAC,EAAE,WAAW,EAAE,0CAA0C,EAAE;4BACvI,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,mEAAmE,EAAE;yBAC/G;wBACD,QAAQ,EAAE,CAAC,UAAU,CAAC;wBACtB,oBAAoB,EAAE,KAAK;qBAC5B;iBACF;aACF;YACD,oBAAoB,EAAE,KAAK;SAC5B;QACD,QAAQ,EAAE;YACR,QAAQ,EAAE,KAAK;YACf,UAAU,EAAE,KAAK;YACjB,OAAO,EAAE,IAAI;YACb,kBAAkB,EAAE,IAAI;SACzB;QACD,QAAQ,CAAC,KAAK;YACZ,MAAM,MAAM,GAAG,KAAoC,CAAC;YACpD,OAAO;gBACL,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,YAAY,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS;gBAClF,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;gBAC1D,SAAS,EAAE,MAAM,CAAC,SAAS;gBAC3B,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,SAAS;aAC1F,CAAC;QACJ,CAAC;QACD,aAAa,CAAC,KAAK;YACjB,MAAM,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;YACpC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,sEAAsE,EAAE,CAAC;YAC9H,IAAI,KAAK,CAAC,MAAM,GAAG,EAAE;gBAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,gDAAgD,EAAE,CAAC;YACvG,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;oBAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,qCAAqC,EAAE,CAAC;gBAChG,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC,YAAY,EAAE,MAAM,IAAI,IAAI,CAAC,IAAI,EAAE,MAAM,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC;gBAC1I,IAAI,CAAC,OAAO;oBAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,iEAAiE,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC;gBAC9H,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;oBAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,gDAAgD,EAAE,CAAC;gBACzJ,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;oBAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,gCAAgC,EAAE,CAAC;gBACvH,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC;oBAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,6DAA6D,EAAE,CAAC;gBACtJ,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,IAAI,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;oBAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,wCAAwC,EAAE,CAAC;YAC3L,CAAC;YACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;QACpC,CAAC;QACD,iBAAiB;YACf,OAAO,KAAK,CAAC;QACf,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO;YACvB,MAAM,QAAQ,GAAG,4BAA4B,CAAC,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;YACtE,MAAM,QAAQ,GAA4B,EAAE,CAAC;YAC7C,MAAM,MAAM,GAAkC,EAAE,CAAC;YAEjD,KAAK,MAAM,SAAS,IAAI,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC9C,MAAM,KAAK,GAAG,eAAe,CAAC,QAAQ,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC;gBAC5D,IAAI,CAAC,KAAK,EAAE,CAAC;oBACX,MAAM,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,SAAS,CAAC,QAAQ,EAAE,KAAK,EAAE,oBAAoB,SAAS,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;oBAC/F,SAAS;gBACX,CAAC;gBACD,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;oBACvB,MAAM,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,SAAS,CAAC,QAAQ,EAAE,KAAK,EAAE,SAAS,KAAK,CAAC,EAAE,oDAAoD,EAAE,CAAC,CAAC;oBAC5H,SAAS;gBACX,CAAC;gBACD,MAAM,IAAI,GAAG,MAAM,4BAA4B,CAAC,KAAK,CAAC,WAAW,EAAE;oBACjE,OAAO,EAAE,SAAS,CAAC,OAAO;oBAC1B,OAAO,EAAE,SAAS,CAAC,OAAO;oBAC1B,YAAY,EAAE,SAAS,CAAC,YAAY;oBACpC,IAAI,EAAE,SAAS,CAAC,IAAI;oBACpB,SAAS,EAAE,SAAS,CAAC,SAAS;oBAC9B,QAAQ,EAAE,SAAS,CAAC,QAAQ;iBAC7B,CAAC,CAAC;gBACH,QAAQ,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;YAC9E,CAAC;YAED,MAAM,MAAM,GAAwB,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;YACzD,OAAO;gBACL,EAAE,EAAE,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;gBAC9C,MAAM;gBACN,OAAO,EAAE,YAAY,QAAQ,CAAC,MAAM,iBAAiB,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,MAAM,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE;aACxG,CAAC;QACJ,CAAC;QACD,uBAAuB,CAAC,MAAM,EAAE,OAAO;YACrC,IAAI,CAAC,OAAO;gBAAE,OAAO,SAAS,CAAC;YAC/B,MAAM,MAAM,GAAG,MAAM,CAAC,MAA6B,CAAC;YACpD,MAAM,IAAI,GAAG,MAAM,CAAC,EAAE;gBACpB,CAAC,CAAC,uCAAuC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;gBACnG,CAAC,CAAC,+BAA+B,MAAM,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC,YAAY,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,SAAS,GAAG,CAAC;YACtK,OAAO;gBACL,EAAE,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE;gBAC3E,IAAI,EAAE,aAAa;gBACnB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBACnC,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;aAC1G,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC;AAED,SAAS,sBAAsB,CAAC,KAAc;IAC5C,MAAM,MAAM,GAAG,KAAoC,CAAC;IACpD,OAAO;QACL,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,EAAE;QAC/B,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,YAAY,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS;QAClF,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;QAC1D,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,QAAQ,EAAE,MAAM,CAAC,QAAQ;KAC1B,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAc;IACtC,OAAO,KAAK,KAAK,WAAW,IAAI,KAAK,KAAK,gBAAgB,IAAI,KAAK,KAAK,QAAQ,CAAC;AACnF,CAAC;AAED,SAAS,cAAc,CAAC,KAAyB;IAC/C,IAAI,KAAK,CAAC,KAAK,EAAE,MAAM;QAAE,OAAO,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;IACxE,IAAI,CAAC,KAAK,CAAC,QAAQ;QAAE,OAAO,EAAE,CAAC;IAC/B,OAAO,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC,CAAC;AACzC,CAAC;AAED,MAAM,CAAC,MAAM,aAAa,GAAG,mBAAmB,EAAE,CAAC"}
1
+ {"version":3,"file":"image-note-tool.js","sourceRoot":"","sources":["../../../src/tools/builtins/image-note-tool.ts"],"names":[],"mappings":"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"}
package/dist/web/html.js CHANGED
@@ -203,7 +203,7 @@ const ANIMATED_NUMBER_INTERVAL_MS = 50;
203
203
  const ANIMATED_NUMBER_MIN_DURATION_MS = 180;
204
204
  const ANIMATED_NUMBER_MAX_DURATION_MS = 700;
205
205
  const ANIMATED_NUMBER_DURATION_SCALE_MS = 130;
206
- const state = { lines: [], status: { phase: 'ready', streamedOutputTokens: 0 }, busy: false, queuedInput: undefined, backgroundTaskCount: 0, backgroundTasks: [], backgroundSessionRunCount: 0, runningSessionIds: [], session: undefined, catalog: { commands: [], modelIds: [], reasoning: [] }, interactive: {}, tips: [], tipIndex: 0, history: [], historyIndex: undefined, completionIndex: 0, expandedToolLines: new Set(), panel: undefined, panelSelection: 0, attachments: [], attachmentCounter: 0, view: location.pathname === '/sessions' ? 'sessions' : 'chat' };
206
+ const state = { lines: [], status: { phase: 'ready', streamedOutputTokens: 0 }, busy: false, queuedInput: undefined, backgroundTaskCount: 0, backgroundTasks: [], backgroundSessionRunCount: 0, runningSessionIds: [], session: undefined, catalog: { commands: [], modelIds: [], reasoning: [] }, interactive: {}, history: [], historyIndex: undefined, completionIndex: 0, expandedToolLines: new Set(), panel: undefined, panelSelection: 0, attachments: [], attachmentCounter: 0, view: location.pathname === '/sessions' ? 'sessions' : 'chat' };
207
207
  const animatedNumbers = { input: { target: undefined, display: undefined, timer: undefined }, output: { target: undefined, display: undefined, timer: undefined } };
208
208
  const renderedLineKeys = new Map();
209
209
  const statusNodes = {};
@@ -244,8 +244,6 @@ es.addEventListener('sync', (event) => {
244
244
  state.session = payload.session;
245
245
  if (payload.catalog) state.catalog = payload.catalog;
246
246
  if (payload.interactive) state.interactive = payload.interactive;
247
- if (payload.tips) state.tips = payload.tips;
248
- if (payload.tipIndex !== undefined && state.tipIndex === 0) state.tipIndex = payload.tipIndex;
249
247
  updateInputPlaceholder();
250
248
  scheduleRender();
251
249
  });
@@ -311,10 +309,10 @@ function lineRenderKey(line) {
311
309
  const expanded = state.expandedToolLines.has(line.id);
312
310
  const collapsible = kind === 'tool' && line.collapsible !== false && hasMoreThanLines(line.text || '', TOOL_COLLAPSED_LINES);
313
311
  const image = line.image ? [line.image.src || '', line.image.label || '', line.image.mimeType || ''].join('\u001e') : '';
314
- return [kind, line.text || '', line.title || '', line.bodyTitle || '', line.titleStatus || '', line.format || '', line.previewStyle || '', line.summaryMaxLines || '', line.live ? '1' : '0', line.pendingReplacement ? '1' : '0', collapsible ? '1' : '0', expanded ? '1' : '0', image].join('\u001f');
312
+ return [kind, line.text || '', line.title || '', line.bodyTitle || '', line.titleStatus || '', line.format || '', line.previewStyle || '', line.summaryMaxLines || '', line.live ? '1' : '0', collapsible ? '1' : '0', expanded ? '1' : '0', image].join('\u001f');
315
313
  }
316
314
  function markerForLine(line, kind) {
317
- if (kind === 'tool') return line.live || line.pendingReplacement ? '◇' : '◆';
315
+ if (kind === 'tool') return line.live ? '◇' : '◆';
318
316
  if (kind === 'thinking') return '◆';
319
317
  return '●';
320
318
  }
@@ -633,10 +631,8 @@ function renderCompletions() {
633
631
  completionsEl.innerHTML = '<div class="completion-title">' + esc(title) + '</div>' + visible.map((c, i) => '<div class="completion-row ' + (c.kind || '') + ' ' + (i + pageStart === selected ? 'selected' : '') + '"><span class="num">' + (i + pageStart + 1) + '.</span><span class="name">' + esc(c.value) + '</span><span class="desc">' + esc(c.description || '') + '</span></div>').join('') + '<div class="completion-footer">↑/↓ select · ←/→ page · Tab complete</div>';
634
632
  }
635
633
  function selectedCompletion() { const list = completions(); return list.length ? list[Math.max(0, Math.min(state.completionIndex, list.length - 1))] : undefined; }
636
- function completeSelection() { const c = selectedCompletion(); if (!c) return false; const cursor = input.selectionStart || 0; input.value = c.insertText + input.value.slice(cursor); input.selectionStart = input.selectionEnd = c.insertText.length; advanceTip(); autosize(); renderCompletions(); return true; }
637
- function currentTip() { const tips = state.tips || []; return tips.length ? tips[((state.tipIndex % tips.length) + tips.length) % tips.length] : undefined; }
638
- function advanceTip(delta = 1) { state.tipIndex += delta; updateInputPlaceholder(); }
639
- function updateInputPlaceholder() { const tip = currentTip(); input.placeholder = tip ? tip.placeholder : 'Type a message, or /help for commands'; }
634
+ function completeSelection() { const c = selectedCompletion(); if (!c) return false; const cursor = input.selectionStart || 0; input.value = c.insertText + input.value.slice(cursor); input.selectionStart = input.selectionEnd = c.insertText.length; autosize(); renderCompletions(); return true; }
635
+ function updateInputPlaceholder() { input.placeholder = 'Type a message, or /help for commands'; }
640
636
  async function postJson(url, body) { const res = await fetch(url, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(body) }); const value = await res.json(); if (!value.ok && value.error) alert(value.error); return value; }
641
637
  async function saveLoginPanel() {
642
638
  const login = state.login;
@@ -648,7 +644,7 @@ async function saveLoginPanel() {
648
644
  if (result.ok) { state.panel = undefined; renderPanel(); }
649
645
  }
650
646
  function attachmentsForText(text) { return state.attachments.filter(attachment => text.includes(attachment.label)); }
651
- function insertAtCursor(value) { const start = input.selectionStart || 0, end = input.selectionEnd || start; input.value = input.value.slice(0, start) + value + input.value.slice(end); input.selectionStart = input.selectionEnd = start + value.length; advanceTip(); autosize(); renderCompletions(); }
647
+ function insertAtCursor(value) { const start = input.selectionStart || 0, end = input.selectionEnd || start; input.value = input.value.slice(0, start) + value + input.value.slice(end); input.selectionStart = input.selectionEnd = start + value.length; autosize(); renderCompletions(); }
652
648
  async function fileToDataUrlPayload(file) {
653
649
  const dataUrl = await new Promise((resolve, reject) => { const reader = new FileReader(); reader.onload = () => resolve(String(reader.result || '')); reader.onerror = () => reject(reader.error || new Error('read failed')); reader.readAsDataURL(file); });
654
650
  const comma = dataUrl.indexOf(',');
@@ -742,15 +738,13 @@ input.addEventListener('keydown', (e) => {
742
738
  const count = completions().length;
743
739
  if (handleSessionsKey(e)) return;
744
740
  if (e.key === 'Enter' && !e.shiftKey) { e.preventDefault(); const c = selectedCompletion(); if (c && c.kind === 'command' && c.arguments !== 'none') { completeSelection(); input.value += ' '; input.selectionStart = input.selectionEnd = input.value.length; return; } submit(); return; }
745
- if (e.key === 'Tab') { if (completeSelection()) e.preventDefault(); else if (!input.value) { e.preventDefault(); advanceTip(); } return; }
741
+ if (e.key === 'Tab') { if (completeSelection()) e.preventDefault(); return; }
746
742
  if (e.key === 'ArrowUp' && count) { e.preventDefault(); state.completionIndex = (state.completionIndex + count - 1) % count; renderCompletions(); return; }
747
743
  if (e.key === 'ArrowDown' && count) { e.preventDefault(); state.completionIndex = (state.completionIndex + 1) % count; renderCompletions(); return; }
748
744
  if (e.key === 'ArrowLeft' && count > 10) { e.preventDefault(); state.completionIndex = (state.completionIndex + count - 10) % count; renderCompletions(); return; }
749
745
  if (e.key === 'ArrowRight' && count > 10) { e.preventDefault(); state.completionIndex = (state.completionIndex + 10) % count; renderCompletions(); return; }
750
746
  if (e.key === 'ArrowUp' && !input.value && state.history.length) { e.preventDefault(); state.historyIndex = Math.min(state.history.length - 1, (state.historyIndex ?? -1) + 1); input.value = state.history[state.historyIndex] || ''; autosize(); return; }
751
- if (e.key === 'ArrowUp' && !input.value) { e.preventDefault(); advanceTip(-1); return; }
752
747
  if (e.key === 'ArrowDown' && state.historyIndex !== undefined) { e.preventDefault(); state.historyIndex -= 1; if (state.historyIndex < 0) { state.historyIndex = undefined; input.value = ''; } else input.value = state.history[state.historyIndex] || ''; autosize(); return; }
753
- if (e.key === 'ArrowDown' && !input.value) { e.preventDefault(); advanceTip(); return; }
754
748
  if ((e.ctrlKey || e.metaKey) && e.key.toLowerCase() === 'c') { if (input.value) { input.value = ''; autosize(); renderCompletions(); } else if (state.queuedInput) { state.queuedInput = undefined; scheduleRender(); fetch('/api/queue/cancel', { method: 'POST' }); } else fetch('/api/interrupt', { method: 'POST' }); }
755
749
  if (e.key === 'Escape') { state.completionIndex = 0; if (state.queuedInput) { state.queuedInput = undefined; scheduleRender(); fetch('/api/queue/cancel', { method: 'POST' }); } else renderCompletions(); }
756
750
  });
@@ -758,7 +752,7 @@ document.addEventListener('keydown', (e) => {
758
752
  if (e.target === input || e.target.closest('input, textarea, select')) return;
759
753
  handleSessionsKey(e);
760
754
  });
761
- input.addEventListener('input', () => { state.completionIndex = 0; state.attachments = attachmentsForText(input.value); advanceTip(); autosize(); renderCompletions(); });
755
+ input.addEventListener('input', () => { state.completionIndex = 0; state.attachments = attachmentsForText(input.value); autosize(); renderCompletions(); });
762
756
  input.addEventListener('paste', (e) => { void handlePaste(e); });
763
757
  function autosize() { input.style.height = 'auto'; input.style.height = Math.min(input.scrollHeight, window.innerHeight * .35) + 'px'; updateScrollBottomAffordance(); }
764
758
  function phaseLabel(phase) { if (phase === 'calling_model') return 'model'; if (phase === 'thinking') return 'think'; if (phase === 'running_tools') return 'tools'; if (phase === 'injecting_context') return 'context'; return phase || 'ready'; }
@@ -1 +1 @@
1
- {"version":3,"file":"html.js","sourceRoot":"","sources":["../../src/web/html.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA21B1B,CAAC"}
1
+ {"version":3,"file":"html.js","sourceRoot":"","sources":["../../src/web/html.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAq1B1B,CAAC"}
@@ -55,7 +55,6 @@ interface UiLine {
55
55
  previewStyle?: "summary";
56
56
  summaryMaxLines?: number;
57
57
  live?: boolean;
58
- pendingReplacement?: boolean;
59
58
  collapsible?: boolean;
60
59
  image?: UiLineImage;
61
60
  }
@@ -144,7 +143,6 @@ export declare class WebRepl {
144
143
  private finalizedThinkingLineId;
145
144
  private activeAbortController;
146
145
  private interruptArmed;
147
- private readonly toolLineIds;
148
146
  private lines;
149
147
  private status;
150
148
  private busy;
@@ -185,8 +183,6 @@ export declare class WebRepl {
185
183
  sessions: boolean;
186
184
  login: LoginFormPayload;
187
185
  } | undefined;
188
- tips: import("../tips.js").AppTip[] | undefined;
189
- tipIndex: number;
190
186
  };
191
187
  submit(text: string, attachments?: WebAttachmentPayload[]): Promise<{
192
188
  ok: true;
@@ -255,7 +251,6 @@ export declare class WebRepl {
255
251
  private reduce;
256
252
  private finalizeLiveLine;
257
253
  private finalizeThinkingLine;
258
- private finalizeActiveToolLines;
259
254
  private handleEvent;
260
255
  private handleCommandOrPrompt;
261
256
  private runCompaction;
package/dist/web/index.js CHANGED
@@ -29,7 +29,6 @@ import { TaskStore } from "../tasks/task-store.js";
29
29
  import { parseReplCommand, helpText, replCommandDefinitions } from "../repl/commands.js";
30
30
  import { writeSessionMarkdownExport } from "../session/session-export.js";
31
31
  import { WEB_HTML } from "./html.js";
32
- import { appTips, formatTipLine, initialTipIndex, tipAt } from "../tips.js";
33
32
  import { openDirectory } from "../open-directory.js";
34
33
  import { resolveImageBlockDataSync } from "../core/image-storage.js";
35
34
  const require = createRequire(import.meta.url);
@@ -256,7 +255,6 @@ export class WebRepl {
256
255
  finalizedThinkingLineId;
257
256
  activeAbortController;
258
257
  interruptArmed = false;
259
- toolLineIds = new Map();
260
258
  lines;
261
259
  status;
262
260
  busy = false;
@@ -304,8 +302,6 @@ export class WebRepl {
304
302
  appPrompt: this.runtime.engine.getAppPrompt(),
305
303
  catalog: includeCatalog ? webCatalog(this.runtime) : undefined,
306
304
  interactive: includeCatalog ? webInteractiveCatalog(this.runtime) : undefined,
307
- tips: includeCatalog ? appTips : undefined,
308
- tipIndex: initialTipIndex(this.runtime.engine.snapshot().session?.sessionId ?? process.cwd()),
309
305
  };
310
306
  }
311
307
  async submit(text, attachments = []) {
@@ -396,7 +392,6 @@ export class WebRepl {
396
392
  this.assistantLineId = undefined;
397
393
  this.thinkingLineId = undefined;
398
394
  this.finalizedThinkingLineId = undefined;
399
- this.toolLineIds.clear();
400
395
  if (line)
401
396
  this.append(line);
402
397
  this.broadcastSync();
@@ -515,7 +510,6 @@ export class WebRepl {
515
510
  finalizeForegroundView() {
516
511
  this.finalizeLiveLine(this.assistantLineId);
517
512
  this.finalizeThinkingLine();
518
- this.finalizeActiveToolLines();
519
513
  this.assistantLineId = undefined;
520
514
  this.finalizedThinkingLineId = undefined;
521
515
  }
@@ -611,11 +605,6 @@ export class WebRepl {
611
605
  this.finalizedThinkingLineId = id;
612
606
  this.thinkingLineId = undefined;
613
607
  }
614
- finalizeActiveToolLines() {
615
- for (const id of this.toolLineIds.values())
616
- this.replaceLine(id, { live: false, pendingReplacement: false });
617
- this.toolLineIds.clear();
618
- }
619
608
  handleEvent(event) {
620
609
  this.reduce(event);
621
610
  if (event.type === "state" || event.type === "context.metrics" || event.type === "usage" || event.type === "tool_call.delta" || event.type === "retrying") {
@@ -664,7 +653,7 @@ export class WebRepl {
664
653
  return;
665
654
  }
666
655
  if (event.message.role === "tool_result") {
667
- renderToolResultMessage(event.message, (line) => this.append(line), (id, patch) => this.replaceLine(id, patch), this.toolLineIds);
656
+ renderToolResultMessage(event.message, (line) => this.append(line));
668
657
  renderMessageImages(event.message, (line) => this.append(line));
669
658
  return;
670
659
  }
@@ -685,22 +674,13 @@ export class WebRepl {
685
674
  if (event.type === "tool.started") {
686
675
  this.finalizeLiveLine(this.assistantLineId);
687
676
  this.finalizeThinkingLine();
688
- const id = this.append({ ...formatToolUse(event.toolUse), live: true });
689
- this.toolLineIds.set(event.toolUse.id, id);
690
677
  return;
691
678
  }
692
- if (event.type === "tool.finished") {
693
- const id = this.toolLineIds.get(event.toolUse.id);
694
- if (id !== undefined) {
695
- this.replaceLine(id, formatToolFinishedWithoutResult(event.toolUse, event.ok));
696
- this.toolLineIds.delete(event.toolUse.id);
697
- }
679
+ if (event.type === "tool.finished")
698
680
  return;
699
- }
700
681
  if (event.type === "terminal") {
701
682
  this.finalizeLiveLine(this.assistantLineId);
702
683
  this.finalizeThinkingLine();
703
- this.finalizeActiveToolLines();
704
684
  this.assistantLineId = undefined;
705
685
  this.broadcastSync();
706
686
  return;
@@ -1018,11 +998,7 @@ function webInteractiveCatalog(runtime) {
1018
998
  };
1019
999
  }
1020
1000
  function initialLines(runtime, lineId) {
1021
- const session = runtime.engine.snapshot().session;
1022
- const suffix = session ? ` Session: ${session.sessionId}${session.resumedMessages > 0 ? ` (${session.resumedMessages} resumed messages)` : ""}.` : "";
1023
- const lines = [
1024
- { id: 0, kind: "system", title: "System", text: `Interactive web UI enabled. Type /help for commands.${suffix}\n${formatTipLine(tipAt(initialTipIndex(session?.sessionId ?? process.cwd())))}`, previewStyle: "summary" },
1025
- ];
1001
+ const lines = [];
1026
1002
  lineId.current = 0;
1027
1003
  if (runtime.envNotice)
1028
1004
  lines.push({ id: ++lineId.current, kind: "system", title: "Config", text: runtime.envNotice, format: "plain", previewStyle: "summary" });
@@ -1467,19 +1443,12 @@ function renderMessage(message, append, activeAssistantId, options = {}) {
1467
1443
  }
1468
1444
  return rendered;
1469
1445
  }
1470
- function renderToolResultMessage(message, append, replaceLine, activeToolLineIds) {
1446
+ function renderToolResultMessage(message, append) {
1471
1447
  let rendered = false;
1472
1448
  for (const block of message.blocks) {
1473
1449
  if (block.type !== "tool_result")
1474
1450
  continue;
1475
- const line = formatToolResultLine(block.name, block.output, block.ok);
1476
- const id = activeToolLineIds.get(block.toolUseId);
1477
- if (id === undefined)
1478
- append(line);
1479
- else {
1480
- replaceLine(id, { ...line, title: toolTitle(block.name, "finished"), live: false, pendingReplacement: false });
1481
- activeToolLineIds.delete(block.toolUseId);
1482
- }
1451
+ append(formatToolResultLine(block.name, block.output, block.ok));
1483
1452
  rendered = true;
1484
1453
  }
1485
1454
  return rendered;
@@ -1580,11 +1549,6 @@ function formatToolResultLine(toolName, output, ok) {
1580
1549
  const formatted = formatToolResult(toolName, output, ok);
1581
1550
  return { kind: ok ? "tool" : "error", title: toolTitle(toolName, "finished"), bodyTitle: formatted.bodyTitle, titleStatus: ok ? "success" : "failure", text: formatted.text, format: formatted.format, live: false, previewStyle: formatted.full ? undefined : "summary", summaryMaxLines: formatted.summaryMaxLines, collapsible: true };
1582
1551
  }
1583
- function formatToolFinishedWithoutResult(toolUse, ok) {
1584
- const inputText = formatReplData(toolUse.input, 1200);
1585
- const description = toolUse.name === "exec" ? execDescriptionFromInput(toolUse.input) : undefined;
1586
- return { kind: ok ? "tool" : "error", title: toolTitle(toolUse.name, "finished"), bodyTitle: description, titleStatus: ok ? "success" : "failure", text: inputText ? `${ok ? "finished" : "failed"}\n${inputText}` : ok ? "finished" : "failed", previewStyle: "summary", live: true, pendingReplacement: true, collapsible: true };
1587
- }
1588
1552
  function toolTitle(toolName, _phase) {
1589
1553
  return toolName;
1590
1554
  }