@ubnt/cawcut 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.
Files changed (76) hide show
  1. package/config/developer-capabilities.json +36 -0
  2. package/config/products.json +45 -0
  3. package/dist/commands/app.d.ts +2 -0
  4. package/dist/commands/app.js +156 -0
  5. package/dist/commands/app.js.map +1 -0
  6. package/dist/commands/auth.d.ts +2 -0
  7. package/dist/commands/auth.js +62 -0
  8. package/dist/commands/auth.js.map +1 -0
  9. package/dist/commands/capabilities.d.ts +2 -0
  10. package/dist/commands/capabilities.js +83 -0
  11. package/dist/commands/capabilities.js.map +1 -0
  12. package/dist/commands/generate.d.ts +2 -0
  13. package/dist/commands/generate.js +73 -0
  14. package/dist/commands/generate.js.map +1 -0
  15. package/dist/commands/set.d.ts +2 -0
  16. package/dist/commands/set.js +25 -0
  17. package/dist/commands/set.js.map +1 -0
  18. package/dist/commands/task.d.ts +2 -0
  19. package/dist/commands/task.js +48 -0
  20. package/dist/commands/task.js.map +1 -0
  21. package/dist/index.d.ts +2 -0
  22. package/dist/index.js +21 -0
  23. package/dist/index.js.map +1 -0
  24. package/dist/lib/app-inputs.d.ts +17 -0
  25. package/dist/lib/app-inputs.js +191 -0
  26. package/dist/lib/app-inputs.js.map +1 -0
  27. package/dist/lib/assets.d.ts +16 -0
  28. package/dist/lib/assets.js +42 -0
  29. package/dist/lib/assets.js.map +1 -0
  30. package/dist/lib/capabilities.d.ts +6 -0
  31. package/dist/lib/capabilities.js +17 -0
  32. package/dist/lib/capabilities.js.map +1 -0
  33. package/dist/lib/capability-catalog.d.ts +56 -0
  34. package/dist/lib/capability-catalog.js +135 -0
  35. package/dist/lib/capability-catalog.js.map +1 -0
  36. package/dist/lib/capability-catalog.json +2743 -0
  37. package/dist/lib/config.d.ts +46 -0
  38. package/dist/lib/config.js +177 -0
  39. package/dist/lib/config.js.map +1 -0
  40. package/dist/lib/credentials.d.ts +11 -0
  41. package/dist/lib/credentials.js +47 -0
  42. package/dist/lib/credentials.js.map +1 -0
  43. package/dist/lib/developer.d.ts +36 -0
  44. package/dist/lib/developer.js +75 -0
  45. package/dist/lib/developer.js.map +1 -0
  46. package/dist/lib/download.d.ts +3 -0
  47. package/dist/lib/download.js +38 -0
  48. package/dist/lib/download.js.map +1 -0
  49. package/dist/lib/generate-request.d.ts +20 -0
  50. package/dist/lib/generate-request.js +74 -0
  51. package/dist/lib/generate-request.js.map +1 -0
  52. package/dist/lib/http.d.ts +16 -0
  53. package/dist/lib/http.js +90 -0
  54. package/dist/lib/http.js.map +1 -0
  55. package/dist/lib/local-config.d.ts +6 -0
  56. package/dist/lib/local-config.js +23 -0
  57. package/dist/lib/local-config.js.map +1 -0
  58. package/dist/lib/oauth.d.ts +25 -0
  59. package/dist/lib/oauth.js +141 -0
  60. package/dist/lib/oauth.js.map +1 -0
  61. package/dist/lib/output.d.ts +4 -0
  62. package/dist/lib/output.js +22 -0
  63. package/dist/lib/output.js.map +1 -0
  64. package/dist/lib/poll.d.ts +12 -0
  65. package/dist/lib/poll.js +26 -0
  66. package/dist/lib/poll.js.map +1 -0
  67. package/dist/lib/result-output.d.ts +18 -0
  68. package/dist/lib/result-output.js +82 -0
  69. package/dist/lib/result-output.js.map +1 -0
  70. package/dist/lib/spinner.d.ts +5 -0
  71. package/dist/lib/spinner.js +39 -0
  72. package/dist/lib/spinner.js.map +1 -0
  73. package/dist/lib/validate-generate.d.ts +21 -0
  74. package/dist/lib/validate-generate.js +191 -0
  75. package/dist/lib/validate-generate.js.map +1 -0
  76. package/package.json +34 -0
@@ -0,0 +1,191 @@
1
+ import { getCapabilitySpec, getModelSpec, listCapabilityKeys, } from "./capability-catalog.js";
2
+ export function validateGenerateInput(input) {
3
+ const spec = getCapabilitySpec(input.capability);
4
+ if (!spec) {
5
+ throw new Error(`Unknown capability "${input.capability}". Valid: ${listCapabilityKeys().join(", ")}`);
6
+ }
7
+ const modelId = input.model?.trim() || spec.defaultModel;
8
+ const model = getModelSpec(spec, modelId);
9
+ if (!model) {
10
+ const allowed = spec.models.map((m) => m.id).join(", ");
11
+ throw new Error(`Unknown model "${modelId}" for capability "${spec.capability}". Valid: ${allowed}`);
12
+ }
13
+ const mediaCounts = countMediaFlags(input);
14
+ validateMedia(spec, model, mediaCounts);
15
+ const prompt = input.prompt?.trim() ?? "";
16
+ if (!prompt && !hasAnyMedia(mediaCounts) && spec.requiresMedia !== "omni") {
17
+ if (spec.requiresMedia) {
18
+ // media-only capabilities may omit prompt when optional on BE; still allow empty if media present
19
+ }
20
+ else {
21
+ throw new Error("Prompt is required unless media inputs are provided.");
22
+ }
23
+ }
24
+ const params = mergeAndValidateParams(spec, model, input.params ?? {});
25
+ return {
26
+ capability: spec.capability,
27
+ model: model.id,
28
+ params,
29
+ prompt,
30
+ mediaCounts,
31
+ };
32
+ }
33
+ function countMediaFlags(input) {
34
+ return {
35
+ images: input.image?.length ?? 0,
36
+ videos: input.video?.length ?? 0,
37
+ audios: input.audio?.length ?? 0,
38
+ };
39
+ }
40
+ function hasAnyMedia(counts) {
41
+ return counts.images + counts.videos + counts.audios > 0;
42
+ }
43
+ function validateMedia(spec, model, counts) {
44
+ const total = counts.images + counts.videos + counts.audios;
45
+ switch (spec.requiresMedia) {
46
+ case "image":
47
+ if (counts.images < 1 || counts.videos > 0 || counts.audios > 0) {
48
+ throw new Error(`Capability "${spec.capability}" requires at least one --image (no --video/--audio).`);
49
+ }
50
+ break;
51
+ case "video":
52
+ if (counts.videos < 1 || counts.images > 0 || counts.audios > 0) {
53
+ throw new Error(`Capability "${spec.capability}" requires at least one --video (no --image/--audio).`);
54
+ }
55
+ break;
56
+ case "audio":
57
+ if (counts.audios < 1 || counts.images > 0 || counts.videos > 0) {
58
+ throw new Error(`Capability "${spec.capability}" requires at least one --audio (no --image/--video).`);
59
+ }
60
+ break;
61
+ case "omni": {
62
+ const typesUsed = [counts.images, counts.videos, counts.audios].filter((c) => c > 0).length;
63
+ if (typesUsed === 0) {
64
+ throw new Error(`Capability "${spec.capability}" requires at least one of --image, --video, or --audio.`);
65
+ }
66
+ if (typesUsed > 1) {
67
+ throw new Error(`Capability "${spec.capability}" requires exactly one media type (--image, --video, or --audio) — do not mix types.`);
68
+ }
69
+ break;
70
+ }
71
+ default:
72
+ if (total > 0) {
73
+ throw new Error(`Capability "${spec.capability}" does not accept media inputs.`);
74
+ }
75
+ break;
76
+ }
77
+ assertMediaLimit("image", counts.images, model.media.images, spec.cliMedia.maxImages);
78
+ assertMediaLimit("video", counts.videos, model.media.videos, spec.cliMedia.maxVideos);
79
+ assertMediaLimit("audio", counts.audios, model.media.audios, spec.cliMedia.maxAudios);
80
+ }
81
+ function assertMediaLimit(kind, count, modelLimit, cliMax) {
82
+ if (count === 0) {
83
+ return;
84
+ }
85
+ const effectiveMax = modelLimit.max > 0 ? Math.min(modelLimit.max, cliMax) : cliMax;
86
+ if (modelLimit.min > 0 && count < modelLimit.min) {
87
+ throw new Error(`Model requires at least ${modelLimit.min} ${kind}(s); got ${count}.`);
88
+ }
89
+ if (count > effectiveMax) {
90
+ throw new Error(`At most ${effectiveMax} ${kind}(s) allowed for this model via CLI (model max ${modelLimit.max}).`);
91
+ }
92
+ }
93
+ function mergeAndValidateParams(spec, model, raw) {
94
+ const allowed = new Map(model.params.map((p) => [p.name, p]));
95
+ const out = {};
96
+ for (const [key, value] of Object.entries(raw)) {
97
+ const param = allowed.get(key);
98
+ if (!param) {
99
+ throw new Error(`Unsupported param "${key}" for model "${model.id}" (${spec.capability}). ` +
100
+ `Valid: ${[...allowed.keys()].join(", ") || "(none)"}`);
101
+ }
102
+ out[key] = coerceParam(param, value);
103
+ }
104
+ for (const param of model.params) {
105
+ if (out[param.name] !== undefined) {
106
+ continue;
107
+ }
108
+ if (param.default !== undefined && param.default !== "") {
109
+ out[param.name] = coerceParam(param, param.default);
110
+ }
111
+ }
112
+ return out;
113
+ }
114
+ function coerceParam(param, value) {
115
+ validateParamValue(param, value);
116
+ switch (param.type) {
117
+ case "int":
118
+ case "long":
119
+ return coerceInt(value);
120
+ case "float":
121
+ return coerceFloat(value);
122
+ case "bool":
123
+ return coerceBool(value);
124
+ default:
125
+ return String(value);
126
+ }
127
+ }
128
+ function validateParamValue(param, value) {
129
+ const label = param.title ? `${param.name} (${param.title})` : param.name;
130
+ if (param.type === "bool") {
131
+ coerceBool(value);
132
+ return;
133
+ }
134
+ if (param.type === "string") {
135
+ const str = String(value);
136
+ if (param.enum && !param.enum.includes(str)) {
137
+ throw new Error(`Param ${label}=${str} not in [${param.enum.join(", ")}]`);
138
+ }
139
+ if (param.minLength !== undefined && str.length < param.minLength) {
140
+ throw new Error(`Param ${label} shorter than min length ${param.minLength}`);
141
+ }
142
+ if (param.maxLength !== undefined && str.length > param.maxLength) {
143
+ throw new Error(`Param ${label} longer than max length ${param.maxLength}`);
144
+ }
145
+ return;
146
+ }
147
+ const num = coerceFloat(value);
148
+ if (param.min !== undefined && num < param.min) {
149
+ throw new Error(`Param ${label}=${value} below minimum ${param.min}`);
150
+ }
151
+ if (param.max !== undefined && num > param.max) {
152
+ throw new Error(`Param ${label}=${value} above maximum ${param.max}`);
153
+ }
154
+ if (param.enum && !param.enum.includes(String(value))) {
155
+ throw new Error(`Param ${label}=${value} not in [${param.enum.join(", ")}]`);
156
+ }
157
+ }
158
+ function coerceInt(value) {
159
+ if (typeof value === "number" && Number.isInteger(value)) {
160
+ return value;
161
+ }
162
+ const n = Number.parseInt(String(value).trim(), 10);
163
+ if (Number.isNaN(n)) {
164
+ throw new Error(`Expected integer, got ${JSON.stringify(value)}`);
165
+ }
166
+ return n;
167
+ }
168
+ function coerceFloat(value) {
169
+ if (typeof value === "number") {
170
+ return value;
171
+ }
172
+ const n = Number.parseFloat(String(value).trim());
173
+ if (Number.isNaN(n)) {
174
+ throw new Error(`Expected number, got ${JSON.stringify(value)}`);
175
+ }
176
+ return n;
177
+ }
178
+ function coerceBool(value) {
179
+ if (typeof value === "boolean") {
180
+ return value;
181
+ }
182
+ const s = String(value).trim().toLowerCase();
183
+ if (s === "true" || s === "1" || s === "yes") {
184
+ return true;
185
+ }
186
+ if (s === "false" || s === "0" || s === "no") {
187
+ return false;
188
+ }
189
+ throw new Error(`Expected boolean, got ${JSON.stringify(value)}`);
190
+ }
191
+ //# sourceMappingURL=validate-generate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate-generate.js","sourceRoot":"","sources":["../../src/lib/validate-generate.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,34 @@
1
+ {
2
+ "name": "@ubnt/cawcut",
3
+ "version": "0.1.0",
4
+ "description": "CawCut developer CLI — auth, generate, app run, task status",
5
+ "type": "module",
6
+ "bin": {
7
+ "cawcut": "dist/index.js"
8
+ },
9
+ "main": "dist/index.js",
10
+ "files": [
11
+ "dist",
12
+ "config"
13
+ ],
14
+ "scripts": {
15
+ "sync:catalog": "node scripts/sync-capability-catalog.mjs && node scripts/generate-models-doc.mjs",
16
+ "build:ts": "tsc && cp src/lib/capability-catalog.json dist/lib/capability-catalog.json",
17
+ "build": "npm run sync:catalog && npm run build:ts",
18
+ "prepare": "npm run build:ts",
19
+ "test": "vitest run",
20
+ "prepublishOnly": "npm run build:ts"
21
+ },
22
+ "dependencies": {
23
+ "commander": "^13.1.0"
24
+ },
25
+ "devDependencies": {
26
+ "@types/node": "^22.15.0",
27
+ "typescript": "^5.8.3",
28
+ "vitest": "^3.1.4"
29
+ },
30
+ "engines": {
31
+ "node": ">=20"
32
+ },
33
+ "license": "MIT"
34
+ }