@daytonaio/sdk 0.10.5 → 0.11.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/Daytona.js CHANGED
@@ -62,23 +62,13 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
62
62
  }) : function(o, v) {
63
63
  o["default"] = v;
64
64
  });
65
- var __importStar = (this && this.__importStar) || (function () {
66
- var ownKeys = function(o) {
67
- ownKeys = Object.getOwnPropertyNames || function (o) {
68
- var ar = [];
69
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
70
- return ar;
71
- };
72
- return ownKeys(o);
73
- };
74
- return function (mod) {
75
- if (mod && mod.__esModule) return mod;
76
- var result = {};
77
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
78
- __setModuleDefault(result, mod);
79
- return result;
80
- };
81
- })();
65
+ var __importStar = (this && this.__importStar) || function (mod) {
66
+ if (mod && mod.__esModule) return mod;
67
+ var result = {};
68
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
69
+ __setModuleDefault(result, mod);
70
+ return result;
71
+ };
82
72
  Object.defineProperty(exports, "__esModule", { value: true });
83
73
  exports.Daytona = exports.CodeLanguage = void 0;
84
74
  const SandboxPythonCodeToolbox_1 = require("./code-toolbox/SandboxPythonCodeToolbox");
package/dist/Process.d.ts CHANGED
@@ -33,8 +33,9 @@
33
33
  * // Clean up
34
34
  * await sandbox.process.deleteSession(sessionId);
35
35
  */
36
- import { Command, ExecuteResponse, Session, SessionExecuteRequest, SessionExecuteResponse, ToolboxApi } from '@daytonaio/api-client';
36
+ import { Command, Session, SessionExecuteRequest, SessionExecuteResponse, ToolboxApi } from '@daytonaio/api-client';
37
37
  import { SandboxCodeToolbox, SandboxInstance } from './Sandbox';
38
+ import { ExecuteResponse } from './types/ExecuteResponse';
38
39
  /**
39
40
  * Parameters for code execution
40
41
  */
@@ -82,6 +83,7 @@ export declare class Process {
82
83
  *
83
84
  * @param {string} code - Code to execute
84
85
  * @param {CodeRunParams} params - Parameters for code execution
86
+ * @param {number} [timeout] - Maximum time in seconds to wait for execution to complete
85
87
  * @returns {Promise<ExecuteResponse>} Code execution results containing:
86
88
  * - exitCode: The execution's exit status
87
89
  * - result: Standard output from the code
@@ -94,6 +96,28 @@ export declare class Process {
94
96
  * console.log(\`Sum: \${x + y}\`);
95
97
  * `);
96
98
  * console.log(response.result); // Prints: Sum: 30
99
+ *
100
+ * @example
101
+ * // Run Python code with matplotlib
102
+ * const response = await process.codeRun(`
103
+ * import matplotlib.pyplot as plt
104
+ * import numpy as np
105
+ *
106
+ * x = np.linspace(0, 10, 100)
107
+ * y = np.sin(x)
108
+ *
109
+ * plt.plot(x, y)
110
+ * plt.title('Sine Wave')
111
+ * plt.xlabel('x')
112
+ * plt.ylabel('sin(x)')
113
+ * plt.show()
114
+ * `);
115
+ *
116
+ * // Access chart artifacts
117
+ * if (response.artifacts?.charts) {
118
+ * const chart = response.artifacts.charts[0];
119
+ * console.log(`Chart title: ${chart.title}`);
120
+ * }
97
121
  */
98
122
  codeRun(code: string, params?: CodeRunParams, timeout?: number): Promise<ExecuteResponse>;
99
123
  /**
package/dist/Process.js CHANGED
@@ -36,6 +36,7 @@
36
36
  */
37
37
  Object.defineProperty(exports, "__esModule", { value: true });
38
38
  exports.Process = exports.CodeRunParams = void 0;
39
+ const ArtifactParser_1 = require("./utils/ArtifactParser");
39
40
  /**
40
41
  * Parameters for code execution
41
42
  */
@@ -77,13 +78,22 @@ class Process {
77
78
  timeout,
78
79
  cwd,
79
80
  });
80
- return response.data;
81
+ // console.log(response)
82
+ // Parse artifacts from the output
83
+ const artifacts = ArtifactParser_1.ArtifactParser.parseArtifacts(response.data.result);
84
+ // Return enhanced response with parsed artifacts
85
+ return {
86
+ ...response.data,
87
+ result: artifacts.stdout,
88
+ artifacts,
89
+ };
81
90
  }
82
91
  /**
83
92
  * Executes code in the Sandbox using the appropriate language runtime.
84
93
  *
85
94
  * @param {string} code - Code to execute
86
95
  * @param {CodeRunParams} params - Parameters for code execution
96
+ * @param {number} [timeout] - Maximum time in seconds to wait for execution to complete
87
97
  * @returns {Promise<ExecuteResponse>} Code execution results containing:
88
98
  * - exitCode: The execution's exit status
89
99
  * - result: Standard output from the code
@@ -96,11 +106,32 @@ class Process {
96
106
  * console.log(\`Sum: \${x + y}\`);
97
107
  * `);
98
108
  * console.log(response.result); // Prints: Sum: 30
109
+ *
110
+ * @example
111
+ * // Run Python code with matplotlib
112
+ * const response = await process.codeRun(`
113
+ * import matplotlib.pyplot as plt
114
+ * import numpy as np
115
+ *
116
+ * x = np.linspace(0, 10, 100)
117
+ * y = np.sin(x)
118
+ *
119
+ * plt.plot(x, y)
120
+ * plt.title('Sine Wave')
121
+ * plt.xlabel('x')
122
+ * plt.ylabel('sin(x)')
123
+ * plt.show()
124
+ * `);
125
+ *
126
+ * // Access chart artifacts
127
+ * if (response.artifacts?.charts) {
128
+ * const chart = response.artifacts.charts[0];
129
+ * console.log(`Chart title: ${chart.title}`);
130
+ * }
99
131
  */
100
132
  async codeRun(code, params, timeout) {
101
133
  const runCommand = this.codeToolbox.getRunCommand(code, params);
102
- const response = await this.executeCommand(runCommand, undefined, timeout);
103
- return response;
134
+ return this.executeCommand(runCommand, undefined, timeout);
104
135
  }
105
136
  /**
106
137
  * Creates a new long-running background session in the Sandbox.
@@ -3,4 +3,10 @@ import { CodeRunParams } from '../Process';
3
3
  export declare class SandboxPythonCodeToolbox implements SandboxCodeToolbox {
4
4
  getDefaultImage(): string;
5
5
  getRunCommand(code: string, params?: CodeRunParams): string;
6
+ /**
7
+ * Checks if matplotlib is imported in the given Python code string.
8
+ * @param codeString Python code as a string
9
+ * @returns True if matplotlib is imported, false otherwise
10
+ */
11
+ private static isMatplotlibImported;
6
12
  }
@@ -6,14 +6,356 @@ class SandboxPythonCodeToolbox {
6
6
  return 'daytonaio/sdk-python:v0.49.0-2';
7
7
  }
8
8
  getRunCommand(code, params) {
9
- const base64Code = Buffer.from(code).toString('base64');
9
+ // Encode the provided code in base64
10
+ let base64Code = Buffer.from(code).toString('base64');
11
+ // Override plt.show() method if matplotlib is imported
12
+ if (SandboxPythonCodeToolbox.isMatplotlibImported(code)) {
13
+ let code_wrapper = Buffer.from(PYTHON_CODE_WRAPPER, 'base64').toString('utf-8');
14
+ code_wrapper = code_wrapper.replace('{encoded_code}', base64Code);
15
+ base64Code = Buffer.from(code_wrapper).toString('base64');
16
+ }
17
+ // Build environment variables string
10
18
  const envVars = (params === null || params === void 0 ? void 0 : params.env)
11
19
  ? Object.entries(params.env)
12
20
  .map(([key, value]) => `${key}='${value}'`)
13
21
  .join(' ')
14
22
  : '';
23
+ // Build command-line arguments string
15
24
  const argv = (params === null || params === void 0 ? void 0 : params.argv) ? params.argv.join(' ') : '';
16
- return `sh -c '${envVars} python3 -c "exec(__import__(\\\"base64\\\").b64decode(\\\"${base64Code}\\\").decode())" ${argv}'`;
25
+ // Execute the bootstrapper code directly
26
+ // Use -u flag to ensure unbuffered output for real-time error reporting
27
+ return `sh -c '${envVars} python3 -u -c "exec(__import__(\\\"base64\\\").b64decode(\\\"${base64Code}\\\").decode())" ${argv}'`;
28
+ }
29
+ /**
30
+ * Checks if matplotlib is imported in the given Python code string.
31
+ * @param codeString Python code as a string
32
+ * @returns True if matplotlib is imported, false otherwise
33
+ */
34
+ static isMatplotlibImported(codeString) {
35
+ // Regex patterns for different import styles
36
+ const patterns = [
37
+ // Standard imports
38
+ /^[^#]*import\s+matplotlib/m,
39
+ /^[^#]*from\s+matplotlib/m,
40
+ // Dynamic imports
41
+ /^[^#]*__import__\s*\(\s*['"]matplotlib['"]/m,
42
+ /^[^#]*importlib\.import_module\s*\(\s*['"]matplotlib['"]/m,
43
+ // Other dynamic loading patterns
44
+ /^[^#]*loader\.load_module\s*\(\s*['"]matplotlib['"]/m,
45
+ /^[^#]*sys\.modules\[['"]matplotlib['"]\]/m,
46
+ ];
47
+ // Check each pattern
48
+ for (const pattern of patterns) {
49
+ if (pattern.test(codeString)) {
50
+ return true;
51
+ }
52
+ }
53
+ return false;
17
54
  }
18
55
  }
19
56
  exports.SandboxPythonCodeToolbox = SandboxPythonCodeToolbox;
57
+ const PYTHON_CODE_WRAPPER = `
58
+ aW1wb3J0IGJhc2U2NAppbXBvcnQgZGF0ZXRpbWUKaW1wb3J0IGhhc2hsaWIKaW1wb3J0IGlvCmlt
59
+ cG9ydCBqc29uCmltcG9ydCBsaW5lY2FjaGUKaW1wb3J0IHN5cwppbXBvcnQgdHJhY2ViYWNrCmlt
60
+ cG9ydCB0eXBlcwpmcm9tIGltcG9ydGxpYi5hYmMgaW1wb3J0IExvYWRlciwgTWV0YVBhdGhGaW5k
61
+ ZXIKZnJvbSBpbXBvcnRsaWIudXRpbCBpbXBvcnQgZmluZF9zcGVjLCBzcGVjX2Zyb21fbG9hZGVy
62
+ CgojIEdsb2JhbCB2YXJpYWJsZXMgdG8gaG9sZCBpbXBvcnRlZCBsaWJyYXJpZXMgaWYgbmVlZGVk
63
+ Cm5wID0gTm9uZQptcGwgPSBOb25lCnBpbF9pbWcgPSBOb25lCgoKcGx0X3BhdGNoZWQgPSBGYWxz
64
+ ZQpwcm9jZXNzZWRfZmlndXJlcyA9IHNldCgpCgoKZGVmIF9wYXJzZV9wb2ludChwb2ludCk6CiAg
65
+ ICBpZiBpc2luc3RhbmNlKHBvaW50LCBkYXRldGltZS5kYXRlKToKICAgICAgICByZXR1cm4gcG9p
66
+ bnQuaXNvZm9ybWF0KCkKICAgIGlmIGlzaW5zdGFuY2UocG9pbnQsIG5wLmRhdGV0aW1lNjQpOgog
67
+ ICAgICAgIHJldHVybiBwb2ludC5hc3R5cGUoImRhdGV0aW1lNjRbc10iKS5hc3R5cGUoc3RyKQog
68
+ ICAgcmV0dXJuIHBvaW50CgoKZGVmIF9pc19ncmlkX2xpbmUobGluZTogYW55KSAtPiBib29sOgog
69
+ ICAgeF9kYXRhID0gbGluZS5nZXRfeGRhdGEoKQogICAgaWYgbGVuKHhfZGF0YSkgIT0gMjoKICAg
70
+ ICAgICByZXR1cm4gRmFsc2UKCiAgICB5X2RhdGEgPSBsaW5lLmdldF95ZGF0YSgpCiAgICBpZiBs
71
+ ZW4oeV9kYXRhKSAhPSAyOgogICAgICAgIHJldHVybiBGYWxzZQoKICAgIGlmIHhfZGF0YVswXSA9
72
+ PSB4X2RhdGFbMV0gb3IgeV9kYXRhWzBdID09IHlfZGF0YVsxXToKICAgICAgICByZXR1cm4gVHJ1
73
+ ZQoKICAgIHJldHVybiBGYWxzZQoKCmRlZiBfZXh0cmFjdF9saW5lX2NoYXJ0X2VsZW1lbnRzKGF4
74
+ KToKICAgIGVsZW1lbnRzID0gW10KCiAgICBmb3IgbGluZSBpbiBheC5nZXRfbGluZXMoKToKICAg
75
+ ICAgICBpZiBfaXNfZ3JpZF9saW5lKGxpbmUpOgogICAgICAgICAgICBjb250aW51ZQogICAgICAg
76
+ IGxhYmVsID0gbGluZS5nZXRfbGFiZWwoKQogICAgICAgIHBvaW50cyA9IFtfcGFyc2VfcG9pbnQo
77
+ KHgsIHkpKSBmb3IgeCwgeSBpbiB6aXAobGluZS5nZXRfeGRhdGEoKSwgbGluZS5nZXRfeWRhdGEo
78
+ KSldCgogICAgICAgIGVsZW1lbnQgPSB7ImxhYmVsIjogbGFiZWwsICJwb2ludHMiOiBwb2ludHN9
79
+ CiAgICAgICAgZWxlbWVudHMuYXBwZW5kKGVsZW1lbnQpCgogICAgcmV0dXJuIGVsZW1lbnRzCgoK
80
+ ZGVmIF9leHRyYWN0X3NjYXR0ZXJfY2hhcnRfZWxlbWVudHMoYXgpOgogICAgZWxlbWVudHMgPSBb
81
+ XQoKICAgIGZvciBjb2xsZWN0aW9uIGluIGF4LmNvbGxlY3Rpb25zOgogICAgICAgIHBvaW50cyA9
82
+ IFtfcGFyc2VfcG9pbnQoKHgsIHkpKSBmb3IgeCwgeSBpbiBjb2xsZWN0aW9uLmdldF9vZmZzZXRz
83
+ KCldCiAgICAgICAgZWxlbWVudCA9IHsibGFiZWwiOiBjb2xsZWN0aW9uLmdldF9sYWJlbCgpLCAi
84
+ cG9pbnRzIjogcG9pbnRzfQogICAgICAgIGVsZW1lbnRzLmFwcGVuZChlbGVtZW50KQoKICAgIHJl
85
+ dHVybiBlbGVtZW50cwoKCmRlZiBfZXh0cmFjdF9iYXJfY2hhcnRfZWxlbWVudHMoYXgpOgogICAg
86
+ ZWxlbWVudHMgPSBbXQogICAgY2hhbmdlX29yaWVudGF0aW9uID0gRmFsc2UKCiAgICBmb3IgY29u
87
+ dGFpbmVyIGluIGF4LmNvbnRhaW5lcnM6CiAgICAgICAgaGVpZ2h0cyA9IFtyZWN0LmdldF9oZWln
88
+ aHQoKSBmb3IgcmVjdCBpbiBjb250YWluZXJdCiAgICAgICAgaWYgYWxsKGhlaWdodCA9PSBoZWln
89
+ aHRzWzBdIGZvciBoZWlnaHQgaW4gaGVpZ2h0cyk6CiAgICAgICAgICAgICMgdmVydGljYWwgYmFy
90
+ cwogICAgICAgICAgICBjaGFuZ2Vfb3JpZW50YXRpb24gPSBUcnVlCiAgICAgICAgICAgIGxhYmVs
91
+ cyA9IFtsYWJlbC5nZXRfdGV4dCgpIGZvciBsYWJlbCBpbiBheC5nZXRfeXRpY2tsYWJlbHMoKV0K
92
+ ICAgICAgICAgICAgdmFsdWVzID0gW3JlY3QuZ2V0X3dpZHRoKCkgZm9yIHJlY3QgaW4gY29udGFp
93
+ bmVyXQogICAgICAgIGVsc2U6CiAgICAgICAgICAgICMgaG9yaXpvbnRhbCBiYXJzCiAgICAgICAg
94
+ ICAgIGxhYmVscyA9IFtsYWJlbC5nZXRfdGV4dCgpIGZvciBsYWJlbCBpbiBheC5nZXRfeHRpY2ts
95
+ YWJlbHMoKV0KICAgICAgICAgICAgdmFsdWVzID0gaGVpZ2h0cwogICAgICAgIGZvciBsYWJlbCwg
96
+ dmFsdWUgaW4gemlwKGxhYmVscywgdmFsdWVzKToKICAgICAgICAgICAgZWxlbWVudCA9IHsibGFi
97
+ ZWwiOiBsYWJlbCwgImdyb3VwIjogY29udGFpbmVyLmdldF9sYWJlbCgpLCAidmFsdWUiOiB2YWx1
98
+ ZX0KICAgICAgICAgICAgZWxlbWVudHMuYXBwZW5kKGVsZW1lbnQpCgogICAgcmV0dXJuIGVsZW1l
99
+ bnRzLCBjaGFuZ2Vfb3JpZW50YXRpb24KCgpkZWYgX2V4dHJhY3RfcGllX2NoYXJ0X2VsZW1lbnRz
100
+ KGF4KToKICAgIGVsZW1lbnRzID0gW10KCiAgICB3ZWRnZXMgPSBbcGF0Y2ggZm9yIHBhdGNoIGlu
101
+ IGF4LnBhdGNoZXMgaWYgaXNpbnN0YW5jZShwYXRjaCwgbXBsLnBhdGNoZXMuV2VkZ2UpXQogICAg
102
+ aWYgbGVuKHdlZGdlcykgPT0gMDoKICAgICAgICByZXR1cm4gZWxlbWVudHMKCiAgICB0ZXh0cyA9
103
+ IFt0ZXh0X29iai5nZXRfdGV4dCgpIGZvciB0ZXh0X29iaiBpbiBheC50ZXh0c10KCiAgICBsYWJl
104
+ bHMgPSBbXQogICAgYXV0b3BjdHMgPSBbXQoKICAgIGlmIGxlbih0ZXh0cykgPT0gMiAqIGxlbih3
105
+ ZWRnZXMpOgogICAgICAgIGxhYmVscyA9IFt0ZXh0c1tpXSBmb3IgaSBpbiByYW5nZSgwLCAyICog
106
+ bGVuKHdlZGdlcyksIDIpXQogICAgICAgIGF1dG9wY3RzID0gW3RleHRzW2ldIGZvciBpIGluIHJh
107
+ bmdlKDEsIDIgKiBsZW4od2VkZ2VzKSwgMildCiAgICBlbHNlOgogICAgICAgIGxhYmVscyA9IHRl
108
+ eHRzWzogbGVuKHdlZGdlcyldCgogICAgZm9yIGlkeCwgd2VkZ2UgaW4gZW51bWVyYXRlKHdlZGdl
109
+ cyk6CiAgICAgICAgZWxlbWVudCA9IHsKICAgICAgICAgICAgImxhYmVsIjogbGFiZWxzW2lkeF0s
110
+ CiAgICAgICAgICAgICJhbmdsZSI6IGFicyh3ZWRnZS50aGV0YTIgLSB3ZWRnZS50aGV0YTEpLAog
111
+ ICAgICAgICAgICAicmFkaXVzIjogd2VkZ2UuciwKICAgICAgICAgICAgImF1dG9wY3QiOiBhdXRv
112
+ cGN0c1tpZHhdIGlmIGF1dG9wY3RzIGFuZCBsZW4oYXV0b3BjdHMpID4gaWR4IGVsc2UgTm9uZSwK
113
+ ICAgICAgICB9CiAgICAgICAgZWxlbWVudHMuYXBwZW5kKGVsZW1lbnQpCgogICAgcmV0dXJuIGVs
114
+ ZW1lbnRzCgoKIyBweWxpbnQ6IGRpc2FibGU9dG9vLW1hbnktYnJhbmNoZXMKZGVmIF9leHRyYWN0
115
+ X2JveF9jaGFydF9lbGVtZW50cyhheCk6CiAgICBjaGFuZ2Vfb3JpZW50YXRpb24gPSBGYWxzZQoK
116
+ ICAgIHh0aWNrbGFiZWxzID0gW2xhYmVsLmdldF90ZXh0KCkgZm9yIGxhYmVsIGluIGF4LmdldF94
117
+ dGlja2xhYmVscygpXQogICAgYm94ZXMgPSBbXQogICAgZm9yIGxhYmVsLCBib3ggaW4gemlwKHh0
118
+ aWNrbGFiZWxzLCBheC5wYXRjaGVzKToKICAgICAgICB2ZXJ0aWNlcyA9IGJveC5nZXRfcGF0aCgp
119
+ LnZlcnRpY2VzCiAgICAgICAgeF92ZXJ0aWNlcyA9IGxpc3QodmVydGljZXNbOiwgMF0pCiAgICAg
120
+ ICAgeV92ZXJ0aWNlcyA9IGxpc3QodmVydGljZXNbOiwgMV0pCiAgICAgICAgeCA9IG1pbih4X3Zl
121
+ cnRpY2VzKQogICAgICAgIHkgPSBtaW4oeV92ZXJ0aWNlcykKCiAgICAgICAgYm94ZXMuYXBwZW5k
122
+ KAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAieCI6IHgsCiAgICAgICAgICAgICAgICAi
123
+ eSI6IHksCiAgICAgICAgICAgICAgICAibGFiZWwiOiBsYWJlbCwKICAgICAgICAgICAgICAgICJ3
124
+ aWR0aCI6IG1heCh4X3ZlcnRpY2VzKSAtIHgsCiAgICAgICAgICAgICAgICAiaGVpZ2h0IjogbWF4
125
+ KHlfdmVydGljZXMpIC0geSwKICAgICAgICAgICAgICAgICJvdXRsaWVycyI6IFtdLAogICAgICAg
126
+ ICAgICB9CiAgICAgICAgKQoKICAgIG9yaWVudGF0aW9uID0gImhvcml6b250YWwiCiAgICBpZiBh
127
+ bGwoYm94WyJoZWlnaHQiXSA9PSBib3hlc1swXVsiaGVpZ2h0Il0gZm9yIGJveCBpbiBib3hlcyk6
128
+ CiAgICAgICAgb3JpZW50YXRpb24gPSAidmVydGljYWwiCgogICAgaWYgb3JpZW50YXRpb24gPT0g
129
+ InZlcnRpY2FsIjoKICAgICAgICBjaGFuZ2Vfb3JpZW50YXRpb24gPSBUcnVlCiAgICAgICAgZm9y
130
+ IGJveCBpbiBib3hlczoKICAgICAgICAgICAgYm94WyJ4Il0sIGJveFsieSJdID0gYm94WyJ5Il0s
131
+ IGJveFsieCJdCiAgICAgICAgICAgIGJveFsid2lkdGgiXSwgYm94WyJoZWlnaHQiXSA9IGJveFsi
132
+ aGVpZ2h0Il0sIGJveFsid2lkdGgiXQoKICAgIGZvciBsaW5lIGluIGF4LmxpbmVzOgogICAgICAg
133
+ IHhkYXRhID0gbGluZS5nZXRfeGRhdGEoKQogICAgICAgIHlkYXRhID0gbGluZS5nZXRfeWRhdGEo
134
+ KQoKICAgICAgICBpZiBvcmllbnRhdGlvbiA9PSAidmVydGljYWwiOgogICAgICAgICAgICB4ZGF0
135
+ YSwgeWRhdGEgPSB5ZGF0YSwgeGRhdGEKCiAgICAgICAgaWYgbGVuKHhkYXRhKSA8PSAxIG9yIGxl
136
+ bih5ZGF0YSkgIT0gMjoKICAgICAgICAgICAgY29udGludWUKCiAgICAgICAgZm9yIGJveCBpbiBi
137
+ b3hlczoKICAgICAgICAgICAgaWYgYm94WyJ4Il0gPD0geGRhdGFbMF0gPD0geGRhdGFbMV0gPD0g
138
+ Ym94WyJ4Il0gKyBib3hbIndpZHRoIl06CiAgICAgICAgICAgICAgICAjIEhvcml6b250YWwgbGlu
139
+ ZSAobWVkaWFuIG9yIGNhcCkKICAgICAgICAgICAgICAgIGlmIGFicyh5ZGF0YVswXSAtIHlkYXRh
140
+ WzFdKSA8IDAuMDAxIGFuZCBib3hbInkiXSA8PSB5ZGF0YVswXSA8PSBib3hbInkiXSArIGJveFsi
141
+ aGVpZ2h0Il06CiAgICAgICAgICAgICAgICAgICAgYm94WyJtZWRpYW4iXSA9IHlkYXRhWzBdCiAg
142
+ ICAgICAgICAgICAgICAjIFZlcnRpY2FsIGxpbmUgKHdoaXNrZXJzKQogICAgICAgICAgICAgICAg
143
+ ZWxpZiBhYnMoeGRhdGFbMF0gLSB4ZGF0YVsxXSkgPCAwLjAwMToKICAgICAgICAgICAgICAgICAg
144
+ ICB5X21pbiA9IG1pbih5ZGF0YSkKICAgICAgICAgICAgICAgICAgICB5X21heCA9IG1heCh5ZGF0
145
+ YSkKCiAgICAgICAgICAgICAgICAgICAgIyBJZiBhdHRhY2hlZCB0byBib3R0b20gb2YgYm94CiAg
146
+ ICAgICAgICAgICAgICAgICAgaWYgYWJzKHlfbWF4IC0gYm94WyJ5Il0pIDwgMC4wMDE6CiAgICAg
147
+ ICAgICAgICAgICAgICAgICAgIGJveFsid2hpc2tlcl9sb3dlciJdID0geV9taW4KCiAgICAgICAg
148
+ ICAgICAgICAgICAgIyBJZiBhdHRhY2hlZCB0byB0b3Agb2YgYm94CiAgICAgICAgICAgICAgICAg
149
+ ICAgZWxpZiBhYnMoeV9taW4gLSAoYm94WyJ5Il0gKyBib3hbImhlaWdodCJdKSkgPCAwLjAwMToK
150
+ ICAgICAgICAgICAgICAgICAgICAgICAgYm94WyJ3aGlza2VyX3VwcGVyIl0gPSB5X21heAogICAg
151
+ ICAgICAgICAgICAgYnJlYWsKCiAgICBvdXRsaWVyX2NhbmRpZGF0ZXMgPSBbXQoKICAgICMgQ2hl
152
+ Y2sgZm9yIGFueSBtYXJrZXJzIGluIGFsbCBhcnRpc3RzCiAgICBmb3IgYXJ0aXN0IGluIGF4Lmdl
153
+ dF9jaGlsZHJlbigpOgogICAgICAgIGlmIGhhc2F0dHIoYXJ0aXN0LCAiZ2V0X3hkYXRhIikgYW5k
154
+ IGhhc2F0dHIoYXJ0aXN0LCAiZ2V0X3lkYXRhIik6CiAgICAgICAgICAgIHRyeToKICAgICAgICAg
155
+ ICAgICAgIHhkYXRhID0gYXJ0aXN0LmdldF94ZGF0YSgpCiAgICAgICAgICAgICAgICB5ZGF0YSA9
156
+ IGFydGlzdC5nZXRfeWRhdGEoKQoKICAgICAgICAgICAgICAgIGlmIG9yaWVudGF0aW9uID09ICJ2
157
+ ZXJ0aWNhbCI6CiAgICAgICAgICAgICAgICAgICAgeGRhdGEsIHlkYXRhID0geWRhdGEsIHhkYXRh
158
+ CgogICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh4ZGF0YSwgKGxpc3QsIG5wLm5kYXJyYXkp
159
+ KSBhbmQgaXNpbnN0YW5jZSh5ZGF0YSwgKGxpc3QsIG5wLm5kYXJyYXkpKToKICAgICAgICAgICAg
160
+ ICAgICAgICBmb3IgaSBpbiByYW5nZShtaW4obGVuKHhkYXRhKSwgbGVuKHlkYXRhKSkpOgogICAg
161
+ ICAgICAgICAgICAgICAgICAgICBvdXRsaWVyX2NhbmRpZGF0ZXMuYXBwZW5kKChmbG9hdCh4ZGF0
162
+ YVtpXSksIGZsb2F0KHlkYXRhW2ldKSkpCiAgICAgICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAg
163
+ ICAgIHBhc3MKCiAgICAjIEFzc2lnbiBwb2ludHMgdG8gYm94ZXMgYW5kIGRldGVybWluZSBpZiB0
164
+ aGV5J3JlIG91dGxpZXJzCiAgICBmb3IgeCwgeSBpbiBvdXRsaWVyX2NhbmRpZGF0ZXM6CiAgICAg
165
+ ICAgZm9yIGJveCBpbiBib3hlczoKICAgICAgICAgICAgaWYgYm94WyJ4Il0gPD0geCA8PSBib3hb
166
+ IngiXSArIGJveFsid2lkdGgiXToKICAgICAgICAgICAgICAgIGJveF9jZW50ZXIgPSBib3hbIngi
167
+ XSArIGJveFsid2lkdGgiXSAvIDIKICAgICAgICAgICAgICAgIGlmIGFicyh4IC0gYm94X2NlbnRl
168
+ cikgPCAwLjAwMToKICAgICAgICAgICAgICAgICAgICB5X21pbiA9IGJveFsieSJdCiAgICAgICAg
169
+ ICAgICAgICAgICAgeV9tYXggPSBib3hbInkiXSArIGJveFsiaGVpZ2h0Il0KICAgICAgICAgICAg
170
+ ICAgICAgICBpZiBib3guZ2V0KCJ3aGlza2VyX2xvd2VyIiwgTm9uZSk6CiAgICAgICAgICAgICAg
171
+ ICAgICAgICAgIHlfbWluID0gYm94WyJ3aGlza2VyX2xvd2VyIl0KICAgICAgICAgICAgICAgICAg
172
+ ICBpZiBib3guZ2V0KCJ3aGlza2VyX3VwcGVyIiwgTm9uZSk6CiAgICAgICAgICAgICAgICAgICAg
173
+ ICAgIHlfbWF4ID0gYm94WyJ3aGlza2VyX3VwcGVyIl0KICAgICAgICAgICAgICAgICAgICBpZiB5
174
+ IDwgeV9taW4gb3IgeSA+IHlfbWF4OgogICAgICAgICAgICAgICAgICAgICAgICBib3hbIm91dGxp
175
+ ZXJzIl0uYXBwZW5kKHkpCiAgICAgICAgICAgICAgICBicmVhawoKICAgIHJldHVybiBbCiAgICAg
176
+ ICAgewogICAgICAgICAgICAibGFiZWwiOiBib3hbImxhYmVsIl0sCiAgICAgICAgICAgICJtaW4i
177
+ OiBib3guZ2V0KCJ3aGlza2VyX2xvd2VyIiwgTm9uZSksCiAgICAgICAgICAgICJmaXJzdF9xdWFy
178
+ dGlsZSI6IGJveFsieSJdLAogICAgICAgICAgICAibWVkaWFuIjogYm94LmdldCgibWVkaWFuIiwg
179
+ Tm9uZSksCiAgICAgICAgICAgICJ0aGlyZF9xdWFydGlsZSI6IGJveFsieSJdICsgYm94WyJoZWln
180
+ aHQiXSwKICAgICAgICAgICAgIm1heCI6IGJveC5nZXQoIndoaXNrZXJfdXBwZXIiLCBOb25lKSwK
181
+ ICAgICAgICAgICAgIm91dGxpZXJzIjogYm94WyJvdXRsaWVycyJdLAogICAgICAgIH0KICAgICAg
182
+ ICBmb3IgYm94IGluIGJveGVzCiAgICBdLCBjaGFuZ2Vfb3JpZW50YXRpb24KCgpkZWYgX3NhdmVf
183
+ ZmlndXJlX2FzX2Jhc2U2NChmaWcsIGJib3hfaW5jaGVzPSJ0aWdodCIsIGRwaT0xMDApOgogICAg
184
+ IyBGaXJzdCBzYXZlIHdpdGggbWF0cGxvdGxpYgogICAgcG5nX2J1ZmZlciA9IGlvLkJ5dGVzSU8o
185
+ KQogICAgZmlnLnNhdmVmaWcocG5nX2J1ZmZlciwgZm9ybWF0PSJwbmciLCBiYm94X2luY2hlcz1i
186
+ Ym94X2luY2hlcywgZHBpPWRwaSkKICAgIHBuZ19idWZmZXIuc2VlaygwKQoKICAgICMgT3BlbiB3
187
+ aXRoIFBJTCBhbmQgYXBwbHkgbWF4aW11bSBjb21wcmVzc2lvbgogICAgd2l0aCBwaWxfaW1nLm9w
188
+ ZW4ocG5nX2J1ZmZlcikgYXMgaW1nOgogICAgICAgIG9wdGltaXplZF9idWZmZXIgPSBpby5CeXRl
189
+ c0lPKCkKICAgICAgICBpbWcuc2F2ZShvcHRpbWl6ZWRfYnVmZmVyLCBmb3JtYXQ9InBuZyIsIG9w
190
+ dGltaXplPVRydWUsIHF1YWxpdHk9MTAwLCBjb21wcmVzc19sZXZlbD05KQogICAgICAgIG9wdGlt
191
+ aXplZF9idWZmZXIuc2VlaygwKQogICAgICAgIHJldHVybiBiYXNlNjQuYjY0ZW5jb2RlKG9wdGlt
192
+ aXplZF9idWZmZXIuZ2V0dmFsdWUoKSkuZGVjb2RlKCJ1dGYtOCIpCgoKZGVmIF9nZXRfZmlndXJl
193
+ X2hhc2goZmlnKToKICAgIHBuZ19idWZmZXIgPSBpby5CeXRlc0lPKCkKICAgIGZpZy5zYXZlZmln
194
+ KHBuZ19idWZmZXIsIGZvcm1hdD0icG5nIiwgZHBpPTUwKQogICAgcmV0dXJuIGhhc2hsaWIubWQ1
195
+ KHBuZ19idWZmZXIuZ2V0dmFsdWUoKSkuaGV4ZGlnZXN0KCkKCgpkZWYgX2dldF9jaGFydF90eXBl
196
+ KGF4KToKICAgIG9iamVjdHMgPSBsaXN0KAogICAgICAgIGZpbHRlcigKICAgICAgICAgICAgbGFt
197
+ YmRhIG9iajogbm90IGlzaW5zdGFuY2Uob2JqLCBtcGwudGV4dC5UZXh0KSBhbmQgbm90IGlzaW5z
198
+ dGFuY2Uob2JqLCBtcGwucGF0Y2hlcy5TaGFkb3cpLAogICAgICAgICAgICBheC5fY2hpbGRyZW4s
199
+ ICAjIHB5bGludDogZGlzYWJsZT1wcm90ZWN0ZWQtYWNjZXNzCiAgICAgICAgKQogICAgKQoKICAg
200
+ ICMgQ2hlY2sgZm9yIExpbmUgcGxvdHMKICAgIGlmIGFsbChpc2luc3RhbmNlKGxpbmUsIG1wbC5s
201
+ aW5lcy5MaW5lMkQpIGZvciBsaW5lIGluIG9iamVjdHMpOgogICAgICAgIHJldHVybiAibGluZSIK
202
+ CiAgICBpZiBhbGwoaXNpbnN0YW5jZShib3hfb3JfcGF0aCwgKG1wbC5wYXRjaGVzLlBhdGhQYXRj
203
+ aCwgbXBsLmxpbmVzLkxpbmUyRCkpIGZvciBib3hfb3JfcGF0aCBpbiBvYmplY3RzKToKICAgICAg
204
+ ICByZXR1cm4gImJveF9hbmRfd2hpc2tlciIKCiAgICBmaWx0ZXJlZCA9IFtdCiAgICBmb3Igb2Jq
205
+ IGluIG9iamVjdHM6CiAgICAgICAgaWYgaXNpbnN0YW5jZShvYmosIG1wbC5saW5lcy5MaW5lMkQp
206
+ IGFuZCBfaXNfZ3JpZF9saW5lKG9iaik6CiAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgZmls
207
+ dGVyZWQuYXBwZW5kKG9iaikKCiAgICBvYmplY3RzID0gZmlsdGVyZWQKCiAgICAjIENoZWNrIGZv
208
+ ciBTY2F0dGVyIHBsb3RzCiAgICBpZiBhbGwoaXNpbnN0YW5jZShwYXRoLCBtcGwuY29sbGVjdGlv
209
+ bnMuUGF0aENvbGxlY3Rpb24pIGZvciBwYXRoIGluIG9iamVjdHMpOgogICAgICAgIHJldHVybiAi
210
+ c2NhdHRlciIKCiAgICAjIENoZWNrIGZvciBCYXIgcGxvdHMKICAgIGlmIGFsbChpc2luc3RhbmNl
211
+ KHJlY3QsIG1wbC5wYXRjaGVzLlJlY3RhbmdsZSkgZm9yIHJlY3QgaW4gb2JqZWN0cyk6CiAgICAg
212
+ ICAgcmV0dXJuICJiYXIiCgogICAgIyBDaGVjayBmb3IgUGllIHBsb3RzCiAgICBpZiBhbGwoaXNp
213
+ bnN0YW5jZShhcnRpc3QsIG1wbC5wYXRjaGVzLldlZGdlKSBmb3IgYXJ0aXN0IGluIG9iamVjdHMp
214
+ OgogICAgICAgIHJldHVybiAicGllIgoKICAgIHJldHVybiAidW5rbm93biIKCgpkZWYgX2lzX2F1
215
+ dG9fZW1wdHlfYXhpcyhheCk6CiAgICByZXR1cm4gYXguZ2V0X3N1YnBsb3RzcGVjKCkgaXMgbm90
216
+ IE5vbmUgYW5kIG5vdCBheC5oYXNfZGF0YSgpCgoKZGVmIF9pc19jb2xvcmJhcl9heGlzKGF4KToK
217
+ ICAgIHJldHVybiBhbnkoCiAgICAgICAgIyBweWxpbnQ6IGRpc2FibGU9cHJvdGVjdGVkLWFjY2Vz
218
+ cwogICAgICAgIGlzaW5zdGFuY2UoY2hpbGQsIG1wbC5jb2xvcmJhci5fQ29sb3JiYXJTcGluZSkK
219
+ ICAgICAgICBmb3IgY2hpbGQgaW4gYXguZ2V0X2NoaWxkcmVuKCkKICAgICkKCgpkZWYgX2ZpbHRl
220
+ cl9vdXRfdW53YW50ZWRfYXhlcyhheGVzKToKICAgIHJldHVybiBbYXggZm9yIGF4IGluIGF4ZXMg
221
+ aWYgbm90IF9pc19hdXRvX2VtcHR5X2F4aXMoYXgpIGFuZCBub3QgX2lzX2NvbG9yYmFyX2F4aXMo
222
+ YXgpXQoKCmRlZiBfZXh0cmFjdF90aWNrc19kYXRhKGNvbnZlcnRlcjogYW55LCB0aWNrczogYW55
223
+ KSAtPiBsaXN0OgogICAgaWYgaXNpbnN0YW5jZShjb252ZXJ0ZXIsIG1wbC5kYXRlcy5fU3dpdGNo
224
+ YWJsZURhdGVDb252ZXJ0ZXIpOiAgIyBweWxpbnQ6IGRpc2FibGU9cHJvdGVjdGVkLWFjY2Vzcwog
225
+ ICAgICAgIHJldHVybiBbbXBsLmRhdGVzLm51bTJkYXRlKHRpY2spLmlzb2Zvcm1hdCgpIGZvciB0
226
+ aWNrIGluIHRpY2tzXQogICAgdHJ5OgogICAgICAgIHJldHVybiBbZmxvYXQodGljaykgZm9yIHRp
227
+ Y2sgaW4gdGlja3NdCiAgICBleGNlcHQgRXhjZXB0aW9uOgogICAgICAgIHJldHVybiBsaXN0KHRp
228
+ Y2tzKQoKCmRlZiBfZXh0cmFjdF9zY2FsZShjb252ZXJ0ZXIsIHNjYWxlOiBzdHIsIHRpY2tzLCBs
229
+ YWJlbHMpIC0+IHN0cjoKICAgIGlmIGlzaW5zdGFuY2UoY29udmVydGVyLCBtcGwuZGF0ZXMuX1N3
230
+ aXRjaGFibGVEYXRlQ29udmVydGVyKTogICMgcHlsaW50OiBkaXNhYmxlPXByb3RlY3RlZC1hY2Nl
231
+ c3MKICAgICAgICByZXR1cm4gImRhdGV0aW1lIgoKICAgICMgSWYgdGhlIHNjYWxlIGlzIG5vdCBs
232
+ aW5lYXIsIGl0IGNhbid0IGJlIGNhdGVnb3JpY2FsCiAgICBpZiBzY2FsZSAhPSAibGluZWFyIjoK
233
+ ICAgICAgICByZXR1cm4gc2NhbGUKCiAgICAjIElmIGFsbCB0aGUgdGlja3MgYXJlIGludGVnZXJz
234
+ IGFuZCBhcmUgaW4gb3JkZXIgZnJvbSAwIHRvIG4tMQogICAgIyBhbmQgdGhlIGxhYmVscyBhcmVu
235
+ J3QgY29ycmVzcG9uZGluZyB0byB0aGUgdGlja3MsIGl0J3MgY2F0ZWdvcmljYWwKICAgIGZvciBp
236
+ LCB0aWNrX2FuZF9sYWJlbCBpbiBlbnVtZXJhdGUoemlwKHRpY2tzLCBsYWJlbHMpKToKICAgICAg
237
+ ICB0aWNrLCBsYWJlbCA9IHRpY2tfYW5kX2xhYmVsCiAgICAgICAgaWYgaXNpbnN0YW5jZSh0aWNr
238
+ LCAoaW50LCBmbG9hdCkpIGFuZCB0aWNrID09IGkgYW5kIHN0cihpKSAhPSBsYWJlbDoKICAgICAg
239
+ ICAgICAgY29udGludWUKICAgICAgICAjIEZvdW5kIGEgdGljaywgd2hpY2ggd291bGRuJ3QgYmUg
240
+ aW4gYSBjYXRlZ29yaWNhbCBzY2FsZQogICAgICAgIHJldHVybiAibGluZWFyIgoKICAgIHJldHVy
241
+ biAiY2F0ZWdvcmljYWwiCgoKZGVmIF9leHRyYWN0X2NoYXJ0X2RhdGEoYXgpOgogICAgZGF0YSA9
242
+ IHt9CgogICAgZGF0YVsidGl0bGUiXSA9IGF4LmdldF90aXRsZSgpCgogICAgZGF0YVsieF9sYWJl
243
+ bCJdID0gYXguZ2V0X3hsYWJlbCgpCiAgICBkYXRhWyJ5X2xhYmVsIl0gPSBheC5nZXRfeWxhYmVs
244
+ KCkKCiAgICB4X3RpY2tfbGFiZWxzID0gW2xhYmVsLmdldF90ZXh0KCkgZm9yIGxhYmVsIGluIGF4
245
+ LmdldF94dGlja2xhYmVscygpXQogICAgZGF0YVsieF90aWNrcyJdID0gX2V4dHJhY3RfdGlja3Nf
246
+ ZGF0YShheC54YXhpcy5nZXRfY29udmVydGVyKCksIGF4LmdldF94dGlja3MoKSkKICAgIGRhdGFb
247
+ InhfdGlja19sYWJlbHMiXSA9IHhfdGlja19sYWJlbHMKICAgIGRhdGFbInhfc2NhbGUiXSA9IF9l
248
+ eHRyYWN0X3NjYWxlKGF4LnhheGlzLmdldF9jb252ZXJ0ZXIoKSwgYXguZ2V0X3hzY2FsZSgpLCBh
249
+ eC5nZXRfeHRpY2tzKCksIHhfdGlja19sYWJlbHMpCgogICAgeV90aWNrX2xhYmVscyA9IFtsYWJl
250
+ bC5nZXRfdGV4dCgpIGZvciBsYWJlbCBpbiBheC5nZXRfeXRpY2tsYWJlbHMoKV0KICAgIGRhdGFb
251
+ InlfdGlja3MiXSA9IF9leHRyYWN0X3RpY2tzX2RhdGEoYXgueWF4aXMuZ2V0X2NvbnZlcnRlcigp
252
+ LCBheC5nZXRfeXRpY2tzKCkpCiAgICBkYXRhWyJ5X3RpY2tfbGFiZWxzIl0gPSB5X3RpY2tfbGFi
253
+ ZWxzCiAgICBkYXRhWyJ5X3NjYWxlIl0gPSBfZXh0cmFjdF9zY2FsZShheC55YXhpcy5nZXRfY29u
254
+ dmVydGVyKCksIGF4LmdldF95c2NhbGUoKSwgYXguZ2V0X3l0aWNrcygpLCB5X3RpY2tfbGFiZWxz
255
+ KQoKICAgIGNoYXJ0X3R5cGUgPSBfZ2V0X2NoYXJ0X3R5cGUoYXgpCiAgICBlbGVtZW50cyA9IFtd
256
+ CiAgICBjaGFuZ2Vfb3JpZW50YXRpb24gPSBGYWxzZQoKICAgIGlmIGNoYXJ0X3R5cGUgPT0gImxp
257
+ bmUiOgogICAgICAgIGVsZW1lbnRzID0gX2V4dHJhY3RfbGluZV9jaGFydF9lbGVtZW50cyhheCkK
258
+ ICAgIGVsaWYgY2hhcnRfdHlwZSA9PSAic2NhdHRlciI6CiAgICAgICAgZWxlbWVudHMgPSBfZXh0
259
+ cmFjdF9zY2F0dGVyX2NoYXJ0X2VsZW1lbnRzKGF4KQogICAgZWxpZiBjaGFydF90eXBlID09ICJi
260
+ YXIiOgogICAgICAgIGVsZW1lbnRzLCBjaGFuZ2Vfb3JpZW50YXRpb24gPSBfZXh0cmFjdF9iYXJf
261
+ Y2hhcnRfZWxlbWVudHMoYXgpCiAgICBlbGlmIGNoYXJ0X3R5cGUgPT0gImJveF9hbmRfd2hpc2tl
262
+ ciI6CiAgICAgICAgZWxlbWVudHMsIGNoYW5nZV9vcmllbnRhdGlvbiA9IF9leHRyYWN0X2JveF9j
263
+ aGFydF9lbGVtZW50cyhheCkKICAgIGVsaWYgY2hhcnRfdHlwZSA9PSAicGllIjoKICAgICAgICBl
264
+ bGVtZW50cyA9IF9leHRyYWN0X3BpZV9jaGFydF9lbGVtZW50cyhheCkKCiAgICBpZiBjaGFuZ2Vf
265
+ b3JpZW50YXRpb246CiAgICAgICAgZGF0YVsieF9sYWJlbCJdLCBkYXRhWyJ5X2xhYmVsIl0gPSBk
266
+ YXRhWyJ5X2xhYmVsIl0sIGRhdGFbInhfbGFiZWwiXQoKICAgIGRhdGFbInR5cGUiXSA9IGNoYXJ0
267
+ X3R5cGUKICAgIGRhdGFbImVsZW1lbnRzIl0gPSBlbGVtZW50cwoKICAgIHJldHVybiBkYXRhCgoK
268
+ ZGVmIF9jdXN0b21fanNvbl9zZXJpYWxpemVyKG9iaik6CiAgICBpZiBpc2luc3RhbmNlKG9iaiwg
269
+ bnAuaW50ZWdlcik6CiAgICAgICAgcmV0dXJuIGludChvYmopCiAgICBpZiBpc2luc3RhbmNlKG9i
270
+ aiwgbnAuZmxvYXRpbmcpOgogICAgICAgIHJldHVybiBmbG9hdChvYmopCiAgICBpZiBpc2luc3Rh
271
+ bmNlKG9iaiwgbnAubmRhcnJheSk6CiAgICAgICAgcmV0dXJuIG9iai50b2xpc3QoKQogICAgaWYg
272
+ aXNpbnN0YW5jZShvYmosIHNldCk6CiAgICAgICAgcmV0dXJuIGxpc3Qob2JqKQogICAgcmFpc2Ug
273
+ VHlwZUVycm9yKGYiVHlwZSB7dHlwZShvYmopfSBub3Qgc2VyaWFsaXphYmxlIikKCgpkZWYgZXh0
274
+ cmFjdF9hbmRfcHJpbnRfZmlndXJlX21ldGFkYXRhKGZpZyk6CiAgICAiIiJFeHRyYWN0IG1ldGFk
275
+ YXRhIGZyb20gYSBtYXRwbG90bGliIGZpZ3VyZSBhbmQgcHJpbnQgYXMgSlNPTiIiIgogICAgbWV0
276
+ YWRhdGEgPSB7fQogICAgc3VicGxvdHMgPSBbXQoKICAgIGF4ZXMgPSBfZmlsdGVyX291dF91bndh
277
+ bnRlZF9heGVzKGZpZy5heGVzKQoKICAgIGZvciBheCBpbiBheGVzOgogICAgICAgIGRhdGEgPSBf
278
+ ZXh0cmFjdF9jaGFydF9kYXRhKGF4KQogICAgICAgIHN1YnBsb3RzLmFwcGVuZChkYXRhKQoKICAg
279
+ IGlmIGxlbihzdWJwbG90cykgPiAxOgogICAgICAgIG1ldGFkYXRhID0gewogICAgICAgICAgICAi
280
+ dGl0bGUiOiBmaWcudGV4dHNbMF0uZ2V0X3RleHQoKSBpZiBmaWcudGV4dHMgYW5kIGxlbihmaWcu
281
+ dGV4dHMpID4gMCBlbHNlIE5vbmUsCiAgICAgICAgICAgICJ0eXBlIjogImNvbXBvc2l0ZV9jaGFy
282
+ dCIsCiAgICAgICAgICAgICJlbGVtZW50cyI6IHN1YnBsb3RzLAogICAgICAgIH0KICAgIGVsc2U6
283
+ CiAgICAgICAgbWV0YWRhdGEgPSBzdWJwbG90c1swXSBpZiBzdWJwbG90cyBhbmQgbGVuKHN1YnBs
284
+ b3RzKSA+IDAgZWxzZSB7InR5cGUiOiAidW5rbm93biJ9CgogICAgbWV0YWRhdGFbInBuZyJdID0g
285
+ X3NhdmVfZmlndXJlX2FzX2Jhc2U2NChmaWcpCiAgICBqc29uX291dHB1dCA9IHsidHlwZSI6ICJj
286
+ aGFydCIsICJ2YWx1ZSI6IG1ldGFkYXRhfQoKICAgIHByaW50KGYiZHRuX2FydGlmYWN0X2szOWZk
287
+ Mjp7anNvbi5kdW1wcyhqc29uX291dHB1dCwgZGVmYXVsdD1fY3VzdG9tX2pzb25fc2VyaWFsaXpl
288
+ cil9IikKCgpjbGFzcyBNYXRwbG90bGliRmluZGVyKE1ldGFQYXRoRmluZGVyKToKICAgICIiIkN1
289
+ c3RvbSBmaW5kZXIgdG8gaW50ZXJjZXB0IG1hdHBsb3RsaWIucHlwbG90IGltcG9ydHMiIiIKCiAg
290
+ ICBkZWYgZmluZF9zcGVjKHNlbGYsIGZ1bGxuYW1lLCBwYXRoLCB0YXJnZXQ9Tm9uZSk6ICAjIHB5
291
+ bGludDogZGlzYWJsZT11bnVzZWQtYXJndW1lbnQKICAgICAgICBnbG9iYWwgcGx0X3BhdGNoZWQs
292
+ IG5wLCBtcGwsIHBpbF9pbWcgICMgcHlsaW50OiBkaXNhYmxlPWdsb2JhbC1zdGF0ZW1lbnQKICAg
293
+ ICAgICBpZiBmdWxsbmFtZSA9PSAibWF0cGxvdGxpYi5weXBsb3QiIGFuZCBub3QgcGx0X3BhdGNo
294
+ ZWQ6CiAgICAgICAgICAgIHBsdF9wYXRjaGVkID0gVHJ1ZQoKICAgICAgICAgICAgIyBJbXBvcnQg
295
+ bnVtcHkgYW5kIG1hdHBsb3RsaWIgb25jZSB3ZSBhcmUgc3VyZSB3ZSBuZWVkIHRoZW0KICAgICAg
296
+ ICAgICAgIyBweWxpbnQ6IGRpc2FibGU9aW1wb3J0LW91dHNpZGUtdG9wbGV2ZWwKICAgICAgICAg
297
+ ICAgaW1wb3J0IG1hdHBsb3RsaWIKICAgICAgICAgICAgaW1wb3J0IG51bXB5CiAgICAgICAgICAg
298
+ IGZyb20gUElMIGltcG9ydCBJbWFnZQoKICAgICAgICAgICAgIyBTdG9yZSB0aGVtIGluIGdsb2Jh
299
+ bCB2YXJpYWJsZXMgZm9yIHVzZSB0aHJvdWdob3V0IHRoZSBtb2R1bGUKICAgICAgICAgICAgbnAg
300
+ PSBudW1weQogICAgICAgICAgICBtcGwgPSBtYXRwbG90bGliCiAgICAgICAgICAgIHBpbF9pbWcg
301
+ PSBJbWFnZQoKICAgICAgICAgICAgb3JpZ2luYWxfc3BlYyA9IGZpbmRfc3BlYyhmdWxsbmFtZSkK
302
+ ICAgICAgICAgICAgaWYgb3JpZ2luYWxfc3BlYyBpcyBOb25lOgogICAgICAgICAgICAgICAgcmV0
303
+ dXJuIE5vbmUKICAgICAgICAgICAgcmV0dXJuIHNwZWNfZnJvbV9sb2FkZXIoCiAgICAgICAgICAg
304
+ ICAgICBmdWxsbmFtZSwKICAgICAgICAgICAgICAgIE1hdHBsb3RsaWJMb2FkZXIob3JpZ2luYWxf
305
+ c3BlYy5sb2FkZXIpLAogICAgICAgICAgICAgICAgb3JpZ2luPW9yaWdpbmFsX3NwZWMub3JpZ2lu
306
+ LAogICAgICAgICAgICAgICAgaXNfcGFja2FnZT1vcmlnaW5hbF9zcGVjLnN1Ym1vZHVsZV9zZWFy
307
+ Y2hfbG9jYXRpb25zIGlzIG5vdCBOb25lLAogICAgICAgICAgICApCiAgICAgICAgcmV0dXJuIE5v
308
+ bmUKCgpjbGFzcyBNYXRwbG90bGliTG9hZGVyKExvYWRlcik6CiAgICAiIiJDdXN0b20gbG9hZGVy
309
+ IHRvIHBhdGNoIHRoZSBtYXRwbG90bGliLnB5cGxvdCBtb2R1bGUiIiIKCiAgICBkZWYgX19pbml0
310
+ X18oc2VsZiwgb3JpZ2luYWxfbG9hZGVyKToKICAgICAgICBzZWxmLm9yaWdpbmFsX2xvYWRlciA9
311
+ IG9yaWdpbmFsX2xvYWRlcgoKICAgIGRlZiBjcmVhdGVfbW9kdWxlKHNlbGYsIHNwZWMpOgogICAg
312
+ ICAgIHJldHVybiBzZWxmLm9yaWdpbmFsX2xvYWRlci5jcmVhdGVfbW9kdWxlKHNwZWMpCgogICAg
313
+ ZGVmIGV4ZWNfbW9kdWxlKHNlbGYsIG1vZHVsZSk6CiAgICAgICAgc2VsZi5vcmlnaW5hbF9sb2Fk
314
+ ZXIuZXhlY19tb2R1bGUobW9kdWxlKQogICAgICAgIGlmIGhhc2F0dHIobW9kdWxlLCAic2hvdyIp
315
+ OgogICAgICAgICAgICBvcmlnaW5hbF9zaG93ID0gbW9kdWxlLnNob3cKCiAgICAgICAgICAgIGRl
316
+ ZiBjdXN0b21fc2hvdygqYXJncywgKiprd2FyZ3MpOgogICAgICAgICAgICAgICAgZ2xvYmFsIHBy
317
+ b2Nlc3NlZF9maWd1cmVzICAjIHB5bGludDogZGlzYWJsZT1nbG9iYWwtdmFyaWFibGUtbm90LWFz
318
+ c2lnbmVkCiAgICAgICAgICAgICAgICBmaWdfbnVtcyA9IG1vZHVsZS5nZXRfZmlnbnVtcygpCiAg
319
+ ICAgICAgICAgICAgICBmb3IgZmlnX251bSBpbiBmaWdfbnVtczoKICAgICAgICAgICAgICAgICAg
320
+ ICBmaWcgPSBtb2R1bGUuZmlndXJlKGZpZ19udW0pCiAgICAgICAgICAgICAgICAgICAgZmlnX2hh
321
+ c2ggPSBfZ2V0X2ZpZ3VyZV9oYXNoKGZpZykKICAgICAgICAgICAgICAgICAgICBpZiBmaWdfaGFz
322
+ aCBub3QgaW4gcHJvY2Vzc2VkX2ZpZ3VyZXM6CiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJh
323
+ Y3RfYW5kX3ByaW50X2ZpZ3VyZV9tZXRhZGF0YShmaWcpCiAgICAgICAgICAgICAgICAgICAgICAg
324
+ IHByb2Nlc3NlZF9maWd1cmVzLmFkZChmaWdfaGFzaCkKICAgICAgICAgICAgICAgIHJlc3VsdCA9
325
+ IG9yaWdpbmFsX3Nob3coKmFyZ3MsICoqa3dhcmdzKQogICAgICAgICAgICAgICAgbW9kdWxlLmNs
326
+ b3NlKCJhbGwiKQogICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdAoKICAgICAgICAgICAgbW9k
327
+ dWxlLnNob3cgPSBjdXN0b21fc2hvdwoKCmRlZiBzZXR1cF91c2VyX2NvZGVfZW52aXJvbm1lbnQo
328
+ Y29kZSk6CiAgICAiIiJTZXQgdXAgdGhlIG1vZHVsZSB0byBydW4gdXNlciBjb2RlIGluIiIiCiAg
329
+ ICBtb2R1bGUgPSB0eXBlcy5Nb2R1bGVUeXBlKCJfX21haW5fXyIpCiAgICBtb2R1bGUuX19maWxl
330
+ X18gPSAiPHRhcmdldF9jb2RlPiIKICAgIHN5cy5tb2R1bGVzWyJfX21haW5fXyJdID0gbW9kdWxl
331
+ CiAgICBjb2RlX2xpbmVzID0gY29kZS5zcGxpdGxpbmVzKCkKICAgIGxpbmVjYWNoZS5jYWNoZVsi
332
+ PHRhcmdldF9jb2RlPiJdID0gKGxlbihjb2RlKSwgTm9uZSwgY29kZV9saW5lcywgIjx0YXJnZXRf
333
+ Y29kZT4iKQogICAgcmV0dXJuIG1vZHVsZQoKCmRlZiBydW5fdXNlcl9jb2RlKGNvZGUpOgogICAg
334
+ IiIiUnVuIHRoZSB1c2VyIGNvZGUgd2l0aCB0aGUgbWF0cGxvdGxpYiBpbnRlcmNlcHRvciBpbnN0
335
+ YWxsZWQiIiIKICAgICMgSW5zdGFsbCBtYXRwbG90bGliIGludGVyY2VwdG9yCiAgICBzeXMubWV0
336
+ YV9wYXRoLmluc2VydCgwLCBNYXRwbG90bGliRmluZGVyKCkpCgogICAgIyBTZXQgdXAgY2xlYW4g
337
+ ZW52aXJvbm1lbnQgZm9yIHVzZXIgY29kZQogICAgbW9kdWxlID0gc2V0dXBfdXNlcl9jb2RlX2Vu
338
+ dmlyb25tZW50KGNvZGUpCgogICAgIyBDb21waWxlIGFuZCBydW4gdGhlIGNvZGUKICAgIGNvbXBp
339
+ bGVkID0gY29tcGlsZShjb2RlLCAiPHRhcmdldF9jb2RlPiIsICJleGVjIikKCiAgICAjIEV4ZWN1
340
+ dGUgaW4gdGhlIG1vZHVsZSdzIG5hbWVzcGFjZQogICAgZXhlYyhjb21waWxlZCwgbW9kdWxlLl9f
341
+ ZGljdF9fKSAgIyBweWxpbnQ6IGRpc2FibGU9ZXhlYy11c2VkCgoKaWYgX19uYW1lX18gPT0gIl9f
342
+ bWFpbl9fIjoKICAgIHRyeToKICAgICAgICAjIEdldCB0aGUgZW5jb2RlZCB1c2VyIGNvZGUKICAg
343
+ ICAgICB1c2VyX2NvZGUgPSBiYXNlNjQuYjY0ZGVjb2RlKCJ7ZW5jb2RlZF9jb2RlfSIpLmRlY29k
344
+ ZSgpCgogICAgICAgICMgUnVuIHRoZSBjb2RlCiAgICAgICAgcnVuX3VzZXJfY29kZSh1c2VyX2Nv
345
+ ZGUpCiAgICBleGNlcHQgRXhjZXB0aW9uOgogICAgICAgICMgUHJpbnQgb25seSB0aGUgcmVsZXZh
346
+ bnQgcGFydHMgb2YgdGhlIHRyYWNlYmFjawogICAgICAgIGV4Y190eXBlLCBleGNfdmFsdWUsIGV4
347
+ Y190YiA9IHN5cy5leGNfaW5mbygpCgogICAgICAgICMgRmlsdGVyIHRyYWNlYmFjayB0byBvbmx5
348
+ IHNob3cgdXNlciBjb2RlIGZyYW1lcwogICAgICAgIGZpbHRlcmVkX3RiID0gW10KICAgICAgICB0
349
+ YiA9IGV4Y190YgogICAgICAgIHdoaWxlIHRiIGlzIG5vdCBOb25lOgogICAgICAgICAgICBpZiB0
350
+ Yi50Yl9mcmFtZS5mX2NvZGUuY29fZmlsZW5hbWUgPT0gIjx0YXJnZXRfY29kZT4iOgogICAgICAg
351
+ ICAgICAgICAgZmlsdGVyZWRfdGIuYXBwZW5kKHRiKQogICAgICAgICAgICB0YiA9IHRiLnRiX25l
352
+ eHQKCiAgICAgICAgaWYgZmlsdGVyZWRfdGI6CiAgICAgICAgICAgICMgQ3JlYXRlIGEgbmV3IHRy
353
+ YWNlYmFjayBmcm9tIHRoZSBmaWx0ZXJlZCBmcmFtZXMKICAgICAgICAgICAgZXhjX3ZhbHVlLl9f
354
+ dHJhY2ViYWNrX18gPSBmaWx0ZXJlZF90YlstMV0KICAgICAgICAgICAgdHJhY2ViYWNrLnByaW50
355
+ X2V4Y2VwdGlvbihleGNfdHlwZSwgZXhjX3ZhbHVlLCBleGNfdmFsdWUuX190cmFjZWJhY2tfXykK
356
+ ICAgICAgICBlbHNlOgogICAgICAgICAgICAjIEZhbGxiYWNrIGlmIG5vIHVzZXIgY29kZSBmcmFt
357
+ ZXMgZm91bmQgLSByYWlzZSB0aGUgb3JpZ2luYWwgZXhjZXB0aW9uIHR5cGUKICAgICAgICAgICAg
358
+ IyB3aXRoIHRoZSBvcmlnaW5hbCBtZXNzYWdlIGJ1dCBjcmVhdGUgYSBmcmVzaCB0cmFjZWJhY2sK
359
+ ICAgICAgICAgICAgcmFpc2UgZXhjX3R5cGUoc3RyKGV4Y192YWx1ZSkpIGZyb20gTm9uZQoKICAg
360
+ ICAgICBzeXMuZXhpdCgxKQo=
361
+ `;
package/dist/index.d.ts CHANGED
@@ -8,7 +8,9 @@ export { LspLanguageId } from './LspServer';
8
8
  export { DaytonaError } from './errors/DaytonaError';
9
9
  export { Sandbox } from './Sandbox';
10
10
  export type { SandboxCodeToolbox } from './Sandbox';
11
- export type { FileInfo, Match, ReplaceResult, SearchFilesResponse, GitStatus, ListBranchResponse, ExecuteResponse, } from '@daytonaio/api-client';
11
+ export { ChartType } from './types/Chart';
12
+ export type { Chart, LineChart, ScatterChart, BarChart, PieChart, BoxAndWhiskerChart, CompositeChart, } from './types/Chart';
13
+ export type { FileInfo, Match, ReplaceResult, SearchFilesResponse, GitStatus, ListBranchResponse, } from '@daytonaio/api-client';
12
14
  export { WorkspaceState as SandboxState, CreateWorkspaceTargetEnum as SandboxTargetRegion } from '@daytonaio/api-client';
13
15
  import { WorkspaceState as WS, CreateWorkspaceTargetEnum } from '@daytonaio/api-client';
14
16
  import { Sandbox } from './Sandbox';
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.WorkspaceTargetRegion = exports.WorkspaceState = exports.Workspace = exports.SandboxTargetRegion = exports.SandboxState = exports.Sandbox = exports.DaytonaError = exports.LspLanguageId = exports.Process = exports.Git = exports.FileSystem = exports.CodeLanguage = exports.Daytona = void 0;
3
+ exports.WorkspaceTargetRegion = exports.WorkspaceState = exports.Workspace = exports.SandboxTargetRegion = exports.SandboxState = exports.ChartType = exports.Sandbox = exports.DaytonaError = exports.LspLanguageId = exports.Process = exports.Git = exports.FileSystem = exports.CodeLanguage = exports.Daytona = void 0;
4
4
  var Daytona_1 = require("./Daytona");
5
5
  Object.defineProperty(exports, "Daytona", { enumerable: true, get: function () { return Daytona_1.Daytona; } });
6
6
  var Daytona_2 = require("./Daytona");
@@ -19,6 +19,9 @@ var DaytonaError_1 = require("./errors/DaytonaError");
19
19
  Object.defineProperty(exports, "DaytonaError", { enumerable: true, get: function () { return DaytonaError_1.DaytonaError; } });
20
20
  var Sandbox_1 = require("./Sandbox");
21
21
  Object.defineProperty(exports, "Sandbox", { enumerable: true, get: function () { return Sandbox_1.Sandbox; } });
22
+ // Chart and artifact types
23
+ var Chart_1 = require("./types/Chart");
24
+ Object.defineProperty(exports, "ChartType", { enumerable: true, get: function () { return Chart_1.ChartType; } });
22
25
  var api_client_1 = require("@daytonaio/api-client");
23
26
  Object.defineProperty(exports, "SandboxState", { enumerable: true, get: function () { return api_client_1.WorkspaceState; } });
24
27
  Object.defineProperty(exports, "SandboxTargetRegion", { enumerable: true, get: function () { return api_client_1.CreateWorkspaceTargetEnum; } });
@@ -0,0 +1,84 @@
1
+ /**
2
+ * Types for chart data extracted from matplotlib visualizations
3
+ */
4
+ /**
5
+ * Chart type enumeration matching the Python implementation
6
+ */
7
+ export declare enum ChartType {
8
+ LINE = "line",
9
+ SCATTER = "scatter",
10
+ BAR = "bar",
11
+ PIE = "pie",
12
+ BOX_AND_WHISKER = "box_and_whisker",
13
+ COMPOSITE_CHART = "composite_chart",
14
+ UNKNOWN = "unknown"
15
+ }
16
+ /**
17
+ * Base chart type
18
+ */
19
+ export type Chart = {
20
+ type: ChartType;
21
+ title: string;
22
+ elements: any[];
23
+ png?: string;
24
+ };
25
+ type Chart2D = Chart & {
26
+ x_label?: string;
27
+ y_label?: string;
28
+ };
29
+ export type PointData = {
30
+ label: string;
31
+ points: [number | string, number | string][];
32
+ };
33
+ type PointChart = Chart2D & {
34
+ x_ticks: (number | string)[];
35
+ x_scale: string;
36
+ x_tick_labels: string[];
37
+ y_ticks: (number | string)[];
38
+ y_scale: string;
39
+ y_tick_labels: string[];
40
+ elements: PointData[];
41
+ };
42
+ export type LineChart = PointChart & {
43
+ type: ChartType.LINE;
44
+ };
45
+ export type ScatterChart = PointChart & {
46
+ type: ChartType.SCATTER;
47
+ };
48
+ export type BarData = {
49
+ label: string;
50
+ value: string;
51
+ group: string;
52
+ };
53
+ export type BarChart = Chart2D & {
54
+ type: ChartType.BAR;
55
+ elements: BarData[];
56
+ };
57
+ export type PieData = {
58
+ label: string;
59
+ angle: number;
60
+ radius: number;
61
+ };
62
+ export type PieChart = Chart & {
63
+ type: ChartType.PIE;
64
+ elements: PieData[];
65
+ };
66
+ export type BoxAndWhiskerData = {
67
+ label: string;
68
+ min: number;
69
+ first_quartile: number;
70
+ median: number;
71
+ third_quartile: number;
72
+ max: number;
73
+ outliers: number[];
74
+ };
75
+ export type BoxAndWhiskerChart = Chart2D & {
76
+ type: ChartType.BOX_AND_WHISKER;
77
+ elements: BoxAndWhiskerData[];
78
+ };
79
+ export type CompositeChart = Chart & {
80
+ type: ChartType.COMPOSITE_CHART;
81
+ elements: Chart[];
82
+ };
83
+ export declare function parseChart(data: any): Chart;
84
+ export {};
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ /**
3
+ * Types for chart data extracted from matplotlib visualizations
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.parseChart = exports.ChartType = void 0;
7
+ /**
8
+ * Chart type enumeration matching the Python implementation
9
+ */
10
+ var ChartType;
11
+ (function (ChartType) {
12
+ ChartType["LINE"] = "line";
13
+ ChartType["SCATTER"] = "scatter";
14
+ ChartType["BAR"] = "bar";
15
+ ChartType["PIE"] = "pie";
16
+ ChartType["BOX_AND_WHISKER"] = "box_and_whisker";
17
+ ChartType["COMPOSITE_CHART"] = "composite_chart";
18
+ ChartType["UNKNOWN"] = "unknown";
19
+ })(ChartType || (exports.ChartType = ChartType = {}));
20
+ function parseChart(data) {
21
+ switch (data.type) {
22
+ case ChartType.LINE:
23
+ return { ...data };
24
+ case ChartType.SCATTER:
25
+ return { ...data };
26
+ case ChartType.BAR:
27
+ return { ...data };
28
+ case ChartType.PIE:
29
+ return { ...data };
30
+ case ChartType.BOX_AND_WHISKER:
31
+ return { ...data };
32
+ case ChartType.COMPOSITE_CHART:
33
+ const charts = data.elements.map((g) => parseChart(g));
34
+ delete data.data;
35
+ return {
36
+ ...data,
37
+ data: charts,
38
+ };
39
+ default:
40
+ return { ...data, type: ChartType.UNKNOWN };
41
+ }
42
+ }
43
+ exports.parseChart = parseChart;
@@ -0,0 +1,24 @@
1
+ import { ExecuteResponse as ClientExecuteResponse } from '@daytonaio/api-client';
2
+ import { Chart } from './Chart';
3
+ /**
4
+ * Execution artifacts extracted from command output
5
+ */
6
+ export interface ExecutionArtifacts {
7
+ /**
8
+ * Standard output from the command
9
+ */
10
+ stdout: string;
11
+ /**
12
+ * Charts extracted from the output
13
+ */
14
+ charts?: Chart[];
15
+ }
16
+ /**
17
+ * Enhanced execution response that includes artifacts
18
+ */
19
+ export interface ExecuteResponse extends ClientExecuteResponse {
20
+ /**
21
+ * Artifacts extracted from the command output
22
+ */
23
+ artifacts?: ExecutionArtifacts;
24
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,13 @@
1
+ import { ExecutionArtifacts } from '../types/ExecuteResponse';
2
+ /**
3
+ * Utility class for parsing artifacts from command output
4
+ */
5
+ export declare class ArtifactParser {
6
+ /**
7
+ * Parses artifacts from command output text
8
+ *
9
+ * @param output - Raw output from command execution
10
+ * @returns Parsed artifacts including stdout and charts
11
+ */
12
+ static parseArtifacts(output: string): ExecutionArtifacts;
13
+ }
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ArtifactParser = void 0;
4
+ const Chart_1 = require("../types/Chart");
5
+ /**
6
+ * Utility class for parsing artifacts from command output
7
+ */
8
+ class ArtifactParser {
9
+ /**
10
+ * Parses artifacts from command output text
11
+ *
12
+ * @param output - Raw output from command execution
13
+ * @returns Parsed artifacts including stdout and charts
14
+ */
15
+ static parseArtifacts(output) {
16
+ const charts = [];
17
+ let stdout = output;
18
+ // Split output by lines to find artifact markers
19
+ const lines = output.split('\n');
20
+ const artifactLines = [];
21
+ for (const line of lines) {
22
+ // Look for the artifact marker pattern
23
+ if (line.startsWith('dtn_artifact_k39fd2:')) {
24
+ artifactLines.push(line);
25
+ try {
26
+ const artifactJson = line.substring('dtn_artifact_k39fd2:'.length).trim();
27
+ const artifactData = JSON.parse(artifactJson);
28
+ if (artifactData.type === 'chart' && artifactData.value) {
29
+ const chartData = artifactData.value;
30
+ charts.push((0, Chart_1.parseChart)(chartData));
31
+ }
32
+ }
33
+ catch (error) {
34
+ // Skip invalid artifacts
35
+ console.warn('Failed to parse artifact:', error);
36
+ }
37
+ }
38
+ }
39
+ // Remove artifact lines from stdout along with their following newlines
40
+ for (const line of artifactLines) {
41
+ stdout = stdout.replace(line + '\n', '');
42
+ stdout = stdout.replace(line, '');
43
+ }
44
+ return {
45
+ stdout,
46
+ charts: charts.length > 0 ? charts : undefined,
47
+ };
48
+ }
49
+ }
50
+ exports.ArtifactParser = ArtifactParser;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@daytonaio/sdk",
3
- "version": "0.10.5",
3
+ "version": "0.11.0-alpha.0",
4
4
  "description": "Daytona client library for AI Agents",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",