vana-cli 0.29.1 → 0.30.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/README.md CHANGED
@@ -73,8 +73,10 @@ it from escrow and `--max-fee` to cap it. The rest of the group:
73
73
  | `vana app escrow balance\|fund` | what the app can spend, and funding it |
74
74
  | `vana app onchain <scope> --owner <addr>` | data point version, hashes, deletion state |
75
75
 
76
- Everything defaults to **moksha**, the testnet; `--network mainnet` spends
77
- real money and is never implied.
76
+ Everything defaults to **mainnet**, where your data and apps live. Paying is
77
+ never implied: a paid read stops with the exact price until you add `--pay`,
78
+ and `--max-fee` caps it. `--network moksha` is the testnet, where fees are
79
+ play money.
78
80
 
79
81
  ## For agents
80
82
 
@@ -88,6 +90,7 @@ Install the skills that teach an agent each half:
88
90
 
89
91
  ```bash
90
92
  vana skills install builder # ask for access, read, pay
93
+ vana skills install agent-access # give your own agent (OpenClaw, Hermes) scoped, paid access
91
94
  vana skills install connect-data # collect your own data
92
95
  ```
93
96
 
@@ -73,6 +73,13 @@ export declare function getSourceStatusPresentation(source: SourceStatus): {
73
73
  export declare function toneForRuntime(runtime: CliStatus["runtime"]): RenderTone;
74
74
  export declare function loadRegistrySources(): Promise<AvailableSource[]>;
75
75
  export declare function compareSourceStatusOrder(left: SourceStatus, right: SourceStatus): number;
76
+ /**
77
+ * Why a connector result holds no data despite recorded errors, or null when
78
+ * it has data or recorded no error. A partial run (data plus errors) still
79
+ * counts as collected; an empty result with no errors is an empty account.
80
+ */
81
+ export declare function failedEmptyResult(result: unknown): string | null;
82
+ export declare function browserStepMessage(message: string): string;
76
83
  export declare function isSourceAttention(source: SourceStatus): boolean;
77
84
  export declare function rankSourceStatus(source: SourceStatus): number;
78
85
  export declare function readResultSummary(resultPath: string): Promise<{
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
package/dist/cli/index.js CHANGED
@@ -203,7 +203,7 @@ More:
203
203
  for (const [flags, description] of GLOBAL_FLAG_DEFS) {
204
204
  program.option(flags, description);
205
205
  }
206
- program.addOption(new Option("--network <network>", "Vana network for protocol operations (default: moksha)").choices([...VANA_NETWORKS]));
206
+ program.addOption(new Option("--network <network>", "Vana network: mainnet (default) or moksha, the testnet").choices([...VANA_NETWORKS]));
207
207
  program.hook("preAction", (_thisCommand, actionCommand) => {
208
208
  mergeParsedGlobalOptions(parsedOptions, actionCommand);
209
209
  });
@@ -1195,6 +1195,7 @@ async function runConnect(rawSource, options, connectOptions = {}) {
1195
1195
  renderer?.resumeAfterPrompt();
1196
1196
  return values;
1197
1197
  };
1198
+ const shownBrowserPrompts = new Set();
1198
1199
  for await (const event of runtime.runConnector({
1199
1200
  connectorPath: resolution.connectorPath,
1200
1201
  source: resolution.source,
@@ -1285,7 +1286,19 @@ async function runConnect(rawSource, options, connectOptions = {}) {
1285
1286
  continue;
1286
1287
  }
1287
1288
  if (event.type === "headed-required") {
1288
- // Silent — the browser opens automatically
1289
+ // The browser opens by itself, but the person has to act in it:
1290
+ // without this line an empty sign-in page appears and the terminal
1291
+ // says nothing. Each distinct message once.
1292
+ const message = event.message?.trim();
1293
+ if (message && !shownBrowserPrompts.has(message)) {
1294
+ // The bell once per run: the runtime's "opening a browser" line and
1295
+ // the connector's own instruction arrive back to back.
1296
+ if (shownBrowserPrompts.size === 0) {
1297
+ renderer?.bell();
1298
+ }
1299
+ shownBrowserPrompts.add(message);
1300
+ renderer?.note(browserStepMessage(message));
1301
+ }
1289
1302
  continue;
1290
1303
  }
1291
1304
  if (event.type === "legacy-auth") {
@@ -1316,14 +1329,20 @@ async function runConnect(rawSource, options, connectOptions = {}) {
1316
1329
  try {
1317
1330
  const raw = await fsp.readFile(event.resultPath, "utf8");
1318
1331
  const parsed = JSON.parse(raw);
1319
- if (parsed &&
1332
+ const errorOnly = parsed &&
1320
1333
  typeof parsed === "object" &&
1321
1334
  "error" in parsed &&
1322
- Object.keys(parsed).length <= 2) {
1335
+ Object.keys(parsed).length <= 2;
1336
+ // A full export shape can also carry errors and no data: the
1337
+ // connector stopped (e.g. at sign-in) or every stream failed, and it
1338
+ // wrote an empty result, which must not read as "Connected".
1339
+ const fatalReason = errorOnly ? null : failedEmptyResult(parsed);
1340
+ if (errorOnly || fatalReason) {
1323
1341
  // Connector returned an error, not real data
1324
- const errorMsg = typeof parsed.error === "string"
1325
- ? parsed.error
1326
- : "Collection returned an error";
1342
+ const errorMsg = fatalReason ??
1343
+ (typeof parsed.error === "string"
1344
+ ? parsed.error
1345
+ : "Collection returned an error");
1327
1346
  await updateSourceState(source, {
1328
1347
  lastRunAt: new Date().toISOString(),
1329
1348
  lastRunOutcome: CliOutcomeStatus.RUNTIME_ERROR,
@@ -1335,9 +1354,10 @@ async function runConnect(rawSource, options, connectOptions = {}) {
1335
1354
  lastLogPath: runLogPath ?? fetchLogPath,
1336
1355
  });
1337
1356
  renderer?.fail(`Problem connecting ${displayName}.`);
1338
- renderer?.detail(typeof parsed.error === "string"
1339
- ? parsed.error
1340
- : "The connector returned an error instead of data.");
1357
+ renderer?.detail(fatalReason ??
1358
+ (typeof parsed.error === "string"
1359
+ ? parsed.error
1360
+ : "The connector returned an error instead of data."));
1341
1361
  emit.event({
1342
1362
  type: "outcome",
1343
1363
  status: CliOutcomeStatus.RUNTIME_ERROR,
@@ -4058,6 +4078,59 @@ export function compareSourceStatusOrder(left, right) {
4058
4078
  authMode: right.authMode,
4059
4079
  }));
4060
4080
  }
4081
+ const RESULT_METADATA_KEYS = new Set([
4082
+ "requestedScopes",
4083
+ "timestamp",
4084
+ "version",
4085
+ "platform",
4086
+ "exportSummary",
4087
+ "errors",
4088
+ ]);
4089
+ // Collected content, looked for inside the scope wrappers connectors build
4090
+ // (ChatGPT writes `{ conversations: [], total: 0 }`). Numbers and booleans on
4091
+ // their own are counters and flags, not content.
4092
+ function hasContent(value) {
4093
+ if (typeof value === "string")
4094
+ return value.trim() !== "";
4095
+ if (Array.isArray(value))
4096
+ return value.some(hasContent);
4097
+ if (value && typeof value === "object") {
4098
+ return Object.values(value).some(hasContent);
4099
+ }
4100
+ return false;
4101
+ }
4102
+ /**
4103
+ * Why a connector result holds no data despite recorded errors, or null when
4104
+ * it has data or recorded no error. A partial run (data plus errors) still
4105
+ * counts as collected; an empty result with no errors is an empty account.
4106
+ */
4107
+ export function failedEmptyResult(result) {
4108
+ if (!result || typeof result !== "object")
4109
+ return null;
4110
+ const record = result;
4111
+ const errors = (Array.isArray(record.errors) ? record.errors : []).filter((entry) => Boolean(entry) && typeof entry === "object");
4112
+ // No recorded error: an empty result is an empty account, not a failure.
4113
+ if (errors.length === 0)
4114
+ return null;
4115
+ // Judge by the data itself, not exportSummary.count: some connectors count
4116
+ // one stream only (ChatGPT counts conversations, not memories).
4117
+ const hasData = Object.entries(record).some(([key, value]) => !RESULT_METADATA_KEYS.has(key) && hasContent(value));
4118
+ if (hasData)
4119
+ return null;
4120
+ const cause = errors.find((entry) => entry.disposition === "fatal") ?? errors[0];
4121
+ return typeof cause.reason === "string" && cause.reason.trim()
4122
+ ? cause.reason
4123
+ : "The connector stopped before collecting any data.";
4124
+ }
4125
+ // Legacy connectors wrote their manual-step text for a host with a "Done"
4126
+ // button. The CLI has none: the runtime checks by itself until the step is
4127
+ // complete, so "click Done" would read as a button that never appears.
4128
+ const CLICK_DONE = /,?\s*(?:then\s+)?(?:return here and\s+)?click "Done"\.?\s*$/i;
4129
+ export function browserStepMessage(message) {
4130
+ if (!CLICK_DONE.test(message))
4131
+ return message;
4132
+ return `${message.replace(CLICK_DONE, ".")} Vana continues on its own once you're done.`;
4133
+ }
4061
4134
  export function isSourceAttention(source) {
4062
4135
  if (source.dataState === "ingest_failed" ||
4063
4136
  source.dataState === "ingest_unavailable") {