@withone/cli 1.43.6 → 1.43.8
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 +6 -4
- package/dist/{chunk-3ZJVO4GP.js → chunk-7ZILTQQO.js} +2 -2
- package/dist/{chunk-MRGKKO54.js → chunk-MNNKOQ6V.js} +1 -1
- package/dist/{chunk-C3ORS3RG.js → chunk-VQPV5XET.js} +2 -2
- package/dist/{chunk-IAFQVFCB.js → chunk-YBEVCY4D.js} +1 -1
- package/dist/{chunk-AU2ZEEMS.js → chunk-ZD5S4IWT.js} +9 -15
- package/dist/{embedding-O4XWBL6T.js → embedding-GZGDGIUA.js} +1 -1
- package/dist/index.js +21 -21
- package/dist/{migrate-BEARUBLO.js → migrate-J2ZRDEFB.js} +4 -4
- package/dist/{runtime-NVC7KAJZ.js → runtime-RVXAPQAZ.js} +2 -2
- package/dist/sql-V44IVBHX.js +11 -0
- package/package.json +2 -2
- package/skills/one/SKILL.md +14 -14
- package/skills/one/references/scoping.md +6 -2
- package/dist/sql-EGTWQIU5.js +0 -11
package/README.md
CHANGED
|
@@ -140,6 +140,8 @@ Supports Claude Code, Claude Desktop, Cursor, Windsurf, Codex, and Kiro.
|
|
|
140
140
|
|
|
141
141
|
When you run `one` in a project, it uses the project config if one exists and falls back to the global config otherwise. Use `one config path` to see which config is active and the full resolution order.
|
|
142
142
|
|
|
143
|
+
In a monorepo, the project root is the nearest ancestor with `.one/`, `.git`, or `package.json` — checked in that order. Run `mkdir .one` in a nested subproject to make it its own project root (so the config is keyed by the nested dir's slug instead of the monorepo's).
|
|
144
|
+
|
|
143
145
|
If you've already set up, `one init` shows your current status for the active scope and lets you update your key, install to more agents, or reconfigure.
|
|
144
146
|
|
|
145
147
|
| Flag | What it does |
|
|
@@ -154,11 +156,11 @@ Connect a new platform via OAuth.
|
|
|
154
156
|
|
|
155
157
|
```bash
|
|
156
158
|
one add shopify
|
|
157
|
-
one add
|
|
159
|
+
one add hubspot
|
|
158
160
|
one add gmail
|
|
159
161
|
```
|
|
160
162
|
|
|
161
|
-
Opens your browser, you authorize, done. The CLI polls until the connection is live. Platform names are
|
|
163
|
+
Opens your browser, you authorize, done. The CLI polls until the connection is live. Platform names are lowercase (with dashes for multi-word names) - run `one platforms` to see them all.
|
|
162
164
|
|
|
163
165
|
### `one list`
|
|
164
166
|
|
|
@@ -207,7 +209,7 @@ Search for API actions on a connected platform using natural language.
|
|
|
207
209
|
|
|
208
210
|
```bash
|
|
209
211
|
one actions search shopify "list products"
|
|
210
|
-
one actions search
|
|
212
|
+
one actions search hubspot "create contact" -t execute
|
|
211
213
|
one actions search gmail "send email"
|
|
212
214
|
```
|
|
213
215
|
|
|
@@ -232,7 +234,7 @@ Execute an API action on a connected platform.
|
|
|
232
234
|
one actions execute shopify <actionId> <connectionKey>
|
|
233
235
|
|
|
234
236
|
# POST with data
|
|
235
|
-
one actions execute
|
|
237
|
+
one actions execute hubspot <actionId> <connectionKey> \
|
|
236
238
|
-d '{"properties": {"email": "jane@example.com", "firstname": "Jane"}}'
|
|
237
239
|
|
|
238
240
|
# With path variables
|
|
@@ -3,10 +3,10 @@ import {
|
|
|
3
3
|
isAgentMode,
|
|
4
4
|
json,
|
|
5
5
|
requireMemoryInit
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-MNNKOQ6V.js";
|
|
7
7
|
import {
|
|
8
8
|
getBackend
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-YBEVCY4D.js";
|
|
10
10
|
|
|
11
11
|
// src/commands/mem/sql.ts
|
|
12
12
|
async function memSqlCommand(sql) {
|
|
@@ -6,11 +6,11 @@ import {
|
|
|
6
6
|
note,
|
|
7
7
|
okJson,
|
|
8
8
|
requireMemoryInit
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-MNNKOQ6V.js";
|
|
10
10
|
import {
|
|
11
11
|
getBackend,
|
|
12
12
|
upsertRecord
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-YBEVCY4D.js";
|
|
14
14
|
|
|
15
15
|
// src/commands/mem/migrate.ts
|
|
16
16
|
import fs4 from "fs";
|
|
@@ -15,7 +15,7 @@ function getProjectRoot(cwd = process.cwd()) {
|
|
|
15
15
|
let dir = path.resolve(cwd);
|
|
16
16
|
const root = path.parse(dir).root;
|
|
17
17
|
while (dir !== root) {
|
|
18
|
-
if (fs.existsSync(path.join(dir, ".git")) || fs.existsSync(path.join(dir, "package.json"))) {
|
|
18
|
+
if (fs.existsSync(path.join(dir, ".one")) || fs.existsSync(path.join(dir, ".git")) || fs.existsSync(path.join(dir, "package.json"))) {
|
|
19
19
|
return dir;
|
|
20
20
|
}
|
|
21
21
|
dir = path.dirname(dir);
|
|
@@ -23,7 +23,7 @@ function getProjectRoot(cwd = process.cwd()) {
|
|
|
23
23
|
return path.resolve(cwd);
|
|
24
24
|
}
|
|
25
25
|
function getProjectSlug(projectRoot = getProjectRoot()) {
|
|
26
|
-
return projectRoot.replace(/[
|
|
26
|
+
return projectRoot.replace(/[\\/<>:"|?*]/g, "-");
|
|
27
27
|
}
|
|
28
28
|
function getProjectConfigDir(projectRoot = getProjectRoot()) {
|
|
29
29
|
return path.join(projectsDir(), getProjectSlug(projectRoot));
|
|
@@ -35,19 +35,11 @@ function getGlobalConfigPath() {
|
|
|
35
35
|
return configFile();
|
|
36
36
|
}
|
|
37
37
|
function resolveConfig() {
|
|
38
|
-
const
|
|
39
|
-
const
|
|
40
|
-
const projectPath = getProjectConfigPath(projectRoot);
|
|
41
|
-
if (fs.existsSync(projectPath)) {
|
|
42
|
-
const config = readConfigFile(projectPath);
|
|
43
|
-
if (config) {
|
|
44
|
-
return { config, scope: "project", path: projectPath, projectRoot, projectSlug };
|
|
45
|
-
}
|
|
46
|
-
}
|
|
38
|
+
const detectedRoot = getProjectRoot();
|
|
39
|
+
const detectedSlug = getProjectSlug(detectedRoot);
|
|
47
40
|
const root = path.parse(process.cwd()).root;
|
|
48
41
|
let dir = path.resolve(process.cwd());
|
|
49
|
-
while (
|
|
50
|
-
dir = path.dirname(dir);
|
|
42
|
+
while (true) {
|
|
51
43
|
const slug = getProjectSlug(dir);
|
|
52
44
|
const configPath = path.join(projectsDir(), slug, "config.json");
|
|
53
45
|
if (fs.existsSync(configPath)) {
|
|
@@ -56,14 +48,16 @@ function resolveConfig() {
|
|
|
56
48
|
return { config, scope: "project", path: configPath, projectRoot: dir, projectSlug: slug };
|
|
57
49
|
}
|
|
58
50
|
}
|
|
51
|
+
if (dir === root) break;
|
|
52
|
+
dir = path.dirname(dir);
|
|
59
53
|
}
|
|
60
54
|
if (fs.existsSync(configFile())) {
|
|
61
55
|
const config = readConfigFile(configFile());
|
|
62
56
|
if (config) {
|
|
63
|
-
return { config, scope: "global", path: configFile(), projectRoot, projectSlug };
|
|
57
|
+
return { config, scope: "global", path: configFile(), projectRoot: detectedRoot, projectSlug: detectedSlug };
|
|
64
58
|
}
|
|
65
59
|
}
|
|
66
|
-
return { config: null, scope: null, path: configFile(), projectRoot, projectSlug };
|
|
60
|
+
return { config: null, scope: null, path: configFile(), projectRoot: detectedRoot, projectSlug: detectedSlug };
|
|
67
61
|
}
|
|
68
62
|
function readConfigFile(filePath) {
|
|
69
63
|
try {
|
package/dist/index.js
CHANGED
|
@@ -20,7 +20,7 @@ import {
|
|
|
20
20
|
} from "./chunk-YGOS6KEC.js";
|
|
21
21
|
import {
|
|
22
22
|
memSqlCommand
|
|
23
|
-
} from "./chunk-
|
|
23
|
+
} from "./chunk-7ZILTQQO.js";
|
|
24
24
|
import {
|
|
25
25
|
countRecords,
|
|
26
26
|
deleteDatabase,
|
|
@@ -45,7 +45,7 @@ import {
|
|
|
45
45
|
upsertRecords,
|
|
46
46
|
writeDraftProfile,
|
|
47
47
|
writeProfile
|
|
48
|
-
} from "./chunk-
|
|
48
|
+
} from "./chunk-VQPV5XET.js";
|
|
49
49
|
import {
|
|
50
50
|
getByDotPath
|
|
51
51
|
} from "./chunk-44CV5IMX.js";
|
|
@@ -68,7 +68,7 @@ import {
|
|
|
68
68
|
semanticSearchUpgradeHint,
|
|
69
69
|
semanticSearchUpgradeLine,
|
|
70
70
|
setAgentMode
|
|
71
|
-
} from "./chunk-
|
|
71
|
+
} from "./chunk-MNNKOQ6V.js";
|
|
72
72
|
import {
|
|
73
73
|
SCHEMA_VERSION,
|
|
74
74
|
addRecord,
|
|
@@ -78,7 +78,7 @@ import {
|
|
|
78
78
|
listBackendPlugins,
|
|
79
79
|
loadBackendFromConfig,
|
|
80
80
|
upsertRecord
|
|
81
|
-
} from "./chunk-
|
|
81
|
+
} from "./chunk-YBEVCY4D.js";
|
|
82
82
|
import {
|
|
83
83
|
DEFAULT_MEMORY_CONFIG,
|
|
84
84
|
configExists,
|
|
@@ -111,7 +111,7 @@ import {
|
|
|
111
111
|
updateMemoryConfig,
|
|
112
112
|
updateWhoAmI,
|
|
113
113
|
writeConfig
|
|
114
|
-
} from "./chunk-
|
|
114
|
+
} from "./chunk-ZD5S4IWT.js";
|
|
115
115
|
|
|
116
116
|
// src/cli.ts
|
|
117
117
|
import { createRequire as createRequire2 } from "module";
|
|
@@ -5694,7 +5694,7 @@ async function syncModel(api, profile, options) {
|
|
|
5694
5694
|
updateModelState(platform, model, { status: "failed", pagesProcessed, lastCursor }),
|
|
5695
5695
|
(async () => {
|
|
5696
5696
|
try {
|
|
5697
|
-
const { getBackend: getBackend2 } = await import("./runtime-
|
|
5697
|
+
const { getBackend: getBackend2 } = await import("./runtime-RVXAPQAZ.js");
|
|
5698
5698
|
const backend = await getBackend2();
|
|
5699
5699
|
await Promise.race([
|
|
5700
5700
|
backend.close(),
|
|
@@ -6049,7 +6049,7 @@ async function syncModel(api, profile, options) {
|
|
|
6049
6049
|
db.exec(`DROP TABLE IF EXISTS _seen_ids`);
|
|
6050
6050
|
}
|
|
6051
6051
|
if (options.toMemory !== false) {
|
|
6052
|
-
const backend = await (await import("./runtime-
|
|
6052
|
+
const backend = await (await import("./runtime-RVXAPQAZ.js")).getBackend();
|
|
6053
6053
|
const type = `${platform}/${model}`;
|
|
6054
6054
|
const existing = await backend.listKeysByType(type);
|
|
6055
6055
|
const sourcePrefix = `${type}:`;
|
|
@@ -6129,7 +6129,7 @@ async function syncModel(api, profile, options) {
|
|
|
6129
6129
|
let statusCounts;
|
|
6130
6130
|
if (options.toMemory !== false) {
|
|
6131
6131
|
try {
|
|
6132
|
-
const backend = await (await import("./runtime-
|
|
6132
|
+
const backend = await (await import("./runtime-RVXAPQAZ.js")).getBackend();
|
|
6133
6133
|
const typeName = `${platform}/${model}`;
|
|
6134
6134
|
const [active, archived] = await Promise.all([
|
|
6135
6135
|
backend.count(typeName, { status: "active" }),
|
|
@@ -7748,7 +7748,7 @@ ${result.total} results`);
|
|
|
7748
7748
|
}
|
|
7749
7749
|
}
|
|
7750
7750
|
async function syncSqlCommand(platformModel, sql) {
|
|
7751
|
-
const { syncSqlCommand: runSyncSql } = await import("./sql-
|
|
7751
|
+
const { syncSqlCommand: runSyncSql } = await import("./sql-V44IVBHX.js");
|
|
7752
7752
|
await runSyncSql(platformModel, sql);
|
|
7753
7753
|
}
|
|
7754
7754
|
async function syncDeleteCommand(platformModel, options) {
|
|
@@ -7826,7 +7826,7 @@ async function syncDeleteCommand(platformModel, options) {
|
|
|
7826
7826
|
async function maybeAutoMigrateLegacy(platform, models) {
|
|
7827
7827
|
const dbSize = getDatabaseSize(platform);
|
|
7828
7828
|
if (!dbSize || dbSize === "0 B") return;
|
|
7829
|
-
const { getBackend: getBackend2 } = await import("./runtime-
|
|
7829
|
+
const { getBackend: getBackend2 } = await import("./runtime-RVXAPQAZ.js");
|
|
7830
7830
|
const backend = await getBackend2();
|
|
7831
7831
|
let memoryHasData = false;
|
|
7832
7832
|
for (const model of models) {
|
|
@@ -7842,7 +7842,7 @@ async function maybeAutoMigrateLegacy(platform, models) {
|
|
|
7842
7842
|
` detected legacy .one/sync/data/${platform}.db (${dbSize}) \u2014 auto-migrating into memory before sync.
|
|
7843
7843
|
`
|
|
7844
7844
|
);
|
|
7845
|
-
const { memMigrateCommand: memMigrateCommand3 } = await import("./migrate-
|
|
7845
|
+
const { memMigrateCommand: memMigrateCommand3 } = await import("./migrate-J2ZRDEFB.js");
|
|
7846
7846
|
await memMigrateCommand3({ platform, yes: true });
|
|
7847
7847
|
return;
|
|
7848
7848
|
}
|
|
@@ -7851,7 +7851,7 @@ async function maybeAutoMigrateLegacy(platform, models) {
|
|
|
7851
7851
|
initialValue: true
|
|
7852
7852
|
});
|
|
7853
7853
|
if (p7.isCancel(shouldMigrate) || !shouldMigrate) return;
|
|
7854
|
-
const { memMigrateCommand: memMigrateCommand2 } = await import("./migrate-
|
|
7854
|
+
const { memMigrateCommand: memMigrateCommand2 } = await import("./migrate-J2ZRDEFB.js");
|
|
7855
7855
|
await memMigrateCommand2({ platform, yes: true });
|
|
7856
7856
|
}
|
|
7857
7857
|
async function syncSuggestSearchableCommand(platformModel, options = {}) {
|
|
@@ -7912,7 +7912,7 @@ async function syncSuggestSearchableCommand(platformModel, options = {}) {
|
|
|
7912
7912
|
async function syncListCommand(platform) {
|
|
7913
7913
|
const profiles = listProfiles(platform);
|
|
7914
7914
|
const state = await readSyncState();
|
|
7915
|
-
const { getBackend: getBackend2 } = await import("./runtime-
|
|
7915
|
+
const { getBackend: getBackend2 } = await import("./runtime-RVXAPQAZ.js");
|
|
7916
7916
|
const backend = await getBackend2();
|
|
7917
7917
|
const syncs = await Promise.all(profiles.map(async (p10) => {
|
|
7918
7918
|
const modelState = state[p10.platform]?.[p10.model];
|
|
@@ -8830,7 +8830,7 @@ async function memDoctorCommand() {
|
|
|
8830
8830
|
}
|
|
8831
8831
|
if (cfg.embedding.provider === "openai") {
|
|
8832
8832
|
try {
|
|
8833
|
-
const { embed: embed2 } = await import("./embedding-
|
|
8833
|
+
const { embed: embed2 } = await import("./embedding-GZGDGIUA.js");
|
|
8834
8834
|
const result = await embed2("connectivity check");
|
|
8835
8835
|
checks.push({
|
|
8836
8836
|
name: "OpenAI embedding provider reachable",
|
|
@@ -9335,7 +9335,7 @@ Request specific sections:
|
|
|
9335
9335
|
## Important Notes
|
|
9336
9336
|
|
|
9337
9337
|
- **Always use \`--agent\` flag** for structured JSON output
|
|
9338
|
-
- Platform names are
|
|
9338
|
+
- Platform names are **lowercase**; multi-word names use dashes (e.g., \`hubspot\`, \`google-calendar\`)
|
|
9339
9339
|
- Always use the **exact action ID** from search results \u2014 don't guess
|
|
9340
9340
|
- Always read **knowledge** before executing any action
|
|
9341
9341
|
- Connection keys come from \`one connection list\` \u2014 don't hardcode them
|
|
@@ -9434,7 +9434,7 @@ All errors return JSON: \`{"error": "message"}\`. Check the \`error\` key.
|
|
|
9434
9434
|
|
|
9435
9435
|
## Notes
|
|
9436
9436
|
|
|
9437
|
-
- Platform names are **
|
|
9437
|
+
- Platform names are **lowercase**; multi-word names use dashes (e.g., \`hubspot\`, \`ship-station\`)
|
|
9438
9438
|
- JSON flags use single quotes around the JSON to avoid shell escaping
|
|
9439
9439
|
- If search returns no results, try broader queries
|
|
9440
9440
|
- Access control settings from \`one config\` may restrict execution
|
|
@@ -10201,7 +10201,7 @@ var PLATFORM_DEMO_ACTIONS = {
|
|
|
10201
10201
|
"google-calendar": { query: "list events", description: "Check today's schedule" },
|
|
10202
10202
|
slack: { query: "list channels", description: "List Slack channels" },
|
|
10203
10203
|
shopify: { query: "list orders", description: "List recent orders" },
|
|
10204
|
-
|
|
10204
|
+
hubspot: { query: "list contacts", description: "Search CRM contacts" },
|
|
10205
10205
|
github: { query: "list repositories", description: "List repos" },
|
|
10206
10206
|
notion: { query: "list pages", description: "List Notion pages" },
|
|
10207
10207
|
stripe: { query: "list payments", description: "List recent payments" },
|
|
@@ -10217,10 +10217,10 @@ var PLATFORM_DEMO_ACTIONS = {
|
|
|
10217
10217
|
var WORKFLOW_EXAMPLES = {
|
|
10218
10218
|
"gmail+google-calendar": "Check my calendar for today and draft a summary email",
|
|
10219
10219
|
"gmail+shopify": "Find unfulfilled orders and email each customer an update",
|
|
10220
|
-
"
|
|
10220
|
+
"hubspot+slack": "Find deals closing this week and post a summary to Slack",
|
|
10221
10221
|
"github+slack": "List open PRs and post a review reminder to #engineering",
|
|
10222
10222
|
"gmail+stripe": "Find failed payments this week and send retry reminder emails",
|
|
10223
|
-
"gmail+
|
|
10223
|
+
"gmail+hubspot": "Find new CRM contacts and send them a welcome email",
|
|
10224
10224
|
"notion+slack": "Summarize recent Notion updates and post to a Slack channel",
|
|
10225
10225
|
"github+jira": "Link recent commits to Jira issues and update their status",
|
|
10226
10226
|
"google-calendar+slack": "Post today's meeting schedule to a Slack channel",
|
|
@@ -10473,7 +10473,7 @@ function buildDemoActions(connections) {
|
|
|
10473
10473
|
lines.push("");
|
|
10474
10474
|
lines.push("Try these to prove it works:");
|
|
10475
10475
|
const connectedPlatforms = connections.map((c) => c.platform.toLowerCase());
|
|
10476
|
-
const popularPlatforms = ["gmail", "google-calendar", "slack", "shopify", "
|
|
10476
|
+
const popularPlatforms = ["gmail", "google-calendar", "slack", "shopify", "hubspot", "github"];
|
|
10477
10477
|
const platformsToShow = [
|
|
10478
10478
|
...connectedPlatforms.filter((p10) => PLATFORM_DEMO_ACTIONS[p10]),
|
|
10479
10479
|
...popularPlatforms.filter((p10) => !connectedPlatforms.includes(p10))
|
|
@@ -10706,7 +10706,7 @@ program.name("one").option("--agent", "Machine-readable JSON output (no colors,
|
|
|
10706
10706
|
$ one actions execute gmail conn_mod_def::xxx::yyy live::gmail::default::abc123 \\
|
|
10707
10707
|
-d '{"to":"j@example.com","subject":"Hello","body":"Hi!","connectionKey":"live::gmail::default::abc123"}'
|
|
10708
10708
|
|
|
10709
|
-
Platform names are
|
|
10709
|
+
Platform names are lowercase; multi-word names use dashes (e.g. hubspot, ship-station, google-calendar).
|
|
10710
10710
|
Run 'one platforms' to browse all 250+ available platforms.`).version(version);
|
|
10711
10711
|
var updateCheckPromise;
|
|
10712
10712
|
program.hook("preAction", (thisCommand) => {
|
|
@@ -3,11 +3,11 @@ import {
|
|
|
3
3
|
dotPathToJsonbExpr,
|
|
4
4
|
memMigrateCommand,
|
|
5
5
|
reviveStringifiedJson
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-VQPV5XET.js";
|
|
7
7
|
import "./chunk-44CV5IMX.js";
|
|
8
|
-
import "./chunk-
|
|
9
|
-
import "./chunk-
|
|
10
|
-
import "./chunk-
|
|
8
|
+
import "./chunk-MNNKOQ6V.js";
|
|
9
|
+
import "./chunk-YBEVCY4D.js";
|
|
10
|
+
import "./chunk-ZD5S4IWT.js";
|
|
11
11
|
export {
|
|
12
12
|
buildIdentityMap,
|
|
13
13
|
dotPathToJsonbExpr,
|
package/package.json
CHANGED
package/skills/one/SKILL.md
CHANGED
|
@@ -1,28 +1,28 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: one
|
|
3
3
|
description: |
|
|
4
|
-
Use the One CLI (`one`) to interact with
|
|
4
|
+
Use the One CLI (`one`) to interact with 3rd-party platforms — Gmail, Slack, Stripe, Notion, etc. through their APIs. One handles auth, request building, and execution.
|
|
5
5
|
|
|
6
|
-
TRIGGER when
|
|
7
|
-
- Interact with ANY
|
|
8
|
-
- List their connected platforms or check
|
|
9
|
-
- Search for
|
|
10
|
-
- Execute
|
|
6
|
+
TRIGGER when:
|
|
7
|
+
- Interact with ANY 3rd-party platform or external service (e.g., "send an email", "create a Shopify order", "find a HubSpot contact", "post to Slack")
|
|
8
|
+
- List their connected platforms or check available ones
|
|
9
|
+
- Search for available actions (e.g., "what can I do with Gmail")
|
|
10
|
+
- Execute API calls with a connected platform
|
|
11
11
|
- Set up webhook-driven automations between platforms (e.g., "when a Stripe payment comes in, notify Slack")
|
|
12
12
|
- Build multi-step workflows that chain actions across platforms (e.g., "fetch Stripe customers and email each one")
|
|
13
|
-
- Anything involving
|
|
13
|
+
- Anything involving 3rd-party APIs, integrations, or connected apps — even if they don't mention "One" by name
|
|
14
14
|
|
|
15
15
|
DO NOT TRIGGER for:
|
|
16
|
-
- Setting up One or installing MCP (
|
|
17
|
-
- Adding new connections (
|
|
18
|
-
- Configuring access control (
|
|
16
|
+
- Setting up One or installing MCP (use `one init`)
|
|
17
|
+
- Adding new connections (use `one add <platform>`)
|
|
18
|
+
- Configuring access control (use `one config`)
|
|
19
19
|
---
|
|
20
20
|
|
|
21
21
|
# One CLI
|
|
22
22
|
|
|
23
23
|
You have access to the One CLI which lets you interact with 250+ third-party platforms through their APIs. Always include the `--agent` flag right after `one` for structured JSON output.
|
|
24
24
|
|
|
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`.
|
|
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
|
|
|
27
27
|
## Authentication
|
|
28
28
|
|
|
@@ -59,7 +59,7 @@ Removes a connection. Returns `{"deleted": true, "platform": "...", "key": "..."
|
|
|
59
59
|
one --agent actions search <platform> "<query>" -t execute
|
|
60
60
|
```
|
|
61
61
|
|
|
62
|
-
- Platform names are
|
|
62
|
+
- Platform names are lowercase; multi-word names use dashes: `gmail`, `hubspot`, `ship-station`, `google-calendar`
|
|
63
63
|
- Use `-t execute` when performing actions, `-t knowledge` when researching or writing code
|
|
64
64
|
- If no results, broaden the query (e.g., `"list"` instead of `"list active premium customers"`)
|
|
65
65
|
|
|
@@ -97,7 +97,7 @@ Examples:
|
|
|
97
97
|
one --agent actions execute shopify <actionId> <connectionKey>
|
|
98
98
|
|
|
99
99
|
# POST with body data
|
|
100
|
-
one --agent actions execute
|
|
100
|
+
one --agent actions execute hubspot <actionId> <connectionKey> \
|
|
101
101
|
-d '{"properties": {"email": "jane@example.com", "firstname": "Jane"}}'
|
|
102
102
|
|
|
103
103
|
# Path variables + query params
|
|
@@ -130,7 +130,7 @@ All errors return JSON: `{"error": "message"}`. Parse output as JSON and check f
|
|
|
130
130
|
## Important Rules
|
|
131
131
|
|
|
132
132
|
- Always use `--agent` flag for structured JSON output
|
|
133
|
-
- Platform names are
|
|
133
|
+
- Platform names are lowercase; multi-word names use dashes (`hubspot` not `HubSpot`, `google-calendar` not `googleCalendar`)
|
|
134
134
|
- Always use the exact action ID from search results — never guess or construct them
|
|
135
135
|
- Always read knowledge before executing — it has required params, validation rules, and caveats
|
|
136
136
|
- JSON values passed to `-d`, `--path-vars`, `--query-params` must be valid JSON (use single quotes around JSON to avoid shell escaping)
|
|
@@ -3,9 +3,11 @@
|
|
|
3
3
|
The One CLI can be configured at two scopes:
|
|
4
4
|
|
|
5
5
|
- **Global** — `~/.one/config.json`. Applies everywhere the user runs `one`.
|
|
6
|
-
- **Project** — `~/.one/projects/<slug>/config.json`, where `<slug>` is the project root path with
|
|
6
|
+
- **Project** — `~/.one/projects/<slug>/config.json`, where `<slug>` is the project root path with path separators (and any character Windows forbids in a path component) replaced by dashes (e.g. `/Users/jane/acme` → `-Users-jane-acme`; on Windows, `C:\Users\jane\acme` → `C--Users-jane-acme`). Only applies when running `one` from inside that project folder.
|
|
7
7
|
|
|
8
|
-
**
|
|
8
|
+
**Detecting the project root.** The CLI walks up from cwd looking for `.one`, `.git`, or `package.json` and treats the nearest hit as the project root — `.one` is checked first so a monorepo subproject can opt into being its own root with `mkdir .one`. Without a `.one` opt-in, every cwd under a parent `.git`/`package.json` shares one project config keyed by that parent.
|
|
9
|
+
|
|
10
|
+
**Resolution order:** env vars → `.onerc` in cwd → project config → global config. The project lookup walks from cwd up — the nearest ancestor that has a config under `~/.one/projects/<slug>/config.json` wins, so cwd's own slug is checked before any parent's.
|
|
9
11
|
|
|
10
12
|
## When to suggest project scope
|
|
11
13
|
|
|
@@ -26,6 +28,8 @@ one init
|
|
|
26
28
|
|
|
27
29
|
When `init` asks "Where should this setup live?", pick **"This project only"**. Init will write the config to `~/.one/projects/<slug>/config.json` and everything else (skill install, MCP) stays untouched.
|
|
28
30
|
|
|
31
|
+
**Monorepo / nested project.** If the target dir is *inside* another repo (i.e. a parent already has `.git` or `package.json`), the slug used by `init` would otherwise resolve to that parent. To scope a config to the nested dir specifically, run `mkdir .one` in that dir before `one init` — the empty `.one/` directory marks it as its own project root, and the config will be keyed by the nested dir's slug.
|
|
32
|
+
|
|
29
33
|
To see which config is currently active and the full fallback chain:
|
|
30
34
|
|
|
31
35
|
```bash
|
package/dist/sql-EGTWQIU5.js
DELETED