@portel/photon-core 2.22.0 → 2.24.0

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/base.d.ts +56 -0
  2. package/dist/base.d.ts.map +1 -1
  3. package/dist/base.js +100 -2
  4. package/dist/base.js.map +1 -1
  5. package/dist/bases-registry.d.ts +57 -0
  6. package/dist/bases-registry.d.ts.map +1 -0
  7. package/dist/bases-registry.js +127 -0
  8. package/dist/bases-registry.js.map +1 -0
  9. package/dist/data-paths.d.ts +31 -18
  10. package/dist/data-paths.d.ts.map +1 -1
  11. package/dist/data-paths.js +42 -43
  12. package/dist/data-paths.js.map +1 -1
  13. package/dist/description-sanitizer.d.ts +34 -0
  14. package/dist/description-sanitizer.d.ts.map +1 -0
  15. package/dist/description-sanitizer.js +80 -0
  16. package/dist/description-sanitizer.js.map +1 -0
  17. package/dist/index.d.ts +4 -2
  18. package/dist/index.d.ts.map +1 -1
  19. package/dist/index.js +7 -2
  20. package/dist/index.js.map +1 -1
  21. package/dist/memory.d.ts.map +1 -1
  22. package/dist/memory.js +109 -1
  23. package/dist/memory.js.map +1 -1
  24. package/dist/middleware.d.ts.map +1 -1
  25. package/dist/middleware.js +96 -0
  26. package/dist/middleware.js.map +1 -1
  27. package/dist/mixins.d.ts.map +1 -1
  28. package/dist/mixins.js +9 -2
  29. package/dist/mixins.js.map +1 -1
  30. package/dist/path-resolver.d.ts +13 -1
  31. package/dist/path-resolver.d.ts.map +1 -1
  32. package/dist/path-resolver.js +23 -1
  33. package/dist/path-resolver.js.map +1 -1
  34. package/dist/photon-loader-lite.d.ts +17 -2
  35. package/dist/photon-loader-lite.d.ts.map +1 -1
  36. package/dist/photon-loader-lite.js +203 -26
  37. package/dist/photon-loader-lite.js.map +1 -1
  38. package/dist/schedule.d.ts +10 -1
  39. package/dist/schedule.d.ts.map +1 -1
  40. package/dist/schedule.js +20 -10
  41. package/dist/schedule.js.map +1 -1
  42. package/dist/schema-extractor.d.ts +9 -3
  43. package/dist/schema-extractor.d.ts.map +1 -1
  44. package/dist/schema-extractor.js +149 -17
  45. package/dist/schema-extractor.js.map +1 -1
  46. package/dist/stateful.d.ts +3 -2
  47. package/dist/stateful.d.ts.map +1 -1
  48. package/dist/stateful.js +18 -6
  49. package/dist/stateful.js.map +1 -1
  50. package/dist/types.d.ts +9 -1
  51. package/dist/types.d.ts.map +1 -1
  52. package/dist/types.js.map +1 -1
  53. package/package.json +2 -2
  54. package/src/base.ts +123 -2
  55. package/src/bases-registry.ts +141 -0
  56. package/src/data-paths.ts +43 -49
  57. package/src/description-sanitizer.ts +102 -0
  58. package/src/index.ts +20 -1
  59. package/src/memory.ts +109 -0
  60. package/src/middleware.ts +98 -0
  61. package/src/mixins.ts +14 -2
  62. package/src/path-resolver.ts +26 -1
  63. package/src/photon-loader-lite.ts +214 -33
  64. package/src/schedule.ts +26 -10
  65. package/src/schema-extractor.ts +164 -17
  66. package/src/stateful.ts +19 -6
  67. package/src/types.ts +9 -0
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;;;;GAOG;AACH,MAAM,MAAM,YAAY,GACpB,WAAW,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAChD,MAAM,GAAG,UAAU,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,SAAS,GAAG,QAAQ,GACpE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,IAAI,GACvC,OAAO,GAAG,SAAS,MAAM,EAAE,GAAG,QAAQ,GAAG,OAAO,GAAG,UAAU,GAAG,WAAW,GAAG,MAAM,GACpF,QAAQ,GAAG,MAAM,GAAG,WAAW,GAAG,OAAO,GAAG,SAAS,GACrD,MAAM,GAAG,QAAQ,MAAM,EAAE,CAAC;AAE9B,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ,CAAC;QACf,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAChC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;KACrB,CAAC;IACF,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,iFAAiF;IACjF,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB;;;;OAIG;IACH,UAAU,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACtE;AAED;;;GAGG;AACH,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,QAAQ,GAAG,SAAS,GAAG,QAAQ,CAAC;IACtC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC3D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ,CAAC;QACf,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAChC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;KACrB,CAAC;IACF,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,2FAA2F;IAC3F,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,qDAAqD;IACrD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,+CAA+C;IAC/C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;;OAIG;IACH,UAAU,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACrE,yEAAyE;IACzE,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,kEAAkE;IAClE,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC;IACrB,uEAAuE;IACvE,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,6FAA6F;IAC7F,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,gFAAgF;IAChF,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,wEAAwE;IACxE,QAAQ,CAAC,EAAE,OAAO,CAAC;IAInB;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAE3B;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;;OAIG;IACH,MAAM,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAI1B;;;;OAIG;IACH,MAAM,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAE3B;;;;OAIG;IACH,QAAQ,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAE7B;;;;OAIG;IACH,cAAc,CAAC,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;IAE3D;;;;OAIG;IACH,MAAM,CAAC,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IAEzB;;;;OAIG;IACH,OAAO,CAAC,EAAE;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;IAEzB;;;;OAIG;IACH,SAAS,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAE7C;;;;OAIG;IACH,SAAS,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IAEhD;;;;OAIG;IACH,SAAS,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAE9B;;;;OAIG;IACH,MAAM,CAAC,EAAE;QAAE,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;IAEjC;;;;OAIG;IACH,WAAW,CAAC,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAErD;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAI3B;;;;OAIG;IACH,UAAU,CAAC,EAAE,KAAK,CAAC;QACjB,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAC5B,KAAK,EAAE,MAAM,CAAC;KACf,CAAC,CAAC;IAEH,iFAAiF;IACjF,YAAY,CAAC,EAAE,OAAO,CAAC;IAIvB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAItC;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf;;;;OAIG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IAEvB;;;OAGG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAE1B;;;OAGG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB;;;;OAIG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,CAAC,MAAM,GAAG,WAAW,CAAC,EAAE,CAAC;IAEpC;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB;;;OAGG;IACH,YAAY,CAAC,EAAE;QAAE,IAAI,EAAE,QAAQ,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;CACzF;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,QAAQ,EAAE,GAAG,CAAC;IACd,iDAAiD;IACjD,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;CAC7C;AAED,0CAA0C;AAC1C,MAAM,MAAM,cAAc,GAAG,WAAW,CAAC;AAEzC,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;IACpB,YAAY,CAAC,EAAE,GAAG,CAAC;IACnB,uEAAuE;IACvE,WAAW,EAAE,OAAO,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,KAAK,GAAG,KAAK,GAAG,QAAQ,GAAG,OAAO,CAAC;AAE/D;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,gBAAgB,CAAC;IACxB,aAAa,EAAE,aAAa,CAAC;IAC7B,0CAA0C;IAC1C,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,gDAAgD;IAChD,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,gDAAgD;IAChD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gEAAgE;IAChE,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,WAAW,aAAa;IAC5B,gEAAgE;IAChE,IAAI,EAAE,MAAM,CAAC;IACb,sEAAsE;IACtE,MAAM,EAAE,MAAM,CAAC;IACf,2BAA2B;IAC3B,UAAU,EAAE,QAAQ,GAAG,KAAK,GAAG,KAAK,GAAG,OAAO,CAAC;IAC/C,qDAAqD;IACrD,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9B;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,WAAW,gBAAgB;IAC/B,oEAAoE;IACpE,IAAI,EAAE,MAAM,CAAC;IACb,mFAAmF;IACnF,MAAM,EAAE,MAAM,CAAC;IACf,2BAA2B;IAC3B,UAAU,EAAE,aAAa,GAAG,QAAQ,GAAG,KAAK,GAAG,OAAO,CAAC;IACvD,+EAA+E;IAC/E,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;;;;;;;;GAUG;AACH,MAAM,WAAW,aAAa;IAC5B,+CAA+C;IAC/C,IAAI,EAAE,MAAM,CAAC;IACb,kCAAkC;IAClC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAMD;;;;;;;;;GASG;AACH,MAAM,WAAW,OAAO;IACtB,kDAAkD;IAClD,EAAE,EAAE,MAAM,CAAC;IACX,sEAAsE;IACtE,IAAI,EAAE,MAAM,CAAC;IACb,6CAA6C;IAC7C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,0CAA0C;IAC1C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oGAAoG;IACpG,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,uFAAuF;IACvF,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,yEAAyE;IACzE,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,WAAW;IAC1B,wCAAwC;IACxC,EAAE,EAAE,MAAM,CAAC;IACX,sCAAsC;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,6CAA6C;IAC7C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,+DAA+D;IAC/D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,sDAAsD;IACtD,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;CACxF;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,aAAa;IAC5B,wCAAwC;IACxC,EAAE,EAAE,MAAM,CAAC;IACX,sCAAsC;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,6CAA6C;IAC7C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,0CAA0C;IAC1C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,2BAA2B;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,6BAA6B;IAC7B,EAAE,EAAE,OAAO,EAAE,CAAC;IACd,8BAA8B;IAC9B,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,uBAAuB;IACvB,SAAS,EAAE,aAAa,EAAE,CAAC;IAC3B,+CAA+C;IAC/C,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;GAGG;AACH,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG;IAAE,OAAO,EAAE,UAAU,CAAA;CAAE,CAAC;AAExD;;;GAGG;AACH,MAAM,MAAM,MAAM,GAAG,MAAM,GAAG;IAAE,OAAO,EAAE,QAAQ,CAAA;CAAE,CAAC;AAEpD;;GAEG;AACH,eAAO,MAAM,UAAU,GAAI,KAAK,MAAM,KAAG,QAA2B,CAAC;AAErE;;GAEG;AACH,eAAO,MAAM,QAAQ,GAAI,KAAK,MAAM,KAAG,MAAuB,CAAC;AAE/D;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,OAAO,EAAE;QACP,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,eAAe,EAAE,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ,CAAC;QACf,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAChC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;KACrB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ,CAAC;QACf,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAChC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;KACrB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,mBAAoB,SAAQ,WAAW;IACtD,SAAS,EAAE,YAAY,EAAE,CAAC;IAC1B,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,qEAAqE;IACrE,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,6EAA6E;IAC7E,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,uEAAuE;IACvE,cAAc,CAAC,EAAE,cAAc,CAAC;CACjC;AAED,kDAAkD;AAClD,MAAM,MAAM,sBAAsB,GAAG,mBAAmB,CAAC;AAMzD;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,MAAM,GAAG,YAAY,GAAG,KAAK,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAC;AAEnG;;GAEG;AACH,UAAU,YAAY;IACpB,iBAAiB;IACjB,CAAC,EAAE,YAAY,CAAC;IAChB,0BAA0B;IAC1B,EAAE,EAAE,MAAM,CAAC;CACZ;AAED;;GAEG;AACH,MAAM,WAAW,aAAc,SAAQ,YAAY;IACjD,CAAC,EAAE,OAAO,CAAC;IACX,sCAAsC;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,uBAAuB;IACvB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC5B,wCAAwC;IACxC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,YAAa,SAAQ,YAAY;IAChD,CAAC,EAAE,MAAM,CAAC;IACV,sDAAsD;IACtD,IAAI,EAAE,MAAM,CAAC;IACb,mBAAmB;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,2BAA2B;IAC3B,IAAI,CAAC,EAAE,GAAG,CAAC;CACZ;AAED;;GAEG;AACH,MAAM,WAAW,kBAAmB,SAAQ,YAAY;IACtD,CAAC,EAAE,YAAY,CAAC;IAChB,iDAAiD;IACjD,EAAE,EAAE,MAAM,CAAC;IACX,sCAAsC;IACtC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,WAAY,SAAQ,YAAY;IAC/C,CAAC,EAAE,KAAK,CAAC;IACT,aAAa;IACb,EAAE,EAAE,MAAM,CAAC;IACX,6CAA6C;IAC7C,GAAG,EAAE,MAAM,CAAC;IACZ,kBAAkB;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,cAAe,SAAQ,YAAY;IAClD,CAAC,EAAE,QAAQ,CAAC;IACZ,0BAA0B;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,4BAA4B;IAC5B,KAAK,EAAE,GAAG,CAAC;CACZ;AAED;;GAEG;AACH,MAAM,WAAW,cAAe,SAAQ,YAAY;IAClD,CAAC,EAAE,QAAQ,CAAC;IACZ,yBAAyB;IACzB,KAAK,EAAE,GAAG,CAAC;CACZ;AAED;;GAEG;AACH,MAAM,WAAW,aAAc,SAAQ,YAAY;IACjD,CAAC,EAAE,OAAO,CAAC;IACX,oBAAoB;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,wBAAwB;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,MAAM,aAAa,GACrB,aAAa,GACb,YAAY,GACZ,kBAAkB,GAClB,WAAW,GACX,cAAc,GACd,cAAc,GACd,aAAa,CAAC;AAElB;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAEvF;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,oBAAoB;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,kBAAkB;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,uBAAuB;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,uBAAuB;IACvB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC5B,qBAAqB;IACrB,MAAM,EAAE,cAAc,CAAC;IACvB,sBAAsB;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,4BAA4B;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,iDAAiD;IACjD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kCAAkC;IAClC,MAAM,CAAC,EAAE,GAAG,CAAC;IACb,gCAAgC;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,4BAA4B;IAC5B,cAAc,CAAC,EAAE;QACf,EAAE,EAAE,MAAM,CAAC;QACX,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAC3B,EAAE,EAAE,MAAM,CAAC;KACZ,CAAC;CACH;AAMD;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,oBAAoB;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,uDAAuD;IACvD,IAAI,EAAE,MAAM,CAAC;IACb,2CAA2C;IAC3C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mFAAmF;IACnF,OAAO,CAAC,EAAE,GAAG,CAAC;IACd,oEAAoE;IACpE,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,WAAW,cAAc;IAC7B,+CAA+C;IAC/C,WAAW,EAAE,OAAO,CAAC;IACrB,qCAAqC;IACrC,UAAU,EAAE,gBAAgB,EAAE,CAAC;IAC/B,yCAAyC;IACzC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAMD;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,qBAAqB;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,qDAAqD;IACrD,IAAI,EAAE,MAAM,CAAC;IACb,6BAA6B;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,wCAAwC;IACxC,QAAQ,EAAE,OAAO,CAAC;IAClB,2BAA2B;IAC3B,YAAY,CAAC,EAAE,GAAG,CAAC;CACpB;AAED;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,wCAAwC;IACxC,kBAAkB,EAAE,OAAO,CAAC;IAC5B,wCAAwC;IACxC,kBAAkB,EAAE,OAAO,CAAC;IAC5B,0DAA0D;IAC1D,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,yCAAyC;IACzC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAMD;;;GAGG;AACH,MAAM,WAAW,wBAAwB;IACvC,yDAAyD;IACzD,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACnC,6DAA6D;IAC7D,IAAI,EAAE,MAAM,CAAC;IACb,8CAA8C;IAC9C,QAAQ,EAAE,UAAU,GAAG,SAAS,GAAG,MAAM,CAAC;IAC1C,kCAAkC;IAClC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,6CAA6C;IAC7C,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AA6fH;;GAEG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,GAAW,EAAY,EAAE,CAAC,GAAe,CAAC;AAErE;;GAEG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,GAAW,EAAU,EAAE,CAAC,GAAa,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAsgBH;;GAEG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,GAAW,EAAY,EAAE,CAAC,GAAe,CAAC;AAErE;;GAEG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,GAAW,EAAU,EAAE,CAAC,GAAa,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@portel/photon-core",
3
- "version": "2.22.0",
3
+ "version": "2.24.0",
4
4
  "description": "Core library for parsing, loading, and managing .photon.ts files - runtime-agnostic foundation for building custom Photon runtimes",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
@@ -33,7 +33,7 @@
33
33
  "build": "tsc",
34
34
  "clean": "rm -rf dist",
35
35
  "prepublishOnly": "npm run clean && npm run build",
36
- "test": "npm run build && npx tsx tests/mixin.test.ts && npx tsx tests/channels.test.ts && npx tsx tests/shared-utils.test.ts && npx tsx tests/collections.test.ts && npx tsx tests/audit.test.ts && npx tsx tests/memory.test.ts && npx tsx tests/instance-store.test.ts && npx tsx tests/watcher.test.ts && npx tsx tests/photon-error.test.ts && npx tsx tests/bulkhead.test.ts",
36
+ "test": "npm run build && bash scripts/run-tests.sh",
37
37
  "test:channels": "npx tsx tests/channels.test.ts",
38
38
  "test:mixin": "npm run build && npx tsx tests/mixin.test.ts"
39
39
  },
package/src/base.ts CHANGED
@@ -71,6 +71,16 @@ export class Photon {
71
71
  */
72
72
  _photonNamespace?: string;
73
73
 
74
+ /**
75
+ * PHOTON_DIR this instance was loaded from - set by runtime loader.
76
+ * Pinned so .data/ resolves to the same root regardless of which
77
+ * process (CLI, daemon, worker) reads the photon back later. Without
78
+ * this pin, MemoryProvider falls back to getDefaultContext().baseDir
79
+ * and writes/reads can drift between cwd-derived locations.
80
+ * @internal
81
+ */
82
+ _baseDir?: string;
83
+
74
84
  /**
75
85
  * Absolute path to the .photon.ts/.photon.js source file - set by runtime loader
76
86
  * Used for storage() and assets() path resolution
@@ -78,6 +88,25 @@ export class Photon {
78
88
  */
79
89
  _photonFilePath?: string;
80
90
 
91
+ /**
92
+ * Stat snapshot captured when the current photon instance was loaded.
93
+ * Used by executeTool() to detect out-of-band edits so CLI-direct and
94
+ * lite-loader callers see new code immediately after a file save.
95
+ * See `_photonReloader` for the callback invoked on change.
96
+ * @internal
97
+ */
98
+ _photonSourceStat?: { mtimeMs: number; size: number; ino: number };
99
+
100
+ /**
101
+ * Callback the loader registers so executeTool() can trigger a live
102
+ * reload when `_photonFilePath` has changed since load. The loader is
103
+ * expected to re-evaluate the file, replace the cached module, and
104
+ * update `_photonSourceStat` on success. Missing callback means the
105
+ * gate is a no-op (the original behavior).
106
+ * @internal
107
+ */
108
+ _photonReloader?: () => Promise<void>;
109
+
81
110
  /**
82
111
  * Dynamic photon resolver - injected by runtime loader
83
112
  * Used by this.photon.use() for runtime photon access
@@ -153,7 +182,12 @@ export class Photon {
153
182
  .replace(/([A-Z])/g, '-$1')
154
183
  .toLowerCase()
155
184
  .replace(/^-/, '');
156
- this._memory = new MemoryProvider(name, this._sessionId, this._photonNamespace);
185
+ this._memory = new MemoryProvider(
186
+ name,
187
+ this._sessionId,
188
+ this._photonNamespace,
189
+ this._baseDir
190
+ );
157
191
  }
158
192
  return this._memory;
159
193
  }
@@ -197,7 +231,7 @@ export class Photon {
197
231
  .replace(/([A-Z])/g, '-$1')
198
232
  .toLowerCase()
199
233
  .replace(/^-/, '');
200
- this._schedule = new ScheduleProvider(name);
234
+ this._schedule = new ScheduleProvider(name, this._baseDir);
201
235
  }
202
236
  return this._schedule;
203
237
  }
@@ -624,6 +658,15 @@ export class Photon {
624
658
  * Execute a tool method
625
659
  */
626
660
  async executeTool(toolName: string, parameters: any, options?: { outputHandler?: (data: any) => void }): Promise<any> {
661
+ // Stat-gate: close the edit→dispatch race on non-daemon paths. The
662
+ // daemon has its own equivalent at src/daemon/server.ts; this runs
663
+ // for CLI-direct dispatch and for callers using the lite loader's
664
+ // programmatic photon() API. If the source file has changed since
665
+ // the instance was loaded, hand off to the loader-registered
666
+ // reloader before dispatching so the first call after a save sees
667
+ // the new code.
668
+ await this._statGateIfStale();
669
+
627
670
  const method = (this as any)[toolName];
628
671
 
629
672
  if (!method || typeof method !== 'function') {
@@ -636,11 +679,80 @@ export class Photon {
636
679
  return result;
637
680
  } catch (error: any) {
638
681
  console.error(`Tool execution failed: ${toolName} - ${error.message}`);
682
+ await this._invokeErrorHook(error, { tool: toolName, params: parameters });
639
683
  throw error;
640
684
  }
641
685
  });
642
686
  }
643
687
 
688
+ /**
689
+ * If a reloader is registered and the source file has changed since it
690
+ * was last loaded, invoke the reloader. Silent on missing file or
691
+ * reloader failure — dispatch continues on the stale instance rather
692
+ * than throwing for an observability concern.
693
+ */
694
+ private async _statGateIfStale(): Promise<void> {
695
+ const filePath = this._photonFilePath;
696
+ const reloader = this._photonReloader;
697
+ const cached = this._photonSourceStat;
698
+ if (!filePath || !reloader || !cached) return;
699
+ let current: { mtimeMs: number; size: number; ino: number } | null = null;
700
+ try {
701
+ const s = fs.statSync(filePath);
702
+ current = { mtimeMs: s.mtimeMs, size: s.size, ino: s.ino };
703
+ } catch {
704
+ // Source gone or unreadable — nothing to gate against. Dispatch
705
+ // will surface the missing-photon error through its own path.
706
+ return;
707
+ }
708
+ if (
709
+ current.mtimeMs === cached.mtimeMs &&
710
+ current.size === cached.size &&
711
+ current.ino === cached.ino
712
+ ) {
713
+ return;
714
+ }
715
+ try {
716
+ await reloader();
717
+ } catch {
718
+ // Reloader errors are non-fatal — keep running on the stale
719
+ // instance rather than making dispatch itself fail.
720
+ }
721
+ }
722
+
723
+ /**
724
+ * Invoke the onError observability hook with a bounded timeout. Never
725
+ * suppresses the original error and never throws itself — a throw or
726
+ * timeout inside the hook is logged and swallowed so observability code
727
+ * can never cascade into the request path.
728
+ */
729
+ private async _invokeErrorHook(
730
+ error: unknown,
731
+ ctx: { tool: string; params: any }
732
+ ): Promise<void> {
733
+ const hook = (this as any).onError;
734
+ if (typeof hook !== 'function') return;
735
+ const TIMEOUT_MS = 5000;
736
+ let timer: ReturnType<typeof setTimeout> | undefined;
737
+ try {
738
+ await Promise.race([
739
+ Promise.resolve(hook.call(this, error, ctx)),
740
+ new Promise<never>((_, reject) => {
741
+ timer = setTimeout(
742
+ () => reject(new Error(`onError hook exceeded ${TIMEOUT_MS}ms`)),
743
+ TIMEOUT_MS
744
+ );
745
+ }),
746
+ ]);
747
+ } catch (hookError: any) {
748
+ console.error(
749
+ `onError hook failed for ${ctx.tool}: ${hookError?.message ?? String(hookError)}`
750
+ );
751
+ } finally {
752
+ if (timer) clearTimeout(timer);
753
+ }
754
+ }
755
+
644
756
  /**
645
757
  * Optional lifecycle hooks
646
758
  */
@@ -654,6 +766,15 @@ export class Photon {
654
766
  * During hot-reload, receives context so you can skip resource cleanup.
655
767
  */
656
768
  async onShutdown?(ctx?: { reason?: string }): Promise<void>;
769
+ /**
770
+ * Called when any tool method throws. Observability only — the hook
771
+ * cannot suppress or transform the error. A throw or timeout inside
772
+ * the hook is logged and swallowed. Default timeout is 5s.
773
+ *
774
+ * Use it for centralized logging, metrics, or error reporting instead
775
+ * of wrapping every method in try/catch.
776
+ */
777
+ async onError?(error: unknown, ctx: { tool: string; params: any }): Promise<void>;
657
778
 
658
779
  /**
659
780
  * Get an MCP client for calling external MCP servers
@@ -0,0 +1,141 @@
1
+ /**
2
+ * Bases Registry
3
+ *
4
+ * Tracks every PHOTON_DIR the daemon has served. The daemon upserts an
5
+ * entry on every photon invocation and, on startup, scans each surviving
6
+ * base for long-lived per-photon state (schedules, etc.) that must be
7
+ * reinstated across restarts.
8
+ *
9
+ * The registry itself is daemon infrastructure and lives at the global
10
+ * path `~/.photon/.data/.bases.json`. The data it points at is NOT — each
11
+ * listed base owns its own data under `{base}/.data/`.
12
+ *
13
+ * See docs/internals/PHOTON-DIR-AND-NAMESPACE.md §8.
14
+ */
15
+
16
+ import * as fs from 'fs';
17
+ import * as path from 'path';
18
+ import { getBasesRegistryPath } from './data-paths.js';
19
+
20
+ export interface BaseRegistryEntry {
21
+ /** Absolute, resolved path to the PHOTON_DIR. */
22
+ path: string;
23
+ /** ISO-8601 timestamp of first record. */
24
+ firstSeen: string;
25
+ /** ISO-8601 timestamp of most recent invocation. */
26
+ lastSeen: string;
27
+ }
28
+
29
+ export interface BasesRegistry {
30
+ bases: BaseRegistryEntry[];
31
+ }
32
+
33
+ const EMPTY_REGISTRY: BasesRegistry = { bases: [] };
34
+
35
+ function normalizeBase(basePath: string): string {
36
+ return path.resolve(basePath);
37
+ }
38
+
39
+ /**
40
+ * Read the registry from disk. Returns an empty registry if the file is
41
+ * missing or malformed. Never throws for absent data.
42
+ */
43
+ export function readBasesRegistry(): BasesRegistry {
44
+ const file = getBasesRegistryPath();
45
+ let raw: string;
46
+ try {
47
+ raw = fs.readFileSync(file, 'utf-8');
48
+ } catch {
49
+ return { bases: [] };
50
+ }
51
+ try {
52
+ const parsed = JSON.parse(raw);
53
+ if (!parsed || !Array.isArray(parsed.bases)) return { bases: [] };
54
+ // Trust the shape but filter out entries that are obviously broken.
55
+ const bases = parsed.bases.filter(
56
+ (b: any) =>
57
+ b &&
58
+ typeof b.path === 'string' &&
59
+ typeof b.firstSeen === 'string' &&
60
+ typeof b.lastSeen === 'string'
61
+ );
62
+ return { bases };
63
+ } catch {
64
+ return { bases: [] };
65
+ }
66
+ }
67
+
68
+ /**
69
+ * Write the registry to disk atomically. Creates the parent directory if
70
+ * needed. Uses a temp-file + rename pattern so readers never observe a
71
+ * half-written file.
72
+ */
73
+ export function writeBasesRegistry(registry: BasesRegistry): void {
74
+ const file = getBasesRegistryPath();
75
+ fs.mkdirSync(path.dirname(file), { recursive: true });
76
+ const tmp = `${file}.${process.pid}.tmp`;
77
+ fs.writeFileSync(tmp, JSON.stringify(registry, null, 2));
78
+ fs.renameSync(tmp, file);
79
+ }
80
+
81
+ /**
82
+ * Upsert a base with a fresh `lastSeen`. Sets `firstSeen` on new entries.
83
+ * Safe to call on every photon invocation — cost is one JSON round-trip
84
+ * per call.
85
+ */
86
+ export function touchBase(basePath: string, now: Date = new Date()): void {
87
+ const normalized = normalizeBase(basePath);
88
+ const iso = now.toISOString();
89
+ const registry = readBasesRegistry();
90
+ const existing = registry.bases.find((b) => b.path === normalized);
91
+ if (existing) {
92
+ existing.lastSeen = iso;
93
+ } else {
94
+ registry.bases.push({ path: normalized, firstSeen: iso, lastSeen: iso });
95
+ }
96
+ writeBasesRegistry(registry);
97
+ }
98
+
99
+ /**
100
+ * Return registry entries whose path still exists on disk as a directory.
101
+ * Entries whose path cannot be confirmed (permission errors, unmounted
102
+ * drives, transient failures) are KEPT — we only filter on confirmed
103
+ * absence, so a momentarily-unreachable path does not get silently
104
+ * dropped.
105
+ */
106
+ export function listActiveBases(): BaseRegistryEntry[] {
107
+ const registry = readBasesRegistry();
108
+ return registry.bases.filter((b) => {
109
+ try {
110
+ return fs.statSync(b.path).isDirectory();
111
+ } catch (err: any) {
112
+ // Only treat "does not exist" as inactive. Other errors keep the entry.
113
+ return err?.code !== 'ENOENT';
114
+ }
115
+ });
116
+ }
117
+
118
+ /**
119
+ * Remove entries whose path is confirmed absent on disk (ENOENT only).
120
+ * Writes the pruned registry back. Returns the list of entries that were
121
+ * removed so callers can log them.
122
+ */
123
+ export function pruneBasesRegistry(): BaseRegistryEntry[] {
124
+ const registry = readBasesRegistry();
125
+ const removed: BaseRegistryEntry[] = [];
126
+ const kept: BaseRegistryEntry[] = [];
127
+ for (const b of registry.bases) {
128
+ let confirmedAbsent = false;
129
+ try {
130
+ fs.statSync(b.path);
131
+ } catch (err: any) {
132
+ if (err?.code === 'ENOENT') confirmedAbsent = true;
133
+ }
134
+ if (confirmedAbsent) removed.push(b);
135
+ else kept.push(b);
136
+ }
137
+ if (removed.length > 0) {
138
+ writeBasesRegistry({ bases: kept });
139
+ }
140
+ return removed;
141
+ }
package/src/data-paths.ts CHANGED
@@ -31,10 +31,16 @@ import * as path from 'path';
31
31
  import * as os from 'os';
32
32
  import { execSync } from 'child_process';
33
33
 
34
- const DEFAULT_BASE = path.join(os.homedir(), '.photon');
34
+ /**
35
+ * Default PHOTON_DIR when none is explicitly resolved: the user's home
36
+ * `.photon` directory. Single source of truth — path-resolver.ts and
37
+ * photon/src/context.ts re-export this so there is exactly one constant
38
+ * for the concept.
39
+ */
40
+ export const DEFAULT_PHOTON_DIR = path.join(os.homedir(), '.photon');
35
41
 
36
42
  function getBase(baseDir?: string): string {
37
- return baseDir || process.env.PHOTON_DIR || DEFAULT_BASE;
43
+ return baseDir || process.env.PHOTON_DIR || DEFAULT_PHOTON_DIR;
38
44
  }
39
45
 
40
46
  // ── Root ─────────────────────────────────────────────────────────────────────
@@ -142,17 +148,33 @@ export function getDaemonSocketPath(): string {
142
148
  if (process.platform === 'win32') {
143
149
  return '\\\\.\\pipe\\photon-daemon';
144
150
  }
145
- return path.join(DEFAULT_BASE, '.data', 'daemon.sock');
151
+ return path.join(DEFAULT_PHOTON_DIR, '.data', 'daemon.sock');
146
152
  }
147
153
 
148
154
  /** Daemon PID file: always ~/.photon/.data/daemon.pid */
149
155
  export function getDaemonPidPath(): string {
150
- return path.join(DEFAULT_BASE, '.data', 'daemon.pid');
156
+ return path.join(DEFAULT_PHOTON_DIR, '.data', 'daemon.pid');
151
157
  }
152
158
 
153
159
  /** Daemon log file: always ~/.photon/.data/daemon.log */
154
160
  export function getDaemonLogPath(): string {
155
- return path.join(DEFAULT_BASE, '.data', 'daemon.log');
161
+ return path.join(DEFAULT_PHOTON_DIR, '.data', 'daemon.log');
162
+ }
163
+
164
+ /**
165
+ * Bases registry: always ~/.photon/.data/.bases.json (global, one per user).
166
+ *
167
+ * The daemon maintains this file to track every PHOTON_DIR it has served.
168
+ * On startup it reads the registry and scans each base for schedules and
169
+ * other long-lived per-photon state that must survive daemon restarts.
170
+ *
171
+ * The `PHOTON_BASES_REGISTRY` env var exists as a test-only override;
172
+ * production always uses the fixed global path.
173
+ *
174
+ * See docs/internals/PHOTON-DIR-AND-NAMESPACE.md §8.
175
+ */
176
+ export function getBasesRegistryPath(): string {
177
+ return process.env.PHOTON_BASES_REGISTRY ?? path.join(DEFAULT_PHOTON_DIR, '.data', '.bases.json');
156
178
  }
157
179
 
158
180
  // ── Namespace Detection ──────────────────────────────────────────────────────
@@ -165,6 +187,11 @@ export function getDaemonLogPath(): string {
165
187
  * git@github.com:portel-dev/photons.git → 'portel-dev'
166
188
  * https://github.com/arul-kumar/my-photons → 'arul-kumar'
167
189
  * (no git remote) → ''
190
+ *
191
+ * @deprecated Under Option B the namespace is a pure function of the
192
+ * photon file's position relative to PHOTON_DIR; git state must never
193
+ * influence data paths. Scheduled for removal in the next minor release.
194
+ * See docs/internals/PHOTON-DIR-AND-NAMESPACE.md §3.
168
195
  */
169
196
  export function detectNamespace(dir: string): string {
170
197
  try {
@@ -228,62 +255,29 @@ export function getLegacySessionMemoryDir(sessionId: string, photonName: string,
228
255
  return path.join(getBase(baseDir), 'sessions', safeSession, safeName);
229
256
  }
230
257
 
231
- /** Old runs dir: ~/.photon/runs/ */
232
- export function getLegacyRunsDir(): string {
233
- return path.join(DEFAULT_BASE, 'runs');
234
- }
235
-
236
- /** Old logs dir: ~/.photon/logs/{photonId}/ */
237
- export function getLegacyLogsDir(photonName: string): string {
238
- return path.join(DEFAULT_BASE, 'logs', photonName);
239
- }
240
-
241
- /** Old tasks dir: ~/.photon/tasks/ */
242
- export function getLegacyTasksDir(): string {
243
- return path.join(DEFAULT_BASE, 'tasks');
244
- }
245
-
246
- /** Old audit path: ~/.photon/audit.jsonl */
247
- export function getLegacyAuditPath(): string {
248
- return path.join(DEFAULT_BASE, 'audit.jsonl');
249
- }
250
-
251
- /** Old metadata path: {baseDir}/.metadata.json */
252
- export function getLegacyMetadataPath(baseDir?: string): string {
253
- return path.join(getBase(baseDir), '.metadata.json');
254
- }
255
-
256
- /** Old daemon socket: ~/.photon/daemon.sock */
257
- export function getLegacyDaemonSocketPath(): string {
258
- if (process.platform === 'win32') {
259
- return '\\\\.\\pipe\\photon-daemon';
260
- }
261
- return path.join(DEFAULT_BASE, 'daemon.sock');
262
- }
263
-
264
- /** Old daemon PID: ~/.photon/daemon.pid */
265
- export function getLegacyDaemonPidPath(): string {
266
- return path.join(DEFAULT_BASE, 'daemon.pid');
258
+ /** Old runs dir: {baseDir}/runs/ */
259
+ export function getLegacyRunsDir(baseDir?: string): string {
260
+ return path.join(getBase(baseDir), 'runs');
267
261
  }
268
262
 
269
- /** Old daemon log: ~/.photon/daemon.log */
270
- export function getLegacyDaemonLogPath(): string {
271
- return path.join(DEFAULT_BASE, 'daemon.log');
263
+ /** Old logs dir: {baseDir}/logs/{photonId}/ */
264
+ export function getLegacyLogsDir(photonName: string, baseDir?: string): string {
265
+ return path.join(getBase(baseDir), 'logs', photonName);
272
266
  }
273
267
 
274
- /** Old cache dir: {baseDir}/.cache/ or {baseDir}/cache/ */
275
- export function getLegacyCacheDir(baseDir?: string): string {
276
- return path.join(getBase(baseDir), '.cache');
268
+ /** Old tasks dir: {baseDir}/tasks/ */
269
+ export function getLegacyTasksDir(baseDir?: string): string {
270
+ return path.join(getBase(baseDir), 'tasks');
277
271
  }
278
272
 
279
273
  /** Old schedules dir: ~/.photon/schedules/{photonName}/ */
280
274
  export function getLegacySchedulesDir(photonName: string): string {
281
275
  const safeName = photonName.replace(/[^a-zA-Z0-9_-]/g, '_');
282
- return path.join(DEFAULT_BASE, 'schedules', safeName);
276
+ return path.join(DEFAULT_PHOTON_DIR, 'schedules', safeName);
283
277
  }
284
278
 
285
279
  /** Old per-photon config: ~/.photon/{photonName}/config.json */
286
280
  export function getLegacyPhotonConfigPath(photonName: string): string {
287
281
  const safeName = photonName.replace(/[^a-zA-Z0-9_-]/g, '_');
288
- return path.join(DEFAULT_BASE, safeName, 'config.json');
282
+ return path.join(DEFAULT_PHOTON_DIR, safeName, 'config.json');
289
283
  }
@@ -0,0 +1,102 @@
1
+ /**
2
+ * Tool-description sanitizer.
3
+ *
4
+ * Defends against MCP tool-description poisoning (OWASP MCP #3) by stripping
5
+ * invisible codepoints and redacting embedded prompt-injection markers from
6
+ * JSDoc descriptions before they reach the model.
7
+ *
8
+ * Called by the schema extractor at parse time; any photon loaded via the
9
+ * runtime benefits automatically. Intentionally conservative — it only
10
+ * touches obvious attack patterns. Legitimate documentation does not use
11
+ * zero-width spaces or contain `[[SYSTEM: ...]]` directives.
12
+ */
13
+
14
+ /**
15
+ * Unicode ranges that are invisible to humans but preserved by LLM tokenizers.
16
+ * Stripped unconditionally — no legitimate doc string needs them.
17
+ *
18
+ * U+200B ZERO WIDTH SPACE
19
+ * U+200C ZERO WIDTH NON-JOINER
20
+ * U+200D ZERO WIDTH JOINER
21
+ * U+200E LEFT-TO-RIGHT MARK
22
+ * U+200F RIGHT-TO-LEFT MARK
23
+ * U+202A-E LRE/RLE/PDF/LRO/RLO (bidi override)
24
+ * U+2060 WORD JOINER
25
+ * U+2066-9 LRI/RLI/FSI/PDI (bidi isolate)
26
+ * U+FEFF ZERO WIDTH NO-BREAK SPACE (BOM)
27
+ */
28
+ const INVISIBLE_CHARS = /[\u200B-\u200F\u202A-\u202E\u2060\u2066-\u2069\uFEFF]/g;
29
+
30
+ /**
31
+ * Instruction-bracket patterns commonly used in tool-poisoning payloads.
32
+ * Each match is replaced with `[REDACTED]` and counted as a warning.
33
+ */
34
+ const INSTRUCTION_PATTERNS: Array<{ name: string; pattern: RegExp }> = [
35
+ // Bracketed system directives: [[SYSTEM: ...]], [INST] ... [/INST], <|im_start|>...<|im_end|>
36
+ { name: 'bracketed-system', pattern: /\[{1,2}\s*SYSTEM\s*:[^\]]*\]{1,2}/gi },
37
+ { name: 'llama-inst', pattern: /\[\/?INST\]/gi },
38
+ { name: 'chatml-tag', pattern: /<\|im_(?:start|end|sep)\|>/gi },
39
+ // Verbatim instruction phrases that only appear in jailbreaks, never in docs.
40
+ { name: 'ignore-previous', pattern: /\bignore\s+(?:all\s+|the\s+)?(?:previous|prior|above)\s+instructions?\b/gi },
41
+ { name: 'disregard-previous', pattern: /\bdisregard\s+(?:all\s+|the\s+)?(?:previous|prior|above)\b/gi },
42
+ { name: 'system-prompt-literal', pattern: /\bSYSTEM[_\s-]?PROMPT\b/g },
43
+ ];
44
+
45
+ /** Max length of a cleaned description. Anything longer is an attack surface. */
46
+ export const MAX_DESCRIPTION_LENGTH = 2000;
47
+
48
+ export interface SanitizerWarning {
49
+ /** Label of the rule that fired. */
50
+ rule: string;
51
+ /** Short slice of the matched text for forensics (capped at 80 chars). */
52
+ sample: string;
53
+ }
54
+
55
+ export interface SanitizeResult {
56
+ cleaned: string;
57
+ warnings: SanitizerWarning[];
58
+ /** Whether the string was truncated because it exceeded MAX_DESCRIPTION_LENGTH. */
59
+ truncated: boolean;
60
+ }
61
+
62
+ /**
63
+ * Strip invisible codepoints, redact instruction markers, and cap length.
64
+ * Idempotent: sanitize(sanitize(x).cleaned).cleaned === sanitize(x).cleaned
65
+ * so callers can apply it defensively without risking duplicate `[REDACTED]`
66
+ * tokens.
67
+ */
68
+ export function sanitizeDescription(input: string): SanitizeResult {
69
+ const warnings: SanitizerWarning[] = [];
70
+
71
+ // Step 1: strip invisibles. Counts as one warning if any were present.
72
+ const withoutInvisibles = input.replace(INVISIBLE_CHARS, (match) => {
73
+ warnings.push({ rule: 'invisible-char', sample: codepointSample(match) });
74
+ return '';
75
+ });
76
+
77
+ // Step 2: redact each known instruction pattern.
78
+ let redacted = withoutInvisibles;
79
+ for (const { name, pattern } of INSTRUCTION_PATTERNS) {
80
+ redacted = redacted.replace(pattern, (match) => {
81
+ warnings.push({ rule: name, sample: match.slice(0, 80) });
82
+ return '[REDACTED]';
83
+ });
84
+ }
85
+
86
+ // Step 3: cap length. An attacker-friendly 50KB description is itself a
87
+ // prompt-injection vector via context-window flooding (OWASP MCP #10).
88
+ let truncated = false;
89
+ if (redacted.length > MAX_DESCRIPTION_LENGTH) {
90
+ redacted = redacted.slice(0, MAX_DESCRIPTION_LENGTH) + '…';
91
+ truncated = true;
92
+ }
93
+
94
+ return { cleaned: redacted, warnings, truncated };
95
+ }
96
+
97
+ function codepointSample(s: string): string {
98
+ return Array.from(s)
99
+ .map((c) => 'U+' + c.codePointAt(0)!.toString(16).toUpperCase().padStart(4, '0'))
100
+ .join(',')
101
+ .slice(0, 80);
102
+ }