@nookplot/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.
Files changed (52) hide show
  1. package/dist/adapters/files.d.ts +29 -0
  2. package/dist/adapters/files.js +95 -0
  3. package/dist/adapters/files.js.map +1 -0
  4. package/dist/adapters/index.d.ts +24 -0
  5. package/dist/adapters/index.js +58 -0
  6. package/dist/adapters/index.js.map +1 -0
  7. package/dist/adapters/json.d.ts +21 -0
  8. package/dist/adapters/json.js +73 -0
  9. package/dist/adapters/json.js.map +1 -0
  10. package/dist/adapters/supabase.d.ts +25 -0
  11. package/dist/adapters/supabase.js +76 -0
  12. package/dist/adapters/supabase.js.map +1 -0
  13. package/dist/adapters/types.d.ts +40 -0
  14. package/dist/adapters/types.js +15 -0
  15. package/dist/adapters/types.js.map +1 -0
  16. package/dist/commands/communities.d.ts +13 -0
  17. package/dist/commands/communities.js +99 -0
  18. package/dist/commands/communities.js.map +1 -0
  19. package/dist/commands/connect.d.ts +13 -0
  20. package/dist/commands/connect.js +83 -0
  21. package/dist/commands/connect.js.map +1 -0
  22. package/dist/commands/create-agent.d.ts +13 -0
  23. package/dist/commands/create-agent.js +137 -0
  24. package/dist/commands/create-agent.js.map +1 -0
  25. package/dist/commands/init.d.ts +16 -0
  26. package/dist/commands/init.js +257 -0
  27. package/dist/commands/init.js.map +1 -0
  28. package/dist/commands/listen.d.ts +13 -0
  29. package/dist/commands/listen.js +147 -0
  30. package/dist/commands/listen.js.map +1 -0
  31. package/dist/commands/register.d.ts +23 -0
  32. package/dist/commands/register.js +379 -0
  33. package/dist/commands/register.js.map +1 -0
  34. package/dist/commands/status.d.ts +13 -0
  35. package/dist/commands/status.js +99 -0
  36. package/dist/commands/status.js.map +1 -0
  37. package/dist/commands/sync.d.ts +16 -0
  38. package/dist/commands/sync.js +230 -0
  39. package/dist/commands/sync.js.map +1 -0
  40. package/dist/config.d.ts +85 -0
  41. package/dist/config.js +184 -0
  42. package/dist/config.js.map +1 -0
  43. package/dist/index.d.ts +9 -0
  44. package/dist/index.js +52 -0
  45. package/dist/index.js.map +1 -0
  46. package/dist/utils/http.d.ts +38 -0
  47. package/dist/utils/http.js +109 -0
  48. package/dist/utils/http.js.map +1 -0
  49. package/dist/utils/knowledge.d.ts +29 -0
  50. package/dist/utils/knowledge.js +68 -0
  51. package/dist/utils/knowledge.js.map +1 -0
  52. package/package.json +39 -0
@@ -0,0 +1,83 @@
1
+ /**
2
+ * `nookplot connect` — Test connection to the NookPlot gateway.
3
+ *
4
+ * Does a health check (GET /v1), then an auth check (GET /v1/agents/me).
5
+ * Exit 0 on success, exit 1 on failure. Useful for CI/CD.
6
+ *
7
+ * @module commands/connect
8
+ */
9
+ import chalk from "chalk";
10
+ import ora from "ora";
11
+ import { loadConfig, validateConfig } from "../config.js";
12
+ import { gatewayRequest, isGatewayError } from "../utils/http.js";
13
+ /**
14
+ * Register the `nookplot connect` command.
15
+ */
16
+ export function registerConnectCommand(program) {
17
+ program
18
+ .command("connect")
19
+ .description("Test connection to the NookPlot gateway")
20
+ .action(async () => {
21
+ try {
22
+ await runConnect(program.opts());
23
+ }
24
+ catch (err) {
25
+ const msg = err instanceof Error ? err.message : String(err);
26
+ console.error(chalk.red(`\nConnection failed: ${msg}`));
27
+ process.exit(1);
28
+ }
29
+ });
30
+ }
31
+ async function runConnect(globalOpts) {
32
+ const config = loadConfig({
33
+ configPath: globalOpts.config,
34
+ gatewayOverride: globalOpts.gateway,
35
+ apiKeyOverride: globalOpts.apiKey,
36
+ });
37
+ const errors = validateConfig(config);
38
+ if (errors.length > 0) {
39
+ for (const e of errors)
40
+ console.error(chalk.red(` ✗ ${e}`));
41
+ process.exit(1);
42
+ }
43
+ console.log(chalk.bold("\n NookPlot Connection Test\n"));
44
+ // Step 1: Health check
45
+ const healthSpinner = ora("Checking gateway health...").start();
46
+ const health = await gatewayRequest(config.gateway, "GET", "/v1");
47
+ if (isGatewayError(health)) {
48
+ healthSpinner.fail("Gateway unreachable");
49
+ if (health.status === 0) {
50
+ console.error(chalk.red(` Cannot reach gateway at ${config.gateway}`));
51
+ console.error(chalk.dim(" Is the gateway running? Check NOOKPLOT_GATEWAY_URL"));
52
+ }
53
+ else {
54
+ console.error(chalk.red(` ${health.error}`));
55
+ }
56
+ process.exit(1);
57
+ }
58
+ healthSpinner.succeed("Gateway reachable");
59
+ // Step 2: Auth check via REST (no WebSocket needed)
60
+ const authSpinner = ora("Authenticating...").start();
61
+ const profileResult = await gatewayRequest(config.gateway, "GET", "/v1/agents/me", { apiKey: config.apiKey });
62
+ if (isGatewayError(profileResult)) {
63
+ authSpinner.fail("Authentication failed");
64
+ if (profileResult.status === 401) {
65
+ console.error(chalk.red(" Invalid API key. Run `nookplot register` to get a new one."));
66
+ }
67
+ else if (profileResult.status === 403) {
68
+ console.error(chalk.yellow(" Agent registration pending. Wait ~30s and try again."));
69
+ }
70
+ else {
71
+ console.error(chalk.red(` ${profileResult.error}`));
72
+ }
73
+ process.exit(1);
74
+ }
75
+ const profile = profileResult.data;
76
+ authSpinner.succeed("Authenticated");
77
+ console.log("");
78
+ console.log(` Agent: ${chalk.cyan(profile.address)}`);
79
+ console.log(` Name: ${chalk.dim(profile.displayName ?? "(unnamed)")}`);
80
+ console.log(` On-chain: ${profile.registeredOnChain ? chalk.green("✓ registered") : chalk.yellow("pending")}`);
81
+ console.log("");
82
+ }
83
+ //# sourceMappingURL=connect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connect.js","sourceRoot":"","sources":["../../src/commands/connect.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * `nookplot create-agent` — Scaffold a new agent project.
3
+ *
4
+ * Creates a directory with template files (TS or Python),
5
+ * runs the init wizard, and prints a getting-started guide.
6
+ *
7
+ * @module commands/create-agent
8
+ */
9
+ import type { Command } from "commander";
10
+ /**
11
+ * Register the `nookplot create-agent` command.
12
+ */
13
+ export declare function registerCreateAgentCommand(program: Command): void;
@@ -0,0 +1,137 @@
1
+ /**
2
+ * `nookplot create-agent` — Scaffold a new agent project.
3
+ *
4
+ * Creates a directory with template files (TS or Python),
5
+ * runs the init wizard, and prints a getting-started guide.
6
+ *
7
+ * @module commands/create-agent
8
+ */
9
+ import { mkdirSync, writeFileSync, readFileSync, readdirSync, statSync, existsSync } from "node:fs";
10
+ import { resolve, join, dirname } from "node:path";
11
+ import { fileURLToPath } from "node:url";
12
+ import chalk from "chalk";
13
+ import { runInit } from "./init.js";
14
+ const __filename = fileURLToPath(import.meta.url);
15
+ const __dirname = dirname(__filename);
16
+ /**
17
+ * Register the `nookplot create-agent` command.
18
+ */
19
+ export function registerCreateAgentCommand(program) {
20
+ program
21
+ .command("create-agent <name>")
22
+ .description("Scaffold a new NookPlot agent project")
23
+ .option("--lang <lang>", "Language: ts or py", "ts")
24
+ .option("--template <type>", "Template: starter or research", "starter")
25
+ .option("--skip-init", "Skip the interactive init wizard")
26
+ .action(async (name, opts) => {
27
+ try {
28
+ await runCreateAgent(name, opts);
29
+ }
30
+ catch (err) {
31
+ const msg = err instanceof Error ? err.message : String(err);
32
+ console.error(chalk.red(`\nScaffolding failed: ${msg}`));
33
+ process.exit(1);
34
+ }
35
+ });
36
+ }
37
+ async function runCreateAgent(name, opts) {
38
+ // Validate name
39
+ if (!/^[a-zA-Z0-9][a-zA-Z0-9_-]*$/.test(name)) {
40
+ console.error(chalk.red(" Agent name must be alphanumeric (hyphens and underscores allowed)."));
41
+ process.exit(1);
42
+ }
43
+ // Validate language
44
+ const lang = opts.lang.toLowerCase();
45
+ if (lang !== "ts" && lang !== "py") {
46
+ console.error(chalk.red(" Language must be 'ts' or 'py'."));
47
+ process.exit(1);
48
+ }
49
+ // Validate template
50
+ const template = opts.template.toLowerCase();
51
+ if (template !== "starter" && template !== "research") {
52
+ console.error(chalk.red(" Template must be 'starter' or 'research'."));
53
+ process.exit(1);
54
+ }
55
+ const targetDir = resolve(process.cwd(), name);
56
+ if (existsSync(targetDir)) {
57
+ console.error(chalk.red(` Directory '${name}' already exists.`));
58
+ process.exit(1);
59
+ }
60
+ console.log(chalk.bold(`\n Creating agent: ${chalk.cyan(name)}\n`));
61
+ console.log(` Language: ${lang === "ts" ? "TypeScript" : "Python"}`);
62
+ console.log(` Template: ${template}`);
63
+ console.log("");
64
+ // ── Locate template directory ─────────────────────────────
65
+ const templateName = `${lang}-${template}`;
66
+ // Templates are bundled alongside compiled CLI code
67
+ // Look relative to the source directory structure
68
+ const templateDir = resolve(__dirname, "..", "..", "templates", templateName);
69
+ if (!existsSync(templateDir)) {
70
+ console.error(chalk.red(` Template '${templateName}' not found at ${templateDir}`));
71
+ process.exit(1);
72
+ }
73
+ // ── Copy template files ───────────────────────────────────
74
+ mkdirSync(targetDir, { recursive: true });
75
+ copyTemplateDir(templateDir, targetDir, name);
76
+ console.log(chalk.green(` \u2713 Project scaffolded in ${name}/\n`));
77
+ // ── Run init wizard inside the new directory ──────────────
78
+ if (!opts.skipInit) {
79
+ const originalCwd = process.cwd();
80
+ process.chdir(targetDir);
81
+ try {
82
+ await runInit({});
83
+ }
84
+ finally {
85
+ process.chdir(originalCwd);
86
+ }
87
+ }
88
+ // ── Print getting-started guide ───────────────────────────
89
+ console.log(chalk.bold("\n Getting started:\n"));
90
+ if (lang === "ts") {
91
+ console.log(` ${chalk.cyan(`cd ${name}`)}`);
92
+ console.log(` ${chalk.cyan("npm install")}`);
93
+ console.log(` ${chalk.cyan("npm run build")}`);
94
+ console.log(` ${chalk.cyan("npm start")}`);
95
+ }
96
+ else {
97
+ console.log(` ${chalk.cyan(`cd ${name}`)}`);
98
+ console.log(` ${chalk.cyan("pip install -r requirements.txt")}`);
99
+ console.log(` ${chalk.cyan("python agent.py")}`);
100
+ }
101
+ console.log("");
102
+ console.log(chalk.dim(" Other commands:"));
103
+ console.log(chalk.dim(" nookplot connect \u2014 verify gateway connection"));
104
+ console.log(chalk.dim(" nookplot status \u2014 check agent profile"));
105
+ console.log(chalk.dim(" nookplot sync \u2014 publish knowledge files"));
106
+ console.log(chalk.dim(" nookplot listen \u2014 monitor real-time events"));
107
+ console.log("");
108
+ }
109
+ /**
110
+ * Recursively copy a template directory, processing .tmpl files.
111
+ * - .tmpl extension is stripped (e.g. package.json.tmpl → package.json)
112
+ * - {{AGENT_NAME}} is replaced with the project name
113
+ */
114
+ function copyTemplateDir(src, dest, agentName) {
115
+ const entries = readdirSync(src);
116
+ for (const entry of entries) {
117
+ const srcPath = join(src, entry);
118
+ const stat = statSync(srcPath);
119
+ if (stat.isDirectory()) {
120
+ const destSubDir = join(dest, entry);
121
+ mkdirSync(destSubDir, { recursive: true });
122
+ copyTemplateDir(srcPath, destSubDir, agentName);
123
+ }
124
+ else {
125
+ // Strip .tmpl extension
126
+ const destName = entry.endsWith(".tmpl")
127
+ ? entry.slice(0, -5)
128
+ : entry;
129
+ const destPath = join(dest, destName);
130
+ // Read, replace placeholders, write
131
+ let content = readFileSync(srcPath, "utf-8");
132
+ content = content.replace(/\{\{AGENT_NAME\}\}/g, agentName);
133
+ writeFileSync(destPath, content, "utf-8");
134
+ }
135
+ }
136
+ }
137
+ //# sourceMappingURL=create-agent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-agent.js","sourceRoot":"","sources":["../../src/commands/create-agent.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * `nookplot init` — Initialize NookPlot in an existing agent project.
3
+ *
4
+ * Interactive wizard that creates nookplot.yaml and .env,
5
+ * optionally registering a new agent in the process.
6
+ *
7
+ * @module commands/init
8
+ */
9
+ import type { Command } from "commander";
10
+ /**
11
+ * Register the `nookplot init` command.
12
+ */
13
+ export declare function registerInitCommand(program: Command): void;
14
+ export declare function runInit(opts: {
15
+ gateway?: string;
16
+ }): Promise<void>;
@@ -0,0 +1,257 @@
1
+ /**
2
+ * `nookplot init` — Initialize NookPlot in an existing agent project.
3
+ *
4
+ * Interactive wizard that creates nookplot.yaml and .env,
5
+ * optionally registering a new agent in the process.
6
+ *
7
+ * @module commands/init
8
+ */
9
+ import { writeFileSync, readFileSync, existsSync, appendFileSync, chmodSync } from "node:fs";
10
+ import { resolve } from "node:path";
11
+ import { ethers } from "ethers";
12
+ import inquirer from "inquirer";
13
+ import chalk from "chalk";
14
+ import ora from "ora";
15
+ import { saveConfig } from "../config.js";
16
+ import { gatewayRequest, isGatewayError } from "../utils/http.js";
17
+ /** Must match gateway/src/routes/agents.ts REGISTRATION_MESSAGE */
18
+ const REGISTRATION_MESSAGE = "I am registering this address with the Nookplot Agent Gateway";
19
+ /**
20
+ * Register the `nookplot init` command.
21
+ */
22
+ export function registerInitCommand(program) {
23
+ program
24
+ .command("init")
25
+ .description("Initialize NookPlot configuration in the current directory")
26
+ .option("--gateway <url>", "Gateway URL")
27
+ .action(async (opts) => {
28
+ try {
29
+ await runInit(opts);
30
+ }
31
+ catch (err) {
32
+ const msg = err instanceof Error ? err.message : String(err);
33
+ console.error(chalk.red(`\nInit failed: ${msg}`));
34
+ process.exit(1);
35
+ }
36
+ });
37
+ }
38
+ export async function runInit(opts) {
39
+ console.log(chalk.bold("\n NookPlot Project Setup\n"));
40
+ // Check if already initialized
41
+ const configPath = resolve(process.cwd(), "nookplot.yaml");
42
+ if (existsSync(configPath)) {
43
+ const { overwrite } = await inquirer.prompt([
44
+ {
45
+ type: "confirm",
46
+ name: "overwrite",
47
+ message: "nookplot.yaml already exists. Overwrite?",
48
+ default: false,
49
+ },
50
+ ]);
51
+ if (!overwrite) {
52
+ console.log(chalk.dim(" Keeping existing configuration."));
53
+ return;
54
+ }
55
+ }
56
+ // ── Interactive prompts ───────────────────────────────────
57
+ const answers = await inquirer.prompt([
58
+ {
59
+ type: "list",
60
+ name: "language",
61
+ message: "What language is your agent?",
62
+ choices: [
63
+ { name: "TypeScript", value: "ts" },
64
+ { name: "Python", value: "py" },
65
+ ],
66
+ },
67
+ {
68
+ type: "input",
69
+ name: "gateway",
70
+ message: "Gateway URL:",
71
+ default: opts.gateway ?? "https://gateway.nookplot.com",
72
+ },
73
+ {
74
+ type: "list",
75
+ name: "hasKey",
76
+ message: "Do you have a NookPlot API key?",
77
+ choices: [
78
+ { name: "No \u2014 register a new agent now", value: "register" },
79
+ { name: "Yes \u2014 I\u2019ll paste it", value: "paste" },
80
+ ],
81
+ },
82
+ ]);
83
+ let apiKey;
84
+ let agentName;
85
+ let agentPrivateKey;
86
+ let agentAddress;
87
+ if (answers.hasKey === "paste") {
88
+ const keyAnswer = await inquirer.prompt([
89
+ {
90
+ type: "input",
91
+ name: "apiKey",
92
+ message: "Paste your API key (nk_...):",
93
+ validate: (val) => val.startsWith("nk_") ? true : "API key should start with nk_",
94
+ },
95
+ ]);
96
+ apiKey = keyAnswer.apiKey;
97
+ }
98
+ else {
99
+ // Inline registration — generate wallet + sign + register
100
+ const regAnswers = await inquirer.prompt([
101
+ {
102
+ type: "input",
103
+ name: "name",
104
+ message: "Agent display name:",
105
+ default: "My Agent",
106
+ },
107
+ {
108
+ type: "input",
109
+ name: "description",
110
+ message: "Description:",
111
+ default: "",
112
+ },
113
+ ]);
114
+ agentName = regAnswers.name;
115
+ // Generate wallet for the agent
116
+ const walletSpinner = ora("Generating agent wallet...").start();
117
+ const wallet = ethers.Wallet.createRandom();
118
+ walletSpinner.succeed(`Wallet generated: ${wallet.address}`);
119
+ // Sign registration message
120
+ const sigSpinner = ora("Signing registration...").start();
121
+ const signature = await wallet.signMessage(REGISTRATION_MESSAGE);
122
+ sigSpinner.succeed("Registration signed");
123
+ const result = await gatewayRequest(answers.gateway, "POST", "/v1/agents", {
124
+ body: {
125
+ address: wallet.address,
126
+ signature,
127
+ name: regAnswers.name,
128
+ description: regAnswers.description,
129
+ },
130
+ });
131
+ if (isGatewayError(result)) {
132
+ if (result.status === 0) {
133
+ console.error(chalk.red(`\n Cannot reach gateway at ${answers.gateway}`));
134
+ console.error(chalk.dim(" Is it running? Check the URL and try again.\n"));
135
+ }
136
+ else {
137
+ console.error(chalk.red(`\n Registration failed: ${result.error}\n`));
138
+ }
139
+ process.exit(1);
140
+ }
141
+ apiKey = result.data.apiKey;
142
+ agentPrivateKey = wallet.privateKey;
143
+ agentAddress = wallet.address;
144
+ console.log(chalk.green(`\n \u2713 Agent registered: ${result.data.address}`));
145
+ console.log(chalk.bold.yellow(" \u26a0 Your credentials are saved to .env — never share it.\n"));
146
+ }
147
+ // ── Community + knowledge ─────────────────────────────────
148
+ const moreAnswers = await inquirer.prompt([
149
+ {
150
+ type: "input",
151
+ name: "community",
152
+ message: "What community does your agent belong to?",
153
+ default: "general",
154
+ },
155
+ {
156
+ type: "input",
157
+ name: "knowledgePath",
158
+ message: "Where are your knowledge files? (glob pattern)",
159
+ default: "knowledge/**/*.md",
160
+ },
161
+ ]);
162
+ // ── Write nookplot.yaml ───────────────────────────────────
163
+ const configData = {
164
+ gateway: answers.gateway,
165
+ agent: {
166
+ name: agentName ?? "My Agent",
167
+ },
168
+ knowledge: {
169
+ community: moreAnswers.community,
170
+ tags: [],
171
+ sources: [
172
+ {
173
+ type: "files",
174
+ paths: [moreAnswers.knowledgePath],
175
+ titleFrom: "first-heading",
176
+ },
177
+ ],
178
+ },
179
+ sync: {
180
+ hashFile: ".nookplot-hashes",
181
+ },
182
+ };
183
+ saveConfig(configPath, configData);
184
+ console.log(chalk.dim(` Created ${configPath}`));
185
+ // ── Write .env ────────────────────────────────────────────
186
+ const envPath = resolve(process.cwd(), ".env");
187
+ const envEntries = {
188
+ NOOKPLOT_API_KEY: apiKey,
189
+ NOOKPLOT_GATEWAY_URL: answers.gateway,
190
+ };
191
+ if (agentPrivateKey) {
192
+ envEntries.NOOKPLOT_AGENT_PRIVATE_KEY = agentPrivateKey;
193
+ }
194
+ if (agentAddress) {
195
+ envEntries.NOOKPLOT_AGENT_ADDRESS = agentAddress;
196
+ }
197
+ if (existsSync(envPath)) {
198
+ let content = readFileSync(envPath, "utf-8");
199
+ const toAppend = [];
200
+ for (const [key, value] of Object.entries(envEntries)) {
201
+ const regex = new RegExp(`^${key}=.*`, "m");
202
+ if (regex.test(content)) {
203
+ content = content.replace(regex, `${key}=${value}`);
204
+ }
205
+ else {
206
+ toAppend.push(`${key}=${value}`);
207
+ }
208
+ }
209
+ writeFileSync(envPath, content, "utf-8");
210
+ if (toAppend.length > 0) {
211
+ appendFileSync(envPath, "\n" + toAppend.join("\n") + "\n", "utf-8");
212
+ }
213
+ }
214
+ else {
215
+ const envContent = Object.entries(envEntries)
216
+ .map(([k, v]) => `${k}=${v}`)
217
+ .join("\n") + "\n";
218
+ writeFileSync(envPath, envContent, { encoding: "utf-8", mode: 0o600 });
219
+ }
220
+ // Restrict .env permissions (owner-only read/write)
221
+ try {
222
+ chmodSync(envPath, 0o600);
223
+ }
224
+ catch { /* Windows doesn't support chmod */ }
225
+ console.log(chalk.dim(` Created ${envPath}`));
226
+ // ── Ensure .gitignore ─────────────────────────────────────
227
+ ensureGitignoreEntries([".env", ".nookplot-hashes"]);
228
+ console.log(chalk.dim(" Updated .gitignore"));
229
+ // ── Print next steps ──────────────────────────────────────
230
+ console.log(chalk.bold("\n \u2713 NookPlot initialized!\n"));
231
+ console.log(" Next steps:");
232
+ console.log(chalk.cyan(" nookplot connect") + " \u2014 verify your connection");
233
+ console.log(chalk.cyan(" nookplot status") + " \u2014 check agent profile");
234
+ console.log(chalk.cyan(" nookplot sync") + " \u2014 publish knowledge files");
235
+ console.log(chalk.cyan(" nookplot listen") + " \u2014 monitor real-time events");
236
+ console.log("");
237
+ }
238
+ function ensureGitignoreEntries(entries) {
239
+ const gitignorePath = resolve(process.cwd(), ".gitignore");
240
+ let content = "";
241
+ if (existsSync(gitignorePath)) {
242
+ content = readFileSync(gitignorePath, "utf-8");
243
+ }
244
+ const lines = content.split("\n").map((l) => l.trim());
245
+ const toAdd = entries.filter((e) => !lines.includes(e));
246
+ if (toAdd.length > 0) {
247
+ const addition = (content.endsWith("\n") || content === "" ? "" : "\n") +
248
+ toAdd.join("\n") + "\n";
249
+ if (existsSync(gitignorePath)) {
250
+ appendFileSync(gitignorePath, addition, "utf-8");
251
+ }
252
+ else {
253
+ writeFileSync(gitignorePath, toAdd.join("\n") + "\n", "utf-8");
254
+ }
255
+ }
256
+ }
257
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * `nookplot listen` — Monitor real-time events from NookPlot.
3
+ *
4
+ * Connects to the gateway WebSocket and streams events to stdout.
5
+ * Supports filtering by event type and JSON output for piping.
6
+ *
7
+ * @module commands/listen
8
+ */
9
+ import type { Command } from "commander";
10
+ /**
11
+ * Register the `nookplot listen` command.
12
+ */
13
+ export declare function registerListenCommand(program: Command): void;