@petercjl/tuda 0.0.0-stage → 0.1.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/INSTALL.md +11 -0
- package/LICENSE +21 -0
- package/README.md +92 -2
- package/THIRD_PARTY_NOTICES.md +15 -0
- package/UPDATE.md +11 -0
- package/capabilities.json +443 -0
- package/dist/board-plugin.LICENSES.txt +207 -0
- package/dist/board-plugin.js +17446 -0
- package/dist/main.js +1067 -0
- package/guard/command-source-tuda.v1.json +1144 -0
- package/guard/command.tuda.json +584 -0
- package/guard/command.tuda.v1.json +5 -0
- package/package.json +56 -4
- package/release-manifest.json +5 -0
- package/scripts/validate-package.mjs +22 -0
- package/skills/using-tuda/SKILL.md +81 -0
- package/skills/using-tuda/adapters/generic.json +21 -0
- package/skills/using-tuda/agents/openai.yaml +6 -0
- package/skills/using-tuda/capabilities.json +44 -0
- package/skills/using-tuda/references/cli.md +63 -0
- package/skills/using-tuda/references/visual-qa.md +59 -0
- package/skills/using-tuda/scripts/validate-image-batch.mjs +146 -0
|
@@ -0,0 +1,584 @@
|
|
|
1
|
+
{
|
|
2
|
+
"extension": {
|
|
3
|
+
"action_classes": [
|
|
4
|
+
"Tuda provider-quota use",
|
|
5
|
+
"Tuda managed and exported file writes",
|
|
6
|
+
"Tuda agent configuration changes",
|
|
7
|
+
"Tuda workspace mutations and unknown invocations"
|
|
8
|
+
],
|
|
9
|
+
"aliases": [],
|
|
10
|
+
"conflicts": [],
|
|
11
|
+
"delegated_protection": null,
|
|
12
|
+
"dependencies": [],
|
|
13
|
+
"description": "Reviews Tuda CLI invocations that can spend provider quota, write managed or exported files, change workspace state, or install agent configuration. Explicit read-only paths narrow this rule; Guard independent floors remain in effect.",
|
|
14
|
+
"ecosystem_ids": [
|
|
15
|
+
"tuda"
|
|
16
|
+
],
|
|
17
|
+
"executables": [
|
|
18
|
+
"tuda"
|
|
19
|
+
],
|
|
20
|
+
"extension_id": "command.tuda",
|
|
21
|
+
"homepage": "https://github.com/Davied-H/iterlay",
|
|
22
|
+
"icon": {
|
|
23
|
+
"background": "#0F172A",
|
|
24
|
+
"kind": "react-icon",
|
|
25
|
+
"name": "HiMiniCommandLine"
|
|
26
|
+
},
|
|
27
|
+
"license": "MIT",
|
|
28
|
+
"name": "Tuda command protection",
|
|
29
|
+
"permissions": [
|
|
30
|
+
{
|
|
31
|
+
"action_classes": [
|
|
32
|
+
"Tuda provider-quota use",
|
|
33
|
+
"Tuda managed and exported file writes",
|
|
34
|
+
"Tuda agent configuration changes",
|
|
35
|
+
"Tuda workspace mutations and unknown invocations"
|
|
36
|
+
],
|
|
37
|
+
"baseline_floor": "review",
|
|
38
|
+
"configurable": true,
|
|
39
|
+
"conflicts": [],
|
|
40
|
+
"default_enabled": true,
|
|
41
|
+
"dependencies": [],
|
|
42
|
+
"deprecated": false,
|
|
43
|
+
"description": "Reviews Tuda CLI invocations that can spend provider quota, write managed or exported files, change workspace state, or install agent configuration. Explicit read-only paths narrow this rule; Guard independent floors remain in effect.",
|
|
44
|
+
"example_command": "tuda image generate --prompt \"Product photo\" --out ./product.png",
|
|
45
|
+
"family": null,
|
|
46
|
+
"fixed_reason": null,
|
|
47
|
+
"implementation_version": "1.0.0",
|
|
48
|
+
"implied_permissions": [],
|
|
49
|
+
"introduced_version": "1.0.0",
|
|
50
|
+
"label": "Tuda state changes, quota use and unclassified calls",
|
|
51
|
+
"permission_id": "command.tuda.permission.side-effects",
|
|
52
|
+
"replacement_permission_id": null,
|
|
53
|
+
"risk_tier": "high",
|
|
54
|
+
"safer_guidance": [
|
|
55
|
+
"Inspect tuda tools list and the requested operation before running it.",
|
|
56
|
+
"Confirm provider cost and reference-image disclosure before generation or editing.",
|
|
57
|
+
"Export to a new destination; --overwrite can replace existing files.",
|
|
58
|
+
"Review add/remove agent configuration changes. Ctrl+C stops waiting, not remote billing."
|
|
59
|
+
],
|
|
60
|
+
"typed_capabilities": []
|
|
61
|
+
}
|
|
62
|
+
],
|
|
63
|
+
"project_markers": [],
|
|
64
|
+
"publisher": {
|
|
65
|
+
"id": "community.tuda",
|
|
66
|
+
"display_name": "Community",
|
|
67
|
+
"url": "https://github.com/Davied-H/iterlay"
|
|
68
|
+
},
|
|
69
|
+
"reference_urls": [
|
|
70
|
+
"https://github.com/Davied-H/iterlay/blob/main/cli/src/main.ts",
|
|
71
|
+
"https://github.com/Davied-H/iterlay/blob/main/electron/workspace-tools.ts"
|
|
72
|
+
],
|
|
73
|
+
"required": false,
|
|
74
|
+
"risk_classes": [
|
|
75
|
+
"execution",
|
|
76
|
+
"filesystem_write",
|
|
77
|
+
"network_egress"
|
|
78
|
+
],
|
|
79
|
+
"rules": [
|
|
80
|
+
{
|
|
81
|
+
"action_classes": [
|
|
82
|
+
"Tuda provider-quota use",
|
|
83
|
+
"Tuda managed and exported file writes",
|
|
84
|
+
"Tuda agent configuration changes",
|
|
85
|
+
"Tuda workspace mutations and unknown invocations"
|
|
86
|
+
],
|
|
87
|
+
"default_mode": "review",
|
|
88
|
+
"description": "Reviews Tuda CLI invocations that can spend provider quota, write managed or exported files, change workspace state, or install agent configuration. Explicit read-only paths narrow this rule; Guard independent floors remain in effect.",
|
|
89
|
+
"family": null,
|
|
90
|
+
"matcher": {
|
|
91
|
+
"op": "executable.v1",
|
|
92
|
+
"config": {
|
|
93
|
+
"executables": [
|
|
94
|
+
"tuda",
|
|
95
|
+
"tuda.cmd",
|
|
96
|
+
"tuda.exe"
|
|
97
|
+
],
|
|
98
|
+
"subcommands": [],
|
|
99
|
+
"allow_leading_options": true,
|
|
100
|
+
"leading_options_with_values": [
|
|
101
|
+
"--agent",
|
|
102
|
+
"--home",
|
|
103
|
+
"--kind",
|
|
104
|
+
"--provider",
|
|
105
|
+
"--model",
|
|
106
|
+
"--prompt",
|
|
107
|
+
"--input",
|
|
108
|
+
"--out",
|
|
109
|
+
"--path",
|
|
110
|
+
"--board",
|
|
111
|
+
"--name",
|
|
112
|
+
"--size",
|
|
113
|
+
"--quality",
|
|
114
|
+
"--style",
|
|
115
|
+
"--background",
|
|
116
|
+
"--n",
|
|
117
|
+
"--reference",
|
|
118
|
+
"--ratio",
|
|
119
|
+
"--duration",
|
|
120
|
+
"--resolution",
|
|
121
|
+
"--timeout",
|
|
122
|
+
"--request-id",
|
|
123
|
+
"--app-path",
|
|
124
|
+
"--user-data-path",
|
|
125
|
+
"--type",
|
|
126
|
+
"--base-url",
|
|
127
|
+
"--voice",
|
|
128
|
+
"--speech-endpoint",
|
|
129
|
+
"--connection-provider",
|
|
130
|
+
"--saved-model",
|
|
131
|
+
"--api-key-env"
|
|
132
|
+
],
|
|
133
|
+
"interspersed_options_with_values": [
|
|
134
|
+
"--agent",
|
|
135
|
+
"--home",
|
|
136
|
+
"--kind",
|
|
137
|
+
"--provider",
|
|
138
|
+
"--model",
|
|
139
|
+
"--prompt",
|
|
140
|
+
"--input",
|
|
141
|
+
"--out",
|
|
142
|
+
"--path",
|
|
143
|
+
"--board",
|
|
144
|
+
"--name",
|
|
145
|
+
"--size",
|
|
146
|
+
"--quality",
|
|
147
|
+
"--style",
|
|
148
|
+
"--background",
|
|
149
|
+
"--n",
|
|
150
|
+
"--reference",
|
|
151
|
+
"--ratio",
|
|
152
|
+
"--duration",
|
|
153
|
+
"--resolution",
|
|
154
|
+
"--timeout",
|
|
155
|
+
"--request-id",
|
|
156
|
+
"--app-path",
|
|
157
|
+
"--user-data-path",
|
|
158
|
+
"--type",
|
|
159
|
+
"--base-url",
|
|
160
|
+
"--voice",
|
|
161
|
+
"--speech-endpoint",
|
|
162
|
+
"--connection-provider",
|
|
163
|
+
"--saved-model",
|
|
164
|
+
"--api-key-env"
|
|
165
|
+
],
|
|
166
|
+
"interspersed_flags": [
|
|
167
|
+
"--json",
|
|
168
|
+
"--async",
|
|
169
|
+
"--no-launch",
|
|
170
|
+
"--overwrite",
|
|
171
|
+
"--help",
|
|
172
|
+
"--version",
|
|
173
|
+
"--default",
|
|
174
|
+
"--api-key-stdin",
|
|
175
|
+
"--clear-api-key"
|
|
176
|
+
],
|
|
177
|
+
"options_with_values": [
|
|
178
|
+
"--agent",
|
|
179
|
+
"--home",
|
|
180
|
+
"--kind",
|
|
181
|
+
"--provider",
|
|
182
|
+
"--model",
|
|
183
|
+
"--prompt",
|
|
184
|
+
"--input",
|
|
185
|
+
"--out",
|
|
186
|
+
"--path",
|
|
187
|
+
"--board",
|
|
188
|
+
"--name",
|
|
189
|
+
"--size",
|
|
190
|
+
"--quality",
|
|
191
|
+
"--style",
|
|
192
|
+
"--background",
|
|
193
|
+
"--n",
|
|
194
|
+
"--reference",
|
|
195
|
+
"--ratio",
|
|
196
|
+
"--duration",
|
|
197
|
+
"--resolution",
|
|
198
|
+
"--timeout",
|
|
199
|
+
"--request-id",
|
|
200
|
+
"--app-path",
|
|
201
|
+
"--user-data-path",
|
|
202
|
+
"--type",
|
|
203
|
+
"--base-url",
|
|
204
|
+
"--voice",
|
|
205
|
+
"--speech-endpoint",
|
|
206
|
+
"--connection-provider",
|
|
207
|
+
"--saved-model",
|
|
208
|
+
"--api-key-env"
|
|
209
|
+
],
|
|
210
|
+
"required_flags": [],
|
|
211
|
+
"required_flags_in_all_arguments": true,
|
|
212
|
+
"forbidden_flags": [],
|
|
213
|
+
"fail_secure_unknown_options": true
|
|
214
|
+
}
|
|
215
|
+
},
|
|
216
|
+
"native_capability": null,
|
|
217
|
+
"permission_id": "command.tuda.permission.side-effects",
|
|
218
|
+
"risk_classes": [
|
|
219
|
+
"execution",
|
|
220
|
+
"filesystem_write",
|
|
221
|
+
"network_egress"
|
|
222
|
+
],
|
|
223
|
+
"rule_id": "command.tuda.side-effects",
|
|
224
|
+
"rule_version": "1.0.0",
|
|
225
|
+
"safe_variants": [
|
|
226
|
+
{
|
|
227
|
+
"variant_id": "read-only",
|
|
228
|
+
"title": "Read-only metadata and task inspection without export or executable override",
|
|
229
|
+
"matcher": {
|
|
230
|
+
"op": "any.v1",
|
|
231
|
+
"config": {},
|
|
232
|
+
"matchers": [
|
|
233
|
+
{
|
|
234
|
+
"op": "executable-path-set.v1",
|
|
235
|
+
"config": {
|
|
236
|
+
"executables": [
|
|
237
|
+
"tuda",
|
|
238
|
+
"tuda.cmd",
|
|
239
|
+
"tuda.exe"
|
|
240
|
+
],
|
|
241
|
+
"allow_leading_options": true,
|
|
242
|
+
"leading_options_with_values": [
|
|
243
|
+
"--agent",
|
|
244
|
+
"--home",
|
|
245
|
+
"--kind",
|
|
246
|
+
"--provider",
|
|
247
|
+
"--model",
|
|
248
|
+
"--prompt",
|
|
249
|
+
"--input",
|
|
250
|
+
"--out",
|
|
251
|
+
"--path",
|
|
252
|
+
"--board",
|
|
253
|
+
"--name",
|
|
254
|
+
"--size",
|
|
255
|
+
"--quality",
|
|
256
|
+
"--style",
|
|
257
|
+
"--background",
|
|
258
|
+
"--n",
|
|
259
|
+
"--reference",
|
|
260
|
+
"--ratio",
|
|
261
|
+
"--duration",
|
|
262
|
+
"--resolution",
|
|
263
|
+
"--timeout",
|
|
264
|
+
"--request-id",
|
|
265
|
+
"--app-path",
|
|
266
|
+
"--user-data-path"
|
|
267
|
+
],
|
|
268
|
+
"interspersed_options_with_values": [
|
|
269
|
+
"--agent",
|
|
270
|
+
"--home",
|
|
271
|
+
"--kind",
|
|
272
|
+
"--provider",
|
|
273
|
+
"--model",
|
|
274
|
+
"--prompt",
|
|
275
|
+
"--input",
|
|
276
|
+
"--out",
|
|
277
|
+
"--path",
|
|
278
|
+
"--board",
|
|
279
|
+
"--name",
|
|
280
|
+
"--size",
|
|
281
|
+
"--quality",
|
|
282
|
+
"--style",
|
|
283
|
+
"--background",
|
|
284
|
+
"--n",
|
|
285
|
+
"--reference",
|
|
286
|
+
"--ratio",
|
|
287
|
+
"--duration",
|
|
288
|
+
"--resolution",
|
|
289
|
+
"--timeout",
|
|
290
|
+
"--request-id",
|
|
291
|
+
"--app-path",
|
|
292
|
+
"--user-data-path"
|
|
293
|
+
],
|
|
294
|
+
"interspersed_flags": [
|
|
295
|
+
"--json",
|
|
296
|
+
"--async",
|
|
297
|
+
"--no-launch",
|
|
298
|
+
"--overwrite",
|
|
299
|
+
"--help",
|
|
300
|
+
"--version"
|
|
301
|
+
],
|
|
302
|
+
"options_with_values": [
|
|
303
|
+
"--agent",
|
|
304
|
+
"--home",
|
|
305
|
+
"--kind",
|
|
306
|
+
"--provider",
|
|
307
|
+
"--model",
|
|
308
|
+
"--prompt",
|
|
309
|
+
"--input",
|
|
310
|
+
"--out",
|
|
311
|
+
"--path",
|
|
312
|
+
"--board",
|
|
313
|
+
"--name",
|
|
314
|
+
"--size",
|
|
315
|
+
"--quality",
|
|
316
|
+
"--style",
|
|
317
|
+
"--background",
|
|
318
|
+
"--n",
|
|
319
|
+
"--reference",
|
|
320
|
+
"--ratio",
|
|
321
|
+
"--duration",
|
|
322
|
+
"--resolution",
|
|
323
|
+
"--timeout",
|
|
324
|
+
"--request-id",
|
|
325
|
+
"--app-path",
|
|
326
|
+
"--user-data-path"
|
|
327
|
+
],
|
|
328
|
+
"required_flags": [],
|
|
329
|
+
"required_flags_in_all_arguments": true,
|
|
330
|
+
"forbidden_flags": [
|
|
331
|
+
"--out",
|
|
332
|
+
"--overwrite",
|
|
333
|
+
"--app-path"
|
|
334
|
+
],
|
|
335
|
+
"fail_secure_unknown_options": true,
|
|
336
|
+
"paths": [
|
|
337
|
+
[
|
|
338
|
+
"status"
|
|
339
|
+
],
|
|
340
|
+
[
|
|
341
|
+
"doctor"
|
|
342
|
+
],
|
|
343
|
+
[
|
|
344
|
+
"providers",
|
|
345
|
+
"list"
|
|
346
|
+
],
|
|
347
|
+
[
|
|
348
|
+
"models",
|
|
349
|
+
"list"
|
|
350
|
+
],
|
|
351
|
+
[
|
|
352
|
+
"tools",
|
|
353
|
+
"list"
|
|
354
|
+
],
|
|
355
|
+
[
|
|
356
|
+
"boards",
|
|
357
|
+
"list"
|
|
358
|
+
],
|
|
359
|
+
[
|
|
360
|
+
"boards",
|
|
361
|
+
"show"
|
|
362
|
+
],
|
|
363
|
+
[
|
|
364
|
+
"boards",
|
|
365
|
+
"active"
|
|
366
|
+
],
|
|
367
|
+
[
|
|
368
|
+
"assets",
|
|
369
|
+
"list"
|
|
370
|
+
],
|
|
371
|
+
[
|
|
372
|
+
"tasks",
|
|
373
|
+
"list"
|
|
374
|
+
],
|
|
375
|
+
[
|
|
376
|
+
"help"
|
|
377
|
+
],
|
|
378
|
+
[
|
|
379
|
+
"version"
|
|
380
|
+
],
|
|
381
|
+
[
|
|
382
|
+
"guard",
|
|
383
|
+
"descriptor"
|
|
384
|
+
],
|
|
385
|
+
[
|
|
386
|
+
"call",
|
|
387
|
+
"status"
|
|
388
|
+
],
|
|
389
|
+
[
|
|
390
|
+
"call",
|
|
391
|
+
"list_providers"
|
|
392
|
+
],
|
|
393
|
+
[
|
|
394
|
+
"call",
|
|
395
|
+
"list_models"
|
|
396
|
+
],
|
|
397
|
+
[
|
|
398
|
+
"call",
|
|
399
|
+
"list_tasks"
|
|
400
|
+
],
|
|
401
|
+
[
|
|
402
|
+
"call",
|
|
403
|
+
"list_boards"
|
|
404
|
+
],
|
|
405
|
+
[
|
|
406
|
+
"call",
|
|
407
|
+
"get_active_board"
|
|
408
|
+
],
|
|
409
|
+
[
|
|
410
|
+
"call",
|
|
411
|
+
"get_board"
|
|
412
|
+
],
|
|
413
|
+
[
|
|
414
|
+
"call",
|
|
415
|
+
"get_board_layout"
|
|
416
|
+
],
|
|
417
|
+
[
|
|
418
|
+
"call",
|
|
419
|
+
"list_assets"
|
|
420
|
+
],
|
|
421
|
+
[
|
|
422
|
+
"call",
|
|
423
|
+
"get_generation_status"
|
|
424
|
+
],
|
|
425
|
+
[
|
|
426
|
+
"call",
|
|
427
|
+
"list_modification_requests"
|
|
428
|
+
],
|
|
429
|
+
[
|
|
430
|
+
"call",
|
|
431
|
+
"get_modification_request"
|
|
432
|
+
],
|
|
433
|
+
[
|
|
434
|
+
"providers",
|
|
435
|
+
"show"
|
|
436
|
+
],
|
|
437
|
+
[
|
|
438
|
+
"call",
|
|
439
|
+
"get_provider"
|
|
440
|
+
]
|
|
441
|
+
]
|
|
442
|
+
}
|
|
443
|
+
},
|
|
444
|
+
{
|
|
445
|
+
"op": "executable-path-set.v1",
|
|
446
|
+
"config": {
|
|
447
|
+
"executables": [
|
|
448
|
+
"tuda",
|
|
449
|
+
"tuda.cmd",
|
|
450
|
+
"tuda.exe"
|
|
451
|
+
],
|
|
452
|
+
"allow_leading_options": true,
|
|
453
|
+
"leading_options_with_values": [
|
|
454
|
+
"--agent",
|
|
455
|
+
"--home",
|
|
456
|
+
"--kind",
|
|
457
|
+
"--provider",
|
|
458
|
+
"--model",
|
|
459
|
+
"--prompt",
|
|
460
|
+
"--input",
|
|
461
|
+
"--out",
|
|
462
|
+
"--path",
|
|
463
|
+
"--board",
|
|
464
|
+
"--name",
|
|
465
|
+
"--size",
|
|
466
|
+
"--quality",
|
|
467
|
+
"--style",
|
|
468
|
+
"--background",
|
|
469
|
+
"--n",
|
|
470
|
+
"--reference",
|
|
471
|
+
"--ratio",
|
|
472
|
+
"--duration",
|
|
473
|
+
"--resolution",
|
|
474
|
+
"--timeout",
|
|
475
|
+
"--request-id",
|
|
476
|
+
"--app-path",
|
|
477
|
+
"--user-data-path"
|
|
478
|
+
],
|
|
479
|
+
"interspersed_options_with_values": [
|
|
480
|
+
"--agent",
|
|
481
|
+
"--home",
|
|
482
|
+
"--kind",
|
|
483
|
+
"--provider",
|
|
484
|
+
"--model",
|
|
485
|
+
"--prompt",
|
|
486
|
+
"--input",
|
|
487
|
+
"--out",
|
|
488
|
+
"--path",
|
|
489
|
+
"--board",
|
|
490
|
+
"--name",
|
|
491
|
+
"--size",
|
|
492
|
+
"--quality",
|
|
493
|
+
"--style",
|
|
494
|
+
"--background",
|
|
495
|
+
"--n",
|
|
496
|
+
"--reference",
|
|
497
|
+
"--ratio",
|
|
498
|
+
"--duration",
|
|
499
|
+
"--resolution",
|
|
500
|
+
"--timeout",
|
|
501
|
+
"--request-id",
|
|
502
|
+
"--app-path",
|
|
503
|
+
"--user-data-path"
|
|
504
|
+
],
|
|
505
|
+
"interspersed_flags": [
|
|
506
|
+
"--json",
|
|
507
|
+
"--async",
|
|
508
|
+
"--no-launch",
|
|
509
|
+
"--overwrite",
|
|
510
|
+
"--help",
|
|
511
|
+
"--version"
|
|
512
|
+
],
|
|
513
|
+
"options_with_values": [
|
|
514
|
+
"--agent",
|
|
515
|
+
"--home",
|
|
516
|
+
"--kind",
|
|
517
|
+
"--provider",
|
|
518
|
+
"--model",
|
|
519
|
+
"--prompt",
|
|
520
|
+
"--input",
|
|
521
|
+
"--out",
|
|
522
|
+
"--path",
|
|
523
|
+
"--board",
|
|
524
|
+
"--name",
|
|
525
|
+
"--size",
|
|
526
|
+
"--quality",
|
|
527
|
+
"--style",
|
|
528
|
+
"--background",
|
|
529
|
+
"--n",
|
|
530
|
+
"--reference",
|
|
531
|
+
"--ratio",
|
|
532
|
+
"--duration",
|
|
533
|
+
"--resolution",
|
|
534
|
+
"--timeout",
|
|
535
|
+
"--request-id",
|
|
536
|
+
"--app-path",
|
|
537
|
+
"--user-data-path"
|
|
538
|
+
],
|
|
539
|
+
"required_flags": [],
|
|
540
|
+
"required_flags_in_all_arguments": true,
|
|
541
|
+
"forbidden_flags": [
|
|
542
|
+
"--out",
|
|
543
|
+
"--overwrite",
|
|
544
|
+
"--app-path",
|
|
545
|
+
"--kind"
|
|
546
|
+
],
|
|
547
|
+
"fail_secure_unknown_options": true,
|
|
548
|
+
"paths": [
|
|
549
|
+
[
|
|
550
|
+
"tasks",
|
|
551
|
+
"get"
|
|
552
|
+
],
|
|
553
|
+
[
|
|
554
|
+
"tasks",
|
|
555
|
+
"wait"
|
|
556
|
+
]
|
|
557
|
+
]
|
|
558
|
+
}
|
|
559
|
+
}
|
|
560
|
+
]
|
|
561
|
+
}
|
|
562
|
+
}
|
|
563
|
+
],
|
|
564
|
+
"safer_alternatives": [
|
|
565
|
+
"Inspect tuda tools list and the requested operation before running it.",
|
|
566
|
+
"Confirm provider cost and reference-image disclosure before generation or editing.",
|
|
567
|
+
"Export to a new destination; --overwrite can replace existing files.",
|
|
568
|
+
"Review add/remove agent configuration changes. Ctrl+C stops waiting, not remote billing."
|
|
569
|
+
],
|
|
570
|
+
"severity": "high",
|
|
571
|
+
"title": "Tuda state changes, quota use and unclassified calls"
|
|
572
|
+
}
|
|
573
|
+
],
|
|
574
|
+
"safer_alternatives": [
|
|
575
|
+
"Inspect tuda tools list and the requested operation before running it.",
|
|
576
|
+
"Confirm provider cost and reference-image disclosure before generation or editing.",
|
|
577
|
+
"Export to a new destination; --overwrite can replace existing files.",
|
|
578
|
+
"Review add/remove agent configuration changes. Ctrl+C stops waiting, not remote billing."
|
|
579
|
+
],
|
|
580
|
+
"source": "built-in",
|
|
581
|
+
"version": "1.0.0"
|
|
582
|
+
},
|
|
583
|
+
"schema": "guard.command-extension-source.v1"
|
|
584
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,58 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@petercjl/tuda",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"
|
|
5
|
-
"
|
|
6
|
-
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "CLI for Tuda: images, videos, and creative workflows on one canvas. Generate, edit, organize, and export with your configured models.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"bin": {
|
|
8
|
+
"tuda": "dist/main.js"
|
|
9
|
+
},
|
|
10
|
+
"engines": {
|
|
11
|
+
"node": ">=22.12.0"
|
|
12
|
+
},
|
|
13
|
+
"files": [
|
|
14
|
+
"dist/main.js",
|
|
15
|
+
"dist/board-plugin.js",
|
|
16
|
+
"dist/board-plugin.LICENSES.txt",
|
|
17
|
+
"guard/**",
|
|
18
|
+
"skills/**",
|
|
19
|
+
"README.md",
|
|
20
|
+
"INSTALL.md",
|
|
21
|
+
"UPDATE.md",
|
|
22
|
+
"capabilities.json",
|
|
23
|
+
"release-manifest.json",
|
|
24
|
+
"LICENSE",
|
|
25
|
+
"THIRD_PARTY_NOTICES.md",
|
|
26
|
+
"scripts/validate-package.mjs"
|
|
27
|
+
],
|
|
28
|
+
"scripts": {
|
|
29
|
+
"build": "node scripts/sync-skill.mjs && esbuild src/main.ts --bundle --platform=node --format=esm --target=node22 --outfile=dist/main.js && esbuild src/board-plugin.ts --bundle --platform=node --format=esm --target=node22 --outfile=dist/board-plugin.js --metafile=dist/board-plugin.meta.json && node scripts/build-plugin-notices.mjs",
|
|
30
|
+
"typecheck": "tsc -p tsconfig.json --noEmit",
|
|
31
|
+
"prepublishOnly": "npm run typecheck && node scripts/sync-skill.mjs && npm run build",
|
|
32
|
+
"prepack": "node scripts/validate-package.mjs"
|
|
33
|
+
},
|
|
34
|
+
"devDependencies": {
|
|
35
|
+
"@modelcontextprotocol/sdk": "1.32.2",
|
|
36
|
+
"@types/node": "^24.10.1",
|
|
37
|
+
"esbuild": "^0.25.5",
|
|
38
|
+
"typescript": "^5.9.3"
|
|
39
|
+
},
|
|
40
|
+
"publishConfig": {
|
|
41
|
+
"access": "public"
|
|
42
|
+
},
|
|
43
|
+
"repository": {
|
|
44
|
+
"type": "git",
|
|
45
|
+
"url": "https://github.com/petercjl/iterlay.git",
|
|
46
|
+
"directory": "cli"
|
|
47
|
+
},
|
|
48
|
+
"agentPackage": {
|
|
49
|
+
"kind": "cli-skill",
|
|
50
|
+
"canonicalSkill": "skills/using-tuda",
|
|
51
|
+
"capabilities": "capabilities.json",
|
|
52
|
+
"installGuide": "INSTALL.md",
|
|
53
|
+
"updateGuide": "UPDATE.md"
|
|
54
|
+
},
|
|
55
|
+
"exports": {
|
|
56
|
+
"./board-plugin": "./dist/board-plugin.js"
|
|
57
|
+
}
|
|
58
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { URL } from "node:url";
|
|
2
|
+
import console from "node:console";
|
|
3
|
+
import assert from "node:assert/strict";
|
|
4
|
+
import { readFile } from "node:fs/promises";
|
|
5
|
+
const root = new URL("../", import.meta.url);
|
|
6
|
+
const read = (file) => readFile(new URL(file, root), "utf8");
|
|
7
|
+
const pkg = JSON.parse(await read("package.json"));
|
|
8
|
+
const caps = JSON.parse(await read("capabilities.json"));
|
|
9
|
+
assert.equal(pkg.name, "@petercjl/tuda");
|
|
10
|
+
assert.equal(pkg.version, caps.version);
|
|
11
|
+
assert((await read("skills/using-tuda/SKILL.md")).includes(`version: "${pkg.version}"`));
|
|
12
|
+
for (const name of ["dist/main.js", "dist/board-plugin.js", "dist/board-plugin.LICENSES.txt", "LICENSE", "THIRD_PARTY_NOTICES.md", "INSTALL.md", "UPDATE.md", "release-manifest.json"]) await read(name);
|
|
13
|
+
if (pkg.tudaRelease) {
|
|
14
|
+
assert.equal(pkg.tudaRelease.applicationVersion, pkg.version);
|
|
15
|
+
assert(pkg.tudaRelease.installers.length > 0);
|
|
16
|
+
for (const item of pkg.tudaRelease.installers) {
|
|
17
|
+
assert.equal(item.version, pkg.version);
|
|
18
|
+
assert.match(item.sha256, /^[a-f0-9]{64}$/);
|
|
19
|
+
assert(item.downloadUrl.startsWith(`https://github.com/petercjl/iterlay/releases/download/tuda-v${pkg.version}/`));
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
console.log(JSON.stringify({ ok: true, package: pkg.name, version: pkg.version, desktopReleasePresent: Boolean(pkg.tudaRelease) }));
|