pulseed 0.1.0 → 0.1.1

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 (82) hide show
  1. package/README.md +9 -62
  2. package/dist/cli/commands/suggest-normalizer.d.ts.map +1 -1
  3. package/dist/cli/commands/suggest-normalizer.js +5 -0
  4. package/dist/cli/commands/suggest-normalizer.js.map +1 -1
  5. package/dist/cli/commands/suggest.js +1 -1
  6. package/dist/cli/commands/task-read.d.ts +4 -0
  7. package/dist/cli/commands/task-read.d.ts.map +1 -0
  8. package/dist/cli/commands/task-read.js +195 -0
  9. package/dist/cli/commands/task-read.js.map +1 -0
  10. package/dist/cli/setup.js +1 -1
  11. package/dist/cli/setup.js.map +1 -1
  12. package/dist/cli-runner.d.ts.map +1 -1
  13. package/dist/cli-runner.js +19 -0
  14. package/dist/cli-runner.js.map +1 -1
  15. package/dist/execution/reflection-generator.d.ts +1 -1
  16. package/dist/execution/reflection-generator.d.ts.map +1 -1
  17. package/dist/execution/reflection-generator.js +3 -3
  18. package/dist/execution/reflection-generator.js.map +1 -1
  19. package/dist/execution/task-executor.d.ts.map +1 -1
  20. package/dist/execution/task-executor.js +1 -0
  21. package/dist/execution/task-executor.js.map +1 -1
  22. package/dist/execution/task-generation.js +1 -1
  23. package/dist/execution/task-generation.js.map +1 -1
  24. package/dist/execution/task-lifecycle.js +1 -1
  25. package/dist/execution/task-lifecycle.js.map +1 -1
  26. package/dist/execution/task-verifier.d.ts.map +1 -1
  27. package/dist/execution/task-verifier.js +11 -2
  28. package/dist/execution/task-verifier.js.map +1 -1
  29. package/dist/goal/goal-dependency-graph.d.ts +6 -1
  30. package/dist/goal/goal-dependency-graph.d.ts.map +1 -1
  31. package/dist/goal/goal-dependency-graph.js +6 -3
  32. package/dist/goal/goal-dependency-graph.js.map +1 -1
  33. package/dist/goal/goal-negotiator.d.ts.map +1 -1
  34. package/dist/goal/goal-negotiator.js +57 -22
  35. package/dist/goal/goal-negotiator.js.map +1 -1
  36. package/dist/goal/goal-refiner.d.ts.map +1 -1
  37. package/dist/goal/goal-refiner.js +6 -8
  38. package/dist/goal/goal-refiner.js.map +1 -1
  39. package/dist/goal/goal-suggest.d.ts +2 -2
  40. package/dist/goal/goal-suggest.d.ts.map +1 -1
  41. package/dist/goal/goal-suggest.js +26 -9
  42. package/dist/goal/goal-suggest.js.map +1 -1
  43. package/dist/goal/goal-tree-manager.d.ts.map +1 -1
  44. package/dist/goal/goal-tree-manager.js +8 -10
  45. package/dist/goal/goal-tree-manager.js.map +1 -1
  46. package/dist/goal/negotiator-steps.d.ts.map +1 -1
  47. package/dist/goal/negotiator-steps.js +5 -6
  48. package/dist/goal/negotiator-steps.js.map +1 -1
  49. package/dist/goal/refiner-prompts.d.ts +1 -17
  50. package/dist/goal/refiner-prompts.d.ts.map +1 -1
  51. package/dist/goal/refiner-prompts.js +1 -65
  52. package/dist/goal/refiner-prompts.js.map +1 -1
  53. package/dist/llm/base-llm-client.d.ts +38 -6
  54. package/dist/llm/base-llm-client.d.ts.map +1 -1
  55. package/dist/llm/base-llm-client.js +120 -14
  56. package/dist/llm/base-llm-client.js.map +1 -1
  57. package/dist/llm/json-sanitizer.d.ts +34 -0
  58. package/dist/llm/json-sanitizer.d.ts.map +1 -0
  59. package/dist/llm/json-sanitizer.js +110 -0
  60. package/dist/llm/json-sanitizer.js.map +1 -0
  61. package/dist/llm/llm-client.d.ts +8 -1
  62. package/dist/llm/llm-client.d.ts.map +1 -1
  63. package/dist/llm/llm-client.js +15 -0
  64. package/dist/llm/llm-client.js.map +1 -1
  65. package/dist/observation/capability-detector.d.ts.map +1 -1
  66. package/dist/observation/capability-detector.js +2 -1
  67. package/dist/observation/capability-detector.js.map +1 -1
  68. package/dist/observation/observation-llm.d.ts.map +1 -1
  69. package/dist/observation/observation-llm.js +3 -1
  70. package/dist/observation/observation-llm.js.map +1 -1
  71. package/dist/runtime/daemon-runner.d.ts.map +1 -1
  72. package/dist/runtime/daemon-runner.js +8 -4
  73. package/dist/runtime/daemon-runner.js.map +1 -1
  74. package/dist/tui/entry.js +1 -1
  75. package/dist/tui/entry.js.map +1 -1
  76. package/dist/types/task-group.d.ts +15 -0
  77. package/dist/types/task-group.d.ts.map +1 -1
  78. package/dist/types/task.d.ts +9 -0
  79. package/dist/types/task.d.ts.map +1 -1
  80. package/dist/types/task.js +4 -0
  81. package/dist/types/task.js.map +1 -1
  82. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"negotiator-steps.js","sourceRoot":"","sources":["../../src/goal/negotiator-steps.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"negotiator-steps.js","sourceRoot":"","sources":["../../src/goal/negotiator-steps.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,OAAO,EACL,4BAA4B,EAC5B,uBAAuB,EACvB,wBAAwB,GACzB,MAAM,yBAAyB,CAAC;AASjC,OAAO,EACL,wBAAwB,EACxB,sBAAsB,EACtB,mBAAmB,EACnB,4BAA4B,GAC7B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,0BAA0B,EAC1B,2BAA2B,GAC5B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,wBAAwB,EACxB,sBAAsB,GACvB,MAAM,sBAAsB,CAAC;AAE9B,oBAAoB;AAEpB,MAAM,CAAC,MAAM,qCAAqC,GAAG,GAAG,CAAC;AACzD,MAAM,CAAC,MAAM,oCAAoC,GAAG,GAAG,CAAC;AACxD,MAAM,CAAC,MAAM,yBAAyB,GAAG,EAAE,CAAC;AAE5C,kCAAkC;AAElC,MAAM,UAAU,uBAAuB,CAAC,eAAgC;IACtE,OAAO,GAAG,GAAG,eAAe,CAAC,aAAa,GAAG,GAAG,CAAC;AACnD,CAAC;AAED,0CAA0C;AAE1C,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,eAAuB,EACvB,WAAqB,EACrB,iBAAoC,EACpC,SAAqB,EACrB,gBAAyB,EACzB,MAAe,EACf,OAAwB;IAExB,MAAM,oBAAoB,GAAG,iBAAiB,CAAC,yBAAyB,EAAE,CAAC;IAC3E,MAAM,mBAAmB,GAAG,wBAAwB,CAClD,eAAe,EACf,WAAW,EACX,oBAAoB,EACpB,gBAAgB,CACjB,CAAC;IAEF,IAAI,UAAoC,CAAC;IACzC,IAAI,OAAO,EAAE,CAAC;QACZ,UAAU,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC;YACjC,OAAO,EAAE,oBAAoB;YAC7B,cAAc,EAAE,CAAC,CAAC,KAAK,CAAC,4BAA4B,CAAC;YACrD,iBAAiB,EAAE;gBACjB,MAAM,EAAE,mBAAmB;gBAC3B,eAAe;gBACf,WAAW,EAAE,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;gBACnC,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAClD;SACF,CAAC,CAAC;IACL,CAAC;SAAM,CAAC;QACN,MAAM,qBAAqB,GAAG,MAAM,SAAS,CAAC,WAAW,CACvD,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,mBAAmB,EAAE,CAAC,EAChD,EAAE,WAAW,EAAE,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,CACvC,CAAC;QACF,UAAU,GAAG,SAAS,CAAC,SAAS,CAC9B,qBAAqB,CAAC,OAAO,EAC7B,CAAC,CAAC,KAAK,CAAC,4BAA4B,CAAC,CACtC,CAAC;IACJ,CAAC;IAED,0EAA0E;IAC1E,IAAI,oBAAoB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpC,MAAM,UAAU,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC;QACvE,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;YAC7B,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBACnC,MAAM,KAAK,GAAG,sBAAsB,CAAC,GAAG,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;gBAC3D,IAAI,KAAK,EAAE,CAAC;oBACV,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC;gBACnB,CAAC;YACH,CAAC;QACH,CAAC;QAED,gEAAgE;QAChE,MAAM,WAAW,GACf,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;QACpF,IAAI,WAAW,EAAE,CAAC;YAChB,MAAM,EAAE,IAAI,CACV,mFAAmF;gBACjF,uFAAuF;gBACvF,qCAAqC,CACxC,CAAC;QACJ,CAAC;IACH,CAAC;IAED,qDAAqD;IACrD,wBAAwB,CAAC,UAAU,CAAC,CAAC;IAErC,OAAO,EAAE,UAAU,EAAE,oBAAoB,EAAE,CAAC;AAC9C,CAAC;AAED,sCAAsC;AAEtC,MAAM,UAAU,oBAAoB,CAAC,UAAoC;IAMvE,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAC9B,SAAS,EAAE,GAAG,CAAC,IAAI;QACnB,KAAK,EAAE,IAAI;QACX,UAAU,EAAE,CAAC;QACb,MAAM,EAAE,kBAAkB;KAC3B,CAAC,CAAC,CAAC;AACN,CAAC;AAED,2CAA2C;AAE3C,MAAM,UAAU,0BAA0B,CACxC,UAAoC,EACpC,kBAA+B;IAO/B,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;QAC5B,MAAM,WAAW,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC;QACxE,OAAO;YACL,SAAS,EAAE,GAAG,CAAC,IAAI;YACnB,KAAK,EAAE,WAAW,EAAE,aAAa,IAAI,IAAI;YACzC,UAAU,EAAE,WAAW,EAAE,UAAU,IAAI,CAAC;YACxC,MAAM,EAAE,sBAAsB;SAC/B,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,qDAAqD;AAErD,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,SAAqB,EACrB,aAAqB,EACrB,eAAuB,EACvB,aAA+C,EAC/C,cAAsE,EACtE,eAAuB,EACvB,OAAwB;IAExB,MAAM,MAAM,GAAG,sBAAsB,CACnC,aAAa,EACb,eAAe,EACf,aAAa,EACb,cAAc,EACd,eAAe,CAChB,CAAC;IAEF,IAAI,CAAC;QACH,IAAI,MAAsH,CAAC;QAC3H,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC;gBAC7B,OAAO,EAAE,yBAAyB;gBAClC,cAAc,EAAE,4BAA4B;gBAC5C,iBAAiB,EAAE;oBACjB,MAAM;oBACN,aAAa;oBACb,eAAe;oBACf,aAAa,EAAE,MAAM,CAAC,aAAa,CAAC;oBACpC,cAAc,EAAE,MAAM,CAAC,cAAc,CAAC;oBACtC,eAAe,EAAE,MAAM,CAAC,eAAe,CAAC;iBACzC;aACF,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,WAAW,CAC1C,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,EACnC,EAAE,WAAW,EAAE,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,CACvC,CAAC;YACF,MAAM,GAAG,SAAS,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,4BAA4B,CAAC,CAAC;QAC/E,CAAC;QACD,OAAO,uBAAuB,CAAC,KAAK,CAAC;YACnC,SAAS,EAAE,aAAa;YACxB,IAAI,EAAE,aAAa;YACnB,iBAAiB,EAAE,IAAI;YACvB,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,eAAe,EAAE,MAAM,CAAC,eAAe;YACvC,UAAU,EAAE,MAAM,CAAC,UAAU;SAC9B,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,yEAAyE,EAAE,GAAG,CAAC,CAAC;QAC7F,OAAO,uBAAuB,CAAC,KAAK,CAAC;YACnC,SAAS,EAAE,aAAa;YACxB,IAAI,EAAE,aAAa;YACnB,iBAAiB,EAAE,IAAI;YACvB,UAAU,EAAE,WAAW;YACvB,UAAU,EAAE,KAAK;YACjB,SAAS,EAAE,kEAAkE;YAC7E,eAAe,EAAE,EAAE;YACnB,UAAU,EAAE,CAAC,8BAA8B,CAAC;SAC7C,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED,oCAAoC;AAEpC,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,SAAqB,EACrB,eAAuB,EACvB,UAAoC,EACpC,mBAA2E,EAC3E,kBAAuC,EACvC,GAAmB,EACnB,MAAe,EACf,OAAwB;IAExB,IAAI,CAAC;QACH,MAAM,cAAc,GAAG,0BAA0B,CAC/C,eAAe,EACf,UAAU,EACV,mBAAmB,CACpB,CAAC;QACF,IAAI,cAA2D,CAAC;QAChE,IAAI,OAAO,EAAE,CAAC;YACZ,cAAc,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC;gBACrC,OAAO,EAAE,wBAAwB;gBACjC,cAAc,EAAE,2BAA2B;gBAC3C,iBAAiB,EAAE;oBACjB,MAAM,EAAE,cAAc;oBACtB,eAAe;oBACf,UAAU,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;oBACpD,YAAY,EAAE,mBAAmB,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;iBAC9E;aACF,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,MAAM,gBAAgB,GAAG,MAAM,SAAS,CAAC,WAAW,CAClD,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,EAC3C,EAAE,WAAW,EAAE,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,CACvC,CAAC;YACF,cAAc,GAAG,SAAS,CAAC,SAAS,CAClC,gBAAgB,CAAC,OAAO,EACxB,2BAA2B,CAC5B,CAAC;QACJ,CAAC;QAED,MAAM,eAAe,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC;QAC7E,MAAM,oBAAoB,GAAa,EAAE,CAAC;QAE1C,KAAK,MAAM,GAAG,IAAI,cAAc,CAAC,IAAI,EAAE,CAAC;YACtC,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC;gBACpB,MAAM,QAAQ,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,GAAG,CAAC,SAAS,CAAC,CAAC;gBAC/E,IAAI,QAAQ,EAAE,CAAC;oBACb,QAAQ,CAAC,UAAU,GAAG,YAAY,CAAC;oBACnC,QAAQ,CAAC,SAAS,GAAG,mBAAmB,GAAG,CAAC,MAAM,EAAE,CAAC;gBACvD,CAAC;gBACD,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YAC3C,CAAC;QACH,CAAC;QAED,GAAG,CAAC,sBAAsB,GAAG,wBAAwB,CAAC,KAAK,CAAC;YAC1D,sBAAsB,EAAE,eAAe;YACvC,aAAa,EAAE,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC7C,SAAS,EAAE,CAAC,CAAC,SAAS;gBACtB,mBAAmB,EAAE,CAAC,CAAC,mBAAmB;gBAC1C,UAAU,EAAE,CAAC,CAAC,UAAU;aACzB,CAAC,CAAC;YACH,qBAAqB,EAAE,oBAAoB;SAC5C,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,0EAA0E,EAAE,GAAG,CAAC,CAAC;IAChG,CAAC;AACH,CAAC;AAED,0CAA0C;AAE1C,MAAM,UAAU,qBAAqB,CACnC,kBAAuC,EACvC,oBAKE,EACF,eAAuB;IAUvB,MAAM,aAAa,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,YAAY,CAAC,CAAC;IACpF,MAAM,gBAAgB,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,KAAK,CAAC,CAAC;IAChF,MAAM,uBAAuB,GAAG,kBAAkB,CAAC,KAAK,CACtD,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,WAAW,IAAI,CAAC,CAAC,UAAU,KAAK,WAAW,CACpE,CAAC;IAEF,IAAI,iBAA4C,CAAC;IACjD,IAAI,gBAAgB,EAAE,CAAC;QACrB,iBAAiB,GAAG,KAAK,CAAC;IAC5B,CAAC;SAAM,IAAI,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,QAAQ,CAAC,EAAE,CAAC;QACrE,iBAAiB,GAAG,QAAQ,CAAC;IAC/B,CAAC;SAAM,CAAC;QACN,iBAAiB,GAAG,MAAM,CAAC;IAC7B,CAAC;IAED,IAAI,aAAa,EAAE,CAAC;QAClB,MAAM,UAAU,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,YAAY,CAAE,CAAC;QAClF,MAAM,QAAQ,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,UAAU,CAAC,SAAS,CAAC,CAAC;QACxF,MAAM,aAAa,GAAG,OAAO,QAAQ,EAAE,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAE/E,IAAI,eAAuB,CAAC;QAC5B,IAAI,UAAU,CAAC,iBAAiB,KAAK,IAAI,IAAI,UAAU,CAAC,iBAAiB,GAAG,CAAC,EAAE,CAAC;YAC9E,MAAM,GAAG,GACP,CAAC,eAAe,GAAG,oCAAoC,CAAC;gBACxD,UAAU,CAAC,iBAAiB,CAAC;YAC/B,eAAe,GAAG,aAAa,GAAG,GAAG,CAAC;QACxC,CAAC;aAAM,CAAC;YACN,eAAe,GAAG,aAAa,CAAC;QAClC,CAAC;QAED,OAAO;YACL,YAAY,EAAE,iBAAiB;YAC/B,eAAe,EAAE;gBACf,gBAAgB,EAAE,eAAe;gBACjC,SAAS,EAAE,UAAU,CAAC,SAAS;gBAC/B,YAAY,EACV,UAAU,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC;oBAC9B,CAAC,CAAC,CAAC,kBAAkB,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;oBACxD,CAAC,CAAC,CAAC,+CAA+C,CAAC;aACxD;YACD,iBAAiB,EAAE,KAAK;SACzB,CAAC;IACJ,CAAC;IAED,IAAI,gBAAgB,IAAI,uBAAuB,EAAE,CAAC;QAChD,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,KAAK,EAAE,CAAC;IACzE,CAAC;IAED,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,iBAAiB,EAAE,CAAC;AACvD,CAAC;AAED,iCAAiC;AAEjC,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,SAAqB,EACrB,eAAuB,EACvB,YAAgE,EAChE,kBAAuC,EACvC,eAAoG,EACpG,WAAiC,EACjC,iBAA4C,EAC5C,OAAwB;IAExB,MAAM,cAAc,GAAG,mBAAmB,CACxC,eAAe,EACf,YAAY,EACZ,kBAAkB,EAClB,eAAe,CAChB,CAAC;IAEF,IAAI,cAAsB,CAAC;IAC3B,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC;YACnC,OAAO,EAAE,sBAAsB;YAC/B,cAAc,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;YACjD,iBAAiB,EAAE;gBACjB,MAAM,EAAE,cAAc;gBACtB,eAAe;gBACf,YAAY;aACb;SACF,CAAC,CAAC;QACH,cAAc,GAAG,MAAM,CAAC,OAAO,CAAC;IAClC,CAAC;SAAM,CAAC;QACN,MAAM,eAAe,GAAG,MAAM,SAAS,CAAC,WAAW,CACjD,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,EAC3C,EAAE,WAAW,EAAE,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,CACvC,CAAC;QACF,cAAc,GAAG,eAAe,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;IAClD,CAAC;IAED,OAAO;QACL,IAAI,EAAE,YAAY;QAClB,OAAO,EAAE,cAAc;QACvB,QAAQ,EAAE,YAAY,KAAK,QAAQ,IAAI,YAAY,KAAK,mBAAmB;QAC3E,kBAAkB,EAAE,iBAAiB;QACrC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjE,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC/C,CAAC;AACJ,CAAC;AAED,6BAA6B;AAE7B,MAAM,UAAU,kBAAkB,CAAC,SAAoB;IACrD,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC;IAClC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAEpC,MAAM,cAAc,GAAG,OAAO,CAAC,MAAM,CACnC,CAAC,CAAC,EAAqC,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,KAAK,QAAQ,CACtE,CAAC;IACF,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAE3C,MAAM,KAAK,GAAG,cAAc,CAAC,CAAC,CAAE,CAAC;IACjC,MAAM,IAAI,GAAG,cAAc,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAE,CAAC;IAExD,MAAM,UAAU,GACd,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC;IAC3E,MAAM,YAAY,GAAG,UAAU,GAAG,CAAC,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;IACxD,IAAI,YAAY,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IAEnC,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,YAAY,CAAC;AAC3D,CAAC"}
@@ -1,21 +1,5 @@
1
1
  import type { Goal } from "../types/goal.js";
2
- /**
3
- * Sanitizes LLM-returned threshold_type strings to valid enum values.
4
- * Handles the union of all known non-standard values from both
5
- * GoalRefiner (leaf test) and GoalTreeManager (subgoal decomposition).
6
- *
7
- * Uses regex replacement so it works on raw JSON strings before parsing.
8
- */
9
- export declare function sanitizeThresholdTypes(raw: string): string;
10
- /**
11
- * Sanitizes LLM-returned threshold_value when threshold_type is "present".
12
- * When the LLM returns an object (e.g. `{"type":"present"}`) as the value for
13
- * a present threshold, replace it with null so downstream Zod schemas accept it.
14
- *
15
- * Operates on the raw JSON string before parsing to avoid any type-safety issues
16
- * with the un-parsed LLM output.
17
- */
18
- export declare function sanitizeThresholdValues(raw: string): string;
2
+ export { sanitizeThresholdTypes, sanitizeThresholdValues } from "../llm/json-sanitizer.js";
19
3
  /**
20
4
  * Builds the leaf test prompt for the GoalRefiner.
21
5
  *
@@ -1 +1 @@
1
- {"version":3,"file":"refiner-prompts.d.ts","sourceRoot":"","sources":["../../src/goal/refiner-prompts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAe7C;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAS1D;AAED;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAY3D;AAqBD;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,IAAI,EACV,oBAAoB,EAAE,MAAM,EAAE,GAC7B,MAAM,CAkDR"}
1
+ {"version":3,"file":"refiner-prompts.d.ts","sourceRoot":"","sources":["../../src/goal/refiner-prompts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AAE3F;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,IAAI,EACV,oBAAoB,EAAE,MAAM,EAAE,GAC7B,MAAM,CAkDR"}
@@ -1,68 +1,4 @@
1
- // ─── Threshold type sanitizer ───
2
- const THRESHOLD_TYPE_MAP = {
3
- exact: "match",
4
- scale: "min",
5
- qualitative: "min",
6
- boolean: "present",
7
- percentage: "min",
8
- count: "min",
9
- };
10
- const VALID_THRESHOLD_TYPES = new Set(["min", "max", "range", "present", "match"]);
11
- /**
12
- * Sanitizes LLM-returned threshold_type strings to valid enum values.
13
- * Handles the union of all known non-standard values from both
14
- * GoalRefiner (leaf test) and GoalTreeManager (subgoal decomposition).
15
- *
16
- * Uses regex replacement so it works on raw JSON strings before parsing.
17
- */
18
- export function sanitizeThresholdTypes(raw) {
19
- return raw.replace(/"threshold_type"\s*:\s*"([^"]+)"/g, (_match, val) => {
20
- if (VALID_THRESHOLD_TYPES.has(val))
21
- return `"threshold_type": "${val}"`;
22
- const mapped = THRESHOLD_TYPE_MAP[val] ?? "min";
23
- return `"threshold_type": "${mapped}"`;
24
- });
25
- }
26
- /**
27
- * Sanitizes LLM-returned threshold_value when threshold_type is "present".
28
- * When the LLM returns an object (e.g. `{"type":"present"}`) as the value for
29
- * a present threshold, replace it with null so downstream Zod schemas accept it.
30
- *
31
- * Operates on the raw JSON string before parsing to avoid any type-safety issues
32
- * with the un-parsed LLM output.
33
- */
34
- export function sanitizeThresholdValues(raw) {
35
- // Find any "threshold_value": <object> that immediately follows a "present" threshold_type.
36
- // Strategy: parse and re-serialize only the threshold_value fields for present dimensions.
37
- // We use a two-pass approach on the raw string to avoid fragile regex on nested JSON.
38
- try {
39
- const parsed = JSON.parse(raw);
40
- const sanitized = sanitizePresentThresholdValues(parsed);
41
- return JSON.stringify(sanitized);
42
- }
43
- catch {
44
- // If JSON parsing fails, return as-is and let downstream parsers handle it.
45
- return raw;
46
- }
47
- }
48
- function sanitizePresentThresholdValues(value) {
49
- if (Array.isArray(value)) {
50
- return value.map(sanitizePresentThresholdValues);
51
- }
52
- if (value !== null && typeof value === "object") {
53
- const record = value;
54
- const result = {};
55
- for (const [k, v] of Object.entries(record)) {
56
- result[k] = sanitizePresentThresholdValues(v);
57
- }
58
- // If this object has threshold_type === "present" and threshold_value is an object, null it out.
59
- if (result["threshold_type"] === "present" && typeof result["threshold_value"] === "object" && result["threshold_value"] !== null) {
60
- result["threshold_value"] = null;
61
- }
62
- return result;
63
- }
64
- return value;
65
- }
1
+ export { sanitizeThresholdTypes, sanitizeThresholdValues } from "../llm/json-sanitizer.js";
66
2
  /**
67
3
  * Builds the leaf test prompt for the GoalRefiner.
68
4
  *
@@ -1 +1 @@
1
- {"version":3,"file":"refiner-prompts.js","sourceRoot":"","sources":["../../src/goal/refiner-prompts.ts"],"names":[],"mappings":"AAEA,mCAAmC;AAEnC,MAAM,kBAAkB,GAA2B;IACjD,KAAK,EAAE,OAAO;IACd,KAAK,EAAE,KAAK;IACZ,WAAW,EAAE,KAAK;IAClB,OAAO,EAAE,SAAS;IAClB,UAAU,EAAE,KAAK;IACjB,KAAK,EAAE,KAAK;CACb,CAAC;AAEF,MAAM,qBAAqB,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC;AAEnF;;;;;;GAMG;AACH,MAAM,UAAU,sBAAsB,CAAC,GAAW;IAChD,OAAO,GAAG,CAAC,OAAO,CAChB,mCAAmC,EACnC,CAAC,MAAc,EAAE,GAAW,EAAE,EAAE;QAC9B,IAAI,qBAAqB,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,OAAO,sBAAsB,GAAG,GAAG,CAAC;QACxE,MAAM,MAAM,GAAG,kBAAkB,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC;QAChD,OAAO,sBAAsB,MAAM,GAAG,CAAC;IACzC,CAAC,CACF,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,uBAAuB,CAAC,GAAW;IACjD,4FAA4F;IAC5F,2FAA2F;IAC3F,sFAAsF;IACtF,IAAI,CAAC;QACH,MAAM,MAAM,GAAY,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACxC,MAAM,SAAS,GAAG,8BAA8B,CAAC,MAAM,CAAC,CAAC;QACzD,OAAO,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;IACnC,CAAC;IAAC,MAAM,CAAC;QACP,4EAA4E;QAC5E,OAAO,GAAG,CAAC;IACb,CAAC;AACH,CAAC;AAED,SAAS,8BAA8B,CAAC,KAAc;IACpD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;IACnD,CAAC;IACD,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAChD,MAAM,MAAM,GAAG,KAAgC,CAAC;QAChD,MAAM,MAAM,GAA4B,EAAE,CAAC;QAC3C,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YAC5C,MAAM,CAAC,CAAC,CAAC,GAAG,8BAA8B,CAAC,CAAC,CAAC,CAAC;QAChD,CAAC;QACD,iGAAiG;QACjG,IAAI,MAAM,CAAC,gBAAgB,CAAC,KAAK,SAAS,IAAI,OAAO,MAAM,CAAC,iBAAiB,CAAC,KAAK,QAAQ,IAAI,MAAM,CAAC,iBAAiB,CAAC,KAAK,IAAI,EAAE,CAAC;YAClI,MAAM,CAAC,iBAAiB,CAAC,GAAG,IAAI,CAAC;QACnC,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CACjC,IAAU,EACV,oBAA8B;IAE9B,MAAM,kBAAkB,GACtB,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC;QACzB,CAAC,CAAC,gBAAgB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;QAC/C,CAAC,CAAC,mBAAmB,CAAC;IAE1B,MAAM,kBAAkB,GACtB,oBAAoB,CAAC,MAAM,GAAG,CAAC;QAC7B,CAAC,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC;QACjC,CAAC,CAAC,uBAAuB,CAAC;IAE9B,OAAO;;SAEA,IAAI,CAAC,WAAW;EACvB,kBAAkB;0BACM,kBAAkB;SACnC,IAAI,CAAC,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oEAiCmC,CAAC;AACrE,CAAC"}
1
+ {"version":3,"file":"refiner-prompts.js","sourceRoot":"","sources":["../../src/goal/refiner-prompts.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AAE3F;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CACjC,IAAU,EACV,oBAA8B;IAE9B,MAAM,kBAAkB,GACtB,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC;QACzB,CAAC,CAAC,gBAAgB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;QAC/C,CAAC,CAAC,mBAAmB,CAAC;IAE1B,MAAM,kBAAkB,GACtB,oBAAoB,CAAC,MAAM,GAAG,CAAC;QAC7B,CAAC,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC;QACjC,CAAC,CAAC,uBAAuB,CAAC;IAE9B,OAAO;;SAEA,IAAI,CAAC,WAAW;EACvB,kBAAkB;0BACM,kBAAkB;SACnC,IAAI,CAAC,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oEAiCmC,CAAC;AACrE,CAAC"}
@@ -9,10 +9,27 @@ export declare const MAX_RETRY_ATTEMPTS = 3;
9
9
  /** Exponential backoff delays in milliseconds: 1s, 2s, 4s */
10
10
  export declare const RETRY_DELAYS_MS: number[];
11
11
  /**
12
- * Extract JSON from a string that may contain markdown code blocks.
13
- * Tries ```json ... ``` first, then ``` ... ```, then bare JSON.
12
+ * Extract JSON from a string that may contain markdown code blocks or prose.
13
+ *
14
+ * Strategies (first match wins):
15
+ * 1. Fast path — already valid JSON, return as-is
16
+ * 2. Code fence extraction — ```json ... ``` or ``` ... ```
17
+ * 3. Brace matching — find first { or [ and last matching } or ]
14
18
  */
15
19
  export declare function extractJSON(text: string): string;
20
+ export interface ParseJSONMessage {
21
+ role: string;
22
+ content: string;
23
+ }
24
+ /** Options for parseJSON(). Pass `retry` to enable a single re-prompt on failure. */
25
+ export interface ParseJSONOptions {
26
+ retry?: {
27
+ /** Original messages used to produce the first LLM response. */
28
+ messages: ParseJSONMessage[];
29
+ /** Optional system prompt for the retry call. */
30
+ systemPrompt?: string;
31
+ };
32
+ }
16
33
  /**
17
34
  * Abstract base for all LLM clients.
18
35
  * Provides a shared parseJSON() implementation with safeParse-based validation,
@@ -29,10 +46,25 @@ export declare abstract class BaseLLMClient {
29
46
  */
30
47
  protected resolveEffectiveModel(defaultModel: string, tier?: ModelTier): string;
31
48
  /**
32
- * Extract JSON from LLM response text (handles markdown code blocks)
33
- * and validate against the given Zod schema.
34
- * Throws on parse failure or schema validation failure with detailed messages.
35
- */
49
+ * Send messages to the LLM and return the response text.
50
+ * Used internally by parseJSON retry logic.
51
+ * Subclasses that support retry must override this method.
52
+ */
53
+ protected callLLMRaw(_messages: ParseJSONMessage[], _systemPrompt?: string): Promise<string>;
54
+ /**
55
+ * Attempt to parse and validate a single content string against the schema.
56
+ * Returns the parsed value on success, or throws LLMError on failure.
57
+ */
58
+ private attemptParse;
59
+ /**
60
+ * Extract JSON from LLM response text (handles markdown code blocks)
61
+ * and validate against the given Zod schema.
62
+ * Throws on parse failure or schema validation failure with detailed messages.
63
+ *
64
+ * When `options.retry` is provided, a single retry is attempted on first failure:
65
+ * the original messages are re-sent with an error feedback message appended.
66
+ */
67
+ parseJSON<T>(content: string, schema: ZodSchema<T>, options?: ParseJSONOptions): Promise<T>;
36
68
  parseJSON<T>(content: string, schema: ZodSchema<T>): T;
37
69
  }
38
70
  //# sourceMappingURL=base-llm-client.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"base-llm-client.d.ts","sourceRoot":"","sources":["../../src/llm/base-llm-client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,KAAK,CAAC;AAKrC,2EAA2E;AAC3E,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,OAAO,CAAC;AAIzC,eAAO,MAAM,kBAAkB,OAAO,CAAC;AAEvC,kDAAkD;AAClD,eAAO,MAAM,sBAAsB,QAAS,CAAC;AAE7C,2DAA2D;AAC3D,eAAO,MAAM,kBAAkB,IAAI,CAAC;AAEpC,6DAA6D;AAC7D,eAAO,MAAM,eAAe,UAAqB,CAAC;AAIlD;;;GAGG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAUhD;AAID;;;;GAIG;AACH,8BAAsB,aAAa;IACjC,iFAAiF;IACjF,SAAS,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAE9B;;;;;OAKG;IACH,SAAS,CAAC,qBAAqB,CAAC,YAAY,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,SAAS,GAAG,MAAM;IAO/E;;;;MAIE;IACF,SAAS,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC;CAmBvD"}
1
+ {"version":3,"file":"base-llm-client.d.ts","sourceRoot":"","sources":["../../src/llm/base-llm-client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,KAAK,CAAC;AAMrC,2EAA2E;AAC3E,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,OAAO,CAAC;AAIzC,eAAO,MAAM,kBAAkB,OAAO,CAAC;AAEvC,kDAAkD;AAClD,eAAO,MAAM,sBAAsB,QAAS,CAAC;AAE7C,2DAA2D;AAC3D,eAAO,MAAM,kBAAkB,IAAI,CAAC;AAEpC,6DAA6D;AAC7D,eAAO,MAAM,eAAe,UAAqB,CAAC;AAIlD;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CA2DhD;AAID,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,qFAAqF;AACrF,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,EAAE;QACN,gEAAgE;QAChE,QAAQ,EAAE,gBAAgB,EAAE,CAAC;QAC7B,iDAAiD;QACjD,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,CAAC;CACH;AAID;;;;GAIG;AACH,8BAAsB,aAAa;IACjC,iFAAiF;IACjF,SAAS,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAE9B;;;;;OAKG;IACH,SAAS,CAAC,qBAAqB,CAAC,YAAY,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,SAAS,GAAG,MAAM;IAO/E;;;;OAIG;cAEa,UAAU,CAAC,SAAS,EAAE,gBAAgB,EAAE,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAIlG;;;OAGG;IACH,OAAO,CAAC,YAAY;IAoBpB;;;;;;;OAOG;IACG,SAAS,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,CAAC,CAAC;IACjG,SAAS,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC;CAmCvD"}
@@ -1,4 +1,5 @@
1
1
  import { LLMError } from "../utils/errors.js";
2
+ import { sanitizeLLMJson } from "./json-sanitizer.js";
2
3
  // ─── Shared constants ───
3
4
  export const DEFAULT_MAX_TOKENS = 4096;
4
5
  /** Default LLM request timeout in milliseconds */
@@ -9,19 +10,81 @@ export const MAX_RETRY_ATTEMPTS = 3;
9
10
  export const RETRY_DELAYS_MS = [1000, 2000, 4000];
10
11
  // ─── JSON extraction utility ───
11
12
  /**
12
- * Extract JSON from a string that may contain markdown code blocks.
13
- * Tries ```json ... ``` first, then ``` ... ```, then bare JSON.
13
+ * Extract JSON from a string that may contain markdown code blocks or prose.
14
+ *
15
+ * Strategies (first match wins):
16
+ * 1. Fast path — already valid JSON, return as-is
17
+ * 2. Code fence extraction — ```json ... ``` or ``` ... ```
18
+ * 3. Brace matching — find first { or [ and last matching } or ]
14
19
  */
15
20
  export function extractJSON(text) {
16
- const jsonBlock = text.match(/```json\s*([\s\S]*?)```/);
21
+ const trimmed = text.trim();
22
+ // 1. Fast path: already valid JSON
23
+ try {
24
+ JSON.parse(trimmed);
25
+ return trimmed;
26
+ }
27
+ catch {
28
+ // not bare JSON, continue
29
+ }
30
+ // 2. Code fence extraction
31
+ const jsonBlock = trimmed.match(/```json\s*([\s\S]*?)```/);
17
32
  if (jsonBlock) {
18
33
  return jsonBlock[1].trim();
19
34
  }
20
- const genericBlock = text.match(/```\s*([\s\S]*?)```/);
35
+ const genericBlock = trimmed.match(/```\s*([\s\S]*?)```/);
21
36
  if (genericBlock) {
22
37
  return genericBlock[1].trim();
23
38
  }
24
- return text.trim();
39
+ // 3. Depth-aware brace matching: scan from first { or [ to its matching close
40
+ const firstBrace = trimmed.indexOf("{");
41
+ const firstBracket = trimmed.indexOf("[");
42
+ let start = -1;
43
+ let openChar;
44
+ let closeChar;
45
+ if (firstBrace === -1 && firstBracket === -1) {
46
+ return trimmed;
47
+ }
48
+ else if (firstBrace === -1 || (firstBracket !== -1 && firstBracket < firstBrace)) {
49
+ start = firstBracket;
50
+ openChar = "[";
51
+ closeChar = "]";
52
+ }
53
+ else {
54
+ start = firstBrace;
55
+ openChar = "{";
56
+ closeChar = "}";
57
+ }
58
+ let depth = 0;
59
+ let inString = false;
60
+ let escape = false;
61
+ for (let i = start; i < trimmed.length; i++) {
62
+ const ch = trimmed[i];
63
+ if (escape) {
64
+ escape = false;
65
+ continue;
66
+ }
67
+ if (ch === "\\" && inString) {
68
+ escape = true;
69
+ continue;
70
+ }
71
+ if (ch === '"') {
72
+ inString = !inString;
73
+ continue;
74
+ }
75
+ if (inString)
76
+ continue;
77
+ if (ch === openChar) {
78
+ depth++;
79
+ }
80
+ else if (ch === closeChar) {
81
+ depth--;
82
+ if (depth === 0) {
83
+ return trimmed.slice(start, i + 1);
84
+ }
85
+ }
86
+ }
87
+ return trimmed;
25
88
  }
26
89
  // ─── BaseLLMClient ───
27
90
  /**
@@ -45,25 +108,68 @@ export class BaseLLMClient {
45
108
  return effectiveModel;
46
109
  }
47
110
  /**
48
- * Extract JSON from LLM response text (handles markdown code blocks)
49
- * and validate against the given Zod schema.
50
- * Throws on parse failure or schema validation failure with detailed messages.
51
- */
52
- parseJSON(content, schema) {
53
- const jsonText = extractJSON(content);
111
+ * Send messages to the LLM and return the response text.
112
+ * Used internally by parseJSON retry logic.
113
+ * Subclasses that support retry must override this method.
114
+ */
115
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
116
+ async callLLMRaw(_messages, _systemPrompt) {
117
+ throw new LLMError("callLLMRaw not implemented — override in subclass to enable parseJSON retry");
118
+ }
119
+ /**
120
+ * Attempt to parse and validate a single content string against the schema.
121
+ * Returns the parsed value on success, or throws LLMError on failure.
122
+ */
123
+ attemptParse(content, schema) {
124
+ const jsonText = sanitizeLLMJson(extractJSON(content));
54
125
  let raw;
55
126
  try {
56
127
  raw = JSON.parse(jsonText);
57
128
  }
58
129
  catch (err) {
59
- throw new LLMError(`LLM response JSON parse failed — ${String(err)}\nContent: ${content}`);
130
+ const msg = `LLM response JSON parse failed — ${String(err)}`;
131
+ console.warn(`[parseJSON] ${msg} | raw(200): ${content.slice(0, 200)}`);
132
+ throw new LLMError(`${msg}\nContent: ${content}`);
60
133
  }
61
134
  const result = schema.safeParse(raw);
62
135
  if (!result.success) {
63
- throw new LLMError(`LLM response validation failed: ${result.error.issues.map((i) => i.message).join(", ")}. ` +
64
- `Raw: ${JSON.stringify(raw).slice(0, 200)}`);
136
+ const issues = result.error.issues.map((i) => i.message).join(", ");
137
+ const msg = `LLM response validation failed: ${issues}`;
138
+ console.warn(`[parseJSON] ${msg} | raw(200): ${JSON.stringify(raw).slice(0, 200)}`);
139
+ throw new LLMError(`${msg}. Raw: ${JSON.stringify(raw).slice(0, 200)}`);
65
140
  }
66
141
  return result.data;
67
142
  }
143
+ parseJSON(content, schema, options) {
144
+ if (!options?.retry) {
145
+ return this.attemptParse(content, schema);
146
+ }
147
+ // Async path: retry enabled
148
+ return (async () => {
149
+ let firstError;
150
+ try {
151
+ return this.attemptParse(content, schema);
152
+ }
153
+ catch (err) {
154
+ firstError = err;
155
+ }
156
+ console.warn(`[parseJSON] first attempt failed, retrying... Error: ${firstError.message}`);
157
+ const retryMessages = [
158
+ ...options.retry.messages,
159
+ {
160
+ role: "user",
161
+ content: `Your previous response was not valid JSON. Error: ${firstError.message}. Please respond with ONLY valid JSON matching the required schema, no other text.`,
162
+ },
163
+ ];
164
+ const retryContent = await this.callLLMRaw(retryMessages, options.retry.systemPrompt);
165
+ try {
166
+ return this.attemptParse(retryContent, schema);
167
+ }
168
+ catch (err) {
169
+ console.warn(`[parseJSON] retry also failed`);
170
+ throw err;
171
+ }
172
+ })();
173
+ }
68
174
  }
69
175
  //# sourceMappingURL=base-llm-client.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"base-llm-client.js","sourceRoot":"","sources":["../../src/llm/base-llm-client.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAO9C,2BAA2B;AAE3B,MAAM,CAAC,MAAM,kBAAkB,GAAG,IAAI,CAAC;AAEvC,kDAAkD;AAClD,MAAM,CAAC,MAAM,sBAAsB,GAAG,MAAM,CAAC;AAE7C,2DAA2D;AAC3D,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC;AAEpC,6DAA6D;AAC7D,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAElD,kCAAkC;AAElC;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;IACxD,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC7B,CAAC;IACD,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;IACvD,IAAI,YAAY,EAAE,CAAC;QACjB,OAAO,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAChC,CAAC;IACD,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC;AACrB,CAAC;AAED,wBAAwB;AAExB;;;;GAIG;AACH,MAAM,OAAgB,aAAa;IACjC,iFAAiF;IACvE,UAAU,CAAU;IAE9B;;;;;OAKG;IACO,qBAAqB,CAAC,YAAoB,EAAE,IAAgB;QACpE,MAAM,cAAc,GAAG,CAAC,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,UAAU,CAAC;YAC1D,CAAC,CAAC,IAAI,CAAC,UAAU;YACjB,CAAC,CAAC,YAAY,CAAC;QACjB,OAAO,cAAc,CAAC;IACxB,CAAC;IAED;;;;MAIE;IACF,SAAS,CAAI,OAAe,EAAE,MAAoB;QAChD,MAAM,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;QACtC,IAAI,GAAY,CAAC;QACjB,IAAI,CAAC;YACH,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC7B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,IAAI,QAAQ,CAChB,oCAAoC,MAAM,CAAC,GAAG,CAAC,cAAc,OAAO,EAAE,CACvE,CAAC;QACJ,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QACrC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM,IAAI,QAAQ,CAChB,mCAAmC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;gBACzF,QAAQ,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAC9C,CAAC;QACJ,CAAC;QACD,OAAO,MAAM,CAAC,IAAI,CAAC;IACrB,CAAC;CACF"}
1
+ {"version":3,"file":"base-llm-client.js","sourceRoot":"","sources":["../../src/llm/base-llm-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * json-sanitizer.ts — Shared LLM JSON response sanitization utilities.
3
+ *
4
+ * Centralizes all sanitization logic so it can be applied consistently
5
+ * before JSON.parse() and Zod validation.
6
+ */
7
+ /**
8
+ * Sanitizes LLM-returned threshold_type strings to valid enum values.
9
+ * Handles the union of all known non-standard values from both
10
+ * GoalRefiner (leaf test) and GoalTreeManager (subgoal decomposition).
11
+ *
12
+ * Uses regex replacement so it works on raw JSON strings before parsing.
13
+ */
14
+ export declare function sanitizeThresholdTypes(raw: string): string;
15
+ /**
16
+ * Sanitizes LLM-returned threshold_value when threshold_type is "present".
17
+ * When the LLM returns an object (e.g. `{"type":"present"}`) as the value for
18
+ * a present threshold, replace it with null so downstream Zod schemas accept it.
19
+ *
20
+ * Operates on the raw JSON string before parsing to avoid any type-safety issues
21
+ * with the un-parsed LLM output.
22
+ */
23
+ export declare function sanitizeThresholdValues(raw: string): string;
24
+ /**
25
+ * Applies all LLM JSON sanitizers in sequence.
26
+ *
27
+ * Order:
28
+ * 1. Remove trailing commas (syntactic fix — must come before JSON.parse attempts)
29
+ * 2. Replace NaN/Infinity with null (syntactic fix)
30
+ * 3. Sanitize threshold_type enum values (domain-specific string replacement)
31
+ * 4. Sanitize threshold_value for "present" thresholds (requires parse+reserialize)
32
+ */
33
+ export declare function sanitizeLLMJson(raw: string): string;
34
+ //# sourceMappingURL=json-sanitizer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json-sanitizer.d.ts","sourceRoot":"","sources":["../../src/llm/json-sanitizer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAeH;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAS1D;AAED;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAY3D;AAgDD;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAOnD"}
@@ -0,0 +1,110 @@
1
+ /**
2
+ * json-sanitizer.ts — Shared LLM JSON response sanitization utilities.
3
+ *
4
+ * Centralizes all sanitization logic so it can be applied consistently
5
+ * before JSON.parse() and Zod validation.
6
+ */
7
+ // ─── Threshold type sanitizer ───
8
+ const THRESHOLD_TYPE_MAP = {
9
+ exact: "match",
10
+ scale: "min",
11
+ qualitative: "min",
12
+ boolean: "present",
13
+ percentage: "min",
14
+ count: "min",
15
+ };
16
+ const VALID_THRESHOLD_TYPES = new Set(["min", "max", "range", "present", "match"]);
17
+ /**
18
+ * Sanitizes LLM-returned threshold_type strings to valid enum values.
19
+ * Handles the union of all known non-standard values from both
20
+ * GoalRefiner (leaf test) and GoalTreeManager (subgoal decomposition).
21
+ *
22
+ * Uses regex replacement so it works on raw JSON strings before parsing.
23
+ */
24
+ export function sanitizeThresholdTypes(raw) {
25
+ return raw.replace(/"threshold_type"\s*:\s*"([^"]+)"/g, (_match, val) => {
26
+ if (VALID_THRESHOLD_TYPES.has(val))
27
+ return `"threshold_type": "${val}"`;
28
+ const mapped = THRESHOLD_TYPE_MAP[val] ?? "min";
29
+ return `"threshold_type": "${mapped}"`;
30
+ });
31
+ }
32
+ /**
33
+ * Sanitizes LLM-returned threshold_value when threshold_type is "present".
34
+ * When the LLM returns an object (e.g. `{"type":"present"}`) as the value for
35
+ * a present threshold, replace it with null so downstream Zod schemas accept it.
36
+ *
37
+ * Operates on the raw JSON string before parsing to avoid any type-safety issues
38
+ * with the un-parsed LLM output.
39
+ */
40
+ export function sanitizeThresholdValues(raw) {
41
+ try {
42
+ const parsed = JSON.parse(raw);
43
+ const sanitized = sanitizePresentThresholdValues(parsed);
44
+ return JSON.stringify(sanitized);
45
+ }
46
+ catch (err) {
47
+ // JSON is not yet valid — syntactic fixups haven't fully resolved. This is expected
48
+ // when sanitizeThresholdValues runs as part of the sanitizeLLMJson pipeline.
49
+ console.debug("[sanitizeThresholdValues] JSON not yet parseable, skipping threshold cleanup");
50
+ void err;
51
+ return raw;
52
+ }
53
+ }
54
+ function sanitizePresentThresholdValues(value) {
55
+ if (Array.isArray(value)) {
56
+ return value.map(sanitizePresentThresholdValues);
57
+ }
58
+ if (value !== null && typeof value === "object") {
59
+ const record = value;
60
+ const result = {};
61
+ for (const [k, v] of Object.entries(record)) {
62
+ result[k] = sanitizePresentThresholdValues(v);
63
+ }
64
+ // If this object has threshold_type === "present" and threshold_value is an object, null it out.
65
+ if (result["threshold_type"] === "present" &&
66
+ typeof result["threshold_value"] === "object" &&
67
+ result["threshold_value"] !== null) {
68
+ result["threshold_value"] = null;
69
+ }
70
+ return result;
71
+ }
72
+ return value;
73
+ }
74
+ // ─── Common LLM drift pattern sanitizers ───
75
+ /**
76
+ * Removes trailing commas before `}` or `]` — a common LLM formatting mistake.
77
+ * e.g. `{"a": 1,}` → `{"a": 1}`
78
+ */
79
+ function removeTrailingCommas(raw) {
80
+ return raw.replace(/,\s*([}\]])/g, "$1");
81
+ }
82
+ /**
83
+ * Replaces JSON-invalid numeric literals produced by LLMs with null.
84
+ * Handles: NaN, Infinity, -Infinity (all unquoted).
85
+ */
86
+ function replaceInvalidNumbers(raw) {
87
+ return raw
88
+ .replace(/\bNaN\b/g, "null")
89
+ .replace(/-Infinity\b/g, "null")
90
+ .replace(/\bInfinity\b/g, "null");
91
+ }
92
+ // ─── Main entry point ───
93
+ /**
94
+ * Applies all LLM JSON sanitizers in sequence.
95
+ *
96
+ * Order:
97
+ * 1. Remove trailing commas (syntactic fix — must come before JSON.parse attempts)
98
+ * 2. Replace NaN/Infinity with null (syntactic fix)
99
+ * 3. Sanitize threshold_type enum values (domain-specific string replacement)
100
+ * 4. Sanitize threshold_value for "present" thresholds (requires parse+reserialize)
101
+ */
102
+ export function sanitizeLLMJson(raw) {
103
+ let result = raw;
104
+ result = removeTrailingCommas(result);
105
+ result = replaceInvalidNumbers(result);
106
+ result = sanitizeThresholdTypes(result);
107
+ result = sanitizeThresholdValues(result);
108
+ return result;
109
+ }
110
+ //# sourceMappingURL=json-sanitizer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json-sanitizer.js","sourceRoot":"","sources":["../../src/llm/json-sanitizer.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import type { ZodSchema } from "zod";
2
2
  import { BaseLLMClient, DEFAULT_MAX_TOKENS, extractJSON } from "./base-llm-client.js";
3
- import type { ModelTier } from "./base-llm-client.js";
3
+ import type { ModelTier, ParseJSONMessage, ParseJSONOptions } from "./base-llm-client.js";
4
4
  import { GuardrailRunner } from "../guardrail-runner.js";
5
5
  export interface LLMMessage {
6
6
  role: "user" | "assistant";
@@ -26,6 +26,7 @@ export interface LLMResponse {
26
26
  export interface ILLMClient {
27
27
  sendMessage(messages: LLMMessage[], options?: LLMRequestOptions): Promise<LLMResponse>;
28
28
  parseJSON<T>(content: string, schema: ZodSchema<T>): T;
29
+ parseJSON<T>(content: string, schema: ZodSchema<T>, options: ParseJSONOptions): Promise<T>;
29
30
  }
30
31
  export { extractJSON, DEFAULT_MAX_TOKENS };
31
32
  /**
@@ -43,6 +44,11 @@ export declare class LLMClient extends BaseLLMClient implements ILLMClient {
43
44
  * Retries up to MAX_RETRY_ATTEMPTS times with exponential backoff.
44
45
  */
45
46
  sendMessage(messages: LLMMessage[], options?: LLMRequestOptions): Promise<LLMResponse>;
47
+ /**
48
+ * Low-level LLM call used by parseJSON retry logic.
49
+ * Sends messages and returns the raw response text.
50
+ */
51
+ protected callLLMRaw(messages: ParseJSONMessage[], systemPrompt?: string): Promise<string>;
46
52
  }
47
53
  /**
48
54
  * Mock implementation for testing.
@@ -54,5 +60,6 @@ export declare class MockLLMClient extends BaseLLMClient implements ILLMClient {
54
60
  constructor(responses: string[]);
55
61
  get callCount(): number;
56
62
  sendMessage(_messages: LLMMessage[], _options?: LLMRequestOptions): Promise<LLMResponse>;
63
+ protected callLLMRaw(_messages: ParseJSONMessage[], _systemPrompt?: string): Promise<string>;
57
64
  }
58
65
  //# sourceMappingURL=llm-client.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"llm-client.d.ts","sourceRoot":"","sources":["../../src/llm/llm-client.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,KAAK,CAAC;AAErC,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAA+D,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnJ,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEtD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAIzD,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,YAAY,EAAE,SAAS,EAAE,CAAC;AAE1B,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oFAAoF;IACpF,UAAU,CAAC,EAAE,SAAS,CAAC;CACxB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE;QACL,YAAY,EAAE,MAAM,CAAC;QACrB,aAAa,EAAE,MAAM,CAAC;KACvB,CAAC;IACF,WAAW,EAAE,MAAM,CAAC;CACrB;AAID,MAAM,WAAW,UAAU;IACzB,WAAW,CACT,QAAQ,EAAE,UAAU,EAAE,EACtB,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,WAAW,CAAC,CAAC;IACxB,SAAS,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;CACxD;AAQD,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,CAAC;AAI3C;;;;;GAKG;AACH,qBAAa,SAAU,SAAQ,aAAc,YAAW,UAAU;IAChE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAY;IACnC,OAAO,CAAC,eAAe,CAAC,CAAkB;gBAE9B,MAAM,EAAE,MAAM,EAAE,eAAe,CAAC,EAAE,eAAe,EAAE,UAAU,CAAC,EAAE,MAAM;IAYlF;;;OAGG;IACG,WAAW,CACf,QAAQ,EAAE,UAAU,EAAE,EACtB,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,WAAW,CAAC;CAiGxB;AAID;;;GAGG;AACH,qBAAa,aAAc,SAAQ,aAAc,YAAW,UAAU;IACpE,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAW;IACrC,OAAO,CAAC,UAAU,CAAa;gBAEnB,SAAS,EAAE,MAAM,EAAE;IAK/B,IAAI,SAAS,IAAI,MAAM,CAEtB;IAEK,WAAW,CACf,SAAS,EAAE,UAAU,EAAE,EACvB,QAAQ,CAAC,EAAE,iBAAiB,GAC3B,OAAO,CAAC,WAAW,CAAC;CAqBxB"}
1
+ {"version":3,"file":"llm-client.d.ts","sourceRoot":"","sources":["../../src/llm/llm-client.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,KAAK,CAAC;AAErC,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAA+D,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnJ,OAAO,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAE1F,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAIzD,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,YAAY,EAAE,SAAS,EAAE,CAAC;AAE1B,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oFAAoF;IACpF,UAAU,CAAC,EAAE,SAAS,CAAC;CACxB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE;QACL,YAAY,EAAE,MAAM,CAAC;QACrB,aAAa,EAAE,MAAM,CAAC;KACvB,CAAC;IACF,WAAW,EAAE,MAAM,CAAC;CACrB;AAID,MAAM,WAAW,UAAU;IACzB,WAAW,CACT,QAAQ,EAAE,UAAU,EAAE,EACtB,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,WAAW,CAAC,CAAC;IACxB,SAAS,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACvD,SAAS,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;CAC5F;AAQD,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,CAAC;AAI3C;;;;;GAKG;AACH,qBAAa,SAAU,SAAQ,aAAc,YAAW,UAAU;IAChE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAY;IACnC,OAAO,CAAC,eAAe,CAAC,CAAkB;gBAE9B,MAAM,EAAE,MAAM,EAAE,eAAe,CAAC,EAAE,eAAe,EAAE,UAAU,CAAC,EAAE,MAAM;IAYlF;;;OAGG;IACG,WAAW,CACf,QAAQ,EAAE,UAAU,EAAE,EACtB,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,WAAW,CAAC;IAkGvB;;;OAGG;cACa,UAAU,CAAC,QAAQ,EAAE,gBAAgB,EAAE,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAOjG;AAID;;;GAGG;AACH,qBAAa,aAAc,SAAQ,aAAc,YAAW,UAAU;IACpE,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAW;IACrC,OAAO,CAAC,UAAU,CAAa;gBAEnB,SAAS,EAAE,MAAM,EAAE;IAK/B,IAAI,SAAS,IAAI,MAAM,CAEtB;IAEK,WAAW,CACf,SAAS,EAAE,UAAU,EAAE,EACvB,QAAQ,CAAC,EAAE,iBAAiB,GAC3B,OAAO,CAAC,WAAW,CAAC;cAsBP,UAAU,CAAC,SAAS,EAAE,gBAAgB,EAAE,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAInG"}
@@ -114,6 +114,17 @@ export class LLMClient extends BaseLLMClient {
114
114
  }
115
115
  return result;
116
116
  }
117
+ /**
118
+ * Low-level LLM call used by parseJSON retry logic.
119
+ * Sends messages and returns the raw response text.
120
+ */
121
+ async callLLMRaw(messages, systemPrompt) {
122
+ const llmMessages = messages
123
+ .filter((m) => m.role === "user" || m.role === "assistant")
124
+ .map((m) => ({ role: m.role, content: m.content }));
125
+ const response = await this.sendMessage(llmMessages, systemPrompt ? { system: systemPrompt } : undefined);
126
+ return response.content;
127
+ }
117
128
  }
118
129
  // ─── MockLLMClient ───
119
130
  /**
@@ -146,5 +157,9 @@ export class MockLLMClient extends BaseLLMClient {
146
157
  stop_reason: "end_turn",
147
158
  };
148
159
  }
160
+ async callLLMRaw(_messages, _systemPrompt) {
161
+ const response = await this.sendMessage([]);
162
+ return response.content;
163
+ }
149
164
  }
150
165
  //# sourceMappingURL=llm-client.js.map