@zoulabo/line-hive 0.1.21 → 0.1.22
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.
- package/README.md +51 -7
- package/dist/cli/config-writer.js +1 -1
- package/dist/cli/config-writer.js.map +1 -1
- package/dist/config.js +4 -1
- package/dist/config.js.map +1 -1
- package/dist/constants.js +2 -0
- package/dist/constants.js.map +1 -1
- package/dist/i18n.js +3 -1
- package/dist/i18n.js.map +1 -1
- package/dist/index.js +29 -3
- package/dist/index.js.map +1 -1
- package/dist/line/messages.js +141 -2
- package/dist/line/messages.js.map +1 -1
- package/dist/line/webhook.js +163 -28
- package/dist/line/webhook.js.map +1 -1
- package/dist/server.js +40 -15
- package/dist/server.js.map +1 -1
- package/dist/store/messageStore.js +16 -36
- package/dist/store/messageStore.js.map +1 -1
- package/dist/tools/ask.js +85 -55
- package/dist/tools/ask.js.map +1 -1
- package/dist/tools/createDocx.js +459 -0
- package/dist/tools/createDocx.js.map +1 -0
- package/dist/tools/createPptx.js +554 -0
- package/dist/tools/createPptx.js.map +1 -0
- package/dist/tools/createXlsx.js +360 -0
- package/dist/tools/createXlsx.js.map +1 -0
- package/dist/tools/gitReview-template.js +208 -0
- package/dist/tools/gitReview-template.js.map +1 -0
- package/dist/tools/gitReview.js +232 -0
- package/dist/tools/gitReview.js.map +1 -0
- package/dist/tools/readFile.js +6 -25
- package/dist/tools/readFile.js.map +1 -1
- package/dist/tools/renderMarkdown.js +159 -31
- package/dist/tools/renderMarkdown.js.map +1 -1
- package/dist/tools/sendMessage.js +9 -3
- package/dist/tools/sendMessage.js.map +1 -1
- package/dist/tools/setStatus.js +4 -2
- package/dist/tools/setStatus.js.map +1 -1
- package/dist/tunnel.js +1 -17
- package/dist/tunnel.js.map +1 -1
- package/dist/util/toolHelpers.js +232 -38
- package/dist/util/toolHelpers.js.map +1 -1
- package/package.json +7 -1
- package/templates/line-notification.instructions.md +114 -14
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderMarkdown.js","sourceRoot":"","sources":["../../src/tools/renderMarkdown.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"renderMarkdown.js","sourceRoot":"","sources":["../../src/tools/renderMarkdown.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAGhC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,qBAAqB,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACnG,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAS/D,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,IAAI,EAAsB;IAC3F,MAAM,QAAQ,GAAG,IAAI,CAAC,QAA8B,CAAC;IACrD,MAAM,SAAS,GAAG,IAAI,CAAC,SAA+B,CAAC;IACvD,MAAM,UAAU,GAAG,IAAI,CAAC,UAAgC,CAAC;IACzD,MAAM,KAAK,GAAI,IAAI,CAAC,KAAgB,IAAI,UAAU,CAAC;IACnD,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAEnC,IAAI,CAAC,QAAQ,IAAI,CAAC,SAAS,EAAE,CAAC;QAC5B,OAAO,SAAS,CAAC,+CAA+C,CAAC,CAAC;IACpE,CAAC;IAED,IAAI,EAAU,CAAC;IACf,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACzC,MAAM,OAAO,GAAG,qBAAqB,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;QAC7D,IAAI,OAAO;YAAE,OAAO,SAAS,CAAC,OAAO,CAAC,CAAC;QACvC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC7B,OAAO,SAAS,CAAC,mBAAmB,SAAS,EAAE,CAAC,CAAC;QACnD,CAAC;QACD,IAAI,CAAC;YACH,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC1C,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,SAAS,CAAC,wBAAwB,SAAS,EAAE,CAAC,CAAC;QACxD,CAAC;IACH,CAAC;SAAM,CAAC;QACN,EAAE,GAAG,QAAS,CAAC;IACjB,CAAC;IAED,6EAA6E;IAC7E,IAAI,EAAE,CAAC,MAAM,GAAG,OAAS,EAAE,CAAC;QAC1B,OAAO,SAAS,CAAC,iBAAiB,EAAE;YAClC,OAAO,EAAE,qBAAqB,CAAC,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,kBAAkB;SAC9E,CAAC,CAAC;IACL,CAAC;IAED,kEAAkE;IAClE,mFAAmF;IACnF,wEAAwE;IACxE,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,MAAM,YAAY,GAAwD,EAAE,CAAC;IAE7E,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,6BAA6B,EAAE,CAAC,MAAM,EAAE,SAAiB,EAAE,EAAE;QAC3E,YAAY,EAAE,CAAC;QACf,MAAM,EAAE,GAAG,SAAS,YAAY,EAAE,CAAC;QACnC,IAAI,CAAC;YACH,0CAA0C;YAC1C,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC;YAC7B,YAAY,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAClD,0EAA0E;YAC1E,OAAO,+CAA+C,EAAE,iBAAiB,EAAE,mBAAmB,CAAC;QACjG,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,MAAM,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAChE,YAAY,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;YACnD,OAAO,qDAAqD,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC;QACzF,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAElD,2BAA2B;IAC3B,MAAM,WAAW,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAE3C,yEAAyE;IACzE,4EAA4E;IAC5E,MAAM,QAAQ,GAAG,YAAY,CAAC,WAAW,CAAC,CAAC;IAE3C,mEAAmE;IACnE,MAAM,UAAU,GAAG,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC1C,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,sCAAsC;IAC1E,MAAM,OAAO,GAAG,gCAAgC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,mBAAmB;IAE9E,8CAA8C;IAC9C,MAAM,SAAS,GAAG;QAChB,OAAO,CAAC,CAAC,CAAC,mHAAmH,CAAC,CAAC,CAAC,EAAE;QAClI,OAAO,CAAC,CAAC,CAAC,2FAA2F,CAAC,CAAC,CAAC,EAAE;KAC3G,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC7B,MAAM,aAAa,GAAG,SAAS,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAExD,4DAA4D;IAC5D,MAAM,UAAU,GAAa,EAAE,CAAC;IAEhC,kEAAkE;IAClE,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC7C,IAAI,QAAQ,EAAE,CAAC;QACb,UAAU,CAAC,IAAI,CAAC,oLAAoL,CAAC,CAAC;IACxM,CAAC;IAED,4EAA4E;IAC5E,IAAI,UAAU,EAAE,CAAC;QACf,UAAU,CAAC,IAAI,CAAC;;;;;;;;;;;UAWV,CAAC,CAAC;IACV,CAAC;IAED,oEAAoE;IACpE,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,QAAQ,GAAG,UAAU;YACzB,CAAC,CAAC,iCAAiC,CAAC,sBAAsB;YAC1D,CAAC,CAAC,UAAU,CAAC;QACf,UAAU,CAAC,IAAI,CAAC;qCACiB,QAAQ,uDAAuD,CAAC,CAAC;IACpG,CAAC;IAED,yBAAyB;IACzB,IAAI,OAAO,EAAE,CAAC;QACZ,UAAU,CAAC,IAAI,CAAC;;4IAEwH,CAAC,CAAC;IAC5I,CAAC;IAED,0DAA0D;IAC1D,IAAI,QAAQ,EAAE,CAAC;QACb,UAAU,CAAC,IAAI,CAAC,iEAAiE,CAAC,CAAC;QACnF,8BAA8B;QAC9B,KAAK,MAAM,KAAK,IAAI,YAAY,EAAE,CAAC;YACjC,IAAI,KAAK,CAAC,KAAK;gBAAE,SAAS;YAC1B,UAAU,CAAC,IAAI,CAAC,8CAA8C,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC;QAChI,CAAC;IACH,CAAC;IAED,MAAM,WAAW,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAE9E,4BAA4B;IAC5B,MAAM,OAAO,GAAG,OAAO;QACrB,CAAC,CAAC;;gEAE0D;QAC5D,CAAC,CAAC,EAAE,CAAC;IAEP,8BAA8B;IAC9B,MAAM,aAAa,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAEtD,MAAM,QAAQ,GAAG,QAAQ,IAAI,aAAa;QACxC,CAAC,CAAC;;wGAEkG;QACpG,CAAC,CAAC,EAAE,CAAC;IAEP,kCAAkC;IAClC,MAAM,UAAU,GAAG,CAAC,QAAQ,EAAE,kBAAkB,CAAC,CAAC;IAClD,MAAM,OAAO,GAAG,sFAAsF,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,+BAA+B,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,+CAA+C,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,yBAAyB,CAAC;IAE1Q,sDAAsD;IACtD,MAAM,IAAI,GAAG;;;;;;EAMb,OAAO;SACA,UAAU,CAAC,KAAK,CAAC;;;;;;;;;;;;;;mDAcyB,OAAO,GAAG,QAAQ;UAC3D,aAAa;;;EAGrB,QAAQ,GAAG,WAAW;;QAEhB,CAAC;IAEP,6FAA6F;IAC7F,IAAI,IAAI,CAAC,MAAM,GAAG,OAAS,EAAE,CAAC;QAC5B,OAAO,SAAS,CAAC,kBAAkB,EAAE;YACnC,OAAO,EAAE,oBAAoB,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,8CAA8C;SAC3G,CAAC,CAAC;IACL,CAAC;IAED,wCAAwC;IACxC,IAAI,UAAU,EAAE,CAAC;QACf,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAC7C,MAAM,UAAU,GAAG,qBAAqB,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;QACpE,IAAI,UAAU;YAAE,OAAO,SAAS,CAAC,UAAU,CAAC,CAAC;QAC7C,IAAI,CAAC;YACH,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC7D,EAAE,CAAC,aAAa,CAAC,WAAW,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QAC/C,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,SAAS,CAAC,yBAAyB,UAAU,EAAE,CAAC,CAAC;QAC1D,CAAC;QAED,mFAAmF;QACnF,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;YACvB,6EAA6E;YAC7E,2EAA2E;YAC3E,iDAAiD;YACjD,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;YAC5B,MAAM,cAAc,GAAG,GAAG,MAAM,OAAO,CAAC;YACxC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,cAAc,CAAC,CAAC;YACjE,IAAI,CAAC;gBACH,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC3D,sEAAsE;gBACtE,+DAA+D;gBAC/D,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;gBACxC,YAAY,CAAC,eAAe,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;gBACpD,MAAM,GAAG,GAAG,WAAW,MAAM,CAAC,WAAW,UAAU,cAAc,EAAE,CAAC;gBACpE,OAAO,UAAU,CAAC,EAAE,OAAO,EAAE,mBAAmB,UAAU,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACpG,CAAC;YAAC,MAAM,CAAC;gBACP,2CAA2C;gBAC3C,OAAO,UAAU,CAAC,EAAE,OAAO,EAAE,mBAAmB,UAAU,2BAA2B,EAAE,CAAC,CAAC;YAC3F,CAAC;QACH,CAAC;QAED,OAAO,UAAU,CAAC,EAAE,OAAO,EAAE,mBAAmB,UAAU,EAAE,EAAE,CAAC,CAAC;IAClE,CAAC;IAED,gBAAgB;IAChB,OAAO,UAAU,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;AAC9B,CAAC;AAED,SAAS,UAAU,CAAC,IAAY;IAC9B,OAAO,IAAI;SACR,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;SACtB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AAC7B,CAAC;AAED,+EAA+E;AAC/E,yEAAyE;AACzE,2EAA2E;AAE3E,wDAAwD;AACxD,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC;IACxB,gBAAgB;IAChB,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI;IAC9B,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;IAClC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;IAClC,YAAY,EAAE,KAAK,EAAE,MAAM;IAC3B,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,KAAK;IAClF,oBAAoB;IACpB,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO;IAC/E,GAAG,EAAE,KAAK;IACV,kBAAkB;IAClB,SAAS,EAAE,SAAS;IACpB,+BAA+B;IAC/B,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM;IAC5B,+CAA+C;IAC/C,QAAQ;CACT,CAAC,CAAC;AAEH,kEAAkE;AAClE,MAAM,UAAU,GAAgC;IAC9C,GAAG,EAAE,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,CAAC,CAAC;IACtE,CAAC,EAAE,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;IACrC,GAAG,EAAE,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;IAC1D,EAAE,EAAE,IAAI,GAAG,CAAC,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IAC5C,EAAE,EAAE,IAAI,GAAG,CAAC,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IACrD,GAAG,EAAE,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC;IACtB,QAAQ,EAAE,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC;IAC3B,EAAE,EAAE,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC9B,IAAI,EAAE,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,iCAAiC;IAC3D,OAAO,EAAE,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC;CAC3B,CAAC;AAEF,+CAA+C;AAC/C,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC;AAE/D,SAAS,YAAY,CAAC,IAAY;IAChC,+CAA+C;IAC/C,OAAO,IAAI,CAAC,OAAO,CAAC,4CAA4C,EAAE,CAAC,SAAS,EAAE,OAAe,EAAE,QAAgB,EAAE,EAAE;QACjH,MAAM,GAAG,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;QAElC,cAAc;QACd,IAAI,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YAC/B,OAAO,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/C,CAAC;QAED,oCAAoC;QACpC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,OAAO,EAAE,CAAC;QAEnC,8BAA8B;QAC9B,MAAM,WAAW,GAAG,kBAAkB,CAAC,GAAG,EAAE,QAAQ,IAAI,EAAE,CAAC,CAAC;QAC5D,MAAM,WAAW,GAAG,SAAS,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACvD,OAAO,IAAI,GAAG,GAAG,WAAW,GAAG,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC;IAC5D,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,kBAAkB,CAAC,GAAW,EAAE,QAAgB;IACvD,MAAM,aAAa,GAAG,UAAU,CAAC,GAAG,CAAC,IAAI,IAAI,GAAG,EAAE,CAAC;IACnD,MAAM,UAAU,GAAG,UAAU,CAAC,GAAG,CAAC,IAAI,IAAI,GAAG,EAAE,CAAC;IAChD,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,qFAAqF;IACrF,MAAM,SAAS,GAAG,4DAA4D,CAAC;IAC/E,IAAI,CAAyB,CAAC;IAE9B,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QAC/C,MAAM,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;QACpC,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAEzC,gDAAgD;QAChD,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC;YAAE,SAAS;QAExE,oDAAoD;QACpD,IAAI,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC;YAAE,SAAS;QAExC,iDAAiD;QACjD,IAAI,QAAQ,KAAK,MAAM,IAAI,QAAQ,KAAK,KAAK,EAAE,CAAC;YAC9C,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;gBAAE,SAAS;QAClC,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,GAAG,QAAQ,KAAK,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACnD,CAAC;IAED,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACvD,CAAC;AAED,SAAS,SAAS,CAAC,GAAW;IAC5B,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACzC,6CAA6C;IAC7C,IAAI,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QACxG,OAAO,KAAK,CAAC;IACf,CAAC;IACD,2DAA2D;IAC3D,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC9G,OAAO,IAAI,CAAC;IACd,CAAC;IACD,oCAAoC;IACpC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;QAC5B,OAAO,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC7C,CAAC;IAAC,MAAM,CAAC;QACP,mDAAmD;QACnD,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
+
import { isAttachmentFile, buildFileAttachmentFlex } from "../line/messages.js";
|
|
1
2
|
import { logger as defaultLogger } from "../logger.js";
|
|
2
3
|
import { waitForReplyInternal } from "./waitForReplyInternal.js";
|
|
3
4
|
import { sendWithTokenPool } from "../util/sendWithTokenPool.js";
|
|
4
5
|
import { validateToolInput, isValidationError, checkAgentNameCollision, clampTimeout, clampTtlMs, toolResult, toolError, storeAndBuildImageUrl, storeAndBuildFileUrl, mediaToContentBlocks } from "../util/toolHelpers.js";
|
|
5
|
-
import { CONFIG_TARGETED_AGENT } from "../constants.js";
|
|
6
|
+
import { CONFIG_TARGETED_AGENT, LINE_SESSION_REMINDER } from "../constants.js";
|
|
6
7
|
export async function handleSendMessage({ config, messageStore, statusStore, lineClient, logger = defaultLogger, args, correlationId }) {
|
|
7
8
|
const validated = validateToolInput(args, config, messageStore, statusStore);
|
|
8
9
|
if (isValidationError(validated))
|
|
@@ -38,7 +39,7 @@ export async function handleSendMessage({ config, messageStore, statusStore, lin
|
|
|
38
39
|
const ttlMs = clampTtlMs(args.ttl);
|
|
39
40
|
// filePath takes precedence (any file type); imageFilePath/imageBase64 for images only
|
|
40
41
|
if (args.filePath) {
|
|
41
|
-
const fileResult = storeAndBuildFileUrl(args.filePath, config, messageStore, ttlMs);
|
|
42
|
+
const fileResult = await storeAndBuildFileUrl(args.filePath, config, messageStore, ttlMs);
|
|
42
43
|
if ("error" in fileResult) {
|
|
43
44
|
logger.warn({ error: fileResult.error }, "File send skipped");
|
|
44
45
|
}
|
|
@@ -56,6 +57,9 @@ export async function handleSendMessage({ config, messageStore, statusStore, lin
|
|
|
56
57
|
text: `📎 ${fileResult.fileName} (⏱ ${fileResult.expiresIn})\n${fileResult.previewUrl}`,
|
|
57
58
|
});
|
|
58
59
|
}
|
|
60
|
+
else if (isAttachmentFile(fileResult.mimeType)) {
|
|
61
|
+
messages.push(buildFileAttachmentFlex(fileResult.fileName, fileResult.fileSize, fileResult.url, fileResult.expiresIn, fileResult.mimeType));
|
|
62
|
+
}
|
|
59
63
|
else {
|
|
60
64
|
messages.push({
|
|
61
65
|
type: "text",
|
|
@@ -143,7 +147,9 @@ export async function handleSendMessage({ config, messageStore, statusStore, lin
|
|
|
143
147
|
}
|
|
144
148
|
return { content };
|
|
145
149
|
}
|
|
146
|
-
|
|
150
|
+
const wrapped = toolResult(result);
|
|
151
|
+
wrapped.content[0].text += "\n\n" + LINE_SESSION_REMINDER;
|
|
152
|
+
return wrapped;
|
|
147
153
|
}
|
|
148
154
|
catch (error) {
|
|
149
155
|
if (waitForReply) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sendMessage.js","sourceRoot":"","sources":["../../src/tools/sendMessage.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"sendMessage.js","sourceRoot":"","sources":["../../src/tools/sendMessage.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/setStatus.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { logger as defaultLogger } from "../logger.js";
|
|
2
2
|
import { checkAgentNameCollision, toolResult } from "../util/toolHelpers.js";
|
|
3
|
-
import { CONFIG_TARGETED_AGENT } from "../constants.js";
|
|
3
|
+
import { CONFIG_TARGETED_AGENT, LINE_SESSION_REMINDER } from "../constants.js";
|
|
4
4
|
export function handleSetStatus({ statusStore, messageStore, logger = defaultLogger }, args) {
|
|
5
5
|
// Use agent-provided agentName for sub-task isolation; omit to use base row
|
|
6
6
|
const agentName = typeof args.agentName === 'string'
|
|
@@ -48,6 +48,8 @@ export function handleSetStatus({ statusStore, messageStore, logger = defaultLog
|
|
|
48
48
|
}
|
|
49
49
|
}
|
|
50
50
|
}
|
|
51
|
-
|
|
51
|
+
const wrapped = toolResult(result);
|
|
52
|
+
wrapped.content[0].text += "\n\n" + LINE_SESSION_REMINDER;
|
|
53
|
+
return wrapped;
|
|
52
54
|
}
|
|
53
55
|
//# sourceMappingURL=setStatus.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setStatus.js","sourceRoot":"","sources":["../../src/tools/setStatus.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,IAAI,aAAa,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,EAAE,uBAAuB,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAC7E,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"setStatus.js","sourceRoot":"","sources":["../../src/tools/setStatus.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,IAAI,aAAa,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,EAAE,uBAAuB,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAC7E,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAE/E,MAAM,UAAU,eAAe,CAC7B,EACE,WAAW,EACX,YAAY,EACZ,MAAM,GAAG,aAAa,EACmE,EAC3F,IAA6B;IAE7B,4EAA4E;IAC5E,MAAM,SAAS,GAAG,OAAO,IAAI,CAAC,SAAS,KAAK,QAAQ;QAClD,CAAC,CAAC,IAAI,CAAC,SAAS;QAChB,CAAC,CAAC,IAAI,CAAC;IAET,kDAAkD;IAClD,MAAM,SAAS,GAAG,uBAAuB,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;IAClE,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,EAAE,sBAAsB,CAAC,CAAC;QACnD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,mEAAmE;IACnE,MAAM,WAAW,GAAG,OAAO,IAAI,CAAC,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC;IACnF,MAAM,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC;IAEhD,WAAW,CAAC,SAAS,CAAC;QACpB,MAAM;QACN,WAAW;QACX,MAAM,EAAE,IAAI;QACZ,MAAM,EAAE,IAAI;QACZ,SAAS;KACV,CAAC,CAAC;IAEH,uEAAuE;IACvE,IAAI,OAAO,IAAI,CAAC,QAAQ,KAAK,QAAQ,IAAI,YAAY,EAAE,CAAC;QACtD,YAAY,CAAC,SAAS,CAAC,eAAe,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QACvD,MAAM,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,uBAAuB,CAAC,CAAC;IACpE,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,gBAAgB,CAAC,CAAC;IAEvD,0FAA0F;IAC1F,MAAM,YAAY,GAAG,WAAW,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC;IAChE,MAAM,MAAM,GAA4B,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IACzD,IAAI,YAAY,EAAE,CAAC;QACjB,MAAM,CAAC,YAAY,GAAG,YAAY,CAAC;IACrC,CAAC;IAED,uEAAuE;IACvE,mFAAmF;IACnF,uEAAuE;IACvE,IAAI,YAAY,EAAE,CAAC;QACjB,MAAM,eAAe,GAAG,YAAY,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAC;QACtE,MAAM,WAAW,GAAG,WAAW,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC;QAC/D,IAAI,CAAC,eAAe,IAAI,eAAe,KAAK,WAAW,EAAE,CAAC;YACxD,MAAM,cAAc,GAAG,WAAW,CAAC,gBAAgB,CAAC;YACpD,MAAM,cAAc,GAAG,YAAY,CAAC,sBAAsB,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;YACxF,IAAI,cAAc,GAAG,CAAC,EAAE,CAAC;gBACvB,MAAM,CAAC,cAAc,GAAG,cAAc,CAAC;YACzC,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;IAClC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAoC,CAAC,IAAI,IAAI,MAAM,GAAG,qBAAqB,CAAC;IAC9F,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
package/dist/tunnel.js
CHANGED
|
@@ -105,26 +105,10 @@ export function startTunnel(opts) {
|
|
|
105
105
|
}
|
|
106
106
|
/**
|
|
107
107
|
* Stop an ngrok tunnel process gracefully.
|
|
108
|
-
* Accepts either a TunnelHandle or a legacy ChildProcess.
|
|
109
108
|
*/
|
|
110
109
|
export function stopTunnel(handle, logger) {
|
|
111
110
|
if (!handle)
|
|
112
111
|
return;
|
|
113
|
-
|
|
114
|
-
if ('stop' in handle && typeof handle.stop === 'function') {
|
|
115
|
-
handle.stop();
|
|
116
|
-
return;
|
|
117
|
-
}
|
|
118
|
-
// Legacy ChildProcess fallback
|
|
119
|
-
const child = handle;
|
|
120
|
-
if (child.killed)
|
|
121
|
-
return;
|
|
122
|
-
logger?.info("Stopping ngrok tunnel");
|
|
123
|
-
child.kill("SIGTERM");
|
|
124
|
-
setTimeout(() => {
|
|
125
|
-
if (!child.killed) {
|
|
126
|
-
child.kill("SIGKILL");
|
|
127
|
-
}
|
|
128
|
-
}, 3000).unref();
|
|
112
|
+
handle.stop();
|
|
129
113
|
}
|
|
130
114
|
//# sourceMappingURL=tunnel.js.map
|
package/dist/tunnel.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tunnel.js","sourceRoot":"","sources":["../src/tunnel.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"tunnel.js","sourceRoot":"","sources":["../src/tunnel.ts"],"names":[],"mappings":"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"}
|
package/dist/util/toolHelpers.js
CHANGED
|
@@ -6,20 +6,51 @@ import { randomUUID } from "crypto";
|
|
|
6
6
|
import { MAX_LINE_TEXT_LENGTH, MIN_TIMEOUT_MS, MAX_TIMEOUT_MS, DEFAULT_FILE_TTL_MS, MAX_FILE_TTL_MS } from "../constants.js";
|
|
7
7
|
import fs from "fs";
|
|
8
8
|
import path from "path";
|
|
9
|
+
import { pipeline } from "stream/promises";
|
|
10
|
+
// ─── SVG Conversion ─────────────────────────────────────────────────────────
|
|
11
|
+
/**
|
|
12
|
+
* Convert SVG buffer to PNG using sharp (optional dependency).
|
|
13
|
+
* Returns the PNG buffer, or null if sharp is not available or conversion fails.
|
|
14
|
+
* LINE cannot display SVG inline — only raster images (JPEG, PNG, GIF, WEBP).
|
|
15
|
+
*/
|
|
16
|
+
async function convertSvgToPng(svgBuffer) {
|
|
17
|
+
try {
|
|
18
|
+
const sharp = (await import("sharp")).default;
|
|
19
|
+
return await sharp(svgBuffer).png().toBuffer();
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
return null;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
// ─── Serve Directory ────────────────────────────────────────────────────────
|
|
26
|
+
const DEFAULT_SERVE_DIR = ".line-hive-tmp";
|
|
27
|
+
/** Resolve the serve directory from config, falling back to default */
|
|
28
|
+
export function getServeDir(config) {
|
|
29
|
+
return config?.serveDir || path.resolve(DEFAULT_SERVE_DIR);
|
|
30
|
+
}
|
|
9
31
|
// ─── Path Security ──────────────────────────────────────────────────────────
|
|
10
32
|
/**
|
|
11
33
|
* Ensure a resolved path is within the workspace directory.
|
|
12
|
-
* Prevents path traversal attacks (e.g. `../../etc/passwd`)
|
|
34
|
+
* Prevents path traversal attacks (e.g. `../../etc/passwd`) and
|
|
35
|
+
* symlink escapes (resolves real path for existing files).
|
|
13
36
|
*/
|
|
14
37
|
export function assertWithinWorkspace(resolvedPath, label) {
|
|
15
38
|
const workspace = path.resolve(process.env.WORKSPACE_PATH || process.cwd());
|
|
16
|
-
|
|
17
|
-
|
|
39
|
+
// Resolve symlinks for existing paths to prevent symlink-based escapes
|
|
40
|
+
let realPath = resolvedPath;
|
|
41
|
+
try {
|
|
42
|
+
realPath = fs.realpathSync(resolvedPath);
|
|
43
|
+
}
|
|
44
|
+
catch {
|
|
45
|
+
// File doesn't exist yet (write operations) — fall through to prefix check
|
|
46
|
+
}
|
|
47
|
+
if (!realPath.startsWith(workspace + path.sep) && realPath !== workspace) {
|
|
48
|
+
return `${label} must be within the workspace.`;
|
|
18
49
|
}
|
|
19
50
|
return null;
|
|
20
51
|
}
|
|
21
52
|
/**
|
|
22
|
-
* Read media content as a Buffer
|
|
53
|
+
* Read media content as a Buffer from disk.
|
|
23
54
|
* Exported so readFile.ts can reuse the same logic.
|
|
24
55
|
*/
|
|
25
56
|
export function readMediaBuffer(media) {
|
|
@@ -29,16 +60,12 @@ export function readMediaBuffer(media) {
|
|
|
29
60
|
return fs.readFileSync(fullPath);
|
|
30
61
|
}
|
|
31
62
|
catch (err) {
|
|
32
|
-
// Disk file missing or unreadable — fall through to base64 fallback
|
|
33
63
|
if (process.env.LOG_LEVEL === "debug") {
|
|
34
64
|
console.error(`[readMediaBuffer] Failed to read ${fullPath}:`, err);
|
|
35
65
|
}
|
|
36
66
|
return null;
|
|
37
67
|
}
|
|
38
68
|
}
|
|
39
|
-
if (media.base64) {
|
|
40
|
-
return Buffer.from(media.base64, "base64");
|
|
41
|
-
}
|
|
42
69
|
return null;
|
|
43
70
|
}
|
|
44
71
|
/** MIME types considered text-based (content decoded as UTF-8 for the agent) */
|
|
@@ -55,7 +82,7 @@ const TEXT_MIME_EXACT = new Set([
|
|
|
55
82
|
"application/ld+json",
|
|
56
83
|
"application/xhtml+xml",
|
|
57
84
|
]);
|
|
58
|
-
function isTextMimeType(mime) {
|
|
85
|
+
export function isTextMimeType(mime) {
|
|
59
86
|
if (TEXT_MIME_PREFIXES.some(p => mime.startsWith(p)))
|
|
60
87
|
return true;
|
|
61
88
|
return TEXT_MIME_EXACT.has(mime);
|
|
@@ -79,18 +106,14 @@ const INLINE_TEXT_THRESHOLD = 10 * 1024;
|
|
|
79
106
|
export function mediaToContentBlocks(mediaJson, messageId) {
|
|
80
107
|
try {
|
|
81
108
|
const media = JSON.parse(mediaJson);
|
|
82
|
-
if (
|
|
109
|
+
if (!media.diskPath || !media.mimeType)
|
|
83
110
|
return [];
|
|
84
111
|
// Images: return as ImageContent (LINE previews are small, acceptable inline)
|
|
85
112
|
if (media.mimeType.startsWith("image/")) {
|
|
86
|
-
|
|
87
|
-
if (
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
return [];
|
|
91
|
-
return [{ type: "image", data: buffer.toString("base64"), mimeType: media.mimeType }];
|
|
92
|
-
}
|
|
93
|
-
return [{ type: "image", data: media.base64, mimeType: media.mimeType }];
|
|
113
|
+
const buffer = readMediaBuffer(media);
|
|
114
|
+
if (!buffer)
|
|
115
|
+
return [];
|
|
116
|
+
return [{ type: "image", data: buffer.toString("base64"), mimeType: media.mimeType }];
|
|
94
117
|
}
|
|
95
118
|
// Text-based files: decode and return inline if small enough
|
|
96
119
|
if (isTextMimeType(media.mimeType)) {
|
|
@@ -185,6 +208,69 @@ export function validateToolInput(args, config, messageStore, statusStore) {
|
|
|
185
208
|
const agentId = statusStore?.getEffectiveAgentId(agentName) ?? null;
|
|
186
209
|
return { text, userId, agentName, agentId };
|
|
187
210
|
}
|
|
211
|
+
/**
|
|
212
|
+
* Validate common tool inputs WITHOUT requiring text.
|
|
213
|
+
* Used by line_ask when messages[] replaces text.
|
|
214
|
+
*/
|
|
215
|
+
export function validateToolInputOptionalText(args, config, messageStore, statusStore) {
|
|
216
|
+
const text = typeof args.text === "string" ? args.text : null;
|
|
217
|
+
if (text && text.length > MAX_LINE_TEXT_LENGTH) {
|
|
218
|
+
return toolError("text_too_long", { maxLength: MAX_LINE_TEXT_LENGTH });
|
|
219
|
+
}
|
|
220
|
+
const userId = messageStore.getDefaultUserId();
|
|
221
|
+
if (!userId) {
|
|
222
|
+
return toolError("no_user_registered");
|
|
223
|
+
}
|
|
224
|
+
const agentName = typeof args.agentName === "string" ? args.agentName : null;
|
|
225
|
+
const agentId = statusStore?.getEffectiveAgentId(agentName) ?? null;
|
|
226
|
+
return { text, userId, agentName, agentId };
|
|
227
|
+
}
|
|
228
|
+
/** Maximum messages per LINE reply API call */
|
|
229
|
+
export const MAX_LINE_MESSAGES = 5;
|
|
230
|
+
/**
|
|
231
|
+
* Parse the messages[] array into structured items.
|
|
232
|
+
* - Plain strings → text messages
|
|
233
|
+
* - "file:" prefixed → file attachments
|
|
234
|
+
* - "text:" prefixed → text (escape for strings starting with "file:")
|
|
235
|
+
* Returns array of items or a tool error.
|
|
236
|
+
*/
|
|
237
|
+
export function parseMessageItems(args) {
|
|
238
|
+
const messages = args.messages;
|
|
239
|
+
if (Array.isArray(messages)) {
|
|
240
|
+
if (messages.length === 0) {
|
|
241
|
+
return toolError("empty_messages", { message: "messages array must not be empty." });
|
|
242
|
+
}
|
|
243
|
+
if (messages.length > MAX_LINE_MESSAGES) {
|
|
244
|
+
return toolError("too_many_messages", {
|
|
245
|
+
message: `Maximum ${MAX_LINE_MESSAGES} messages per call (LINE API limit). Got ${messages.length}.`,
|
|
246
|
+
});
|
|
247
|
+
}
|
|
248
|
+
const items = [];
|
|
249
|
+
for (const m of messages) {
|
|
250
|
+
if (typeof m !== "string") {
|
|
251
|
+
return toolError("invalid_message_item", { message: "Each message must be a string." });
|
|
252
|
+
}
|
|
253
|
+
if (m.startsWith("file:")) {
|
|
254
|
+
items.push({ type: "file", content: m.slice(5) });
|
|
255
|
+
}
|
|
256
|
+
else if (m.startsWith("link:")) {
|
|
257
|
+
// Force send as plain text download link (no Flex card)
|
|
258
|
+
items.push({ type: "file", content: m.slice(5), forceLink: true });
|
|
259
|
+
}
|
|
260
|
+
else if (m.startsWith("text:")) {
|
|
261
|
+
// Escape: "text:file:..." → text message with content "file:..."
|
|
262
|
+
items.push({ type: "text", content: m.slice(5) });
|
|
263
|
+
}
|
|
264
|
+
else {
|
|
265
|
+
items.push({ type: "text", content: m });
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
return items;
|
|
269
|
+
}
|
|
270
|
+
return toolError("missing_messages", {
|
|
271
|
+
message: "Provide messages[] array.",
|
|
272
|
+
});
|
|
273
|
+
}
|
|
188
274
|
/** Check if result is a validation error (ToolContent) rather than ValidatedInput */
|
|
189
275
|
export function isValidationError(result) {
|
|
190
276
|
return "content" in result;
|
|
@@ -340,16 +426,18 @@ export function storeAndBuildImageUrl(args, config, messageStore, ttlMs = DEFAUL
|
|
|
340
426
|
const imageId = randomUUID();
|
|
341
427
|
const filename = `${imageId}${ext}`;
|
|
342
428
|
// Write to disk instead of SQLite
|
|
343
|
-
const serveDir =
|
|
344
|
-
fs.mkdirSync(serveDir, { recursive: true });
|
|
345
|
-
fs.writeFileSync(path.join(serveDir, filename), imageBuffer);
|
|
429
|
+
const serveDir = getServeDir(config);
|
|
430
|
+
fs.mkdirSync(serveDir, { recursive: true, mode: 0o700 });
|
|
431
|
+
fs.writeFileSync(path.join(serveDir, filename), imageBuffer, { mode: 0o600 });
|
|
346
432
|
messageStore.trackServedFile(filename, ttlMs);
|
|
347
433
|
const url = `https://${config.ngrokDomain}/files/${filename}`;
|
|
348
434
|
return { url, expiresIn: formatTtl(ttlMs) };
|
|
349
435
|
}
|
|
350
436
|
// ─── File Sending ───────────────────────────────────────────────────────────
|
|
351
|
-
/**
|
|
352
|
-
const
|
|
437
|
+
/** Threshold where we stop buffering in-memory and switch to streaming copy (10MB). */
|
|
438
|
+
const SMALL_FILE_THRESHOLD_BYTES = 10 * 1024 * 1024;
|
|
439
|
+
/** Default max size for outgoing non-image files (200MB). Override via MAX_OUTGOING_FILE_BYTES env. */
|
|
440
|
+
const DEFAULT_MAX_OUTGOING_FILE_BYTES = 200 * 1024 * 1024;
|
|
353
441
|
/** UTF-8 BOM for Excel compatibility (Excel requires BOM to detect UTF-8) */
|
|
354
442
|
const UTF8_BOM = Buffer.from([0xef, 0xbb, 0xbf]);
|
|
355
443
|
/**
|
|
@@ -498,7 +586,7 @@ ${bodyRows}
|
|
|
498
586
|
*
|
|
499
587
|
* Files are tracked with a TTL for automatic cleanup.
|
|
500
588
|
*/
|
|
501
|
-
export function storeAndBuildFileUrl(filePath, config, messageStore, ttlMs = DEFAULT_FILE_TTL_MS) {
|
|
589
|
+
export async function storeAndBuildFileUrl(filePath, config, messageStore, ttlMs = DEFAULT_FILE_TTL_MS) {
|
|
502
590
|
if (!config.ngrokDomain) {
|
|
503
591
|
return { error: "file_send_requires_tunnel" };
|
|
504
592
|
}
|
|
@@ -509,37 +597,96 @@ export function storeAndBuildFileUrl(filePath, config, messageStore, ttlMs = DEF
|
|
|
509
597
|
if (!fs.existsSync(resolved)) {
|
|
510
598
|
return { error: "file_not_found" };
|
|
511
599
|
}
|
|
512
|
-
let
|
|
600
|
+
let stat;
|
|
513
601
|
try {
|
|
514
|
-
|
|
602
|
+
stat = fs.statSync(resolved);
|
|
515
603
|
}
|
|
516
604
|
catch {
|
|
517
605
|
return { error: "file_read_error" };
|
|
518
606
|
}
|
|
519
|
-
if (
|
|
520
|
-
return { error: "
|
|
607
|
+
if (!stat.isFile()) {
|
|
608
|
+
return { error: "file_read_error" };
|
|
521
609
|
}
|
|
522
|
-
if (
|
|
523
|
-
return { error: "
|
|
610
|
+
if (stat.size === 0) {
|
|
611
|
+
return { error: "empty_file" };
|
|
524
612
|
}
|
|
613
|
+
const sourceSize = stat.size;
|
|
525
614
|
const mimeType = mimeFromExtension(filePath);
|
|
526
615
|
const fileName = path.basename(filePath);
|
|
527
616
|
const fileId = randomUUID();
|
|
528
617
|
const ext = path.extname(filePath) || "";
|
|
529
|
-
|
|
618
|
+
// Images: keep strict 10MB cap (LINE inline image constraints)
|
|
619
|
+
if (mimeType.startsWith("image/") && sourceSize > MAX_IMAGE_SIZE) {
|
|
620
|
+
return { error: "image_too_large" };
|
|
621
|
+
}
|
|
622
|
+
// Non-images: allow larger files up to configured max
|
|
623
|
+
const maxOutgoing = Number.isFinite(config.maxOutgoingFileBytes)
|
|
624
|
+
? config.maxOutgoingFileBytes
|
|
625
|
+
: DEFAULT_MAX_OUTGOING_FILE_BYTES;
|
|
626
|
+
if (!mimeType.startsWith("image/") && sourceSize > maxOutgoing) {
|
|
627
|
+
return { error: "file_too_large" };
|
|
628
|
+
}
|
|
629
|
+
// Large non-image file: stream copy to serveDir and return URL (no previews/conversions)
|
|
630
|
+
if (!mimeType.startsWith("image/") && sourceSize > SMALL_FILE_THRESHOLD_BYTES) {
|
|
631
|
+
const filename = `${fileId}${ext}`;
|
|
632
|
+
const serveDir = getServeDir(config);
|
|
633
|
+
fs.mkdirSync(serveDir, { recursive: true, mode: 0o700 });
|
|
634
|
+
const outPath = path.join(serveDir, filename);
|
|
635
|
+
try {
|
|
636
|
+
await pipeline(fs.createReadStream(resolved), fs.createWriteStream(outPath, { mode: 0o600 }));
|
|
637
|
+
}
|
|
638
|
+
catch {
|
|
639
|
+
return { error: "file_read_error" };
|
|
640
|
+
}
|
|
641
|
+
messageStore.trackServedFile(filename, ttlMs);
|
|
642
|
+
const url = `https://${config.ngrokDomain}/files/${filename}`;
|
|
643
|
+
return {
|
|
644
|
+
url,
|
|
645
|
+
mimeType,
|
|
646
|
+
isImage: false,
|
|
647
|
+
fileName,
|
|
648
|
+
fileSize: sourceSize,
|
|
649
|
+
expiresIn: formatTtl(ttlMs),
|
|
650
|
+
};
|
|
651
|
+
}
|
|
652
|
+
// Small file path (<=10MB): keep existing buffer-based behavior (CSV BOM/preview, SVG conversion)
|
|
653
|
+
let fileBuffer;
|
|
654
|
+
try {
|
|
655
|
+
fileBuffer = fs.readFileSync(resolved);
|
|
656
|
+
}
|
|
657
|
+
catch {
|
|
658
|
+
return { error: "file_read_error" };
|
|
659
|
+
}
|
|
660
|
+
// SVG → PNG conversion: LINE cannot display SVG inline
|
|
661
|
+
const isSvg = ext.toLowerCase() === ".svg" || mimeType === "image/svg+xml";
|
|
662
|
+
let effectiveBuffer = fileBuffer;
|
|
663
|
+
let effectiveExt = ext;
|
|
664
|
+
let effectiveMime = mimeType;
|
|
665
|
+
let effectiveFileName = fileName;
|
|
666
|
+
if (isSvg) {
|
|
667
|
+
const pngBuffer = await convertSvgToPng(fileBuffer);
|
|
668
|
+
if (pngBuffer) {
|
|
669
|
+
effectiveBuffer = pngBuffer;
|
|
670
|
+
effectiveExt = ".png";
|
|
671
|
+
effectiveMime = "image/png";
|
|
672
|
+
effectiveFileName = fileName.replace(/\.svg$/i, ".png");
|
|
673
|
+
}
|
|
674
|
+
// If conversion fails (sharp not installed), serve as download link
|
|
675
|
+
}
|
|
676
|
+
const filename = `${fileId}${effectiveExt}`;
|
|
530
677
|
// Write to disk instead of SQLite
|
|
531
|
-
const serveDir =
|
|
532
|
-
fs.mkdirSync(serveDir, { recursive: true });
|
|
678
|
+
const serveDir = getServeDir(config);
|
|
679
|
+
fs.mkdirSync(serveDir, { recursive: true, mode: 0o700 });
|
|
533
680
|
// For CSV files: add UTF-8 BOM for Excel compatibility
|
|
534
681
|
const isCsv = ext.toLowerCase() === ".csv";
|
|
535
|
-
const outputBuffer = isCsv && !
|
|
536
|
-
? Buffer.concat([UTF8_BOM,
|
|
537
|
-
:
|
|
538
|
-
fs.writeFileSync(path.join(serveDir, filename), outputBuffer);
|
|
682
|
+
const outputBuffer = isCsv && !effectiveBuffer.subarray(0, 3).equals(UTF8_BOM)
|
|
683
|
+
? Buffer.concat([UTF8_BOM, effectiveBuffer])
|
|
684
|
+
: effectiveBuffer;
|
|
685
|
+
fs.writeFileSync(path.join(serveDir, filename), outputBuffer, { mode: 0o600 });
|
|
539
686
|
messageStore.trackServedFile(filename, ttlMs);
|
|
540
687
|
const url = `https://${config.ngrokDomain}/files/${filename}`;
|
|
541
688
|
const result = {
|
|
542
|
-
url, mimeType, isImage:
|
|
689
|
+
url, mimeType: effectiveMime, isImage: effectiveMime.startsWith("image/"), fileName: effectiveFileName, fileSize: effectiveBuffer.length, expiresIn: formatTtl(ttlMs),
|
|
543
690
|
};
|
|
544
691
|
// For CSV files: generate an HTML table preview with download link
|
|
545
692
|
if (isCsv) {
|
|
@@ -561,4 +708,51 @@ export function storeAndBuildFileUrl(filePath, config, messageStore, ttlMs = DEF
|
|
|
561
708
|
}
|
|
562
709
|
return result;
|
|
563
710
|
}
|
|
711
|
+
// ─── Document Generation Helpers ────────────────────────────────────────────
|
|
712
|
+
/**
|
|
713
|
+
* Sanitize a user-provided title into a safe filename.
|
|
714
|
+
* Strips filesystem-unsafe characters and truncates to 200 chars.
|
|
715
|
+
*/
|
|
716
|
+
export function sanitizeFilename(title, ext) {
|
|
717
|
+
if (!title || !title.trim())
|
|
718
|
+
return `document${ext}`;
|
|
719
|
+
return title
|
|
720
|
+
.replace(/[/\\:*?"<>|]/g, "")
|
|
721
|
+
.replace(/\.\./g, "")
|
|
722
|
+
.trim()
|
|
723
|
+
.slice(0, 200)
|
|
724
|
+
+ ext;
|
|
725
|
+
}
|
|
726
|
+
/**
|
|
727
|
+
* Sanitize an Excel sheet name (max 31 chars, certain chars forbidden).
|
|
728
|
+
* Auto-deduplicates against existing names.
|
|
729
|
+
*/
|
|
730
|
+
export function sanitizeSheetName(name, existing) {
|
|
731
|
+
let clean = name.replace(/[:/\\?*[\]]/g, "").trim().slice(0, 31) || "Sheet";
|
|
732
|
+
let final = clean;
|
|
733
|
+
let i = 2;
|
|
734
|
+
while (existing.has(final)) {
|
|
735
|
+
final = clean.slice(0, 31 - String(i).length - 3) + ` (${i})`;
|
|
736
|
+
i++;
|
|
737
|
+
}
|
|
738
|
+
existing.add(final);
|
|
739
|
+
return final;
|
|
740
|
+
}
|
|
741
|
+
/**
|
|
742
|
+
* Parse a CSV value string, auto-converting numeric strings to numbers.
|
|
743
|
+
* Values starting with '=' are kept as strings (formula markers).
|
|
744
|
+
*/
|
|
745
|
+
export function autoCastCsvValue(value) {
|
|
746
|
+
const trimmed = value.trim();
|
|
747
|
+
if (trimmed === "")
|
|
748
|
+
return "";
|
|
749
|
+
// Formula — keep as string
|
|
750
|
+
if (trimmed.startsWith("="))
|
|
751
|
+
return trimmed;
|
|
752
|
+
// Try numeric conversion
|
|
753
|
+
const num = Number(trimmed);
|
|
754
|
+
if (!isNaN(num) && trimmed !== "")
|
|
755
|
+
return num;
|
|
756
|
+
return trimmed;
|
|
757
|
+
}
|
|
564
758
|
//# sourceMappingURL=toolHelpers.js.map
|