@withone/cli 2.7.0 → 2.8.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
@@ -266,9 +266,10 @@ one actions find shopify "list products" -t knowledge
266
266
  ```
267
267
 
268
268
  - Each **intent** names the operation alone, in a few words (`"send a message to a channel"`), without its data: IDs, names and message text make the search miss. Up to 10 pairs.
269
- - **`--task`** describes the whole job in one line, in general terms, which helps choose between similar actions.
269
+ - **`--task`** describes the whole job in one line, in general terms. Agents are asked to send it with every find, since it helps tell similar actions apart.
270
270
  - **`-t knowledge`** searches the catalog for writing code and building flows and relays, which includes the platform's own (passthrough) endpoints; the default is the catalog for running actions now.
271
- - **`--ai-model`** names the model running the CLI (e.g. `claude-sonnet-5`), recorded with the find beside the CLI and the harness that launched it, so the account's usage can report which model asked.
271
+ - **`--ai-model`** names the model running the CLI (e.g. `claude-sonnet-5`), recorded with the find beside the CLI and the harness that launched it, so the account's usage can report which model asked. Agents are asked to send it with every find.
272
+ - An answer to a find without `--task` or `--ai-model` carries a `hint` field (a dim line for humans) asking for them on the next find. Both stay optional.
272
273
  - **`--no-knowledge`** lists the chosen actions (actionId, title, method, path) without fetching their documentation; load it later with `one actions load <actionId>`.
273
274
 
274
275
  Each intent's answer gives the action(s) to use with their docs, any actions also needed beside them, a **substitute** when the model was unsure (use one or the other, never both), and a few alternatives, then says once how to execute. Always read the docs before executing. The access settings from `one config` apply: an action they refuse is never offered.
package/dist/index.js CHANGED
@@ -3005,6 +3005,14 @@ var EXECUTE_GUIDE = `Run an action with:
3005
3005
  Connection keys come from \`one --agent list\`. Put each value where the action's documentation says it goes: path variables (placeholders like {userId}) in --path-vars, query parameters in --query-params, the request body in -d. Never put path variables or query parameters in -d.`;
3006
3006
  var FindArgsError = class extends Error {
3007
3007
  };
3008
+ function findHint(task, aiModel) {
3009
+ const missing = [
3010
+ task?.trim() ? null : '--task "<the whole job in one line, in general terms, without names, addresses, IDs or message text>"',
3011
+ aiModel?.trim() ? null : '--ai-model "<your model name>"'
3012
+ ].filter((m) => m !== null);
3013
+ if (missing.length === 0) return void 0;
3014
+ return `Send ${missing.join(" and ")} with every find: the task helps tell similar actions apart, and both are recorded with the find.`;
3015
+ }
3008
3016
  function actionHeading(action) {
3009
3017
  return `${action.title} \xB7 \`${action.method.toUpperCase()} ${action.path}\` \xB7 actionId: \`${action.actionId}\``;
3010
3018
  }
@@ -3444,13 +3452,16 @@ async function actionsFindCommand(pairs, options) {
3444
3452
  settings,
3445
3453
  { knowledgeCatalog: options.type === "knowledge", knowledge: options.knowledge !== false }
3446
3454
  );
3455
+ const hint = findHint(options.task, options.aiModel);
3447
3456
  if (isAgentMode()) {
3448
- json(result);
3457
+ json(hint ? { ...result, hint } : result);
3449
3458
  return;
3450
3459
  }
3451
3460
  spinner.stop("Found");
3452
3461
  console.log();
3453
3462
  console.log(renderFind(result));
3463
+ if (hint) console.log(`
3464
+ ${pc7.dim(hint)}`);
3454
3465
  console.log();
3455
3466
  } catch (error2) {
3456
3467
  spinner.stop("Find failed");
@@ -10804,7 +10815,7 @@ Find the actions a task needs with their docs, in one call, then execute them. T
10804
10815
  \`\`\`bash
10805
10816
  one --agent connection list # See connected platforms + your access on each
10806
10817
  one --agent connection delete <connection-key> # Remove a connection
10807
- one --agent actions find <platform> "<intent>" [<platform> "<intent>" ...] --task "<the job, in general terms>" # Find every action, with its docs (READ them)
10818
+ one --agent actions find <platform> "<intent>" [<platform> "<intent>" ...] --task "<the job, in general terms>" --ai-model "<your model>" # Find every action, with its docs (READ them)
10808
10819
  one --agent actions load <actionId> --section "<name>" # More of a doc: a section it left out, --full, --toc
10809
10820
  one --agent actions execute <platform> <actionId> <key> -d '{}' # Execute it
10810
10821
  \`\`\`
@@ -10930,15 +10941,16 @@ Removes a connection by its key. In agent mode, returns \`{"deleted": true, "pla
10930
10941
  ### 2. Find Actions
10931
10942
 
10932
10943
  \`\`\`bash
10933
- one --agent actions find <platform> "<intent>" [<platform> "<intent>" ...] --task "<the job, in general terms>"
10944
+ one --agent actions find <platform> "<intent>" [<platform> "<intent>" ...] --task "<the job, in general terms>" --ai-model "<your model>"
10934
10945
  \`\`\`
10935
10946
 
10936
10947
  One call for the whole task: one platform and intent pair per operation, on any platforms (up to 10). One's decision model picks the action for each and returns it **with its documentation** \u2014 required fields, validation rules, request structure. **Read it before execute.**
10937
10948
 
10938
10949
  - **\`intent\` names the operation alone**, in a few words: \`"send a message to a channel"\`, not \`"post 'deploy done' in #eng"\`. IDs, names, and message text in the intent make the search miss.
10939
- - **\`--task\`** (optional) is the whole job in one line, **in general terms**: what it does, without names, addresses, IDs, or message text. It helps choose between similar actions.
10950
+ - **\`--task\`**: send it with every find. It is the whole job in one line, **in general terms**: what it does, without names, addresses, IDs, or message text. It helps tell similar actions apart.
10940
10951
  - **\`-t knowledge\`** searches the catalog for writing code and building flows and relays, which includes the platform's own (passthrough) endpoints; the default, \`-t execute\`, is the catalog for running actions now. Knowledge-only mode always uses \`knowledge\`.
10941
- - **\`--ai-model\`** (optional) names the model running the CLI (e.g. \`claude-sonnet-5\`); it is recorded with the find so the account's usage can report which model asked.
10952
+ - **\`--ai-model\`**: send it with every find. Your model name as you know it (e.g. \`claude-sonnet-5\`), recorded with the find; leave it out only if you do not know which model you are.
10953
+ - A find answer sent without either carries a **\`hint\`** naming what was missing: add it on your next find.
10942
10954
  - **\`--no-knowledge\`** (optional) lists the chosen actions without their documentation, when only the actionIds are needed. Load the documentation with \`actions load\` before executing.
10943
10955
 
10944
10956
  In \`--agent\` mode:
@@ -13246,7 +13258,7 @@ program.command("platforms").alias("p").description("List available platforms").
13246
13258
  await platformsCommand(options);
13247
13259
  });
13248
13260
  var actions = program.command("actions").alias("a").description("Find, read, and execute platform actions (workflow: find \u2192 execute)");
13249
- actions.command("find <pairs...>").alias("f").description('Find the action for every operation a task needs, across platforms, with its documentation, in one call: one actions find <platform> "<intent>" [<platform> "<intent>" ...] (up to 10 pairs). Each intent names the operation alone ("send an email"), without its data. Large documents come back as a digest; each names the exact `actions load` command for what it left out').option("--task <task>", 'The whole task in one line, in general terms (e.g. "email a report to a contact"): what it does, without names, addresses, IDs or message text. Helps choose between similar actions').option("-t, --type <type>", "execute (default: actions to run now) or knowledge (the catalog for writing code and building flows and relays, with the platform's own endpoints). Knowledge-only mode always uses knowledge").option("--ai-model <model>", "The AI model you are running as (e.g. claude-sonnet-5), recorded with this find so the account's usage can report which model asked. Optional").option("--no-cache", "Bypass the cache for action documentation and re-fetch it (the fresh response still refreshes the cache)").option("--no-knowledge", "List the chosen actions (actionId, title, method, path) without their documentation; load it with `one actions load <actionId>`").action(async (pairs, options) => {
13261
+ actions.command("find <pairs...>").alias("f").description('Find the action for every operation a task needs, across platforms, with its documentation, in one call: one actions find <platform> "<intent>" [<platform> "<intent>" ...] (up to 10 pairs). Each intent names the operation alone ("send an email"), without its data. Large documents come back as a digest; each names the exact `actions load` command for what it left out').option("--task <task>", 'The whole task in one line, in general terms (e.g. "email a report to a contact"): what it does, without names, addresses, IDs or message text. Send it with every find: it helps tell similar actions apart').option("-t, --type <type>", "execute (default: actions to run now) or knowledge (the catalog for writing code and building flows and relays, with the platform's own endpoints). Knowledge-only mode always uses knowledge").option("--ai-model <model>", "Your model name as you know it (e.g. claude-sonnet-5), recorded with this find. Send it with every find; leave it out only if you do not know which model you are").option("--no-cache", "Bypass the cache for action documentation and re-fetch it (the fresh response still refreshes the cache)").option("--no-knowledge", "List the chosen actions (actionId, title, method, path) without their documentation; load it with `one actions load <actionId>`").action(async (pairs, options) => {
13250
13262
  await actionsFindCommand(pairs, options);
13251
13263
  });
13252
13264
  actions.command("load <actionIds...>").alias("l").description("More of an action's documentation (up to 10 actions): the digest by default, --section for one a digest left out, --full for the whole document, --toc for its contents. Also how to read an alternative from a find answer").option("--section <name>", 'Return only the named section(s) \u2014 by heading, id, or alias (e.g. "Response Fields", response, optional). Repeatable or comma-separated', collect, []).option("--full", "Return the whole document instead of the digest").option("--toc", "List every section (id, heading, size) without the document").option("--no-cache", "Bypass the cache and re-fetch from the API (the fresh response still refreshes the cache)").option("--cache-status", "Print cache metadata without fetching").action(async (actionIds, options) => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@withone/cli",
3
- "version": "2.7.0",
3
+ "version": "2.8.0",
4
4
  "description": "CLI for managing One",
5
5
  "type": "module",
6
6
  "files": [
@@ -76,15 +76,16 @@ Removes a connection. Returns `{"deleted": true, "platform": "...", "key": "..."
76
76
  ### 2. Find every action the task needs, with its docs (READ them before executing)
77
77
 
78
78
  ```bash
79
- one --agent actions find <platform> "<intent>" [<platform> "<intent>" ...] --task "<the job, in general terms>"
79
+ one --agent actions find <platform> "<intent>" [<platform> "<intent>" ...] --task "<the job, in general terms>" --ai-model "<your model>"
80
80
  ```
81
81
 
82
82
  **One call for the whole task**: one platform and intent pair per operation, on any platforms (up to 10). One's decision model picks the action for each and returns it **with its documentation**: exactly what parameters are required, how to structure the request, and where each value goes. Never execute without reading it — without it you'll guess wrong on parameters.
83
83
 
84
84
  - **`intent` names the operation alone**, in a few words: `"send a message to a channel"`, not `"post 'deploy done' in #eng"`. IDs, names, and message text in the intent make the search miss.
85
- - **`--task`** (optional) is the whole job in one line, **in general terms**: `"email a weather report to a contact"`, without names, addresses, IDs, or message text. It helps choose between similar actions.
85
+ - **`--task`**: send it with every find. It is the whole job in one line, **in general terms**: `"email a weather report to a contact"`, without names, addresses, IDs, or message text. It helps tell similar actions apart.
86
86
  - **`-t knowledge`** searches the catalog for writing code and building flows and relays (it includes the platform's own passthrough endpoints); the default, `-t execute`, is the catalog for running actions now.
87
- - **`--ai-model`** (optional): the model you are running as (e.g. `claude-sonnet-5`), recorded with the find so the account's usage can report which model asked.
87
+ - **`--ai-model`**: send it with every find. Your model name as you know it (e.g. `claude-sonnet-5`), recorded with the find; leave it out only if you do not know which model you are.
88
+ - A find answer sent without either carries a **`hint`** naming what was missing: add it on your next find.
88
89
  - **`--no-knowledge`** (optional): list the chosen actions without their documentation, when you only need the actionIds. Load the documentation with `actions load` before executing.
89
90
  - Platform names are lowercase; multi-word names use dashes: `gmail`, `hubspot`, `ship-station`, `google-calendar`.
90
91