@arinova-ai/cli 0.0.3 → 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.
- package/dist/api.d.ts.map +1 -1
- package/dist/api.js +13 -7
- package/dist/api.js.map +1 -1
- package/dist/client.d.ts +13 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +104 -0
- package/dist/client.js.map +1 -0
- package/dist/commands/app.d.ts +3 -0
- package/dist/commands/app.d.ts.map +1 -0
- package/dist/commands/app.js +104 -0
- package/dist/commands/app.js.map +1 -0
- package/dist/commands/auth.d.ts +3 -0
- package/dist/commands/auth.d.ts.map +1 -0
- package/dist/commands/auth.js +151 -0
- package/dist/commands/auth.js.map +1 -0
- package/dist/commands/community.d.ts +3 -0
- package/dist/commands/community.d.ts.map +1 -0
- package/dist/commands/community.js +155 -0
- package/dist/commands/community.js.map +1 -0
- package/dist/commands/expert.d.ts +3 -0
- package/dist/commands/expert.d.ts.map +1 -0
- package/dist/commands/expert.js +140 -0
- package/dist/commands/expert.js.map +1 -0
- package/dist/commands/kanban.js +3 -3
- package/dist/commands/kanban.js.map +1 -1
- package/dist/commands/list.d.ts +3 -0
- package/dist/commands/list.d.ts.map +1 -0
- package/dist/commands/list.js +93 -0
- package/dist/commands/list.js.map +1 -0
- package/dist/commands/memory.js +1 -1
- package/dist/commands/memory.js.map +1 -1
- package/dist/commands/space.d.ts +3 -0
- package/dist/commands/space.d.ts.map +1 -0
- package/dist/commands/space.js +134 -0
- package/dist/commands/space.js.map +1 -0
- package/dist/commands/stats.d.ts +3 -0
- package/dist/commands/stats.d.ts.map +1 -0
- package/dist/commands/stats.js +31 -0
- package/dist/commands/stats.js.map +1 -0
- package/dist/commands/sticker.d.ts +3 -0
- package/dist/commands/sticker.d.ts.map +1 -0
- package/dist/commands/sticker.js +142 -0
- package/dist/commands/sticker.js.map +1 -0
- package/dist/commands/theme.d.ts +3 -0
- package/dist/commands/theme.d.ts.map +1 -0
- package/dist/commands/theme.js +547 -0
- package/dist/commands/theme.js.map +1 -0
- package/dist/config.d.ts +10 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +39 -0
- package/dist/config.js.map +1 -0
- package/dist/index.js +44 -5
- package/dist/index.js.map +1 -1
- package/dist/output.d.ts +10 -0
- package/dist/output.d.ts.map +1 -0
- package/dist/output.js +99 -0
- package/dist/output.js.map +1 -0
- package/package.json +6 -4
|
@@ -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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"}
|
package/dist/config.d.ts
ADDED
|
@@ -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"}
|