bonecode 1.3.0 → 1.4.2

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 (32) hide show
  1. package/README.md +42 -0
  2. package/compat/opencode_adapter.ts +69 -8
  3. package/dist/compat/opencode_adapter.js +63 -7
  4. package/dist/compat/opencode_adapter.js.map +1 -1
  5. package/dist/src/db_adapter.js +30 -0
  6. package/dist/src/db_adapter.js.map +1 -1
  7. package/dist/src/engine/session/build_mode.d.ts +83 -0
  8. package/dist/src/engine/session/build_mode.js +800 -0
  9. package/dist/src/engine/session/build_mode.js.map +1 -0
  10. package/dist/src/engine/session/build_mode_helpers.d.ts +6 -0
  11. package/dist/src/engine/session/build_mode_helpers.js +61 -0
  12. package/dist/src/engine/session/build_mode_helpers.js.map +1 -0
  13. package/dist/src/engine/session/leaked_tool_call.d.ts +49 -0
  14. package/dist/src/engine/session/leaked_tool_call.js +174 -0
  15. package/dist/src/engine/session/leaked_tool_call.js.map +1 -0
  16. package/dist/src/engine/session/prompt/bonescript.txt +11 -0
  17. package/dist/src/engine/session/prompt.js +173 -2
  18. package/dist/src/engine/session/prompt.js.map +1 -1
  19. package/dist/src/tui.js +146 -9
  20. package/dist/src/tui.js.map +1 -1
  21. package/package.json +1 -1
  22. package/scripts/debug_extract.js +40 -0
  23. package/scripts/test_build_fallback.js +221 -0
  24. package/scripts/test_build_mode.js +301 -0
  25. package/scripts/test_leaked_tool_call.js +269 -0
  26. package/src/db_adapter.ts +29 -0
  27. package/src/engine/session/build_mode.ts +906 -0
  28. package/src/engine/session/build_mode_helpers.ts +72 -0
  29. package/src/engine/session/leaked_tool_call.ts +166 -0
  30. package/src/engine/session/prompt/bonescript.txt +11 -0
  31. package/src/engine/session/prompt.ts +219 -2
  32. package/src/tui.ts +147 -9
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build_mode.js","sourceRoot":"","sources":["../../../../src/engine/session/build_mode.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,2BAAkC;AAClC,+BAAkC;AAClC,4DAA2D;AAC3D,0EAAgF;AAChF,oEAAiE;AACjE,qCAAwC;AAkDxC,iFAAiF;AAEjF,KAAK,UAAU,SAAS,CAAC,UAAkB;IACzC,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,MAAM,SAAI,CAAC,KAAK,CAAC,gDAAgD,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;QAC3F,MAAM,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC;QACnC,IAAI,CAAC,GAAG;YAAE,OAAO,IAAI,CAAC;QACtB,OAAO,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACzD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,UAAkB,EAAE,KAAiB;IAC5D,6EAA6E;IAC7E,mDAAmD;IACnD,IAAI,CAAC;QACH,MAAM,SAAI,CAAC,KAAK,CACd,+EAA+E,EAC/E,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CACpC,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,IAAI,CAAC;YACH,MAAM,SAAI,CAAC,KAAK,CACd;;;uBAGe,EACf,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CACpC,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;IACZ,CAAC;AACH,CAAC;AAED,SAAS,IAAI,CAAC,UAAkB,EAAE,KAAa,EAAE,IAA6B;IAC5E,IAAA,8BAAkB,EAAC,gBAAgB,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;AAC7E,CAAC;AAED,iFAAiF;AAEjF;;;;GAIG;AACH,KAAK,UAAU,OAAO,CAAI,KAMzB;IACC,MAAM,EAAE,gBAAgB,EAAE,GAAG,wDAAa,sBAAsB,GAAC,CAAC;IAClE,MAAM,KAAK,GAAG,gBAAgB,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;IAElE,MAAM,UAAU,GAAG;QACjB,KAAK,CAAC,MAAM;QACZ,EAAE;QACF,sBAAsB;QACtB,yCAAyC;QACzC,qBAAqB,KAAK,CAAC,WAAW,EAAE;QACxC,sDAAsD;QACtD,wCAAwC;QACxC,gDAAgD;KACjD,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEb,IAAI,CAAC;QACH,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAA,iBAAY,EAAC;YAClC,KAAK;YACL,MAAM,EAAE,UAAU;YAClB,MAAM,EAAE,KAAK,CAAC,IAAI;YAClB,WAAW,EAAE,GAAG;YAChB,SAAS,EAAE,IAAI;SAChB,CAAC,CAAC;QACH,OAAO,cAAc,CAAI,IAAI,CAAC,CAAC;IACjC,CAAC;IAAC,OAAO,CAAM,EAAE,CAAC;QAChB,eAAM,CAAC,KAAK,CAAC,wBAAwB,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QAC7F,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,SAAS,cAAc,CAAI,GAAW;IACpC,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IACtB,uEAAuE;IACvE,IAAI,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,4BAA4B,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAC7D,oBAAoB;IACpB,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACrE,kCAAkC;IAClC,MAAM,KAAK,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC7B,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;QACjB,iBAAiB;QACjB,MAAM,QAAQ,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAChC,IAAI,QAAQ,KAAK,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;QACjC,OAAO,QAAQ,CAAI,eAAe,CAAC,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;IAC7D,CAAC;IACD,OAAO,QAAQ,CAAI,eAAe,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;AAC1D,CAAC;AAED,SAAS,eAAe,CAAC,CAAS,EAAE,KAAa,EAAE,IAAY,EAAE,KAAa;IAC5E,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,KAAK,GAAG,KAAK,CAAC;IAClB,IAAI,MAAM,GAAG,KAAK,CAAC;IACnB,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAChB,IAAI,MAAM,EAAE,CAAC;YAAC,MAAM,GAAG,KAAK,CAAC;YAAC,SAAS;QAAC,CAAC;QACzC,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;YAAC,MAAM,GAAG,IAAI,CAAC;YAAC,SAAS;QAAC,CAAC;QAC7C,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;YAAC,KAAK,GAAG,CAAC,KAAK,CAAC;YAAC,SAAS;QAAC,CAAC;QAC7C,IAAI,KAAK;YAAE,SAAS;QACpB,IAAI,EAAE,KAAK,IAAI;YAAE,KAAK,EAAE,CAAC;aACpB,IAAI,EAAE,KAAK,KAAK,EAAE,CAAC;YACtB,KAAK,EAAE,CAAC;YACR,IAAI,KAAK,KAAK,CAAC;gBAAE,OAAO,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;IACD,OAAO,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,mCAAmC;AAC5D,CAAC;AAED,SAAS,QAAQ,CAAI,CAAS;IAC5B,IAAI,CAAC;QAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAM,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,IAAI,CAAC;IAAC,CAAC;AAC3D,CAAC;AAED,iFAAiF;AAEjF,KAAK,UAAU,YAAY,CAAC,KAAiB,EAAE,KAAqB;IAClE,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,aAAa,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;IAE5D,sEAAsE;IACtE,MAAM,MAAM,GAAG,MAAM,OAAO,CAIzB;QACD,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,MAAM,EAAE;YACN,8CAA8C;YAC9C,sEAAsE;YACtE,6CAA6C;YAC7C,oCAAoC;YACpC,EAAE;YACF,QAAQ;YACR,iDAAiD;YACjD,sDAAsD;YACtD,uGAAuG;SACxG,CAAC,IAAI,CAAC,IAAI,CAAC;QACZ,IAAI,EAAE,iBAAiB,KAAK,CAAC,MAAM,EAAE;QACrC,WAAW,EAAE,mKAAmK;KACjL,CAAC,CAAC;IAEH,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,KAAK,CAAC,KAAK,GAAG,sDAAsD,CAAC;QACrE,KAAK,CAAC,KAAK,GAAG,QAAQ,CAAC;QACvB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,eAAe,EAAE,CAAC;QAChD,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,eAAe,CAAC;QACtC,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,cAAc,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,eAAe,EAAE,CAAC,CAAC;QAC3E,OAAO,KAAK,CAAC;IACf,CAAC;IAED,6BAA6B;IAC7B,KAAK,CAAC,qBAAqB,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1D,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,iBAAiB,EAAE,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;IAC3E,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;GAGG;AACI,KAAK,UAAU,0BAA0B,CAC9C,UAAkB,EAClB,WAAmB,EACnB,QAAgB,EAChB,WAAmB;IAEnB,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,UAAU,CAAC,CAAC;IAC1C,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IAErD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAY;QACtC,QAAQ;QACR,WAAW;QACX,MAAM,EAAE;YACN,gHAAgH;YAChH,qCAAqC;YACrC,EAAE;YACF,0FAA0F;YAC1F,wEAAwE;SACzE,CAAC,IAAI,CAAC,IAAI,CAAC;QACZ,IAAI,EAAE;YACJ,qBAAqB,KAAK,CAAC,eAAe,EAAE;YAC5C,EAAE;YACF,qBAAqB,KAAK,CAAC,qBAAqB,IAAI,EAAE,EAAE;YACxD,EAAE;YACF,oBAAoB,WAAW,EAAE;SAClC,CAAC,IAAI,CAAC,IAAI,CAAC;QACZ,WAAW,EAAE,8FAA8F;KAC5G,CAAC,CAAC;IAEH,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,KAAK,CAAC,KAAK,GAAG,uDAAuD,CAAC;QACtE,KAAK,CAAC,KAAK,GAAG,QAAQ,CAAC;IACzB,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;QACtB,KAAK,CAAC,qBAAqB,GAAG,SAAS,CAAC;QACxC,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,UAAU,EAAE,cAAc,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACvD,CAAC;IAED,MAAM,SAAS,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IACnC,OAAO,KAAK,CAAC;AACf,CAAC;AAzCD,gEAyCC;AAED,iFAAiF;AAEjF,KAAK,UAAU,SAAS,CAAC,KAAiB,EAAE,KAAqB;IAC/D,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;QAClB,KAAK,CAAC,KAAK,GAAG,QAAQ,CAAC;QACvB,KAAK,CAAC,KAAK,GAAG,yBAAyB,CAAC;QACxC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,aAAa,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;IAEzD,MAAM,MAAM,GAAG,MAAM,OAAO,CAA2D;QACrF,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,MAAM,EAAE;YACN,8DAA8D;YAC9D,EAAE;YACF,QAAQ;YACR,mEAAmE;YACnE,8DAA8D;YAC9D,oFAAoF;YACpF,iDAAiD;YACjD,8CAA8C;YAC9C,0EAA0E;SAC3E,CAAC,IAAI,CAAC,IAAI,CAAC;QACZ,IAAI,EAAE;YACJ,SAAS;YACT,SAAS,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE;YAC5B,kBAAkB,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YAC7E,iBAAiB,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YAC3E,wBAAwB,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;SACjF,CAAC,IAAI,CAAC,IAAI,CAAC;QACZ,WAAW,EAAE,2DAA2D;KACzE,CAAC,CAAC;IAEH,IAAI,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzE,KAAK,CAAC,KAAK,GAAG,gCAAgC,CAAC;QAC/C,KAAK,CAAC,KAAK,GAAG,QAAQ,CAAC;QACvB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACrC,EAAE,EAAE,IAAA,SAAI,GAAE;QACV,KAAK,EAAE,CAAC,CAAC,KAAK;QACd,WAAW,EAAE,CAAC,CAAC,WAAW;QAC1B,MAAM,EAAE,SAAS;QACjB,aAAa,EAAE,CAAC;KACjB,CAAC,CAAC,CAAC;IACJ,KAAK,CAAC,KAAK,GAAG,SAAS,CAAC;IACxB,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;IAC7D,OAAO,KAAK,CAAC;AACf,CAAC;AAED,iFAAiF;AAEjF,MAAM,gBAAgB,GAAG,CAAC,CAAC;AAE3B,KAAK,UAAU,YAAY,CAAC,KAAiB,EAAE,KAAqB;IAClE,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,aAAa,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;IAE5D,8EAA8E;IAC9E,wEAAwE;IACxE,wEAAwE;IACxE,kDAAkD;IAClD,IAAI,KAAK,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;QACrC,KAAK,CAAC,YAAY,GAAG,MAAM,mBAAmB,CAAC,KAAK,CAAC,CAAC;QACtD,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC;YACxB,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,iBAAiB,EAAE;gBACxC,OAAO,EAAE,SAAS,KAAK,CAAC,QAAQ,yIAAyI;aAC1K,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,uEAAuE;IACvE,yEAAyE;IACzE,IAAI,4BAA4B,GAAG,CAAC,CAAC;IACrC,MAAM,4BAA4B,GAAG,CAAC,CAAC;IAEvC,OAAO,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,cAAc,EAAE,CAAC;QAC9C,KAAK,CAAC,SAAS,EAAE,CAAC;QAElB,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC;QAC7D,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,wCAAwC;YACxC,KAAK,CAAC,KAAK,GAAG,QAAQ,CAAC;YACvB,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,CAAC,MAAM,GAAG,aAAa,CAAC;QAC5B,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,kBAAkB,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAE3D,IAAI,SAAS,GAAG,KAAK,CAAC;QACtB,IAAI,cAAc,GAAG,CAAC,CAAC;QACvB,IAAI,QAAQ,GAAG,EAAE,CAAC;QAElB,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC;YACvB,wEAAwE;YACxE,MAAM,aAAa,GAAG;gBACpB,cAAc;gBACd,UAAU,IAAI,CAAC,KAAK,EAAE;gBACtB,gBAAgB,IAAI,CAAC,WAAW,EAAE;gBAClC,EAAE;gBACF,8FAA8F;gBAC9F,qDAAqD;gBACrD,eAAe;aAChB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAEb,MAAM,SAAS,GAAG,IAAA,SAAI,GAAE,CAAC;YACzB,MAAM,SAAI,CAAC,KAAK,CACd,qEAAqE,EACrE,CAAC,SAAS,EAAE,KAAK,CAAC,UAAU,CAAC,CAC9B,CAAC;YACF,MAAM,UAAU,GAAG,IAAA,SAAI,GAAE,CAAC;YAC1B,MAAM,SAAI,CAAC,KAAK,CACd,iHAAiH,EACjH,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAC3G,CAAC;YAEF,MAAM,MAAM,GAAG,MAAM,IAAA,qBAAY,EAAC;gBAChC,UAAU,EAAE,KAAK,CAAC,UAAU;gBAC5B,UAAU,EAAE,SAAS;gBACrB,OAAO,EAAE,aAAa;gBACtB,QAAQ,EAAE,KAAK,CAAC,QAAQ;gBACxB,WAAW,EAAE,KAAK,CAAC,WAAW;gBAC9B,UAAU,EAAE,OAAO;aACpB,CAAC,CAAC;YAEH,cAAc,GAAG,MAAM,mBAAmB,CAAC,KAAK,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;YACxE,SAAS,GAAG,MAAM,CAAC,EAAE,IAAI,cAAc,GAAG,CAAC,CAAC;YAC5C,QAAQ,GAAG,MAAM,CAAC,KAAK,IAAI,eAAe,CAAC;QAC7C,CAAC;aAAM,CAAC;YACN,wEAAwE;YACxE,MAAM,QAAQ,GAAG,MAAM,eAAe,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;YAC3D,SAAS,GAAG,QAAQ,CAAC,EAAE,CAAC;YACxB,cAAc,GAAG,QAAQ,CAAC,YAAY,CAAC;YACvC,QAAQ,GAAG,QAAQ,CAAC,KAAK,IAAI,mBAAmB,CAAC;QACnD,CAAC;QAED,IAAI,SAAS,EAAE,CAAC;YACd,IAAI,CAAC,MAAM,GAAG,WAAW,CAAC;YAC1B,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,YAAY;gBAChC,CAAC,CAAC,GAAG,cAAc,oBAAoB;gBACvC,CAAC,CAAC,GAAG,cAAc,+BAA+B,CAAC;YACrD,4BAA4B,GAAG,CAAC,CAAC;YACjC,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,iBAAiB,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5D,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,aAAa,EAAE,CAAC;YACrB,IAAI,IAAI,CAAC,aAAa,IAAI,gBAAgB,EAAE,CAAC;gBAC3C,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC;gBACvB,4BAA4B,EAAE,CAAC;gBAC/B,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,mBAAmB,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;YAChF,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;gBACxB,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,kBAAkB,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;YAC1F,CAAC;QACH,CAAC;QAED,MAAM,SAAS,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QAEzC,2EAA2E;QAC3E,4EAA4E;QAC5E,yBAAyB;QACzB,IAAI,4BAA4B,IAAI,4BAA4B,EAAE,CAAC;YACjE,KAAK,CAAC,KAAK,GAAG,QAAQ,CAAC;YACvB,KAAK,CAAC,KAAK,GAAG,gBAAgB,4BAA4B,wCACxD,KAAK,CAAC,YAAY;gBAChB,CAAC,CAAC,kEAAkE;gBACpE,CAAC,CAAC,yGACN,EAAE,CAAC;YACH,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,iBAAiB,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;YACpE,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,gCAAgC;IAChC,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,CAAC,MAAM,KAAK,aAAa,CAAC,EAAE,CAAC;QAClF,KAAK,CAAC,KAAK,GAAG,QAAQ,CAAC;QACvB,KAAK,CAAC,KAAK,GAAG,wBAAwB,KAAK,CAAC,cAAc,6BAA6B,CAAC;IAC1F,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,KAAK,GAAG,QAAQ,CAAC;IACzB,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,KAAK,UAAU,mBAAmB,CAAC,UAAkB,EAAE,gBAAwB;IAC7E,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,MAAM,SAAI,CAAC,KAAK,CACxB;;2EAEqE,EACrE,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAC/B,CAAC;QACF,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,CAAC;IACX,CAAC;AACH,CAAC;AAED,iFAAiF;AAEjF;;;;;;;GAOG;AACH,KAAK,UAAU,mBAAmB,CAAC,KAAqB;IACtD,IAAI,OAAO,CAAC,GAAG,CAAC,oBAAoB,KAAK,MAAM;QAAE,OAAO,IAAI,CAAC;IAC7D,IAAI,OAAO,CAAC,GAAG,CAAC,oBAAoB,KAAK,OAAO;QAAE,OAAO,KAAK,CAAC;IAC/D,uCAAuC;IACvC,MAAM,EAAE,GAAG,KAAK,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;IACxC,IACE,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC;QACpB,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC;QACpB,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC;QACrB,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC;QACzB,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC;QACvB,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,EACvB,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,0EAA0E;IAC1E,+DAA+D;IAC/D,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,IAAA,SAAI,GAAE,CAAC;QAC1B,MAAM,SAAI,CAAC,KAAK,CACd,qEAAqE,EACrE,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,CAC/B,CAAC;QACF,MAAM,WAAW,GAAG,IAAA,SAAI,GAAE,CAAC;QAC3B,MAAM,WAAW,GACf,4JAA4J,CAAC;QAC/J,MAAM,SAAI,CAAC,KAAK,CACd,iHAAiH,EACjH,CAAC,WAAW,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CACpG,CAAC;QAEF,MAAM,IAAA,qBAAY,EAAC;YACjB,UAAU,EAAE,KAAK,CAAC,UAAU;YAC5B,UAAU,EAAE,UAAU;YACtB,OAAO,EAAE,WAAW;YACpB,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,UAAU,EAAE,OAAO;SACpB,CAAC,CAAC;QAEH,MAAM,KAAK,GAAG,MAAM,mBAAmB,CAAC,KAAK,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QACtE,OAAO,KAAK,GAAG,CAAC,CAAC;IACnB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAQD;;;;;;;;;GASG;AACH,KAAK,UAAU,eAAe,CAC5B,KAAiB,EACjB,IAAe,EACf,KAAqB;IAErB,MAAM,EAAE,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;IAClC,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC7B,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IAE9C,oCAAoC;IACpC,MAAM,UAAU,GAAG,MAAM,SAAI,CAAC,KAAK,CACjC;;qBAEiB,EACjB,CAAC,KAAK,CAAC,UAAU,CAAC,CACnB,CAAC;IACF,MAAM,QAAQ,GACZ,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,SAAS,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,QAAQ,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAEjF,yEAAyE;IACzE,wBAAwB;IACxB,MAAM,aAAa,GAAG,KAAK,CAAC,MAAM;QAChC,CAAC,CAAC;YACE,gBAAgB,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE;YACnC,gBAAgB,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,QAAQ,EAAE;YACjE,uBAAuB,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,eAAe,EAAE;SAC9E,CAAC,IAAI,CAAC,IAAI,CAAC;QACd,CAAC,CAAC,EAAE,CAAC;IAEP,MAAM,cAAc,GAAG,KAAK,CAAC,KAAK;SAC/B,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,WAAW,IAAI,CAAC,CAAC,QAAQ,CAAC;SACrD,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC;SAC1B,IAAI,CAAC,IAAI,CAAC,CAAC;IAEd,MAAM,MAAM,GAAG,MAAM,OAAO,CAGzB;QACD,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,MAAM,EAAE;YACN,wJAAwJ;YACxJ,EAAE;YACF,QAAQ;YACR,0EAA0E;YAC1E,6FAA6F;YAC7F,gFAAgF;YAChF,oGAAoG;YACpG,sEAAsE;SACvE,CAAC,IAAI,CAAC,IAAI,CAAC;QACZ,IAAI,EAAE;YACJ,UAAU;YACV,aAAa;YACb,WAAW;YACX,EAAE;YACF,mBAAmB;YACnB,cAAc,IAAI,YAAY;YAC9B,oBAAoB;YACpB,EAAE;YACF,gBAAgB;YAChB,UAAU,IAAI,CAAC,KAAK,EAAE;YACtB,gBAAgB,IAAI,CAAC,WAAW,EAAE;YAClC,iBAAiB;SAClB,CAAC,IAAI,CAAC,IAAI,CAAC;QACZ,WAAW,EAAE,4EAA4E;KAC1F,CAAC,CAAC;IAEH,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;QACjF,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,EAAE,KAAK,EAAE,wCAAwC,EAAE,CAAC;IACzF,CAAC;IAED,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,cAAc;IACd,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC;QACnC,IAAI,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ;YAAE,SAAS;QAChF,0CAA0C;QAC1C,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;YACrD,MAAM,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YAC9C,SAAS;QACX,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;QAC9C,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;YAC/C,MAAM,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YACxD,SAAS;QACX,CAAC;QACD,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC1D,MAAM,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC/C,YAAY,EAAE,CAAC;YACf,qEAAqE;YACrE,MAAM,MAAM,GAAG,YAAY,IAAA,SAAI,GAAE,EAAE,CAAC;YACpC,MAAM,eAAe,GAAG,wDAAa,4CAA4C,GAAC,CAAC;YACnF,eAAe,CAAC,kBAAkB,CAAC,aAAa,EAAE;gBAChD,IAAI,EAAE,gBAAgB;gBACtB,UAAU,EAAE,KAAK,CAAC,UAAU;gBAC5B,YAAY,EAAE,MAAM;gBACpB,SAAS,EAAE,OAAO;gBAClB,UAAU,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE;aAC/D,CAAC,CAAC;YACH,eAAe,CAAC,kBAAkB,CAAC,aAAa,EAAE;gBAChD,IAAI,EAAE,gBAAgB;gBACtB,UAAU,EAAE,KAAK,CAAC,UAAU;gBAC5B,YAAY,EAAE,MAAM;gBACpB,SAAS,EAAE,OAAO;gBAClB,UAAU,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;gBAC5B,WAAW,EAAE,CAAC;aACf,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,CAAM,EAAE,CAAC;YAChB,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;IAED,eAAe;IACf,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC;QACxC,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE;YAAE,SAAS;QACrD,IAAI,CAAC;YACH,QAAQ,CAAC,GAAG,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,KAAM,EAAE,CAAC,CAAC;YACjE,MAAM,MAAM,GAAG,YAAY,IAAA,SAAI,GAAE,EAAE,CAAC;YACpC,MAAM,eAAe,GAAG,wDAAa,4CAA4C,GAAC,CAAC;YACnF,eAAe,CAAC,kBAAkB,CAAC,aAAa,EAAE;gBAChD,IAAI,EAAE,gBAAgB;gBACtB,UAAU,EAAE,KAAK,CAAC,UAAU;gBAC5B,YAAY,EAAE,MAAM;gBACpB,SAAS,EAAE,MAAM;gBACjB,UAAU,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE;aAC7B,CAAC,CAAC;YACH,eAAe,CAAC,kBAAkB,CAAC,aAAa,EAAE;gBAChD,IAAI,EAAE,gBAAgB;gBACtB,UAAU,EAAE,KAAK,CAAC,UAAU;gBAC5B,YAAY,EAAE,MAAM;gBACpB,SAAS,EAAE,MAAM;gBACjB,UAAU,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE;gBAC5B,WAAW,EAAE,CAAC;aACf,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,CAAM,EAAE,CAAC;YAChB,MAAM,CAAC,IAAI,CAAC,mBAAmB,GAAG,MAAM,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QACvD,CAAC;IACH,CAAC;IAED,OAAO;QACL,EAAE,EAAE,YAAY,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC;QAC1D,YAAY;QACZ,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;KACrD,CAAC;AACJ,CAAC;AAED,iFAAiF;AAEjF,KAAK,UAAU,WAAW,CAAC,KAAiB,EAAE,KAAqB;IACjE,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;QAClB,KAAK,CAAC,KAAK,GAAG,QAAQ,CAAC;QACvB,KAAK,CAAC,KAAK,GAAG,8BAA8B,CAAC;QAC7C,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,aAAa,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;IAE3D,MAAM,OAAO,GAAyB,EAAE,CAAC;IAEzC,KAAK,MAAM,WAAW,IAAI,KAAK,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;QACpD,sEAAsE;QACtE,MAAM,CAAC,GAAG,MAAM,OAAO,CAA2C;YAChE,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,MAAM,EAAE;gBACN,yFAAyF;gBACzF,EAAE;gBACF,QAAQ;gBACR,uDAAuD;gBACvD,yDAAyD;gBACzD,mFAAmF;gBACnF,sDAAsD;aACvD,CAAC,IAAI,CAAC,IAAI,CAAC;YACZ,IAAI,EAAE;gBACJ,gBAAgB,WAAW,EAAE;gBAC7B,EAAE;gBACF,kBAAkB,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE;gBACrC,EAAE;gBACF,wBAAwB,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gBAChF,EAAE;gBACF,oBAAoB,KAAK,CAAC,KAAK;qBAC5B,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,WAAW,CAAC;qBACvC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC;qBAC1B,IAAI,CAAC,IAAI,CAAC,IAAI,QAAQ,EAAE;aAC5B,CAAC,IAAI,CAAC,IAAI,CAAC;YACZ,WAAW,EAAE,8CAA8C;SAC5D,CAAC,CAAC;QAEH,MAAM,MAAM,GAAuB,CAAC;YAClC,CAAC,CAAC,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE;YAC/D,CAAC,CAAC,EAAE,WAAW,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,iCAAiC,EAAE,CAAC;QACnF,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACrB,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,mBAAmB,EAAE,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;IACvH,CAAC;IAED,KAAK,CAAC,oBAAoB,GAAG,OAAO,CAAC;IAErC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAChD,IAAI,KAAK,EAAE,CAAC;QACV,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,YAAY,EAAE,EAAE,aAAa,EAAE,OAAO,EAAE,CAAC,CAAC;IACnE,CAAC;SAAM,CAAC;QACN,4CAA4C;QAC5C,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QACrD,IAAI,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;YAC5C,KAAK,CAAC,KAAK,GAAG,QAAQ,CAAC;YACvB,KAAK,CAAC,KAAK,GAAG,GAAG,QAAQ,CAAC,MAAM,qCAAqC,KAAK,CAAC,cAAc,cAAc,CAAC;QAC1G,CAAC;aAAM,CAAC;YACN,yCAAyC;YACzC,MAAM,OAAO,GAAG,MAAM,OAAO,CAA2D;gBACtF,QAAQ,EAAE,KAAK,CAAC,QAAQ;gBACxB,WAAW,EAAE,KAAK,CAAC,WAAW;gBAC9B,MAAM,EAAE,iFAAiF;gBACzF,IAAI,EAAE;oBACJ,2BAA2B;oBAC3B,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,WAAW,cAAc,CAAC,CAAC,QAAQ,GAAG,CAAC;iBACtE,CAAC,IAAI,CAAC,IAAI,CAAC;gBACZ,WAAW,EAAE,2DAA2D;aACzE,CAAC,CAAC;YAEH,IAAI,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACxE,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;oBAC9B,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC;wBACf,EAAE,EAAE,IAAA,SAAI,GAAE;wBACV,KAAK,EAAE,CAAC,CAAC,KAAK;wBACd,WAAW,EAAE,CAAC,CAAC,WAAW;wBAC1B,MAAM,EAAE,SAAS;wBACjB,aAAa,EAAE,CAAC;qBACjB,CAAC,CAAC;gBACL,CAAC;gBACD,KAAK,CAAC,KAAK,GAAG,SAAS,CAAC;gBACxB,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,cAAc,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;YAC1E,CAAC;iBAAM,CAAC;gBACN,KAAK,CAAC,KAAK,GAAG,QAAQ,CAAC;gBACvB,KAAK,CAAC,KAAK,GAAG,oCAAoC,QAAQ,CAAC,MAAM,8BAA8B,CAAC;YAClG,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,iFAAiF;AAE1E,KAAK,UAAU,YAAY,CAAC,KAAqB;IACtD,IAAI,KAAK,GAAe,CAAC,MAAM,SAAS,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,IAAI;QAC7D,KAAK,EAAE,SAAS;QAChB,eAAe,EAAE,KAAK,CAAC,MAAM;QAC7B,MAAM,EAAE,IAAI;QACZ,KAAK,EAAE,EAAE;QACT,SAAS,EAAE,CAAC;QACZ,cAAc,EAAE,EAAE;KACnB,CAAC;IAEF,6EAA6E;IAC7E,2EAA2E;IAC3E,2BAA2B;IAC3B,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,qBAAqB,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,eAAe,EAAE,CAAC;QACvG,MAAM,IAAI,GAAG,MAAM,0BAA0B,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;QACjH,IAAI,IAAI;YAAE,KAAK,GAAG,IAAI,CAAC;IACzB,CAAC;IAED,6EAA6E;IAC7E,yEAAyE;IACzE,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,OAAO,KAAK,CAAC,KAAK,KAAK,MAAM,IAAI,KAAK,CAAC,KAAK,KAAK,QAAQ,IAAI,MAAM,GAAG,EAAE,EAAE,CAAC;QACzE,MAAM,EAAE,CAAC;QACT,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC;QAE3B,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YAC9B,KAAK,GAAG,MAAM,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YACzC,MAAM,SAAS,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;YACzC,kEAAkE;YAClE,IAAI,KAAK,CAAC,qBAAqB;gBAAE,MAAM;QACzC,CAAC;aAAM,IAAI,KAAK,CAAC,KAAK,KAAK,MAAM,EAAE,CAAC;YAClC,KAAK,GAAG,MAAM,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YACtC,MAAM,SAAS,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QAC3C,CAAC;aAAM,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YACrC,KAAK,GAAG,MAAM,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YACzC,MAAM,SAAS,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QAC3C,CAAC;aAAM,IAAI,KAAK,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;YACpC,KAAK,GAAG,MAAM,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YACxC,MAAM,SAAS,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QAC3C,CAAC;QAED,IAAI,KAAK,CAAC,KAAK,KAAK,MAAM;YAAE,MAAM,CAAC,sBAAsB;IAC3D,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AA7CD,oCA6CC;AAED,iFAAiF;AAEjF;;;;GAIG;AACH,SAAgB,aAAa,CAAC,MAAc;IAC1C,MAAM,CAAC,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;IACtC,IAAI,CAAC,CAAC,MAAM,GAAG,EAAE;QAAE,OAAO,KAAK,CAAC;IAChC,MAAM,QAAQ,GAAG;QACf,2BAA2B;QAC3B,0DAA0D;QAC1D,+CAA+C;QAC/C,+CAA+C;QAC/C,wDAAwD;QACxD,uDAAuD;QACvD,qCAAqC;QACrC,oCAAoC;QACpC,0CAA0C;QAC1C,qCAAqC;QACrC,sBAAsB;QACtB,kEAAkE;QAClE,2EAA2E;QAC3E,8EAA8E;QAC9E,wBAAwB;QACxB,uBAAuB;QACvB,qBAAqB;QACrB,qCAAqC;QACrC,wEAAwE;QACxE,4BAA4B;QAC5B,4BAA4B;QAC5B,yCAAyC;KAC1C,CAAC;IACF,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3C,CAAC;AA5BD,sCA4BC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Provider/model factory used by build_mode.ts for structured-output prompts.
3
+ * Mirrors the factory in prompt.ts so the build orchestrator can issue
4
+ * non-streaming model calls without depending on the streaming agent loop.
5
+ */
6
+ export declare function getLanguageModel(provider_id: string, model_id: string): any;
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+ /**
3
+ * Provider/model factory used by build_mode.ts for structured-output prompts.
4
+ * Mirrors the factory in prompt.ts so the build orchestrator can issue
5
+ * non-streaming model calls without depending on the streaming agent loop.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.getLanguageModel = void 0;
9
+ const openai_1 = require("@ai-sdk/openai");
10
+ const anthropic_1 = require("@ai-sdk/anthropic");
11
+ const google_1 = require("@ai-sdk/google");
12
+ function getLanguageModel(provider_id, model_id) {
13
+ const pid = provider_id.toLowerCase();
14
+ const resolvedProvider = pid === "local"
15
+ ? (process.env.DEFAULT_PROVIDER || "openai_compatible").toLowerCase()
16
+ : pid;
17
+ const resolvedModel = pid === "local"
18
+ ? (process.env.DEFAULT_MODEL || model_id)
19
+ : model_id;
20
+ const apiKey = (process.env[`${resolvedProvider.toUpperCase()}_API_KEY`] ||
21
+ process.env.OPENAI_API_KEY ||
22
+ "not-needed");
23
+ const baseUrl = (process.env[`${resolvedProvider.toUpperCase()}_BASE_URL`] ||
24
+ process.env.OPENAI_BASE_URL);
25
+ switch (resolvedProvider) {
26
+ case "anthropic":
27
+ return (0, anthropic_1.createAnthropic)({ apiKey, baseURL: baseUrl })(resolvedModel);
28
+ case "google":
29
+ return (0, google_1.createGoogleGenerativeAI)({ apiKey })(resolvedModel);
30
+ case "groq": {
31
+ const { createGroq } = require("@ai-sdk/groq");
32
+ return createGroq({ apiKey: process.env.GROQ_API_KEY || apiKey })(resolvedModel);
33
+ }
34
+ case "cerebras": {
35
+ const { createCerebras } = require("@ai-sdk/cerebras");
36
+ return createCerebras({ apiKey: process.env.CEREBRAS_API_KEY || apiKey })(resolvedModel);
37
+ }
38
+ case "deepseek":
39
+ return (0, openai_1.createOpenAI)({
40
+ apiKey: process.env.DEEPSEEK_API_KEY || apiKey,
41
+ baseURL: "https://api.deepseek.com/v1",
42
+ })(resolvedModel);
43
+ case "openrouter": {
44
+ const { createOpenRouter } = require("@openrouter/ai-sdk-provider");
45
+ return createOpenRouter({
46
+ apiKey: process.env.OPENROUTER_API_KEY || apiKey,
47
+ })(resolvedModel);
48
+ }
49
+ case "ollama":
50
+ return (0, openai_1.createOpenAI)({
51
+ apiKey: "ollama",
52
+ baseURL: process.env.OLLAMA_BASE_URL || "http://localhost:11434/v1",
53
+ })(resolvedModel);
54
+ case "openai":
55
+ case "openai_compatible":
56
+ default:
57
+ return (0, openai_1.createOpenAI)({ apiKey, baseURL: baseUrl })(resolvedModel);
58
+ }
59
+ }
60
+ exports.getLanguageModel = getLanguageModel;
61
+ //# sourceMappingURL=build_mode_helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build_mode_helpers.js","sourceRoot":"","sources":["../../../../src/engine/session/build_mode_helpers.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAEH,2CAA8C;AAC9C,iDAAoD;AACpD,2CAA0D;AAE1D,SAAgB,gBAAgB,CAAC,WAAmB,EAAE,QAAgB;IACpE,MAAM,GAAG,GAAG,WAAW,CAAC,WAAW,EAAE,CAAC;IAEtC,MAAM,gBAAgB,GAAG,GAAG,KAAK,OAAO;QACtC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,mBAAmB,CAAC,CAAC,WAAW,EAAE;QACrE,CAAC,CAAC,GAAG,CAAC;IACR,MAAM,aAAa,GAAG,GAAG,KAAK,OAAO;QACnC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,QAAQ,CAAC;QACzC,CAAC,CAAC,QAAQ,CAAC;IAEb,MAAM,MAAM,GAAG,CACb,OAAO,CAAC,GAAG,CAAC,GAAG,gBAAgB,CAAC,WAAW,EAAE,UAAU,CAAC;QACxD,OAAO,CAAC,GAAG,CAAC,cAAc;QAC1B,YAAY,CACb,CAAC;IACF,MAAM,OAAO,GAAG,CACd,OAAO,CAAC,GAAG,CAAC,GAAG,gBAAgB,CAAC,WAAW,EAAE,WAAW,CAAC;QACzD,OAAO,CAAC,GAAG,CAAC,eAAe,CAC5B,CAAC;IAEF,QAAQ,gBAAgB,EAAE,CAAC;QACzB,KAAK,WAAW;YACd,OAAO,IAAA,2BAAe,EAAC,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,aAAa,CAAC,CAAC;QAEtE,KAAK,QAAQ;YACX,OAAO,IAAA,iCAAwB,EAAC,EAAE,MAAM,EAAE,CAAC,CAAC,aAAa,CAAC,CAAC;QAE7D,KAAK,MAAM,CAAC,CAAC,CAAC;YACZ,MAAM,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;YAC/C,OAAO,UAAU,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,MAAM,EAAE,CAAC,CAAC,aAAa,CAAC,CAAC;QACnF,CAAC;QAED,KAAK,UAAU,CAAC,CAAC,CAAC;YAChB,MAAM,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;YACvD,OAAO,cAAc,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,MAAM,EAAE,CAAC,CAAC,aAAa,CAAC,CAAC;QAC3F,CAAC;QAED,KAAK,UAAU;YACb,OAAO,IAAA,qBAAY,EAAC;gBAClB,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,MAAM;gBAC9C,OAAO,EAAE,6BAA6B;aACvC,CAAC,CAAC,aAAa,CAAC,CAAC;QAEpB,KAAK,YAAY,CAAC,CAAC,CAAC;YAClB,MAAM,EAAE,gBAAgB,EAAE,GAAG,OAAO,CAAC,6BAA6B,CAAC,CAAC;YACpE,OAAO,gBAAgB,CAAC;gBACtB,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,MAAM;aACjD,CAAC,CAAC,aAAa,CAAC,CAAC;QACpB,CAAC;QAED,KAAK,QAAQ;YACX,OAAO,IAAA,qBAAY,EAAC;gBAClB,MAAM,EAAE,QAAQ;gBAChB,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,2BAA2B;aACpE,CAAC,CAAC,aAAa,CAAC,CAAC;QAEpB,KAAK,QAAQ,CAAC;QACd,KAAK,mBAAmB,CAAC;QACzB;YACE,OAAO,IAAA,qBAAY,EAAC,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,aAAa,CAAC,CAAC;IACrE,CAAC;AACH,CAAC;AA7DD,4CA6DC"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Pure, side-effect-free parser for leaked tool-call markers.
3
+ *
4
+ * Some local models (gemma, qwen, llama variants) emit their internal
5
+ * tool-call markers as raw text instead of producing structured tool_call
6
+ * events. The AI SDK's parser misses these, so the model's prose appears in
7
+ * the output but no tool ever runs.
8
+ *
9
+ * This module recovers the intended call by pattern-matching the leaked text.
10
+ * No DB, no network, no global state — pure functions only, fully testable.
11
+ *
12
+ * Patterns recognized (across multiple template formats):
13
+ * <|tool_call|>{"name":"write","arguments":{...}}<|/tool_call|>
14
+ * <|tool_call>name:write{...args...}<tool_call|>
15
+ * <tool_call>{"name":"write","arguments":{...}}</tool_call>
16
+ * <function_call>{"name":"write","arguments":{...}}</function_call>
17
+ * ```tool_code\nwrite(path="x", content="y")\n```
18
+ * <|python_tag|>write({"path": "x"})<|/python_tag|>
19
+ */
20
+ export interface LeakedToolCall {
21
+ toolName: string;
22
+ toolInput: Record<string, any>;
23
+ startIndex: number;
24
+ endIndex: number;
25
+ }
26
+ export declare function extractLeakedToolCall(text: string): LeakedToolCall | null;
27
+ /**
28
+ * Parse the body of a leaked tool-call block. Tries multiple formats:
29
+ * - JSON: {"name": "write", "arguments": {...}} or {"tool":"write","args":{...}}
30
+ * - Function-call style: write(path="x", content="y")
31
+ * - Pseudo-syntax: call:write{path:"x"}
32
+ */
33
+ export declare function parseLeakedBody(body: string): {
34
+ toolName: string;
35
+ toolInput: Record<string, any>;
36
+ } | null;
37
+ export declare function safeParseJson(s: string): any | null;
38
+ /**
39
+ * Parse Python-style kwargs from a function-call body:
40
+ * path="x", content="y", count=42
41
+ * Strips `<|"|>` style escape markers some templates inject.
42
+ */
43
+ export declare function parseKwargs(s: string): Record<string, any> | null;
44
+ /**
45
+ * Parse a loose key:value object body (no surrounding braces, no enforced
46
+ * JSON quoting). Used for pseudo-syntax fallbacks like:
47
+ * file_path:<|"|>medieval_market.bone<|"|>
48
+ */
49
+ export declare function parseLooseObject(s: string): Record<string, any> | null;
@@ -0,0 +1,174 @@
1
+ "use strict";
2
+ /**
3
+ * Pure, side-effect-free parser for leaked tool-call markers.
4
+ *
5
+ * Some local models (gemma, qwen, llama variants) emit their internal
6
+ * tool-call markers as raw text instead of producing structured tool_call
7
+ * events. The AI SDK's parser misses these, so the model's prose appears in
8
+ * the output but no tool ever runs.
9
+ *
10
+ * This module recovers the intended call by pattern-matching the leaked text.
11
+ * No DB, no network, no global state — pure functions only, fully testable.
12
+ *
13
+ * Patterns recognized (across multiple template formats):
14
+ * <|tool_call|>{"name":"write","arguments":{...}}<|/tool_call|>
15
+ * <|tool_call>name:write{...args...}<tool_call|>
16
+ * <tool_call>{"name":"write","arguments":{...}}</tool_call>
17
+ * <function_call>{"name":"write","arguments":{...}}</function_call>
18
+ * ```tool_code\nwrite(path="x", content="y")\n```
19
+ * <|python_tag|>write({"path": "x"})<|/python_tag|>
20
+ */
21
+ Object.defineProperty(exports, "__esModule", { value: true });
22
+ exports.parseLooseObject = exports.parseKwargs = exports.safeParseJson = exports.parseLeakedBody = exports.extractLeakedToolCall = void 0;
23
+ function extractLeakedToolCall(text) {
24
+ // Pattern 1: <|tool_call|>...<|/tool_call|> or <tool_call>...</tool_call>
25
+ const blockPatterns = [
26
+ /<\|tool_call\|?>([\s\S]*?)<\|?\/?tool_call\|?>/i,
27
+ /<tool_call>([\s\S]*?)<\/?tool_call>/i,
28
+ /<function_call>([\s\S]*?)<\/?function_call>/i,
29
+ /<\|python_tag\|>([\s\S]*?)<\|?\/?python_tag\|?>/i,
30
+ ];
31
+ for (const re of blockPatterns) {
32
+ const m = text.match(re);
33
+ if (!m || m.index === undefined)
34
+ continue;
35
+ const body = m[1];
36
+ const parsed = parseLeakedBody(body);
37
+ if (parsed) {
38
+ return { ...parsed, startIndex: m.index, endIndex: m.index + m[0].length };
39
+ }
40
+ }
41
+ // Pattern 2: ```tool_code ... ```
42
+ const codeBlock = text.match(/```(?:tool_code|tool_call|function|python)\s*\n([\s\S]*?)\n```/i);
43
+ if (codeBlock && codeBlock.index !== undefined) {
44
+ const parsed = parseLeakedBody(codeBlock[1]);
45
+ if (parsed) {
46
+ return { ...parsed, startIndex: codeBlock.index, endIndex: codeBlock.index + codeBlock[0].length };
47
+ }
48
+ }
49
+ return null;
50
+ }
51
+ exports.extractLeakedToolCall = extractLeakedToolCall;
52
+ /**
53
+ * Parse the body of a leaked tool-call block. Tries multiple formats:
54
+ * - JSON: {"name": "write", "arguments": {...}} or {"tool":"write","args":{...}}
55
+ * - Function-call style: write(path="x", content="y")
56
+ * - Pseudo-syntax: call:write{path:"x"}
57
+ */
58
+ function parseLeakedBody(body) {
59
+ if (!body)
60
+ return null;
61
+ const trimmed = body.trim();
62
+ // Try JSON first
63
+ try {
64
+ const json = JSON.parse(trimmed);
65
+ if (json && typeof json === "object") {
66
+ const name = json.name || json.tool || json.tool_name || json.function;
67
+ const args = json.arguments || json.args || json.parameters || json.input || {};
68
+ if (typeof name === "string" && name.length > 0) {
69
+ const parsedArgs = typeof args === "string" ? safeParseJson(args) : args;
70
+ return { toolName: name, toolInput: parsedArgs ?? {} };
71
+ }
72
+ }
73
+ }
74
+ catch { }
75
+ // Try function-call style: name(arg1=val1, arg2="val2")
76
+ const fnMatch = trimmed.match(/^([a-zA-Z_][\w]*)\s*\(([\s\S]*)\)\s*$/);
77
+ if (fnMatch) {
78
+ const toolName = fnMatch[1];
79
+ const argsStr = fnMatch[2];
80
+ // Try JSON-shaped arg first: write({"path": "x"})
81
+ const innerJson = safeParseJson(argsStr);
82
+ if (innerJson && typeof innerJson === "object" && !Array.isArray(innerJson)) {
83
+ return { toolName, toolInput: innerJson };
84
+ }
85
+ const toolInput = parseKwargs(argsStr);
86
+ if (toolInput)
87
+ return { toolName, toolInput };
88
+ }
89
+ // Try pseudo-syntax: call:name{key:"val", ...} or name:foo{...}
90
+ const callMatch = trimmed.match(/(?:call:|name:|tool:|function:)([a-zA-Z_][\w]*)\s*\{([\s\S]*)\}\s*/i);
91
+ if (callMatch) {
92
+ const toolName = callMatch[1];
93
+ const innerJson = "{" + callMatch[2] + "}";
94
+ const toolInput = safeParseJson(innerJson) || parseLooseObject(callMatch[2]);
95
+ if (toolInput)
96
+ return { toolName, toolInput };
97
+ }
98
+ return null;
99
+ }
100
+ exports.parseLeakedBody = parseLeakedBody;
101
+ function safeParseJson(s) {
102
+ try {
103
+ return JSON.parse(s);
104
+ }
105
+ catch {
106
+ return null;
107
+ }
108
+ }
109
+ exports.safeParseJson = safeParseJson;
110
+ /**
111
+ * Parse Python-style kwargs from a function-call body:
112
+ * path="x", content="y", count=42
113
+ * Strips `<|"|>` style escape markers some templates inject.
114
+ */
115
+ function parseKwargs(s) {
116
+ if (!s.trim())
117
+ return {};
118
+ const cleaned = s.replace(/<\|"\|>/g, '"').replace(/<\|'\|>/g, "'");
119
+ const result = {};
120
+ const re = /([a-zA-Z_][\w]*)\s*=\s*("([^"\\]|\\.)*"|'([^'\\]|\\.)*'|-?\d+(?:\.\d+)?|true|false|null)/g;
121
+ let m;
122
+ let matched = false;
123
+ while ((m = re.exec(cleaned)) !== null) {
124
+ matched = true;
125
+ const key = m[1];
126
+ const raw = m[2];
127
+ let value = raw;
128
+ if (raw === "true")
129
+ value = true;
130
+ else if (raw === "false")
131
+ value = false;
132
+ else if (raw === "null")
133
+ value = null;
134
+ else if (/^-?\d/.test(raw))
135
+ value = parseFloat(raw);
136
+ else
137
+ value = raw.slice(1, -1).replace(/\\(.)/g, "$1");
138
+ result[key] = value;
139
+ }
140
+ return matched ? result : null;
141
+ }
142
+ exports.parseKwargs = parseKwargs;
143
+ /**
144
+ * Parse a loose key:value object body (no surrounding braces, no enforced
145
+ * JSON quoting). Used for pseudo-syntax fallbacks like:
146
+ * file_path:<|"|>medieval_market.bone<|"|>
147
+ */
148
+ function parseLooseObject(s) {
149
+ const cleaned = s.replace(/<\|"\|>/g, '"').replace(/<\|'\|>/g, "'");
150
+ const result = {};
151
+ const re = /([a-zA-Z_][\w]*)\s*[:=]\s*("([^"\\]|\\.)*"|'([^'\\]|\\.)*'|-?\d+(?:\.\d+)?|true|false|null|[^\s,}]+)/g;
152
+ let m;
153
+ let matched = false;
154
+ while ((m = re.exec(cleaned)) !== null) {
155
+ matched = true;
156
+ const key = m[1];
157
+ const raw = m[2];
158
+ let value = raw;
159
+ if (raw === "true")
160
+ value = true;
161
+ else if (raw === "false")
162
+ value = false;
163
+ else if (raw === "null")
164
+ value = null;
165
+ else if (/^-?\d/.test(raw))
166
+ value = parseFloat(raw);
167
+ else if (raw.startsWith('"') || raw.startsWith("'"))
168
+ value = raw.slice(1, -1).replace(/\\(.)/g, "$1");
169
+ result[key] = value;
170
+ }
171
+ return matched ? result : null;
172
+ }
173
+ exports.parseLooseObject = parseLooseObject;
174
+ //# sourceMappingURL=leaked_tool_call.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"leaked_tool_call.js","sourceRoot":"","sources":["../../../../src/engine/session/leaked_tool_call.ts"],"names":[],"mappings":"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"}
@@ -31,6 +31,17 @@ Use plain Python/TypeScript/etc. only for:
31
31
 
32
32
  If the request is ambiguous (e.g. "a 2D market simulation"), ask the user: "Is this a self-contained simulation script (plain code) or a backend service with persistence (BoneScript)?"
33
33
 
34
+ ## Build mode
35
+
36
+ When the user starts a session with a project-scoped prompt ("build me X", "create a full Y"), BoneCode runs you in **build mode**. Build mode is a state machine: clarify → plan → execute → verify → done. You will receive structured prompts at each stage. Specifically:
37
+
38
+ - **Clarify stage**: you'll be asked to either propose a design document (JSON) or ask 1-3 questions. Be concrete. Don't ramble.
39
+ - **Plan stage**: you'll be asked for a JSON todo list. Each todo must be a single concrete file action.
40
+ - **Execute stage**: you'll receive one todo at a time. **YOU MUST CALL TOOLS** — `write`, `edit`, `bash`. Prose-only responses are detected and rejected. The system will inject a reminder if you describe edits without calling tools.
41
+ - **Verify stage**: for each requirement, you'll be asked yes/no whether it's satisfied. Be honest. If a requirement is not yet met, say so — the orchestrator will create fix-up tasks.
42
+
43
+ The user can resume a build session at any time. Build state is persisted.
44
+
34
45
  ## BoneScript syntax — authoritative reference
35
46
 
36
47
  ### `system` block
@@ -66,6 +66,7 @@ const compaction_logic_1 = require("./compaction_logic");
66
66
  const system_prompt_1 = require("./system_prompt");
67
67
  const instruction_loader_1 = require("./instruction_loader");
68
68
  const tool_registry_1 = require("./tool_registry");
69
+ const leaked_tool_call_1 = require("./leaked_tool_call");
69
70
  const DOOM_LOOP_THRESHOLD = 3;
70
71
  const MAX_TURNS = 20; // safety cap — most tasks complete in 1-3 turns
71
72
  // ─── Main Agent Loop ──────────────────────────────────────────────────────────
@@ -85,6 +86,7 @@ async function runAgentLoop(input) {
85
86
  await events_1.eventBus.publish("SessionStateChanged", { session_id, from_state: session.state, to_state: "busy", changed_at: new Date().toISOString() }, "AgentLoop");
86
87
  const stats = { tokens_in: 0, tokens_out: 0, cost: 0, compacted: false };
87
88
  let turn = 0;
89
+ let lazyReminderSent = false;
88
90
  let lastFinishReason = "unknown";
89
91
  try {
90
92
  // ── Main multi-turn loop ──────────────────────────────────────────────────
@@ -146,6 +148,30 @@ async function runAgentLoop(input) {
146
148
  // 3. "content-filter" = blocked — stop
147
149
  // 4. "tool-calls" with no actual tool calls = model confused — stop
148
150
  const terminalReasons = new Set(["stop", "length", "content-filter", "end-turn"]);
151
+ // Detect "lazy assistant" — the model claims it's editing/creating files
152
+ // in prose but never actually called a tool. Common with non-tool-tuned
153
+ // local models. Once per session, push a synthetic reminder and re-run.
154
+ const lazyAssistant = !result.has_tool_calls &&
155
+ Object.keys(tools).length > 0 &&
156
+ !lazyReminderSent &&
157
+ await wasLazyResponse(session_id, assistantMsgId);
158
+ if (lazyAssistant) {
159
+ lazyReminderSent = true;
160
+ (0, websocket_1.broadcastToChannel)("session_events", {
161
+ type: "session.warning",
162
+ session_id,
163
+ message: "Model claimed it would edit files but didn't call any tools. Reminding it to actually use the tools.",
164
+ });
165
+ // Insert a synthetic user reminder so the next turn sees it
166
+ const reminderMsgId = (0, uuid_1.v4)();
167
+ await db_1.pool.query(`INSERT INTO messages (id, session_id, role) VALUES ($1, $2, 'user')`, [reminderMsgId, session_id]);
168
+ const reminderPartId = (0, uuid_1.v4)();
169
+ await db_1.pool.query(`INSERT INTO parts (id, message_id, session_id, part_type, data, order_index) VALUES ($1, $2, $3, 'text', $4, 0)`, [reminderPartId, reminderMsgId, session_id, JSON.stringify({
170
+ text: "<system-reminder>You described file changes but did not actually invoke any tools. The user cannot see prose descriptions of edits — only real tool calls produce file changes. Call the `write` or `edit` tool now to perform the actions you described. Do not respond with prose; emit a tool call.</system-reminder>",
171
+ synthetic: true,
172
+ })]);
173
+ continue; // re-run the loop with the reminder appended
174
+ }
149
175
  if (terminalReasons.has(result.finish_reason) && !result.has_tool_calls) {
150
176
  break;
151
177
  }
@@ -185,9 +211,19 @@ async function streamWithRetry(ctx) {
185
211
  return await streamOnce(currentCtx);
186
212
  }
187
213
  catch (e) {
188
- // On Bad Request with tools, retry without tools
214
+ // On Bad Request with tools, retry without tools BUT log it visibly so
215
+ // the user knows their model can't do tool calls — otherwise they get
216
+ // pure-prose responses with no real edits.
189
217
  if (e.message?.includes("Bad Request") && Object.keys(currentCtx.tools).length > 0 && attempt === 0) {
190
- // Local model doesn't support function calling — silently retry without tools
218
+ logger_1.logger.error("model_tools_unsupported", {
219
+ event: "tools_stripped",
220
+ metadata: { model: ctx.model_id, provider: ctx.provider_id, error: e.message },
221
+ });
222
+ (0, websocket_1.broadcastToChannel)("session_events", {
223
+ type: "session.warning",
224
+ session_id: ctx.session_id,
225
+ message: `Model ${ctx.model_id} rejected tool definitions — running without tools (no file edits possible). Set MODEL_SUPPORTS_TOOLS=false to suppress this warning, or use a tool-capable model.`,
226
+ });
191
227
  currentCtx = { ...currentCtx, tools: {} };
192
228
  attempt++;
193
229
  continue;
@@ -248,6 +284,29 @@ async function streamOnce(ctx) {
248
284
  await db_1.pool.query(`INSERT INTO parts (id, message_id, session_id, part_type, data, order_index) VALUES ($1, $2, $3, 'text', $4, 0)`, [currentTextPartId, assistantMsgId, session_id, JSON.stringify({ text: "" })]);
249
285
  }
250
286
  currentTextContent += text;
287
+ // Detect models leaking their internal tool-call markers as raw text
288
+ // (gemma, qwen, llama variants do this when the tokenizer template
289
+ // doesn't match the AI SDK's expected format). When we find a complete
290
+ // leaked call, synthesize a real tool execution.
291
+ const leak = (0, leaked_tool_call_1.extractLeakedToolCall)(currentTextContent);
292
+ if (leak) {
293
+ // Strip the leaked markers from the displayed text part
294
+ currentTextContent = currentTextContent.slice(0, leak.startIndex) +
295
+ currentTextContent.slice(leak.endIndex);
296
+ await db_1.pool.query(`UPDATE parts SET data = $2, updated_at = NOW() WHERE id = $1`, [currentTextPartId, JSON.stringify({ text: currentTextContent })]);
297
+ // Execute the synthesized tool call directly via the registry
298
+ await executeSynthesizedToolCall({
299
+ session_id,
300
+ agentId: ctx.agentId,
301
+ assistantMsgId,
302
+ toolName: leak.toolName,
303
+ toolInput: leak.toolInput,
304
+ tools,
305
+ });
306
+ // Mark the turn as having tool calls so the loop continues
307
+ hasToolCalls = true;
308
+ break;
309
+ }
251
310
  // Broadcast delta to WebSocket part_stream for live streaming
252
311
  (0, websocket_1.broadcastToChannel)("part_stream", {
253
312
  type: "part.delta",
@@ -406,6 +465,26 @@ async function runCompaction(session_id, agentId, model_id, provider_id, message
406
465
  }
407
466
  }
408
467
  // ─── Message History Builder ──────────────────────────────────────────────────
468
+ // Detect a "lazy" response — assistant text says it will edit/create files
469
+ // but no tool was actually invoked. Common with non-tool-tuned local models.
470
+ async function wasLazyResponse(session_id, messageId) {
471
+ const r = await db_1.pool.query(`SELECT data FROM parts WHERE message_id = $1 AND part_type = 'text' ORDER BY order_index ASC`, [messageId]);
472
+ const text = r.rows.map((row) => row.data?.text || "").join(" ").toLowerCase();
473
+ if (!text || text.length < 30)
474
+ return false;
475
+ // Phrases that imply the model is committing to a file edit it didn't make
476
+ const editIntentPatterns = [
477
+ /\bi['']ll\s+(create|write|update|edit|modify|add|implement|generate)\b/,
478
+ /\bi['']m\s+(creating|writing|updating|editing|modifying|adding|implementing|generating)\b/,
479
+ /\b(creating|writing|updating|editing|generating)\s+(?:the\s+)?(?:file|files|spec)\b/,
480
+ /\bi\s+(?:will|am\s+going\s+to)\s+(create|write|update|edit|implement|generate)\b/,
481
+ /\blet\s+me\s+(create|write|update|edit|implement)\b/,
482
+ /\bhere['']s\s+(?:the\s+)?(?:updated|new)\s+(?:file|version|content)\b/,
483
+ /\.(bone|ts|tsx|js|jsx|py|md|json|yaml|yml|sql|sh|html|css)\b.*\b(updated|created|written|modified|added)\b/,
484
+ /\b(updated|created|written|modified|added)\b.*\.(bone|ts|tsx|js|jsx|py|md|json|yaml|yml|sql|sh|html|css)\b/,
485
+ ];
486
+ return editIntentPatterns.some(re => re.test(text));
487
+ }
409
488
  async function loadMessageHistory(session_id) {
410
489
  const result = await db_1.pool.query(`SELECT m.id, m.role, m.model_id, m.provider_id, m.tokens_input, m.tokens_output,
411
490
  json_agg(p.* ORDER BY p.order_index, p.created_at) FILTER (WHERE p.id IS NOT NULL) AS parts
@@ -623,4 +702,96 @@ function supportsTools(model_id) {
623
702
  // Default: try with tools, fall back gracefully on error
624
703
  return true;
625
704
  }
705
+ // ─── Synthesized tool-call execution ──────────────────────────────────────────
706
+ /**
707
+ * Execute a synthesized tool call when we detect a leak. Mirrors the work the
708
+ * AI SDK would normally do: insert a tool_invocation part, broadcast events,
709
+ * run the registered tool's execute() function.
710
+ */
711
+ async function executeSynthesizedToolCall(input) {
712
+ const { session_id, agentId, assistantMsgId, toolName, toolInput, tools } = input;
713
+ // Map common aliases (write_file → write, edit_file → edit, etc.)
714
+ const aliases = {
715
+ write_file: "write",
716
+ edit_file: "edit",
717
+ read_file: "read",
718
+ run_command: "bash",
719
+ shell: "bash",
720
+ search_files: "grep",
721
+ };
722
+ const resolvedName = aliases[toolName] || toolName;
723
+ const tool = tools[resolvedName];
724
+ if (!tool || !tool.execute) {
725
+ logger_1.logger.warn("synthesized_tool_unknown", { event: "leak", metadata: { toolName, resolvedName } });
726
+ return;
727
+ }
728
+ const callId = (0, uuid_1.v4)();
729
+ // Persist the tool call record
730
+ try {
731
+ await db_1.pool.query(`INSERT INTO tool_calls (id, session_id, agent_id, tool_name, tool_input, state) VALUES ($1, $2, $3, $4, $5, 'running')`, [callId, session_id, agentId, resolvedName, JSON.stringify(toolInput)]);
732
+ }
733
+ catch { }
734
+ // Broadcast tool.requested so the TUI shows "← Edit foo.bone"
735
+ (0, websocket_1.broadcastToChannel)("part_stream", {
736
+ type: "tool.requested",
737
+ session_id,
738
+ tool_call_id: callId,
739
+ tool_name: resolvedName,
740
+ tool_input: toolInput,
741
+ });
742
+ // Persist as a tool_invocation part on the assistant message
743
+ const partId = (0, uuid_1.v4)();
744
+ await db_1.pool.query(`INSERT INTO parts (id, message_id, session_id, part_type, data, order_index) VALUES ($1, $2, $3, 'tool_invocation', $4, 0)`, [partId, assistantMsgId, session_id, JSON.stringify({ tool_call_id: callId, tool_name: resolvedName, args: toolInput, state: "running" })]);
745
+ // Run the actual tool — emit ToolCallRequested so the same machinery as a
746
+ // real tool call kicks in.
747
+ await events_1.eventBus.publish("ToolCallRequested", {
748
+ tool_call_id: callId,
749
+ session_id,
750
+ agent_id: agentId,
751
+ tool_name: resolvedName,
752
+ tool_input: toolInput,
753
+ requested_at: new Date().toISOString(),
754
+ }, "AgentLoop").catch(() => { });
755
+ const startMs = Date.now();
756
+ let success = true;
757
+ let output = "";
758
+ try {
759
+ const result = await tool.execute(toolInput, { toolCallId: callId });
760
+ output = typeof result === "string" ? result : (result?.output || "");
761
+ }
762
+ catch (e) {
763
+ success = false;
764
+ output = e?.message || "tool execution failed";
765
+ }
766
+ // Update the part with the result
767
+ const durationMs = Date.now() - startMs;
768
+ try {
769
+ await db_1.pool.query(`UPDATE parts SET data = $2, updated_at = NOW() WHERE id = $1`, [partId, JSON.stringify({
770
+ tool_call_id: callId,
771
+ tool_name: resolvedName,
772
+ args: toolInput,
773
+ state: success ? "done" : "failed",
774
+ output,
775
+ })]);
776
+ await db_1.pool.query(`UPDATE tool_calls SET state = $2, tool_output = $3, duration_ms = $4, updated_at = NOW() WHERE id = $1`, [callId, success ? "done" : "failed", JSON.stringify({ output }), durationMs]);
777
+ }
778
+ catch { }
779
+ // Broadcast completion
780
+ (0, websocket_1.broadcastToChannel)("part_stream", {
781
+ type: success ? "tool.completed" : "tool.failed",
782
+ session_id,
783
+ tool_call_id: callId,
784
+ tool_name: resolvedName,
785
+ tool_input: toolInput,
786
+ duration_ms: durationMs,
787
+ ...(success ? {} : { error: output }),
788
+ });
789
+ await events_1.eventBus.publish("ToolCallCompleted", {
790
+ tool_call_id: callId,
791
+ session_id,
792
+ tool_name: resolvedName,
793
+ duration_ms: durationMs,
794
+ completed_at: new Date().toISOString(),
795
+ }, "AgentLoop").catch(() => { });
796
+ }
626
797
  //# sourceMappingURL=prompt.js.map