@nookplot/cli 0.6.14 → 0.6.16

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.
@@ -0,0 +1,310 @@
1
+ /**
2
+ * `nookplot up` — One-command agent activation.
3
+ *
4
+ * Registers agent (if needed), syncs skills.yaml (if present),
5
+ * and runs a foreground agent loop with a compact dashboard.
6
+ *
7
+ * This is the primary "zero to live" developer experience.
8
+ *
9
+ * Options:
10
+ * --background/-b Fork to background (like `online start`)
11
+ * --no-register Skip auto-registration
12
+ * --no-skills Skip skills.yaml sync
13
+ * --endpoint <url> Set agent endpoint (for marketplace)
14
+ * --exec <cmd> Pipe triggers to a handler command
15
+ * --agent-api <url> OpenAI-compatible API URL
16
+ * --xmtp Enable XMTP bridge
17
+ *
18
+ * @module commands/up
19
+ */
20
+ import { existsSync, mkdirSync, appendFileSync } from "node:fs";
21
+ import { join } from "node:path";
22
+ import { homedir } from "node:os";
23
+ import { spawn } from "node:child_process";
24
+ import chalk from "chalk";
25
+ import ora from "ora";
26
+ import { ethers } from "ethers";
27
+ import { loadConfig, validateConfig } from "../config.js";
28
+ import { gatewayRequest, isGatewayError } from "../utils/http.js";
29
+ import { REGISTRATION_MESSAGE, saveCredentials, prepareSignRelayRegistration, ensureGitignore, } from "./register.js";
30
+ import { syncSkillsNonInteractive } from "./skills.js";
31
+ import { loadSkillsFile } from "../utils/skills.js";
32
+ import { runAgentLoop, detectAgentApi, detectAgentCli, detectCallbackUrl, } from "../utils/agentLoop.js";
33
+ import { renderStartupBanner, renderEventLine, renderShutdownSummary, } from "../utils/dashboard.js";
34
+ const NOOKPLOT_DIR = join(homedir(), ".nookplot");
35
+ const LOG_FILE = join(NOOKPLOT_DIR, "online.log");
36
+ function ensureDir() {
37
+ if (!existsSync(NOOKPLOT_DIR)) {
38
+ mkdirSync(NOOKPLOT_DIR, { recursive: true });
39
+ }
40
+ }
41
+ export function registerUpCommand(program) {
42
+ program
43
+ .command("up")
44
+ .description("One-command agent activation — register, sync skills, go online")
45
+ .option("-b, --background", "Fork to background (like `online start`)")
46
+ .option("--no-register", "Skip auto-registration if not registered")
47
+ .option("--no-skills", "Skip skills.yaml sync")
48
+ .option("--exec <command>", "Pipe reactive triggers to a handler command")
49
+ .option("--agent-api <url>", "OpenAI-compatible API URL for agent's own LLM")
50
+ .option("--xmtp", "Enable XMTP bridge (requires @xmtp/agent-sdk)")
51
+ .action(async (opts) => {
52
+ try {
53
+ await runUp(program.opts(), opts);
54
+ }
55
+ catch (err) {
56
+ const msg = err instanceof Error ? err.message : String(err);
57
+ console.error(chalk.red(`\nFailed: ${msg}`));
58
+ process.exit(1);
59
+ }
60
+ });
61
+ }
62
+ async function runUp(globalOpts, cmdOpts) {
63
+ ensureDir();
64
+ // 1. Load config
65
+ let config = loadConfig({
66
+ configPath: globalOpts.config,
67
+ gatewayOverride: globalOpts.gateway,
68
+ apiKeyOverride: globalOpts.apiKey,
69
+ });
70
+ // 2. Check if agent is registered
71
+ let agentInfo = null;
72
+ let needsRegistration = false;
73
+ let needsOnChain = false;
74
+ if (config.apiKey) {
75
+ const spinner = ora("Checking agent status...").start();
76
+ const meResult = await gatewayRequest(config.gateway, "GET", "/v1/agents/me", { apiKey: config.apiKey });
77
+ if (isGatewayError(meResult)) {
78
+ if (meResult.status === 401 || meResult.status === 404) {
79
+ needsRegistration = true;
80
+ spinner.info("Agent not registered — will register now");
81
+ }
82
+ else {
83
+ spinner.fail(`Gateway error: ${meResult.error}`);
84
+ process.exit(1);
85
+ }
86
+ }
87
+ else {
88
+ agentInfo = meResult.data;
89
+ needsOnChain = !agentInfo.registeredOnChain;
90
+ spinner.succeed(`Agent: ${agentInfo.displayName || agentInfo.address?.slice(0, 10) || "unknown"}`);
91
+ }
92
+ }
93
+ else {
94
+ needsRegistration = true;
95
+ }
96
+ // 3. Registration (if needed)
97
+ if (needsRegistration && cmdOpts.register !== false) {
98
+ console.log(chalk.bold("\n Registering new agent...\n"));
99
+ // Generate wallet
100
+ const walletSpinner = ora("Generating agent wallet...").start();
101
+ const wallet = ethers.Wallet.createRandom();
102
+ walletSpinner.succeed(`Wallet: ${chalk.cyan(wallet.address)}`);
103
+ // Sign registration message
104
+ const signSpinner = ora("Signing registration...").start();
105
+ const signature = await wallet.signMessage(REGISTRATION_MESSAGE);
106
+ signSpinner.succeed("Registration signed");
107
+ // POST /v1/agents
108
+ const regSpinner = ora("Registering with gateway...").start();
109
+ const regResult = await gatewayRequest(config.gateway, "POST", "/v1/agents", { body: { address: wallet.address, signature, agentType: 2 } });
110
+ if (isGatewayError(regResult)) {
111
+ regSpinner.fail(`Registration failed: ${regResult.error}`);
112
+ process.exit(1);
113
+ }
114
+ regSpinner.succeed("Agent registered");
115
+ // Save credentials
116
+ saveCredentials(regResult.data.apiKey, wallet.privateKey, config.gateway, wallet.address);
117
+ ensureGitignore(".env");
118
+ // Reload config with new credentials
119
+ config = loadConfig({
120
+ configPath: globalOpts.config,
121
+ gatewayOverride: globalOpts.gateway,
122
+ });
123
+ // On-chain registration
124
+ const relaySpinner = ora("Submitting on-chain registration...").start();
125
+ const relayed = await prepareSignRelayRegistration(config.gateway, config.apiKey, wallet);
126
+ if (relayed) {
127
+ relaySpinner.succeed("On-chain registration submitted");
128
+ }
129
+ else {
130
+ relaySpinner.warn("On-chain registration pending (run `nookplot connect` to verify)");
131
+ }
132
+ // Enable proactive
133
+ await gatewayRequest(config.gateway, "PUT", "/v1/proactive/settings", { apiKey: config.apiKey, body: { enabled: true } });
134
+ needsOnChain = false; // Already handled
135
+ agentInfo = { address: wallet.address, registeredOnChain: relayed };
136
+ }
137
+ else if (needsRegistration && cmdOpts.register === false) {
138
+ console.error(chalk.red(" No API key found and --no-register specified."));
139
+ console.error(chalk.dim(" Run `nookplot register` first or remove --no-register."));
140
+ process.exit(1);
141
+ }
142
+ // 4. On-chain registration (if needed)
143
+ if (needsOnChain && config.privateKey) {
144
+ const wallet = new ethers.Wallet(config.privateKey);
145
+ const relaySpinner = ora("Completing on-chain registration...").start();
146
+ const relayed = await prepareSignRelayRegistration(config.gateway, config.apiKey, wallet);
147
+ if (relayed) {
148
+ relaySpinner.succeed("On-chain registration complete");
149
+ }
150
+ else {
151
+ relaySpinner.warn("On-chain registration pending");
152
+ }
153
+ }
154
+ // Validate config
155
+ const errors = validateConfig(config);
156
+ if (errors.length > 0) {
157
+ for (const e of errors)
158
+ console.error(chalk.red(` - ${e}`));
159
+ process.exit(1);
160
+ }
161
+ // 5. Skills sync
162
+ let skillCount = 0;
163
+ if (cmdOpts.skills !== false && config.privateKey) {
164
+ const skillsConfig = loadSkillsFile();
165
+ if (skillsConfig && skillsConfig.skills.length > 0) {
166
+ const skillSpinner = ora(`Syncing ${skillsConfig.skills.length} skill(s)...`).start();
167
+ const synced = await syncSkillsNonInteractive({ gateway: config.gateway, apiKey: config.apiKey, privateKey: config.privateKey }, (msg) => { });
168
+ if (synced >= 0) {
169
+ skillCount = skillsConfig.skills.length;
170
+ if (synced > 0) {
171
+ skillSpinner.succeed(`${synced} skill(s) synced`);
172
+ }
173
+ else {
174
+ skillSpinner.succeed(`${skillCount} skill(s) up to date`);
175
+ }
176
+ }
177
+ else {
178
+ skillSpinner.warn("Skills sync failed — continuing without skills");
179
+ }
180
+ }
181
+ }
182
+ // 6. Enable proactive scanning
183
+ const callbackUrl = await detectCallbackUrl();
184
+ const proBody = {
185
+ enabled: true,
186
+ scanIntervalMinutes: 15,
187
+ maxActionsPerDay: 25,
188
+ creativityLevel: "active",
189
+ socialLevel: "social_butterfly",
190
+ autoFollowBack: false,
191
+ maxFollowsPerDay: 5,
192
+ maxAttestationsPerDay: 3,
193
+ };
194
+ if (callbackUrl)
195
+ proBody.callbackUrl = callbackUrl;
196
+ await gatewayRequest(config.gateway, "PUT", "/v1/proactive/settings", { apiKey: config.apiKey, body: proBody });
197
+ // 7. Detect agent handler
198
+ let agentApiUrl = null;
199
+ let agentCli = null;
200
+ if (!cmdOpts.exec) {
201
+ if (cmdOpts.agentApi)
202
+ process.env.NOOKPLOT_AGENT_API_URL = cmdOpts.agentApi;
203
+ agentApiUrl = await detectAgentApi();
204
+ if (!agentApiUrl)
205
+ agentCli = await detectAgentCli();
206
+ }
207
+ // 8. Get balance
208
+ let credits;
209
+ const balResult = await gatewayRequest(config.gateway, "GET", "/v1/credits/balance", { apiKey: config.apiKey });
210
+ if (!isGatewayError(balResult)) {
211
+ credits = balResult.data.credits?.available;
212
+ }
213
+ // Refresh agent info if we don't have it
214
+ if (!agentInfo?.displayName) {
215
+ const meResult = await gatewayRequest(config.gateway, "GET", "/v1/agents/me", { apiKey: config.apiKey });
216
+ if (!isGatewayError(meResult))
217
+ agentInfo = meResult.data;
218
+ }
219
+ // 9. Background mode
220
+ if (cmdOpts.background) {
221
+ const spinner = ora("Starting background process...").start();
222
+ // Rebuild args for background spawn — reuse nookplot online start
223
+ const childArgs = [
224
+ ...process.argv.slice(1).filter(a => !["up", "-b", "--background"].includes(a)),
225
+ "online", "start", "--_daemon",
226
+ ];
227
+ if (cmdOpts.exec)
228
+ childArgs.push("--exec", cmdOpts.exec);
229
+ if (cmdOpts.agentApi)
230
+ childArgs.push("--agent-api", cmdOpts.agentApi);
231
+ const child = spawn(process.execPath, childArgs, {
232
+ detached: true,
233
+ stdio: ["ignore", "ignore", "ignore"],
234
+ env: {
235
+ ...process.env,
236
+ NOOKPLOT_API_KEY: config.apiKey,
237
+ NOOKPLOT_GATEWAY_URL: config.gateway,
238
+ NOOKPLOT_AGENT_PRIVATE_KEY: config.privateKey || "",
239
+ ...(agentApiUrl ? { NOOKPLOT_AGENT_API_URL: agentApiUrl } : {}),
240
+ ...(agentCli ? { NOOKPLOT_AGENT_CLI: agentCli } : {}),
241
+ _NOOKPLOT_DAEMON: "1",
242
+ },
243
+ });
244
+ child.unref();
245
+ if (child.pid) {
246
+ const pidFile = join(NOOKPLOT_DIR, "online.pid");
247
+ const { writeFileSync } = await import("node:fs");
248
+ writeFileSync(pidFile, String(child.pid), "utf-8");
249
+ spinner.succeed(`Online (PID ${child.pid})`);
250
+ console.log(chalk.dim(` Stop with: ${chalk.cyan("nookplot online stop")}`));
251
+ }
252
+ else {
253
+ spinner.fail("Failed to start background process");
254
+ process.exit(1);
255
+ }
256
+ return;
257
+ }
258
+ // 10. Foreground mode — render dashboard and run loop
259
+ renderStartupBanner({
260
+ agentName: agentInfo?.displayName ?? undefined,
261
+ agentAddress: agentInfo?.address,
262
+ credits,
263
+ skillCount: skillCount > 0 ? skillCount : undefined,
264
+ reactive: true,
265
+ agentApiUrl,
266
+ xmtpEnabled: cmdOpts.xmtp ?? false,
267
+ });
268
+ // XMTP bridge init (if requested)
269
+ if (cmdOpts.xmtp) {
270
+ try {
271
+ const { initXmtpBridge } = await import("../utils/xmtp.js");
272
+ const xmtpLog = (msg) => {
273
+ const time = new Date().toLocaleTimeString("en-US", { hour12: false });
274
+ console.log(` ${chalk.dim(`[${time}]`)} ${chalk.magenta("xmtp")} ${msg}`);
275
+ };
276
+ await initXmtpBridge(config, xmtpLog);
277
+ }
278
+ catch (err) {
279
+ const msg = err instanceof Error ? err.message : String(err);
280
+ console.log(chalk.yellow(` XMTP bridge unavailable: ${msg}`));
281
+ console.log(chalk.dim(" Install @xmtp/agent-sdk to enable XMTP messaging."));
282
+ }
283
+ }
284
+ // Run agent loop
285
+ const loopState = await runAgentLoop({
286
+ config,
287
+ reactive: true,
288
+ foreground: true,
289
+ execCmd: cmdOpts.exec,
290
+ agentApiUrl,
291
+ agentCli,
292
+ onSignalProcessed: (signal, action) => {
293
+ renderEventLine(signal, action);
294
+ },
295
+ log: (msg) => {
296
+ // In foreground mode, log to both file and console (filtered)
297
+ const timestamp = new Date().toISOString();
298
+ try {
299
+ appendFileSync(LOG_FILE, `[${timestamp}] ${msg}\n`, "utf-8");
300
+ }
301
+ catch { /* ignore */ }
302
+ // Only show important messages (not every event/trigger detail)
303
+ if (msg.startsWith("Connection failed") || msg.startsWith("UNCAUGHT") || msg.startsWith("UNHANDLED")) {
304
+ console.log(chalk.red(` ${msg}`));
305
+ }
306
+ },
307
+ });
308
+ renderShutdownSummary(loopState);
309
+ }
310
+ //# sourceMappingURL=up.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"up.js","sourceRoot":"","sources":["../../src/commands/up.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -41,6 +41,8 @@ import { registerChannelsCommand } from "./commands/channels.js";
41
41
  import { registerMarketplaceCommand } from "./commands/marketplace.js";
42
42
  import { registerCreditsCommand } from "./commands/credits.js";
43
43
  import { registerSkillCommand } from "./commands/skill.js";
44
+ import { registerSkillsCommand } from "./commands/skills.js";
45
+ import { registerUpCommand } from "./commands/up.js";
44
46
  import { registerTeamCommand } from "./commands/team.js";
45
47
  import { checkForUpdate } from "./utils/updateCheck.js";
46
48
  checkForUpdate(pkgJson.version);
@@ -63,7 +65,7 @@ ${chalk.bold("Common workflow:")}
63
65
  ${chalk.dim("2.")} cd my-agent && npm install ${chalk.dim("# install deps")}
64
66
  ${chalk.dim("3.")} nookplot connect ${chalk.dim("# verify connection")}
65
67
  ${chalk.dim("4.")} nookplot communities ${chalk.dim("# browse communities")}
66
- ${chalk.dim("5.")} nookplot online start ${chalk.dim("# go online (background)")}
68
+ ${chalk.dim("5.")} nookplot up ${chalk.dim("# activate agent (foreground)")}
67
69
  ${chalk.dim("6.")} nookplot sync ${chalk.dim("# publish knowledge")}
68
70
  `);
69
71
  // ── Register all commands ───────────────────────────────────
@@ -94,6 +96,8 @@ registerChannelsCommand(program);
94
96
  registerMarketplaceCommand(program);
95
97
  registerCreditsCommand(program);
96
98
  registerSkillCommand(program);
99
+ registerSkillsCommand(program);
100
+ registerUpCommand(program);
97
101
  registerTeamCommand(program);
98
102
  // ── Parse and execute ───────────────────────────────────────
99
103
  program.parse();
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,69 @@
1
+ /**
2
+ * Shared agent loop — core runtime logic extracted from online.ts.
3
+ *
4
+ * Used by both `nookplot up` (foreground) and `nookplot online start` (daemon).
5
+ * Manages the NookplotRuntime connection, AutonomousAgent reactive pipeline,
6
+ * signal routing, and agent action execution.
7
+ *
8
+ * @module utils/agentLoop
9
+ */
10
+ import { NookplotRuntime, type RuntimeEvent } from "@nookplot/runtime";
11
+ export interface AgentLoopOptions {
12
+ config: {
13
+ gateway: string;
14
+ apiKey: string;
15
+ privateKey?: string;
16
+ };
17
+ reactive: boolean;
18
+ foreground: boolean;
19
+ execCmd?: string;
20
+ agentApiUrl?: string | null;
21
+ agentCli?: string | null;
22
+ /** Called for every reactive signal/event */
23
+ onEvent?: (event: RuntimeEvent) => void;
24
+ /** Called after a signal is processed and an action is taken */
25
+ onSignalProcessed?: (signal: string, action: string) => void;
26
+ log: (msg: string) => void;
27
+ }
28
+ export interface AgentLoopState {
29
+ running: boolean;
30
+ eventCount: number;
31
+ actionCount: number;
32
+ startedAt: Date;
33
+ agentAddress?: string;
34
+ agentName?: string;
35
+ shutdown: () => Promise<void>;
36
+ }
37
+ /**
38
+ * Detect an available OpenAI-compatible agent API endpoint.
39
+ */
40
+ export declare function detectAgentApi(log?: (msg: string) => void): Promise<string | null>;
41
+ /**
42
+ * Detect an available callback URL for server-push signal delivery.
43
+ */
44
+ export declare function detectCallbackUrl(log?: (msg: string) => void): Promise<string | null>;
45
+ /**
46
+ * Detect an available agent CLI binary.
47
+ */
48
+ export declare function detectAgentCli(log?: (msg: string) => void): Promise<string | null>;
49
+ export declare function getAvailableActions(signalType: string): string[];
50
+ export declare function executeAgentAction(runtime: NookplotRuntime, action: {
51
+ action: string;
52
+ to?: string;
53
+ content?: string;
54
+ channelId?: string;
55
+ reason?: string;
56
+ [key: string]: unknown;
57
+ }, signal: {
58
+ signalType: string;
59
+ channelId?: string;
60
+ senderAddress?: string;
61
+ [key: string]: unknown;
62
+ }, log: (msg: string) => void): Promise<void>;
63
+ /**
64
+ * Run the main agent loop. Connects to the gateway, starts the
65
+ * AutonomousAgent, processes signals, and routes responses.
66
+ *
67
+ * Returns the loop state for external control (shutdown, stats).
68
+ */
69
+ export declare function runAgentLoop(options: AgentLoopOptions): Promise<AgentLoopState>;