ethos-cli 0.1.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 (55) hide show
  1. package/README.md +121 -0
  2. package/dist/bin/ethos.d.ts +4 -0
  3. package/dist/bin/ethos.js +45 -0
  4. package/dist/bin/ethos.js.map +1 -0
  5. package/dist/commands/agents.d.ts +2 -0
  6. package/dist/commands/agents.js +162 -0
  7. package/dist/commands/agents.js.map +1 -0
  8. package/dist/commands/auth.d.ts +2 -0
  9. package/dist/commands/auth.js +180 -0
  10. package/dist/commands/auth.js.map +1 -0
  11. package/dist/commands/skills.d.ts +2 -0
  12. package/dist/commands/skills.js +90 -0
  13. package/dist/commands/skills.js.map +1 -0
  14. package/dist/commands/tables.d.ts +17 -0
  15. package/dist/commands/tables.js +534 -0
  16. package/dist/commands/tables.js.map +1 -0
  17. package/dist/lib/auth-store.d.ts +13 -0
  18. package/dist/lib/auth-store.js +47 -0
  19. package/dist/lib/auth-store.js.map +1 -0
  20. package/dist/lib/client.d.ts +19 -0
  21. package/dist/lib/client.js +69 -0
  22. package/dist/lib/client.js.map +1 -0
  23. package/dist/lib/command-helpers.d.ts +8 -0
  24. package/dist/lib/command-helpers.js +24 -0
  25. package/dist/lib/command-helpers.js.map +1 -0
  26. package/dist/lib/config.d.ts +12 -0
  27. package/dist/lib/config.js +38 -0
  28. package/dist/lib/config.js.map +1 -0
  29. package/dist/lib/output.d.ts +7 -0
  30. package/dist/lib/output.js +23 -0
  31. package/dist/lib/output.js.map +1 -0
  32. package/dist/lib/table-types.d.ts +138 -0
  33. package/dist/lib/table-types.js +2 -0
  34. package/dist/lib/table-types.js.map +1 -0
  35. package/dist/scripts/install-skills.d.ts +1 -0
  36. package/dist/scripts/install-skills.js +44 -0
  37. package/dist/scripts/install-skills.js.map +1 -0
  38. package/dist/skills-installer/agents.d.ts +9 -0
  39. package/dist/skills-installer/agents.js +31 -0
  40. package/dist/skills-installer/agents.js.map +1 -0
  41. package/dist/skills-installer/index.d.ts +4 -0
  42. package/dist/skills-installer/index.js +5 -0
  43. package/dist/skills-installer/index.js.map +1 -0
  44. package/dist/skills-installer/install.d.ts +15 -0
  45. package/dist/skills-installer/install.js +82 -0
  46. package/dist/skills-installer/install.js.map +1 -0
  47. package/dist/skills-installer/lockfile.d.ts +17 -0
  48. package/dist/skills-installer/lockfile.js +23 -0
  49. package/dist/skills-installer/lockfile.js.map +1 -0
  50. package/dist/skills-installer/skill.d.ts +9 -0
  51. package/dist/skills-installer/skill.js +70 -0
  52. package/dist/skills-installer/skill.js.map +1 -0
  53. package/package.json +48 -0
  54. package/postinstall.cjs +23 -0
  55. package/skills/find-people-at-companies.md +111 -0
@@ -0,0 +1,17 @@
1
+ import { Command } from "commander";
2
+ import type { EthosClient } from "../lib/client.js";
3
+ import type { TableOutputField } from "../lib/table-types.js";
4
+ type ColumnOptions = {
5
+ name?: string;
6
+ agentId?: string;
7
+ prompt?: string;
8
+ outputField?: string[];
9
+ outputFieldsJson?: string;
10
+ inputColumn?: string[];
11
+ inputColumns?: string;
12
+ };
13
+ export declare function registerTables(program: Command): void;
14
+ export declare function parseOutputFields(options: ColumnOptions): TableOutputField[] | undefined;
15
+ export declare function parseInputColumnIds(options: ColumnOptions): string[] | undefined;
16
+ export declare function resolveRowIds(client: EthosClient, tableId: string, rowIdOrIndexes: string[], byIndex: boolean): Promise<string[]>;
17
+ export {};
@@ -0,0 +1,534 @@
1
+ import { collect, compactObject, jsonRequest, pathId, withClient } from "../lib/command-helpers.js";
2
+ import { printResult } from "../lib/output.js";
3
+ const allowedScopes = new Set(["first_5", "all", "empty", "count"]);
4
+ const entityTypes = new Set(["company", "people"]);
5
+ const filterOperators = new Set([
6
+ "is_empty",
7
+ "is_not_empty",
8
+ "equals",
9
+ "not_equals",
10
+ "contains",
11
+ "not_contains",
12
+ ]);
13
+ const compatibilityHelp = `
14
+
15
+ Agent/table compatibility:
16
+ Company tables can run company_enrichment agent columns or source people with people_sourcing agents.
17
+ People tables can run person_enrichment agent columns.
18
+ The CLI does not pre-block incompatible requests; backend validation is the source of truth.`;
19
+ export function registerTables(program) {
20
+ const tables = program
21
+ .command("tables")
22
+ .alias("table")
23
+ .description("Inspect and mutate Ethos table objects")
24
+ .addHelpText("after", compatibilityHelp);
25
+ const listCommand = tables.command("list").description("List tables");
26
+ listCommand.action(async () => {
27
+ await withClient(listCommand, async (client, config) => {
28
+ printResult(config, await client.request("/v1/tables"));
29
+ });
30
+ });
31
+ const getCommand = tables.command("get <table-id>").description("Fetch a table, including columns, rows, and cells");
32
+ getCommand.action(async (tableId) => {
33
+ await withClient(getCommand, async (client, config) => {
34
+ const detail = await client.request(`/v1/tables/${pathId(tableId)}`);
35
+ printResult(config, tableDetailCommandResult(detail, "Table"));
36
+ });
37
+ });
38
+ const importCsvCommand = tables
39
+ .command("import-csv <path>")
40
+ .description("Create a company or people table from a CSV file")
41
+ .option("--entity-type <type>", "company or people");
42
+ importCsvCommand.action(async (path) => {
43
+ await withClient(importCsvCommand, async (client, config) => {
44
+ const options = importCsvCommand.opts();
45
+ const detail = await client.uploadCsv(path, compactObject({ entity_type: parseEntityType(options.entityType) }));
46
+ printResult(config, tableDetailCommandResult(detail, "Imported table"));
47
+ });
48
+ });
49
+ const deleteCommand = tables
50
+ .command("delete <table-id>")
51
+ .description("Delete a table and all of its rows, columns, cells, and runs");
52
+ deleteCommand.action(async (tableId) => {
53
+ await withClient(deleteCommand, async (client, config) => {
54
+ printResult(config, await client.request(`/v1/tables/${pathId(tableId)}`, { method: "DELETE" }));
55
+ });
56
+ });
57
+ registerColumnCommands(tables);
58
+ registerViewCommands(tables);
59
+ registerRowCommands(tables);
60
+ registerAgentEditCommands(tables);
61
+ registerCellCommands(tables);
62
+ registerRunCommands(tables);
63
+ registerSourcePeopleCommand(tables);
64
+ }
65
+ function registerColumnCommands(tables) {
66
+ const columns = tables.command("columns").alias("column").description("Manage table columns");
67
+ const createAgentColumnCommand = columns
68
+ .command("create-agent <table-id>")
69
+ .description("Create an agent-backed column")
70
+ .requiredOption("--name <name>", "column name")
71
+ .requiredOption("--agent-id <id>", "agent id")
72
+ .requiredOption("--prompt <prompt>", "agent prompt")
73
+ .option("--output-field <name[:type]>", "output field; repeatable, type defaults to text", collect, [])
74
+ .option("--output-fields-json <json>", "JSON array of output fields")
75
+ .option("--input-column <id>", "input column id; repeatable", collect, [])
76
+ .option("--input-columns <ids>", "comma-separated input column ids");
77
+ createAgentColumnCommand.action(async (tableId) => {
78
+ await withClient(createAgentColumnCommand, async (client, config) => {
79
+ const options = createAgentColumnCommand.opts();
80
+ const body = compactObject({
81
+ name: options.name,
82
+ agent_id: options.agentId,
83
+ prompt: options.prompt,
84
+ output_fields: parseOutputFields(options) ?? undefined,
85
+ input_column_ids: parseInputColumnIds(options) ?? undefined,
86
+ });
87
+ printResult(config, await client.request(`/v1/tables/${pathId(tableId)}/agent-columns`, jsonRequest("POST", body)));
88
+ });
89
+ });
90
+ const configureColumnCommand = columns
91
+ .command("configure <table-id> <column-id>")
92
+ .description("Update a column name or agent configuration")
93
+ .option("--name <name>", "column name")
94
+ .option("--agent-id <id>", "agent id")
95
+ .option("--prompt <prompt>", "agent prompt")
96
+ .option("--output-field <name[:type]>", "output field; repeatable, type defaults to text", collect, [])
97
+ .option("--output-fields-json <json>", "JSON array of output fields")
98
+ .option("--input-column <id>", "input column id; repeatable", collect, [])
99
+ .option("--input-columns <ids>", "comma-separated input column ids");
100
+ configureColumnCommand.action(async (tableId, columnId) => {
101
+ await withClient(configureColumnCommand, async (client, config) => {
102
+ const options = configureColumnCommand.opts();
103
+ const body = compactObject({
104
+ name: options.name,
105
+ agent_id: options.agentId,
106
+ prompt: options.prompt,
107
+ output_fields: parseOutputFields(options),
108
+ input_column_ids: parseInputColumnIds(options),
109
+ });
110
+ if (Object.keys(body).length === 0) {
111
+ throw new Error("Pass at least one column field to configure.");
112
+ }
113
+ printResult(config, await client.request(`/v1/tables/${pathId(tableId)}/columns/${pathId(columnId)}`, jsonRequest("PATCH", body)));
114
+ });
115
+ });
116
+ const deleteColumnCommand = columns.command("delete <table-id> <column-id>").description("Delete a column and its cells");
117
+ deleteColumnCommand.action(async (tableId, columnId) => {
118
+ await withClient(deleteColumnCommand, async (client, config) => {
119
+ printResult(config, await client.request(`/v1/tables/${pathId(tableId)}/columns/${pathId(columnId)}`, {
120
+ method: "DELETE",
121
+ }));
122
+ });
123
+ });
124
+ const extractJsonColumnCommand = columns
125
+ .command("extract-json <table-id> <column-id>")
126
+ .description("Extract JSON object keys from a column into adjacent text columns");
127
+ extractJsonColumnCommand.action(async (tableId, columnId) => {
128
+ await withClient(extractJsonColumnCommand, async (client, config) => {
129
+ printResult(config, tableDetailCommandResult(await client.request(`/v1/tables/${pathId(tableId)}/columns/${pathId(columnId)}/extract`, {
130
+ method: "POST",
131
+ }), "Extracted table"));
132
+ });
133
+ });
134
+ }
135
+ function registerViewCommands(tables) {
136
+ const views = tables.command("views").alias("view").description("Manage table views and filters");
137
+ const listViewsCommand = views.command("list <table-id>").description("List views for a table");
138
+ listViewsCommand.action(async (tableId) => {
139
+ await withClient(listViewsCommand, async (client, config) => {
140
+ printResult(config, await client.request(`/v1/tables/${pathId(tableId)}/views`));
141
+ });
142
+ });
143
+ const createViewCommand = views
144
+ .command("create <table-id>")
145
+ .description("Create a table view")
146
+ .requiredOption("--name <name>", "view name")
147
+ .option("--filter <column-id:operator[:value]>", "view filter; repeatable", collect, [])
148
+ .option("--filters-json <json>", "JSON array of view filters");
149
+ createViewCommand.action(async (tableId) => {
150
+ await withClient(createViewCommand, async (client, config) => {
151
+ const options = createViewCommand.opts();
152
+ const body = {
153
+ name: options.name,
154
+ filters: parseViewFilters(options),
155
+ };
156
+ printResult(config, await client.request(`/v1/tables/${pathId(tableId)}/views`, jsonRequest("POST", body)));
157
+ });
158
+ });
159
+ const configureViewCommand = views
160
+ .command("configure <table-id> <view-id>")
161
+ .description("Update a table view")
162
+ .option("--name <name>", "view name")
163
+ .option("--filter <column-id:operator[:value]>", "replace filters with this filter; repeatable", collect, [])
164
+ .option("--filters-json <json>", "replace filters with a JSON array")
165
+ .option("--clear-filters", "replace filters with an empty list");
166
+ configureViewCommand.action(async (tableId, viewId) => {
167
+ await withClient(configureViewCommand, async (client, config) => {
168
+ const options = configureViewCommand.opts();
169
+ const filters = parseViewFiltersForUpdate(options);
170
+ const body = compactObject({
171
+ name: options.name,
172
+ filters,
173
+ });
174
+ if (Object.keys(body).length === 0) {
175
+ throw new Error("Pass at least one view field to configure.");
176
+ }
177
+ printResult(config, await client.request(`/v1/tables/${pathId(tableId)}/views/${pathId(viewId)}`, jsonRequest("PATCH", body)));
178
+ });
179
+ });
180
+ const deleteViewCommand = views.command("delete <table-id> <view-id>").description("Delete a table view");
181
+ deleteViewCommand.action(async (tableId, viewId) => {
182
+ await withClient(deleteViewCommand, async (client, config) => {
183
+ printResult(config, await client.request(`/v1/tables/${pathId(tableId)}/views/${pathId(viewId)}`, {
184
+ method: "DELETE",
185
+ }));
186
+ });
187
+ });
188
+ }
189
+ function registerRowCommands(tables) {
190
+ const rows = tables.command("rows").alias("row").description("Manage table rows");
191
+ const deleteRowCommand = rows
192
+ .command("delete <table-id> <row-id-or-index...>")
193
+ .description("Delete one or more rows by id, or by row_index with --by-index")
194
+ .option("--by-index", "treat row-id-or-index values as row_index values");
195
+ deleteRowCommand.action(async (tableId, rowIdOrIndexes) => {
196
+ await withClient(deleteRowCommand, async (client, config) => {
197
+ const options = deleteRowCommand.opts();
198
+ const rowIds = await resolveRowIds(client, tableId, rowIdOrIndexes, Boolean(options.byIndex));
199
+ const deletedRows = [];
200
+ for (const rowId of rowIds) {
201
+ deletedRows.push(await client.request(`/v1/tables/${pathId(tableId)}/rows/${pathId(rowId)}`, {
202
+ method: "DELETE",
203
+ }));
204
+ }
205
+ printResult(config, deletedRows);
206
+ });
207
+ });
208
+ }
209
+ function registerAgentEditCommands(tables) {
210
+ const edits = tables
211
+ .command("agent-edits")
212
+ .alias("agent-edit")
213
+ .description("Apply model-planned table edits; currently supports delete_row plans");
214
+ const applyEditCommand = edits
215
+ .command("apply <table-id>")
216
+ .description("Ask the table edit agent to plan and apply supported edits")
217
+ .requiredOption("--instruction <text>", "edit instruction")
218
+ .requiredOption("--row-id <id>", "focused row id for context")
219
+ .option("--column-id <id>", "focused column id for context");
220
+ applyEditCommand.action(async (tableId) => {
221
+ await withClient(applyEditCommand, async (client, config) => {
222
+ const options = applyEditCommand.opts();
223
+ const body = compactObject({
224
+ instruction: options.instruction,
225
+ row_id: options.rowId,
226
+ column_id: options.columnId,
227
+ });
228
+ printResult(config, await client.request(`/v1/tables/${pathId(tableId)}/agent-edits`, jsonRequest("POST", body)));
229
+ });
230
+ });
231
+ }
232
+ function registerCellCommands(tables) {
233
+ const cells = tables.command("cells").alias("cell").description("Manage table cells");
234
+ const setCellCommand = cells
235
+ .command("set <table-id> <row-id> <column-id>")
236
+ .description("Set a cell value")
237
+ .requiredOption("--value <value>", "cell value")
238
+ .option("--value-json", "parse --value as JSON");
239
+ setCellCommand.action(async (tableId, rowId, columnId) => {
240
+ await withClient(setCellCommand, async (client, config) => {
241
+ const options = setCellCommand.opts();
242
+ const value = options.valueJson ? parseJson(options.value, "--value") : options.value;
243
+ printResult(config, await client.request(`/v1/tables/${pathId(tableId)}/rows/${pathId(rowId)}/columns/${pathId(columnId)}/cell`, jsonRequest("PATCH", { value })));
244
+ });
245
+ });
246
+ }
247
+ function registerSourcePeopleCommand(tables) {
248
+ const sourcePeopleCommand = tables
249
+ .command("source-people <company-table-id>")
250
+ .description("Start a people_sourcing run from a company table view")
251
+ .requiredOption("--view-id <id>", "source table view id")
252
+ .option("--agent-id <id>", "people_sourcing agent id")
253
+ .option("--input-column <id>", "company input column id; repeatable", collect, [])
254
+ .option("--input-columns <ids>", "comma-separated company input column ids")
255
+ .option("--row-id <id>", "specific source row id; repeatable", collect, [])
256
+ .option("--row-ids <ids>", "comma-separated source row ids")
257
+ .option("--targeting-brief <text>", "brief describing which people to source")
258
+ .option("--max-contacts-per-company <count>", "maximum contacts per company, 1-20", "3")
259
+ .option("--created-by-codex", 'mark the created people-sourcing column with "ran by codex" provenance')
260
+ .addHelpText("after", compatibilityHelp);
261
+ sourcePeopleCommand.action(async (tableId) => {
262
+ await withClient(sourcePeopleCommand, async (client, config) => {
263
+ const options = sourcePeopleCommand.opts();
264
+ const body = compactObject({
265
+ view_id: options.viewId,
266
+ row_ids: parseRowIds(options),
267
+ people_sourcing_agent_id: options.agentId,
268
+ input_column_ids: parseInputColumnIds(options),
269
+ targeting_brief: options.targetingBrief,
270
+ max_contacts_per_company: options.maxContactsPerCompany === undefined
271
+ ? undefined
272
+ : parsePositiveInteger(options.maxContactsPerCompany, "--max-contacts-per-company"),
273
+ created_by_codex: options.createdByCodex ? true : undefined,
274
+ });
275
+ const run = await client.request(`/v1/tables/${pathId(tableId)}/source-people`, jsonRequest("POST", body));
276
+ printResult(config, sourcePeopleCommandResult(run));
277
+ });
278
+ });
279
+ }
280
+ function registerRunCommands(tables) {
281
+ const runs = tables.command("runs").alias("run").description("Manage table column runs");
282
+ const startRunCommand = runs
283
+ .command("start <table-id> <column-id>")
284
+ .description("Start an agent-column run")
285
+ .option("--scope <scope>", "first_5, all, empty, or count", "first_5")
286
+ .option("--row-count <count>", "required when --scope count")
287
+ .option("--row-id <id>", "specific row id to run; repeatable", collect, [])
288
+ .option("--google-workspace-credentials-json <json>", "Google Workspace credential JSON for the run");
289
+ startRunCommand.action(async (tableId, columnId) => {
290
+ await withClient(startRunCommand, async (client, config) => {
291
+ const options = startRunCommand.opts();
292
+ const scope = parseRunScope(options.scope);
293
+ const rowCount = options.rowCount === undefined ? undefined : parsePositiveInteger(options.rowCount, "--row-count");
294
+ const body = compactObject({
295
+ scope,
296
+ row_count: rowCount,
297
+ row_ids: options.rowId?.length ? options.rowId : undefined,
298
+ google_workspace_credentials_json: options.googleWorkspaceCredentialsJson,
299
+ });
300
+ printResult(config, await client.request(`/v1/tables/${pathId(tableId)}/columns/${pathId(columnId)}/runs`, jsonRequest("POST", body)));
301
+ });
302
+ });
303
+ const getRunCommand = runs.command("get <run-id>").description("Fetch a table column run");
304
+ getRunCommand.action(async (runId) => {
305
+ await withClient(getRunCommand, async (client, config) => {
306
+ printResult(config, await client.request(`/v1/table-column-runs/${pathId(runId)}`));
307
+ });
308
+ });
309
+ const interruptRunCommand = runs.command("interrupt <run-id>").description("Interrupt a queued or running table column run");
310
+ interruptRunCommand.action(async (runId) => {
311
+ await withClient(interruptRunCommand, async (client, config) => {
312
+ printResult(config, await client.request(`/v1/table-column-runs/${pathId(runId)}/interrupt`, {
313
+ method: "POST",
314
+ }));
315
+ });
316
+ });
317
+ const createPeopleTableCommand = runs
318
+ .command("create-people-table <run-id>")
319
+ .description("Create the people table from a completed people_sourcing run");
320
+ createPeopleTableCommand.action(async (runId) => {
321
+ await withClient(createPeopleTableCommand, async (client, config) => {
322
+ const detail = await client.request(`/v1/table-column-runs/${pathId(runId)}/people-table`, {
323
+ method: "POST",
324
+ });
325
+ printResult(config, tableDetailCommandResult(detail, "Created people table"));
326
+ });
327
+ });
328
+ }
329
+ function tableDetailCommandResult(detail, labelPrefix) {
330
+ return {
331
+ label: `${labelPrefix} ${detail.table.id} (${detail.table.row_count} rows, ${detail.table.column_count} columns)`,
332
+ data: tableDetailCliResponse(detail),
333
+ };
334
+ }
335
+ function tableDetailCliResponse(detail) {
336
+ return {
337
+ ...detail,
338
+ table_id: detail.table.id,
339
+ table_name: detail.table.name,
340
+ entity_type: detail.table.entity_type,
341
+ row_count: detail.table.row_count,
342
+ column_count: detail.table.column_count,
343
+ column_ids: detail.columns.map((column) => column.id),
344
+ row_ids: detail.rows.map((row) => row.id),
345
+ view_ids: detail.views.map((view) => view.id),
346
+ };
347
+ }
348
+ function sourcePeopleCommandResult(run) {
349
+ const data = sourcePeopleCliResponse(run);
350
+ return {
351
+ label: `People-sourcing run ${data.run_id} on table ${data.table_id}; column ${data.column_id} (${data.status}, ${data.total_count} rows)`,
352
+ data,
353
+ };
354
+ }
355
+ function sourcePeopleCliResponse(run) {
356
+ return {
357
+ ...run,
358
+ table_id: run.table.table.id,
359
+ column_id: run.column.id,
360
+ run_id: run.run.id,
361
+ status: run.run.status,
362
+ total_count: run.run.total_count,
363
+ completed_count: run.run.completed_count,
364
+ failed_count: run.run.failed_count,
365
+ source_view_id: stringConfigValue(run.column.config, "source_view_id"),
366
+ };
367
+ }
368
+ function stringConfigValue(config, key) {
369
+ const value = config?.[key];
370
+ return typeof value === "string" ? value : null;
371
+ }
372
+ export function parseOutputFields(options) {
373
+ if (options.outputFieldsJson) {
374
+ const parsed = parseJson(options.outputFieldsJson, "--output-fields-json");
375
+ if (!Array.isArray(parsed))
376
+ throw new Error("--output-fields-json must be a JSON array.");
377
+ return parsed.map(parseOutputFieldObject);
378
+ }
379
+ if (!options.outputField?.length)
380
+ return undefined;
381
+ return options.outputField.map(parseOutputFieldText);
382
+ }
383
+ export function parseInputColumnIds(options) {
384
+ const ids = [...(options.inputColumn || [])];
385
+ if (options.inputColumns) {
386
+ ids.push(...options.inputColumns.split(","));
387
+ }
388
+ const cleaned = ids.map((id) => id.trim()).filter(Boolean);
389
+ return cleaned.length ? Array.from(new Set(cleaned)) : undefined;
390
+ }
391
+ function parseRowIds(options) {
392
+ const ids = [...(options.rowId || [])];
393
+ if (options.rowIds) {
394
+ ids.push(...options.rowIds.split(","));
395
+ }
396
+ const cleaned = ids.map((id) => id.trim()).filter(Boolean);
397
+ return cleaned.length ? Array.from(new Set(cleaned)) : undefined;
398
+ }
399
+ export async function resolveRowIds(client, tableId, rowIdOrIndexes, byIndex) {
400
+ if (!rowIdOrIndexes.length)
401
+ throw new Error("Pass at least one row id or index.");
402
+ if (!byIndex)
403
+ return Array.from(new Set(rowIdOrIndexes));
404
+ const requestedIndexes = rowIdOrIndexes.map((value) => parseNonNegativeInteger(value, "row index"));
405
+ const detail = await client.request(`/v1/tables/${pathId(tableId)}`);
406
+ const rowsByIndex = new Map(detail.rows.map((row) => [row.row_index, row]));
407
+ return Array.from(new Set(requestedIndexes)).map((rowIndex) => {
408
+ const row = rowsByIndex.get(rowIndex);
409
+ if (!row)
410
+ throw new Error(`Row index ${rowIndex} was not found in table ${tableId}.`);
411
+ return row.id;
412
+ });
413
+ }
414
+ function parseEntityType(value) {
415
+ if (value === undefined)
416
+ return undefined;
417
+ if (entityTypes.has(value))
418
+ return value;
419
+ throw new Error("--entity-type must be company or people.");
420
+ }
421
+ function parseViewFilters(options) {
422
+ if (options.clearFilters)
423
+ throw new Error("--clear-filters is only valid for configure.");
424
+ const parsed = parseViewFiltersFromOptions(options);
425
+ return parsed ?? [];
426
+ }
427
+ function parseViewFiltersForUpdate(options) {
428
+ if (options.clearFilters && (options.filter?.length || options.filtersJson)) {
429
+ throw new Error("Use either --clear-filters or filter replacement flags, not both.");
430
+ }
431
+ if (options.clearFilters)
432
+ return [];
433
+ return parseViewFiltersFromOptions(options);
434
+ }
435
+ function parseViewFiltersFromOptions(options) {
436
+ if (options.filtersJson && options.filter?.length) {
437
+ throw new Error("Use either --filter or --filters-json, not both.");
438
+ }
439
+ if (options.filtersJson) {
440
+ const parsed = parseJson(options.filtersJson, "--filters-json");
441
+ if (!Array.isArray(parsed))
442
+ throw new Error("--filters-json must be a JSON array.");
443
+ return parsed.map(parseViewFilterObject);
444
+ }
445
+ if (!options.filter?.length)
446
+ return undefined;
447
+ return options.filter.map(parseViewFilterText);
448
+ }
449
+ function parseViewFilterText(value) {
450
+ const parts = value.split(":");
451
+ const columnId = parts.shift()?.trim();
452
+ const operator = parts.shift()?.trim();
453
+ const filterValue = parts.length ? parts.join(":").trim() : undefined;
454
+ return parseViewFilterObject({
455
+ column_id: columnId,
456
+ operator,
457
+ value: filterValue,
458
+ });
459
+ }
460
+ function parseViewFilterObject(value) {
461
+ if (!value || typeof value !== "object") {
462
+ throw new Error("View filters must be objects with column_id and operator.");
463
+ }
464
+ const filter = value;
465
+ if (filter.id !== undefined && typeof filter.id !== "string") {
466
+ throw new Error("View filter id must be a string.");
467
+ }
468
+ if (typeof filter.column_id !== "string" || !filter.column_id.trim()) {
469
+ throw new Error("View filter column_id is required.");
470
+ }
471
+ if (typeof filter.operator !== "string" || !filterOperators.has(filter.operator)) {
472
+ throw new Error("View filter operator must be one of is_empty, is_not_empty, equals, not_equals, contains, not_contains.");
473
+ }
474
+ if (filter.value !== undefined && filter.value !== null && typeof filter.value !== "string") {
475
+ throw new Error("View filter value must be a string or null.");
476
+ }
477
+ if (filter.enabled !== undefined && typeof filter.enabled !== "boolean") {
478
+ throw new Error("View filter enabled must be a boolean.");
479
+ }
480
+ return compactObject({
481
+ id: filter.id?.trim(),
482
+ column_id: filter.column_id.trim(),
483
+ operator: filter.operator,
484
+ value: filter.value === undefined ? undefined : filter.value,
485
+ enabled: filter.enabled,
486
+ });
487
+ }
488
+ function parseOutputFieldText(value) {
489
+ const [name, rawType = "text"] = value.split(":");
490
+ return parseOutputFieldObject({ name, type: rawType });
491
+ }
492
+ function parseOutputFieldObject(value) {
493
+ if (!value || typeof value !== "object") {
494
+ throw new Error("Output fields must be objects with name and optional type.");
495
+ }
496
+ const field = value;
497
+ if (typeof field.name !== "string" || !field.name.trim()) {
498
+ throw new Error("Output field name is required.");
499
+ }
500
+ const type = field.type === undefined ? "text" : field.type;
501
+ if (type !== "text")
502
+ throw new Error("Only text output fields are supported right now.");
503
+ return { name: field.name.trim(), type };
504
+ }
505
+ function parseRunScope(value) {
506
+ const scope = (value || "first_5");
507
+ if (!allowedScopes.has(scope)) {
508
+ throw new Error("--scope must be one of first_5, all, empty, count.");
509
+ }
510
+ return scope;
511
+ }
512
+ function parsePositiveInteger(value, name) {
513
+ const parsed = Number(value);
514
+ if (!Number.isInteger(parsed) || parsed < 1) {
515
+ throw new Error(`${name} must be a positive integer.`);
516
+ }
517
+ return parsed;
518
+ }
519
+ function parseNonNegativeInteger(value, name) {
520
+ const parsed = Number(value);
521
+ if (!Number.isInteger(parsed) || parsed < 0) {
522
+ throw new Error(`${name} must be a non-negative integer.`);
523
+ }
524
+ return parsed;
525
+ }
526
+ function parseJson(value, name) {
527
+ try {
528
+ return JSON.parse(value);
529
+ }
530
+ catch (error) {
531
+ throw new Error(`${name} must be valid JSON.`);
532
+ }
533
+ }
534
+ //# sourceMappingURL=tables.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tables.js","sourceRoot":"","sources":["../../src/commands/tables.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ export type StoredAuth = {
2
+ apiUrl: string;
3
+ apiKey: string;
4
+ orgId?: string;
5
+ userEmail?: string;
6
+ userId?: string;
7
+ apiKeyId?: string;
8
+ savedAt: string;
9
+ };
10
+ export declare function authConfigPath(): string;
11
+ export declare function readStoredAuth(): StoredAuth | null;
12
+ export declare function writeStoredAuth(auth: StoredAuth): void;
13
+ export declare function clearStoredAuth(): boolean;
@@ -0,0 +1,47 @@
1
+ import { existsSync, mkdirSync, readFileSync, rmSync, writeFileSync, chmodSync } from "node:fs";
2
+ import { homedir } from "node:os";
3
+ import { dirname, join } from "node:path";
4
+ export function authConfigPath() {
5
+ return process.env.ETHOS_CONFIG_PATH || join(process.env.HOME || homedir(), ".config", "ethos", "config.json");
6
+ }
7
+ export function readStoredAuth() {
8
+ const path = authConfigPath();
9
+ if (!existsSync(path))
10
+ return null;
11
+ try {
12
+ const parsed = JSON.parse(readFileSync(path, "utf8"));
13
+ if (typeof parsed.apiUrl !== "string" || typeof parsed.apiKey !== "string")
14
+ return null;
15
+ return {
16
+ apiUrl: parsed.apiUrl,
17
+ apiKey: parsed.apiKey,
18
+ orgId: typeof parsed.orgId === "string" ? parsed.orgId : undefined,
19
+ userEmail: typeof parsed.userEmail === "string" ? parsed.userEmail : undefined,
20
+ userId: typeof parsed.userId === "string" ? parsed.userId : undefined,
21
+ apiKeyId: typeof parsed.apiKeyId === "string" ? parsed.apiKeyId : undefined,
22
+ savedAt: typeof parsed.savedAt === "string" ? parsed.savedAt : "",
23
+ };
24
+ }
25
+ catch {
26
+ return null;
27
+ }
28
+ }
29
+ export function writeStoredAuth(auth) {
30
+ const path = authConfigPath();
31
+ mkdirSync(dirname(path), { recursive: true });
32
+ writeFileSync(path, `${JSON.stringify(auth, null, 2)}\n`, { encoding: "utf8", mode: 0o600 });
33
+ try {
34
+ chmodSync(path, 0o600);
35
+ }
36
+ catch {
37
+ // Best effort on platforms that do not support POSIX modes.
38
+ }
39
+ }
40
+ export function clearStoredAuth() {
41
+ const path = authConfigPath();
42
+ if (!existsSync(path))
43
+ return false;
44
+ rmSync(path, { force: true });
45
+ return true;
46
+ }
47
+ //# sourceMappingURL=auth-store.js.map