@arinova-ai/cli 0.0.4 → 0.0.6

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 (56) hide show
  1. package/dist/api.d.ts.map +1 -1
  2. package/dist/api.js +12 -4
  3. package/dist/api.js.map +1 -1
  4. package/dist/client.d.ts +13 -0
  5. package/dist/client.d.ts.map +1 -0
  6. package/dist/client.js +104 -0
  7. package/dist/client.js.map +1 -0
  8. package/dist/commands/app.d.ts +3 -0
  9. package/dist/commands/app.d.ts.map +1 -0
  10. package/dist/commands/app.js +104 -0
  11. package/dist/commands/app.js.map +1 -0
  12. package/dist/commands/auth.d.ts +3 -0
  13. package/dist/commands/auth.d.ts.map +1 -0
  14. package/dist/commands/auth.js +151 -0
  15. package/dist/commands/auth.js.map +1 -0
  16. package/dist/commands/community.d.ts +3 -0
  17. package/dist/commands/community.d.ts.map +1 -0
  18. package/dist/commands/community.js +155 -0
  19. package/dist/commands/community.js.map +1 -0
  20. package/dist/commands/expert.d.ts +3 -0
  21. package/dist/commands/expert.d.ts.map +1 -0
  22. package/dist/commands/expert.js +140 -0
  23. package/dist/commands/expert.js.map +1 -0
  24. package/dist/commands/kanban.js +3 -3
  25. package/dist/commands/kanban.js.map +1 -1
  26. package/dist/commands/list.d.ts +3 -0
  27. package/dist/commands/list.d.ts.map +1 -0
  28. package/dist/commands/list.js +93 -0
  29. package/dist/commands/list.js.map +1 -0
  30. package/dist/commands/space.d.ts +3 -0
  31. package/dist/commands/space.d.ts.map +1 -0
  32. package/dist/commands/space.js +134 -0
  33. package/dist/commands/space.js.map +1 -0
  34. package/dist/commands/stats.d.ts +3 -0
  35. package/dist/commands/stats.d.ts.map +1 -0
  36. package/dist/commands/stats.js +31 -0
  37. package/dist/commands/stats.js.map +1 -0
  38. package/dist/commands/sticker.d.ts +3 -0
  39. package/dist/commands/sticker.d.ts.map +1 -0
  40. package/dist/commands/sticker.js +142 -0
  41. package/dist/commands/sticker.js.map +1 -0
  42. package/dist/commands/theme.d.ts +3 -0
  43. package/dist/commands/theme.d.ts.map +1 -0
  44. package/dist/commands/theme.js +547 -0
  45. package/dist/commands/theme.js.map +1 -0
  46. package/dist/config.d.ts +10 -0
  47. package/dist/config.d.ts.map +1 -0
  48. package/dist/config.js +39 -0
  49. package/dist/config.js.map +1 -0
  50. package/dist/index.js +40 -4
  51. package/dist/index.js.map +1 -1
  52. package/dist/output.d.ts +10 -0
  53. package/dist/output.d.ts.map +1 -0
  54. package/dist/output.js +99 -0
  55. package/dist/output.js.map +1 -0
  56. package/package.json +2 -2
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sticker.js","sourceRoot":"","sources":["../../src/commands/sticker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare function registerTheme(program: Command): void;
3
+ //# sourceMappingURL=theme.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../../src/commands/theme.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgBpC,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAoYpD"}
@@ -0,0 +1,547 @@
1
+ import { get, del, patch, uploadMultipart } from "../client.js";
2
+ import { printResult, printError, printSuccess, table } from "../output.js";
3
+ import { readFileSync, writeFileSync, existsSync, mkdirSync, readdirSync, statSync, watch, } from "node:fs";
4
+ import { join, extname, resolve } from "node:path";
5
+ import { createServer } from "node:http";
6
+ import { execSync } from "node:child_process";
7
+ export function registerTheme(program) {
8
+ const theme = program.command("theme").description("Theme management");
9
+ // ── Existing commands ─────────────────────────────────────
10
+ theme
11
+ .command("list")
12
+ .description("List your themes")
13
+ .action(async () => {
14
+ try {
15
+ const data = await get("/api/creator/themes");
16
+ const themes = data.themes ?? data;
17
+ if (Array.isArray(themes)) {
18
+ table(themes, [
19
+ { key: "id", label: "ID" },
20
+ { key: "name", label: "Name" },
21
+ { key: "price", label: "Price" },
22
+ { key: "status", label: "Status" },
23
+ ]);
24
+ }
25
+ else {
26
+ printResult(data);
27
+ }
28
+ }
29
+ catch (err) {
30
+ printError(err);
31
+ }
32
+ });
33
+ theme
34
+ .command("upload <manifestFile> [bundleFile]")
35
+ .description("Upload a theme (manifest JSON + optional zip bundle)")
36
+ .action(async (manifestFile, bundleFile) => {
37
+ try {
38
+ if (!existsSync(manifestFile)) {
39
+ printError(new Error(`File not found: ${manifestFile}`));
40
+ return;
41
+ }
42
+ if (bundleFile && !existsSync(bundleFile)) {
43
+ printError(new Error(`File not found: ${bundleFile}`));
44
+ return;
45
+ }
46
+ const manifestData = readFileSync(manifestFile);
47
+ const fields = {
48
+ manifest: new Blob([manifestData], { type: "application/json" }),
49
+ };
50
+ if (bundleFile) {
51
+ const bundleData = readFileSync(bundleFile);
52
+ fields.bundle = new Blob([bundleData], { type: "application/zip" });
53
+ }
54
+ const data = await uploadMultipart("/api/themes/upload", fields);
55
+ printResult(data);
56
+ }
57
+ catch (err) {
58
+ printError(err);
59
+ }
60
+ });
61
+ theme
62
+ .command("update <id> <manifestFile> [bundleFile]")
63
+ .description("Update a theme")
64
+ .action(async (id, manifestFile, bundleFile) => {
65
+ try {
66
+ if (!existsSync(manifestFile)) {
67
+ printError(new Error(`File not found: ${manifestFile}`));
68
+ return;
69
+ }
70
+ if (bundleFile && !existsSync(bundleFile)) {
71
+ printError(new Error(`File not found: ${bundleFile}`));
72
+ return;
73
+ }
74
+ const manifestData = readFileSync(manifestFile);
75
+ const fields = {
76
+ manifest: new Blob([manifestData], { type: "application/json" }),
77
+ };
78
+ if (bundleFile) {
79
+ const bundleData = readFileSync(bundleFile);
80
+ fields.bundle = new Blob([bundleData], { type: "application/zip" });
81
+ }
82
+ const data = await uploadMultipart(`/api/themes/${id}`, fields, "PUT");
83
+ printResult(data);
84
+ }
85
+ catch (err) {
86
+ printError(err);
87
+ }
88
+ });
89
+ theme
90
+ .command("delete <id>")
91
+ .description("Delete a theme")
92
+ .action(async (id) => {
93
+ try {
94
+ await del(`/api/themes/${id}`);
95
+ printSuccess(`Theme ${id} deleted.`);
96
+ }
97
+ catch (err) {
98
+ printError(err);
99
+ }
100
+ });
101
+ theme
102
+ .command("publish <id>")
103
+ .description("Publish a theme")
104
+ .action(async (id) => {
105
+ try {
106
+ const data = await patch(`/api/themes/${id}/status`, { status: "published" });
107
+ printResult(data);
108
+ }
109
+ catch (err) {
110
+ printError(err);
111
+ }
112
+ });
113
+ theme
114
+ .command("unpublish <id>")
115
+ .description("Unpublish a theme")
116
+ .action(async (id) => {
117
+ try {
118
+ const data = await patch(`/api/themes/${id}/status`, { status: "draft" });
119
+ printResult(data);
120
+ }
121
+ catch (err) {
122
+ printError(err);
123
+ }
124
+ });
125
+ theme
126
+ .command("info <id>")
127
+ .description("Show detailed info about a theme")
128
+ .action(async (id) => {
129
+ try {
130
+ const data = await get(`/api/themes/${id}`);
131
+ printResult(data);
132
+ }
133
+ catch (err) {
134
+ printError(err);
135
+ }
136
+ });
137
+ // ── New SDK v2 commands ───────────────────────────────────
138
+ theme
139
+ .command("init <name>")
140
+ .description("Scaffold a new SDK v2 theme project")
141
+ .action(async (name) => {
142
+ try {
143
+ const dir = resolve(name);
144
+ if (existsSync(dir)) {
145
+ printError(new Error(`Directory already exists: ${name}`));
146
+ return;
147
+ }
148
+ mkdirSync(dir, { recursive: true });
149
+ mkdirSync(join(dir, "assets"), { recursive: true });
150
+ const themeJson = {
151
+ name,
152
+ version: "1.0.0",
153
+ renderer: "iframe",
154
+ description: "",
155
+ entry: "theme.js",
156
+ };
157
+ writeFileSync(join(dir, "theme.json"), JSON.stringify(themeJson, null, 2) + "\n");
158
+ writeFileSync(join(dir, "theme.js"), `// ${name} — Arinova Office SDK v2 Theme
159
+ // Docs: https://docs.arinova.ai/themes/sdk-v2
160
+
161
+ export default {
162
+ async init(sdk, container) {
163
+ const style = document.createElement("style");
164
+ style.textContent = \`
165
+ #grid {
166
+ display: grid;
167
+ grid-template-columns: repeat(auto-fill, minmax(160px, 1fr));
168
+ gap: 12px;
169
+ padding: 16px;
170
+ height: 100%;
171
+ align-content: start;
172
+ }
173
+ .agent-card {
174
+ background: #1e293b;
175
+ border-radius: 12px;
176
+ padding: 16px;
177
+ cursor: pointer;
178
+ transition: transform 0.2s, box-shadow 0.2s;
179
+ border: 2px solid transparent;
180
+ }
181
+ .agent-card:hover { transform: scale(1.04); }
182
+ .agent-card.working { border-color: #4ade80; box-shadow: 0 0 12px #4ade8040; }
183
+ .agent-card.idle { border-color: #64748b; }
184
+ .agent-card.blocked { border-color: #f87171; }
185
+ .agent-card.collaborating { border-color: #60a5fa; }
186
+ .agent-name { font-size: 16px; font-weight: 600; color: #f1f5f9; }
187
+ .agent-role { font-size: 13px; color: #94a3b8; margin-top: 2px; }
188
+ .agent-task { font-size: 12px; color: #4ade80; margin-top: 8px; }
189
+ \`;
190
+ container.appendChild(style);
191
+ container.innerHTML += '<div id="grid"></div>';
192
+
193
+ const grid = container.querySelector("#grid");
194
+
195
+ function render(agents) {
196
+ grid.innerHTML = agents.map(function (a) {
197
+ return '<div class="agent-card ' + a.status + '" data-id="' + a.id + '">'
198
+ + '<div class="agent-name">' + a.emoji + ' ' + a.name + '</div>'
199
+ + '<div class="agent-role">' + a.role + '</div>'
200
+ + (a.currentTask ? '<div class="agent-task">' + a.currentTask.title + '</div>' : '')
201
+ + '</div>';
202
+ }).join("");
203
+
204
+ grid.querySelectorAll(".agent-card").forEach(function (card) {
205
+ card.addEventListener("click", function () {
206
+ sdk.selectAgent(card.dataset.id);
207
+ });
208
+ });
209
+ }
210
+
211
+ render(sdk.agents);
212
+ sdk.onAgentsChange(render);
213
+ },
214
+
215
+ resize(w, h) {},
216
+ destroy() {},
217
+ };
218
+ `);
219
+ printSuccess(`Theme scaffolded in ./${name}/`);
220
+ console.log(" theme.json — metadata");
221
+ console.log(" theme.js — entry point");
222
+ console.log(" assets/ — static resources");
223
+ console.log("");
224
+ console.log("Next steps:");
225
+ console.log(` cd ${name}`);
226
+ console.log(" arinova theme dev");
227
+ }
228
+ catch (err) {
229
+ printError(err);
230
+ }
231
+ });
232
+ theme
233
+ .command("dev")
234
+ .description("Start local dev server for theme development")
235
+ .option("-p, --port <port>", "Port number", "3100")
236
+ .action(async (opts) => {
237
+ try {
238
+ const cwd = process.cwd();
239
+ const manifestPath = join(cwd, "theme.json");
240
+ if (!existsSync(manifestPath)) {
241
+ printError(new Error("theme.json not found. Run this inside a theme directory."));
242
+ return;
243
+ }
244
+ const manifest = JSON.parse(readFileSync(manifestPath, "utf-8"));
245
+ const themeName = manifest.name || "dev-theme";
246
+ const port = parseInt(opts.port, 10);
247
+ const MOCK_BRIDGE = generateMockBridge(themeName);
248
+ const RUNTIME_HTML = generateDevHtml(themeName);
249
+ const MIME = {
250
+ ".html": "text/html",
251
+ ".js": "text/javascript",
252
+ ".mjs": "text/javascript",
253
+ ".css": "text/css",
254
+ ".json": "application/json",
255
+ ".png": "image/png",
256
+ ".jpg": "image/jpeg",
257
+ ".jpeg": "image/jpeg",
258
+ ".gif": "image/gif",
259
+ ".svg": "image/svg+xml",
260
+ ".webp": "image/webp",
261
+ ".woff": "font/woff",
262
+ ".woff2": "font/woff2",
263
+ ".ttf": "font/ttf",
264
+ ".mp3": "audio/mpeg",
265
+ ".ogg": "audio/ogg",
266
+ ".wav": "audio/wav",
267
+ ".glb": "model/gltf-binary",
268
+ };
269
+ const server = createServer((req, res) => {
270
+ const url = req.url || "/";
271
+ if (url === "/" || url === "/index.html") {
272
+ res.writeHead(200, { "Content-Type": "text/html" });
273
+ res.end(RUNTIME_HTML);
274
+ return;
275
+ }
276
+ if (url === "/bridge.js") {
277
+ res.writeHead(200, { "Content-Type": "text/javascript" });
278
+ res.end(MOCK_BRIDGE);
279
+ return;
280
+ }
281
+ if (url === "/theme.js") {
282
+ const entry = manifest.entry || "theme.js";
283
+ const filePath = join(cwd, entry);
284
+ if (!existsSync(filePath)) {
285
+ res.writeHead(404);
286
+ res.end("Not found");
287
+ return;
288
+ }
289
+ res.writeHead(200, { "Content-Type": "text/javascript" });
290
+ res.end(readFileSync(filePath));
291
+ return;
292
+ }
293
+ // Serve assets
294
+ if (url.startsWith("/assets/")) {
295
+ const relPath = url.slice("/assets/".length);
296
+ const filePath = join(cwd, "assets", relPath);
297
+ if (existsSync(filePath) && statSync(filePath).isFile()) {
298
+ const ext = extname(filePath).toLowerCase();
299
+ const ct = MIME[ext] || "application/octet-stream";
300
+ res.writeHead(200, { "Content-Type": ct });
301
+ res.end(readFileSync(filePath));
302
+ return;
303
+ }
304
+ }
305
+ // Live reload event stream
306
+ if (url === "/__reload") {
307
+ res.writeHead(200, {
308
+ "Content-Type": "text/event-stream",
309
+ "Cache-Control": "no-cache",
310
+ Connection: "keep-alive",
311
+ });
312
+ res.write("data: connected\n\n");
313
+ const watcher = watch(cwd, { recursive: true }, (_event, filename) => {
314
+ if (filename && !filename.startsWith(".") && !filename.includes("node_modules")) {
315
+ res.write("data: reload\n\n");
316
+ }
317
+ });
318
+ req.on("close", () => watcher.close());
319
+ return;
320
+ }
321
+ res.writeHead(404);
322
+ res.end("Not found");
323
+ });
324
+ server.listen(port, () => {
325
+ console.log(`\n Arinova Theme Dev Server`);
326
+ console.log(` Theme: ${themeName}`);
327
+ console.log(` URL: http://localhost:${port}`);
328
+ console.log(` Press Ctrl+C to stop\n`);
329
+ });
330
+ }
331
+ catch (err) {
332
+ printError(err);
333
+ }
334
+ });
335
+ theme
336
+ .command("build")
337
+ .description("Package theme as a ZIP for upload")
338
+ .action(async () => {
339
+ try {
340
+ const cwd = process.cwd();
341
+ const manifestPath = join(cwd, "theme.json");
342
+ if (!existsSync(manifestPath)) {
343
+ printError(new Error("theme.json not found. Run this inside a theme directory."));
344
+ return;
345
+ }
346
+ const manifest = JSON.parse(readFileSync(manifestPath, "utf-8"));
347
+ if (!manifest.name) {
348
+ printError(new Error("theme.json is missing 'name' field."));
349
+ return;
350
+ }
351
+ if (!manifest.entry) {
352
+ printError(new Error("theme.json is missing 'entry' field."));
353
+ return;
354
+ }
355
+ const entry = manifest.entry || "theme.js";
356
+ if (!existsSync(join(cwd, entry))) {
357
+ printError(new Error(`Entry file not found: ${entry}`));
358
+ return;
359
+ }
360
+ const outFile = `${manifest.name}.zip`;
361
+ // Collect files to include
362
+ const files = ["theme.json", entry];
363
+ const assetsDir = join(cwd, "assets");
364
+ if (existsSync(assetsDir) && statSync(assetsDir).isDirectory()) {
365
+ collectFiles(assetsDir, "assets", files);
366
+ }
367
+ // Use system zip command
368
+ const fileList = files.join(" ");
369
+ execSync(`zip -r "${outFile}" ${fileList}`, { cwd, stdio: "pipe" });
370
+ const size = statSync(join(cwd, outFile)).size;
371
+ printSuccess(`Built ${outFile} (${(size / 1024).toFixed(1)} KB, ${files.length} files)`);
372
+ console.log("\nUpload with:");
373
+ console.log(` arinova theme upload theme.json ${outFile}`);
374
+ }
375
+ catch (err) {
376
+ printError(err);
377
+ }
378
+ });
379
+ }
380
+ // ── Helpers ─────────────────────────────────────────────────
381
+ function collectFiles(dir, prefix, out) {
382
+ for (const entry of readdirSync(dir)) {
383
+ if (entry.startsWith("."))
384
+ continue;
385
+ const full = join(dir, entry);
386
+ const rel = prefix + "/" + entry;
387
+ if (statSync(full).isDirectory()) {
388
+ collectFiles(full, rel, out);
389
+ }
390
+ else {
391
+ out.push(rel);
392
+ }
393
+ }
394
+ }
395
+ function generateDevHtml(themeName) {
396
+ return `<!DOCTYPE html>
397
+ <html>
398
+ <head>
399
+ <meta charset="utf-8">
400
+ <meta name="viewport" content="width=device-width,initial-scale=1">
401
+ <title>${themeName} — Dev</title>
402
+ <style>
403
+ html, body { margin: 0; padding: 0; width: 100%; height: 100%; overflow: hidden; background: #0f172a; }
404
+ #container { width: 100%; height: 100%; }
405
+ </style>
406
+ </head>
407
+ <body>
408
+ <div id="container"></div>
409
+ <script src="/bridge.js"></script>
410
+ <script type="module">
411
+ import theme from "/theme.js";
412
+ window.__ARINOVA_REGISTER_THEME__(theme);
413
+ </script>
414
+ <script>
415
+ var es = new EventSource("/__reload");
416
+ es.onmessage = function(e) { if (e.data === "reload") location.reload(); };
417
+ </script>
418
+ </body>
419
+ </html>`;
420
+ }
421
+ function generateMockBridge(themeName) {
422
+ return `(function() {
423
+ "use strict";
424
+
425
+ var THEME_ID = "${themeName}";
426
+ var ASSETS_BASE = "/assets";
427
+
428
+ var MOCK_NAMES = ["Alice", "Bob", "Charlie", "Diana", "Eve"];
429
+ var MOCK_ROLES = ["Engineer", "Designer", "PM", "QA", "Writer"];
430
+ var MOCK_EMOJIS = ["\\u{1F469}\\u200D\\u{1F4BB}", "\\u{1F468}\\u200D\\u{1F527}", "\\u{1F9D1}\\u200D\\u{1F3A8}", "\\u{1F9D1}\\u200D\\u{1F52C}", "\\u270D\\uFE0F"];
431
+ var MOCK_COLORS = ["#f472b6", "#60a5fa", "#4ade80", "#fbbf24", "#a78bfa"];
432
+ var STATUSES = ["working", "idle", "blocked", "collaborating"];
433
+
434
+ function makeMockAgents() {
435
+ return MOCK_NAMES.map(function(name, i) {
436
+ var status = STATUSES[Math.floor(Math.random() * STATUSES.length)];
437
+ return {
438
+ id: "agent-" + (i + 1),
439
+ name: name,
440
+ role: MOCK_ROLES[i],
441
+ emoji: MOCK_EMOJIS[i],
442
+ color: MOCK_COLORS[i],
443
+ status: status,
444
+ online: true,
445
+ collaboratingWith: status === "collaborating" ? ["agent-" + (((i + 1) % 5) + 1)] : [],
446
+ currentTask: status === "working" ? { title: "Task #" + (i + 1), priority: "medium", progress: Math.floor(Math.random() * 100), subtasks: [] } : null,
447
+ recentActivity: [{ time: new Date().toISOString(), text: "Updated status to " + status }],
448
+ model: "claude-sonnet-4",
449
+ tokenUsage: { input: 1000 + i * 500, output: 500 + i * 200, total: 1500 + i * 700 },
450
+ sessionDurationMs: 60000 * (i + 1),
451
+ currentToolDetail: status === "working" ? "edit_file" : null,
452
+ };
453
+ });
454
+ }
455
+
456
+ var _agents = makeMockAgents();
457
+ var _agentListeners = [];
458
+ var _user = { id: "dev-user", name: "Developer", username: "dev" };
459
+ var _themeVersion = "0.0.0";
460
+ var _width = window.innerWidth;
461
+ var _height = window.innerHeight;
462
+ var _isMobile = window.innerWidth < 768;
463
+ var _pixelRatio = window.devicePixelRatio || 1;
464
+ var _initialized = false;
465
+ var _themeModule = null;
466
+ var _container = null;
467
+
468
+ function notifyAgentListeners() {
469
+ for (var i = 0; i < _agentListeners.length; i++) {
470
+ try { _agentListeners[i](_agents); } catch (e) { console.error("[MockSDK]", e); }
471
+ }
472
+ }
473
+
474
+ var sdk = {
475
+ get agents() { return _agents; },
476
+ onAgentsChange: function(cb) {
477
+ _agentListeners.push(cb);
478
+ return function() {
479
+ var idx = _agentListeners.indexOf(cb);
480
+ if (idx !== -1) _agentListeners.splice(idx, 1);
481
+ };
482
+ },
483
+ getAgent: function(id) { return _agents.find(function(a) { return a.id === id; }); },
484
+ assetUrl: function(rel) {
485
+ if (!rel) return "";
486
+ if (rel.charAt(0) === "/") rel = rel.slice(1);
487
+ return ASSETS_BASE + "/" + rel;
488
+ },
489
+ loadJSON: function(rel) {
490
+ return fetch(sdk.assetUrl(rel)).then(function(r) {
491
+ if (!r.ok) throw new Error("Failed to load " + rel);
492
+ return r.json();
493
+ });
494
+ },
495
+ loadFont: function(name, rel) {
496
+ var face = new FontFace(name, "url(" + sdk.assetUrl(rel) + ")");
497
+ return face.load().then(function(f) { document.fonts.add(f); });
498
+ },
499
+ selectAgent: function(id) { console.log("[MockSDK] selectAgent:", id); },
500
+ openChat: function(id) { console.log("[MockSDK] openChat:", id); },
501
+ navigate: function(path) { console.log("[MockSDK] navigate:", path); },
502
+ emit: function(event, data) { console.log("[MockSDK] emit:", event, data); },
503
+ get width() { return _width; },
504
+ get height() { return _height; },
505
+ get isMobile() { return _isMobile; },
506
+ get pixelRatio() { return _pixelRatio; },
507
+ get user() { return _user; },
508
+ get themeId() { return THEME_ID; },
509
+ get themeVersion() { return _themeVersion; },
510
+ };
511
+
512
+ window.__ARINOVA_SDK__ = sdk;
513
+
514
+ window.__ARINOVA_REGISTER_THEME__ = function(mod) {
515
+ _themeModule = mod;
516
+ _container = document.getElementById("container");
517
+ if (!_container) return;
518
+ _initialized = true;
519
+ var m = mod.default || mod;
520
+ if (typeof m.init === "function") {
521
+ try {
522
+ var result = m.init(sdk, _container);
523
+ if (result && typeof result.catch === "function") result.catch(function(e) { console.error("[MockSDK] init error:", e); });
524
+ } catch (e) { console.error("[MockSDK] init error:", e); }
525
+ }
526
+ };
527
+
528
+ // Simulate agent updates every 5 seconds
529
+ setInterval(function() {
530
+ _agents = makeMockAgents();
531
+ notifyAgentListeners();
532
+ }, 5000);
533
+
534
+ window.addEventListener("resize", function() {
535
+ _width = window.innerWidth;
536
+ _height = window.innerHeight;
537
+ if (_themeModule) {
538
+ var m = _themeModule.default || _themeModule;
539
+ if (typeof m.resize === "function") {
540
+ try { m.resize(_width, _height); } catch (e) { console.error("[MockSDK] resize error:", e); }
541
+ }
542
+ }
543
+ });
544
+ })();
545
+ `;
546
+ }
547
+ //# sourceMappingURL=theme.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theme.js","sourceRoot":"","sources":["../../src/commands/theme.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export interface CliConfig {
2
+ apiKey?: string;
3
+ endpoint?: string;
4
+ }
5
+ export declare function loadConfig(): CliConfig;
6
+ export declare function saveConfig(config: CliConfig): void;
7
+ export declare function getEndpoint(): string;
8
+ export declare function getStagingEndpoint(): string;
9
+ export declare function getApiKey(): string | undefined;
10
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,SAAS;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAWD,wBAAgB,UAAU,IAAI,SAAS,CAOtC;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAIlD;AAID,wBAAgB,WAAW,IAAI,MAAM,CAMpC;AAED,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAED,wBAAgB,SAAS,IAAI,MAAM,GAAG,SAAS,CAE9C"}
package/dist/config.js ADDED
@@ -0,0 +1,39 @@
1
+ import { readFileSync, writeFileSync, mkdirSync, existsSync, chmodSync } from "node:fs";
2
+ import { join } from "node:path";
3
+ import { homedir } from "node:os";
4
+ const CONFIG_DIR = join(homedir(), ".arinova-cli");
5
+ const CONFIG_FILE = join(CONFIG_DIR, "config");
6
+ function ensureDir() {
7
+ if (!existsSync(CONFIG_DIR)) {
8
+ mkdirSync(CONFIG_DIR, { recursive: true, mode: 0o700 });
9
+ }
10
+ }
11
+ export function loadConfig() {
12
+ try {
13
+ const raw = readFileSync(CONFIG_FILE, "utf-8");
14
+ return JSON.parse(raw);
15
+ }
16
+ catch {
17
+ return {};
18
+ }
19
+ }
20
+ export function saveConfig(config) {
21
+ ensureDir();
22
+ writeFileSync(CONFIG_FILE, JSON.stringify(config, null, 2), { encoding: "utf-8", mode: 0o600 });
23
+ chmodSync(CONFIG_FILE, 0o600);
24
+ }
25
+ const STAGING_ENDPOINT = "https://chat-staging.arinova.ai";
26
+ export function getEndpoint() {
27
+ // Priority: env var > config file > default
28
+ if (process.env.ARINOVA_ENDPOINT) {
29
+ return process.env.ARINOVA_ENDPOINT.replace(/\/+$/, "");
30
+ }
31
+ return loadConfig().endpoint ?? "https://chat.arinova.ai";
32
+ }
33
+ export function getStagingEndpoint() {
34
+ return STAGING_ENDPOINT;
35
+ }
36
+ export function getApiKey() {
37
+ return loadConfig().apiKey;
38
+ }
39
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACxF,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAOlC,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,cAAc,CAAC,CAAC;AACnD,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;AAE/C,SAAS,SAAS;IAChB,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC1D,CAAC;AACH,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QAC/C,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAc,CAAC;IACtC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,MAAiB;IAC1C,SAAS,EAAE,CAAC;IACZ,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAChG,SAAS,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;AAChC,CAAC;AAED,MAAM,gBAAgB,GAAG,iCAAiC,CAAC;AAE3D,MAAM,UAAU,WAAW;IACzB,4CAA4C;IAC5C,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QACjC,OAAO,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAC1D,CAAC;IACD,OAAO,UAAU,EAAE,CAAC,QAAQ,IAAI,yBAAyB,CAAC;AAC5D,CAAC;AAED,MAAM,UAAU,kBAAkB;IAChC,OAAO,gBAAgB,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,SAAS;IACvB,OAAO,UAAU,EAAE,CAAC,MAAM,CAAC;AAC7B,CAAC"}