spora 0.1.18 → 0.2.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 (36) hide show
  1. package/dist/{chunk-ERTBXYOP.js → chunk-3FBYOHQR.js} +4 -4
  2. package/dist/{chunk-BUDIGP7I.js → chunk-3WPIVG27.js} +6 -6
  3. package/dist/{chunk-KVJ7QDP7.js → chunk-CMD2AGVW.js} +5 -5
  4. package/dist/{chunk-NFDZ47AG.js → chunk-MOCLA2KK.js} +4 -4
  5. package/dist/{chunk-7AHCICNB.js → chunk-V4BSNSFM.js} +2 -2
  6. package/dist/cli.js +45 -28
  7. package/dist/cli.js.map +1 -1
  8. package/dist/{client-UIVNUOML.js → client-FULMJH3S.js} +6 -6
  9. package/dist/{client-E2HXMCWG.js → client-RII4ST5D.js} +6 -6
  10. package/dist/{colony-JHNO77G3.js → colony-CBUE2M3P.js} +3 -3
  11. package/dist/{heartbeat-7NE3QFGK.js → heartbeat-KT5AFMGU.js} +11 -11
  12. package/dist/{init-SZYTEU67.js → init-NMWV64VQ.js} +13 -5
  13. package/dist/init-NMWV64VQ.js.map +1 -0
  14. package/dist/{llm-RDNC5Y3G.js → llm-OH2Z4PSN.js} +3 -3
  15. package/dist/mcp-server.js +22 -22
  16. package/dist/{prompt-builder-BWINRCXP.js → prompt-builder-TH576BVM.js} +4 -4
  17. package/dist/{queue-FMUMULCD.js → queue-5SDR3MF2.js} +3 -3
  18. package/dist/web-chat/chat.html +396 -0
  19. package/dist/web-chat-OQZCZSZO.js +162 -0
  20. package/dist/web-chat-OQZCZSZO.js.map +1 -0
  21. package/dist/{x-client-HM2LMXS3.js → x-client-T762KJFE.js} +3 -3
  22. package/package.json +1 -1
  23. package/dist/init-SZYTEU67.js.map +0 -1
  24. /package/dist/{chunk-ERTBXYOP.js.map → chunk-3FBYOHQR.js.map} +0 -0
  25. /package/dist/{chunk-BUDIGP7I.js.map → chunk-3WPIVG27.js.map} +0 -0
  26. /package/dist/{chunk-KVJ7QDP7.js.map → chunk-CMD2AGVW.js.map} +0 -0
  27. /package/dist/{chunk-NFDZ47AG.js.map → chunk-MOCLA2KK.js.map} +0 -0
  28. /package/dist/{chunk-7AHCICNB.js.map → chunk-V4BSNSFM.js.map} +0 -0
  29. /package/dist/{client-UIVNUOML.js.map → client-FULMJH3S.js.map} +0 -0
  30. /package/dist/{client-E2HXMCWG.js.map → client-RII4ST5D.js.map} +0 -0
  31. /package/dist/{colony-JHNO77G3.js.map → colony-CBUE2M3P.js.map} +0 -0
  32. /package/dist/{heartbeat-7NE3QFGK.js.map → heartbeat-KT5AFMGU.js.map} +0 -0
  33. /package/dist/{llm-RDNC5Y3G.js.map → llm-OH2Z4PSN.js.map} +0 -0
  34. /package/dist/{prompt-builder-BWINRCXP.js.map → prompt-builder-TH576BVM.js.map} +0 -0
  35. /package/dist/{queue-FMUMULCD.js.map → queue-5SDR3MF2.js.map} +0 -0
  36. /package/dist/{x-client-HM2LMXS3.js.map → x-client-T762KJFE.js.map} +0 -0
@@ -1,9 +1,9 @@
1
- import {
2
- logger
3
- } from "./chunk-KELPENM3.js";
4
1
  import {
5
2
  loadConfig
6
3
  } from "./chunk-YEKHNTQO.js";
4
+ import {
5
+ logger
6
+ } from "./chunk-KELPENM3.js";
7
7
  import {
8
8
  paths
9
9
  } from "./chunk-53YLFYJF.js";
@@ -78,4 +78,4 @@ export {
78
78
  generateResponse,
79
79
  chat
80
80
  };
81
- //# sourceMappingURL=chunk-ERTBXYOP.js.map
81
+ //# sourceMappingURL=chunk-3FBYOHQR.js.map
@@ -1,9 +1,9 @@
1
- import {
2
- logger
3
- } from "./chunk-KELPENM3.js";
4
1
  import {
5
2
  loadConfig
6
3
  } from "./chunk-YEKHNTQO.js";
4
+ import {
5
+ logger
6
+ } from "./chunk-KELPENM3.js";
7
7
 
8
8
  // src/x-client/index.ts
9
9
  var clientInstance = null;
@@ -11,11 +11,11 @@ async function getXClient() {
11
11
  if (clientInstance) return clientInstance;
12
12
  const config = loadConfig();
13
13
  if (config.xMethod === "api") {
14
- const { XApiClient } = await import("./client-UIVNUOML.js");
14
+ const { XApiClient } = await import("./client-FULMJH3S.js");
15
15
  clientInstance = new XApiClient();
16
16
  logger.info("X client initialized: API mode");
17
17
  } else {
18
- const { XBrowserClient } = await import("./client-E2HXMCWG.js");
18
+ const { XBrowserClient } = await import("./client-RII4ST5D.js");
19
19
  clientInstance = new XBrowserClient();
20
20
  logger.info("X client initialized: Browser mode");
21
21
  }
@@ -29,4 +29,4 @@ export {
29
29
  getXClient,
30
30
  resetXClient
31
31
  };
32
- //# sourceMappingURL=chunk-BUDIGP7I.js.map
32
+ //# sourceMappingURL=chunk-3WPIVG27.js.map
@@ -1,9 +1,9 @@
1
- import {
2
- logger
3
- } from "./chunk-KELPENM3.js";
4
1
  import {
5
2
  loadConfig
6
3
  } from "./chunk-YEKHNTQO.js";
4
+ import {
5
+ logger
6
+ } from "./chunk-KELPENM3.js";
7
7
  import {
8
8
  ensureDirectories,
9
9
  paths
@@ -67,7 +67,7 @@ async function flushQueue() {
67
67
  const now = /* @__PURE__ */ new Date();
68
68
  let posted = 0;
69
69
  let failed = 0;
70
- const { getXClient } = await import("./x-client-HM2LMXS3.js");
70
+ const { getXClient } = await import("./x-client-T762KJFE.js");
71
71
  const client = await getXClient();
72
72
  for (const entry of queue.entries) {
73
73
  if (entry.status !== "pending") continue;
@@ -121,4 +121,4 @@ export {
121
121
  flushQueue,
122
122
  showQueue
123
123
  };
124
- //# sourceMappingURL=chunk-KVJ7QDP7.js.map
124
+ //# sourceMappingURL=chunk-CMD2AGVW.js.map
@@ -1,10 +1,10 @@
1
- import {
2
- logger
3
- } from "./chunk-KELPENM3.js";
4
1
  import {
5
2
  loadConfig,
6
3
  saveConfig
7
4
  } from "./chunk-YEKHNTQO.js";
5
+ import {
6
+ logger
7
+ } from "./chunk-KELPENM3.js";
8
8
 
9
9
  // src/x-client/rate-limiter.ts
10
10
  var RateLimiter = class {
@@ -54,4 +54,4 @@ var rateLimiter = new RateLimiter();
54
54
  export {
55
55
  rateLimiter
56
56
  };
57
- //# sourceMappingURL=chunk-NFDZ47AG.js.map
57
+ //# sourceMappingURL=chunk-MOCLA2KK.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  rateLimiter
3
- } from "./chunk-NFDZ47AG.js";
3
+ } from "./chunk-MOCLA2KK.js";
4
4
  import {
5
5
  getRecentInteractions,
6
6
  loadLearnings,
@@ -159,4 +159,4 @@ export {
159
159
  buildHeartbeatUserMessage,
160
160
  buildChatPrompt
161
161
  };
162
- //# sourceMappingURL=chunk-7AHCICNB.js.map
162
+ //# sourceMappingURL=chunk-V4BSNSFM.js.map
package/dist/cli.js CHANGED
@@ -123,13 +123,30 @@ program.command("init").description("Set up X account credentials for your Spore
123
123
  console.log(chalk.cyan(BANNER));
124
124
  console.log(chalk.bold("Welcome to Spora."));
125
125
  console.log(chalk.gray("The global town square for AI agents.\n"));
126
- const { runInit } = await import("./init-SZYTEU67.js");
126
+ const { runInit } = await import("./init-NMWV64VQ.js");
127
127
  await runInit(opts.token);
128
128
  });
129
129
  program.command("serve").description("Start the Spora MCP server (stdio)").action(async () => {
130
130
  const { startServer } = await import("./mcp-server.js");
131
131
  await startServer();
132
132
  });
133
+ program.command("chat").description("Open web-based chat interface with your Spore").action(async () => {
134
+ if (!identityExists()) {
135
+ console.log(chalk.red("\u2717 No identity found. Run `spora create` first."));
136
+ process.exit(1);
137
+ }
138
+ const { startWebChat } = await import("./web-chat-OQZCZSZO.js");
139
+ await startWebChat();
140
+ });
141
+ program.command("tui").description("Start terminal-based chat interface (TUI)").action(async () => {
142
+ if (!identityExists()) {
143
+ console.log(chalk.red("\u2717 No identity found. Run `spora create` first."));
144
+ process.exit(1);
145
+ }
146
+ console.log(chalk.yellow("Terminal chat interface coming soon!"));
147
+ console.log(chalk.dim("For now, use `spora chat` to open the web interface."));
148
+ process.exit(0);
149
+ });
133
150
  program.command("status").description("Show Spore status").action(() => {
134
151
  if (!hasXCredentials()) {
135
152
  console.log(JSON.stringify({ error: "No X credentials found. Run `spora init` first." }));
@@ -261,7 +278,7 @@ program.command("journal").description("Add a reflection to the evolution journa
261
278
  });
262
279
  program.command("post").description("Post a tweet").argument("<content>", "Tweet content (max 280 chars)").action(async (content) => {
263
280
  try {
264
- const { getXClient } = await import("./x-client-HM2LMXS3.js");
281
+ const { getXClient } = await import("./x-client-T762KJFE.js");
265
282
  const client = await getXClient();
266
283
  const result = await client.postTweet(content);
267
284
  console.log(JSON.stringify(result, null, 2));
@@ -272,7 +289,7 @@ program.command("post").description("Post a tweet").argument("<content>", "Tweet
272
289
  });
273
290
  program.command("reply").description("Reply to a tweet").argument("<tweetId>", "Tweet ID to reply to").argument("<content>", "Reply content").action(async (tweetId, content) => {
274
291
  try {
275
- const { getXClient } = await import("./x-client-HM2LMXS3.js");
292
+ const { getXClient } = await import("./x-client-T762KJFE.js");
276
293
  const client = await getXClient();
277
294
  const result = await client.replyToTweet(tweetId, content);
278
295
  console.log(JSON.stringify(result, null, 2));
@@ -283,7 +300,7 @@ program.command("reply").description("Reply to a tweet").argument("<tweetId>", "
283
300
  });
284
301
  program.command("like").description("Like a tweet").argument("<tweetId>", "Tweet ID").action(async (tweetId) => {
285
302
  try {
286
- const { getXClient } = await import("./x-client-HM2LMXS3.js");
303
+ const { getXClient } = await import("./x-client-T762KJFE.js");
287
304
  const client = await getXClient();
288
305
  const result = await client.likeTweet(tweetId);
289
306
  console.log(JSON.stringify(result, null, 2));
@@ -294,7 +311,7 @@ program.command("like").description("Like a tweet").argument("<tweetId>", "Tweet
294
311
  });
295
312
  program.command("retweet").description("Retweet a tweet").argument("<tweetId>", "Tweet ID").action(async (tweetId) => {
296
313
  try {
297
- const { getXClient } = await import("./x-client-HM2LMXS3.js");
314
+ const { getXClient } = await import("./x-client-T762KJFE.js");
298
315
  const client = await getXClient();
299
316
  const result = await client.retweet(tweetId);
300
317
  console.log(JSON.stringify(result, null, 2));
@@ -305,7 +322,7 @@ program.command("retweet").description("Retweet a tweet").argument("<tweetId>",
305
322
  });
306
323
  program.command("follow").description("Follow a user").argument("<handle>", "User handle or ID").action(async (handle) => {
307
324
  try {
308
- const { getXClient } = await import("./x-client-HM2LMXS3.js");
325
+ const { getXClient } = await import("./x-client-T762KJFE.js");
309
326
  const client = await getXClient();
310
327
  const result = await client.followUser(handle);
311
328
  console.log(JSON.stringify(result, null, 2));
@@ -316,7 +333,7 @@ program.command("follow").description("Follow a user").argument("<handle>", "Use
316
333
  });
317
334
  program.command("unfollow").description("Unfollow a user").argument("<handle>", "User handle or ID").action(async (handle) => {
318
335
  try {
319
- const { getXClient } = await import("./x-client-HM2LMXS3.js");
336
+ const { getXClient } = await import("./x-client-T762KJFE.js");
320
337
  const client = await getXClient();
321
338
  const result = await client.unfollowUser(handle);
322
339
  console.log(JSON.stringify(result, null, 2));
@@ -327,7 +344,7 @@ program.command("unfollow").description("Unfollow a user").argument("<handle>",
327
344
  });
328
345
  program.command("timeline").description("Read home timeline").option("-c, --count <n>", "Number of tweets", "20").action(async (opts) => {
329
346
  try {
330
- const { getXClient } = await import("./x-client-HM2LMXS3.js");
347
+ const { getXClient } = await import("./x-client-T762KJFE.js");
331
348
  const client = await getXClient();
332
349
  const result = await client.getTimeline({ count: parseInt(opts.count) });
333
350
  console.log(JSON.stringify(result, null, 2));
@@ -338,7 +355,7 @@ program.command("timeline").description("Read home timeline").option("-c, --coun
338
355
  });
339
356
  program.command("mentions").description("Read mentions").option("-c, --count <n>", "Number of mentions", "20").action(async (opts) => {
340
357
  try {
341
- const { getXClient } = await import("./x-client-HM2LMXS3.js");
358
+ const { getXClient } = await import("./x-client-T762KJFE.js");
342
359
  const client = await getXClient();
343
360
  const result = await client.getMentions({ count: parseInt(opts.count) });
344
361
  console.log(JSON.stringify(result, null, 2));
@@ -349,7 +366,7 @@ program.command("mentions").description("Read mentions").option("-c, --count <n>
349
366
  });
350
367
  program.command("search").description("Search for tweets").argument("<query>", "Search query").option("-c, --count <n>", "Number of results", "20").action(async (query, opts) => {
351
368
  try {
352
- const { getXClient } = await import("./x-client-HM2LMXS3.js");
369
+ const { getXClient } = await import("./x-client-T762KJFE.js");
353
370
  const client = await getXClient();
354
371
  const result = await client.searchTweets(query, { count: parseInt(opts.count) });
355
372
  console.log(JSON.stringify(result, null, 2));
@@ -360,7 +377,7 @@ program.command("search").description("Search for tweets").argument("<query>", "
360
377
  });
361
378
  program.command("profile").description("Get a user's X profile").argument("<handle>", "X handle (without @)").action(async (handle) => {
362
379
  try {
363
- const { getXClient } = await import("./x-client-HM2LMXS3.js");
380
+ const { getXClient } = await import("./x-client-T762KJFE.js");
364
381
  const client = await getXClient();
365
382
  const result = await client.getProfile(handle);
366
383
  console.log(JSON.stringify(result, null, 2));
@@ -426,7 +443,7 @@ program.command("note").description("Add a relationship note about someone").arg
426
443
  });
427
444
  program.command("schedule").description("Queue a post for later").argument("<content>", "Tweet content").option("--at <datetime>", "ISO datetime to post at").action(async (content, opts) => {
428
445
  try {
429
- const { addToQueue } = await import("./queue-FMUMULCD.js");
446
+ const { addToQueue } = await import("./queue-5SDR3MF2.js");
430
447
  const entry = addToQueue(content, opts.at);
431
448
  console.log(JSON.stringify({ success: true, id: entry.id, scheduledFor: entry.scheduledFor }));
432
449
  } catch (error) {
@@ -436,7 +453,7 @@ program.command("schedule").description("Queue a post for later").argument("<con
436
453
  });
437
454
  program.command("flush").description("Post all queued items whose time has come").action(async () => {
438
455
  try {
439
- const { flushQueue } = await import("./queue-FMUMULCD.js");
456
+ const { flushQueue } = await import("./queue-5SDR3MF2.js");
440
457
  const results = await flushQueue();
441
458
  console.log(JSON.stringify(results, null, 2));
442
459
  } catch (error) {
@@ -445,13 +462,13 @@ program.command("flush").description("Post all queued items whose time has come"
445
462
  }
446
463
  });
447
464
  program.command("queue").description("Show scheduled posts").action(async () => {
448
- const { showQueue } = await import("./queue-FMUMULCD.js");
465
+ const { showQueue } = await import("./queue-5SDR3MF2.js");
449
466
  showQueue();
450
467
  });
451
468
  var colony = program.command("colony").description("Colony commands");
452
469
  colony.command("checkin").description("Check into The Colony \u2014 sync memory, discover Spores").option("-m, --message <msg>", "Optional message to post").action(async (opts) => {
453
470
  try {
454
- const { colonyCheckin } = await import("./colony-JHNO77G3.js");
471
+ const { colonyCheckin } = await import("./colony-CBUE2M3P.js");
455
472
  const result = await colonyCheckin(opts.message);
456
473
  console.log(JSON.stringify(result, null, 2));
457
474
  } catch (error) {
@@ -470,7 +487,7 @@ colony.command("memory").description("Read the Colony's shared memory").action(a
470
487
  });
471
488
  colony.command("plans").description("Get all active Colony plans").action(async () => {
472
489
  try {
473
- const { getActivePlans } = await import("./colony-JHNO77G3.js");
490
+ const { getActivePlans } = await import("./colony-CBUE2M3P.js");
474
491
  const plans = getActivePlans();
475
492
  console.log(plans.length > 0 ? JSON.stringify(plans, null, 2) : JSON.stringify({ message: "No active plans. Propose one!" }));
476
493
  } catch (error) {
@@ -480,7 +497,7 @@ colony.command("plans").description("Get all active Colony plans").action(async
480
497
  });
481
498
  colony.command("propose").description("Propose a coordinated plan").argument("<description>", "What's the plan?").action(async (description) => {
482
499
  try {
483
- const { proposePlan } = await import("./colony-JHNO77G3.js");
500
+ const { proposePlan } = await import("./colony-CBUE2M3P.js");
484
501
  const result = await proposePlan(description);
485
502
  console.log(JSON.stringify(result, null, 2));
486
503
  } catch (error) {
@@ -490,7 +507,7 @@ colony.command("propose").description("Propose a coordinated plan").argument("<d
490
507
  });
491
508
  colony.command("join").description("Join an active plan").argument("<planId>", "Plan ID").action(async (planId) => {
492
509
  try {
493
- const { joinPlan } = await import("./colony-JHNO77G3.js");
510
+ const { joinPlan } = await import("./colony-CBUE2M3P.js");
494
511
  const result = await joinPlan(planId);
495
512
  console.log(JSON.stringify(result, null, 2));
496
513
  } catch (error) {
@@ -500,7 +517,7 @@ colony.command("join").description("Join an active plan").argument("<planId>", "
500
517
  });
501
518
  colony.command("post-status").description("Post a status update to the Colony").argument("<status>", "Your status").action(async (status) => {
502
519
  try {
503
- const { postStatus } = await import("./colony-JHNO77G3.js");
520
+ const { postStatus } = await import("./colony-CBUE2M3P.js");
504
521
  const result = await postStatus(status);
505
522
  console.log(JSON.stringify(result, null, 2));
506
523
  } catch (error) {
@@ -510,7 +527,7 @@ colony.command("post-status").description("Post a status update to the Colony").
510
527
  });
511
528
  colony.command("activity").description("Get today's Colony activity").action(async () => {
512
529
  try {
513
- const { getTodaysActivity } = await import("./colony-JHNO77G3.js");
530
+ const { getTodaysActivity } = await import("./colony-CBUE2M3P.js");
514
531
  const activity = getTodaysActivity();
515
532
  console.log(activity.length > 0 ? JSON.stringify(activity, null, 2) : JSON.stringify({ message: "No Colony activity today yet." }));
516
533
  } catch (error) {
@@ -527,7 +544,7 @@ program.command("start").description("Start the autonomous Spora agent").option(
527
544
  console.log(JSON.stringify({ error: "No X credentials. Run `spora init` to set up." }));
528
545
  process.exit(1);
529
546
  }
530
- const { hasLLMKey } = await import("./llm-RDNC5Y3G.js");
547
+ const { hasLLMKey } = await import("./llm-OH2Z4PSN.js");
531
548
  if (!hasLLMKey()) {
532
549
  console.log(JSON.stringify({ error: "No LLM API key. Run `spora set-llm-key` first." }));
533
550
  process.exit(1);
@@ -540,11 +557,11 @@ program.command("start").description("Start the autonomous Spora agent").option(
540
557
  }
541
558
  console.log(chalk.cyan(BANNER));
542
559
  console.log(chalk.bold("Starting Spora agent...\n"));
543
- const { startHeartbeatLoop } = await import("./heartbeat-7NE3QFGK.js");
560
+ const { startHeartbeatLoop } = await import("./heartbeat-KT5AFMGU.js");
544
561
  await startHeartbeatLoop();
545
562
  });
546
563
  program.command("stop").description("Stop the running Spora agent").action(async () => {
547
- const { getRunningPid, requestStop } = await import("./heartbeat-7NE3QFGK.js");
564
+ const { getRunningPid, requestStop } = await import("./heartbeat-KT5AFMGU.js");
548
565
  const pid = getRunningPid();
549
566
  if (!pid) {
550
567
  console.log(JSON.stringify({ message: "Spora agent is not running." }));
@@ -586,13 +603,13 @@ program.command("chat").description("Chat with your Spore locally").action(async
586
603
  console.log("Spora not initialized. Run `spora init` first.");
587
604
  process.exit(1);
588
605
  }
589
- const { hasLLMKey } = await import("./llm-RDNC5Y3G.js");
606
+ const { hasLLMKey } = await import("./llm-OH2Z4PSN.js");
590
607
  if (!hasLLMKey()) {
591
608
  console.log("No LLM API key. Run `spora set-llm-key` first.");
592
609
  process.exit(1);
593
610
  }
594
- const { buildChatPrompt } = await import("./prompt-builder-BWINRCXP.js");
595
- const { chat: chatLLM } = await import("./llm-RDNC5Y3G.js");
611
+ const { buildChatPrompt } = await import("./prompt-builder-TH576BVM.js");
612
+ const { chat: chatLLM } = await import("./llm-OH2Z4PSN.js");
596
613
  const { input } = await import("@inquirer/prompts");
597
614
  const identity = loadIdentity();
598
615
  console.log(chalk.cyan(BANNER));
@@ -620,9 +637,9 @@ ${identity.name}: `) + response.content + "\n");
620
637
  }
621
638
  });
622
639
  program.command("agent-status").description("Check if the Spora agent is running").action(async () => {
623
- const { getRunningPid } = await import("./heartbeat-7NE3QFGK.js");
640
+ const { getRunningPid } = await import("./heartbeat-KT5AFMGU.js");
624
641
  const pid = getRunningPid();
625
- const { hasLLMKey } = await import("./llm-RDNC5Y3G.js");
642
+ const { hasLLMKey } = await import("./llm-OH2Z4PSN.js");
626
643
  console.log(JSON.stringify({
627
644
  agentRunning: pid !== null,
628
645
  pid,