jinn-cli 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/dist/bin/jimmy.d.ts +3 -0
- package/dist/bin/jimmy.d.ts.map +1 -0
- package/dist/bin/jimmy.js +148 -0
- package/dist/bin/jimmy.js.map +1 -0
- package/dist/src/cli/chrome-allow.d.ts +5 -0
- package/dist/src/cli/chrome-allow.d.ts.map +1 -0
- package/dist/src/cli/chrome-allow.js +241 -0
- package/dist/src/cli/chrome-allow.js.map +1 -0
- package/dist/src/cli/create.d.ts +2 -0
- package/dist/src/cli/create.d.ts.map +1 -0
- package/dist/src/cli/create.js +72 -0
- package/dist/src/cli/create.js.map +1 -0
- package/dist/src/cli/instances.d.ts +14 -0
- package/dist/src/cli/instances.d.ts.map +1 -0
- package/dist/src/cli/instances.js +43 -0
- package/dist/src/cli/instances.js.map +1 -0
- package/dist/src/cli/list.d.ts +2 -0
- package/dist/src/cli/list.d.ts.map +1 -0
- package/dist/src/cli/list.js +38 -0
- package/dist/src/cli/list.js.map +1 -0
- package/dist/src/cli/migrate.d.ts +5 -0
- package/dist/src/cli/migrate.d.ts.map +1 -0
- package/dist/src/cli/migrate.js +203 -0
- package/dist/src/cli/migrate.js.map +1 -0
- package/dist/src/cli/nuke.d.ts +2 -0
- package/dist/src/cli/nuke.d.ts.map +1 -0
- package/dist/src/cli/nuke.js +91 -0
- package/dist/src/cli/nuke.js.map +1 -0
- package/dist/src/cli/remove.d.ts +4 -0
- package/dist/src/cli/remove.d.ts.map +1 -0
- package/dist/src/cli/remove.js +47 -0
- package/dist/src/cli/remove.js.map +1 -0
- package/dist/src/cli/setup.d.ts +4 -0
- package/dist/src/cli/setup.d.ts.map +1 -0
- package/dist/src/cli/setup.js +483 -0
- package/dist/src/cli/setup.js.map +1 -0
- package/dist/src/cli/skills.d.ts +28 -0
- package/dist/src/cli/skills.d.ts.map +1 -0
- package/dist/src/cli/skills.js +284 -0
- package/dist/src/cli/skills.js.map +1 -0
- package/dist/src/cli/start.d.ts +5 -0
- package/dist/src/cli/start.d.ts.map +1 -0
- package/dist/src/cli/start.js +34 -0
- package/dist/src/cli/start.js.map +1 -0
- package/dist/src/cli/status.d.ts +2 -0
- package/dist/src/cli/status.d.ts.map +1 -0
- package/dist/src/cli/status.js +60 -0
- package/dist/src/cli/status.js.map +1 -0
- package/dist/src/cli/stop.d.ts +2 -0
- package/dist/src/cli/stop.d.ts.map +1 -0
- package/dist/src/cli/stop.js +11 -0
- package/dist/src/cli/stop.js.map +1 -0
- package/dist/src/connectors/slack/format.d.ts +10 -0
- package/dist/src/connectors/slack/format.d.ts.map +1 -0
- package/dist/src/connectors/slack/format.js +55 -0
- package/dist/src/connectors/slack/format.js.map +1 -0
- package/dist/src/connectors/slack/index.d.ts +18 -0
- package/dist/src/connectors/slack/index.d.ts.map +1 -0
- package/dist/src/connectors/slack/index.js +122 -0
- package/dist/src/connectors/slack/index.js.map +1 -0
- package/dist/src/connectors/slack/threads.d.ts +2 -0
- package/dist/src/connectors/slack/threads.d.ts.map +1 -0
- package/dist/src/connectors/slack/threads.js +10 -0
- package/dist/src/connectors/slack/threads.js.map +1 -0
- package/dist/src/cron/jobs.d.ts +5 -0
- package/dist/src/cron/jobs.d.ts.map +1 -0
- package/dist/src/cron/jobs.js +23 -0
- package/dist/src/cron/jobs.js.map +1 -0
- package/dist/src/cron/runner.d.ts +3 -0
- package/dist/src/cron/runner.d.ts.map +1 -0
- package/dist/src/cron/runner.js +118 -0
- package/dist/src/cron/runner.js.map +1 -0
- package/dist/src/cron/scheduler.d.ts +5 -0
- package/dist/src/cron/scheduler.d.ts.map +1 -0
- package/dist/src/cron/scheduler.js +39 -0
- package/dist/src/cron/scheduler.js.map +1 -0
- package/dist/src/engines/claude.d.ts +14 -0
- package/dist/src/engines/claude.d.ts.map +1 -0
- package/dist/src/engines/claude.js +264 -0
- package/dist/src/engines/claude.js.map +1 -0
- package/dist/src/engines/codex.d.ts +15 -0
- package/dist/src/engines/codex.d.ts.map +1 -0
- package/dist/src/engines/codex.js +346 -0
- package/dist/src/engines/codex.js.map +1 -0
- package/dist/src/gateway/api.d.ts +13 -0
- package/dist/src/gateway/api.d.ts.map +1 -0
- package/dist/src/gateway/api.js +819 -0
- package/dist/src/gateway/api.js.map +1 -0
- package/dist/src/gateway/daemon-entry.d.ts +2 -0
- package/dist/src/gateway/daemon-entry.d.ts.map +1 -0
- package/dist/src/gateway/daemon-entry.js +12 -0
- package/dist/src/gateway/daemon-entry.js.map +1 -0
- package/dist/src/gateway/lifecycle.d.ts +10 -0
- package/dist/src/gateway/lifecycle.d.ts.map +1 -0
- package/dist/src/gateway/lifecycle.js +124 -0
- package/dist/src/gateway/lifecycle.js.map +1 -0
- package/dist/src/gateway/org.d.ts +10 -0
- package/dist/src/gateway/org.d.ts.map +1 -0
- package/dist/src/gateway/org.js +71 -0
- package/dist/src/gateway/org.js.map +1 -0
- package/dist/src/gateway/server.d.ts +4 -0
- package/dist/src/gateway/server.d.ts.map +1 -0
- package/dist/src/gateway/server.js +301 -0
- package/dist/src/gateway/server.js.map +1 -0
- package/dist/src/gateway/watcher.d.ts +14 -0
- package/dist/src/gateway/watcher.d.ts.map +1 -0
- package/dist/src/gateway/watcher.js +104 -0
- package/dist/src/gateway/watcher.js.map +1 -0
- package/dist/src/index.d.ts +5 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +4 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/sessions/context.d.ts +20 -0
- package/dist/src/sessions/context.d.ts.map +1 -0
- package/dist/src/sessions/context.js +532 -0
- package/dist/src/sessions/context.js.map +1 -0
- package/dist/src/sessions/manager.d.ts +38 -0
- package/dist/src/sessions/manager.d.ts.map +1 -0
- package/dist/src/sessions/manager.js +208 -0
- package/dist/src/sessions/manager.js.map +1 -0
- package/dist/src/sessions/queue.d.ts +14 -0
- package/dist/src/sessions/queue.d.ts.map +1 -0
- package/dist/src/sessions/queue.js +42 -0
- package/dist/src/sessions/queue.js.map +1 -0
- package/dist/src/sessions/registry.d.ts +46 -0
- package/dist/src/sessions/registry.d.ts.map +1 -0
- package/dist/src/sessions/registry.js +193 -0
- package/dist/src/sessions/registry.js.map +1 -0
- package/dist/src/shared/config.d.ts +3 -0
- package/dist/src/shared/config.d.ts.map +1 -0
- package/dist/src/shared/config.js +11 -0
- package/dist/src/shared/config.js.map +1 -0
- package/dist/src/shared/logger.d.ts +12 -0
- package/dist/src/shared/logger.d.ts.map +1 -0
- package/dist/src/shared/logger.js +35 -0
- package/dist/src/shared/logger.js.map +1 -0
- package/dist/src/shared/paths.d.ts +19 -0
- package/dist/src/shared/paths.d.ts.map +1 -0
- package/dist/src/shared/paths.js +31 -0
- package/dist/src/shared/paths.js.map +1 -0
- package/dist/src/shared/types.d.ts +166 -0
- package/dist/src/shared/types.d.ts.map +1 -0
- package/dist/src/shared/types.js +4 -0
- package/dist/src/shared/types.js.map +1 -0
- package/dist/src/shared/version.d.ts +15 -0
- package/dist/src/shared/version.d.ts.map +1 -0
- package/dist/src/shared/version.js +56 -0
- package/dist/src/shared/version.js.map +1 -0
- package/dist/web/404.html +1 -0
- package/dist/web/_next/static/chunks/198-fd91406a158c5c25.js +1 -0
- package/dist/web/_next/static/chunks/517.62389e8d3c929c43.js +1 -0
- package/dist/web/_next/static/chunks/534-17c49c944e0d0fe1.js +1 -0
- package/dist/web/_next/static/chunks/573-070537ec2452d03e.js +1 -0
- package/dist/web/_next/static/chunks/590-2c34156c7417317e.js +1 -0
- package/dist/web/_next/static/chunks/704-af2893821e1d18dc.js +1 -0
- package/dist/web/_next/static/chunks/7273c211.06e3b6021d90b73f.js +1 -0
- package/dist/web/_next/static/chunks/73-c226535579393e21.js +1 -0
- package/dist/web/_next/static/chunks/743-5bb03adbb0e4ddec.js +1 -0
- package/dist/web/_next/static/chunks/874.97d5a27895061057.js +1 -0
- package/dist/web/_next/static/chunks/8e6518bb-c26e82767f1faf66.js +1 -0
- package/dist/web/_next/static/chunks/app/_not-found/page-bb075b0779827928.js +1 -0
- package/dist/web/_next/static/chunks/app/chat/page-6d5bc707a45c92c6.js +1 -0
- package/dist/web/_next/static/chunks/app/costs/page-d6c03718defdb599.js +1 -0
- package/dist/web/_next/static/chunks/app/cron/page-4c563eef2b6231fe.js +1 -0
- package/dist/web/_next/static/chunks/app/kanban/page-55a73165a36f4077.js +1 -0
- package/dist/web/_next/static/chunks/app/layout-5129b67d5f126cf0.js +1 -0
- package/dist/web/_next/static/chunks/app/logs/page-e18889d67e48c9c9.js +1 -0
- package/dist/web/_next/static/chunks/app/org/page-d5cd8d9b7864737b.js +1 -0
- package/dist/web/_next/static/chunks/app/page-b81992940fd1dbc6.js +1 -0
- package/dist/web/_next/static/chunks/app/sessions/page-2eef6ac7882a28ba.js +1 -0
- package/dist/web/_next/static/chunks/app/settings/page-4fb01b9b09500170.js +1 -0
- package/dist/web/_next/static/chunks/app/skills/page-df9465e314561bb5.js +1 -0
- package/dist/web/_next/static/chunks/framework-077b27ad7787463c.js +1 -0
- package/dist/web/_next/static/chunks/main-app-437f51faf74fbb3b.js +1 -0
- package/dist/web/_next/static/chunks/main-f1c74cefd4965abf.js +1 -0
- package/dist/web/_next/static/chunks/pages/_app-77a85fe7d6bca671.js +1 -0
- package/dist/web/_next/static/chunks/pages/_error-68febf4b34900064.js +1 -0
- package/dist/web/_next/static/chunks/polyfills-42372ed130431b0a.js +1 -0
- package/dist/web/_next/static/chunks/webpack-0f39b7e91dce9791.js +1 -0
- package/dist/web/_next/static/css/4a6a5bca9238c104.css +1 -0
- package/dist/web/_next/static/vLvOwhC8JocJzSHTHKKOv/_buildManifest.js +1 -0
- package/dist/web/_next/static/vLvOwhC8JocJzSHTHKKOv/_ssgManifest.js +1 -0
- package/dist/web/chat.html +1 -0
- package/dist/web/chat.txt +20 -0
- package/dist/web/costs.html +16 -0
- package/dist/web/costs.txt +20 -0
- package/dist/web/cron.html +1 -0
- package/dist/web/cron.txt +20 -0
- package/dist/web/index.html +1 -0
- package/dist/web/index.txt +20 -0
- package/dist/web/kanban.html +1 -0
- package/dist/web/kanban.txt +20 -0
- package/dist/web/logs.html +7 -0
- package/dist/web/logs.txt +20 -0
- package/dist/web/org.html +1 -0
- package/dist/web/org.txt +20 -0
- package/dist/web/sessions.html +1 -0
- package/dist/web/sessions.txt +20 -0
- package/dist/web/settings.html +1 -0
- package/dist/web/settings.txt +20 -0
- package/dist/web/skills.html +1 -0
- package/dist/web/skills.txt +20 -0
- package/package.json +43 -0
- package/template/AGENTS.md +167 -0
- package/template/CLAUDE.md +106 -0
- package/template/config.default.yaml +27 -0
- package/template/docs/architecture.md +74 -0
- package/template/docs/connectors.md +72 -0
- package/template/docs/cron.md +137 -0
- package/template/docs/org.md +105 -0
- package/template/docs/overview.md +39 -0
- package/template/docs/self-modification.md +65 -0
- package/template/docs/skills.md +58 -0
- package/template/knowledge/.gitkeep +0 -0
- package/template/migrations/.gitkeep +0 -0
- package/template/migrations/0.1.0/MIGRATION.md +25 -0
- package/template/skills/cron-manager/SKILL.md +127 -0
- package/template/skills/find-and-install/SKILL.md +92 -0
- package/template/skills/management/SKILL.md +203 -0
- package/template/skills/migrate/SKILL.md +154 -0
- package/template/skills/new/SKILL.md +19 -0
- package/template/skills/onboarding/SKILL.md +106 -0
- package/template/skills/self-heal/SKILL.md +114 -0
- package/template/skills/skill-creator/SKILL.md +112 -0
- package/template/skills/status/SKILL.md +19 -0
- package/template/skills/sync/SKILL.md +67 -0
- package/template/skills.json +3 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jimmy.d.ts","sourceRoot":"","sources":["../../bin/jimmy.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { Command } from "commander";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import os from "node:os";
|
|
5
|
+
const program = new Command();
|
|
6
|
+
program
|
|
7
|
+
.name("jinn")
|
|
8
|
+
.description("Lightweight AI gateway daemon")
|
|
9
|
+
.version("0.1.0")
|
|
10
|
+
.option("-i, --instance <name>", "Target a specific instance (default: jinn)");
|
|
11
|
+
// Pre-parse to set JINN_HOME before any module imports resolve paths
|
|
12
|
+
program.hook("preAction", (thisCommand) => {
|
|
13
|
+
const opts = thisCommand.opts();
|
|
14
|
+
if (opts.instance) {
|
|
15
|
+
process.env.JINN_INSTANCE = opts.instance;
|
|
16
|
+
process.env.JINN_HOME = path.join(os.homedir(), `.${opts.instance}`);
|
|
17
|
+
}
|
|
18
|
+
});
|
|
19
|
+
program
|
|
20
|
+
.command("setup")
|
|
21
|
+
.description("Initialize Jinn and install dependencies")
|
|
22
|
+
.option("--force", "Delete existing home dir and reinitialize from scratch")
|
|
23
|
+
.action(async (opts) => {
|
|
24
|
+
const { runSetup } = await import("../src/cli/setup.js");
|
|
25
|
+
await runSetup(opts);
|
|
26
|
+
});
|
|
27
|
+
program
|
|
28
|
+
.command("start")
|
|
29
|
+
.description("Start the gateway daemon")
|
|
30
|
+
.option("--daemon", "Run in background")
|
|
31
|
+
.option("-p, --port <port>", "Override the gateway port from config")
|
|
32
|
+
.action(async (opts) => {
|
|
33
|
+
const { runStart } = await import("../src/cli/start.js");
|
|
34
|
+
await runStart({ daemon: opts.daemon, port: opts.port ? parseInt(opts.port, 10) : undefined });
|
|
35
|
+
});
|
|
36
|
+
program
|
|
37
|
+
.command("stop")
|
|
38
|
+
.description("Stop the gateway daemon")
|
|
39
|
+
.option("-p, --port <port>", "Port to kill the process on (default: from config or 7777)")
|
|
40
|
+
.action(async (opts) => {
|
|
41
|
+
const { runStop } = await import("../src/cli/stop.js");
|
|
42
|
+
await runStop(opts.port ? parseInt(opts.port, 10) : undefined);
|
|
43
|
+
});
|
|
44
|
+
program
|
|
45
|
+
.command("status")
|
|
46
|
+
.description("Show gateway status")
|
|
47
|
+
.action(async () => {
|
|
48
|
+
const { runStatus } = await import("../src/cli/status.js");
|
|
49
|
+
await runStatus();
|
|
50
|
+
});
|
|
51
|
+
program
|
|
52
|
+
.command("create <name>")
|
|
53
|
+
.description("Create a new Jinn instance")
|
|
54
|
+
.option("-p, --port <port>", "Set gateway port (auto-assigned if omitted)")
|
|
55
|
+
.action(async (name, opts) => {
|
|
56
|
+
const { runCreate } = await import("../src/cli/create.js");
|
|
57
|
+
await runCreate(name, opts.port ? parseInt(opts.port, 10) : undefined);
|
|
58
|
+
});
|
|
59
|
+
program
|
|
60
|
+
.command("list")
|
|
61
|
+
.description("List all Jinn instances")
|
|
62
|
+
.action(async () => {
|
|
63
|
+
const { runList } = await import("../src/cli/list.js");
|
|
64
|
+
await runList();
|
|
65
|
+
});
|
|
66
|
+
program
|
|
67
|
+
.command("remove <name>")
|
|
68
|
+
.description("Remove a Jinn instance from the registry")
|
|
69
|
+
.option("--force", "Also delete the instance home directory")
|
|
70
|
+
.action(async (name, opts) => {
|
|
71
|
+
const { runRemove } = await import("../src/cli/remove.js");
|
|
72
|
+
await runRemove(name, opts);
|
|
73
|
+
});
|
|
74
|
+
program
|
|
75
|
+
.command("nuke [name]")
|
|
76
|
+
.description("Permanently delete a Jinn instance and all its data")
|
|
77
|
+
.action(async (name) => {
|
|
78
|
+
const { runNuke } = await import("../src/cli/nuke.js");
|
|
79
|
+
await runNuke(name);
|
|
80
|
+
});
|
|
81
|
+
program
|
|
82
|
+
.command("migrate")
|
|
83
|
+
.description("Apply pending template migrations to update this instance")
|
|
84
|
+
.option("--check", "Only check for pending migrations, don't apply")
|
|
85
|
+
.option("--auto", "Apply safe changes automatically without launching AI")
|
|
86
|
+
.action(async (opts) => {
|
|
87
|
+
const { runMigrate } = await import("../src/cli/migrate.js");
|
|
88
|
+
await runMigrate(opts);
|
|
89
|
+
});
|
|
90
|
+
// Skills subcommands (jinn skills find|add|remove|list|update|restore)
|
|
91
|
+
{
|
|
92
|
+
const skillsCmd = program
|
|
93
|
+
.command("skills")
|
|
94
|
+
.description("Manage skills from the skills.sh registry");
|
|
95
|
+
skillsCmd
|
|
96
|
+
.command("find [query]")
|
|
97
|
+
.description("Search the skills.sh registry")
|
|
98
|
+
.action(async (query) => {
|
|
99
|
+
const { skillsFind } = await import("../src/cli/skills.js");
|
|
100
|
+
skillsFind(query);
|
|
101
|
+
});
|
|
102
|
+
skillsCmd
|
|
103
|
+
.command("add <package>")
|
|
104
|
+
.description("Install a skill from skills.sh")
|
|
105
|
+
.action(async (pkg) => {
|
|
106
|
+
const { skillsAdd } = await import("../src/cli/skills.js");
|
|
107
|
+
skillsAdd(pkg);
|
|
108
|
+
});
|
|
109
|
+
skillsCmd
|
|
110
|
+
.command("remove <name>")
|
|
111
|
+
.description("Remove a skill from this instance")
|
|
112
|
+
.action(async (name) => {
|
|
113
|
+
const { skillsRemove } = await import("../src/cli/skills.js");
|
|
114
|
+
skillsRemove(name);
|
|
115
|
+
});
|
|
116
|
+
skillsCmd
|
|
117
|
+
.command("list")
|
|
118
|
+
.description("List installed skills")
|
|
119
|
+
.action(async () => {
|
|
120
|
+
const { skillsList } = await import("../src/cli/skills.js");
|
|
121
|
+
skillsList();
|
|
122
|
+
});
|
|
123
|
+
skillsCmd
|
|
124
|
+
.command("update")
|
|
125
|
+
.description("Re-install all skills to get latest versions")
|
|
126
|
+
.action(async () => {
|
|
127
|
+
const { skillsUpdate } = await import("../src/cli/skills.js");
|
|
128
|
+
skillsUpdate();
|
|
129
|
+
});
|
|
130
|
+
skillsCmd
|
|
131
|
+
.command("restore")
|
|
132
|
+
.description("Install all skills listed in skills.json")
|
|
133
|
+
.action(async () => {
|
|
134
|
+
const { skillsRestore } = await import("../src/cli/skills.js");
|
|
135
|
+
skillsRestore();
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
program
|
|
139
|
+
.command("chrome-allow")
|
|
140
|
+
.description("Pre-approve all sites for the Claude Chrome extension")
|
|
141
|
+
.option("--no-restart", "Don't restart Chrome automatically")
|
|
142
|
+
.option("--comet-browser", "Target Comet browser instead of Google Chrome")
|
|
143
|
+
.action(async (opts) => {
|
|
144
|
+
const { runChromeAllow } = await import("../src/cli/chrome-allow.js");
|
|
145
|
+
await runChromeAllow(opts);
|
|
146
|
+
});
|
|
147
|
+
program.parse();
|
|
148
|
+
//# sourceMappingURL=jimmy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jimmy.js","sourceRoot":"","sources":["../../bin/jimmy.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chrome-allow.d.ts","sourceRoot":"","sources":["../../../src/cli/chrome-allow.ts"],"names":[],"mappings":"AA+OA,wBAAsB,cAAc,CAAC,IAAI,EAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,YAAY,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA0BvG"}
|
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
import os from "node:os";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import fs from "node:fs";
|
|
4
|
+
import { randomUUID } from "node:crypto";
|
|
5
|
+
import { execSync } from "node:child_process";
|
|
6
|
+
const GREEN = "\x1b[32m";
|
|
7
|
+
const YELLOW = "\x1b[33m";
|
|
8
|
+
const RED = "\x1b[31m";
|
|
9
|
+
const DIM = "\x1b[2m";
|
|
10
|
+
const RESET = "\x1b[0m";
|
|
11
|
+
const EXTENSION_ID = "fcoeoabgfenejglbffodgkkbkcdhcgfn";
|
|
12
|
+
/** Wildcard TLD patterns — *.com matches anything ending in .com */
|
|
13
|
+
const TLDS = [
|
|
14
|
+
"com", "org", "net", "io", "dev", "co", "ai", "app", "me", "us",
|
|
15
|
+
"uk", "de", "fr", "es", "it", "nl", "se", "no", "dk", "fi",
|
|
16
|
+
"jp", "kr", "cn", "in", "au", "nz", "ca", "br", "mx", "ar",
|
|
17
|
+
"ru", "pl", "cz", "at", "ch", "be", "pt", "ie", "bg",
|
|
18
|
+
"edu", "gov", "mil", "info", "biz", "pro", "xyz", "site",
|
|
19
|
+
"online", "tech", "store", "cloud", "design", "world", "today",
|
|
20
|
+
"life", "space", "fun", "club", "page", "so", "is", "im", "la",
|
|
21
|
+
"tv", "fm", "am", "ly", "to", "cc", "gg", "sh", "gl", "tf",
|
|
22
|
+
"ws", "cx", "sx", "ag", "vc", "mobi", "tel", "coop", "aero",
|
|
23
|
+
"jobs", "eu", "asia", "africa", "run", "tools", "systems",
|
|
24
|
+
"software", "solutions", "services", "network", "digital",
|
|
25
|
+
"agency", "studio", "media", "group", "team", "work", "zone",
|
|
26
|
+
"live", "rocks", "ninja", "guru", "land", "house", "center",
|
|
27
|
+
"academy", "link", "click", "help", "how", "watch", "review",
|
|
28
|
+
"guide", "news", "blog", "wiki", "email", "chat", "social",
|
|
29
|
+
"video", "photo", "music", "game", "games", "travel", "health",
|
|
30
|
+
"bio", "eco", "green", "shop", "boutique", "fashion", "style",
|
|
31
|
+
"art", "gallery", "photography", "builders", "construction",
|
|
32
|
+
"energy", "technology", "computer", "mobile", "hosting",
|
|
33
|
+
"domains", "website", "web", "codes", "engineering", "science",
|
|
34
|
+
"legal", "law", "consulting", "training", "education", "school",
|
|
35
|
+
"realty", "estate", "properties", "delivery", "express", "direct",
|
|
36
|
+
"supply", "parts", "tools", "repair", "support", "care",
|
|
37
|
+
"recipes", "restaurant", "bar", "cafe", "pub", "pizza", "coffee",
|
|
38
|
+
"deals", "cheap", "discount", "sale", "rent", "loan", "credit",
|
|
39
|
+
"insurance", "finance", "capital", "fund", "exchange", "market",
|
|
40
|
+
"co.uk", "co.jp", "co.kr", "co.in", "co.nz", "co.za",
|
|
41
|
+
"com.au", "com.br", "com.mx", "com.ar", "com.cn", "com.tw",
|
|
42
|
+
"org.uk", "net.au", "ac.uk",
|
|
43
|
+
];
|
|
44
|
+
const BROWSERS = {
|
|
45
|
+
chrome: {
|
|
46
|
+
name: "Google Chrome",
|
|
47
|
+
processName: "Google Chrome",
|
|
48
|
+
macAppName: "Google Chrome",
|
|
49
|
+
macDataDir: path.join("Google", "Chrome"),
|
|
50
|
+
linuxDataDir: "google-chrome",
|
|
51
|
+
winDataDir: path.join("Google", "Chrome", "User Data"),
|
|
52
|
+
},
|
|
53
|
+
comet: {
|
|
54
|
+
name: "Comet",
|
|
55
|
+
processName: "Comet",
|
|
56
|
+
macAppName: "Comet",
|
|
57
|
+
macDataDir: "Comet",
|
|
58
|
+
linuxDataDir: "comet",
|
|
59
|
+
winDataDir: "Comet",
|
|
60
|
+
},
|
|
61
|
+
};
|
|
62
|
+
function getExtensionDbPath(browser) {
|
|
63
|
+
const home = os.homedir();
|
|
64
|
+
const platform = os.platform();
|
|
65
|
+
const candidates = [];
|
|
66
|
+
const profiles = ["Default", "Profile 1", "Profile 2"];
|
|
67
|
+
if (platform === "darwin") {
|
|
68
|
+
for (const profile of profiles) {
|
|
69
|
+
candidates.push(path.join(home, "Library", "Application Support", browser.macDataDir, profile, "Local Extension Settings", EXTENSION_ID));
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
else if (platform === "linux") {
|
|
73
|
+
for (const profile of profiles) {
|
|
74
|
+
candidates.push(path.join(home, ".config", browser.linuxDataDir, profile, "Local Extension Settings", EXTENSION_ID));
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
else if (platform === "win32") {
|
|
78
|
+
const appData = process.env.LOCALAPPDATA || path.join(home, "AppData", "Local");
|
|
79
|
+
for (const profile of profiles) {
|
|
80
|
+
candidates.push(path.join(appData, browser.winDataDir, profile, "Local Extension Settings", EXTENSION_ID));
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
for (const candidate of candidates) {
|
|
84
|
+
if (fs.existsSync(candidate))
|
|
85
|
+
return candidate;
|
|
86
|
+
}
|
|
87
|
+
return null;
|
|
88
|
+
}
|
|
89
|
+
function isBrowserRunning(browser) {
|
|
90
|
+
try {
|
|
91
|
+
const platform = os.platform();
|
|
92
|
+
if (platform === "darwin") {
|
|
93
|
+
execSync(`pgrep -x '${browser.processName}'`, { stdio: "ignore" });
|
|
94
|
+
}
|
|
95
|
+
else if (platform === "linux") {
|
|
96
|
+
execSync(`pgrep -x '${browser.processName.toLowerCase()}'`, { stdio: "ignore" });
|
|
97
|
+
}
|
|
98
|
+
else if (platform === "win32") {
|
|
99
|
+
const exe = browser.processName.toLowerCase().replace(/ /g, "") + ".exe";
|
|
100
|
+
execSync(`tasklist /FI "IMAGENAME eq ${exe}" | findstr ${exe}`, { stdio: "ignore" });
|
|
101
|
+
}
|
|
102
|
+
return true;
|
|
103
|
+
}
|
|
104
|
+
catch {
|
|
105
|
+
return false;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
function quitBrowser(browser) {
|
|
109
|
+
try {
|
|
110
|
+
const platform = os.platform();
|
|
111
|
+
if (platform === "darwin") {
|
|
112
|
+
execSync(`osascript -e 'tell application "${browser.macAppName}" to quit'`, { stdio: "ignore", timeout: 10000 });
|
|
113
|
+
}
|
|
114
|
+
else if (platform === "linux") {
|
|
115
|
+
execSync(`pkill -TERM '${browser.processName.toLowerCase()}'`, { stdio: "ignore" });
|
|
116
|
+
}
|
|
117
|
+
else if (platform === "win32") {
|
|
118
|
+
const exe = browser.processName.toLowerCase().replace(/ /g, "") + ".exe";
|
|
119
|
+
execSync(`taskkill /IM ${exe}`, { stdio: "ignore" });
|
|
120
|
+
}
|
|
121
|
+
const deadline = Date.now() + 10000;
|
|
122
|
+
while (Date.now() < deadline) {
|
|
123
|
+
if (!isBrowserRunning(browser))
|
|
124
|
+
return true;
|
|
125
|
+
execSync("sleep 0.5");
|
|
126
|
+
}
|
|
127
|
+
return !isBrowserRunning(browser);
|
|
128
|
+
}
|
|
129
|
+
catch {
|
|
130
|
+
return false;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
function openBrowser(browser) {
|
|
134
|
+
try {
|
|
135
|
+
const platform = os.platform();
|
|
136
|
+
if (platform === "darwin") {
|
|
137
|
+
execSync(`open -a '${browser.macAppName}'`, { stdio: "ignore" });
|
|
138
|
+
}
|
|
139
|
+
else if (platform === "linux") {
|
|
140
|
+
execSync(`${browser.processName.toLowerCase()} &`, { stdio: "ignore" });
|
|
141
|
+
}
|
|
142
|
+
else if (platform === "win32") {
|
|
143
|
+
execSync(`start ${browser.processName.toLowerCase().replace(/ /g, "")}`, { stdio: "ignore" });
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
catch {
|
|
147
|
+
// User can open browser manually
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
async function allowAllForBrowser(browser, ClassicLevel, opts) {
|
|
151
|
+
const label = browser.name;
|
|
152
|
+
// Find the extension DB
|
|
153
|
+
const dbPath = getExtensionDbPath(browser);
|
|
154
|
+
if (!dbPath) {
|
|
155
|
+
console.log(`${YELLOW}⚠${RESET} Claude extension not found for ${label} — skipping.`);
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
158
|
+
// Browser must be closed to write to LevelDB
|
|
159
|
+
const wasRunning = isBrowserRunning(browser);
|
|
160
|
+
if (wasRunning) {
|
|
161
|
+
if (opts.restart === false) {
|
|
162
|
+
console.error(`${RED}Error:${RESET} ${label} is running. Close it first or remove ${DIM}--no-restart${RESET}.`);
|
|
163
|
+
process.exit(1);
|
|
164
|
+
}
|
|
165
|
+
console.log(`${YELLOW}Closing ${label}...${RESET}`);
|
|
166
|
+
const closed = quitBrowser(browser);
|
|
167
|
+
if (!closed) {
|
|
168
|
+
console.error(`${RED}Error:${RESET} Failed to close ${label}. Please close it manually and try again.`);
|
|
169
|
+
process.exit(1);
|
|
170
|
+
}
|
|
171
|
+
console.log(`${GREEN}${label} closed.${RESET}`);
|
|
172
|
+
}
|
|
173
|
+
// Open LevelDB and write permissions
|
|
174
|
+
const db = new ClassicLevel(dbPath, { keyEncoding: "utf8", valueEncoding: "utf8" });
|
|
175
|
+
let data;
|
|
176
|
+
try {
|
|
177
|
+
const raw = await db.get("permissionStorage");
|
|
178
|
+
data = JSON.parse(raw);
|
|
179
|
+
}
|
|
180
|
+
catch {
|
|
181
|
+
data = { permissions: [] };
|
|
182
|
+
}
|
|
183
|
+
const existingNetlocs = new Set(data.permissions
|
|
184
|
+
.filter((p) => p.scope?.type === "netloc")
|
|
185
|
+
.map((p) => p.scope.netloc));
|
|
186
|
+
const now = Date.now();
|
|
187
|
+
let added = 0;
|
|
188
|
+
for (const tld of TLDS) {
|
|
189
|
+
const netloc = `*.${tld}`;
|
|
190
|
+
if (!existingNetlocs.has(netloc)) {
|
|
191
|
+
data.permissions.push({
|
|
192
|
+
action: "allow",
|
|
193
|
+
createdAt: now,
|
|
194
|
+
duration: "always",
|
|
195
|
+
id: randomUUID(),
|
|
196
|
+
scope: { netloc, type: "netloc" },
|
|
197
|
+
});
|
|
198
|
+
added++;
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
if (added === 0) {
|
|
202
|
+
console.log(`${GREEN}[${label}]${RESET} All ${TLDS.length} TLD wildcards already present. Nothing to do.`);
|
|
203
|
+
}
|
|
204
|
+
else {
|
|
205
|
+
await db.put("permissionStorage", JSON.stringify(data));
|
|
206
|
+
console.log(`${GREEN}[${label}]${RESET} ✓ Added ${added} wildcard permissions (${TLDS.length} TLDs covered)`);
|
|
207
|
+
}
|
|
208
|
+
await db.close();
|
|
209
|
+
// Restart browser if it was running
|
|
210
|
+
if (wasRunning && opts.restart !== false) {
|
|
211
|
+
console.log(`${DIM}Reopening ${label}...${RESET}`);
|
|
212
|
+
openBrowser(browser);
|
|
213
|
+
console.log(`${GREEN}[${label}]${RESET} ✓ Restarted. All sites pre-approved.`);
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
export async function runChromeAllow(opts) {
|
|
217
|
+
// Check for classic-level
|
|
218
|
+
let ClassicLevel;
|
|
219
|
+
try {
|
|
220
|
+
const mod = await import("classic-level");
|
|
221
|
+
ClassicLevel = mod.ClassicLevel;
|
|
222
|
+
}
|
|
223
|
+
catch {
|
|
224
|
+
console.error(`${RED}Error:${RESET} classic-level is required but not installed.`);
|
|
225
|
+
console.error(`Run: ${DIM}npm install -g classic-level${RESET} or ${DIM}pnpm add classic-level${RESET}`);
|
|
226
|
+
process.exit(1);
|
|
227
|
+
}
|
|
228
|
+
const targets = [];
|
|
229
|
+
if (opts.cometBrowser) {
|
|
230
|
+
targets.push(BROWSERS.comet);
|
|
231
|
+
}
|
|
232
|
+
else {
|
|
233
|
+
// Default: Chrome only
|
|
234
|
+
targets.push(BROWSERS.chrome);
|
|
235
|
+
}
|
|
236
|
+
for (const browser of targets) {
|
|
237
|
+
await allowAllForBrowser(browser, ClassicLevel, opts);
|
|
238
|
+
}
|
|
239
|
+
console.log(`\n${GREEN}✓${RESET} Done. All sites will be pre-approved for the Claude extension.`);
|
|
240
|
+
}
|
|
241
|
+
//# sourceMappingURL=chrome-allow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chrome-allow.js","sourceRoot":"","sources":["../../../src/cli/chrome-allow.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../../src/cli/create.ts"],"names":[],"mappings":"AAgBA,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAqE1E"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import os from "node:os";
|
|
4
|
+
import { execFileSync } from "node:child_process";
|
|
5
|
+
import { loadInstances, saveInstances, nextAvailablePort, } from "./instances.js";
|
|
6
|
+
const GREEN = "\x1b[32m";
|
|
7
|
+
const DIM = "\x1b[2m";
|
|
8
|
+
const RED = "\x1b[31m";
|
|
9
|
+
const RESET = "\x1b[0m";
|
|
10
|
+
export async function runCreate(name, port) {
|
|
11
|
+
// Validate name
|
|
12
|
+
if (!/^[a-z][a-z0-9-]*$/.test(name)) {
|
|
13
|
+
console.error(`${RED}Error:${RESET} Instance name must be lowercase alphanumeric with hyphens (e.g. "atlas", "my-bot").`);
|
|
14
|
+
process.exit(1);
|
|
15
|
+
}
|
|
16
|
+
if (name === "jinn") {
|
|
17
|
+
console.error(`${RED}Error:${RESET} "jinn" is the default instance. Use "jinn setup" instead.`);
|
|
18
|
+
process.exit(1);
|
|
19
|
+
}
|
|
20
|
+
const instances = loadInstances();
|
|
21
|
+
if (instances.some((i) => i.name === name)) {
|
|
22
|
+
console.error(`${RED}Error:${RESET} Instance "${name}" already exists.`);
|
|
23
|
+
process.exit(1);
|
|
24
|
+
}
|
|
25
|
+
const assignedPort = port ?? nextAvailablePort(instances);
|
|
26
|
+
const home = path.join(os.homedir(), `.${name}`);
|
|
27
|
+
// Check if home dir already exists
|
|
28
|
+
if (fs.existsSync(home)) {
|
|
29
|
+
console.error(`${RED}Error:${RESET} Directory ${home} already exists. Remove it first or choose a different name.`);
|
|
30
|
+
process.exit(1);
|
|
31
|
+
}
|
|
32
|
+
// Run setup in a subprocess with JINN_HOME set so paths.ts resolves correctly.
|
|
33
|
+
// This avoids Node module caching issues — paths.ts evaluates fresh in the child.
|
|
34
|
+
const jinnBin = process.argv[1];
|
|
35
|
+
try {
|
|
36
|
+
execFileSync(process.execPath, [jinnBin, "setup"], {
|
|
37
|
+
env: { ...process.env, JINN_HOME: home, JINN_INSTANCE: name },
|
|
38
|
+
stdio: "inherit",
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
console.error(`${RED}Error:${RESET} Failed to run setup for instance "${name}".`);
|
|
43
|
+
process.exit(1);
|
|
44
|
+
}
|
|
45
|
+
// Patch the config with the correct port and portal name
|
|
46
|
+
const configPath = path.join(home, "config.yaml");
|
|
47
|
+
if (fs.existsSync(configPath)) {
|
|
48
|
+
let config = fs.readFileSync(configPath, "utf-8");
|
|
49
|
+
config = config.replace(/port:\s*\d+/, `port: ${assignedPort}`);
|
|
50
|
+
// Set portal name to capitalized instance name
|
|
51
|
+
const displayName = name.charAt(0).toUpperCase() + name.slice(1);
|
|
52
|
+
if (config.includes("portal: {}")) {
|
|
53
|
+
config = config.replace("portal: {}", `portal:\n portalName: "${displayName}"`);
|
|
54
|
+
}
|
|
55
|
+
fs.writeFileSync(configPath, config);
|
|
56
|
+
}
|
|
57
|
+
// Register the instance
|
|
58
|
+
const instance = {
|
|
59
|
+
name,
|
|
60
|
+
port: assignedPort,
|
|
61
|
+
home,
|
|
62
|
+
createdAt: new Date().toISOString(),
|
|
63
|
+
};
|
|
64
|
+
instances.push(instance);
|
|
65
|
+
saveInstances(instances);
|
|
66
|
+
console.log(`\n${GREEN}Instance "${name}" created successfully.${RESET}`);
|
|
67
|
+
console.log(` Home: ${DIM}${home}${RESET}`);
|
|
68
|
+
console.log(` Port: ${DIM}${assignedPort}${RESET}`);
|
|
69
|
+
console.log(`\nStart with: ${DIM}jinn -i ${name} start${RESET}`);
|
|
70
|
+
console.log(`Or: ${DIM}jinn -i ${name} start --daemon${RESET}\n`);
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=create.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../../src/cli/create.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export interface Instance {
|
|
2
|
+
name: string;
|
|
3
|
+
port: number;
|
|
4
|
+
home: string;
|
|
5
|
+
createdAt: string;
|
|
6
|
+
}
|
|
7
|
+
export declare function loadInstances(): Instance[];
|
|
8
|
+
export declare function saveInstances(instances: Instance[]): void;
|
|
9
|
+
/** Find the next available port starting from 7777, skipping ports already used by instances. */
|
|
10
|
+
export declare function nextAvailablePort(instances: Instance[]): number;
|
|
11
|
+
/** Ensure the default "jinn" instance is registered. */
|
|
12
|
+
export declare function ensureDefaultInstance(): void;
|
|
13
|
+
export declare function findInstance(name: string): Instance | undefined;
|
|
14
|
+
//# sourceMappingURL=instances.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"instances.d.ts","sourceRoot":"","sources":["../../../src/cli/instances.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,aAAa,IAAI,QAAQ,EAAE,CAO1C;AAED,wBAAgB,aAAa,CAAC,SAAS,EAAE,QAAQ,EAAE,GAAG,IAAI,CAGzD;AAED,iGAAiG;AACjG,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,QAAQ,EAAE,GAAG,MAAM,CAK/D;AAED,wDAAwD;AACxD,wBAAgB,qBAAqB,IAAI,IAAI,CAU5C;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAE/D"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import os from "node:os";
|
|
4
|
+
import { INSTANCES_REGISTRY } from "../shared/paths.js";
|
|
5
|
+
export function loadInstances() {
|
|
6
|
+
if (!fs.existsSync(INSTANCES_REGISTRY))
|
|
7
|
+
return [];
|
|
8
|
+
try {
|
|
9
|
+
return JSON.parse(fs.readFileSync(INSTANCES_REGISTRY, "utf-8"));
|
|
10
|
+
}
|
|
11
|
+
catch {
|
|
12
|
+
return [];
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
export function saveInstances(instances) {
|
|
16
|
+
fs.mkdirSync(path.dirname(INSTANCES_REGISTRY), { recursive: true });
|
|
17
|
+
fs.writeFileSync(INSTANCES_REGISTRY, JSON.stringify(instances, null, 2) + "\n");
|
|
18
|
+
}
|
|
19
|
+
/** Find the next available port starting from 7777, skipping ports already used by instances. */
|
|
20
|
+
export function nextAvailablePort(instances) {
|
|
21
|
+
const usedPorts = new Set(instances.map((i) => i.port));
|
|
22
|
+
let port = 7777;
|
|
23
|
+
while (usedPorts.has(port))
|
|
24
|
+
port++;
|
|
25
|
+
return port;
|
|
26
|
+
}
|
|
27
|
+
/** Ensure the default "jinn" instance is registered. */
|
|
28
|
+
export function ensureDefaultInstance() {
|
|
29
|
+
const instances = loadInstances();
|
|
30
|
+
if (instances.some((i) => i.name === "jinn"))
|
|
31
|
+
return;
|
|
32
|
+
instances.unshift({
|
|
33
|
+
name: "jinn",
|
|
34
|
+
port: 7777,
|
|
35
|
+
home: path.join(os.homedir(), ".jinn"),
|
|
36
|
+
createdAt: new Date().toISOString(),
|
|
37
|
+
});
|
|
38
|
+
saveInstances(instances);
|
|
39
|
+
}
|
|
40
|
+
export function findInstance(name) {
|
|
41
|
+
return loadInstances().find((i) => i.name === name);
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=instances.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"instances.js","sourceRoot":"","sources":["../../../src/cli/instances.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,kBAAkB,EAAgB,MAAM,oBAAoB,CAAC;AAStE,MAAM,UAAU,aAAa;IAC3B,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,kBAAkB,CAAC;QAAE,OAAO,EAAE,CAAC;IAClD,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC,CAAC;IAClE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,SAAqB;IACjD,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACpE,EAAE,CAAC,aAAa,CAAC,kBAAkB,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;AAClF,CAAC;AAED,iGAAiG;AACjG,MAAM,UAAU,iBAAiB,CAAC,SAAqB;IACrD,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACxD,IAAI,IAAI,GAAG,IAAI,CAAC;IAChB,OAAO,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;QAAE,IAAI,EAAE,CAAC;IACnC,OAAO,IAAI,CAAC;AACd,CAAC;AAED,wDAAwD;AACxD,MAAM,UAAU,qBAAqB;IACnC,MAAM,SAAS,GAAG,aAAa,EAAE,CAAC;IAClC,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC;QAAE,OAAO;IACrD,SAAS,CAAC,OAAO,CAAC;QAChB,IAAI,EAAE,MAAM;QACZ,IAAI,EAAE,IAAI;QACV,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,OAAO,CAAC;QACtC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACpC,CAAC,CAAC;IACH,aAAa,CAAC,SAAS,CAAC,CAAC;AAC3B,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,OAAO,aAAa,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;AACtD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/cli/list.ts"],"names":[],"mappings":"AAUA,wBAAsB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAkC7C"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { loadInstances, ensureDefaultInstance } from "./instances.js";
|
|
2
|
+
import fs from "node:fs";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
const GREEN = "\x1b[32m";
|
|
5
|
+
const RED = "\x1b[31m";
|
|
6
|
+
const DIM = "\x1b[2m";
|
|
7
|
+
const RESET = "\x1b[0m";
|
|
8
|
+
export async function runList() {
|
|
9
|
+
ensureDefaultInstance();
|
|
10
|
+
const instances = loadInstances();
|
|
11
|
+
if (instances.length === 0) {
|
|
12
|
+
console.log("No instances found. Run \"jinn setup\" to create the default instance.");
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
console.log("\nJinn Instances\n");
|
|
16
|
+
console.log(` ${"Name".padEnd(16)} ${"Port".padEnd(8)} ${"Status".padEnd(12)} Home`);
|
|
17
|
+
console.log(` ${"─".repeat(16)} ${"─".repeat(8)} ${"─".repeat(12)} ${"─".repeat(30)}`);
|
|
18
|
+
for (const inst of instances) {
|
|
19
|
+
// Check if PID file exists and process is alive
|
|
20
|
+
const pidFile = path.join(inst.home, "gateway.pid");
|
|
21
|
+
let status = "stopped";
|
|
22
|
+
if (fs.existsSync(pidFile)) {
|
|
23
|
+
try {
|
|
24
|
+
const pid = parseInt(fs.readFileSync(pidFile, "utf-8").trim(), 10);
|
|
25
|
+
process.kill(pid, 0);
|
|
26
|
+
status = "running";
|
|
27
|
+
}
|
|
28
|
+
catch {
|
|
29
|
+
status = "stopped";
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
const statusColor = status === "running" ? GREEN : RED;
|
|
33
|
+
const homeDisplay = inst.home.replace(process.env.HOME || "", "~");
|
|
34
|
+
console.log(` ${inst.name.padEnd(16)} ${String(inst.port).padEnd(8)} ${statusColor}${status.padEnd(12)}${RESET} ${DIM}${homeDisplay}${RESET}`);
|
|
35
|
+
}
|
|
36
|
+
console.log("");
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=list.js.map
|