botanary 0.1.0 → 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 (73) hide show
  1. package/README.md +186 -9
  2. package/dist/bin/botanary.js +13 -3
  3. package/dist/bin/botanary.js.map +1 -1
  4. package/dist/package.json +2 -2
  5. package/dist/src/app-url.js +32 -0
  6. package/dist/src/app-url.js.map +1 -0
  7. package/dist/src/cli.js +113 -23
  8. package/dist/src/cli.js.map +1 -1
  9. package/dist/src/commands/agent.js +190 -49
  10. package/dist/src/commands/agent.js.map +1 -1
  11. package/dist/src/commands/mcp.js +136 -5
  12. package/dist/src/commands/mcp.js.map +1 -1
  13. package/dist/src/commands/system.js +109 -12
  14. package/dist/src/commands/system.js.map +1 -1
  15. package/dist/src/commands/utilities.js +44 -0
  16. package/dist/src/commands/utilities.js.map +1 -0
  17. package/dist/src/commands/wallet.js +332 -94
  18. package/dist/src/commands/wallet.js.map +1 -1
  19. package/dist/src/completion.js +69 -0
  20. package/dist/src/completion.js.map +1 -0
  21. package/dist/src/config-store.js +52 -0
  22. package/dist/src/config-store.js.map +1 -0
  23. package/dist/src/context.js +14 -4
  24. package/dist/src/context.js.map +1 -1
  25. package/dist/src/errors.js +116 -0
  26. package/dist/src/errors.js.map +1 -0
  27. package/dist/src/help/examples.js +357 -0
  28. package/dist/src/help/examples.js.map +1 -0
  29. package/dist/src/help/format.js +144 -0
  30. package/dist/src/help/format.js.map +1 -0
  31. package/dist/src/help/groups.js +39 -0
  32. package/dist/src/help/groups.js.map +1 -0
  33. package/dist/src/mcp-snippets.js +6 -0
  34. package/dist/src/mcp-snippets.js.map +1 -1
  35. package/dist/src/outcome.js +63 -0
  36. package/dist/src/outcome.js.map +1 -0
  37. package/dist/src/parser.js +18 -39
  38. package/dist/src/parser.js.map +1 -1
  39. package/dist/src/progress.js +37 -0
  40. package/dist/src/progress.js.map +1 -0
  41. package/dist/src/prompt-doc.js +92 -0
  42. package/dist/src/prompt-doc.js.map +1 -0
  43. package/dist/src/render/accounts.js +21 -0
  44. package/dist/src/render/accounts.js.map +1 -0
  45. package/dist/src/render/activity.js +34 -0
  46. package/dist/src/render/activity.js.map +1 -0
  47. package/dist/src/render/agents.js +42 -0
  48. package/dist/src/render/agents.js.map +1 -0
  49. package/dist/src/render/balance.js +68 -0
  50. package/dist/src/render/balance.js.map +1 -0
  51. package/dist/src/render/chains.js +52 -0
  52. package/dist/src/render/chains.js.map +1 -0
  53. package/dist/src/render/gas.js +34 -0
  54. package/dist/src/render/gas.js.map +1 -0
  55. package/dist/src/render/grant.js +34 -0
  56. package/dist/src/render/grant.js.map +1 -0
  57. package/dist/src/render/kv.js +60 -0
  58. package/dist/src/render/kv.js.map +1 -0
  59. package/dist/src/render/mandates.js +111 -0
  60. package/dist/src/render/mandates.js.map +1 -0
  61. package/dist/src/render/print.js +18 -0
  62. package/dist/src/render/print.js.map +1 -0
  63. package/dist/src/repl.js +114 -10
  64. package/dist/src/repl.js.map +1 -1
  65. package/dist/src/review.js +52 -0
  66. package/dist/src/review.js.map +1 -0
  67. package/dist/src/settings.js +88 -0
  68. package/dist/src/settings.js.map +1 -0
  69. package/dist/src/update-check.js +85 -0
  70. package/dist/src/update-check.js.map +1 -0
  71. package/dist/src/validate.js +92 -0
  72. package/dist/src/validate.js.map +1 -0
  73. package/package.json +2 -2
@@ -1,15 +1,26 @@
1
- import { runDiagnose, botanaryMcpHome } from 'botanary-mcp';
1
+ import { runDiagnose, botanaryMcpHome, openBrowser } from 'botanary-mcp';
2
2
  import { renderTable } from '../render/table.js';
3
- import { glyphs } from '../render/colors.js';
3
+ import { colors, glyphs } from '../render/colors.js';
4
+ import { columns, section } from '../render/kv.js';
5
+ import { group, DOCS_URL } from '../help/groups.js';
6
+ import { CONFIG_KEYS, assertKnownKey, configPath, readConfig, validateEntry, writeConfig } from '../config-store.js';
7
+ import { step } from '../progress.js';
8
+ import { printResult } from '../render/print.js';
9
+ /** Which resolved setting each config key feeds, so `config list` can show the value actually in force. */
10
+ const KEY_TO_SETTING = {
11
+ chainId: 'chain',
12
+ accountId: 'account',
13
+ apiUrl: 'apiUrl',
14
+ output: 'json',
15
+ color: 'color',
16
+ confirm: 'yes',
17
+ };
4
18
  export function registerSystemCommands(program, cliVersion) {
5
- program
6
- .command('diagnose')
7
- .description('START HERE when anything is unclear or an action failed - one call answers what is blocking the next step')
8
- .action(async () => {
19
+ const diagnoseAction = async () => {
9
20
  const ctx = program.opts().__ctx;
10
- const report = await runDiagnose(ctx.runtime);
11
- if (ctx.json) {
12
- console.log(JSON.stringify(report));
21
+ const report = await step(ctx, 'Checking what is blocking the next step', () => runDiagnose(ctx.runtime));
22
+ if (ctx.json || ctx.raw) {
23
+ console.log(ctx.json ? JSON.stringify(report) : JSON.stringify(report, null, 2));
13
24
  return;
14
25
  }
15
26
  console.log(report.summary);
@@ -17,15 +28,24 @@ export function registerSystemCommands(program, cliVersion) {
17
28
  console.log(blocker.severity === 'blocking' ? glyphs.danger(blocker.detail) : glyphs.warning(blocker.detail));
18
29
  console.log(` ${blocker.nextAction}`);
19
30
  }
20
- });
21
- program
31
+ };
32
+ group(program
33
+ .command('diagnose')
34
+ .description('Start here when anything is unclear or an action failed')
35
+ .action(diagnoseAction), 'System');
36
+ // Every CLI in this space calls it `doctor`, so that is what people type. Same action, not a wrapper
37
+ // that could drift.
38
+ group(program.command('doctor').description('The same readiness check as diagnose').action(diagnoseAction), 'System');
39
+ const config = group(program
22
40
  .command('config')
23
- .description('Where identity/session live and which env vars are active - unauthenticated, safe')
41
+ .description('Where identity and session live, and this machine\'s CLI defaults')
24
42
  .action(() => {
25
43
  const ctx = program.opts().__ctx;
26
44
  const rows = [
27
45
  ['home', botanaryMcpHome()],
46
+ ['config file', configPath()],
28
47
  ['BOTANARY_API_URL', process.env.BOTANARY_API_URL ?? '(not set, defaults to https://api.app.botanary.xyz)'],
48
+ ['api url in use', ctx.settings.apiUrl ?? 'https://api.app.botanary.xyz'],
29
49
  ['cli-version', cliVersion],
30
50
  ];
31
51
  if (ctx.json) {
@@ -33,6 +53,83 @@ export function registerSystemCommands(program, cliVersion) {
33
53
  return;
34
54
  }
35
55
  console.log(renderTable(rows));
56
+ }), 'System');
57
+ config
58
+ .command('list')
59
+ .description('Every setting, its value, and where that value came from')
60
+ .action(async () => {
61
+ const ctx = program.opts().__ctx;
62
+ const file = await readConfig();
63
+ const settings = ctx.settings;
64
+ const rows = CONFIG_KEYS.map((key) => {
65
+ const settingName = KEY_TO_SETTING[key];
66
+ return [
67
+ key,
68
+ String(file[key] ?? '-'),
69
+ String(settings[settingName] ?? '-'),
70
+ // The whole point of this command: a stored value that overrides nothing looks identical to one
71
+ // silently retargeting every command, unless the source is shown.
72
+ ctx.settings.provenance[settingName] ?? 'default',
73
+ ];
74
+ });
75
+ if (ctx.json) {
76
+ console.log(JSON.stringify(rows.map(([k, stored, inForce, from]) => ({ key: k, stored, inForce, from }))));
77
+ return;
78
+ }
79
+ console.log([section('Config'), columns(['KEY', 'STORED', 'IN FORCE', 'FROM'], rows), colors.dim(` ${configPath()}`)].join('\n'));
80
+ });
81
+ config
82
+ .command('get <key>')
83
+ .description('Print one stored config value')
84
+ .action(async (key) => {
85
+ const ctx = program.opts().__ctx;
86
+ const narrowed = assertKnownKey(key);
87
+ const file = await readConfig();
88
+ const value = file[narrowed];
89
+ console.log(ctx.json ? JSON.stringify({ key: narrowed, value: value ?? null }) : (value ?? '(unset)'));
90
+ });
91
+ config
92
+ .command('set <key> <value>')
93
+ .description('Store a default for one setting')
94
+ .action(async (key, value) => {
95
+ const ctx = program.opts().__ctx;
96
+ const entry = validateEntry(key, value);
97
+ const next = { ...(await readConfig()), [entry.key]: entry.value };
98
+ await writeConfig(next);
99
+ console.log(ctx.json ? JSON.stringify({ key: entry.key, value: entry.value }) : glyphs.success(`${entry.key} = ${entry.value}`));
36
100
  });
101
+ config
102
+ .command('unset <key>')
103
+ .description('Remove one stored default')
104
+ .action(async (key) => {
105
+ const ctx = program.opts().__ctx;
106
+ const narrowed = assertKnownKey(key);
107
+ const next = { ...(await readConfig()) };
108
+ delete next[narrowed];
109
+ await writeConfig(next);
110
+ console.log(ctx.json ? JSON.stringify({ key: narrowed, value: null }) : glyphs.success(`${narrowed} unset`));
111
+ });
112
+ group(program
113
+ .command('version')
114
+ .description('Print the installed botanary CLI version')
115
+ .action(() => {
116
+ const ctx = program.opts().__ctx;
117
+ printResult(ctx, { version: cliVersion }, () => cliVersion);
118
+ }), 'Utilities');
119
+ group(program
120
+ .command('docs [topic]')
121
+ .description('Open the Botanary documentation in your browser')
122
+ .action(async (topic) => {
123
+ const ctx = program.opts().__ctx;
124
+ // A topic becomes a docs path directly. No invented topic map: an unrecognised one lands on the
125
+ // docs site's own 404, which is a truthful answer rather than a guess at where it moved.
126
+ const url = topic ? `${DOCS_URL}/docs/${encodeURIComponent(topic)}` : DOCS_URL;
127
+ const opened = await openBrowser(url);
128
+ if (ctx.json) {
129
+ console.log(JSON.stringify({ url, opened }));
130
+ return;
131
+ }
132
+ console.log(opened ? glyphs.success(`Opened ${url}`) : glyphs.info(`Docs: ${url}`));
133
+ }), 'Utilities');
37
134
  }
38
135
  //# sourceMappingURL=system.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"system.js","sourceRoot":"","sources":["../../../src/commands/system.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE5D,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAE7C,MAAM,UAAU,sBAAsB,CAAC,OAAgB,EAAE,UAAkB;IACzE,OAAO;SACJ,OAAO,CAAC,UAAU,CAAC;SACnB,WAAW,CAAC,2GAA2G,CAAC;SACxH,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,GAAG,GAAe,OAAO,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;QAC7C,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC9C,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;YACb,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;YACpC,OAAO;QACT,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC5B,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YACtC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,KAAK,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;YAC9G,OAAO,CAAC,GAAG,CAAC,KAAK,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;QACzC,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,mFAAmF,CAAC;SAChG,MAAM,CAAC,GAAG,EAAE;QACX,MAAM,GAAG,GAAe,OAAO,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;QAC7C,MAAM,IAAI,GAAuB;YAC/B,CAAC,MAAM,EAAE,eAAe,EAAE,CAAC;YAC3B,CAAC,kBAAkB,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,qDAAqD,CAAC;YAC3G,CAAC,aAAa,EAAE,UAAU,CAAC;SAC5B,CAAC;QACF,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;YACb,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACtD,OAAO;QACT,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;AACP,CAAC"}
1
+ {"version":3,"file":"system.js","sourceRoot":"","sources":["../../../src/commands/system.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ import { group } from '../help/groups.js';
2
+ import { SHELLS, completionScript } from '../completion.js';
3
+ import { promptDoc } from '../prompt-doc.js';
4
+ import { step } from '../progress.js';
5
+ import { glyphs } from '../render/colors.js';
6
+ import { checkForUpdate, nagLine } from '../update-check.js';
7
+ export function registerUtilityCommands(program, cliVersion) {
8
+ group(program
9
+ .command('completion <shell>')
10
+ .description(`Print a shell completion script (${SHELLS.join(', ')})`)
11
+ .action((shell) => {
12
+ // Written to stdout raw, with no glyphs or color: its destination is a shell profile.
13
+ process.stdout.write(completionScript(shell, program));
14
+ }), 'Utilities');
15
+ group(program
16
+ .command('prompt')
17
+ .description('Print the full operating manual for an automation driving this CLI')
18
+ .action(() => {
19
+ const ctx = program.opts().__ctx;
20
+ const doc = promptDoc(program, cliVersion);
21
+ if (ctx.json) {
22
+ console.log(JSON.stringify({ prompt: doc }));
23
+ return;
24
+ }
25
+ process.stdout.write(doc);
26
+ }), 'Utilities');
27
+ group(program
28
+ .command('update-check')
29
+ .description('Check whether a newer botanary is published')
30
+ .action(async () => {
31
+ const ctx = program.opts().__ctx;
32
+ const result = await step(ctx, 'Asking npm', () => checkForUpdate(cliVersion, { fetchImpl: fetch, now: () => Date.now(), force: true }));
33
+ if (ctx.json) {
34
+ console.log(JSON.stringify(result));
35
+ return;
36
+ }
37
+ if (result.latest === null) {
38
+ console.log(glyphs.info('Could not reach the npm registry. Nothing changed.'));
39
+ return;
40
+ }
41
+ console.log(result.newer ? glyphs.warning(nagLine(result.latest, cliVersion)) : glyphs.success(`Up to date (${cliVersion}).`));
42
+ }), 'Utilities');
43
+ }
44
+ //# sourceMappingURL=utilities.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utilities.js","sourceRoot":"","sources":["../../../src/commands/utilities.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAE7D,MAAM,UAAU,uBAAuB,CAAC,OAAgB,EAAE,UAAkB;IAC1E,KAAK,CACH,OAAO;SACJ,OAAO,CAAC,oBAAoB,CAAC;SAC7B,WAAW,CAAC,oCAAoC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;SACrE,MAAM,CAAC,CAAC,KAAa,EAAE,EAAE;QACxB,sFAAsF;QACtF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;IACzD,CAAC,CAAC,EACJ,WAAW,CACZ,CAAC;IAEF,KAAK,CACH,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,oEAAoE,CAAC;SACjF,MAAM,CAAC,GAAG,EAAE;QACX,MAAM,GAAG,GAAe,OAAO,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;QAC7C,MAAM,GAAG,GAAG,SAAS,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QAC3C,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;YACb,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;YAC7C,OAAO;QACT,CAAC;QACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC5B,CAAC,CAAC,EACJ,WAAW,CACZ,CAAC;IAEF,KAAK,CACH,OAAO;SACJ,OAAO,CAAC,cAAc,CAAC;SACvB,WAAW,CAAC,6CAA6C,CAAC;SAC1D,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,GAAG,GAAe,OAAO,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;QAC7C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,EAAE,YAAY,EAAE,GAAG,EAAE,CAChD,cAAc,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CACrF,CAAC;QACF,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;YACb,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;YACpC,OAAO;QACT,CAAC;QACD,IAAI,MAAM,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;YAC3B,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAC,CAAC;YAC/E,OAAO;QACT,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,eAAe,UAAU,IAAI,CAAC,CAAC,CAAC;IACjI,CAAC,CAAC,EACJ,WAAW,CACZ,CAAC;AACJ,CAAC"}