@withone/cli 2.8.1 → 2.9.1

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
@@ -24,7 +24,7 @@
24
24
  <a href="https://withone.ai/knowledge"><img src="https://img.shields.io/endpoint?url=https%3A%2F%2Fapi.withone.ai%2Fopen%2Fcount%2Ftools" alt="tools"></a>
25
25
  </p>
26
26
 
27
- One gives your AI agent authenticated access to 750+ platforms - Gmail, Slack, Shopify, HubSpot, Stripe, Notion, and everything else - through a single interface. No API keys to juggle, no OAuth flows to build, no request formats to memorize. Connect a platform once, and your agent can search for actions, read the docs, and execute API calls in seconds.
27
+ One gives your AI agent authenticated access to 1000+ platforms - Gmail, Slack, Shopify, HubSpot, Stripe, Notion, and everything else - through a single interface. No API keys to juggle, no OAuth flows to build, no request formats to memorize. Connect a platform once, and your agent can search for actions, read the docs, and execute API calls in seconds.
28
28
 
29
29
  ## Install
30
30
 
@@ -247,7 +247,7 @@ Shows the connection details and asks for confirmation before deleting. Use `--f
247
247
 
248
248
  ### `one platforms`
249
249
 
250
- Browse all 750+ available platforms.
250
+ Browse all 1000+ available platforms.
251
251
 
252
252
  ```bash
253
253
  one platforms # all platforms
@@ -274,6 +274,8 @@ one actions find shopify "list products" -t knowledge
274
274
 
275
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.
276
276
 
277
+ A platform name no active platform has (`clickup` for `click-up`) is answered with `selector: "unknown_platform"` and a `suggestions` list of the platforms it may have meant, closest first, instead of being searched. Find again with the right name; `one platforms` lists them all.
278
+
277
279
  Large documents come back as a **digest**: request-building sections in full (method/URL, headers, description, enforcement rules, required and optional parameters, sample request, gotchas, error handling), then a notice naming what was left out with the exact command to load it. In knowledge-only mode each pick comes back whole, with how to call it from code.
278
280
 
279
281
  ### `one actions load <actionId...>`
package/dist/index.js CHANGED
@@ -1127,7 +1127,7 @@ async function loginCommand() {
1127
1127
  console.log(pc16.cyan(" \u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500"));
1128
1128
  console.log(pc16.cyan(" \u2502"));
1129
1129
  console.log(pc16.cyan(" \u2502 The One CLI (`one`) is now installed on this machine. It"));
1130
- console.log(pc16.cyan(" \u2502 lets you interact with 750+ third-party platforms (Gmail,"));
1130
+ console.log(pc16.cyan(" \u2502 lets you interact with 1000+ third-party platforms (Gmail,"));
1131
1131
  console.log(pc16.cyan(" \u2502 Slack, Shopify, HubSpot, Stripe, GitHub, etc.) through"));
1132
1132
  console.log(pc16.cyan(" \u2502 their APIs. Whenever you need to interact with any"));
1133
1133
  console.log(pc16.cyan(" \u2502 third-party platform or external service, use the `one`"));
@@ -1730,7 +1730,7 @@ function printOnboardingPrompt() {
1730
1730
  console.log(pc3.cyan(" \u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500"));
1731
1731
  console.log(pc3.cyan(" \u2502"));
1732
1732
  console.log(pc3.cyan(" \u2502 The One CLI (`one`) is now installed on this machine. It"));
1733
- console.log(pc3.cyan(" \u2502 lets you interact with 750+ third-party platforms (Gmail,"));
1733
+ console.log(pc3.cyan(" \u2502 lets you interact with 1000+ third-party platforms (Gmail,"));
1734
1734
  console.log(pc3.cyan(" \u2502 Slack, Shopify, HubSpot, Stripe, GitHub, etc.) through"));
1735
1735
  console.log(pc3.cyan(" \u2502 their APIs. Whenever you need to interact with any"));
1736
1736
  console.log(pc3.cyan(" \u2502 third-party platform or external service, use the `one`"));
@@ -1904,7 +1904,7 @@ async function promptConnectIntegrations(apiKey, connParams) {
1904
1904
  label: i.label,
1905
1905
  hint: i.hint
1906
1906
  })),
1907
- { value: "more", label: "Browse all 750+ platforms" },
1907
+ { value: "more", label: "Browse all 1000+ platforms" },
1908
1908
  { value: "skip", label: "Skip for now", hint: "you can always run one add later" }
1909
1909
  ];
1910
1910
  const message = first ? "Connect your first integration?" : "Connect another?";
@@ -3066,6 +3066,11 @@ function status(answer, narrowed) {
3066
3066
  if (narrowed.replaced) {
3067
3067
  return "The chosen action is not allowed by this CLI, so this is the next allowed candidate: check it fits before using it.";
3068
3068
  }
3069
+ if (answer.selector === "unknown_platform") {
3070
+ const opening = `No active platform is named \`${answer.platform}\`.`;
3071
+ const suggestions = answer.suggestions ?? [];
3072
+ return suggestions.length === 0 ? `${opening} Check the platform name: \`one platforms\` lists them all.` : `${opening} Did you mean ${suggestions.map((s) => `\`${s}\``).join(", ")}? Find again with the platform you meant.`;
3073
+ }
3069
3074
  if (answer.selector === "none_fit" || answer.selected.length === 0) {
3070
3075
  return answer.alternatives.length === 0 ? "No action fits this intent, and nothing close was found. Rephrase it, or check the platform name." : "No action fits this intent. Rephrase it more specifically, or load one of the alternatives.";
3071
3076
  }
@@ -3190,7 +3195,8 @@ async function find(requests, task, deps, settings, { knowledgeCatalog = false,
3190
3195
  selected,
3191
3196
  alsoSelected: [...deferred, ...plan.deferred.map(ref)],
3192
3197
  ...answer.runnerUp ? { runnerUp: ref(answer.runnerUp) } : {},
3193
- alternatives: answer.alternatives.map(ref)
3198
+ alternatives: answer.alternatives.map(ref),
3199
+ ...answer.suggestions?.length ? { suggestions: answer.suggestions } : {}
3194
3200
  };
3195
3201
  });
3196
3202
  plans.forEach((plan, index) => {
@@ -10819,7 +10825,7 @@ Before using any feature, read its guide section first: \`one guide actions\`, \
10819
10825
 
10820
10826
  ## Features
10821
10827
 
10822
- ### 1. Actions \u2014 Execute API calls on 750+ platforms
10828
+ ### 1. Actions \u2014 Execute API calls on 1000+ platforms
10823
10829
  Find the actions a task needs with their docs, in one call, then execute them. This is the core workflow.
10824
10830
 
10825
10831
  **Quick start:**
@@ -10992,7 +10998,8 @@ In \`--agent\` mode:
10992
10998
  - **\`alsoSelected\`** \u2014 also needed, listed rather than documented to keep the answer small: \`actions load\` them.
10993
10999
  - **\`runnerUp\`** \u2014 only when the model was unsure: a **substitute** for the pick. Use one or the other, **never both**.
10994
11000
  - **\`alternatives\`** \u2014 other candidates, undocumented.
10995
- - **\`status\`** \u2014 why: a confidence, *no action fits* (rephrase the intent by outcome, or check the platform), *the decision model was unavailable* (top search result: check it fits), *not allowed by this CLI* (the next allowed candidate stood in), or *allow none of them* (your access settings block the operation \u2014 rephrasing won't help).
11001
+ - **\`suggestions\`** \u2014 only when \`selector\` is \`unknown_platform\`: no active platform has the name you sent, so nothing was answered. These are the platforms you may have meant, closest first (\`clickup\` \u2192 \`click-up\`). Find again with the right one; \`one platforms\` lists every name.
11002
+ - **\`status\`** \u2014 why: a confidence, *no active platform is named* (use a \`suggestions\` entry, or check \`one platforms\`), *no action fits* (rephrase the intent by outcome, or check the platform), *the decision model was unavailable* (top search result: check it fits), *not allowed by this CLI* (the next allowed candidate stood in), or *allow none of them* (your access settings block the operation \u2014 rephrasing won't help).
10996
11003
  - **\`guide\`** \u2014 how to execute, stated once for every action.
10997
11004
  - \`truncated: false\` means \`knowledge\` is the whole document; small docs are never trimmed.
10998
11005
 
@@ -12085,7 +12092,7 @@ function buildStep1() {
12085
12092
  nextCommand: "one onboard --step 2",
12086
12093
  message: `# One CLI \u2014 Agent Onboarding
12087
12094
 
12088
- You now have access to the One CLI. It connects you to 750+ platforms
12095
+ You now have access to the One CLI. It connects you to 1000+ platforms
12089
12096
  (Gmail, Slack, Stripe, Notion, etc.) \u2014 you'll learn the details shortly.
12090
12097
 
12091
12098
  IMPORTANT: Your only task right now is to send the message below to the
@@ -12095,7 +12102,7 @@ Do not offer demos yet. Just send this message and wait for their reply:
12095
12102
  ---
12096
12103
 
12097
12104
  I just got access to the One CLI \u2014 it connects me to your platforms like
12098
- Gmail, Slack, Stripe, and 750+ others so I can work with them directly.
12105
+ Gmail, Slack, Stripe, and 1000+ others so I can work with them directly.
12099
12106
  I'll show you what I can do in a moment.
12100
12107
 
12101
12108
  First, one quick setup step: right now only this conversation knows about
@@ -12124,7 +12131,7 @@ If they declined, skip this section.
12124
12131
  ## One CLI \u2014 Platform Integrations
12125
12132
 
12126
12133
  The One CLI (\`one\`) is installed and configured on this machine. It is a
12127
- command-line tool that gives AI agents the ability to interact with 750+
12134
+ command-line tool that gives AI agents the ability to interact with 1000+
12128
12135
  third-party platforms (Gmail, Slack, Shopify, HubSpot, Stripe, GitHub,
12129
12136
  Notion, Salesforce, etc.) through a single, unified interface.
12130
12137
 
@@ -12218,7 +12225,7 @@ function buildStep3(connections) {
12218
12225
  The user can connect any of these popular platforms:
12219
12226
  Gmail, Google Calendar, Slack, Notion, Shopify, Stripe, HubSpot, GitHub,
12220
12227
  Salesforce, QuickBooks, Asana, Jira, Linear, Intercom, Zendesk, Twilio,
12221
- and 750+ more. Run \`one platforms\` for the full list.`);
12228
+ and 1000+ more. Run \`one platforms\` for the full list.`);
12222
12229
  sections.push("## Onboarding complete!\n\nYou're all set. Use `one --agent guide` any time you need the full reference.");
12223
12230
  return {
12224
12231
  step: 3,
@@ -12249,7 +12256,7 @@ platform before you can start using actions. Suggest they run:
12249
12256
  one add slack
12250
12257
  one add <any-platform>
12251
12258
 
12252
- Run \`one platforms\` to see all 750+ available platforms.`;
12259
+ Run \`one platforms\` to see all 1000+ available platforms.`;
12253
12260
  }
12254
12261
  const header = `## Current State
12255
12262
 
@@ -12965,7 +12972,7 @@ silenceWarningsInAgentMode();
12965
12972
  var require2 = createRequire(import.meta.url);
12966
12973
  var { version } = require2("../package.json");
12967
12974
  var program = new Command();
12968
- program.name("one").option("--agent", "Machine-readable JSON output (no colors, spinners, or prompts)").description(`One CLI \u2014 Connect AI agents to 750+ platforms through one interface.
12975
+ program.name("one").option("--agent", "Machine-readable JSON output (no colors, spinners, or prompts)").description(`One CLI \u2014 Connect AI agents to 1000+ platforms through one interface.
12969
12976
 
12970
12977
  Setup:
12971
12978
  one login Authenticate via browser; the consent page records where this CLI is installed
@@ -13041,7 +13048,7 @@ program.name("one").option("--agent", "Machine-readable JSON output (no colors,
13041
13048
  -d '{"to":"j@example.com","subject":"Hello","body":"Hi!","connectionKey":"live::gmail::default::abc123"}'
13042
13049
 
13043
13050
  Platform names are lowercase; multi-word names use dashes (e.g. hubspot, ship-station, google-calendar).
13044
- Run 'one platforms' to browse all 750+ available platforms.`).version(version);
13051
+ Run 'one platforms' to browse all 1000+ available platforms.`).version(version);
13045
13052
  var updateCheckPromise;
13046
13053
  program.hook("preAction", (thisCommand, actionCommand) => {
13047
13054
  const opts = program.opts();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@withone/cli",
3
- "version": "2.8.1",
3
+ "version": "2.9.1",
4
4
  "description": "CLI for managing One",
5
5
  "type": "module",
6
6
  "files": [
@@ -20,7 +20,7 @@ description: |
20
20
 
21
21
  # One CLI
22
22
 
23
- You have access to the One CLI which lets you interact with 750+ third-party platforms through their APIs. Always include the `--agent` flag right after `one` for structured JSON output.
23
+ You have access to the One CLI which lets you interact with 1000+ third-party platforms through their APIs. Always include the `--agent` flag right after `one` for structured JSON output.
24
24
 
25
25
  If the user wants a separate API key / connections for a specific project (vs. their default), walk them through running `one init` from that project folder and picking the "project" scope — see `references/scoping.md`. For monorepo subprojects (where a parent already has `.git`/`package.json`), have them `mkdir .one` in the subproject first so the config is keyed to that dir, not the monorepo root.
26
26
 
@@ -95,7 +95,8 @@ Each entry of `answers[]` carries:
95
95
  - `alsoSelected[]` — also needed, listed rather than documented to keep the answer small: `actions load` them.
96
96
  - `runnerUp` — only when the model was unsure: a **substitute** for the pick. Use **one or the other, never both**.
97
97
  - `alternatives[]` — other candidates, undocumented.
98
- - `status` — why: a confidence; *no action fits* (rephrase the intent by outcome, or check the platform); *the decision model was unavailable* (the top search result — check it fits); *not allowed by this CLI* (the next allowed candidate stood in); or *allow none of them* (the access settings block the operation — tell the user, rephrasing won't help).
98
+ - `suggestions[]` — only when `selector` is `unknown_platform`: no active platform has the name you sent, so nothing was answered. These are the platforms you may have meant, closest first (`clickup` → `click-up`). Find again with the right one; `one platforms` lists every name.
99
+ - `status` — why: a confidence; *no active platform is named* (use a `suggestions` entry, or check `one platforms`); *no action fits* (rephrase the intent by outcome, or check the platform); *the decision model was unavailable* (the top search result — check it fits); *not allowed by this CLI* (the next allowed candidate stood in); or *allow none of them* (the access settings block the operation — tell the user, rephrasing won't help).
99
100
 
100
101
  `guide` (once, at the end) says how to execute any of them.
101
102