{"version":3,"sources":["../../../src/tools/python/output.ts"],"names":["PythonToolOutput","ToolOutput","FILE_PREFIX","constructor","stdout","stderr","exitCode","outputFiles","register","isEmpty","getTextContent","executionStatus","trim","isImage","filename","some","ext","toLowerCase","endsWith","files","length","map","file","id","join","filter","Boolean","createSnapshot","loadSnapshot","snapshot","Object","assign"],"mappings":";;;;;;AAmBO,MAAMA,yBAAyBC,mBAAAA,CAAAA;EAnBtC;;;;;;;AAoBE,EAAA,OAAOC,WAAc,GAAA,cAAA;AAErBC,EAAAA,WAAAA,CACkBC,MACAC,EAAAA,MAAAA,EACAC,QACAC,EAAAA,WAAAA,GAA4B,EAC5C,EAAA;AACA,IAAK,KAAA,EAAA,EAAA,IALWH,CAAAA,MAAAA,GAAAA,MAAAA,EAAAA,IAAAA,CACAC,MAAAA,GAAAA,MAAAA,EAAAA,IACAC,CAAAA,QAAAA,GAAAA,QAAAA,EAAAA,IAAAA,CACAC,WAAAA,GAAAA,WAAAA;AAGlB;EAEA;AACE,IAAA,IAAA,CAAKC,QAAQ,EAAA;AACf;EAEAC,OAAU,GAAA;AACR,IAAO,OAAA,KAAA;AACT;EAEAC,cAAiB,GAAA;AACf,IAAA,MAAMC,kBACJ,IAAKL,CAAAA,QAAAA,KAAa,IACd,iCACA,GAAA,CAAA,gCAAA,EAAmC,KAAKA,QAAQ,CAAA,CAAA,CAAA;AACtD,IAAA,MAAMF,MAAS,GAAA,IAAA,CAAKA,MAAOQ,CAAAA,IAAAA,EAAS,GAAA,CAAA;;AAA8B,EAAA,IAAA,CAAKR,MAAM;AAAa,MAAA,CAAA,GAAA,IAAA;AAC1F,IAAA,MAAMC,MAAS,GAAA,IAAA,CAAKA,MAAOO,CAAAA,IAAAA,EAAS,GAAA,CAAA;;AAA2B,EAAA,IAAA,CAAKP,MAAM;AAAa,MAAA,CAAA,GAAA,IAAA;AACvF,IAAMQ,MAAAA,OAAAA,2BAAWC,QACf,KAAA;AAAC,MAAA,MAAA;AAAQ,MAAA,MAAA;AAAQ,MAAA,OAAA;AAAS,MAAA,MAAA;AAAQ,MAAA;MAAQC,IAAK,CAAA,CAACC,QAAQF,QAASG,CAAAA,WAAAA,GAAcC,QAASF,CAAAA,GAAAA,CAAAA,CAD1E,EAAA,SAAA,CAAA;AAEhB,IAAA,MAAMG,KAAQ,GAAA,IAAA,CAAKZ,WAAYa,CAAAA,MAAAA,GAC3B,oJACA,GAAA,IAAA,CAAKb,WACFc,CAAAA,GAAAA,CACC,CAACC,IAAAA,KACC,CAAGT,EAAAA,OAAAA,CAAQS,KAAKR,QAAQ,CAAA,GAAI,GAAM,GAAA,EAAA,CAAMQ,CAAAA,EAAAA,IAAAA,CAAKR,QAAQ,CAAA,EAAA,EAAKd,gBAAiBE,CAAAA,WAAW,CAAIoB,CAAAA,EAAAA,IAAAA,CAAKC,EAAE,CAAA,CAAA,CAAG,CAEvGC,CAAAA,IAAAA,CAAK,IAAA,CACR,GAAA,IAAA;AAEJ,IAAO,OAAA;AAACb,MAAAA,eAAAA;AAAiBP,MAAAA,MAAAA;AAAQC,MAAAA,MAAAA;AAAQc,MAAAA;MAAOM,MAAOC,CAAAA,OAAAA,CAASF,CAAAA,IAAAA,CAAK,IAAA,CAAA;AACvE;EAEAG,cAAiB,GAAA;AACf,IAAO,OAAA;AACLvB,MAAAA,MAAAA,EAAQ,IAAKA,CAAAA,MAAAA;AACbC,MAAAA,MAAAA,EAAQ,IAAKA,CAAAA,MAAAA;AACbC,MAAAA,QAAAA,EAAU,IAAKA,CAAAA,QAAAA;AACfC,MAAAA,WAAAA,EAAa,IAAKA,CAAAA;AACpB,KAAA;AACF;AAEAqB,EAAAA,YAAAA,CAAaC,QAAkD,EAAA;AAC7DC,IAAOC,MAAAA,CAAAA,MAAAA,CAAO,MAAMF,QAAAA,CAAAA;AACtB;AACF","file":"output.cjs","sourcesContent":["/**\n * Copyright 2025 IBM Corp.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ToolOutput } from \"@/tools/base.js\";\nimport { PythonFile } from \"@/tools/python/storage.js\";\n\nexport class PythonToolOutput extends ToolOutput {\n  static FILE_PREFIX = \"urn:bee:file\";\n\n  constructor(\n    public readonly stdout: string,\n    public readonly stderr: string,\n    public readonly exitCode?: number,\n    public readonly outputFiles: PythonFile[] = [],\n  ) {\n    super();\n  }\n\n  static {\n    this.register();\n  }\n\n  isEmpty() {\n    return false;\n  }\n\n  getTextContent() {\n    const executionStatus =\n      this.exitCode === 0\n        ? \"The code executed successfully.\"\n        : `The code exited with error code ${this.exitCode}.`;\n    const stdout = this.stdout.trim() ? `Standard output: \\n\\`\\`\\`\\n${this.stdout}\\n\\`\\`\\`` : null;\n    const stderr = this.stderr.trim() ? `Error output: \\n\\`\\`\\`\\n${this.stderr}\\n\\`\\`\\`` : null;\n    const isImage = (filename: string) =>\n      [\".png\", \".jpg\", \".jpeg\", \".gif\", \".bmp\"].some((ext) => filename.toLowerCase().endsWith(ext));\n    const files = this.outputFiles.length\n      ? \"The following files were created or modified. The user does not see them yet. To present a file to the user, send them the link below, verbatim:\\n\" +\n        this.outputFiles\n          .map(\n            (file) =>\n              `${isImage(file.filename) ? \"!\" : \"\"}[${file.filename}](${PythonToolOutput.FILE_PREFIX}:${file.id})`,\n          )\n          .join(\"\\n\")\n      : null;\n\n    return [executionStatus, stdout, stderr, files].filter(Boolean).join(\"\\n\");\n  }\n\n  createSnapshot() {\n    return {\n      stdout: this.stdout,\n      stderr: this.stderr,\n      exitCode: this.exitCode,\n      outputFiles: this.outputFiles,\n    };\n  }\n\n  loadSnapshot(snapshot: ReturnType<typeof this.createSnapshot>) {\n    Object.assign(this, snapshot);\n  }\n}\n"]}