@ai0x0/codex-ts 0.1.0 → 0.2.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 (67) hide show
  1. package/dist/core/src/base_instructions.d.ts +20 -0
  2. package/dist/core/src/base_instructions.d.ts.map +1 -0
  3. package/dist/core/src/base_instructions.js +40 -0
  4. package/dist/core/src/base_instructions.js.map +1 -0
  5. package/dist/core/src/codex_thread.d.ts +48 -0
  6. package/dist/core/src/codex_thread.d.ts.map +1 -1
  7. package/dist/core/src/codex_thread.js +72 -6
  8. package/dist/core/src/codex_thread.js.map +1 -1
  9. package/dist/core/src/compact.d.ts +37 -0
  10. package/dist/core/src/compact.d.ts.map +1 -0
  11. package/dist/core/src/compact.js +154 -0
  12. package/dist/core/src/compact.js.map +1 -0
  13. package/dist/core/src/index.d.ts +6 -0
  14. package/dist/core/src/index.d.ts.map +1 -1
  15. package/dist/core/src/index.js +4 -0
  16. package/dist/core/src/index.js.map +1 -1
  17. package/dist/core/src/session/sse.d.ts +7 -0
  18. package/dist/core/src/session/sse.d.ts.map +1 -0
  19. package/dist/core/src/session/sse.js +40 -0
  20. package/dist/core/src/session/sse.js.map +1 -0
  21. package/dist/core/src/session/turn.d.ts +29 -1
  22. package/dist/core/src/session/turn.d.ts.map +1 -1
  23. package/dist/core/src/session/turn.js +90 -40
  24. package/dist/core/src/session/turn.js.map +1 -1
  25. package/dist/core/src/skills.d.ts +66 -0
  26. package/dist/core/src/skills.d.ts.map +1 -0
  27. package/dist/core/src/skills.js +304 -0
  28. package/dist/core/src/skills.js.map +1 -0
  29. package/dist/core/src/state/auto_compact_window.d.ts +42 -0
  30. package/dist/core/src/state/auto_compact_window.d.ts.map +1 -0
  31. package/dist/core/src/state/auto_compact_window.js +59 -0
  32. package/dist/core/src/state/auto_compact_window.js.map +1 -0
  33. package/dist/core/src/tools/router.d.ts +26 -1
  34. package/dist/core/src/tools/router.d.ts.map +1 -1
  35. package/dist/core/src/tools/router.js +15 -2
  36. package/dist/core/src/tools/router.js.map +1 -1
  37. package/dist/core/tests/suite/compact.test.d.ts +10 -0
  38. package/dist/core/tests/suite/compact.test.d.ts.map +1 -0
  39. package/dist/core/tests/suite/compact.test.js +170 -0
  40. package/dist/core/tests/suite/compact.test.js.map +1 -0
  41. package/dist/core/tests/suite/extensions.test.d.ts +8 -0
  42. package/dist/core/tests/suite/extensions.test.d.ts.map +1 -0
  43. package/dist/core/tests/suite/extensions.test.js +186 -0
  44. package/dist/core/tests/suite/extensions.test.js.map +1 -0
  45. package/dist/core/tests/suite/message_item_type.test.d.ts +17 -0
  46. package/dist/core/tests/suite/message_item_type.test.d.ts.map +1 -0
  47. package/dist/core/tests/suite/message_item_type.test.js +111 -0
  48. package/dist/core/tests/suite/message_item_type.test.js.map +1 -0
  49. package/dist/core/tests/suite/skills.test.d.ts +7 -0
  50. package/dist/core/tests/suite/skills.test.d.ts.map +1 -0
  51. package/dist/core/tests/suite/skills.test.js +324 -0
  52. package/dist/core/tests/suite/skills.test.js.map +1 -0
  53. package/dist/protocol/src/index.d.ts +1 -0
  54. package/dist/protocol/src/index.d.ts.map +1 -1
  55. package/dist/protocol/src/protocol.d.ts +32 -0
  56. package/dist/protocol/src/protocol.d.ts.map +1 -1
  57. package/dist/thread-store/src/index.d.ts +1 -0
  58. package/dist/thread-store/src/index.d.ts.map +1 -1
  59. package/dist/thread-store/src/index.js +1 -0
  60. package/dist/thread-store/src/index.js.map +1 -1
  61. package/dist/thread-store/src/indexeddb.d.ts +29 -0
  62. package/dist/thread-store/src/indexeddb.d.ts.map +1 -0
  63. package/dist/thread-store/src/indexeddb.js +97 -0
  64. package/dist/thread-store/src/indexeddb.js.map +1 -0
  65. package/dist/thread-store/src/types.d.ts +2 -0
  66. package/dist/thread-store/src/types.d.ts.map +1 -1
  67. package/package.json +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extensions.test.js","sourceRoot":"","sources":["../../../../core/tests/suite/extensions.test.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAE9D,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAE3E,OAAO,EACL,kBAAkB,EAClB,WAAW,EACX,cAAc,EACd,iBAAiB,EACjB,eAAe,EACf,OAAO,EACP,YAAY,GACb,MAAM,kBAAkB,CAAC;AAE1B,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC5B,UAAU,CAAC,GAAG,EAAE;QACd,EAAE,CAAC,gBAAgB,EAAE,CAAC;IACxB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mDAAmD,EAAE,KAAK,IAAI,EAAE;QACjE,MAAM,SAAS,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QAC1B,SAAS,CAAC,qBAAqB,CAC7B,eAAe,CACb,OAAO,CAAC;YACN,iBAAiB,CAAC,QAAQ,CAAC;YAC3B,cAAc,CAAC,QAAQ,EAAE,WAAW,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;YACtD,WAAW,CAAC,QAAQ,CAAC;SACtB,CAAC,CACH,CACF,CAAC;QACF,SAAS,CAAC,qBAAqB,CAC7B,eAAe,CACb,OAAO,CAAC;YACN,iBAAiB,CAAC,QAAQ,CAAC;YAC3B,kBAAkB,CAAC,MAAM,CAAC;YAC1B,WAAW,CAAC,QAAQ,CAAC;SACtB,CAAC,CACH,CACF,CAAC;QACF,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QAElC,MAAM,KAAK,GAAwC,EAAE,CAAC;QACtD,MAAM,QAAQ,GAAe;YAC3B,IAAI,EAAE,WAAW;YACjB,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;gBACX,IAAI,EAAE,UAAU;gBAChB,IAAI,EAAE;oBACJ,IAAI,EAAE,WAAW;oBACjB,WAAW,EAAE,sBAAsB;oBACnC,UAAU,EAAE;wBACV,IAAI,EAAE,QAAQ;wBACd,UAAU,EAAE,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;wBACzC,QAAQ,EAAE,CAAC,OAAO,CAAC;wBACnB,oBAAoB,EAAE,KAAK;qBAC5B;oBACD,MAAM,EAAE,KAAK;iBACd;aACF,CAAC;YACF,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE;gBAC3B,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;gBACzC,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAG,IAA0B,CAAC,KAAK,EAAE,CAAC,CAAC;YACvE,CAAC;SACF,CAAC;QAEF,MAAM,KAAK,GAAG,IAAI,WAAW,CAAC;YAC5B,MAAM,EAAE,MAAM;YACd,KAAK,EAAE,QAAQ;YACf,WAAW,EAAE,CAAC,QAAQ,CAAC;SACxB,CAAC,CAAC;QACH,MAAM,KAAK,CAAC,MAAM,CAAC;YACjB,IAAI,EAAE,WAAW;YACjB,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;SAC3C,CAAC,CAAC;QAEH,MAAM,YAAY,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,cAAc,CAAC,CAAC;QAE5D,MAAM,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAC9B,MAAM,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAChD,MAAM,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAExC,2DAA2D;QAC3D,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC,CAAgB,CAAC;QAC7D,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAc,CAEpD,CAAC;QACF,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEvE,oEAAoE;QACpE,MAAM,UAAU,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC,CAAgB,CAAC;QAC9D,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAc,CAEtD,CAAC;QACF,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAClC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,sBAAsB,CAC/C,CAAC;QACF,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,KAAK,IAAI,EAAE;QAC7D,MAAM,SAAS,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CACzC,eAAe,CACb,OAAO,CAAC;YACN,iBAAiB,CAAC,QAAQ,CAAC;YAC3B,kBAAkB,CAAC,IAAI,CAAC;YACxB,WAAW,CAAC,QAAQ,CAAC;SACtB,CAAC,CACH,CACF,CAAC;QACF,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QAElC,MAAM,KAAK,GAAG,IAAI,WAAW,CAAC;YAC5B,MAAM,EAAE,MAAM;YACd,KAAK,EAAE,cAAc;YACrB,YAAY,EAAE,qBAAqB;SACpC,CAAC,CAAC;QACH,MAAM,KAAK,CAAC,MAAM,CAAC;YACjB,IAAI,EAAE,WAAW;YACjB,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;YACrC,YAAY,EAAE,mBAAmB;YACjC,KAAK,EAAE,YAAY;SACpB,CAAC,CAAC;QACH,MAAM,YAAY,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,cAAc,CAAC,CAAC;QAE5D,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC,CAAgB,CAAC;QACxD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAc,CAG1C,CAAC;QACF,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACtC,sEAAsE;QACtE,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC;QACzD,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;IACzB,UAAU,CAAC,GAAG,EAAE;QACd,EAAE,CAAC,gBAAgB,EAAE,CAAC;IACxB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;QAC5D,MAAM,SAAS,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAC1C,CAAC,IAAY,EAAE,IAAiB,EAAqB,EAAE,CACrD,IAAI,OAAO,CAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE;YACzC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;YAC3B,MAAM,OAAO,GAAG,GAAG,EAAE,CACnB,MAAM,CAAC,IAAI,YAAY,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC;YACpD,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;gBACpB,OAAO,EAAE,CAAC;gBACV,OAAO;YACT,CAAC;YACD,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC7C,CAAC,CAAC,CACL,CAAC;QACF,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QAElC,MAAM,KAAK,GAAG,IAAI,WAAW,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QACnE,MAAM,KAAK,CAAC,MAAM,CAAC;YACjB,IAAI,EAAE,WAAW;YACjB,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;SACxC,CAAC,CAAC;QACH,MAAM,YAAY,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,aAAa,CAAC,CAAC;QAC3D,8DAA8D;QAC9D,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;QAExD,MAAM,KAAK,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC;QAE1C,MAAM,GAAG,GAAG,MAAM,YAAY,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC;QACjE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,iFAAiF;AAEjF,SAAS,kBAAkB;IACzB,OAAO,eAAe,CACpB,OAAO,CAAC,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE,kBAAkB,CAAC,IAAI,CAAC,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAC9E,CAAC;AACJ,CAAC;AAED,SAAS,oBAAoB,CAAC,SAAmC;IAC/D,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC,CAAgB,CAAC;IACxD,OAAQ,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAc,CAA+B,CAAC,YAAY,IAAI,EAAE,CAAC;AAC3F,CAAC;AAED,QAAQ,CAAC,2BAA2B,EAAE,GAAG,EAAE;IACzC,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAE7C,EAAE,CAAC,oEAAoE,EAAE,KAAK,IAAI,EAAE;QAClF,MAAM,SAAS,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,kBAAkB,EAAE,CAAC,CAAC;QAClE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QAElC,MAAM,KAAK,GAAG,IAAI,WAAW,CAAC;YAC5B,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YACvB,YAAY,EAAE,kBAAkB;SACjC,CAAC,CAAC;QACH,MAAM,KAAK,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;QACjF,MAAM,YAAY,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,cAAc,CAAC,CAAC;QAE5D,MAAM,KAAK,GAAG,oBAAoB,CAAC,SAAS,CAAC,CAAC;QAC9C,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,yBAAyB,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QAChE,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC;QAC5C,mBAAmB;QACnB,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,yBAAyB,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;aAC1D,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;QACtE,MAAM,SAAS,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,kBAAkB,EAAE,CAAC,CAAC;QAClE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QAElC,MAAM,KAAK,GAAG,IAAI,WAAW,CAAC;YAC5B,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YACvB,gBAAgB,EAAE,EAAE;YACpB,YAAY,EAAE,UAAU;SACzB,CAAC,CAAC;QACH,MAAM,KAAK,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;QACjF,MAAM,YAAY,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,cAAc,CAAC,CAAC;QAE5D,MAAM,KAAK,GAAG,oBAAoB,CAAC,SAAS,CAAC,CAAC;QAC9C,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kEAAkE,EAAE,KAAK,IAAI,EAAE;QAChF,MAAM,SAAS,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,kBAAkB,EAAE,CAAC,CAAC;QAClE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QAElC,MAAM,KAAK,GAAG,IAAI,WAAW,CAAC;YAC5B,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;YACvB,YAAY,EAAE,cAAc;SAC7B,CAAC,CAAC;QACH,MAAM,KAAK,CAAC,MAAM,CAAC;YACjB,IAAI,EAAE,WAAW;YACjB,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;YACrC,YAAY,EAAE,mBAAmB;SAClC,CAAC,CAAC;QACH,MAAM,YAAY,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,cAAc,CAAC,CAAC;QAE5D,MAAM,KAAK,GAAG,oBAAoB,CAAC,SAAS,CAAC,CAAC;QAC9C,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC;QAC7C,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;QAC5C,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,yBAAyB,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IAClE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Regression: Responses API `input` message items MUST carry `type: "message"`.
3
+ *
4
+ * codex-rs serializes `ResponseItem::Message` with
5
+ * `#[serde(tag = "type", rename_all = "snake_case")]`, so every message rides
6
+ * the wire as `{"type":"message","role":...,"content":...}`. codex-ts must
7
+ * mirror that exactly. Discriminating user/assistant by `role` alone (omitting
8
+ * `type`) is a silent divergence: strict Responses-API translators that key off
9
+ * `type` (e.g. codeproxy's `String(item.type) || "message"`, which turns a
10
+ * missing `type` into the literal string `"undefined"`) then DROP every message
11
+ * item — the model receives only the system prompt and replies with nonsense.
12
+ *
13
+ * These tests capture the actual request body and assert the discriminator is
14
+ * present on user, assistant (replayed as history), and context items.
15
+ */
16
+ export {};
17
+ //# sourceMappingURL=message_item_type.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message_item_type.test.d.ts","sourceRoot":"","sources":["../../../../core/tests/suite/message_item_type.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG"}
@@ -0,0 +1,111 @@
1
+ /**
2
+ * Regression: Responses API `input` message items MUST carry `type: "message"`.
3
+ *
4
+ * codex-rs serializes `ResponseItem::Message` with
5
+ * `#[serde(tag = "type", rename_all = "snake_case")]`, so every message rides
6
+ * the wire as `{"type":"message","role":...,"content":...}`. codex-ts must
7
+ * mirror that exactly. Discriminating user/assistant by `role` alone (omitting
8
+ * `type`) is a silent divergence: strict Responses-API translators that key off
9
+ * `type` (e.g. codeproxy's `String(item.type) || "message"`, which turns a
10
+ * missing `type` into the literal string `"undefined"`) then DROP every message
11
+ * item — the model receives only the system prompt and replies with nonsense.
12
+ *
13
+ * These tests capture the actual request body and assert the discriminator is
14
+ * present on user, assistant (replayed as history), and context items.
15
+ */
16
+ import { beforeEach, describe, expect, it, vi } from "vitest";
17
+ import { CodexThread } from "../../src/codex_thread.js";
18
+ import { evAssistantMessage, evCompleted, evResponseCreated, makeSseResponse, sseFlat, waitForEvent, } from "../common/lib.js";
19
+ const SKILLS = [
20
+ {
21
+ name: "song-analyzer",
22
+ description: "Analyze a song.",
23
+ path: ".agents/skills/song-analyzer/SKILL.md",
24
+ },
25
+ ];
26
+ function mockSingleTurn(assistantText = "ok") {
27
+ const fetchMock = vi.fn().mockResolvedValue(makeSseResponse(sseFlat([
28
+ evResponseCreated("r1"),
29
+ evAssistantMessage(assistantText),
30
+ evCompleted("r1"),
31
+ ])));
32
+ vi.stubGlobal("fetch", fetchMock);
33
+ return fetchMock;
34
+ }
35
+ function inputOf(fetchMock, callIndex = 0) {
36
+ const init = fetchMock.mock.calls[callIndex][1];
37
+ return JSON.parse(init.body).input;
38
+ }
39
+ describe("Responses input items carry the `type` discriminator", () => {
40
+ beforeEach(() => {
41
+ vi.unstubAllGlobals();
42
+ });
43
+ it("tags the user message with type:'message'", async () => {
44
+ const fetchMock = mockSingleTurn();
45
+ const codex = new CodexThread({ apiKey: "k", model: "m" });
46
+ await codex.submit({
47
+ type: "UserInput",
48
+ items: [{ type: "text", text: "你好" }],
49
+ });
50
+ await waitForEvent(codex, (m) => m.type === "TurnComplete");
51
+ const userMsg = inputOf(fetchMock).find((it) => it.role === "user");
52
+ expect(userMsg).toBeDefined();
53
+ expect(userMsg.type).toBe("message");
54
+ });
55
+ it("tags every role-bearing item (user + context) and emits no role-only item", async () => {
56
+ const fetchMock = mockSingleTurn();
57
+ const codex = new CodexThread({
58
+ apiKey: "k",
59
+ model: "m",
60
+ baseInstructions: "",
61
+ agentsMd: "PROJECT_DOC",
62
+ skills: SKILLS,
63
+ });
64
+ await codex.submit({
65
+ type: "UserInput",
66
+ items: [{ type: "text", text: "hi" }],
67
+ });
68
+ await waitForEvent(codex, (m) => m.type === "TurnComplete");
69
+ const input = inputOf(fetchMock);
70
+ // contextItems (agentsMd + catalog) + the user message all carry a role.
71
+ const roleItems = input.filter((it) => "role" in it);
72
+ expect(roleItems.length).toBeGreaterThan(1);
73
+ for (const item of roleItems) {
74
+ expect(item.type).toBe("message");
75
+ }
76
+ // Invariant: a role-bearing item without type:"message" is exactly the bug.
77
+ expect(input.some((it) => "role" in it && it.type !== "message")).toBe(false);
78
+ });
79
+ it("tags the assistant message when it is replayed as history next turn", async () => {
80
+ const fetchMock = vi
81
+ .fn()
82
+ .mockResolvedValueOnce(makeSseResponse(sseFlat([
83
+ evResponseCreated("r1"),
84
+ evAssistantMessage("hi there"),
85
+ evCompleted("r1"),
86
+ ])))
87
+ .mockResolvedValueOnce(makeSseResponse(sseFlat([
88
+ evResponseCreated("r2"),
89
+ evAssistantMessage("again"),
90
+ evCompleted("r2"),
91
+ ])));
92
+ vi.stubGlobal("fetch", fetchMock);
93
+ const codex = new CodexThread({ apiKey: "k", model: "m" });
94
+ await codex.submit({
95
+ type: "UserInput",
96
+ items: [{ type: "text", text: "first" }],
97
+ });
98
+ await waitForEvent(codex, (m) => m.type === "TurnComplete");
99
+ await codex.submit({
100
+ type: "UserInput",
101
+ items: [{ type: "text", text: "second" }],
102
+ });
103
+ await waitForEvent(codex, (m) => m.type === "TurnComplete");
104
+ // The 2nd request replays turn-1's assistant message as history.
105
+ const assistantMsg = inputOf(fetchMock, 1).find((it) => it.role === "assistant");
106
+ expect(assistantMsg).toBeDefined();
107
+ expect(assistantMsg.type).toBe("message");
108
+ expect(assistantMsg.content).toBe("hi there");
109
+ });
110
+ });
111
+ //# sourceMappingURL=message_item_type.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message_item_type.test.js","sourceRoot":"","sources":["../../../../core/tests/suite/message_item_type.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAE9D,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAExD,OAAO,EACL,kBAAkB,EAClB,WAAW,EACX,iBAAiB,EACjB,eAAe,EACf,OAAO,EACP,YAAY,GACb,MAAM,kBAAkB,CAAC;AAE1B,MAAM,MAAM,GAAoB;IAC9B;QACE,IAAI,EAAE,eAAe;QACrB,WAAW,EAAE,iBAAiB;QAC9B,IAAI,EAAE,uCAAuC;KAC9C;CACF,CAAC;AAIF,SAAS,cAAc,CAAC,aAAa,GAAG,IAAI;IAC1C,MAAM,SAAS,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CACzC,eAAe,CACb,OAAO,CAAC;QACN,iBAAiB,CAAC,IAAI,CAAC;QACvB,kBAAkB,CAAC,aAAa,CAAC;QACjC,WAAW,CAAC,IAAI,CAAC;KAClB,CAAC,CACH,CACF,CAAC;IACF,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IAClC,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,OAAO,CAAC,SAAmC,EAAE,SAAS,GAAG,CAAC;IACjE,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAE,CAAC,CAAC,CAAgB,CAAC;IAChE,OAAQ,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAc,CAA2B,CAAC,KAAK,CAAC;AAC1E,CAAC;AAED,QAAQ,CAAC,sDAAsD,EAAE,GAAG,EAAE;IACpE,UAAU,CAAC,GAAG,EAAE;QACd,EAAE,CAAC,gBAAgB,EAAE,CAAC;IACxB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;QACzD,MAAM,SAAS,GAAG,cAAc,EAAE,CAAC;QACnC,MAAM,KAAK,GAAG,IAAI,WAAW,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;QAC3D,MAAM,KAAK,CAAC,MAAM,CAAC;YACjB,IAAI,EAAE,WAAW;YACjB,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;SACtC,CAAC,CAAC;QACH,MAAM,YAAY,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,cAAc,CAAC,CAAC;QAE5D,MAAM,OAAO,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;QACpE,MAAM,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;QAC9B,MAAM,CAAC,OAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2EAA2E,EAAE,KAAK,IAAI,EAAE;QACzF,MAAM,SAAS,GAAG,cAAc,EAAE,CAAC;QACnC,MAAM,KAAK,GAAG,IAAI,WAAW,CAAC;YAC5B,MAAM,EAAE,GAAG;YACX,KAAK,EAAE,GAAG;YACV,gBAAgB,EAAE,EAAE;YACpB,QAAQ,EAAE,aAAa;YACvB,MAAM,EAAE,MAAM;SACf,CAAC,CAAC;QACH,MAAM,KAAK,CAAC,MAAM,CAAC;YACjB,IAAI,EAAE,WAAW;YACjB,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;SACtC,CAAC,CAAC;QACH,MAAM,YAAY,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,cAAc,CAAC,CAAC;QAE5D,MAAM,KAAK,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;QACjC,yEAAyE;QACzE,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;QACrD,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QAC5C,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;YAC7B,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACpC,CAAC;QACD,4EAA4E;QAC5E,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAChF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qEAAqE,EAAE,KAAK,IAAI,EAAE;QACnF,MAAM,SAAS,GAAG,EAAE;aACjB,EAAE,EAAE;aACJ,qBAAqB,CACpB,eAAe,CACb,OAAO,CAAC;YACN,iBAAiB,CAAC,IAAI,CAAC;YACvB,kBAAkB,CAAC,UAAU,CAAC;YAC9B,WAAW,CAAC,IAAI,CAAC;SAClB,CAAC,CACH,CACF;aACA,qBAAqB,CACpB,eAAe,CACb,OAAO,CAAC;YACN,iBAAiB,CAAC,IAAI,CAAC;YACvB,kBAAkB,CAAC,OAAO,CAAC;YAC3B,WAAW,CAAC,IAAI,CAAC;SAClB,CAAC,CACH,CACF,CAAC;QACJ,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QAElC,MAAM,KAAK,GAAG,IAAI,WAAW,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;QAC3D,MAAM,KAAK,CAAC,MAAM,CAAC;YACjB,IAAI,EAAE,WAAW;YACjB,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;SACzC,CAAC,CAAC;QACH,MAAM,YAAY,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,cAAc,CAAC,CAAC;QAC5D,MAAM,KAAK,CAAC,MAAM,CAAC;YACjB,IAAI,EAAE,WAAW;YACjB,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;SAC1C,CAAC,CAAC;QACH,MAAM,YAAY,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,cAAc,CAAC,CAAC;QAE5D,iEAAiE;QACjE,MAAM,YAAY,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI,CAC7C,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,KAAK,WAAW,CAChC,CAAC;QACF,MAAM,CAAC,YAAY,CAAC,CAAC,WAAW,EAAE,CAAC;QACnC,MAAM,CAAC,YAAa,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC3C,MAAM,CAAC,YAAa,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Tests for the two-layer skill injection (mirrors codex-rs core-skills):
3
+ * - Layer 1: renderSkillsCatalog() — always-on "## Skills" index
4
+ * - Layer 2: extractSkillMentions() / loadSkillContent — `$skill-name` → full body
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=skills.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skills.test.d.ts","sourceRoot":"","sources":["../../../../core/tests/suite/skills.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
@@ -0,0 +1,324 @@
1
+ /**
2
+ * Tests for the two-layer skill injection (mirrors codex-rs core-skills):
3
+ * - Layer 1: renderSkillsCatalog() — always-on "## Skills" index
4
+ * - Layer 2: extractSkillMentions() / loadSkillContent — `$skill-name` → full body
5
+ */
6
+ import { beforeEach, describe, expect, it, vi } from "vitest";
7
+ import { CodexThread } from "../../src/codex_thread.js";
8
+ import { defaultSkillMetadataBudget, extractSkillMentions, renderSkillInjection, renderSkillsCatalog, } from "../../src/skills.js";
9
+ import { evAssistantMessage, evCompleted, evResponseCreated, makeSseResponse, sseFlat, waitForEvent, } from "../common/lib.js";
10
+ const SKILLS = [
11
+ {
12
+ name: "song-analyzer",
13
+ description: "Analyze a song.",
14
+ path: ".agents/skills/song-analyzer/SKILL.md",
15
+ },
16
+ {
17
+ name: "mv-workflow",
18
+ description: "End-to-end MV workflow.",
19
+ path: ".agents/skills/mv-workflow/SKILL.md",
20
+ },
21
+ ];
22
+ describe("renderSkillsCatalog", () => {
23
+ it("returns an empty string when there are no skills", () => {
24
+ expect(renderSkillsCatalog([])).toBe("");
25
+ });
26
+ it("renders header, one line per skill, and the how-to-use section", () => {
27
+ const out = renderSkillsCatalog(SKILLS);
28
+ expect(out).toContain("## Skills");
29
+ expect(out).toContain("### Available skills");
30
+ expect(out).toContain("- song-analyzer: Analyze a song. (file: .agents/skills/song-analyzer/SKILL.md)");
31
+ expect(out).toContain("### How to use skills");
32
+ });
33
+ });
34
+ describe("extractSkillMentions", () => {
35
+ it("matches a $skill-name mention", () => {
36
+ const result = extractSkillMentions("please run $song-analyzer now", SKILLS);
37
+ expect(result.map((s) => s.name)).toEqual(["song-analyzer"]);
38
+ });
39
+ it("ignores unknown mentions and common env vars", () => {
40
+ expect(extractSkillMentions("echo $HOME and $nope", SKILLS)).toEqual([]);
41
+ });
42
+ it("preserves skills order and de-dupes repeats", () => {
43
+ const result = extractSkillMentions("$mv-workflow then $song-analyzer and $song-analyzer again", SKILLS);
44
+ expect(result.map((s) => s.name)).toEqual(["song-analyzer", "mv-workflow"]);
45
+ });
46
+ it("only matches a plain name when it is unique", () => {
47
+ const dup = [
48
+ ...SKILLS,
49
+ { name: "song-analyzer", description: "dup", path: "other/SKILL.md" },
50
+ ];
51
+ expect(extractSkillMentions("$song-analyzer", dup)).toEqual([]);
52
+ });
53
+ });
54
+ describe("renderSkillInjection", () => {
55
+ it("wraps the body in the <skill> envelope", () => {
56
+ const out = renderSkillInjection(SKILLS[0], "BODY");
57
+ expect(out).toBe("<skill>\n<name>song-analyzer</name>\n<path>.agents/skills/song-analyzer/SKILL.md</path>\nBODY\n</skill>");
58
+ });
59
+ });
60
+ describe("skill injection inside a turn", () => {
61
+ beforeEach(() => {
62
+ vi.unstubAllGlobals();
63
+ });
64
+ it("injects the catalog into the request instructions (Layer 1)", async () => {
65
+ const fetchMock = vi.fn().mockResolvedValue(makeSseResponse(sseFlat([
66
+ evResponseCreated("r1"),
67
+ evAssistantMessage("ok"),
68
+ evCompleted("r1"),
69
+ ])));
70
+ vi.stubGlobal("fetch", fetchMock);
71
+ const codex = new CodexThread({ apiKey: "k", model: "m", skills: SKILLS });
72
+ await codex.submit({
73
+ type: "UserInput",
74
+ items: [{ type: "text", text: "hi" }],
75
+ });
76
+ await waitForEvent(codex, (m) => m.type === "TurnComplete");
77
+ const init = fetchMock.mock.calls[0][1];
78
+ const body = JSON.parse(init.body);
79
+ // Catalog rides as a discrete input message, NOT in the instructions field.
80
+ expect(body.instructions ?? "").not.toContain("## Skills");
81
+ expect(JSON.stringify(body.input)).toContain("## Skills");
82
+ expect(JSON.stringify(body.input)).toContain("- song-analyzer:");
83
+ });
84
+ it("injects the full skill body on $mention, ahead of history (Layer 2)", async () => {
85
+ const fetchMock = vi.fn().mockResolvedValue(makeSseResponse(sseFlat([
86
+ evResponseCreated("r1"),
87
+ evAssistantMessage("ok"),
88
+ evCompleted("r1"),
89
+ ])));
90
+ vi.stubGlobal("fetch", fetchMock);
91
+ const loaded = [];
92
+ const codex = new CodexThread({
93
+ apiKey: "k",
94
+ model: "m",
95
+ skills: SKILLS,
96
+ loadSkillContent: async (s) => {
97
+ loaded.push(s.name);
98
+ return `BODY:${s.name}`;
99
+ },
100
+ });
101
+ await codex.submit({
102
+ type: "UserInput",
103
+ items: [{ type: "text", text: "use $song-analyzer please" }],
104
+ });
105
+ await waitForEvent(codex, (m) => m.type === "TurnComplete");
106
+ // Only the mentioned skill's body is loaded.
107
+ expect(loaded).toEqual(["song-analyzer"]);
108
+ const init = fetchMock.mock.calls[0][1];
109
+ const body = JSON.parse(init.body);
110
+ // The skill body rides in input as a turn-scoped message (after the catalog).
111
+ const inputStr = JSON.stringify(body.input);
112
+ expect(inputStr).toContain("<skill>");
113
+ expect(inputStr).toContain("BODY:song-analyzer");
114
+ // The real user message stays last (context messages are prepended).
115
+ expect(JSON.stringify(body.input[body.input.length - 1])).toContain("use $song-analyzer please");
116
+ });
117
+ it("does not load any skill body without a mention", async () => {
118
+ const fetchMock = vi.fn().mockResolvedValue(makeSseResponse(sseFlat([
119
+ evResponseCreated("r1"),
120
+ evAssistantMessage("ok"),
121
+ evCompleted("r1"),
122
+ ])));
123
+ vi.stubGlobal("fetch", fetchMock);
124
+ const loaded = [];
125
+ const codex = new CodexThread({
126
+ apiKey: "k",
127
+ model: "m",
128
+ skills: SKILLS,
129
+ loadSkillContent: async (s) => {
130
+ loaded.push(s.name);
131
+ return "BODY";
132
+ },
133
+ });
134
+ await codex.submit({
135
+ type: "UserInput",
136
+ items: [{ type: "text", text: "just chatting" }],
137
+ });
138
+ await waitForEvent(codex, (m) => m.type === "TurnComplete");
139
+ expect(loaded).toEqual([]);
140
+ });
141
+ });
142
+ describe("catalog budget (mirrors render.rs)", () => {
143
+ const many = Array.from({ length: 5 }, (_, i) => ({
144
+ name: `skill-${i}`,
145
+ description: "A fairly long description that will need trimming when the budget is tight.",
146
+ path: `.agents/skills/skill-${i}/SKILL.md`,
147
+ }));
148
+ it("defaultSkillMetadataBudget: 2% tokens with a context window, else 8000 chars", () => {
149
+ expect(defaultSkillMetadataBudget(/*contextWindow*/ 128_000)).toEqual({
150
+ kind: "tokens",
151
+ limit: 2_560,
152
+ });
153
+ expect(defaultSkillMetadataBudget()).toEqual({
154
+ kind: "characters",
155
+ limit: 8_000,
156
+ });
157
+ });
158
+ it("keeps full descriptions under a generous budget", () => {
159
+ const out = renderSkillsCatalog(many, {
160
+ kind: "characters",
161
+ limit: 100_000,
162
+ });
163
+ expect(out).toContain("A fairly long description that will need trimming when the budget is tight.");
164
+ for (let i = 0; i < 5; i += 1) {
165
+ expect(out).toContain(`skill-${i}`);
166
+ }
167
+ });
168
+ it("trims descriptions but keeps every skill when the budget is tight", () => {
169
+ const out = renderSkillsCatalog(many, { kind: "characters", limit: 350 });
170
+ for (let i = 0; i < 5; i += 1) {
171
+ expect(out).toContain(`skill-${i}`);
172
+ }
173
+ // The full description no longer fits verbatim.
174
+ expect(out).not.toContain("A fairly long description that will need trimming when the budget is tight.");
175
+ });
176
+ it("appends truncation warning when descriptions are shortened (mirrors render.rs)", () => {
177
+ const out = renderSkillsCatalog(many, { kind: "characters", limit: 350 });
178
+ // At least one description must be shortened → truncation warning appears
179
+ expect(out).toContain("Skill descriptions were shortened to fit the skills context budget.");
180
+ });
181
+ it("appends omission warning when skills are dropped (mirrors render.rs)", () => {
182
+ const out = renderSkillsCatalog(many, { kind: "characters", limit: 80 });
183
+ const shown = many.filter((skill) => out.includes(skill.name)).length;
184
+ expect(shown).toBeGreaterThan(0);
185
+ expect(shown).toBeLessThan(5);
186
+ // Omission warning must appear
187
+ expect(out).toContain("not included in the model-visible skills list.");
188
+ });
189
+ it("no warning when all skills and descriptions fit", () => {
190
+ const out = renderSkillsCatalog(many, { kind: "characters", limit: 100_000 });
191
+ expect(out).not.toContain("shortened to fit");
192
+ expect(out).not.toContain("not included in the model-visible skills list.");
193
+ });
194
+ });
195
+ describe("AGENTS.md injection (mirrors AgentsMdManager)", () => {
196
+ /**
197
+ * Mirrors codex-rs AgentsMdManager / user_instructions fragment behaviour.
198
+ * Architecture: agentsMd rides as a discrete user_instructions `input`
199
+ * message (format: "# AGENTS.md instructions\n\n<INSTRUCTIONS>…</INSTRUCTIONS>"),
200
+ * NOT merged into the `instructions` field — this keeps developer instructions
201
+ * and project docs as separate model-visible boundaries (codex-rs contextItems).
202
+ * When agentsMd is absent, no AGENTS.md message is injected.
203
+ */
204
+ beforeEach(() => {
205
+ vi.unstubAllGlobals();
206
+ });
207
+ it("rides agentsMd as a discrete user_instructions input message", async () => {
208
+ const fetchMock = vi.fn().mockResolvedValue(makeSseResponse(sseFlat([
209
+ evResponseCreated("r1"),
210
+ evAssistantMessage("ok"),
211
+ evCompleted("r1"),
212
+ ])));
213
+ vi.stubGlobal("fetch", fetchMock);
214
+ const codex = new CodexThread({
215
+ apiKey: "k",
216
+ model: "m",
217
+ instructions: "DEV_INSTRUCTIONS",
218
+ agentsMd: "PROJECT_DOC_BODY",
219
+ });
220
+ await codex.submit({
221
+ type: "UserInput",
222
+ items: [{ type: "text", text: "hi" }],
223
+ });
224
+ await waitForEvent(codex, (m) => m.type === "TurnComplete");
225
+ const init = fetchMock.mock.calls[0][1];
226
+ const body = JSON.parse(init.body);
227
+ // Developer instructions stay in the instructions field (base + developer);
228
+ // AGENTS.md rides as a discrete user_instructions input message.
229
+ expect(body.instructions ?? "").toContain("DEV_INSTRUCTIONS");
230
+ const inputStr = JSON.stringify(body.input);
231
+ expect(inputStr).toContain("# AGENTS.md instructions");
232
+ expect(inputStr).toContain("PROJECT_DOC_BODY");
233
+ expect(body.instructions ?? "").not.toContain("PROJECT_DOC_BODY");
234
+ });
235
+ it("rides agentsMd in an input message even when base is empty", async () => {
236
+ // base "" → empty instructions; agentsMd still rides as an input message
237
+ const fetchMock = vi.fn().mockResolvedValue(makeSseResponse(sseFlat([
238
+ evResponseCreated("r1"),
239
+ evAssistantMessage("ok"),
240
+ evCompleted("r1"),
241
+ ])));
242
+ vi.stubGlobal("fetch", fetchMock);
243
+ const codex = new CodexThread({
244
+ apiKey: "k",
245
+ model: "m",
246
+ baseInstructions: "", // suppress default so only agentsMd appears
247
+ agentsMd: "ONLY_PROJECT_DOC",
248
+ });
249
+ await codex.submit({
250
+ type: "UserInput",
251
+ items: [{ type: "text", text: "hi" }],
252
+ });
253
+ await waitForEvent(codex, (m) => m.type === "TurnComplete");
254
+ const init = fetchMock.mock.calls[0][1];
255
+ const body = JSON.parse(init.body);
256
+ expect(JSON.stringify(body.input)).toContain("ONLY_PROJECT_DOC");
257
+ expect(body.instructions ?? "").not.toContain("ONLY_PROJECT_DOC");
258
+ });
259
+ it("emits no AGENTS.md input message when none is provided", async () => {
260
+ // instructions + no doc → developer text in instructions, no AGENTS.md msg
261
+ const fetchMock = vi.fn().mockResolvedValue(makeSseResponse(sseFlat([
262
+ evResponseCreated("r1"),
263
+ evAssistantMessage("ok"),
264
+ evCompleted("r1"),
265
+ ])));
266
+ vi.stubGlobal("fetch", fetchMock);
267
+ const codex = new CodexThread({
268
+ apiKey: "k",
269
+ model: "m",
270
+ instructions: "DEV_INSTRUCTIONS",
271
+ // no agentsMd
272
+ });
273
+ await codex.submit({
274
+ type: "UserInput",
275
+ items: [{ type: "text", text: "hi" }],
276
+ });
277
+ await waitForEvent(codex, (m) => m.type === "TurnComplete");
278
+ const init = fetchMock.mock.calls[0][1];
279
+ const body = JSON.parse(init.body);
280
+ // Developer instructions ride in the instructions field; no AGENTS.md message.
281
+ expect(body.instructions ?? "").toContain("DEV_INSTRUCTIONS");
282
+ expect(JSON.stringify(body.input)).not.toContain("# AGENTS.md instructions");
283
+ });
284
+ it("orders context items: agentsMd → catalog → $mention body → user message", async () => {
285
+ // Verifies the full input ordering mirrors codex-rs TurnContext:
286
+ // contextItems (agentsMd, catalog) → skillInjectionItems ($mention) → history
287
+ const fetchMock = vi.fn().mockResolvedValue(makeSseResponse(sseFlat([
288
+ evResponseCreated("r1"),
289
+ evAssistantMessage("ok"),
290
+ evCompleted("r1"),
291
+ ])));
292
+ vi.stubGlobal("fetch", fetchMock);
293
+ const codex = new CodexThread({
294
+ apiKey: "k",
295
+ model: "m",
296
+ baseInstructions: "",
297
+ agentsMd: "PROJECT_DOC",
298
+ skills: SKILLS,
299
+ loadSkillContent: async () => "SKILL_BODY",
300
+ });
301
+ await codex.submit({
302
+ type: "UserInput",
303
+ items: [{ type: "text", text: "use $song-analyzer please" }],
304
+ });
305
+ await waitForEvent(codex, (m) => m.type === "TurnComplete");
306
+ const init = fetchMock.mock.calls[0][1];
307
+ const body = JSON.parse(init.body);
308
+ const inputStr = JSON.stringify(body.input);
309
+ // All four layers must be present
310
+ expect(inputStr).toContain("# AGENTS.md instructions"); // agentsMd
311
+ expect(inputStr).toContain("## Skills"); // catalog
312
+ expect(inputStr).toContain("<skill>"); // $mention body
313
+ expect(inputStr).toContain("use $song-analyzer please"); // user message
314
+ // Ordering: agentsMd before catalog before $mention before user message
315
+ const posAgentsMd = inputStr.indexOf("# AGENTS.md instructions");
316
+ const posCatalog = inputStr.indexOf("## Skills");
317
+ const posSkill = inputStr.indexOf("<skill>");
318
+ const posUser = inputStr.indexOf("use $song-analyzer please");
319
+ expect(posAgentsMd).toBeLessThan(posCatalog);
320
+ expect(posCatalog).toBeLessThan(posSkill);
321
+ expect(posSkill).toBeLessThan(posUser);
322
+ });
323
+ });
324
+ //# sourceMappingURL=skills.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skills.test.js","sourceRoot":"","sources":["../../../../core/tests/suite/skills.test.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  export type { UserInput } from "./user_input.js";
2
2
  export type { RequestUserInputQuestionOption, RequestUserInputQuestion, RequestUserInputArgs, RequestUserInputAnswer, RequestUserInputResponse, RequestUserInputEvent, } from "./request_user_input.js";
3
3
  export type { StepStatus, PlanItemArg, UpdatePlanArgs } from "./plan_tool.js";
4
+ export type { ContextCompactedEvent, WarningEvent } from "./protocol.js";
4
5
  export type { ThreadGoalStatus, ThreadGoal, TurnStartedEvent, TurnCompleteEvent, AgentMessageEvent, AgentMessageContentDeltaEvent, ThreadGoalUpdatedEvent, ErrorEvent, EventMsg, Event, Op, } from "./protocol.js";
5
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../protocol/src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,YAAY,EACV,8BAA8B,EAC9B,wBAAwB,EACxB,oBAAoB,EACpB,sBAAsB,EACtB,wBAAwB,EACxB,qBAAqB,GACtB,MAAM,yBAAyB,CAAC;AACjC,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAC9E,YAAY,EACV,gBAAgB,EAChB,UAAU,EACV,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,6BAA6B,EAC7B,sBAAsB,EACtB,UAAU,EACV,QAAQ,EACR,KAAK,EACL,EAAE,GACH,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../protocol/src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,YAAY,EACV,8BAA8B,EAC9B,wBAAwB,EACxB,oBAAoB,EACpB,sBAAsB,EACtB,wBAAwB,EACxB,qBAAqB,GACtB,MAAM,yBAAyB,CAAC;AACjC,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAC9E,YAAY,EAAE,qBAAqB,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AACzE,YAAY,EACV,gBAAgB,EAChB,UAAU,EACV,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,6BAA6B,EAC7B,sBAAsB,EACtB,UAAU,EACV,QAAQ,EACR,KAAK,EACL,EAAE,GACH,MAAM,eAAe,CAAC"}
@@ -38,6 +38,18 @@ export interface ThreadGoalUpdatedEvent {
38
38
  }
39
39
  export interface ErrorEvent {
40
40
  message: string;
41
+ /**
42
+ * Browser-specific extension — no equivalent in codex-rs/protocol ErrorEvent.
43
+ * Lets hosts correlate an error with the turn that produced it (e.g. to
44
+ * suppress stale-turn errors after an Interrupt).
45
+ */
46
+ turn_id?: string | undefined;
47
+ }
48
+ /** mirrors codex-rs/protocol/src/protocol.rs ContextCompactedEvent (unit struct) */
49
+ export type ContextCompactedEvent = Record<never, never>;
50
+ /** mirrors WarningEvent */
51
+ export interface WarningEvent {
52
+ message: string;
41
53
  }
42
54
  export type EventMsg = {
43
55
  type: "TurnStarted";
@@ -60,6 +72,16 @@ export type EventMsg = {
60
72
  } | {
61
73
  type: "PlanUpdate";
62
74
  event: UpdatePlanArgs;
75
+ }
76
+ /** mirrors EventMsg::ContextCompacted — emitted when inline compaction runs */
77
+ | {
78
+ type: "ContextCompacted";
79
+ event: ContextCompactedEvent;
80
+ }
81
+ /** mirrors EventMsg::Warning — post-compaction advisory */
82
+ | {
83
+ type: "Warning";
84
+ event: WarningEvent;
63
85
  } | {
64
86
  type: "Error";
65
87
  event: ErrorEvent;
@@ -73,6 +95,16 @@ export interface Event {
73
95
  export type Op = {
74
96
  type: "UserInput";
75
97
  items: UserInput[];
98
+ /**
99
+ * Per-turn instructions override. Subset of ThreadSettingsOverrides in
100
+ * codex-rs. Falls back to the thread's instructions when omitted.
101
+ */
102
+ instructions?: string | undefined;
103
+ /**
104
+ * Per-turn model override. Subset of ThreadSettingsOverrides in codex-rs.
105
+ * Falls back to the thread's model when omitted.
106
+ */
107
+ model?: string | undefined;
76
108
  } | {
77
109
  type: "UserInputAnswer";
78
110
  /** RequestUserInputEvent.turn_id — identifies which turn to unblock */
@@ -1 +1 @@
1
- {"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../../../protocol/src/protocol.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,EACV,qBAAqB,EACrB,wBAAwB,EACzB,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAIrD,MAAM,MAAM,gBAAgB,GACxB,QAAQ,GACR,QAAQ,GACR,SAAS,GACT,cAAc,GACd,eAAe,GACf,UAAU,CAAC;AAEf,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,gBAAgB,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAID,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,kBAAkB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACzC;AAED,kDAAkD;AAClD,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,mEAAmE;AACnE,MAAM,WAAW,6BAA6B;IAC5C,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,sBAAsB;IACrC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,IAAI,EAAE,UAAU,CAAC;CAClB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;CACjB;AAID,MAAM,MAAM,QAAQ,GAChB;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,KAAK,EAAE,gBAAgB,CAAA;CAAE,GAChD;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,KAAK,EAAE,iBAAiB,CAAA;CAAE,GAClD;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,KAAK,EAAE,iBAAiB,CAAA;CAAE,GAClD;IAAE,IAAI,EAAE,0BAA0B,CAAC;IAAC,KAAK,EAAE,6BAA6B,CAAA;CAAE,GAC1E;IAAE,IAAI,EAAE,kBAAkB,CAAC;IAAC,KAAK,EAAE,qBAAqB,CAAA;CAAE,GAC1D;IAAE,IAAI,EAAE,mBAAmB,CAAC;IAAC,KAAK,EAAE,sBAAsB,CAAA;CAAE,GAC5D;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,KAAK,EAAE,cAAc,CAAA;CAAE,GAC7C;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,UAAU,CAAA;CAAE,CAAC;AAEzC,wFAAwF;AACxF,MAAM,WAAW,KAAK;IACpB,qDAAqD;IACrD,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,QAAQ,CAAC;CACf;AAID,MAAM,MAAM,EAAE,GACV;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,KAAK,EAAE,SAAS,EAAE,CAAA;CAAE,GACzC;IACE,IAAI,EAAE,iBAAiB,CAAC;IACxB,uEAAuE;IACvE,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,wBAAwB,CAAC;CACpC,GACD;IAAE,IAAI,EAAE,WAAW,CAAA;CAAE,CAAC;AAE1B,YAAY,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,CAAC;AAChE,YAAY,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACrD,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC"}
1
+ {"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../../../protocol/src/protocol.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,7 @@ export type { ConversationItem, RolloutItem, CreateThreadParams, AppendThreadIte
2
2
  export type { ThreadStore } from "./store.js";
3
3
  export type { IoBackend } from "./io_backend.js";
4
4
  export { InMemoryIoBackend } from "./io_backend.js";
5
+ export { IndexedDBIoBackend } from "./indexeddb.js";
5
6
  export { InMemoryThreadStore } from "./in_memory.js";
6
7
  export { LocalThreadStore } from "./local_thread_store.js";
7
8
  export { LiveThread } from "./live_thread.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../thread-store/src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,gBAAgB,EAChB,WAAW,EACX,kBAAkB,EAClB,uBAAuB,EACvB,uBAAuB,EACvB,gBAAgB,EAChB,0BAA0B,EAC1B,cAAc,EACd,mBAAmB,EACnB,YAAY,GACb,MAAM,YAAY,CAAC;AAEpB,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9C,YAAY,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../thread-store/src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,gBAAgB,EAChB,WAAW,EACX,kBAAkB,EAClB,uBAAuB,EACvB,uBAAuB,EACvB,gBAAgB,EAChB,0BAA0B,EAC1B,cAAc,EACd,mBAAmB,EACnB,YAAY,GACb,MAAM,YAAY,CAAC;AAEpB,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9C,YAAY,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC"}
@@ -1,4 +1,5 @@
1
1
  export { InMemoryIoBackend } from "./io_backend.js";
2
+ export { IndexedDBIoBackend } from "./indexeddb.js";
2
3
  export { InMemoryThreadStore } from "./in_memory.js";
3
4
  export { LocalThreadStore } from "./local_thread_store.js";
4
5
  export { LiveThread } from "./live_thread.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../thread-store/src/index.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../thread-store/src/index.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC"}