@agent-native/core 0.49.19 → 0.49.20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. package/dist/cli/recap.d.ts.map +1 -1
  2. package/dist/cli/recap.js +1 -0
  3. package/dist/cli/recap.js.map +1 -1
  4. package/dist/client/blocks/library/annotation-rail.js +5 -5
  5. package/dist/client/blocks/library/annotation-rail.js.map +1 -1
  6. package/dist/client/resources/ResourcesPanel.d.ts.map +1 -1
  7. package/dist/client/resources/ResourcesPanel.js +16 -3
  8. package/dist/client/resources/ResourcesPanel.js.map +1 -1
  9. package/dist/local-artifacts/index.d.ts +37 -0
  10. package/dist/local-artifacts/index.d.ts.map +1 -1
  11. package/dist/local-artifacts/index.js +380 -0
  12. package/dist/local-artifacts/index.js.map +1 -1
  13. package/dist/resources/handlers.d.ts.map +1 -1
  14. package/dist/resources/handlers.js +20 -6
  15. package/dist/resources/handlers.js.map +1 -1
  16. package/dist/resources/metadata.d.ts.map +1 -1
  17. package/dist/resources/metadata.js +5 -1
  18. package/dist/resources/metadata.js.map +1 -1
  19. package/dist/resources/store.d.ts +4 -0
  20. package/dist/resources/store.d.ts.map +1 -1
  21. package/dist/resources/store.js +143 -6
  22. package/dist/resources/store.js.map +1 -1
  23. package/dist/scripts/resources/delete.d.ts.map +1 -1
  24. package/dist/scripts/resources/delete.js +9 -3
  25. package/dist/scripts/resources/delete.js.map +1 -1
  26. package/dist/scripts/resources/write.d.ts.map +1 -1
  27. package/dist/scripts/resources/write.js +9 -3
  28. package/dist/scripts/resources/write.js.map +1 -1
  29. package/dist/server/agent-chat-plugin.d.ts.map +1 -1
  30. package/dist/server/agent-chat-plugin.js +6 -5
  31. package/dist/server/agent-chat-plugin.js.map +1 -1
  32. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/local-artifacts/index.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,MAAM,MAAM,SAAS,CAAC;AAC7B,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAuGtC,MAAM,aAAa,GAAG,mBAAmB,CAAC;AAC1C,MAAM,cAAc,GAAG,CAAC,mBAAmB,EAAE,wBAAwB,CAAC,CAAC;AACvE,MAAM,kBAAkB,GAAG;IACzB,uBAAuB;IACvB,4BAA4B;CAC7B,CAAC;AACF,MAAM,gCAAgC,GACpC,8CAA8C,CAAC;AACjD,MAAM,qBAAqB,GAAG;IAC5B,YAAY;IACZ,qBAAqB;IACrB,aAAa;IACb,aAAa;IACb,oBAAoB;IACpB,YAAY;IACZ,aAAa;CACd,CAAC;AAEF,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,CAAC,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AACvE,CAAC;AAED,SAAS,SAAS,CAAC,KAAc;IAC/B,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ;QACtD,CAAC,CAAC,KAAK,CAAC,IAAI;QACZ,CAAC,CAAC,SAAS,CAAC;AAChB,CAAC;AAED,SAAS,aAAa,CAAC,KAAc;IACnC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE;QAAE,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;IACrE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACrC,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC;AAC1E,CAAC;AAED,SAAS,aAAa,CAAC,KAAc;IACnC,IAAI,KAAK,KAAK,UAAU,IAAI,KAAK,KAAK,aAAa;QAAE,OAAO,KAAK,CAAC;IAClE,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,cAAc,CAAC,QAAgB;IACtC,OAAO,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AACtC,CAAC;AAED,SAAS,qBAAqB,CAAC,QAAgB,EAAE,KAAK,GAAG,MAAM;IAC7D,IAAI,CAAC,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC9C,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,cAAc,CAAC,CAAC;IAC1C,CAAC;IACD,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,8BAA8B,CAAC,CAAC;IAC1D,CAAC;IACD,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,mBAAmB,CAAC,CAAC;IAC/C,CAAC;IACD,MAAM,UAAU,GAAG,cAAc,CAC/B,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAC/C,CAAC;IACF,IACE,CAAC,UAAU;QACX,UAAU,KAAK,GAAG;QAClB,UAAU,CAAC,UAAU,CAAC,KAAK,CAAC;QAC5B,UAAU,KAAK,IAAI;QACnB,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,IAAI,CAAC,EAC5E,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,+BAA+B,CAAC,CAAC;IAC3D,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,SAAS,WAAW,CAAC,QAAgB;IACnC,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;AACpD,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAc;IACzC,MAAM,UAAU,GAAG,aAAa,CAAC,KAAK,CAAC;SACpC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;SACtC,MAAM,CAAC,OAAO,CAAC;SACf,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC;IACzD,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC;AAClC,CAAC;AAED,SAAS,gBAAgB,CAAC,QAAgB;IACxC,OAAO,CACL,QAAQ;SACL,KAAK,CAAC,GAAG,CAAC;SACV,MAAM,CAAC,OAAO,CAAC;SACf,EAAE,CAAC,CAAC,CAAC,CAAC;QACP,EAAE,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC;SACvB,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,QAAQ,CAC9D,CAAC;AACJ,CAAC;AAED,SAAS,qBAAqB,CAAC,KAAc;IAC3C,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;IACtD,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IACpE,OAAO;QACL,IAAI,EAAE,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;QAC7D,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,IAAI,EAAE,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;QAC7D,UAAU,EAAE,mBAAmB,CAAC,KAAK,CAAC,UAAU,CAAC;QACjD,OAAO,EAAE,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC;QACrC,IAAI,EAAE,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC;KAChC,CAAC;AACJ,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAc;IAC1C,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO;YACL,KAAK,EAAE,KAAK;iBACT,GAAG,CAAC,qBAAqB,CAAC;iBAC1B,MAAM,CAAC,CAAC,IAAI,EAAmC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;SAC7D,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAChC,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC;QACtC,CAAC,CAAC,KAAK,CAAC,KAAK;aACR,GAAG,CAAC,qBAAqB,CAAC;aAC1B,MAAM,CAAC,CAAC,IAAI,EAAmC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QAC9D,CAAC,CAAC,EAAE,CAAC;IACP,OAAO;QACL,IAAI,EAAE,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC;QAC/B,KAAK;QACL,UAAU,EACR,OAAO,KAAK,CAAC,UAAU,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC;YACrE,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,UAAU,CAAC;YACjC,CAAC,CAAC,SAAS;QACf,UAAU,EACR,OAAO,KAAK,CAAC,UAAU,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC;YACrE,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,UAAU,CAAC;YACjC,CAAC,CAAC,SAAS;QACf,IAAI,EAAE,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC;KAChC,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAc;IACvC,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5C,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5D,MAAM,IAAI,GAA2C,EAAE,CAAC;IACxD,KAAK,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;QAC3D,IAAI,CAAC,KAAK,CAAC,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IAC/C,CAAC;IACD,OAAO;QACL,OAAO,EACL,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC;YACnE,CAAC,CAAC,MAAM,CAAC,OAAO;YAChB,CAAC,CAAC,SAAS;QACf,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC;QAChC,IAAI;KACL,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,KAAe;IACpC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC;QACxC,IAAI,KAAK;YAAE,OAAO,KAAK,CAAC;IAC1B,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,OAAO;IACd,OAAO,aAAa,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC,CAAC;AACtD,CAAC;AAED,SAAS,OAAO,CAAC,IAAY;IAC3B,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACtD,OAAO,KAAK,KAAK,GAAG,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,IAAI,CAAC;AAChF,CAAC;AAED,SAAS,8BAA8B,CAAC,IAAyB;IAC/D,IAAI,IAAI,KAAK,aAAa;QAAE,OAAO;IACnC,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY;QAAE,OAAO;IAClD,IAAI,OAAO,CAAC,gCAAgC,CAAC;QAAE,OAAO;IACtD,MAAM,IAAI,KAAK,CACb,uEAAuE,gCAAgC,2DAA2D,CACnK,CAAC;AACJ,CAAC;AAED,SAAS,eAAe;IACtB,OAAO,aAAa,CAAC,kBAAkB,CAAC,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,uBAAuB,CACrC,QAAQ,GAAG,OAAO,CAAC,GAAG,EAAE;IAExB,IAAI,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACrC,SAAS,CAAC;QACR,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;QACpD,IAAI,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC;YAAE,OAAO,SAAS,CAAC;QACnD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACrC,IAAI,MAAM,KAAK,OAAO;YAAE,OAAO,IAAI,CAAC;QACpC,OAAO,GAAG,MAAM,CAAC;IACnB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,UAA0C,EAAE;IAE5C,MAAM,YAAY,GAChB,OAAO,CAAC,YAAY;QACpB,eAAe,EAAE;QACjB,uBAAuB,CAAC,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAExD,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,IAAI,OAAO,CAAC,QAAQ;YAAE,OAAO,IAAI,CAAC;QAClC,MAAM,IAAI,KAAK,CAAC,kBAAkB,aAAa,EAAE,CAAC,CAAC;IACrD,CAAC;IAED,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,EAAE,YAAY,CAAC,CAAC;IAC9E,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;QACpD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAY,CAAC;QAC1C,OAAO;YACL,IAAI,EAAE,YAAY;YAClB,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC;YACnC,QAAQ,EAAE,iBAAiB,CAAC,MAAM,CAAC;SACpC,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,OAAO,CAAC,QAAQ,IAAI,SAAS,CAAC,KAAK,CAAC,KAAK,QAAQ,EAAE,CAAC;YACtD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,UAAyC,EAAE;IAE3C,MAAM,YAAY,GAAG,OAAO,EAAE,CAAC;IAC/B,IAAI,YAAY,EAAE,CAAC;QACjB,8BAA8B,CAAC,YAAY,CAAC,CAAC;QAC7C,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,uBAAuB,CAAC,EAAE,GAAG,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7E,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK;QAC3B,CAAC,CAAC,MAAM,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,IAAI;QAC9C,CAAC,CAAC,SAAS,CAAC;IACd,MAAM,IAAI,GACR,OAAO,IAAI,MAAM,EAAE,QAAQ,CAAC,IAAI,IAAI,OAAO,CAAC,QAAQ,EAAE,IAAI,IAAI,UAAU,CAAC;IAC3E,8BAA8B,CAAC,IAAI,CAAC,CAAC;IACrC,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,UAAyC,EAAE;IAE3C,OAAO,CAAC,MAAM,0BAA0B,CAAC,OAAO,CAAC,CAAC,KAAK,aAAa,CAAC;AACvE,CAAC;AAED,SAAS,cAAc,CACrB,WAA+C,EAC/C,QAA8C;IAE9C,OAAO;QACL,IAAI,EAAE,WAAW,EAAE,IAAI,IAAI,QAAQ,EAAE,IAAI;QACzC,KAAK,EACH,WAAW,EAAE,KAAK,IAAI,WAAW,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;YAChD,CAAC,CAAC,WAAW,CAAC,KAAK;YACnB,CAAC,CAAC,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE,CAAC;QAC7B,UAAU,EAAE,WAAW,EAAE,UAAU,IAAI,QAAQ,EAAE,UAAU;QAC3D,UAAU,EAAE,WAAW,EAAE,UAAU,IAAI,QAAQ,EAAE,UAAU;QAC3D,IAAI,EAAE,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC;KAChE,CAAC;AACJ,CAAC;AAED,SAAS,sBAAsB,CAAC,aAAqB,EAAE,YAAoB;IACzE,MAAM,QAAQ,GAAG,qBAAqB,CAAC,YAAY,CAAC,CAAC;IACrD,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;IAC3D,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;IAC5D,IACE,QAAQ,KAAK,EAAE;QACf,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC;QACzB,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EACzB,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,SAAS,YAAY,4BAA4B,CAAC,CAAC;IACrE,CAAC;IACD,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC;AACpC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,OAA6B;IAE7B,MAAM,MAAM,GAAG,MAAM,uBAAuB,CAAC,EAAE,GAAG,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7E,MAAM,aAAa,GACjB,MAAM,EAAE,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAChE,MAAM,WAAW,GAAG,MAAM,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC3D,MAAM,GAAG,GAAG,cAAc,CAAC,WAAW,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC1D,MAAM,IAAI,GAAG,MAAM,0BAA0B,CAAC;QAC5C,GAAG,OAAO;QACV,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,QAAQ,EAAE,GAAG;KACd,CAAC,CAAC;IAEH,MAAM,KAAK,GAAG,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QAC3C,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,GAAG,sBAAsB,CACvD,aAAa,EACb,IAAI,CAAC,IAAI,CACV,CAAC;QACF,MAAM,UAAU,GAAG,mBAAmB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACxD,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,gBAAgB,CAAC,QAAQ,CAAC;YAC7C,IAAI,EAAE,QAAQ;YACd,YAAY;YACZ,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,UAAU;YACV,IAAI,EAAE,CAAC,GAAG,qBAAqB,EAAE,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC7D,OAAO,EAAE,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC;SACrC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,OAAO;QACL,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,IAAI;QACJ,YAAY,EAAE,MAAM,EAAE,IAAI,IAAI,IAAI;QAClC,aAAa;QACb,KAAK;QACL,UAAU,EAAE,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC;QACzC,UAAU,EAAE,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC;QACzC,IAAI,EAAE,CAAC,GAAG,qBAAqB,EAAE,GAAG,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;KAC7D,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,QAAgB,EAAE,QAAkB;IAC3D,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAC/B,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAC1D,CAAC;AACJ,CAAC;AAED,SAAS,uBAAuB,CAAC,SAAiB;IAChD,IAAI,SAAS,KAAK,KAAK;QAAE,OAAO,eAAe,CAAC;IAChD,IAAI,SAAS,KAAK,MAAM;QAAE,OAAO,UAAU,CAAC;IAC5C,IAAI,SAAS,KAAK,OAAO;QAAE,OAAO,kBAAkB,CAAC;IACrD,IAAI,SAAS,KAAK,MAAM;QAAE,OAAO,YAAY,CAAC;IAC9C,OAAO,0BAA0B,CAAC;AACpC,CAAC;AAED,SAAS,WAAW,CAAC,OAAe;IAClC,OAAO,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACnE,CAAC;AAED,MAAM,UAAU,GAAG,IAAI,GAAG,EAAyB,CAAC;AAEpD,SAAS,iBAAiB;IACxB,OAAO,MAAM,CAAC,SAAS,CAAC,QAAQ,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,UAAU,IAAI,CAAC,CAAC,CAAC;AACxE,CAAC;AAED,KAAK,UAAU,aAAa,CAC1B,YAAoB,EACpB,EAAoB;IAEpB,MAAM,QAAQ,GAAG,UAAU,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IACnE,IAAI,OAAoB,CAAC;IACzB,MAAM,IAAI,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;QACzC,OAAO,GAAG,OAAO,CAAC;IACpB,CAAC,CAAC,CAAC;IACH,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;IAC1D,UAAU,CAAC,GAAG,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;IACtC,MAAM,QAAQ,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IAC/B,IAAI,CAAC;QACH,OAAO,MAAM,EAAE,EAAE,CAAC;IACpB,CAAC;YAAS,CAAC;QACT,OAAO,EAAE,CAAC;QACV,IAAI,UAAU,CAAC,GAAG,CAAC,YAAY,CAAC,KAAK,OAAO,EAAE,CAAC;YAC7C,UAAU,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,uBAAuB,CAC9B,IAA6B,EAC7B,YAAoB,EACpB,UAA0C,EAAE;IAE5C,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;IAChE,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC1D,IAAI,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC;IAChC,MAAM,YAAY,GAAG;QACnB,OAAO;QACP,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;YAC1B,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YACtC,OAAO,OAAO,CAAC;QACjB,CAAC,CAAC;KACH,CAAC;IAEF,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,YAAY,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QAC5D,MAAM,SAAS,GAAG,YAAY,CAAC,KAAK,CAAE,CAAC;QACvC,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;YACzC,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC;gBAC1B,MAAM,IAAI,KAAK,CAAC,SAAS,SAAS,+BAA+B,CAAC,CAAC;YACrE,CAAC;YACD,IAAI,KAAK,GAAG,YAAY,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;gBAC3D,MAAM,IAAI,KAAK,CAAC,SAAS,SAAS,sBAAsB,CAAC,CAAC;YAC5D,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,SAAS,CAAC,KAAK,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,gBAAgB;gBAAE,OAAO;YACtE,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,0BAA0B,CACjC,IAA6B,EAC7B,YAAoB;IAEpB,uBAAuB,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IAC5C,MAAM,EAAE,GAAG,MAAM,CAAC,QAAQ,CAAC,YAAY,EAAE,iBAAiB,EAAE,CAAC,CAAC;IAC9D,IAAI,CAAC;QACH,OAAO;YACL,OAAO,EAAE,MAAM,CAAC,YAAY,CAAC,EAAE,EAAE,MAAM,CAAC;YACxC,IAAI,EAAE,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;SAC3B,CAAC;IACJ,CAAC;YAAS,CAAC;QACT,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IACvB,CAAC;AACH,CAAC;AAED,KAAK,UAAU,eAAe,CAC5B,IAA6B,EAC7B,YAAoB,EACpB,YAAoB,EACpB,eAAwB,EACxB,YAA2B;IAE3B,MAAM,IAAI,GACR,eAAe,KAAK,SAAS;QAC3B,CAAC,CAAC,0BAA0B,CAAC,IAAI,EAAE,YAAY,CAAC;QAChD,CAAC,CAAC,SAAS,CAAC;IAChB,MAAM,OAAO,GAAG,eAAe,IAAI,IAAK,CAAC,OAAO,CAAC;IACjD,MAAM,IAAI,GAAG,YAAY,IAAI,IAAI,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;IACzE,MAAM,SAAS,GAAG,WAAW,CAAC,YAAY,CAAC,CAAC;IAC5C,OAAO;QACL,IAAI,EAAE,YAAY;QAClB,YAAY;QACZ,QAAQ,EAAE,IAAI,CAAC,IAAI;QACnB,QAAQ,EAAE,IAAI,CAAC,IAAI;QACnB,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,SAAS;QACT,WAAW,EAAE,uBAAuB,CAAC,SAAS,CAAC;QAC/C,SAAS,EAAE,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC;QAC7C,IAAI,EAAE,WAAW,CAAC,OAAO,CAAC;QAC1B,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE;QACvC,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;QACnC,OAAO,EAAE,IAAI,CAAC,OAAO;KACtB,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,IAA6B,EAAE,YAAoB;IACzE,MAAM,SAAS,GAAG,WAAW,CAAC,YAAY,CAAC,CAAC;IAC5C,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QACvE,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,eAAe,CAAC,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IAC3D,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAC3C,OAAO,eAAe,CAAC,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;AACrD,CAAC;AAED,KAAK,UAAU,QAAQ,CACrB,IAA6B,EAC7B,SAAS,GAAG,IAAI,CAAC,YAAY;IAE7B,IAAI,OAAwB,CAAC;IAC7B,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IACjE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,SAAS,CAAC,KAAK,CAAC,KAAK,QAAQ,EAAE,CAAC;YAClC,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;IAED,MAAM,KAAK,GAA4B,EAAE,CAAC;IAC1C,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QACtD,MAAM,cAAc,GAAG,cAAc,CACnC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,EAAE,YAAY,CAAC,CAC/C,CAAC;QACF,MAAM,YAAY,GAAG,cAAc,CACjC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC,CAC3C,CAAC;QACF,IAAI,eAAe,CAAC,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC;YAAE,SAAS;QAEvD,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YACxB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC;YACpD,SAAS;QACX,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,YAAY,CAAC;YAAE,SAAS;QACrE,KAAK,CAAC,IAAI,CAAC,MAAM,eAAe,CAAC,IAAI,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC,CAAC;IACtE,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,OAA6B;IAE7B,MAAM,GAAG,GAAG,MAAM,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAC/C,IAAI,GAAG,CAAC,IAAI,KAAK,aAAa;QAAE,OAAO,EAAE,CAAC;IAE1C,MAAM,KAAK,GAAG,CAAC,MAAM,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SACvE,IAAI,EAAE;SACN,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;IAE3D,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AAC5D,CAAC;AAED,SAAS,mBAAmB,CAC1B,GAA2B,EAC3B,YAAoB;IAEpB,MAAM,QAAQ,GAAG,qBAAqB,CAAC,YAAY,CAAC,CAAC;IACrD,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CACzB,CAAC,SAAS,EAAE,EAAE,CACZ,QAAQ,KAAK,SAAS,CAAC,IAAI,IAAI,QAAQ,CAAC,UAAU,CAAC,GAAG,SAAS,CAAC,IAAI,GAAG,CAAC,CAC3E,CAAC;IACF,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,IAAI,KAAK,CAAC,SAAS,YAAY,qCAAqC,CAAC,CAAC;IAC9E,CAAC;IACD,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,eAAe,CAAC,QAAQ,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3E,MAAM,IAAI,KAAK,CAAC,SAAS,YAAY,+BAA+B,CAAC,CAAC;IACxE,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,KAAK,UAAU,mBAAmB,CAChC,GAA2B,EAC3B,YAAoB;IAMpB,MAAM,QAAQ,GAAG,qBAAqB,CAAC,YAAY,CAAC,CAAC;IACrD,MAAM,IAAI,GAAG,mBAAmB,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IAChD,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;IAC/D,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;IAChE,IACE,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC;QACzB,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;QACzB,QAAQ,KAAK,EAAE,EACf,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,SAAS,YAAY,kCAAkC,CAAC,CAAC;IAC3E,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC;AAC1C,CAAC;AAED,KAAK,UAAU,mBAAmB,CAChC,IAA6B,EAC7B,YAAoB,EACpB,UAA0C,EAAE;IAE5C,uBAAuB,CAAC,IAAI,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC;AACvD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,OAAgD;IAEhD,MAAM,GAAG,GAAG,MAAM,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAC/C,IAAI,GAAG,CAAC,IAAI,KAAK,aAAa;QAAE,OAAO,IAAI,CAAC;IAC5C,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,YAAY,EAAE,GAAG,MAAM,mBAAmB,CAChE,GAAG,EACH,OAAO,CAAC,IAAI,CACb,CAAC;IACF,IAAI,CAAC;QACH,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,0BAA0B,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;QACzE,MAAM,IAAI,GAAG,MAAM,eAAe,CAChC,IAAI,EACJ,QAAQ,EACR,YAAY,EACZ,OAAO,EACP,IAAI,CACL,CAAC;QACF,OAAO,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,CAAC;IAC9B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,SAAS,CAAC,KAAK,CAAC,KAAK,QAAQ,EAAE,CAAC;YAClC,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,OAAyD;IAEzD,MAAM,GAAG,GAAG,MAAM,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAC/C,IAAI,GAAG,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;IACpD,CAAC;IACD,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,YAAY,EAAE,GAAG,MAAM,mBAAmB,CAChE,GAAG,EACH,OAAO,CAAC,IAAI,CACb,CAAC;IACF,OAAO,aAAa,CAAC,YAAY,EAAE,KAAK,IAAI,EAAE;QAC5C,MAAM,QAAQ,GAAG,MAAM,qBAAqB,CAAC;YAC3C,GAAG,OAAO;YACV,IAAI,EAAE,QAAQ;SACf,CAAC,CAAC;QACH,IAAI,OAAO,CAAC,WAAW,IAAI,QAAQ,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CAAC,SAAS,QAAQ,kBAAkB,CAAC,CAAC;QACvD,CAAC;QACD,IACE,OAAO,CAAC,YAAY;YACpB,CAAC,CAAC,QAAQ,IAAI,QAAQ,CAAC,IAAI,KAAK,OAAO,CAAC,YAAY,CAAC,EACrD,CAAC;YACD,MAAM,IAAI,KAAK,CACb,SAAS,QAAQ,gDAAgD,CAClE,CAAC;QACJ,CAAC;QAED,MAAM,mBAAmB,CAAC,IAAI,EAAE,YAAY,EAAE,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1E,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAChE,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CACxB,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,EAC1B,IAAI,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,OAAO,CAAC,GAAG,IAAI,MAAM,CAAC,UAAU,EAAE,MAAM,CAC5E,CAAC;QACF,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACtD,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;QACxC,OAAO,eAAe,CAAC,IAAI,EAAE,QAAQ,EAAE,YAAY,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IACxE,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,OAAgD;IAEhD,MAAM,GAAG,GAAG,MAAM,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAC/C,IAAI,GAAG,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;IACpD,CAAC;IACD,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,MAAM,mBAAmB,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5E,IAAI,CAAC;QACH,MAAM,mBAAmB,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;QAC9C,MAAM,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QAC9B,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,SAAS,CAAC,KAAK,CAAC,KAAK,QAAQ,EAAE,CAAC;YAClC,OAAO,KAAK,CAAC;QACf,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,OAA6B;IAE7B,MAAM,GAAG,GAAG,MAAM,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAC/C,IAAI,GAAG,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;IACpD,CAAC;IACD,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC1B,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,IAAI,KAAK,CAAC,sCAAsC,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC;IAC1E,CAAC;IACD,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACvD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,MAAM,GAAG,qBAAqB;IACnE,OAAO,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC;AAC5D,CAAC","sourcesContent":["import crypto from \"node:crypto\";\nimport fs from \"node:fs/promises\";\nimport fsSync from \"node:fs\";\nimport os from \"node:os\";\nimport path from \"node:path\";\nimport { minimatch } from \"minimatch\";\n\nexport type AgentNativeDataMode = \"database\" | \"local-files\";\n\nexport interface AgentNativeManifestRoot {\n name?: string;\n path: string;\n kind?: string;\n extensions?: string[];\n include?: string[];\n hide?: string[];\n}\n\nexport interface AgentNativeManifestApp {\n mode?: AgentNativeDataMode;\n roots?: AgentNativeManifestRoot[];\n components?: string | string[];\n extensions?: string | string[];\n hide?: string[];\n}\n\nexport interface AgentNativeManifest {\n version?: number;\n mode?: AgentNativeDataMode;\n apps?: Record<string, AgentNativeManifestApp>;\n}\n\nexport interface LoadedAgentNativeManifest {\n path: string;\n rootDir: string;\n manifest: AgentNativeManifest;\n}\n\nexport interface LocalArtifactAppDefaults {\n mode?: AgentNativeDataMode;\n roots: AgentNativeManifestRoot[];\n hide?: string[];\n components?: string | string[];\n extensions?: string | string[];\n}\n\nexport interface LoadAgentNativeManifestOptions {\n cwd?: string;\n manifestPath?: string;\n optional?: boolean;\n}\n\nexport interface ResolveAgentNativeModeOptions extends LoadAgentNativeManifestOptions {\n appId?: string;\n defaults?: Pick<LocalArtifactAppDefaults, \"mode\">;\n}\n\nexport interface LocalArtifactOptions extends LoadAgentNativeManifestOptions {\n appId: string;\n defaults?: LocalArtifactAppDefaults;\n}\n\nexport interface LoadedLocalArtifactRoot {\n name: string;\n path: string;\n absolutePath: string;\n kind?: string;\n extensions: string[];\n hide: string[];\n include: string[];\n}\n\nexport interface LoadedLocalArtifactApp {\n appId: string;\n mode: AgentNativeDataMode;\n manifestPath: string | null;\n workspaceRoot: string;\n roots: LoadedLocalArtifactRoot[];\n components: string[];\n extensions: string[];\n hide: string[];\n}\n\nexport interface LocalArtifactFileMeta {\n path: string;\n absolutePath: string;\n rootName: string;\n rootPath: string;\n kind?: string;\n extension: string;\n contentType: string;\n sizeBytes: number;\n hash: string;\n createdAt: string;\n updatedAt: string;\n mtimeMs: number;\n}\n\nexport interface LocalArtifactFile extends LocalArtifactFileMeta {\n content: string;\n}\n\nexport interface WriteLocalArtifactFileOptions extends LocalArtifactOptions {\n content: string;\n expectedHash?: string | null;\n ifNotExists?: boolean;\n}\n\nconst MANIFEST_FILE = \"agent-native.json\";\nconst ENV_MODE_NAMES = [\"AGENT_NATIVE_MODE\", \"AGENT_NATIVE_DATA_MODE\"];\nconst ENV_MANIFEST_NAMES = [\n \"AGENT_NATIVE_MANIFEST\",\n \"AGENT_NATIVE_MANIFEST_PATH\",\n];\nconst ALLOW_PRODUCTION_LOCAL_FILES_ENV =\n \"AGENT_NATIVE_ALLOW_LOCAL_FILES_IN_PRODUCTION\";\nconst DEFAULT_HIDE_PATTERNS = [\n \"**/.git/**\",\n \"**/.agent-native/**\",\n \"**/.next/**\",\n \"**/.nuxt/**\",\n \"**/node_modules/**\",\n \"**/dist/**\",\n \"**/build/**\",\n];\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return !!value && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction errorCode(error: unknown): string | undefined {\n return isRecord(error) && typeof error.code === \"string\"\n ? error.code\n : undefined;\n}\n\nfunction asStringArray(value: unknown): string[] {\n if (typeof value === \"string\" && value.trim()) return [value.trim()];\n if (!Array.isArray(value)) return [];\n return value.filter((item): item is string => typeof item === \"string\");\n}\n\nfunction normalizeMode(value: unknown): AgentNativeDataMode | undefined {\n if (value === \"database\" || value === \"local-files\") return value;\n return undefined;\n}\n\nfunction normalizeSlash(filePath: string): string {\n return filePath.replace(/\\\\/g, \"/\");\n}\n\nfunction normalizeRelativePath(filePath: string, label = \"path\"): string {\n if (!filePath || typeof filePath !== \"string\") {\n throw new Error(`${label} is required`);\n }\n if (filePath.includes(\"\\0\")) {\n throw new Error(`${label} must not contain null bytes`);\n }\n if (path.isAbsolute(filePath)) {\n throw new Error(`${label} must be relative`);\n }\n const normalized = normalizeSlash(\n path.posix.normalize(normalizeSlash(filePath)),\n );\n if (\n !normalized ||\n normalized === \".\" ||\n normalized.startsWith(\"../\") ||\n normalized === \"..\" ||\n normalized.split(\"/\").some((part) => !part || part === \".\" || part === \"..\")\n ) {\n throw new Error(`${label} must be a safe relative path`);\n }\n return normalized;\n}\n\nfunction extensionOf(filePath: string): string {\n return path.posix.extname(filePath).toLowerCase();\n}\n\nfunction normalizeExtensions(value: unknown): string[] {\n const extensions = asStringArray(value)\n .map((ext) => ext.trim().toLowerCase())\n .filter(Boolean)\n .map((ext) => (ext.startsWith(\".\") ? ext : `.${ext}`));\n return [...new Set(extensions)];\n}\n\nfunction rootNameFromPath(rootPath: string): string {\n return (\n rootPath\n .split(\"/\")\n .filter(Boolean)\n .at(-1)\n ?.replace(/[-_]+/g, \" \")\n .replace(/\\b\\w/g, (char) => char.toUpperCase()) || rootPath\n );\n}\n\nfunction normalizeManifestRoot(value: unknown): AgentNativeManifestRoot | null {\n if (typeof value === \"string\") return { path: value };\n if (!isRecord(value) || typeof value.path !== \"string\") return null;\n return {\n name: typeof value.name === \"string\" ? value.name : undefined,\n path: value.path,\n kind: typeof value.kind === \"string\" ? value.kind : undefined,\n extensions: normalizeExtensions(value.extensions),\n include: asStringArray(value.include),\n hide: asStringArray(value.hide),\n };\n}\n\nfunction normalizeManifestApp(value: unknown): AgentNativeManifestApp {\n if (Array.isArray(value)) {\n return {\n roots: value\n .map(normalizeManifestRoot)\n .filter((root): root is AgentNativeManifestRoot => !!root),\n };\n }\n if (!isRecord(value)) return {};\n const roots = Array.isArray(value.roots)\n ? value.roots\n .map(normalizeManifestRoot)\n .filter((root): root is AgentNativeManifestRoot => !!root)\n : [];\n return {\n mode: normalizeMode(value.mode),\n roots,\n components:\n typeof value.components === \"string\" || Array.isArray(value.components)\n ? asStringArray(value.components)\n : undefined,\n extensions:\n typeof value.extensions === \"string\" || Array.isArray(value.extensions)\n ? asStringArray(value.extensions)\n : undefined,\n hide: asStringArray(value.hide),\n };\n}\n\nfunction normalizeManifest(value: unknown): AgentNativeManifest {\n const record = isRecord(value) ? value : {};\n const appsRecord = isRecord(record.apps) ? record.apps : {};\n const apps: Record<string, AgentNativeManifestApp> = {};\n for (const [appId, appValue] of Object.entries(appsRecord)) {\n apps[appId] = normalizeManifestApp(appValue);\n }\n return {\n version:\n typeof record.version === \"number\" && Number.isFinite(record.version)\n ? record.version\n : undefined,\n mode: normalizeMode(record.mode),\n apps,\n };\n}\n\nfunction firstEnvValue(names: string[]): string | undefined {\n for (const name of names) {\n const value = process.env[name]?.trim();\n if (value) return value;\n }\n return undefined;\n}\n\nfunction envMode(): AgentNativeDataMode | undefined {\n return normalizeMode(firstEnvValue(ENV_MODE_NAMES));\n}\n\nfunction envFlag(name: string): boolean {\n const value = process.env[name]?.trim().toLowerCase();\n return value === \"1\" || value === \"true\" || value === \"yes\" || value === \"on\";\n}\n\nfunction assertLocalFilesRuntimeAllowed(mode: AgentNativeDataMode) {\n if (mode !== \"local-files\") return;\n if (process.env.NODE_ENV !== \"production\") return;\n if (envFlag(ALLOW_PRODUCTION_LOCAL_FILES_ENV)) return;\n throw new Error(\n `Local file mode is only enabled for local development runtimes. Set ${ALLOW_PRODUCTION_LOCAL_FILES_ENV}=true only for a trusted single-tenant local file bridge.`,\n );\n}\n\nfunction envManifestPath(): string | undefined {\n return firstEnvValue(ENV_MANIFEST_NAMES);\n}\n\nexport function findAgentNativeManifest(\n startDir = process.cwd(),\n): string | null {\n let current = path.resolve(startDir);\n for (;;) {\n const candidate = path.join(current, MANIFEST_FILE);\n if (fsSync.existsSync(candidate)) return candidate;\n const parent = path.dirname(current);\n if (parent === current) return null;\n current = parent;\n }\n}\n\nexport async function loadAgentNativeManifest(\n options: LoadAgentNativeManifestOptions = {},\n): Promise<LoadedAgentNativeManifest | null> {\n const manifestPath =\n options.manifestPath ??\n envManifestPath() ??\n findAgentNativeManifest(options.cwd ?? process.cwd());\n\n if (!manifestPath) {\n if (options.optional) return null;\n throw new Error(`Could not find ${MANIFEST_FILE}`);\n }\n\n const resolvedPath = path.resolve(options.cwd ?? process.cwd(), manifestPath);\n try {\n const raw = await fs.readFile(resolvedPath, \"utf8\");\n const parsed = JSON.parse(raw) as unknown;\n return {\n path: resolvedPath,\n rootDir: path.dirname(resolvedPath),\n manifest: normalizeManifest(parsed),\n };\n } catch (error) {\n if (options.optional && errorCode(error) === \"ENOENT\") {\n return null;\n }\n throw error;\n }\n}\n\nexport async function resolveAgentNativeDataMode(\n options: ResolveAgentNativeModeOptions = {},\n): Promise<AgentNativeDataMode> {\n const explicitMode = envMode();\n if (explicitMode) {\n assertLocalFilesRuntimeAllowed(explicitMode);\n return explicitMode;\n }\n\n const loaded = await loadAgentNativeManifest({ ...options, optional: true });\n const appMode = options.appId\n ? loaded?.manifest.apps?.[options.appId]?.mode\n : undefined;\n const mode =\n appMode ?? loaded?.manifest.mode ?? options.defaults?.mode ?? \"database\";\n assertLocalFilesRuntimeAllowed(mode);\n return mode;\n}\n\nexport async function isAgentNativeLocalFileMode(\n options: ResolveAgentNativeModeOptions = {},\n): Promise<boolean> {\n return (await resolveAgentNativeDataMode(options)) === \"local-files\";\n}\n\nfunction mergeAppConfig(\n manifestApp: AgentNativeManifestApp | undefined,\n defaults: LocalArtifactAppDefaults | undefined,\n): AgentNativeManifestApp {\n return {\n mode: manifestApp?.mode ?? defaults?.mode,\n roots:\n manifestApp?.roots && manifestApp.roots.length > 0\n ? manifestApp.roots\n : (defaults?.roots ?? []),\n components: manifestApp?.components ?? defaults?.components,\n extensions: manifestApp?.extensions ?? defaults?.extensions,\n hide: [...(defaults?.hide ?? []), ...(manifestApp?.hide ?? [])],\n };\n}\n\nfunction resolveInsideWorkspace(workspaceRoot: string, relativePath: string) {\n const safePath = normalizeRelativePath(relativePath);\n const absolutePath = path.resolve(workspaceRoot, safePath);\n const relative = path.relative(workspaceRoot, absolutePath);\n if (\n relative === \"\" ||\n relative.startsWith(\"..\") ||\n path.isAbsolute(relative)\n ) {\n throw new Error(`Path \"${relativePath}\" is outside the workspace`);\n }\n return { safePath, absolutePath };\n}\n\nexport async function getLocalArtifactApp(\n options: LocalArtifactOptions,\n): Promise<LoadedLocalArtifactApp> {\n const loaded = await loadAgentNativeManifest({ ...options, optional: true });\n const workspaceRoot =\n loaded?.rootDir ?? path.resolve(options.cwd ?? process.cwd());\n const manifestApp = loaded?.manifest.apps?.[options.appId];\n const app = mergeAppConfig(manifestApp, options.defaults);\n const mode = await resolveAgentNativeDataMode({\n ...options,\n appId: options.appId,\n defaults: app,\n });\n\n const roots = (app.roots ?? []).map((root) => {\n const { safePath, absolutePath } = resolveInsideWorkspace(\n workspaceRoot,\n root.path,\n );\n const extensions = normalizeExtensions(root.extensions);\n return {\n name: root.name || rootNameFromPath(safePath),\n path: safePath,\n absolutePath,\n kind: root.kind,\n extensions,\n hide: [...DEFAULT_HIDE_PATTERNS, ...asStringArray(root.hide)],\n include: asStringArray(root.include),\n };\n });\n\n return {\n appId: options.appId,\n mode,\n manifestPath: loaded?.path ?? null,\n workspaceRoot,\n roots,\n components: asStringArray(app.components),\n extensions: asStringArray(app.extensions),\n hide: [...DEFAULT_HIDE_PATTERNS, ...asStringArray(app.hide)],\n };\n}\n\nfunction matchesPatterns(filePath: string, patterns: string[]) {\n return patterns.some((pattern) =>\n minimatch(filePath, pattern, { dot: true, nocase: true }),\n );\n}\n\nfunction contentTypeForExtension(extension: string): string {\n if (extension === \".md\") return \"text/markdown\";\n if (extension === \".mdx\") return \"text/mdx\";\n if (extension === \".json\") return \"application/json\";\n if (extension === \".txt\") return \"text/plain\";\n return \"application/octet-stream\";\n}\n\nfunction hashContent(content: string): string {\n return crypto.createHash(\"sha256\").update(content).digest(\"hex\");\n}\n\nconst writeLocks = new Map<string, Promise<void>>();\n\nfunction noFollowOpenFlags(): number {\n return fsSync.constants.O_RDONLY | (fsSync.constants.O_NOFOLLOW ?? 0);\n}\n\nasync function withWriteLock<T>(\n absolutePath: string,\n fn: () => Promise<T>,\n): Promise<T> {\n const previous = writeLocks.get(absolutePath) ?? Promise.resolve();\n let release!: () => void;\n const next = new Promise<void>((resolve) => {\n release = resolve;\n });\n const current = previous.catch(() => {}).then(() => next);\n writeLocks.set(absolutePath, current);\n await previous.catch(() => {});\n try {\n return await fn();\n } finally {\n release();\n if (writeLocks.get(absolutePath) === current) {\n writeLocks.delete(absolutePath);\n }\n }\n}\n\nfunction assertNoSymlinkPathSync(\n root: LoadedLocalArtifactRoot,\n absolutePath: string,\n options: { allowMissingLeaf?: boolean } = {},\n) {\n const relative = path.relative(root.absolutePath, absolutePath);\n const segments = relative.split(path.sep).filter(Boolean);\n let current = root.absolutePath;\n const pathsToCheck = [\n current,\n ...segments.map((segment) => {\n current = path.join(current, segment);\n return current;\n }),\n ];\n\n for (let index = 0; index < pathsToCheck.length; index += 1) {\n const candidate = pathsToCheck[index]!;\n try {\n const stat = fsSync.lstatSync(candidate);\n if (stat.isSymbolicLink()) {\n throw new Error(`Path \"${candidate}\" must not traverse a symlink`);\n }\n if (index < pathsToCheck.length - 1 && !stat.isDirectory()) {\n throw new Error(`Path \"${candidate}\" is not a directory`);\n }\n } catch (error) {\n if (errorCode(error) === \"ENOENT\" && options.allowMissingLeaf) return;\n throw error;\n }\n }\n}\n\nfunction readTextFileWithoutSymlink(\n root: LoadedLocalArtifactRoot,\n absolutePath: string,\n): { content: string; stat: fsSync.Stats } {\n assertNoSymlinkPathSync(root, absolutePath);\n const fd = fsSync.openSync(absolutePath, noFollowOpenFlags());\n try {\n return {\n content: fsSync.readFileSync(fd, \"utf8\"),\n stat: fsSync.fstatSync(fd),\n };\n } finally {\n fsSync.closeSync(fd);\n }\n}\n\nasync function fileMetaForPath(\n root: LoadedLocalArtifactRoot,\n artifactPath: string,\n absolutePath: string,\n contentOverride?: string,\n statOverride?: fsSync.Stats,\n): Promise<LocalArtifactFileMeta> {\n const read =\n contentOverride === undefined\n ? readTextFileWithoutSymlink(root, absolutePath)\n : undefined;\n const content = contentOverride ?? read!.content;\n const stat = statOverride ?? read?.stat ?? (await fs.stat(absolutePath));\n const extension = extensionOf(artifactPath);\n return {\n path: artifactPath,\n absolutePath,\n rootName: root.name,\n rootPath: root.path,\n kind: root.kind,\n extension,\n contentType: contentTypeForExtension(extension),\n sizeBytes: Buffer.byteLength(content, \"utf8\"),\n hash: hashContent(content),\n createdAt: stat.birthtime.toISOString(),\n updatedAt: stat.mtime.toISOString(),\n mtimeMs: stat.mtimeMs,\n };\n}\n\nfunction rootAllowsPath(root: LoadedLocalArtifactRoot, artifactPath: string) {\n const extension = extensionOf(artifactPath);\n if (root.extensions.length > 0 && !root.extensions.includes(extension)) {\n return false;\n }\n if (matchesPatterns(artifactPath, root.hide)) return false;\n if (root.include.length === 0) return true;\n return matchesPatterns(artifactPath, root.include);\n}\n\nasync function walkRoot(\n root: LoadedLocalArtifactRoot,\n directory = root.absolutePath,\n): Promise<LocalArtifactFileMeta[]> {\n let entries: fsSync.Dirent[];\n try {\n entries = await fs.readdir(directory, { withFileTypes: true });\n } catch (error) {\n if (errorCode(error) === \"ENOENT\") {\n return [];\n }\n throw error;\n }\n\n const files: LocalArtifactFileMeta[] = [];\n for (const entry of entries) {\n const absolutePath = path.join(directory, entry.name);\n const relativeToRoot = normalizeSlash(\n path.relative(root.absolutePath, absolutePath),\n );\n const artifactPath = normalizeSlash(\n path.posix.join(root.path, relativeToRoot),\n );\n if (matchesPatterns(artifactPath, root.hide)) continue;\n\n if (entry.isDirectory()) {\n files.push(...(await walkRoot(root, absolutePath)));\n continue;\n }\n if (!entry.isFile() || !rootAllowsPath(root, artifactPath)) continue;\n files.push(await fileMetaForPath(root, artifactPath, absolutePath));\n }\n return files;\n}\n\nexport async function listLocalArtifactFiles(\n options: LocalArtifactOptions,\n): Promise<LocalArtifactFileMeta[]> {\n const app = await getLocalArtifactApp(options);\n if (app.mode !== \"local-files\") return [];\n\n const files = (await Promise.all(app.roots.map((root) => walkRoot(root))))\n .flat()\n .filter((file) => !matchesPatterns(file.path, app.hide));\n\n return files.sort((a, b) => a.path.localeCompare(b.path));\n}\n\nfunction rootForArtifactPath(\n app: LoadedLocalArtifactApp,\n artifactPath: string,\n): LoadedLocalArtifactRoot {\n const safePath = normalizeRelativePath(artifactPath);\n const root = app.roots.find(\n (candidate) =>\n safePath === candidate.path || safePath.startsWith(`${candidate.path}/`),\n );\n if (!root) {\n throw new Error(`Path \"${artifactPath}\" is not in a configured local root`);\n }\n if (!rootAllowsPath(root, safePath) || matchesPatterns(safePath, app.hide)) {\n throw new Error(`Path \"${artifactPath}\" is not allowed for this app`);\n }\n return root;\n}\n\nasync function resolveArtifactPath(\n app: LoadedLocalArtifactApp,\n artifactPath: string,\n): Promise<{\n root: LoadedLocalArtifactRoot;\n safePath: string;\n absolutePath: string;\n}> {\n const safePath = normalizeRelativePath(artifactPath);\n const root = rootForArtifactPath(app, safePath);\n const absolutePath = path.resolve(app.workspaceRoot, safePath);\n const relative = path.relative(root.absolutePath, absolutePath);\n if (\n relative.startsWith(\"..\") ||\n path.isAbsolute(relative) ||\n relative === \"\"\n ) {\n throw new Error(`Path \"${artifactPath}\" is outside its configured root`);\n }\n return { root, safePath, absolutePath };\n}\n\nasync function assertNoSymlinkPath(\n root: LoadedLocalArtifactRoot,\n absolutePath: string,\n options: { allowMissingLeaf?: boolean } = {},\n) {\n assertNoSymlinkPathSync(root, absolutePath, options);\n}\n\nexport async function readLocalArtifactFile(\n options: LocalArtifactOptions & { path: string },\n): Promise<LocalArtifactFile | null> {\n const app = await getLocalArtifactApp(options);\n if (app.mode !== \"local-files\") return null;\n const { root, safePath, absolutePath } = await resolveArtifactPath(\n app,\n options.path,\n );\n try {\n const { content, stat } = readTextFileWithoutSymlink(root, absolutePath);\n const meta = await fileMetaForPath(\n root,\n safePath,\n absolutePath,\n content,\n stat,\n );\n return { ...meta, content };\n } catch (error) {\n if (errorCode(error) === \"ENOENT\") {\n return null;\n }\n throw error;\n }\n}\n\nexport async function writeLocalArtifactFile(\n options: WriteLocalArtifactFileOptions & { path: string },\n): Promise<LocalArtifactFileMeta> {\n const app = await getLocalArtifactApp(options);\n if (app.mode !== \"local-files\") {\n throw new Error(\"Local file mode is not enabled\");\n }\n const { root, safePath, absolutePath } = await resolveArtifactPath(\n app,\n options.path,\n );\n return withWriteLock(absolutePath, async () => {\n const existing = await readLocalArtifactFile({\n ...options,\n path: safePath,\n });\n if (options.ifNotExists && existing) {\n throw new Error(`File \"${safePath}\" already exists`);\n }\n if (\n options.expectedHash &&\n (!existing || existing.hash !== options.expectedHash)\n ) {\n throw new Error(\n `File \"${safePath}\" changed on disk. Reload before saving again.`,\n );\n }\n\n await assertNoSymlinkPath(root, absolutePath, { allowMissingLeaf: true });\n await fs.mkdir(path.dirname(absolutePath), { recursive: true });\n const tempPath = path.join(\n path.dirname(absolutePath),\n `.${path.basename(absolutePath)}.${process.pid}.${crypto.randomUUID()}.tmp`,\n );\n await fs.writeFile(tempPath, options.content, \"utf8\");\n await fs.rename(tempPath, absolutePath);\n return fileMetaForPath(root, safePath, absolutePath, options.content);\n });\n}\n\nexport async function deleteLocalArtifactFile(\n options: LocalArtifactOptions & { path: string },\n): Promise<boolean> {\n const app = await getLocalArtifactApp(options);\n if (app.mode !== \"local-files\") {\n throw new Error(\"Local file mode is not enabled\");\n }\n const { root, absolutePath } = await resolveArtifactPath(app, options.path);\n try {\n await assertNoSymlinkPath(root, absolutePath);\n await fs.unlink(absolutePath);\n return true;\n } catch (error) {\n if (errorCode(error) === \"ENOENT\") {\n return false;\n }\n throw error;\n }\n}\n\nexport async function ensureLocalArtifactRoot(\n options: LocalArtifactOptions,\n): Promise<LoadedLocalArtifactRoot> {\n const app = await getLocalArtifactApp(options);\n if (app.mode !== \"local-files\") {\n throw new Error(\"Local file mode is not enabled\");\n }\n const root = app.roots[0];\n if (!root) {\n throw new Error(`No local roots configured for app \"${options.appId}\"`);\n }\n await fs.mkdir(root.absolutePath, { recursive: true });\n return root;\n}\n\nexport function createTempWorkspaceDir(prefix = \"agent-native-local-\"): string {\n return fsSync.mkdtempSync(path.join(os.tmpdir(), prefix));\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/local-artifacts/index.ts"],"names":[],"mappings":"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","sourcesContent":["import crypto from \"node:crypto\";\nimport fs from \"node:fs/promises\";\nimport fsSync from \"node:fs\";\nimport os from \"node:os\";\nimport path from \"node:path\";\nimport { minimatch } from \"minimatch\";\n\nexport type AgentNativeDataMode = \"database\" | \"local-files\";\n\nexport interface AgentNativeManifestRoot {\n name?: string;\n path: string;\n kind?: string;\n extensions?: string[];\n include?: string[];\n hide?: string[];\n}\n\nexport interface AgentNativeManifestApp {\n mode?: AgentNativeDataMode;\n roots?: AgentNativeManifestRoot[];\n components?: string | string[];\n extensions?: string | string[];\n hide?: string[];\n}\n\nexport interface AgentNativeManifest {\n version?: number;\n mode?: AgentNativeDataMode;\n apps?: Record<string, AgentNativeManifestApp>;\n}\n\nexport interface LoadedAgentNativeManifest {\n path: string;\n rootDir: string;\n manifest: AgentNativeManifest;\n}\n\nexport interface LocalArtifactAppDefaults {\n mode?: AgentNativeDataMode;\n roots: AgentNativeManifestRoot[];\n hide?: string[];\n components?: string | string[];\n extensions?: string | string[];\n}\n\nexport interface LoadAgentNativeManifestOptions {\n cwd?: string;\n manifestPath?: string;\n optional?: boolean;\n}\n\nexport interface ResolveAgentNativeModeOptions extends LoadAgentNativeManifestOptions {\n appId?: string;\n defaults?: Pick<LocalArtifactAppDefaults, \"mode\">;\n}\n\nexport interface LocalArtifactOptions extends LoadAgentNativeManifestOptions {\n appId: string;\n defaults?: LocalArtifactAppDefaults;\n}\n\nexport interface LoadedLocalArtifactRoot {\n name: string;\n path: string;\n absolutePath: string;\n kind?: string;\n extensions: string[];\n hide: string[];\n include: string[];\n}\n\nexport interface LoadedLocalArtifactApp {\n appId: string;\n mode: AgentNativeDataMode;\n manifestPath: string | null;\n workspaceRoot: string;\n roots: LoadedLocalArtifactRoot[];\n components: string[];\n extensions: string[];\n hide: string[];\n}\n\nexport interface LocalArtifactFileMeta {\n path: string;\n absolutePath: string;\n rootName: string;\n rootPath: string;\n kind?: string;\n extension: string;\n contentType: string;\n sizeBytes: number;\n hash: string;\n createdAt: string;\n updatedAt: string;\n mtimeMs: number;\n}\n\nexport interface LocalArtifactFile extends LocalArtifactFileMeta {\n content: string;\n}\n\nexport interface WriteLocalArtifactFileOptions extends LocalArtifactOptions {\n content: string;\n expectedHash?: string | null;\n ifNotExists?: boolean;\n}\n\nexport interface LocalWorkspaceResourceMeta {\n id: string;\n path: string;\n absolutePath: string;\n mimeType: string;\n sizeBytes: number;\n hash: string;\n createdAt: string;\n updatedAt: string;\n mtimeMs: number;\n}\n\nexport interface LocalWorkspaceResourceFile extends LocalWorkspaceResourceMeta {\n content: string;\n}\n\nexport interface LocalWorkspaceResourceOptions extends LoadAgentNativeManifestOptions {}\n\nexport interface WriteLocalWorkspaceResourceOptions extends LocalWorkspaceResourceOptions {\n path: string;\n content: string;\n expectedHash?: string | null;\n ifNotExists?: boolean;\n}\n\nconst MANIFEST_FILE = \"agent-native.json\";\nconst ENV_MODE_NAMES = [\"AGENT_NATIVE_MODE\", \"AGENT_NATIVE_DATA_MODE\"];\nconst ENV_MANIFEST_NAMES = [\n \"AGENT_NATIVE_MANIFEST\",\n \"AGENT_NATIVE_MANIFEST_PATH\",\n];\nconst ALLOW_PRODUCTION_LOCAL_FILES_ENV =\n \"AGENT_NATIVE_ALLOW_LOCAL_FILES_IN_PRODUCTION\";\nconst DEFAULT_HIDE_PATTERNS = [\n \"**/.git/**\",\n \"**/.agent-native/**\",\n \"**/.next/**\",\n \"**/.nuxt/**\",\n \"**/node_modules/**\",\n \"**/dist/**\",\n \"**/build/**\",\n];\nexport const LOCAL_WORKSPACE_RESOURCE_ID_PREFIX = \"local-workspace-resource:\";\nconst LOCAL_WORKSPACE_RESOURCE_MAX_BYTES = 2 * 1024 * 1024;\nconst LOCAL_WORKSPACE_CONTROL_FILES = new Set([\n \"AGENTS.md\",\n \"agent-native.json\",\n \"mcp.config.json\",\n \".mcp.json\",\n]);\nconst LOCAL_WORKSPACE_SKILL_ROOTS = [\".agents/skills\", \".agent/skills\"];\nconst LOCAL_WORKSPACE_TEXT_EXTENSIONS = new Set([\n \".css\",\n \".csv\",\n \".html\",\n \".js\",\n \".json\",\n \".jsx\",\n \".md\",\n \".mdx\",\n \".py\",\n \".sh\",\n \".sql\",\n \".toml\",\n \".ts\",\n \".tsx\",\n \".txt\",\n \".xml\",\n \".yaml\",\n \".yml\",\n]);\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return !!value && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction errorCode(error: unknown): string | undefined {\n return isRecord(error) && typeof error.code === \"string\"\n ? error.code\n : undefined;\n}\n\nfunction asStringArray(value: unknown): string[] {\n if (typeof value === \"string\" && value.trim()) return [value.trim()];\n if (!Array.isArray(value)) return [];\n return value.filter((item): item is string => typeof item === \"string\");\n}\n\nfunction normalizeMode(value: unknown): AgentNativeDataMode | undefined {\n if (value === \"database\" || value === \"local-files\") return value;\n return undefined;\n}\n\nfunction normalizeSlash(filePath: string): string {\n return filePath.replace(/\\\\/g, \"/\");\n}\n\nfunction normalizeRelativePath(filePath: string, label = \"path\"): string {\n if (!filePath || typeof filePath !== \"string\") {\n throw new Error(`${label} is required`);\n }\n if (filePath.includes(\"\\0\")) {\n throw new Error(`${label} must not contain null bytes`);\n }\n if (path.isAbsolute(filePath)) {\n throw new Error(`${label} must be relative`);\n }\n const normalized = normalizeSlash(\n path.posix.normalize(normalizeSlash(filePath)),\n );\n if (\n !normalized ||\n normalized === \".\" ||\n normalized.startsWith(\"../\") ||\n normalized === \"..\" ||\n normalized.split(\"/\").some((part) => !part || part === \".\" || part === \"..\")\n ) {\n throw new Error(`${label} must be a safe relative path`);\n }\n return normalized;\n}\n\nfunction extensionOf(filePath: string): string {\n return path.posix.extname(filePath).toLowerCase();\n}\n\nfunction normalizeExtensions(value: unknown): string[] {\n const extensions = asStringArray(value)\n .map((ext) => ext.trim().toLowerCase())\n .filter(Boolean)\n .map((ext) => (ext.startsWith(\".\") ? ext : `.${ext}`));\n return [...new Set(extensions)];\n}\n\nfunction rootNameFromPath(rootPath: string): string {\n return (\n rootPath\n .split(\"/\")\n .filter(Boolean)\n .at(-1)\n ?.replace(/[-_]+/g, \" \")\n .replace(/\\b\\w/g, (char) => char.toUpperCase()) || rootPath\n );\n}\n\nfunction normalizeManifestRoot(value: unknown): AgentNativeManifestRoot | null {\n if (typeof value === \"string\") return { path: value };\n if (!isRecord(value) || typeof value.path !== \"string\") return null;\n return {\n name: typeof value.name === \"string\" ? value.name : undefined,\n path: value.path,\n kind: typeof value.kind === \"string\" ? value.kind : undefined,\n extensions: normalizeExtensions(value.extensions),\n include: asStringArray(value.include),\n hide: asStringArray(value.hide),\n };\n}\n\nfunction normalizeManifestApp(value: unknown): AgentNativeManifestApp {\n if (Array.isArray(value)) {\n return {\n roots: value\n .map(normalizeManifestRoot)\n .filter((root): root is AgentNativeManifestRoot => !!root),\n };\n }\n if (!isRecord(value)) return {};\n const roots = Array.isArray(value.roots)\n ? value.roots\n .map(normalizeManifestRoot)\n .filter((root): root is AgentNativeManifestRoot => !!root)\n : [];\n return {\n mode: normalizeMode(value.mode),\n roots,\n components:\n typeof value.components === \"string\" || Array.isArray(value.components)\n ? asStringArray(value.components)\n : undefined,\n extensions:\n typeof value.extensions === \"string\" || Array.isArray(value.extensions)\n ? asStringArray(value.extensions)\n : undefined,\n hide: asStringArray(value.hide),\n };\n}\n\nfunction normalizeManifest(value: unknown): AgentNativeManifest {\n const record = isRecord(value) ? value : {};\n const appsRecord = isRecord(record.apps) ? record.apps : {};\n const apps: Record<string, AgentNativeManifestApp> = {};\n for (const [appId, appValue] of Object.entries(appsRecord)) {\n apps[appId] = normalizeManifestApp(appValue);\n }\n return {\n version:\n typeof record.version === \"number\" && Number.isFinite(record.version)\n ? record.version\n : undefined,\n mode: normalizeMode(record.mode),\n apps,\n };\n}\n\nfunction firstEnvValue(names: string[]): string | undefined {\n for (const name of names) {\n const value = process.env[name]?.trim();\n if (value) return value;\n }\n return undefined;\n}\n\nfunction envMode(): AgentNativeDataMode | undefined {\n return normalizeMode(firstEnvValue(ENV_MODE_NAMES));\n}\n\nfunction envFlag(name: string): boolean {\n const value = process.env[name]?.trim().toLowerCase();\n return value === \"1\" || value === \"true\" || value === \"yes\" || value === \"on\";\n}\n\nfunction assertLocalFilesRuntimeAllowed(mode: AgentNativeDataMode) {\n if (mode !== \"local-files\") return;\n if (process.env.NODE_ENV !== \"production\") return;\n if (envFlag(ALLOW_PRODUCTION_LOCAL_FILES_ENV)) return;\n throw new Error(\n `Local file mode is only enabled for local development runtimes. Set ${ALLOW_PRODUCTION_LOCAL_FILES_ENV}=true only for a trusted single-tenant local file bridge.`,\n );\n}\n\nfunction envManifestPath(): string | undefined {\n return firstEnvValue(ENV_MANIFEST_NAMES);\n}\n\nexport function findAgentNativeManifest(\n startDir = process.cwd(),\n): string | null {\n let current = path.resolve(startDir);\n for (;;) {\n const candidate = path.join(current, MANIFEST_FILE);\n if (fsSync.existsSync(candidate)) return candidate;\n const parent = path.dirname(current);\n if (parent === current) return null;\n current = parent;\n }\n}\n\nexport async function loadAgentNativeManifest(\n options: LoadAgentNativeManifestOptions = {},\n): Promise<LoadedAgentNativeManifest | null> {\n const manifestPath =\n options.manifestPath ??\n envManifestPath() ??\n findAgentNativeManifest(options.cwd ?? process.cwd());\n\n if (!manifestPath) {\n if (options.optional) return null;\n throw new Error(`Could not find ${MANIFEST_FILE}`);\n }\n\n const resolvedPath = path.resolve(options.cwd ?? process.cwd(), manifestPath);\n try {\n const raw = await fs.readFile(resolvedPath, \"utf8\");\n const parsed = JSON.parse(raw) as unknown;\n return {\n path: resolvedPath,\n rootDir: path.dirname(resolvedPath),\n manifest: normalizeManifest(parsed),\n };\n } catch (error) {\n if (options.optional && errorCode(error) === \"ENOENT\") {\n return null;\n }\n throw error;\n }\n}\n\nexport async function resolveAgentNativeDataMode(\n options: ResolveAgentNativeModeOptions = {},\n): Promise<AgentNativeDataMode> {\n const explicitMode = envMode();\n if (explicitMode) {\n assertLocalFilesRuntimeAllowed(explicitMode);\n return explicitMode;\n }\n\n const loaded = await loadAgentNativeManifest({ ...options, optional: true });\n const appMode = options.appId\n ? loaded?.manifest.apps?.[options.appId]?.mode\n : undefined;\n const mode =\n appMode ?? loaded?.manifest.mode ?? options.defaults?.mode ?? \"database\";\n assertLocalFilesRuntimeAllowed(mode);\n return mode;\n}\n\nexport async function isAgentNativeLocalFileMode(\n options: ResolveAgentNativeModeOptions = {},\n): Promise<boolean> {\n return (await resolveAgentNativeDataMode(options)) === \"local-files\";\n}\n\nfunction mergeAppConfig(\n manifestApp: AgentNativeManifestApp | undefined,\n defaults: LocalArtifactAppDefaults | undefined,\n): AgentNativeManifestApp {\n return {\n mode: manifestApp?.mode ?? defaults?.mode,\n roots:\n manifestApp?.roots && manifestApp.roots.length > 0\n ? manifestApp.roots\n : (defaults?.roots ?? []),\n components: manifestApp?.components ?? defaults?.components,\n extensions: manifestApp?.extensions ?? defaults?.extensions,\n hide: [...(defaults?.hide ?? []), ...(manifestApp?.hide ?? [])],\n };\n}\n\nfunction resolveInsideWorkspace(workspaceRoot: string, relativePath: string) {\n const safePath = normalizeRelativePath(relativePath);\n const absolutePath = path.resolve(workspaceRoot, safePath);\n const relative = path.relative(workspaceRoot, absolutePath);\n if (\n relative === \"\" ||\n relative.startsWith(\"..\") ||\n path.isAbsolute(relative)\n ) {\n throw new Error(`Path \"${relativePath}\" is outside the workspace`);\n }\n return { safePath, absolutePath };\n}\n\nexport async function getLocalArtifactApp(\n options: LocalArtifactOptions,\n): Promise<LoadedLocalArtifactApp> {\n const loaded = await loadAgentNativeManifest({ ...options, optional: true });\n const workspaceRoot =\n loaded?.rootDir ?? path.resolve(options.cwd ?? process.cwd());\n const manifestApp = loaded?.manifest.apps?.[options.appId];\n const app = mergeAppConfig(manifestApp, options.defaults);\n const mode = await resolveAgentNativeDataMode({\n ...options,\n appId: options.appId,\n defaults: app,\n });\n\n const roots = (app.roots ?? []).map((root) => {\n const { safePath, absolutePath } = resolveInsideWorkspace(\n workspaceRoot,\n root.path,\n );\n const extensions = normalizeExtensions(root.extensions);\n return {\n name: root.name || rootNameFromPath(safePath),\n path: safePath,\n absolutePath,\n kind: root.kind,\n extensions,\n hide: [...DEFAULT_HIDE_PATTERNS, ...asStringArray(root.hide)],\n include: asStringArray(root.include),\n };\n });\n\n return {\n appId: options.appId,\n mode,\n manifestPath: loaded?.path ?? null,\n workspaceRoot,\n roots,\n components: asStringArray(app.components),\n extensions: asStringArray(app.extensions),\n hide: [...DEFAULT_HIDE_PATTERNS, ...asStringArray(app.hide)],\n };\n}\n\nfunction matchesPatterns(filePath: string, patterns: string[]) {\n return patterns.some((pattern) =>\n minimatch(filePath, pattern, { dot: true, nocase: true }),\n );\n}\n\nfunction contentTypeForExtension(extension: string): string {\n if (extension === \".md\") return \"text/markdown\";\n if (extension === \".mdx\") return \"text/mdx\";\n if (extension === \".json\") return \"application/json\";\n if (extension === \".txt\") return \"text/plain\";\n return \"application/octet-stream\";\n}\n\nfunction hashContent(content: string): string {\n return crypto.createHash(\"sha256\").update(content).digest(\"hex\");\n}\n\nconst writeLocks = new Map<string, Promise<void>>();\n\nfunction noFollowOpenFlags(): number {\n return fsSync.constants.O_RDONLY | (fsSync.constants.O_NOFOLLOW ?? 0);\n}\n\nasync function withWriteLock<T>(\n absolutePath: string,\n fn: () => Promise<T>,\n): Promise<T> {\n const previous = writeLocks.get(absolutePath) ?? Promise.resolve();\n let release!: () => void;\n const next = new Promise<void>((resolve) => {\n release = resolve;\n });\n const current = previous.catch(() => {}).then(() => next);\n writeLocks.set(absolutePath, current);\n await previous.catch(() => {});\n try {\n return await fn();\n } finally {\n release();\n if (writeLocks.get(absolutePath) === current) {\n writeLocks.delete(absolutePath);\n }\n }\n}\n\nfunction assertNoSymlinkPathSync(\n root: LoadedLocalArtifactRoot,\n absolutePath: string,\n options: { allowMissingLeaf?: boolean } = {},\n) {\n const relative = path.relative(root.absolutePath, absolutePath);\n const segments = relative.split(path.sep).filter(Boolean);\n let current = root.absolutePath;\n const pathsToCheck = [\n current,\n ...segments.map((segment) => {\n current = path.join(current, segment);\n return current;\n }),\n ];\n\n for (let index = 0; index < pathsToCheck.length; index += 1) {\n const candidate = pathsToCheck[index]!;\n try {\n const stat = fsSync.lstatSync(candidate);\n if (stat.isSymbolicLink()) {\n throw new Error(`Path \"${candidate}\" must not traverse a symlink`);\n }\n if (index < pathsToCheck.length - 1 && !stat.isDirectory()) {\n throw new Error(`Path \"${candidate}\" is not a directory`);\n }\n } catch (error) {\n if (errorCode(error) === \"ENOENT\" && options.allowMissingLeaf) return;\n throw error;\n }\n }\n}\n\nfunction readTextFileWithoutSymlink(\n root: LoadedLocalArtifactRoot,\n absolutePath: string,\n): { content: string; stat: fsSync.Stats } {\n assertNoSymlinkPathSync(root, absolutePath);\n const fd = fsSync.openSync(absolutePath, noFollowOpenFlags());\n try {\n return {\n content: fsSync.readFileSync(fd, \"utf8\"),\n stat: fsSync.fstatSync(fd),\n };\n } finally {\n fsSync.closeSync(fd);\n }\n}\n\nasync function fileMetaForPath(\n root: LoadedLocalArtifactRoot,\n artifactPath: string,\n absolutePath: string,\n contentOverride?: string,\n statOverride?: fsSync.Stats,\n): Promise<LocalArtifactFileMeta> {\n const read =\n contentOverride === undefined\n ? readTextFileWithoutSymlink(root, absolutePath)\n : undefined;\n const content = contentOverride ?? read!.content;\n const stat = statOverride ?? read?.stat ?? (await fs.stat(absolutePath));\n const extension = extensionOf(artifactPath);\n return {\n path: artifactPath,\n absolutePath,\n rootName: root.name,\n rootPath: root.path,\n kind: root.kind,\n extension,\n contentType: contentTypeForExtension(extension),\n sizeBytes: Buffer.byteLength(content, \"utf8\"),\n hash: hashContent(content),\n createdAt: stat.birthtime.toISOString(),\n updatedAt: stat.mtime.toISOString(),\n mtimeMs: stat.mtimeMs,\n };\n}\n\nfunction rootAllowsPath(root: LoadedLocalArtifactRoot, artifactPath: string) {\n const extension = extensionOf(artifactPath);\n if (root.extensions.length > 0 && !root.extensions.includes(extension)) {\n return false;\n }\n if (matchesPatterns(artifactPath, root.hide)) return false;\n if (root.include.length === 0) return true;\n return matchesPatterns(artifactPath, root.include);\n}\n\nasync function walkRoot(\n root: LoadedLocalArtifactRoot,\n directory = root.absolutePath,\n): Promise<LocalArtifactFileMeta[]> {\n let entries: fsSync.Dirent[];\n try {\n entries = await fs.readdir(directory, { withFileTypes: true });\n } catch (error) {\n if (errorCode(error) === \"ENOENT\") {\n return [];\n }\n throw error;\n }\n\n const files: LocalArtifactFileMeta[] = [];\n for (const entry of entries) {\n const absolutePath = path.join(directory, entry.name);\n const relativeToRoot = normalizeSlash(\n path.relative(root.absolutePath, absolutePath),\n );\n const artifactPath = normalizeSlash(\n path.posix.join(root.path, relativeToRoot),\n );\n if (matchesPatterns(artifactPath, root.hide)) continue;\n\n if (entry.isDirectory()) {\n files.push(...(await walkRoot(root, absolutePath)));\n continue;\n }\n if (!entry.isFile() || !rootAllowsPath(root, artifactPath)) continue;\n files.push(await fileMetaForPath(root, artifactPath, absolutePath));\n }\n return files;\n}\n\nexport async function listLocalArtifactFiles(\n options: LocalArtifactOptions,\n): Promise<LocalArtifactFileMeta[]> {\n const app = await getLocalArtifactApp(options);\n if (app.mode !== \"local-files\") return [];\n\n const files = (await Promise.all(app.roots.map((root) => walkRoot(root))))\n .flat()\n .filter((file) => !matchesPatterns(file.path, app.hide));\n\n return files.sort((a, b) => a.path.localeCompare(b.path));\n}\n\nfunction rootForArtifactPath(\n app: LoadedLocalArtifactApp,\n artifactPath: string,\n): LoadedLocalArtifactRoot {\n const safePath = normalizeRelativePath(artifactPath);\n const root = app.roots.find(\n (candidate) =>\n safePath === candidate.path || safePath.startsWith(`${candidate.path}/`),\n );\n if (!root) {\n throw new Error(`Path \"${artifactPath}\" is not in a configured local root`);\n }\n if (!rootAllowsPath(root, safePath) || matchesPatterns(safePath, app.hide)) {\n throw new Error(`Path \"${artifactPath}\" is not allowed for this app`);\n }\n return root;\n}\n\nasync function resolveArtifactPath(\n app: LoadedLocalArtifactApp,\n artifactPath: string,\n): Promise<{\n root: LoadedLocalArtifactRoot;\n safePath: string;\n absolutePath: string;\n}> {\n const safePath = normalizeRelativePath(artifactPath);\n const root = rootForArtifactPath(app, safePath);\n const absolutePath = path.resolve(app.workspaceRoot, safePath);\n const relative = path.relative(root.absolutePath, absolutePath);\n if (\n relative.startsWith(\"..\") ||\n path.isAbsolute(relative) ||\n relative === \"\"\n ) {\n throw new Error(`Path \"${artifactPath}\" is outside its configured root`);\n }\n return { root, safePath, absolutePath };\n}\n\nasync function assertNoSymlinkPath(\n root: LoadedLocalArtifactRoot,\n absolutePath: string,\n options: { allowMissingLeaf?: boolean } = {},\n) {\n assertNoSymlinkPathSync(root, absolutePath, options);\n}\n\nexport async function readLocalArtifactFile(\n options: LocalArtifactOptions & { path: string },\n): Promise<LocalArtifactFile | null> {\n const app = await getLocalArtifactApp(options);\n if (app.mode !== \"local-files\") return null;\n const { root, safePath, absolutePath } = await resolveArtifactPath(\n app,\n options.path,\n );\n try {\n const { content, stat } = readTextFileWithoutSymlink(root, absolutePath);\n const meta = await fileMetaForPath(\n root,\n safePath,\n absolutePath,\n content,\n stat,\n );\n return { ...meta, content };\n } catch (error) {\n if (errorCode(error) === \"ENOENT\") {\n return null;\n }\n throw error;\n }\n}\n\nexport async function writeLocalArtifactFile(\n options: WriteLocalArtifactFileOptions & { path: string },\n): Promise<LocalArtifactFileMeta> {\n const app = await getLocalArtifactApp(options);\n if (app.mode !== \"local-files\") {\n throw new Error(\"Local file mode is not enabled\");\n }\n const { root, safePath, absolutePath } = await resolveArtifactPath(\n app,\n options.path,\n );\n return withWriteLock(absolutePath, async () => {\n const existing = await readLocalArtifactFile({\n ...options,\n path: safePath,\n });\n if (options.ifNotExists && existing) {\n throw new Error(`File \"${safePath}\" already exists`);\n }\n if (\n options.expectedHash &&\n (!existing || existing.hash !== options.expectedHash)\n ) {\n throw new Error(\n `File \"${safePath}\" changed on disk. Reload before saving again.`,\n );\n }\n\n await assertNoSymlinkPath(root, absolutePath, { allowMissingLeaf: true });\n await fs.mkdir(path.dirname(absolutePath), { recursive: true });\n const tempPath = path.join(\n path.dirname(absolutePath),\n `.${path.basename(absolutePath)}.${process.pid}.${crypto.randomUUID()}.tmp`,\n );\n await fs.writeFile(tempPath, options.content, \"utf8\");\n await fs.rename(tempPath, absolutePath);\n return fileMetaForPath(root, safePath, absolutePath, options.content);\n });\n}\n\nexport async function deleteLocalArtifactFile(\n options: LocalArtifactOptions & { path: string },\n): Promise<boolean> {\n const app = await getLocalArtifactApp(options);\n if (app.mode !== \"local-files\") {\n throw new Error(\"Local file mode is not enabled\");\n }\n const { root, absolutePath } = await resolveArtifactPath(app, options.path);\n try {\n await assertNoSymlinkPath(root, absolutePath);\n await fs.unlink(absolutePath);\n return true;\n } catch (error) {\n if (errorCode(error) === \"ENOENT\") {\n return false;\n }\n throw error;\n }\n}\n\nexport async function ensureLocalArtifactRoot(\n options: LocalArtifactOptions,\n): Promise<LoadedLocalArtifactRoot> {\n const app = await getLocalArtifactApp(options);\n if (app.mode !== \"local-files\") {\n throw new Error(\"Local file mode is not enabled\");\n }\n const root = app.roots[0];\n if (!root) {\n throw new Error(`No local roots configured for app \"${options.appId}\"`);\n }\n await fs.mkdir(root.absolutePath, { recursive: true });\n return root;\n}\n\nexport function createTempWorkspaceDir(prefix = \"agent-native-local-\"): string {\n return fsSync.mkdtempSync(path.join(os.tmpdir(), prefix));\n}\n\nfunction localWorkspaceResourcesEnabled(\n loaded: LoadedAgentNativeManifest | null,\n): boolean {\n const explicitMode = envMode();\n if (explicitMode) {\n assertLocalFilesRuntimeAllowed(explicitMode);\n return explicitMode === \"local-files\";\n }\n const manifest = loaded?.manifest;\n const mode = manifest?.mode;\n if (mode) {\n assertLocalFilesRuntimeAllowed(mode);\n if (mode === \"local-files\") return true;\n }\n return false;\n}\n\nasync function resolveLocalWorkspaceRoot(\n options: LocalWorkspaceResourceOptions = {},\n): Promise<string | null> {\n const loaded = await loadAgentNativeManifest({ ...options, optional: true });\n if (localWorkspaceResourcesEnabled(loaded)) {\n return loaded?.rootDir ?? path.resolve(options.cwd ?? process.cwd());\n }\n return null;\n}\n\nexport async function isLocalWorkspaceResourcesEnabled(\n options: LocalWorkspaceResourceOptions = {},\n): Promise<boolean> {\n return !!(await resolveLocalWorkspaceRoot(options));\n}\n\nexport function localWorkspaceResourceId(resourcePath: string): string {\n const normalized = normalizeSlash(resourcePath).replace(/^\\/+/, \"\");\n return `${LOCAL_WORKSPACE_RESOURCE_ID_PREFIX}${Buffer.from(\n normalized,\n \"utf8\",\n ).toString(\"base64url\")}`;\n}\n\nexport function isLocalWorkspaceResourceId(id: string): boolean {\n return id.startsWith(LOCAL_WORKSPACE_RESOURCE_ID_PREFIX);\n}\n\nexport function localWorkspaceResourcePathFromId(id: string): string | null {\n if (!isLocalWorkspaceResourceId(id)) return null;\n const encoded = id.slice(LOCAL_WORKSPACE_RESOURCE_ID_PREFIX.length);\n try {\n const decoded = Buffer.from(encoded, \"base64url\").toString(\"utf8\");\n return normalizeLocalWorkspaceResourcePath(decoded);\n } catch {\n return null;\n }\n}\n\nfunction mimeTypeForLocalWorkspaceResource(resourcePath: string): string {\n const extension = extensionOf(resourcePath);\n if (extension === \".md\") return \"text/markdown\";\n if (extension === \".mdx\") return \"text/mdx\";\n if (extension === \".json\") return \"application/json\";\n if (extension === \".yaml\" || extension === \".yml\") return \"application/yaml\";\n if (extension === \".toml\") return \"text/toml\";\n if (extension === \".ts\" || extension === \".tsx\") return \"text/typescript\";\n if (extension === \".js\" || extension === \".jsx\") return \"text/javascript\";\n if (extension === \".html\") return \"text/html\";\n if (extension === \".css\") return \"text/css\";\n if (extension === \".xml\") return \"application/xml\";\n if (extension === \".csv\") return \"text/csv\";\n if (extension === \".sql\") return \"text/sql\";\n if (extension === \".sh\") return \"text/x-shellscript\";\n if (extension === \".py\") return \"text/x-python\";\n return \"text/plain\";\n}\n\nfunction isSupportedLocalWorkspaceTextFile(resourcePath: string): boolean {\n return LOCAL_WORKSPACE_TEXT_EXTENSIONS.has(extensionOf(resourcePath));\n}\n\nexport function normalizeLocalWorkspaceResourcePath(resourcePath: string) {\n const safePath = normalizeRelativePath(\n normalizeSlash(resourcePath).replace(/^\\/+/, \"\"),\n \"resource path\",\n );\n if (LOCAL_WORKSPACE_CONTROL_FILES.has(safePath)) return safePath;\n if (safePath.startsWith(\".agents/skills/\")) {\n const relativeSkillPath = normalizeRelativePath(\n safePath.slice(\".agents/skills/\".length),\n \"resource path\",\n );\n return normalizeSlash(path.posix.join(\"skills\", relativeSkillPath));\n }\n if (safePath.startsWith(\".agent/skills/\")) {\n const relativeSkillPath = normalizeRelativePath(\n safePath.slice(\".agent/skills/\".length),\n \"resource path\",\n );\n return normalizeSlash(path.posix.join(\"skills\", relativeSkillPath));\n }\n if (safePath.startsWith(\"skills/\")) return safePath;\n throw new Error(\n `Local workspace resource \"${resourcePath}\" must be AGENTS.md, agent-native.json, mcp.config.json, .mcp.json, or under skills/.`,\n );\n}\n\nexport function canUseLocalWorkspaceResourcePath(\n resourcePath: string,\n): boolean {\n try {\n normalizeLocalWorkspaceResourcePath(resourcePath);\n return true;\n } catch {\n return false;\n }\n}\n\nfunction localWorkspaceResourceAbsolutePath(\n workspaceRoot: string,\n resourcePath: string,\n options: { preferExisting?: boolean } = {},\n): { resourcePath: string; absolutePath: string } {\n const normalized = normalizeLocalWorkspaceResourcePath(resourcePath);\n const safePath = normalizeRelativePath(\n normalizeSlash(resourcePath).replace(/^\\/+/, \"\"),\n \"resource path\",\n );\n let relativePath = normalized;\n if (\n safePath.startsWith(\".agents/skills/\") ||\n safePath.startsWith(\".agent/skills/\")\n ) {\n relativePath = safePath;\n } else if (normalized.startsWith(\"skills/\")) {\n const skillPath = normalized.slice(\"skills/\".length);\n const candidates = LOCAL_WORKSPACE_SKILL_ROOTS.map((root) =>\n normalizeSlash(path.posix.join(root, skillPath)),\n );\n relativePath = candidates[0]!;\n if (options.preferExisting) {\n relativePath =\n candidates.find((candidate) =>\n fsSync.existsSync(path.resolve(workspaceRoot, candidate)),\n ) ?? relativePath;\n }\n }\n const { absolutePath } = resolveInsideWorkspace(workspaceRoot, relativePath);\n return { resourcePath: normalized, absolutePath };\n}\n\nfunction localWorkspaceResourceDeletePaths(\n workspaceRoot: string,\n resourcePath: string,\n): string[] {\n const normalized = normalizeLocalWorkspaceResourcePath(resourcePath);\n const safePath = normalizeRelativePath(\n normalizeSlash(resourcePath).replace(/^\\/+/, \"\"),\n \"resource path\",\n );\n if (\n safePath.startsWith(\".agents/skills/\") ||\n safePath.startsWith(\".agent/skills/\") ||\n !normalized.startsWith(\"skills/\")\n ) {\n const { absolutePath } = localWorkspaceResourceAbsolutePath(\n workspaceRoot,\n resourcePath,\n );\n return [absolutePath];\n }\n\n const skillPath = normalized.slice(\"skills/\".length);\n return LOCAL_WORKSPACE_SKILL_ROOTS.map((root) => {\n const relativePath = normalizeSlash(path.posix.join(root, skillPath));\n return resolveInsideWorkspace(workspaceRoot, relativePath).absolutePath;\n });\n}\n\nfunction assertNoSymlinkAbsolutePathSync(\n workspaceRoot: string,\n absolutePath: string,\n options: { allowMissingLeaf?: boolean } = {},\n) {\n const relative = path.relative(workspaceRoot, absolutePath);\n const segments = relative.split(path.sep).filter(Boolean);\n let current = workspaceRoot;\n const pathsToCheck = [\n current,\n ...segments.map((segment) => {\n current = path.join(current, segment);\n return current;\n }),\n ];\n\n for (let index = 0; index < pathsToCheck.length; index += 1) {\n const candidate = pathsToCheck[index]!;\n try {\n const stat = fsSync.lstatSync(candidate);\n if (stat.isSymbolicLink()) {\n throw new Error(`Path \"${candidate}\" must not traverse a symlink`);\n }\n if (index < pathsToCheck.length - 1 && !stat.isDirectory()) {\n throw new Error(`Path \"${candidate}\" is not a directory`);\n }\n } catch (error) {\n if (errorCode(error) === \"ENOENT\" && options.allowMissingLeaf) return;\n throw error;\n }\n }\n}\n\nfunction readLocalWorkspaceTextFile(\n workspaceRoot: string,\n absolutePath: string,\n): { content: string; stat: fsSync.Stats } {\n assertNoSymlinkAbsolutePathSync(workspaceRoot, absolutePath);\n const fd = fsSync.openSync(absolutePath, noFollowOpenFlags());\n try {\n const stat = fsSync.fstatSync(fd);\n if (!stat.isFile()) {\n throw new Error(`Path \"${absolutePath}\" is not a file`);\n }\n if (stat.size > LOCAL_WORKSPACE_RESOURCE_MAX_BYTES) {\n throw new Error(\n `Local workspace resource \"${absolutePath}\" is too large to load`,\n );\n }\n return {\n content: fsSync.readFileSync(fd, \"utf8\"),\n stat,\n };\n } finally {\n fsSync.closeSync(fd);\n }\n}\n\nfunction localWorkspaceResourceMeta(\n resourcePath: string,\n absolutePath: string,\n content: string,\n stat: fsSync.Stats,\n): LocalWorkspaceResourceMeta {\n return {\n id: localWorkspaceResourceId(resourcePath),\n path: resourcePath,\n absolutePath,\n mimeType: mimeTypeForLocalWorkspaceResource(resourcePath),\n sizeBytes: Buffer.byteLength(content, \"utf8\"),\n hash: hashContent(content),\n createdAt: stat.birthtime.toISOString(),\n updatedAt: stat.mtime.toISOString(),\n mtimeMs: stat.mtimeMs,\n };\n}\n\nasync function maybeLocalWorkspaceResourceMeta(\n workspaceRoot: string,\n resourcePath: string,\n absolutePath: string,\n): Promise<LocalWorkspaceResourceMeta | null> {\n if (!isSupportedLocalWorkspaceTextFile(resourcePath)) return null;\n try {\n const { content, stat } = readLocalWorkspaceTextFile(\n workspaceRoot,\n absolutePath,\n );\n return localWorkspaceResourceMeta(\n resourcePath,\n absolutePath,\n content,\n stat,\n );\n } catch (error) {\n if (errorCode(error) === \"ENOENT\") return null;\n throw error;\n }\n}\n\nasync function walkLocalWorkspaceSkillRoot(\n workspaceRoot: string,\n skillRoot: string,\n seenPaths: Set<string>,\n): Promise<LocalWorkspaceResourceMeta[]> {\n const absoluteRoot = path.join(workspaceRoot, skillRoot);\n try {\n assertNoSymlinkAbsolutePathSync(workspaceRoot, absoluteRoot);\n } catch (error) {\n if (errorCode(error) === \"ENOENT\") return [];\n throw error;\n }\n\n const files: LocalWorkspaceResourceMeta[] = [];\n async function walk(directory: string): Promise<void> {\n let entries: fsSync.Dirent[];\n try {\n entries = await fs.readdir(directory, { withFileTypes: true });\n } catch (error) {\n if (errorCode(error) === \"ENOENT\") return;\n throw error;\n }\n\n for (const entry of entries) {\n if (entry.name === \".DS_Store\") continue;\n const absolutePath = path.join(directory, entry.name);\n const relativeToSkillRoot = normalizeSlash(\n path.relative(absoluteRoot, absolutePath),\n );\n const resourcePath = normalizeSlash(\n path.posix.join(\"skills\", relativeToSkillRoot),\n );\n if (seenPaths.has(resourcePath)) continue;\n if (entry.isDirectory()) {\n await walk(absolutePath);\n continue;\n }\n if (!entry.isFile()) continue;\n const meta = await maybeLocalWorkspaceResourceMeta(\n workspaceRoot,\n resourcePath,\n absolutePath,\n );\n if (!meta) continue;\n seenPaths.add(resourcePath);\n files.push(meta);\n }\n }\n\n await walk(absoluteRoot);\n return files;\n}\n\nexport async function listLocalWorkspaceResources(\n options: LocalWorkspaceResourceOptions = {},\n): Promise<LocalWorkspaceResourceMeta[]> {\n const workspaceRoot = await resolveLocalWorkspaceRoot(options);\n if (!workspaceRoot) return [];\n\n const seenPaths = new Set<string>();\n const resources: LocalWorkspaceResourceMeta[] = [];\n for (const resourcePath of LOCAL_WORKSPACE_CONTROL_FILES) {\n const { absolutePath } = localWorkspaceResourceAbsolutePath(\n workspaceRoot,\n resourcePath,\n );\n const meta = await maybeLocalWorkspaceResourceMeta(\n workspaceRoot,\n resourcePath,\n absolutePath,\n );\n if (!meta) continue;\n seenPaths.add(resourcePath);\n resources.push(meta);\n }\n\n for (const skillRoot of LOCAL_WORKSPACE_SKILL_ROOTS) {\n resources.push(\n ...(await walkLocalWorkspaceSkillRoot(\n workspaceRoot,\n skillRoot,\n seenPaths,\n )),\n );\n }\n\n return resources.sort((a, b) => a.path.localeCompare(b.path));\n}\n\nexport async function readLocalWorkspaceResource(\n options: LocalWorkspaceResourceOptions & { path: string },\n): Promise<LocalWorkspaceResourceFile | null> {\n const workspaceRoot = await resolveLocalWorkspaceRoot(options);\n if (!workspaceRoot) return null;\n const { resourcePath, absolutePath } = localWorkspaceResourceAbsolutePath(\n workspaceRoot,\n options.path,\n { preferExisting: true },\n );\n if (!isSupportedLocalWorkspaceTextFile(resourcePath)) return null;\n try {\n const { content, stat } = readLocalWorkspaceTextFile(\n workspaceRoot,\n absolutePath,\n );\n return {\n ...localWorkspaceResourceMeta(resourcePath, absolutePath, content, stat),\n content,\n };\n } catch (error) {\n if (errorCode(error) === \"ENOENT\") return null;\n throw error;\n }\n}\n\nexport async function writeLocalWorkspaceResource(\n options: WriteLocalWorkspaceResourceOptions,\n): Promise<LocalWorkspaceResourceMeta> {\n const workspaceRoot = await resolveLocalWorkspaceRoot(options);\n if (!workspaceRoot) {\n throw new Error(\"Local file mode is not enabled\");\n }\n const { resourcePath, absolutePath } = localWorkspaceResourceAbsolutePath(\n workspaceRoot,\n options.path,\n { preferExisting: true },\n );\n if (!isSupportedLocalWorkspaceTextFile(resourcePath)) {\n throw new Error(`Local workspace resource \"${resourcePath}\" is not text`);\n }\n return withWriteLock(absolutePath, async () => {\n const existing = await readLocalWorkspaceResource({\n ...options,\n path: resourcePath,\n });\n if (options.ifNotExists && existing) {\n throw new Error(`File \"${resourcePath}\" already exists`);\n }\n if (\n options.expectedHash &&\n (!existing || existing.hash !== options.expectedHash)\n ) {\n throw new Error(\n `File \"${resourcePath}\" changed on disk. Reload before saving again.`,\n );\n }\n\n assertNoSymlinkAbsolutePathSync(workspaceRoot, absolutePath, {\n allowMissingLeaf: true,\n });\n await fs.mkdir(path.dirname(absolutePath), { recursive: true });\n const tempPath = path.join(\n path.dirname(absolutePath),\n `.${path.basename(absolutePath)}.${process.pid}.${crypto.randomUUID()}.tmp`,\n );\n await fs.writeFile(tempPath, options.content, \"utf8\");\n await fs.rename(tempPath, absolutePath);\n const stat = await fs.stat(absolutePath);\n return localWorkspaceResourceMeta(\n resourcePath,\n absolutePath,\n options.content,\n stat,\n );\n });\n}\n\nexport async function deleteLocalWorkspaceResource(\n options: LocalWorkspaceResourceOptions & { path: string },\n): Promise<boolean> {\n const workspaceRoot = await resolveLocalWorkspaceRoot(options);\n if (!workspaceRoot) {\n throw new Error(\"Local file mode is not enabled\");\n }\n const absolutePaths = localWorkspaceResourceDeletePaths(\n workspaceRoot,\n options.path,\n );\n let deleted = false;\n for (const absolutePath of absolutePaths) {\n try {\n assertNoSymlinkAbsolutePathSync(workspaceRoot, absolutePath);\n await fs.unlink(absolutePath);\n deleted = true;\n } catch (error) {\n if (errorCode(error) === \"ENOENT\") continue;\n throw error;\n }\n }\n return deleted;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"handlers.d.ts","sourceRoot":"","sources":["../../src/resources/handlers.ts"],"names":[],"mappings":"AAOA,OAAO,EAYL,KAAK,YAAY,EAClB,MAAM,YAAY,CAAC;AACpB,OAAO,EAML,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,KAAK,aAAa,EACnB,MAAM,eAAe,CAAC;AA8EvB,UAAU,WAAW;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,UAAU,QAAQ;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,QAAQ,CAAC;IACxB,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,KAAK,GAAG,OAAO,GAAG,cAAc,CAAC;IAC3D,QAAQ,CAAC,EAAE,QAAQ,EAAE,CAAC;IACtB,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,SAAS,CAAC,EAAE,aAAa,CAAC;IAC1B,SAAS,CAAC,EAAE,kBAAkB,CAAC;IAC/B,eAAe,CAAC,EAAE,mBAAmB,CAAC;CACvC;AA2DD,oDAAoD;AACpD,wBAAsB,mBAAmB,CAAC,KAAK,EAAE,GAAG;;GAmCnD;AAED,4DAA4D;AAC5D,wBAAsB,qBAAqB,CAAC,KAAK,EAAE,GAAG;;GA8CrD;AAED,+EAA+E;AAC/E,wBAAsB,iCAAiC,CAAC,KAAK,EAAE,GAAG;;GAYjE;AAwED;;;yEAGyE;AACzE,wBAAsB,iBAAiB,CAAC,KAAK,EAAE,GAAG;;GAoDjD;AAED,wDAAwD;AACxD,wBAAsB,oBAAoB,CAAC,KAAK,EAAE,GAAG;;GAoCpD;AAED,qEAAqE;AACrE,wBAAsB,oBAAoB,CAAC,KAAK,EAAE,GAAG;;GAqDpD;AAED,8DAA8D;AAC9D,wBAAsB,oBAAoB,CAAC,KAAK,EAAE,GAAG;;;;;;GA6BpD;AAED,yEAAyE;AACzE,wBAAsB,oBAAoB,CAAC,KAAK,EAAE,GAAG;;;;;;;;;;;;;;;;;;;;GAkFpD"}
1
+ {"version":3,"file":"handlers.d.ts","sourceRoot":"","sources":["../../src/resources/handlers.ts"],"names":[],"mappings":"AAOA,OAAO,EAcL,KAAK,YAAY,EAClB,MAAM,YAAY,CAAC;AACpB,OAAO,EAML,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,KAAK,aAAa,EACnB,MAAM,eAAe,CAAC;AA8EvB,UAAU,WAAW;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,UAAU,QAAQ;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,QAAQ,CAAC;IACxB,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,KAAK,GAAG,OAAO,GAAG,cAAc,CAAC;IAC3D,QAAQ,CAAC,EAAE,QAAQ,EAAE,CAAC;IACtB,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,SAAS,CAAC,EAAE,aAAa,CAAC;IAC1B,SAAS,CAAC,EAAE,kBAAkB,CAAC;IAC/B,eAAe,CAAC,EAAE,mBAAmB,CAAC;CACvC;AA2DD,oDAAoD;AACpD,wBAAsB,mBAAmB,CAAC,KAAK,EAAE,GAAG;;GAmCnD;AAED,4DAA4D;AAC5D,wBAAsB,qBAAqB,CAAC,KAAK,EAAE,GAAG;;GA8CrD;AAED,+EAA+E;AAC/E,wBAAsB,iCAAiC,CAAC,KAAK,EAAE,GAAG;;GAYjE;AAwED;;;yEAGyE;AACzE,wBAAsB,iBAAiB,CAAC,KAAK,EAAE,GAAG;;GAoDjD;AAED,wDAAwD;AACxD,wBAAsB,oBAAoB,CAAC,KAAK,EAAE,GAAG;;GAoCpD;AAED,qEAAqE;AACrE,wBAAsB,oBAAoB,CAAC,KAAK,EAAE,GAAG;;GAuEpD;AAED,8DAA8D;AAC9D,wBAAsB,oBAAoB,CAAC,KAAK,EAAE,GAAG;;;;;;GAgCpD;AAED,yEAAyE;AACzE,wBAAsB,oBAAoB,CAAC,KAAK,EAAE,GAAG;;;;;;;;;;;;;;;;;;;;GAkFpD"}
@@ -1,5 +1,5 @@
1
1
  import { getQuery, getRouterParam, setResponseHeader, setResponseStatus, readMultipartFormData, } from "h3";
2
- import { resourceGet, resourceGetByPath, resourcePut, resourceDelete, resourceList, resourceListAccessible, resourceMove, resourceEffectiveContext, ensurePersonalDefaults, SHARED_OWNER, WORKSPACE_OWNER, } from "./store.js";
2
+ import { resourceGet, resourceGetByPath, resourcePut, resourceDelete, resourceList, resourceListAccessible, resourceMove, resourceEffectiveContext, ensurePersonalDefaults, canWriteLocalWorkspaceResourcePath, isLocalWorkspaceResourceId, SHARED_OWNER, WORKSPACE_OWNER, } from "./store.js";
3
3
  import { getResourceKind, isRemoteAgentPath, parseCustomAgentProfile, parseRemoteAgentManifest, parseSkillMetadata, } from "./metadata.js";
4
4
  import { getSession } from "../server/auth.js";
5
5
  import { readBody, DEFAULT_UPLOAD_MAX_FILE_BYTES, isAllowedUploadMimeType, } from "../server/h3-helpers.js";
@@ -352,7 +352,8 @@ export async function handleUpdateResource(event) {
352
352
  setResponseStatus(event, 404);
353
353
  return { error: "Resource not found" };
354
354
  }
355
- if (existing.owner === WORKSPACE_OWNER) {
355
+ const isLocalWorkspaceResource = existing.owner === WORKSPACE_OWNER && isLocalWorkspaceResourceId(id);
356
+ if (existing.owner === WORKSPACE_OWNER && !isLocalWorkspaceResource) {
356
357
  setResponseStatus(event, 403);
357
358
  return { error: "Workspace resources are managed from Dispatch" };
358
359
  }
@@ -360,15 +361,27 @@ export async function handleUpdateResource(event) {
360
361
  await assertCanEditShared(event);
361
362
  }
362
363
  const body = await readBody(event);
364
+ const nextPath = body.path ?? existing.path;
365
+ if (isLocalWorkspaceResource &&
366
+ nextPath !== existing.path &&
367
+ !(await canWriteLocalWorkspaceResourcePath(nextPath))) {
368
+ setResponseStatus(event, 400);
369
+ return {
370
+ error: "Local workspace resources can only be moved to AGENTS.md, agent-native.json, mcp.config.json, .mcp.json, or skills/.",
371
+ };
372
+ }
363
373
  // If path changed, move it
364
- if (body.path && body.path !== existing.path) {
374
+ if (!isLocalWorkspaceResource && body.path && body.path !== existing.path) {
365
375
  await resourceMove(id, body.path);
366
376
  }
367
377
  // Update content/mimeType by re-putting
368
378
  const writeOptions = body.metadata !== undefined ? { metadata: body.metadata } : undefined;
369
379
  const resource = writeOptions
370
- ? await resourcePut(existing.owner, body.path ?? existing.path, body.content ?? existing.content, body.mimeType ?? existing.mimeType, writeOptions)
371
- : await resourcePut(existing.owner, body.path ?? existing.path, body.content ?? existing.content, body.mimeType ?? existing.mimeType);
380
+ ? await resourcePut(existing.owner, nextPath, body.content ?? existing.content, body.mimeType ?? existing.mimeType, writeOptions)
381
+ : await resourcePut(existing.owner, nextPath, body.content ?? existing.content, body.mimeType ?? existing.mimeType);
382
+ if (isLocalWorkspaceResource && nextPath !== existing.path) {
383
+ await resourceDelete(id);
384
+ }
372
385
  return resource;
373
386
  }
374
387
  /** DELETE /_agent-native/resources/:id — delete a resource */
@@ -389,7 +402,8 @@ export async function handleDeleteResource(event) {
389
402
  setResponseStatus(event, 404);
390
403
  return { error: "Resource not found" };
391
404
  }
392
- if (existing.owner === WORKSPACE_OWNER) {
405
+ if (existing.owner === WORKSPACE_OWNER &&
406
+ !isLocalWorkspaceResourceId(existing.id)) {
393
407
  setResponseStatus(event, 403);
394
408
  return { error: "Workspace resources are managed from Dispatch" };
395
409
  }
@@ -1 +1 @@
1
- {"version":3,"file":"handlers.js","sourceRoot":"","sources":["../../src/resources/handlers.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n getQuery,\n getRouterParam,\n setResponseHeader,\n setResponseStatus,\n readMultipartFormData,\n} from \"h3\";\nimport {\n resourceGet,\n resourceGetByPath,\n resourcePut,\n resourceDelete,\n resourceList,\n resourceListAccessible,\n resourceMove,\n resourceEffectiveContext,\n ensurePersonalDefaults,\n SHARED_OWNER,\n WORKSPACE_OWNER,\n type ResourceMeta,\n} from \"./store.js\";\nimport {\n getResourceKind,\n isRemoteAgentPath,\n parseCustomAgentProfile,\n parseRemoteAgentManifest,\n parseSkillMetadata,\n type CustomAgentProfile,\n type RemoteAgentManifest,\n type SkillMetadata,\n} from \"./metadata.js\";\nimport { getSession } from \"../server/auth.js\";\nimport {\n readBody,\n DEFAULT_UPLOAD_MAX_FILE_BYTES,\n isAllowedUploadMimeType,\n} from \"../server/h3-helpers.js\";\nimport { uploadFile } from \"../file-upload/index.js\";\nimport { runWithRequestContext } from \"../server/request-context.js\";\nimport { getOrgContext } from \"../org/context.js\";\nimport { createError } from \"h3\";\n\n// ---------------------------------------------------------------------------\n// Owner resolution\n// ---------------------------------------------------------------------------\n\nasync function resolveOwner(event: any, shared?: boolean): Promise<string> {\n if (shared) return SHARED_OWNER;\n const session = await getSession(event);\n if (!session?.email) {\n throw createError({ statusCode: 401, statusMessage: \"Unauthenticated\" });\n }\n return session.email;\n}\n\nfunction canReadOwner(owner: string, email: string): boolean {\n return owner === email || owner === SHARED_OWNER || owner === WORKSPACE_OWNER;\n}\n\nasync function resolveEmail(event: any): Promise<string> {\n const session = await getSession(event);\n if (!session?.email) {\n throw createError({ statusCode: 401, statusMessage: \"Unauthenticated\" });\n }\n return session.email;\n}\n\nasync function resolveOrgId(event: any): Promise<string | null> {\n try {\n const ctx = await getOrgContext(event);\n return ctx.orgId ?? null;\n } catch {\n return null;\n }\n}\n\n/**\n * Reject writes to organization-wide resources unless the user is the\n * organization owner/admin (or the deployment is solo — no org membership).\n * Read access remains open to every org member.\n */\nasync function assertCanEditShared(event: any): Promise<void> {\n const session = await getSession(event);\n if (!session?.email) {\n throw createError({ statusCode: 401, statusMessage: \"Unauthenticated\" });\n }\n const ctx = await getOrgContext(event);\n if (!ctx.orgId) return; // solo / dev mode — no org, treat as owner\n if (ctx.role === \"owner\" || ctx.role === \"admin\") return;\n throw createError({\n statusCode: 403,\n message: \"Only organization admins can edit organization files\",\n });\n}\n\nfunction shouldIncludeAgentScratch(query: Record<string, unknown>): boolean {\n return (\n query.includeAgentScratch === \"true\" ||\n query.includeScratch === \"true\" ||\n query.includeAgentScratch === true ||\n query.includeScratch === true\n );\n}\n\n// ---------------------------------------------------------------------------\n// Tree building\n// ---------------------------------------------------------------------------\n\ninterface JobMetadata {\n schedule?: string;\n scheduleDescription?: string;\n enabled?: boolean;\n lastStatus?: string;\n lastRun?: string;\n nextRun?: string;\n}\n\ninterface TreeNode {\n name: string;\n path: string;\n type: \"file\" | \"folder\";\n kind?: \"file\" | \"skill\" | \"job\" | \"agent\" | \"remote-agent\";\n children?: TreeNode[];\n resource?: ResourceMeta;\n jobMeta?: JobMetadata;\n skillMeta?: SkillMetadata;\n agentMeta?: CustomAgentProfile;\n remoteAgentMeta?: RemoteAgentManifest;\n}\n\nfunction buildTree(resources: ResourceMeta[]): TreeNode[] {\n const root: TreeNode[] = [];\n\n for (const res of resources) {\n const parts = res.path.split(\"/\").filter(Boolean);\n let current = root;\n\n for (let i = 0; i < parts.length; i++) {\n const part = parts[i];\n const isLast = i === parts.length - 1;\n const currentPath = \"/\" + parts.slice(0, i + 1).join(\"/\");\n\n if (isLast) {\n current.push({\n name: part,\n path: currentPath,\n type: \"file\",\n kind: getResourceKind(res.path),\n resource: res,\n });\n } else {\n let folder = current.find(\n (n) => n.name === part && n.type === \"folder\",\n );\n if (!folder) {\n folder = {\n name: part,\n path: currentPath,\n type: \"folder\",\n children: [],\n };\n current.push(folder);\n }\n current = folder.children!;\n }\n }\n }\n\n sortTree(root);\n return root;\n}\n\n/** Sort tree nodes: folders first, then files, alphabetically within each group */\nfunction sortTree(nodes: TreeNode[]): void {\n nodes.sort((a, b) => {\n if (a.type !== b.type) return a.type === \"folder\" ? -1 : 1;\n return a.name.localeCompare(b.name, undefined, { sensitivity: \"base\" });\n });\n for (const node of nodes) {\n if (node.children) sortTree(node.children);\n }\n}\n\n// ---------------------------------------------------------------------------\n// Handlers\n// ---------------------------------------------------------------------------\n\n/** GET /_agent-native/resources — list resources */\nexport async function handleListResources(event: any) {\n const query = getQuery(event);\n const prefix = (query.prefix as string) || undefined;\n const scope = (query.scope as string) || \"all\";\n const email = await resolveEmail(event);\n const orgId = await resolveOrgId(event);\n const includeAgentScratch = shouldIncludeAgentScratch(query);\n const localListOptions = includeAgentScratch\n ? { includeAgentScratch: true }\n : undefined;\n const scopedListOptions = includeAgentScratch\n ? { includeAgentScratch: true, userEmail: email, orgId }\n : { userEmail: email, orgId };\n\n // Seed personal AGENTS.md + LEARNINGS.md on first access\n await ensurePersonalDefaults(email);\n\n let resources: ResourceMeta[];\n\n if (scope === \"personal\") {\n resources = localListOptions\n ? await resourceList(email, prefix, localListOptions)\n : await resourceList(email, prefix);\n } else if (scope === \"workspace\") {\n resources = await resourceList(WORKSPACE_OWNER, prefix, scopedListOptions);\n } else if (scope === \"shared\") {\n resources = localListOptions\n ? await resourceList(SHARED_OWNER, prefix, localListOptions)\n : await resourceList(SHARED_OWNER, prefix);\n } else {\n // \"all\" — personal + organization/shared + inherited workspace\n resources = await resourceListAccessible(email, prefix, scopedListOptions);\n }\n\n return { resources };\n}\n\n/** GET /_agent-native/resources/tree — build nested tree */\nexport async function handleGetResourceTree(event: any) {\n const query = getQuery(event);\n const scope = (query.scope as string) || \"all\";\n const email = await resolveEmail(event);\n const orgId = await resolveOrgId(event);\n const includeAgentScratch = shouldIncludeAgentScratch(query);\n const localListOptions = includeAgentScratch\n ? { includeAgentScratch: true }\n : undefined;\n const scopedListOptions = includeAgentScratch\n ? { includeAgentScratch: true, userEmail: email, orgId }\n : { userEmail: email, orgId };\n\n // Seed personal AGENTS.md + LEARNINGS.md on first access\n await ensurePersonalDefaults(email);\n\n let resources: ResourceMeta[];\n\n if (scope === \"personal\") {\n resources = localListOptions\n ? await resourceList(email, undefined, localListOptions)\n : await resourceList(email);\n } else if (scope === \"workspace\") {\n resources = await resourceList(\n WORKSPACE_OWNER,\n undefined,\n scopedListOptions,\n );\n } else if (scope === \"shared\") {\n resources = localListOptions\n ? await resourceList(SHARED_OWNER, undefined, localListOptions)\n : await resourceList(SHARED_OWNER);\n } else {\n resources = await resourceListAccessible(\n email,\n undefined,\n scopedListOptions,\n );\n }\n\n const tree = buildTree(resources);\n\n // Enrich typed resources with parsed metadata for richer UI\n await enrichTreeNodes(tree);\n\n return { tree };\n}\n\n/** GET /_agent-native/resources/effective?path=... — show inheritance stack */\nexport async function handleGetEffectiveResourceContext(event: any) {\n const query = getQuery(event);\n const path = query.path;\n if (typeof path !== \"string\" || path.trim().length === 0) {\n setResponseStatus(event, 400);\n return { error: \"path is required\" };\n }\n\n const email = await resolveEmail(event);\n const orgId = await resolveOrgId(event);\n await ensurePersonalDefaults(email);\n return resourceEffectiveContext(email, path, { userEmail: email, orgId });\n}\n\n/**\n * Walk the tree and add typed metadata for jobs, skills, and agents.\n */\nasync function enrichTreeNodes(nodes: TreeNode[]): Promise<void> {\n let parseFn: typeof import(\"../jobs/scheduler.js\").parseJobFrontmatter;\n let describeFn: typeof import(\"../jobs/cron.js\").describeCron;\n try {\n const scheduler = await import(\"../jobs/scheduler.js\");\n const cron = await import(\"../jobs/cron.js\");\n parseFn = scheduler.parseJobFrontmatter;\n describeFn = cron.describeCron;\n } catch {\n return; // Jobs module not available\n }\n\n for (const node of nodes) {\n if (node.type === \"folder\" && node.children) {\n await enrichTreeNodes(node.children);\n }\n if (node.type === \"file\" && node.resource) {\n try {\n const full = await resourceGet(node.resource.id);\n if (!full?.content) continue;\n\n if (\n node.resource.path.startsWith(\"jobs/\") &&\n node.resource.path.endsWith(\".md\")\n ) {\n const { meta } = parseFn(full.content);\n node.jobMeta = {\n schedule: meta.schedule,\n scheduleDescription: meta.schedule\n ? describeFn(meta.schedule)\n : undefined,\n enabled: meta.enabled,\n lastStatus: meta.lastStatus,\n lastRun: meta.lastRun,\n nextRun: meta.nextRun,\n };\n }\n\n if (\n node.resource.path.startsWith(\"skills/\") &&\n node.resource.path.endsWith(\".md\")\n ) {\n node.skillMeta =\n parseSkillMetadata(full.content, node.resource.path) ?? undefined;\n }\n\n if (\n node.resource.path.startsWith(\"agents/\") &&\n node.resource.path.endsWith(\".md\")\n ) {\n node.agentMeta =\n parseCustomAgentProfile(full.content, node.resource.path) ??\n undefined;\n }\n\n if (isRemoteAgentPath(node.resource.path)) {\n node.remoteAgentMeta =\n parseRemoteAgentManifest(full.content, node.resource.path) ??\n undefined;\n }\n } catch {\n // Skip individual file errors\n }\n }\n }\n}\n\n/** GET /_agent-native/resources/:id — get single resource with content.\n * If the request comes from an <img>/<video>/etc tag (Accept includes the\n * resource's mime type, or query param `?raw` is set), return the raw binary\n * with the correct Content-Type so the browser can render it inline. */\nexport async function handleGetResource(event: any) {\n const id = getRouterParam(event, \"id\") || event.context.params?.id;\n if (!id) {\n setResponseStatus(event, 400);\n return { error: \"Resource ID is required\" };\n }\n\n const email = await resolveEmail(event);\n const orgId = await resolveOrgId(event);\n const resource = await resourceGet(id, { userEmail: email, orgId });\n if (!resource) {\n setResponseStatus(event, 404);\n return { error: \"Resource not found\" };\n }\n\n if (!canReadOwner(resource.owner, email)) {\n setResponseStatus(event, 404);\n return { error: \"Resource not found\" };\n }\n\n // Serve raw binary when ?raw query param is set (used by <img> tags etc.)\n const query = getQuery(event);\n const wantsRaw = query.raw !== undefined;\n\n if (wantsRaw && resource.content) {\n const isText =\n resource.mimeType.startsWith(\"text/\") ||\n resource.mimeType === \"application/json\";\n const buf = isText\n ? Buffer.from(resource.content, \"utf-8\")\n : Buffer.from(resource.content, \"base64\");\n\n setResponseHeader(event, \"Content-Type\", resource.mimeType);\n setResponseHeader(event, \"Content-Length\", String(buf.length));\n return new Response(buf);\n }\n\n // For binary resources (images, audio, video), omit the content field from\n // the JSON response — it can be megabytes of base64. The client fetches\n // the actual bytes via ?raw when it needs to display them.\n const isBinary =\n resource.mimeType.startsWith(\"image/\") ||\n resource.mimeType.startsWith(\"audio/\") ||\n resource.mimeType.startsWith(\"video/\") ||\n resource.mimeType === \"application/octet-stream\";\n\n if (isBinary) {\n const { content: _content, ...meta } = resource;\n return { ...meta, content: \"\" };\n }\n\n return resource;\n}\n\n/** POST /_agent-native/resources — create a resource */\nexport async function handleCreateResource(event: any) {\n const body = await readBody(event);\n\n if (!body?.path || typeof body.path !== \"string\") {\n setResponseStatus(event, 400);\n return { error: \"path is required\" };\n }\n\n if (body.shared) {\n await assertCanEditShared(event);\n }\n\n const owner = await resolveOwner(event, body.shared);\n\n // If ifNotExists is set, skip if the resource already exists\n if (body.ifNotExists) {\n const existing = await resourceGetByPath(owner, body.path);\n if (existing) {\n return existing;\n }\n }\n\n const writeOptions =\n body.metadata !== undefined ? { metadata: body.metadata } : undefined;\n const resource = writeOptions\n ? await resourcePut(\n owner,\n body.path,\n body.content ?? \"\",\n body.mimeType,\n writeOptions,\n )\n : await resourcePut(owner, body.path, body.content ?? \"\", body.mimeType);\n\n setResponseStatus(event, 201);\n return resource;\n}\n\n/** PUT /_agent-native/resources/:id — update an existing resource */\nexport async function handleUpdateResource(event: any) {\n const id = getRouterParam(event, \"id\") || event.context.params?.id;\n if (!id) {\n setResponseStatus(event, 400);\n return { error: \"Resource ID is required\" };\n }\n\n const existing = await resourceGet(id);\n if (!existing) {\n setResponseStatus(event, 404);\n return { error: \"Resource not found\" };\n }\n\n // Ownership check: only the owner (or shared resource editors) can update\n const email = await resolveEmail(event);\n if (!canReadOwner(existing.owner, email)) {\n setResponseStatus(event, 404);\n return { error: \"Resource not found\" };\n }\n if (existing.owner === WORKSPACE_OWNER) {\n setResponseStatus(event, 403);\n return { error: \"Workspace resources are managed from Dispatch\" };\n }\n if (existing.owner === SHARED_OWNER) {\n await assertCanEditShared(event);\n }\n\n const body = await readBody(event);\n\n // If path changed, move it\n if (body.path && body.path !== existing.path) {\n await resourceMove(id, body.path);\n }\n\n // Update content/mimeType by re-putting\n const writeOptions =\n body.metadata !== undefined ? { metadata: body.metadata } : undefined;\n const resource = writeOptions\n ? await resourcePut(\n existing.owner,\n body.path ?? existing.path,\n body.content ?? existing.content,\n body.mimeType ?? existing.mimeType,\n writeOptions,\n )\n : await resourcePut(\n existing.owner,\n body.path ?? existing.path,\n body.content ?? existing.content,\n body.mimeType ?? existing.mimeType,\n );\n\n return resource;\n}\n\n/** DELETE /_agent-native/resources/:id — delete a resource */\nexport async function handleDeleteResource(event: any) {\n const id = getRouterParam(event, \"id\") || event.context.params?.id;\n if (!id) {\n setResponseStatus(event, 400);\n return { error: \"Resource ID is required\" };\n }\n\n const existing = await resourceGet(id);\n if (!existing) {\n setResponseStatus(event, 404);\n return { error: \"Resource not found\" };\n }\n\n // Ownership check: only the owner (or shared resource editors) can delete\n const email = await resolveEmail(event);\n if (!canReadOwner(existing.owner, email)) {\n setResponseStatus(event, 404);\n return { error: \"Resource not found\" };\n }\n if (existing.owner === WORKSPACE_OWNER) {\n setResponseStatus(event, 403);\n return { error: \"Workspace resources are managed from Dispatch\" };\n }\n if (existing.owner === SHARED_OWNER) {\n await assertCanEditShared(event);\n }\n\n await resourceDelete(id);\n return { ok: true };\n}\n\n/** POST /_agent-native/resources/upload — upload a file as a resource */\nexport async function handleUploadResource(event: any) {\n const parts = await readMultipartFormData(event);\n\n if (!parts || parts.length === 0) {\n setResponseStatus(event, 400);\n return { error: \"No file uploaded\" };\n }\n\n const filePart = parts.find((p) => p.name === \"file\");\n const pathPart = parts.find((p) => p.name === \"path\");\n const sharedPart = parts.find((p) => p.name === \"shared\");\n\n if (!filePart || !filePart.data) {\n setResponseStatus(event, 400);\n return { error: \"No file data found\" };\n }\n\n // Reject oversized uploads before touching any storage.\n if (filePart.data.length > DEFAULT_UPLOAD_MAX_FILE_BYTES) {\n setResponseStatus(event, 413);\n return {\n error: `File too large (max ${Math.round(DEFAULT_UPLOAD_MAX_FILE_BYTES / 1024 / 1024)} MB)`,\n };\n }\n\n const fileName = filePart.filename || \"upload\";\n const path = pathPart?.data?.toString() || `/${fileName}`;\n const shared = sharedPart?.data?.toString() === \"true\";\n const mimeType = filePart.type || \"application/octet-stream\";\n\n // Reject executable / script MIME types.\n if (filePart.type && !isAllowedUploadMimeType(filePart.type)) {\n setResponseStatus(event, 415);\n return { error: `Unsupported file type: ${filePart.type}` };\n }\n if (shared) {\n await assertCanEditShared(event);\n }\n const owner = await resolveOwner(event, shared);\n\n // Prefer a registered file upload provider (e.g. Builder.io) for binary\n // assets so we get a real CDN URL instead of a base64 blob in SQL.\n // Text resources still live in SQL — they're edited inline and benefit\n // from the resource store's metadata/search features.\n const isText =\n mimeType.startsWith(\"text/\") || mimeType === \"application/json\";\n\n if (!isText) {\n // Use the actual session user email for credential resolution — not `owner`,\n // which is \"__shared__\" for org-wide resources and would break the per-user\n // DB credential lookup (resolveBuilderCredential refuses env fallback for any\n // non-null non-local email, including the sentinel value).\n const credentialEmail =\n owner !== SHARED_OWNER\n ? owner\n : (await getSession(event).catch(() => null))?.email;\n const doUpload = () =>\n uploadFile({\n data: filePart.data,\n filename: fileName,\n mimeType,\n ownerEmail: owner,\n });\n const uploaded = credentialEmail\n ? await runWithRequestContext({ userEmail: credentialEmail }, doUpload)\n : await doUpload();\n if (uploaded) {\n const resource = await resourcePut(owner, path, uploaded.url, mimeType);\n setResponseStatus(event, 201);\n return { ...resource, url: uploaded.url, provider: uploaded.provider };\n }\n }\n\n // Fallback: store contents in SQL (base64 for binary, text as-is).\n const content = isText\n ? Buffer.from(filePart.data).toString(\"utf-8\")\n : Buffer.from(filePart.data).toString(\"base64\");\n\n const resource = await resourcePut(owner, path, content, mimeType);\n\n setResponseStatus(event, 201);\n return resource;\n}\n"]}
1
+ {"version":3,"file":"handlers.js","sourceRoot":"","sources":["../../src/resources/handlers.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n getQuery,\n getRouterParam,\n setResponseHeader,\n setResponseStatus,\n readMultipartFormData,\n} from \"h3\";\nimport {\n resourceGet,\n resourceGetByPath,\n resourcePut,\n resourceDelete,\n resourceList,\n resourceListAccessible,\n resourceMove,\n resourceEffectiveContext,\n ensurePersonalDefaults,\n canWriteLocalWorkspaceResourcePath,\n isLocalWorkspaceResourceId,\n SHARED_OWNER,\n WORKSPACE_OWNER,\n type ResourceMeta,\n} from \"./store.js\";\nimport {\n getResourceKind,\n isRemoteAgentPath,\n parseCustomAgentProfile,\n parseRemoteAgentManifest,\n parseSkillMetadata,\n type CustomAgentProfile,\n type RemoteAgentManifest,\n type SkillMetadata,\n} from \"./metadata.js\";\nimport { getSession } from \"../server/auth.js\";\nimport {\n readBody,\n DEFAULT_UPLOAD_MAX_FILE_BYTES,\n isAllowedUploadMimeType,\n} from \"../server/h3-helpers.js\";\nimport { uploadFile } from \"../file-upload/index.js\";\nimport { runWithRequestContext } from \"../server/request-context.js\";\nimport { getOrgContext } from \"../org/context.js\";\nimport { createError } from \"h3\";\n\n// ---------------------------------------------------------------------------\n// Owner resolution\n// ---------------------------------------------------------------------------\n\nasync function resolveOwner(event: any, shared?: boolean): Promise<string> {\n if (shared) return SHARED_OWNER;\n const session = await getSession(event);\n if (!session?.email) {\n throw createError({ statusCode: 401, statusMessage: \"Unauthenticated\" });\n }\n return session.email;\n}\n\nfunction canReadOwner(owner: string, email: string): boolean {\n return owner === email || owner === SHARED_OWNER || owner === WORKSPACE_OWNER;\n}\n\nasync function resolveEmail(event: any): Promise<string> {\n const session = await getSession(event);\n if (!session?.email) {\n throw createError({ statusCode: 401, statusMessage: \"Unauthenticated\" });\n }\n return session.email;\n}\n\nasync function resolveOrgId(event: any): Promise<string | null> {\n try {\n const ctx = await getOrgContext(event);\n return ctx.orgId ?? null;\n } catch {\n return null;\n }\n}\n\n/**\n * Reject writes to organization-wide resources unless the user is the\n * organization owner/admin (or the deployment is solo — no org membership).\n * Read access remains open to every org member.\n */\nasync function assertCanEditShared(event: any): Promise<void> {\n const session = await getSession(event);\n if (!session?.email) {\n throw createError({ statusCode: 401, statusMessage: \"Unauthenticated\" });\n }\n const ctx = await getOrgContext(event);\n if (!ctx.orgId) return; // solo / dev mode — no org, treat as owner\n if (ctx.role === \"owner\" || ctx.role === \"admin\") return;\n throw createError({\n statusCode: 403,\n message: \"Only organization admins can edit organization files\",\n });\n}\n\nfunction shouldIncludeAgentScratch(query: Record<string, unknown>): boolean {\n return (\n query.includeAgentScratch === \"true\" ||\n query.includeScratch === \"true\" ||\n query.includeAgentScratch === true ||\n query.includeScratch === true\n );\n}\n\n// ---------------------------------------------------------------------------\n// Tree building\n// ---------------------------------------------------------------------------\n\ninterface JobMetadata {\n schedule?: string;\n scheduleDescription?: string;\n enabled?: boolean;\n lastStatus?: string;\n lastRun?: string;\n nextRun?: string;\n}\n\ninterface TreeNode {\n name: string;\n path: string;\n type: \"file\" | \"folder\";\n kind?: \"file\" | \"skill\" | \"job\" | \"agent\" | \"remote-agent\";\n children?: TreeNode[];\n resource?: ResourceMeta;\n jobMeta?: JobMetadata;\n skillMeta?: SkillMetadata;\n agentMeta?: CustomAgentProfile;\n remoteAgentMeta?: RemoteAgentManifest;\n}\n\nfunction buildTree(resources: ResourceMeta[]): TreeNode[] {\n const root: TreeNode[] = [];\n\n for (const res of resources) {\n const parts = res.path.split(\"/\").filter(Boolean);\n let current = root;\n\n for (let i = 0; i < parts.length; i++) {\n const part = parts[i];\n const isLast = i === parts.length - 1;\n const currentPath = \"/\" + parts.slice(0, i + 1).join(\"/\");\n\n if (isLast) {\n current.push({\n name: part,\n path: currentPath,\n type: \"file\",\n kind: getResourceKind(res.path),\n resource: res,\n });\n } else {\n let folder = current.find(\n (n) => n.name === part && n.type === \"folder\",\n );\n if (!folder) {\n folder = {\n name: part,\n path: currentPath,\n type: \"folder\",\n children: [],\n };\n current.push(folder);\n }\n current = folder.children!;\n }\n }\n }\n\n sortTree(root);\n return root;\n}\n\n/** Sort tree nodes: folders first, then files, alphabetically within each group */\nfunction sortTree(nodes: TreeNode[]): void {\n nodes.sort((a, b) => {\n if (a.type !== b.type) return a.type === \"folder\" ? -1 : 1;\n return a.name.localeCompare(b.name, undefined, { sensitivity: \"base\" });\n });\n for (const node of nodes) {\n if (node.children) sortTree(node.children);\n }\n}\n\n// ---------------------------------------------------------------------------\n// Handlers\n// ---------------------------------------------------------------------------\n\n/** GET /_agent-native/resources — list resources */\nexport async function handleListResources(event: any) {\n const query = getQuery(event);\n const prefix = (query.prefix as string) || undefined;\n const scope = (query.scope as string) || \"all\";\n const email = await resolveEmail(event);\n const orgId = await resolveOrgId(event);\n const includeAgentScratch = shouldIncludeAgentScratch(query);\n const localListOptions = includeAgentScratch\n ? { includeAgentScratch: true }\n : undefined;\n const scopedListOptions = includeAgentScratch\n ? { includeAgentScratch: true, userEmail: email, orgId }\n : { userEmail: email, orgId };\n\n // Seed personal AGENTS.md + LEARNINGS.md on first access\n await ensurePersonalDefaults(email);\n\n let resources: ResourceMeta[];\n\n if (scope === \"personal\") {\n resources = localListOptions\n ? await resourceList(email, prefix, localListOptions)\n : await resourceList(email, prefix);\n } else if (scope === \"workspace\") {\n resources = await resourceList(WORKSPACE_OWNER, prefix, scopedListOptions);\n } else if (scope === \"shared\") {\n resources = localListOptions\n ? await resourceList(SHARED_OWNER, prefix, localListOptions)\n : await resourceList(SHARED_OWNER, prefix);\n } else {\n // \"all\" — personal + organization/shared + inherited workspace\n resources = await resourceListAccessible(email, prefix, scopedListOptions);\n }\n\n return { resources };\n}\n\n/** GET /_agent-native/resources/tree — build nested tree */\nexport async function handleGetResourceTree(event: any) {\n const query = getQuery(event);\n const scope = (query.scope as string) || \"all\";\n const email = await resolveEmail(event);\n const orgId = await resolveOrgId(event);\n const includeAgentScratch = shouldIncludeAgentScratch(query);\n const localListOptions = includeAgentScratch\n ? { includeAgentScratch: true }\n : undefined;\n const scopedListOptions = includeAgentScratch\n ? { includeAgentScratch: true, userEmail: email, orgId }\n : { userEmail: email, orgId };\n\n // Seed personal AGENTS.md + LEARNINGS.md on first access\n await ensurePersonalDefaults(email);\n\n let resources: ResourceMeta[];\n\n if (scope === \"personal\") {\n resources = localListOptions\n ? await resourceList(email, undefined, localListOptions)\n : await resourceList(email);\n } else if (scope === \"workspace\") {\n resources = await resourceList(\n WORKSPACE_OWNER,\n undefined,\n scopedListOptions,\n );\n } else if (scope === \"shared\") {\n resources = localListOptions\n ? await resourceList(SHARED_OWNER, undefined, localListOptions)\n : await resourceList(SHARED_OWNER);\n } else {\n resources = await resourceListAccessible(\n email,\n undefined,\n scopedListOptions,\n );\n }\n\n const tree = buildTree(resources);\n\n // Enrich typed resources with parsed metadata for richer UI\n await enrichTreeNodes(tree);\n\n return { tree };\n}\n\n/** GET /_agent-native/resources/effective?path=... — show inheritance stack */\nexport async function handleGetEffectiveResourceContext(event: any) {\n const query = getQuery(event);\n const path = query.path;\n if (typeof path !== \"string\" || path.trim().length === 0) {\n setResponseStatus(event, 400);\n return { error: \"path is required\" };\n }\n\n const email = await resolveEmail(event);\n const orgId = await resolveOrgId(event);\n await ensurePersonalDefaults(email);\n return resourceEffectiveContext(email, path, { userEmail: email, orgId });\n}\n\n/**\n * Walk the tree and add typed metadata for jobs, skills, and agents.\n */\nasync function enrichTreeNodes(nodes: TreeNode[]): Promise<void> {\n let parseFn: typeof import(\"../jobs/scheduler.js\").parseJobFrontmatter;\n let describeFn: typeof import(\"../jobs/cron.js\").describeCron;\n try {\n const scheduler = await import(\"../jobs/scheduler.js\");\n const cron = await import(\"../jobs/cron.js\");\n parseFn = scheduler.parseJobFrontmatter;\n describeFn = cron.describeCron;\n } catch {\n return; // Jobs module not available\n }\n\n for (const node of nodes) {\n if (node.type === \"folder\" && node.children) {\n await enrichTreeNodes(node.children);\n }\n if (node.type === \"file\" && node.resource) {\n try {\n const full = await resourceGet(node.resource.id);\n if (!full?.content) continue;\n\n if (\n node.resource.path.startsWith(\"jobs/\") &&\n node.resource.path.endsWith(\".md\")\n ) {\n const { meta } = parseFn(full.content);\n node.jobMeta = {\n schedule: meta.schedule,\n scheduleDescription: meta.schedule\n ? describeFn(meta.schedule)\n : undefined,\n enabled: meta.enabled,\n lastStatus: meta.lastStatus,\n lastRun: meta.lastRun,\n nextRun: meta.nextRun,\n };\n }\n\n if (\n node.resource.path.startsWith(\"skills/\") &&\n node.resource.path.endsWith(\".md\")\n ) {\n node.skillMeta =\n parseSkillMetadata(full.content, node.resource.path) ?? undefined;\n }\n\n if (\n node.resource.path.startsWith(\"agents/\") &&\n node.resource.path.endsWith(\".md\")\n ) {\n node.agentMeta =\n parseCustomAgentProfile(full.content, node.resource.path) ??\n undefined;\n }\n\n if (isRemoteAgentPath(node.resource.path)) {\n node.remoteAgentMeta =\n parseRemoteAgentManifest(full.content, node.resource.path) ??\n undefined;\n }\n } catch {\n // Skip individual file errors\n }\n }\n }\n}\n\n/** GET /_agent-native/resources/:id — get single resource with content.\n * If the request comes from an <img>/<video>/etc tag (Accept includes the\n * resource's mime type, or query param `?raw` is set), return the raw binary\n * with the correct Content-Type so the browser can render it inline. */\nexport async function handleGetResource(event: any) {\n const id = getRouterParam(event, \"id\") || event.context.params?.id;\n if (!id) {\n setResponseStatus(event, 400);\n return { error: \"Resource ID is required\" };\n }\n\n const email = await resolveEmail(event);\n const orgId = await resolveOrgId(event);\n const resource = await resourceGet(id, { userEmail: email, orgId });\n if (!resource) {\n setResponseStatus(event, 404);\n return { error: \"Resource not found\" };\n }\n\n if (!canReadOwner(resource.owner, email)) {\n setResponseStatus(event, 404);\n return { error: \"Resource not found\" };\n }\n\n // Serve raw binary when ?raw query param is set (used by <img> tags etc.)\n const query = getQuery(event);\n const wantsRaw = query.raw !== undefined;\n\n if (wantsRaw && resource.content) {\n const isText =\n resource.mimeType.startsWith(\"text/\") ||\n resource.mimeType === \"application/json\";\n const buf = isText\n ? Buffer.from(resource.content, \"utf-8\")\n : Buffer.from(resource.content, \"base64\");\n\n setResponseHeader(event, \"Content-Type\", resource.mimeType);\n setResponseHeader(event, \"Content-Length\", String(buf.length));\n return new Response(buf);\n }\n\n // For binary resources (images, audio, video), omit the content field from\n // the JSON response — it can be megabytes of base64. The client fetches\n // the actual bytes via ?raw when it needs to display them.\n const isBinary =\n resource.mimeType.startsWith(\"image/\") ||\n resource.mimeType.startsWith(\"audio/\") ||\n resource.mimeType.startsWith(\"video/\") ||\n resource.mimeType === \"application/octet-stream\";\n\n if (isBinary) {\n const { content: _content, ...meta } = resource;\n return { ...meta, content: \"\" };\n }\n\n return resource;\n}\n\n/** POST /_agent-native/resources — create a resource */\nexport async function handleCreateResource(event: any) {\n const body = await readBody(event);\n\n if (!body?.path || typeof body.path !== \"string\") {\n setResponseStatus(event, 400);\n return { error: \"path is required\" };\n }\n\n if (body.shared) {\n await assertCanEditShared(event);\n }\n\n const owner = await resolveOwner(event, body.shared);\n\n // If ifNotExists is set, skip if the resource already exists\n if (body.ifNotExists) {\n const existing = await resourceGetByPath(owner, body.path);\n if (existing) {\n return existing;\n }\n }\n\n const writeOptions =\n body.metadata !== undefined ? { metadata: body.metadata } : undefined;\n const resource = writeOptions\n ? await resourcePut(\n owner,\n body.path,\n body.content ?? \"\",\n body.mimeType,\n writeOptions,\n )\n : await resourcePut(owner, body.path, body.content ?? \"\", body.mimeType);\n\n setResponseStatus(event, 201);\n return resource;\n}\n\n/** PUT /_agent-native/resources/:id — update an existing resource */\nexport async function handleUpdateResource(event: any) {\n const id = getRouterParam(event, \"id\") || event.context.params?.id;\n if (!id) {\n setResponseStatus(event, 400);\n return { error: \"Resource ID is required\" };\n }\n\n const existing = await resourceGet(id);\n if (!existing) {\n setResponseStatus(event, 404);\n return { error: \"Resource not found\" };\n }\n\n // Ownership check: only the owner (or shared resource editors) can update\n const email = await resolveEmail(event);\n if (!canReadOwner(existing.owner, email)) {\n setResponseStatus(event, 404);\n return { error: \"Resource not found\" };\n }\n const isLocalWorkspaceResource =\n existing.owner === WORKSPACE_OWNER && isLocalWorkspaceResourceId(id);\n if (existing.owner === WORKSPACE_OWNER && !isLocalWorkspaceResource) {\n setResponseStatus(event, 403);\n return { error: \"Workspace resources are managed from Dispatch\" };\n }\n if (existing.owner === SHARED_OWNER) {\n await assertCanEditShared(event);\n }\n\n const body = await readBody(event);\n const nextPath = body.path ?? existing.path;\n\n if (\n isLocalWorkspaceResource &&\n nextPath !== existing.path &&\n !(await canWriteLocalWorkspaceResourcePath(nextPath))\n ) {\n setResponseStatus(event, 400);\n return {\n error:\n \"Local workspace resources can only be moved to AGENTS.md, agent-native.json, mcp.config.json, .mcp.json, or skills/.\",\n };\n }\n\n // If path changed, move it\n if (!isLocalWorkspaceResource && body.path && body.path !== existing.path) {\n await resourceMove(id, body.path);\n }\n\n // Update content/mimeType by re-putting\n const writeOptions =\n body.metadata !== undefined ? { metadata: body.metadata } : undefined;\n const resource = writeOptions\n ? await resourcePut(\n existing.owner,\n nextPath,\n body.content ?? existing.content,\n body.mimeType ?? existing.mimeType,\n writeOptions,\n )\n : await resourcePut(\n existing.owner,\n nextPath,\n body.content ?? existing.content,\n body.mimeType ?? existing.mimeType,\n );\n if (isLocalWorkspaceResource && nextPath !== existing.path) {\n await resourceDelete(id);\n }\n\n return resource;\n}\n\n/** DELETE /_agent-native/resources/:id — delete a resource */\nexport async function handleDeleteResource(event: any) {\n const id = getRouterParam(event, \"id\") || event.context.params?.id;\n if (!id) {\n setResponseStatus(event, 400);\n return { error: \"Resource ID is required\" };\n }\n\n const existing = await resourceGet(id);\n if (!existing) {\n setResponseStatus(event, 404);\n return { error: \"Resource not found\" };\n }\n\n // Ownership check: only the owner (or shared resource editors) can delete\n const email = await resolveEmail(event);\n if (!canReadOwner(existing.owner, email)) {\n setResponseStatus(event, 404);\n return { error: \"Resource not found\" };\n }\n if (\n existing.owner === WORKSPACE_OWNER &&\n !isLocalWorkspaceResourceId(existing.id)\n ) {\n setResponseStatus(event, 403);\n return { error: \"Workspace resources are managed from Dispatch\" };\n }\n if (existing.owner === SHARED_OWNER) {\n await assertCanEditShared(event);\n }\n\n await resourceDelete(id);\n return { ok: true };\n}\n\n/** POST /_agent-native/resources/upload — upload a file as a resource */\nexport async function handleUploadResource(event: any) {\n const parts = await readMultipartFormData(event);\n\n if (!parts || parts.length === 0) {\n setResponseStatus(event, 400);\n return { error: \"No file uploaded\" };\n }\n\n const filePart = parts.find((p) => p.name === \"file\");\n const pathPart = parts.find((p) => p.name === \"path\");\n const sharedPart = parts.find((p) => p.name === \"shared\");\n\n if (!filePart || !filePart.data) {\n setResponseStatus(event, 400);\n return { error: \"No file data found\" };\n }\n\n // Reject oversized uploads before touching any storage.\n if (filePart.data.length > DEFAULT_UPLOAD_MAX_FILE_BYTES) {\n setResponseStatus(event, 413);\n return {\n error: `File too large (max ${Math.round(DEFAULT_UPLOAD_MAX_FILE_BYTES / 1024 / 1024)} MB)`,\n };\n }\n\n const fileName = filePart.filename || \"upload\";\n const path = pathPart?.data?.toString() || `/${fileName}`;\n const shared = sharedPart?.data?.toString() === \"true\";\n const mimeType = filePart.type || \"application/octet-stream\";\n\n // Reject executable / script MIME types.\n if (filePart.type && !isAllowedUploadMimeType(filePart.type)) {\n setResponseStatus(event, 415);\n return { error: `Unsupported file type: ${filePart.type}` };\n }\n if (shared) {\n await assertCanEditShared(event);\n }\n const owner = await resolveOwner(event, shared);\n\n // Prefer a registered file upload provider (e.g. Builder.io) for binary\n // assets so we get a real CDN URL instead of a base64 blob in SQL.\n // Text resources still live in SQL — they're edited inline and benefit\n // from the resource store's metadata/search features.\n const isText =\n mimeType.startsWith(\"text/\") || mimeType === \"application/json\";\n\n if (!isText) {\n // Use the actual session user email for credential resolution — not `owner`,\n // which is \"__shared__\" for org-wide resources and would break the per-user\n // DB credential lookup (resolveBuilderCredential refuses env fallback for any\n // non-null non-local email, including the sentinel value).\n const credentialEmail =\n owner !== SHARED_OWNER\n ? owner\n : (await getSession(event).catch(() => null))?.email;\n const doUpload = () =>\n uploadFile({\n data: filePart.data,\n filename: fileName,\n mimeType,\n ownerEmail: owner,\n });\n const uploaded = credentialEmail\n ? await runWithRequestContext({ userEmail: credentialEmail }, doUpload)\n : await doUpload();\n if (uploaded) {\n const resource = await resourcePut(owner, path, uploaded.url, mimeType);\n setResponseStatus(event, 201);\n return { ...resource, url: uploaded.url, provider: uploaded.provider };\n }\n }\n\n // Fallback: store contents in SQL (base64 for binary, text as-is).\n const content = isText\n ? Buffer.from(filePart.data).toString(\"utf-8\")\n : Buffer.from(filePart.data).toString(\"base64\");\n\n const resource = await resourcePut(owner, path, content, mimeType);\n\n setResponseStatus(event, 201);\n return resource;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"metadata.d.ts","sourceRoot":"","sources":["../../src/resources/metadata.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,OAAO,GAAG,KAAK,GAAG,OAAO,GAAG,cAAc,CAAC;AAE/E,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC/C;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,eAAO,MAAM,4BAA4B,mBAAmB,CAAC;AAC7D,eAAO,MAAM,mCAAmC,YAAY,CAAC;AAC7D,eAAO,MAAM,8BAA8B,wCAGjC,CAAC;AAaX,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,iBAAiB,GAAG,IAAI,CAwC1E;AAED,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,KAAK,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,GAC5C,MAAM,CAwBR;AAED,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,iBAAiB,GAAG,IAAI,EACrC,GAAG,EAAE,MAAM,GACV,MAAM,GAAG,SAAS,CAEpB;AAED,wBAAgB,yBAAyB,CACvC,WAAW,EAAE,iBAAiB,GAAG,IAAI,GACpC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAIxB;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEjD;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAazD;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE/C;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEvD;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAKvD;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAM7D;AAED,wBAAgB,uBAAuB,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAE1D;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,CAM1D;AAED,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,GACX,aAAa,GAAG,IAAI,CAQtB;AAED,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,GACX,kBAAkB,GAAG,IAAI,CAiB3B;AAED,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,GACX,mBAAmB,GAAG,IAAI,CAiB5B"}
1
+ {"version":3,"file":"metadata.d.ts","sourceRoot":"","sources":["../../src/resources/metadata.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,OAAO,GAAG,KAAK,GAAG,OAAO,GAAG,cAAc,CAAC;AAE/E,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC/C;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,eAAO,MAAM,4BAA4B,mBAAmB,CAAC;AAC7D,eAAO,MAAM,mCAAmC,YAAY,CAAC;AAC7D,eAAO,MAAM,8BAA8B,wCAGjC,CAAC;AAaX,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,iBAAiB,GAAG,IAAI,CAwC1E;AAED,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,KAAK,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,GAC5C,MAAM,CAwBR;AAED,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,iBAAiB,GAAG,IAAI,EACrC,GAAG,EAAE,MAAM,GACV,MAAM,GAAG,SAAS,CAEpB;AAED,wBAAgB,yBAAyB,CACvC,WAAW,EAAE,iBAAiB,GAAG,IAAI,GACpC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAIxB;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAOjD;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAazD;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE/C;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEvD;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAKvD;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAM7D;AAED,wBAAgB,uBAAuB,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAE1D;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,CAM1D;AAED,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,GACX,aAAa,GAAG,IAAI,CAQtB;AAED,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,GACX,kBAAkB,GAAG,IAAI,CAiB3B;AAED,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,GACX,mBAAmB,GAAG,IAAI,CAiB5B"}
@@ -81,7 +81,11 @@ export function frontmatterFieldsToObject(frontmatter) {
81
81
  return Object.fromEntries(frontmatter?.fields.map((f) => [f.key, f.value]) ?? []);
82
82
  }
83
83
  export function isSkillPath(path) {
84
- return path.startsWith("skills/") && path.endsWith(".md");
84
+ if (!path.startsWith("skills/") || !path.endsWith(".md"))
85
+ return false;
86
+ const relative = path.replace(/^skills\//, "");
87
+ return (relative.endsWith("/SKILL.md") ||
88
+ (relative.endsWith(".md") && !relative.includes("/")));
85
89
  }
86
90
  export function getSkillNameFromPath(path) {
87
91
  const relative = path