@vymalo/opencode-devtools 0.11.0 → 0.14.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/catalog.d.ts +7 -7
- package/dist/catalog.js +27 -26
- package/dist/catalog.js.map +1 -1
- package/dist/groups/codec.js +162 -135
- package/dist/groups/codec.js.map +1 -1
- package/dist/groups/convert.js +116 -89
- package/dist/groups/convert.js.map +1 -1
- package/dist/groups/crypto.js +247 -186
- package/dist/groups/crypto.js.map +1 -1
- package/dist/groups/datetime.js +265 -215
- package/dist/groups/datetime.js.map +1 -1
- package/dist/groups/http.d.ts +6 -6
- package/dist/groups/http.js +272 -248
- package/dist/groups/http.js.map +1 -1
- package/dist/groups/math.js +157 -127
- package/dist/groups/math.js.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/lib.js +1 -0
- package/dist/lib.js.map +1 -1
- package/dist/logging.d.ts +6 -6
- package/dist/logging.js +59 -62
- package/dist/logging.js.map +1 -1
- package/dist/opencode.d.ts +4 -4
- package/dist/opencode.js +71 -75
- package/dist/opencode.js.map +1 -1
- package/dist/schema.d.ts +41 -41
- package/dist/schema.js +43 -48
- package/dist/schema.js.map +1 -1
- package/dist/tool-spec.d.ts +27 -27
- package/dist/tool-spec.js +24 -16
- package/dist/tool-spec.js.map +1 -1
- package/dist/tools.d.ts +8 -8
- package/dist/tools.js +80 -73
- package/dist/tools.js.map +1 -1
- package/dist/types.d.ts +27 -27
- package/dist/types.js +1 -0
- package/dist/types.js.map +1 -1
- package/package.json +3 -3
package/dist/groups/convert.js
CHANGED
|
@@ -3,97 +3,124 @@ import { JSONPath } from "jsonpath-plus";
|
|
|
3
3
|
import Papa from "papaparse";
|
|
4
4
|
import YAML from "yaml";
|
|
5
5
|
import { json, reqString } from "../tool-spec.js";
|
|
6
|
-
const FORMATS = [
|
|
6
|
+
const FORMATS = [
|
|
7
|
+
"json",
|
|
8
|
+
"yaml",
|
|
9
|
+
"toml",
|
|
10
|
+
"csv"
|
|
11
|
+
];
|
|
7
12
|
function decode(input, format) {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
return parsed.data;
|
|
28
|
-
}
|
|
29
|
-
}
|
|
13
|
+
switch (format) {
|
|
14
|
+
case "json": return JSON.parse(input);
|
|
15
|
+
case "yaml": return YAML.parse(input);
|
|
16
|
+
case "toml": return TOML.parse(input);
|
|
17
|
+
case "csv": {
|
|
18
|
+
// dynamicTyping is intentionally OFF: it would coerce "00123" → 123 (losing
|
|
19
|
+
// leading zeros) and round 64-bit IDs, silently corrupting the data. Keep
|
|
20
|
+
// every field as a string for a faithful conversion.
|
|
21
|
+
const parsed = Papa.parse(input.trim(), {
|
|
22
|
+
header: true,
|
|
23
|
+
skipEmptyLines: true,
|
|
24
|
+
dynamicTyping: false
|
|
25
|
+
});
|
|
26
|
+
if (parsed.errors.length > 0) {
|
|
27
|
+
throw new Error(`CSV parse error: ${parsed.errors[0].message}`);
|
|
28
|
+
}
|
|
29
|
+
return parsed.data;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
30
32
|
}
|
|
31
33
|
function encode(value, format) {
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
}
|
|
46
|
-
}
|
|
34
|
+
switch (format) {
|
|
35
|
+
case "json": return JSON.stringify(value, null, 2);
|
|
36
|
+
case "yaml": return YAML.stringify(value);
|
|
37
|
+
case "toml":
|
|
38
|
+
if (typeof value !== "object" || value === null || Array.isArray(value)) {
|
|
39
|
+
throw new Error("TOML output requires a top-level object (table)");
|
|
40
|
+
}
|
|
41
|
+
return TOML.stringify(value);
|
|
42
|
+
case "csv": {
|
|
43
|
+
const rows = Array.isArray(value) ? value : [value];
|
|
44
|
+
return Papa.unparse(rows);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
47
|
}
|
|
48
|
-
export const CONVERT_TOOLS = [
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
48
|
+
export const CONVERT_TOOLS = [{
|
|
49
|
+
name: "convert_data",
|
|
50
|
+
group: "convert",
|
|
51
|
+
description: "Convert structured data between JSON, YAML, TOML and CSV. CSV maps to/from an array of row objects; TOML output needs a top-level object.",
|
|
52
|
+
input: {
|
|
53
|
+
input: {
|
|
54
|
+
type: "string",
|
|
55
|
+
description: "The source document."
|
|
56
|
+
},
|
|
57
|
+
from: {
|
|
58
|
+
type: "string",
|
|
59
|
+
enum: FORMATS,
|
|
60
|
+
description: "Source format."
|
|
61
|
+
},
|
|
62
|
+
to: {
|
|
63
|
+
type: "string",
|
|
64
|
+
enum: FORMATS,
|
|
65
|
+
description: "Target format."
|
|
66
|
+
}
|
|
67
|
+
},
|
|
68
|
+
handler: (args) => {
|
|
69
|
+
const input = reqString(args, "input");
|
|
70
|
+
const from = reqString(args, "from");
|
|
71
|
+
const to = reqString(args, "to");
|
|
72
|
+
const value = decode(input, from);
|
|
73
|
+
const out = encode(value, to);
|
|
74
|
+
return json({
|
|
75
|
+
from,
|
|
76
|
+
to,
|
|
77
|
+
result: out
|
|
78
|
+
}, out);
|
|
79
|
+
}
|
|
80
|
+
}, {
|
|
81
|
+
name: "convert_query",
|
|
82
|
+
group: "convert",
|
|
83
|
+
description: "Run a JSONPath query against a JSON, YAML or TOML document and return the matching values. Example path: \"$.items[*].name\".",
|
|
84
|
+
input: {
|
|
85
|
+
input: {
|
|
86
|
+
type: "string",
|
|
87
|
+
description: "The source document."
|
|
88
|
+
},
|
|
89
|
+
path: {
|
|
90
|
+
type: "string",
|
|
91
|
+
description: "JSONPath expression, e.g. \"$.store.book[*].author\"."
|
|
92
|
+
},
|
|
93
|
+
from: {
|
|
94
|
+
type: "string",
|
|
95
|
+
optional: true,
|
|
96
|
+
enum: [
|
|
97
|
+
"json",
|
|
98
|
+
"yaml",
|
|
99
|
+
"toml"
|
|
100
|
+
],
|
|
101
|
+
description: "Source format (default json)."
|
|
102
|
+
}
|
|
103
|
+
},
|
|
104
|
+
handler: (args) => {
|
|
105
|
+
const input = reqString(args, "input");
|
|
106
|
+
const path = reqString(args, "path");
|
|
107
|
+
const from = typeof args.from === "string" ? args.from : "json";
|
|
108
|
+
const value = decode(input, from);
|
|
109
|
+
// eval: false disables script/filter expressions (`[?(...)]`) — they run
|
|
110
|
+
// arbitrary JS via the engine. `path` is model-supplied, so this keeps the
|
|
111
|
+
// tool deterministic (no sandbox escape). Standard path queries still work.
|
|
112
|
+
const matches = JSONPath({
|
|
113
|
+
path,
|
|
114
|
+
json: value,
|
|
115
|
+
wrap: true,
|
|
116
|
+
eval: false
|
|
117
|
+
});
|
|
118
|
+
return json({
|
|
119
|
+
path,
|
|
120
|
+
count: matches.length,
|
|
121
|
+
matches
|
|
122
|
+
}, matches.length === 0 ? "(no matches)" : JSON.stringify(matches, null, 2));
|
|
123
|
+
}
|
|
124
|
+
}];
|
|
125
|
+
|
|
99
126
|
//# sourceMappingURL=convert.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"
|
|
1
|
+
{"mappings":"AAAA,OAAO,UAAU;AACjB,SAAS,gBAAgB;AACzB,OAAO,UAAU;AACjB,OAAO,UAAU;AAEjB,SAAS,MAAM,iBAAgC;AAG/C,MAAM,UAAU;CAAC;CAAQ;CAAQ;CAAQ;AAAK;AAE9C,SAAS,OAAO,OAAe,QAAyB;CACtD,QAAQ,QAAR;EACE,KAAK,QACH,OAAO,KAAK,MAAM,KAAK;EACzB,KAAK,QACH,OAAO,KAAK,MAAM,KAAK;EACzB,KAAK,QACH,OAAO,KAAK,MAAM,KAAK;EACzB,KAAK,OAAO;;;;GAIV,MAAM,SAAS,KAAK,MAAM,MAAM,KAAK,GAAG;IACtC,QAAQ;IACR,gBAAgB;IAChB,eAAe;GACjB,CAAC;GACD,IAAI,OAAO,OAAO,SAAS,GAAG;IAC5B,MAAM,IAAI,MAAM,oBAAoB,OAAO,OAAO,EAAE,CAAC,SAAS;GAChE;GACA,OAAO,OAAO;EAChB;CACF;AACF;AAEA,SAAS,OAAO,OAAgB,QAAwB;CACtD,QAAQ,QAAR;EACE,KAAK,QACH,OAAO,KAAK,UAAU,OAAO,MAAM,CAAC;EACtC,KAAK,QACH,OAAO,KAAK,UAAU,KAAK;EAC7B,KAAK;GACH,IAAI,OAAO,UAAU,YAAY,UAAU,QAAQ,MAAM,QAAQ,KAAK,GAAG;IACvE,MAAM,IAAI,MAAM,iDAAiD;GACnE;GACA,OAAO,KAAK,UAAU,KAAqB;EAC7C,KAAK,OAAO;GACV,MAAM,OAAO,MAAM,QAAQ,KAAK,IAAI,QAAQ,CAAC,KAAK;GAClD,OAAO,KAAK,QAAQ,IAAgB;EACtC;CACF;AACF;AAEA,OAAO,MAAM,gBAAqC,CAChD;CACE,MAAM;CACN,OAAO;CACP,aACE;CACF,OAAO;EACL,OAAO;GAAE,MAAM;GAAU,aAAa;EAAuB;EAC7D,MAAM;GAAE,MAAM;GAAU,MAAM;GAAS,aAAa;EAAiB;EACrE,IAAI;GAAE,MAAM;GAAU,MAAM;GAAS,aAAa;EAAiB;CACrE;CACA,UAAU,SAAS;EACjB,MAAM,QAAQ,UAAU,MAAM,OAAO;EACrC,MAAM,OAAO,UAAU,MAAM,MAAM;EACnC,MAAM,KAAK,UAAU,MAAM,IAAI;EAC/B,MAAM,QAAQ,OAAO,OAAO,IAAI;EAChC,MAAM,MAAM,OAAO,OAAO,EAAE;EAC5B,OAAO,KAAK;GAAE;GAAM;GAAI,QAAQ;EAAI,GAAG,GAAG;CAC5C;AACF,GACA;CACE,MAAM;CACN,OAAO;CACP,aACE;CACF,OAAO;EACL,OAAO;GAAE,MAAM;GAAU,aAAa;EAAuB;EAC7D,MAAM;GAAE,MAAM;GAAU,aAAa;EAAsD;EAC3F,MAAM;GACJ,MAAM;GACN,UAAU;GACV,MAAM;IAAC;IAAQ;IAAQ;GAAM;GAC7B,aAAa;EACf;CACF;CACA,UAAU,SAAS;EACjB,MAAM,QAAQ,UAAU,MAAM,OAAO;EACrC,MAAM,OAAO,UAAU,MAAM,MAAM;EACnC,MAAM,OAAQ,OAAO,KAAK,SAAS,WAAW,KAAK,OAAO;EAC1D,MAAM,QAAQ,OAAO,OAAO,IAAI;;;;EAIhC,MAAM,UAAU,SAAS;GACvB;GACA,MAAM;GACN,MAAM;GACN,MAAM;EACR,CAAC;EACD,OAAO,KACL;GAAE;GAAM,OAAO,QAAQ;GAAQ;EAAQ,GACvC,QAAQ,WAAW,IAAI,iBAAiB,KAAK,UAAU,SAAS,MAAM,CAAC,CACzE;CACF;AACF,CACF","names":[],"sources":["../../src/groups/convert.ts"],"version":3,"file":"convert.js","sourceRoot":""}
|