ethos-cli 0.3.0 → 0.5.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/dist/bin/ethos.js CHANGED
@@ -6,6 +6,7 @@ import { Command } from "commander";
6
6
  import { registerAgents } from "../commands/agents.js";
7
7
  import { registerAuth } from "../commands/auth.js";
8
8
  import { registerFlows } from "../commands/flows.js";
9
+ import { registerHooks } from "../commands/hooks.js";
9
10
  import { registerSkills } from "../commands/skills.js";
10
11
  import { registerTables } from "../commands/tables.js";
11
12
  import { addGlobalOptions } from "../lib/config.js";
@@ -20,6 +21,7 @@ export function createEthosProgram() {
20
21
  registerAuth(program);
21
22
  registerAgents(program);
22
23
  registerFlows(program);
24
+ registerHooks(program);
23
25
  registerSkills(program);
24
26
  registerTables(program);
25
27
  return program;
@@ -1 +1 @@
1
- {"version":3,"file":"ethos.js","sourceRoot":"","sources":["../../src/bin/ethos.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,MAAM,GAAG,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,oBAAoB,CAAwB,CAAC;AAExF,MAAM,UAAU,kBAAkB;IAChC,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAE9B,gBAAgB,CACd,OAAO;SACJ,IAAI,CAAC,OAAO,CAAC;SACb,WAAW,CAAC,8CAA8C,CAAC;SAC3D,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CACxB,CAAC;IAEF,YAAY,CAAC,OAAO,CAAC,CAAC;IACtB,cAAc,CAAC,OAAO,CAAC,CAAC;IACxB,aAAa,CAAC,OAAO,CAAC,CAAC;IACvB,cAAc,CAAC,OAAO,CAAC,CAAC;IACxB,cAAc,CAAC,OAAO,CAAC,CAAC;IACxB,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,OAAiB,OAAO,CAAC,IAAI;IACtD,MAAM,kBAAkB,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AAC9C,CAAC;AAED,SAAS,kBAAkB;IACzB,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC9B,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IACzB,IAAI,CAAC;QACH,OAAO,YAAY,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,YAAY,CAAC,KAAK,CAAC,CAAC;IAC9E,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,IAAI,kBAAkB,EAAE,EAAE,CAAC;IACzB,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;QACrB,UAAU,CAAC,KAAK,CAAC,CAAC;QAClB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"ethos.js","sourceRoot":"","sources":["../../src/bin/ethos.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,MAAM,GAAG,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,oBAAoB,CAAwB,CAAC;AAExF,MAAM,UAAU,kBAAkB;IAChC,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAE9B,gBAAgB,CACd,OAAO;SACJ,IAAI,CAAC,OAAO,CAAC;SACb,WAAW,CAAC,8CAA8C,CAAC;SAC3D,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CACxB,CAAC;IAEF,YAAY,CAAC,OAAO,CAAC,CAAC;IACtB,cAAc,CAAC,OAAO,CAAC,CAAC;IACxB,aAAa,CAAC,OAAO,CAAC,CAAC;IACvB,aAAa,CAAC,OAAO,CAAC,CAAC;IACvB,cAAc,CAAC,OAAO,CAAC,CAAC;IACxB,cAAc,CAAC,OAAO,CAAC,CAAC;IACxB,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,OAAiB,OAAO,CAAC,IAAI;IACtD,MAAM,kBAAkB,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AAC9C,CAAC;AAED,SAAS,kBAAkB;IACzB,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC9B,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IACzB,IAAI,CAAC;QACH,OAAO,YAAY,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,YAAY,CAAC,KAAK,CAAC,CAAC;IAC9E,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,IAAI,kBAAkB,EAAE,EAAE,CAAC;IACzB,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;QACrB,UAAU,CAAC,KAAK,CAAC,CAAC;QAClB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -1,10 +1,10 @@
1
- import { spawn } from "node:child_process";
2
1
  import { randomUUID } from "node:crypto";
3
2
  import { createServer } from "node:http";
4
3
  import { hostname } from "node:os";
5
4
  import { authConfigPath, clearStoredAuth, readStoredAuth, writeStoredAuth } from "../lib/auth-store.js";
6
5
  import { defaultAgentReturnUrl, inferAppUrl, resolveAgentClientId } from "../lib/agent-clients.js";
7
6
  import { isJsonMode, resolveApiUrl } from "../lib/config.js";
7
+ import { openInBrowser } from "../lib/open-browser.js";
8
8
  import { printResult } from "../lib/output.js";
9
9
  export function registerAuth(program) {
10
10
  const auth = program.command("auth").description("Authenticate the Ethos CLI");
@@ -189,17 +189,6 @@ function parseTimeout(value) {
189
189
  throw new Error("--timeout must be a positive number of seconds.");
190
190
  return Math.min(parsed, 600);
191
191
  }
192
- function openInBrowser(url) {
193
- const command = process.platform === "darwin" ? "open" : process.platform === "win32" ? "cmd" : "xdg-open";
194
- const args = process.platform === "win32" ? ["/c", "start", "", url] : [url];
195
- try {
196
- const child = spawn(command, args, { detached: true, stdio: "ignore" });
197
- child.unref();
198
- }
199
- catch {
200
- // The approval URL was already printed.
201
- }
202
- }
203
192
  async function createLocalAuthCallback(timeoutSeconds) {
204
193
  const state = randomUUID();
205
194
  let settled = false;
@@ -1 +1 @@
1
- {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,8 @@
1
- import { withClient } from "../lib/command-helpers.js";
2
- import { FIND_PEOPLE_AT_COMPANIES_FLOW, buildFindPeopleFlowStart, inferAppUrl, } from "../lib/agent-clients.js";
1
+ import { jsonRequest, withClient } from "../lib/command-helpers.js";
2
+ import { FIND_PEOPLE_AT_COMPANIES_FLOW } from "../lib/agent-clients.js";
3
+ import { EthosApiError } from "../lib/client.js";
4
+ import { createFindPeopleHandoff } from "../lib/find-people-flow.js";
5
+ import { openInBrowser } from "../lib/open-browser.js";
3
6
  import { printResult } from "../lib/output.js";
4
7
  export function registerFlows(program) {
5
8
  const flows = program
@@ -12,44 +15,100 @@ export function registerFlows(program) {
12
15
  .option("--agent-surface <surface>", "agent surface metadata: code, chat, or cowork", "code")
13
16
  .option("--app-url <url>", "Ethos web app URL")
14
17
  .option("--codex-thread-id <id>", "Codex thread UUID for Codex return links")
15
- .option("--return-url <url>", "explicit deep link to use when returning to the agent client");
18
+ .option("--return-url <url>", "explicit deep link to use when returning to the agent client")
19
+ .option("--open", "open the upload URL in the default browser after creating the handoff");
16
20
  startCommand.action(async (flow) => {
17
21
  if (flow !== FIND_PEOPLE_AT_COMPANIES_FLOW) {
18
22
  throw new Error(`Unsupported flow "${flow}". Supported flow: ${FIND_PEOPLE_AT_COMPANIES_FLOW}.`);
19
23
  }
20
24
  await withClient(startCommand, async (client, config) => {
21
25
  const options = startCommand.opts();
22
- const appUrl = options.appUrl || process.env.ETHOS_APP_URL || inferAppUrl(config.apiUrl);
23
- const flowStart = buildFindPeopleFlowStart({
26
+ const result = await createFindPeopleHandoff(client, config, {
24
27
  agentClient: options.agentClient,
25
28
  agentSurface: options.agentSurface,
26
- appUrl,
29
+ appUrl: options.appUrl,
27
30
  codexThreadId: options.codexThreadId,
28
31
  returnUrl: options.returnUrl,
29
32
  });
30
- const destinationUrl = new URL(flowStart.upload_url);
31
- const destinationPath = `${destinationUrl.pathname}${destinationUrl.search}`;
32
- const handoff = await client.request("/v1/auth/browser-handoffs", {
33
- method: "POST",
34
- headers: { "Content-Type": "application/json" },
35
- body: JSON.stringify({
36
- app_url: appUrl.replace(/\/+$/, ""),
37
- destination_path: destinationPath,
38
- flow,
39
- agent_client: flowStart.agent_client,
40
- agent_surface: flowStart.agent_surface,
41
- }),
42
- });
43
- printResult(config, {
44
- ...flowStart,
45
- org_id: handoff.org_id,
46
- org_name: handoff.org_name,
47
- upload_url: handoff.handoff_url,
48
- handoff_url: handoff.handoff_url,
49
- destination_url: handoff.destination_url,
50
- destination_path: handoff.destination_path,
51
- });
33
+ printResult(config, result);
34
+ if (options.open)
35
+ openInBrowser(result.handoff_url);
52
36
  });
53
37
  });
38
+ const waitCommand = flows
39
+ .command("wait <handoff-token>")
40
+ .description("Poll a handoff until the browser CSV upload completes, then return the uploaded table id")
41
+ .option("--timeout <seconds>", "seconds to wait for the upload to complete", "300")
42
+ .option("--poll-interval <seconds>", "seconds between status checks", "2");
43
+ waitCommand.action(async (handoffToken) => {
44
+ await withClient(waitCommand, async (client, config) => {
45
+ const options = waitCommand.opts();
46
+ const timeoutSeconds = parseWaitSeconds(options.timeout, "--timeout", 1800);
47
+ const pollIntervalMs = parseWaitSeconds(options.pollInterval, "--poll-interval", 60) * 1000;
48
+ const deadline = Date.now() + timeoutSeconds * 1000;
49
+ for (;;) {
50
+ let handoff;
51
+ try {
52
+ const requestTimeoutMs = Math.min(STATUS_REQUEST_TIMEOUT_MS, Math.max(1000, deadline - Date.now()));
53
+ handoff = await fetchHandoffStatus(client, handoffToken, requestTimeoutMs);
54
+ }
55
+ catch (error) {
56
+ // A single stalled status request is aborted so it cannot block the
57
+ // overall --timeout; fall through to the deadline check and retry.
58
+ if (!isAbortError(error))
59
+ throw error;
60
+ }
61
+ if (handoff?.result_table_id) {
62
+ printResult(config, {
63
+ label: `Upload complete; table ${handoff.result_table_id}`,
64
+ data: {
65
+ ...handoff,
66
+ handoff_token: handoffToken,
67
+ table_id: handoff.result_table_id,
68
+ },
69
+ });
70
+ return;
71
+ }
72
+ if (Date.now() >= deadline) {
73
+ throw new Error(`Timed out after ${timeoutSeconds}s waiting for the CSV upload to complete. ` +
74
+ `Confirm the user finished uploading, then re-run \`ethos flows wait ${handoffToken}\`.`);
75
+ }
76
+ await delay(pollIntervalMs);
77
+ }
78
+ });
79
+ });
80
+ }
81
+ const STATUS_REQUEST_TIMEOUT_MS = 15_000;
82
+ async function fetchHandoffStatus(client, handoffToken, requestTimeoutMs) {
83
+ const controller = new AbortController();
84
+ const timer = setTimeout(() => controller.abort(), requestTimeoutMs);
85
+ try {
86
+ return await client.request("/v1/auth/browser-handoffs/status", {
87
+ ...jsonRequest("POST", { handoff_token: handoffToken }),
88
+ signal: controller.signal,
89
+ });
90
+ }
91
+ catch (error) {
92
+ if (error instanceof EthosApiError && error.status === 404) {
93
+ throw new EthosApiError("This upload flow expired before the CSV upload completed. Re-run `ethos flows start find-people-at-companies` to start a new one.", error.status, error.body);
94
+ }
95
+ throw error;
96
+ }
97
+ finally {
98
+ clearTimeout(timer);
99
+ }
100
+ }
101
+ function isAbortError(error) {
102
+ return Boolean(error && typeof error === "object" && "name" in error && error.name === "AbortError");
103
+ }
104
+ function parseWaitSeconds(value, name, max) {
105
+ const parsed = Number.parseInt(value || "", 10);
106
+ if (!Number.isFinite(parsed) || parsed < 1) {
107
+ throw new Error(`${name} must be a positive number of seconds.`);
108
+ }
109
+ return Math.min(parsed, max);
110
+ }
111
+ function delay(ms) {
112
+ return new Promise((resolve) => setTimeout(resolve, ms));
54
113
  }
55
114
  //# sourceMappingURL=flows.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"flows.js","sourceRoot":"","sources":["../../src/commands/flows.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EACL,6BAA6B,EAC7B,wBAAwB,EACxB,WAAW,GACZ,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAwB/C,MAAM,UAAU,aAAa,CAAC,OAAgB;IAC5C,MAAM,KAAK,GAAG,OAAO;SAClB,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,gEAAgE,CAAC,CAAC;IAEjF,MAAM,YAAY,GAAG,KAAK;SACvB,OAAO,CAAC,cAAc,CAAC;SACvB,WAAW,CAAC,kDAAkD,CAAC;SAC/D,MAAM,CAAC,yBAAyB,EAAE,2DAA2D,EAAE,MAAM,CAAC;SACtG,MAAM,CAAC,2BAA2B,EAAE,+CAA+C,EAAE,MAAM,CAAC;SAC5F,MAAM,CAAC,iBAAiB,EAAE,mBAAmB,CAAC;SAC9C,MAAM,CAAC,wBAAwB,EAAE,0CAA0C,CAAC;SAC5E,MAAM,CAAC,oBAAoB,EAAE,8DAA8D,CAAC,CAAC;IAEhG,YAAY,CAAC,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,EAAE;QACzC,IAAI,IAAI,KAAK,6BAA6B,EAAE,CAAC;YAC3C,MAAM,IAAI,KAAK,CAAC,qBAAqB,IAAI,sBAAsB,6BAA6B,GAAG,CAAC,CAAC;QACnG,CAAC;QAED,MAAM,UAAU,CAAC,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;YACtD,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,EAAoB,CAAC;YACtD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YACzF,MAAM,SAAS,GAAG,wBAAwB,CAAC;gBACzC,WAAW,EAAE,OAAO,CAAC,WAAW;gBAChC,YAAY,EAAE,OAAO,CAAC,YAAY;gBAClC,MAAM;gBACN,aAAa,EAAE,OAAO,CAAC,aAAa;gBACpC,SAAS,EAAE,OAAO,CAAC,SAAS;aAC7B,CAAC,CAAC;YACH,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;YACrD,MAAM,eAAe,GAAG,GAAG,cAAc,CAAC,QAAQ,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC;YAC7E,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,OAAO,CAAqB,2BAA2B,EAAE;gBACpF,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;gBAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;oBACnB,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;oBACnC,gBAAgB,EAAE,eAAe;oBACjC,IAAI;oBACJ,YAAY,EAAE,SAAS,CAAC,YAAY;oBACpC,aAAa,EAAE,SAAS,CAAC,aAAa;iBACvC,CAAC;aACH,CAAC,CAAC;YAEH,WAAW,CAAC,MAAM,EAAE;gBAClB,GAAG,SAAS;gBACZ,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,QAAQ,EAAE,OAAO,CAAC,QAAQ;gBAC1B,UAAU,EAAE,OAAO,CAAC,WAAW;gBAC/B,WAAW,EAAE,OAAO,CAAC,WAAW;gBAChC,eAAe,EAAE,OAAO,CAAC,eAAe;gBACxC,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;aAC3C,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"flows.js","sourceRoot":"","sources":["../../src/commands/flows.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { Command } from "commander";
2
+ export declare function registerHooks(program: Command): void;
3
+ export declare function matchesEagerOpenTrigger(prompt: string): boolean;
@@ -0,0 +1,195 @@
1
+ import { existsSync, readFileSync } from "node:fs";
2
+ import { mkdir, readFile, writeFile } from "node:fs/promises";
3
+ import { homedir } from "node:os";
4
+ import { dirname, join } from "node:path";
5
+ import { withClient } from "../lib/command-helpers.js";
6
+ import { isJsonMode } from "../lib/config.js";
7
+ import { createFindPeopleHandoff } from "../lib/find-people-flow.js";
8
+ import { openInBrowser } from "../lib/open-browser.js";
9
+ import { printResult } from "../lib/output.js";
10
+ const SKILL = "find-people-at-companies";
11
+ const HOOK_EVENT = "UserPromptSubmit";
12
+ // Explicit invocation only: the skill named in the prompt, with or without a
13
+ // leading slash. Conservative on purpose so unrelated prompts never open a browser.
14
+ const EAGER_OPEN_TRIGGER = /(^|\s)\/?find-people-at-companies\b/i;
15
+ // Substring used to find/replace/remove our hook entry idempotently.
16
+ const HOOK_COMMAND_MARKER = "hooks eager-open";
17
+ const ALL_HOOK_AGENTS = ["claude-code"];
18
+ export function registerHooks(program) {
19
+ const hooks = program
20
+ .command("hooks")
21
+ .description("Manage Ethos agent hooks, such as the find-people eager-open UserPromptSubmit hook");
22
+ registerEagerOpen(hooks);
23
+ registerInstall(hooks);
24
+ registerUninstall(hooks);
25
+ }
26
+ export function matchesEagerOpenTrigger(prompt) {
27
+ return EAGER_OPEN_TRIGGER.test(prompt);
28
+ }
29
+ function registerEagerOpen(hooks) {
30
+ const eagerOpen = hooks
31
+ .command("eager-open")
32
+ .description(`${HOOK_EVENT} hook handler: when the ${SKILL} skill is invoked, pre-open the upload browser and inject the started handoff for the skill to reuse`);
33
+ eagerOpen.action(async () => {
34
+ try {
35
+ const prompt = readHookPrompt();
36
+ if (!matchesEagerOpenTrigger(prompt))
37
+ return; // not this skill - leave the prompt untouched
38
+ await withClient(eagerOpen, async (client, config) => {
39
+ const handoff = await createFindPeopleHandoff(client, config, { agentClient: "auto" });
40
+ openInBrowser(handoff.handoff_url);
41
+ emitAdditionalContext(eagerOpenContext(handoff));
42
+ });
43
+ }
44
+ catch {
45
+ // Never block or fail the user's prompt; the skill's own `flows start` is the fallback.
46
+ }
47
+ });
48
+ }
49
+ function readHookPrompt() {
50
+ if (process.stdin.isTTY)
51
+ return "";
52
+ try {
53
+ const raw = readFileSync(0, "utf8");
54
+ if (!raw.trim())
55
+ return "";
56
+ const data = JSON.parse(raw);
57
+ return typeof data.prompt === "string" ? data.prompt : "";
58
+ }
59
+ catch {
60
+ return "";
61
+ }
62
+ }
63
+ function eagerOpenContext(handoff) {
64
+ const workspace = handoff.org_name ? ` in workspace "${handoff.org_name}"` : "";
65
+ return (`Ethos find-people: the CSV upload browser is already opening${workspace} (pre-started by a hook). ` +
66
+ `Reuse this flow when running the ${SKILL} skill - do NOT run \`ethos flows start\` again. ` +
67
+ `handoff_token=${handoff.handoff_token}. ` +
68
+ `Next: ask the user for their ICP and buying-signal brief while they upload, then run ` +
69
+ `\`ethos flows wait ${handoff.handoff_token} --json\` to capture the uploaded table id.`);
70
+ }
71
+ function emitAdditionalContext(additionalContext) {
72
+ process.stdout.write(JSON.stringify({
73
+ hookSpecificOutput: { hookEventName: HOOK_EVENT, additionalContext },
74
+ }));
75
+ }
76
+ function registerInstall(hooks) {
77
+ const install = hooks
78
+ .command("install")
79
+ .description("Register the find-people eager-open UserPromptSubmit hook in your agent config")
80
+ .option("-a, --agents <list>", `comma-separated agents (default: claude-code). Supported: ${ALL_HOOK_AGENTS.join(", ")}`);
81
+ install.action(async () => {
82
+ const agents = parseHookAgents(install.opts().agents);
83
+ const command = `${ethosCliCommand()} hooks eager-open`;
84
+ const results = [];
85
+ for (const agent of agents) {
86
+ if (agent === "claude-code")
87
+ results.push(await installClaudeHook(command));
88
+ }
89
+ printHooksResult(install, {
90
+ label: `Eager-open hook installed for ${results.map((entry) => entry.agent).join(", ")} (command: ${command})`,
91
+ data: { command, agents: results },
92
+ });
93
+ });
94
+ }
95
+ function registerUninstall(hooks) {
96
+ const uninstall = hooks
97
+ .command("uninstall")
98
+ .description("Remove the find-people eager-open hook from your agent config")
99
+ .option("-a, --agents <list>", `comma-separated agents (default: claude-code). Supported: ${ALL_HOOK_AGENTS.join(", ")}`);
100
+ uninstall.action(async () => {
101
+ const agents = parseHookAgents(uninstall.opts().agents);
102
+ const results = [];
103
+ for (const agent of agents) {
104
+ if (agent === "claude-code")
105
+ results.push(await uninstallClaudeHook());
106
+ }
107
+ const removed = results.reduce((total, entry) => total + entry.removed, 0);
108
+ printHooksResult(uninstall, {
109
+ label: removed ? `Removed the eager-open hook from ${results.map((entry) => entry.agent).join(", ")}` : "Nothing to remove.",
110
+ data: { agents: results },
111
+ });
112
+ });
113
+ }
114
+ async function installClaudeHook(command) {
115
+ const path = claudeSettingsPath();
116
+ const settings = await readClaudeSettings(path);
117
+ const allHooks = (settings.hooks ??= {});
118
+ const list = (allHooks[HOOK_EVENT] ??= []);
119
+ let updated = false;
120
+ for (const group of list) {
121
+ for (const entry of group.hooks ?? []) {
122
+ if (typeof entry.command === "string" && entry.command.includes(HOOK_COMMAND_MARKER)) {
123
+ entry.type = "command";
124
+ entry.command = command;
125
+ updated = true;
126
+ }
127
+ }
128
+ }
129
+ if (!updated) {
130
+ list.push({ hooks: [{ type: "command", command }] });
131
+ }
132
+ await writeJsonFile(path, settings);
133
+ return { agent: "claude-code", path, action: updated ? "updated" : "installed", command };
134
+ }
135
+ async function uninstallClaudeHook() {
136
+ const path = claudeSettingsPath();
137
+ if (!existsSync(path))
138
+ return { agent: "claude-code", path, removed: 0 };
139
+ const settings = await readClaudeSettings(path);
140
+ const list = settings.hooks?.[HOOK_EVENT];
141
+ if (!settings.hooks || !list)
142
+ return { agent: "claude-code", path, removed: 0 };
143
+ let removed = 0;
144
+ const kept = [];
145
+ for (const group of list) {
146
+ const groupHooks = group.hooks ?? [];
147
+ const filtered = groupHooks.filter((entry) => !(typeof entry.command === "string" && entry.command.includes(HOOK_COMMAND_MARKER)));
148
+ removed += groupHooks.length - filtered.length;
149
+ if (filtered.length)
150
+ kept.push({ ...group, hooks: filtered });
151
+ }
152
+ if (kept.length)
153
+ settings.hooks[HOOK_EVENT] = kept;
154
+ else
155
+ delete settings.hooks[HOOK_EVENT];
156
+ await writeJsonFile(path, settings);
157
+ return { agent: "claude-code", path, removed };
158
+ }
159
+ function ethosCliCommand() {
160
+ return process.env.ETHOS_CLI_COMMAND || "ethos";
161
+ }
162
+ function claudeSettingsPath() {
163
+ const base = process.env.CLAUDE_CONFIG_DIR || join(homedir(), ".claude");
164
+ return join(base, "settings.json");
165
+ }
166
+ async function readClaudeSettings(path) {
167
+ try {
168
+ const raw = await readFile(path, "utf8");
169
+ const parsed = raw.trim() ? JSON.parse(raw) : {};
170
+ return parsed && typeof parsed === "object" ? parsed : {};
171
+ }
172
+ catch {
173
+ return {};
174
+ }
175
+ }
176
+ async function writeJsonFile(path, value) {
177
+ await mkdir(dirname(path), { recursive: true });
178
+ await writeFile(path, `${JSON.stringify(value, null, 2)}\n`);
179
+ }
180
+ function parseHookAgents(value) {
181
+ if (!value)
182
+ return ["claude-code"];
183
+ const parsed = [];
184
+ for (const raw of value.split(",").map((part) => part.trim()).filter(Boolean)) {
185
+ if (ALL_HOOK_AGENTS.includes(raw))
186
+ parsed.push(raw);
187
+ else
188
+ throw new Error(`unknown hook agent: ${raw} (supported: ${ALL_HOOK_AGENTS.join(", ")})`);
189
+ }
190
+ return parsed.length ? parsed : ["claude-code"];
191
+ }
192
+ function printHooksResult(command, result) {
193
+ printResult({ apiUrl: "", apiKey: "", json: isJsonMode(command) }, result);
194
+ }
195
+ //# sourceMappingURL=hooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../src/commands/hooks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAE1C,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,uBAAuB,EAA0B,MAAM,4BAA4B,CAAC;AAC7F,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,MAAM,KAAK,GAAG,0BAA0B,CAAC;AACzC,MAAM,UAAU,GAAG,kBAAkB,CAAC;AACtC,6EAA6E;AAC7E,oFAAoF;AACpF,MAAM,kBAAkB,GAAG,sCAAsC,CAAC;AAClE,qEAAqE;AACrE,MAAM,mBAAmB,GAAG,kBAAkB,CAAC;AAG/C,MAAM,eAAe,GAAoB,CAAC,aAAa,CAAC,CAAC;AAMzD,MAAM,UAAU,aAAa,CAAC,OAAgB;IAC5C,MAAM,KAAK,GAAG,OAAO;SAClB,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,oFAAoF,CAAC,CAAC;IAErG,iBAAiB,CAAC,KAAK,CAAC,CAAC;IACzB,eAAe,CAAC,KAAK,CAAC,CAAC;IACvB,iBAAiB,CAAC,KAAK,CAAC,CAAC;AAC3B,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,MAAc;IACpD,OAAO,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACzC,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAc;IACvC,MAAM,SAAS,GAAG,KAAK;SACpB,OAAO,CAAC,YAAY,CAAC;SACrB,WAAW,CACV,GAAG,UAAU,2BAA2B,KAAK,sGAAsG,CACpJ,CAAC;IACJ,SAAS,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE;QAC1B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,cAAc,EAAE,CAAC;YAChC,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC;gBAAE,OAAO,CAAC,8CAA8C;YAC5F,MAAM,UAAU,CAAC,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;gBACnD,MAAM,OAAO,GAAG,MAAM,uBAAuB,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,CAAC;gBACvF,aAAa,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;gBACnC,qBAAqB,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC;YACnD,CAAC,CAAC,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACP,wFAAwF;QAC1F,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,cAAc;IACrB,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK;QAAE,OAAO,EAAE,CAAC;IACnC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;QACpC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE;YAAE,OAAO,EAAE,CAAC;QAC3B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAyB,CAAC;QACrD,OAAO,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB,CAAC,OAA0B;IAClD,MAAM,SAAS,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,kBAAkB,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAChF,OAAO,CACL,+DAA+D,SAAS,4BAA4B;QACpG,oCAAoC,KAAK,mDAAmD;QAC5F,iBAAiB,OAAO,CAAC,aAAa,IAAI;QAC1C,uFAAuF;QACvF,sBAAsB,OAAO,CAAC,aAAa,6CAA6C,CACzF,CAAC;AACJ,CAAC;AAED,SAAS,qBAAqB,CAAC,iBAAyB;IACtD,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,IAAI,CAAC,SAAS,CAAC;QACb,kBAAkB,EAAE,EAAE,aAAa,EAAE,UAAU,EAAE,iBAAiB,EAAE;KACrE,CAAC,CACH,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,KAAc;IACrC,MAAM,OAAO,GAAG,KAAK;SAClB,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,gFAAgF,CAAC;SAC7F,MAAM,CACL,qBAAqB,EACrB,6DAA6D,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC1F,CAAC;IACJ,OAAO,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE;QACxB,MAAM,MAAM,GAAG,eAAe,CAAC,OAAO,CAAC,IAAI,EAAuB,CAAC,MAAM,CAAC,CAAC;QAC3E,MAAM,OAAO,GAAG,GAAG,eAAe,EAAE,mBAAmB,CAAC;QACxD,MAAM,OAAO,GAAG,EAAE,CAAC;QACnB,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,IAAI,KAAK,KAAK,aAAa;gBAAE,OAAO,CAAC,IAAI,CAAC,MAAM,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC;QAC9E,CAAC;QACD,gBAAgB,CAAC,OAAO,EAAE;YACxB,KAAK,EAAE,iCAAiC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,OAAO,GAAG;YAC9G,IAAI,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE;SACnC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAc;IACvC,MAAM,SAAS,GAAG,KAAK;SACpB,OAAO,CAAC,WAAW,CAAC;SACpB,WAAW,CAAC,+DAA+D,CAAC;SAC5E,MAAM,CACL,qBAAqB,EACrB,6DAA6D,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC1F,CAAC;IACJ,SAAS,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE;QAC1B,MAAM,MAAM,GAAG,eAAe,CAAC,SAAS,CAAC,IAAI,EAAuB,CAAC,MAAM,CAAC,CAAC;QAC7E,MAAM,OAAO,GAAG,EAAE,CAAC;QACnB,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,IAAI,KAAK,KAAK,aAAa;gBAAE,OAAO,CAAC,IAAI,CAAC,MAAM,mBAAmB,EAAE,CAAC,CAAC;QACzE,CAAC;QACD,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAC3E,gBAAgB,CAAC,SAAS,EAAE;YAC1B,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,oCAAoC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,oBAAoB;YAC5H,IAAI,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE;SAC1B,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,iBAAiB,CAC9B,OAAe;IAEf,MAAM,IAAI,GAAG,kBAAkB,EAAE,CAAC;IAClC,MAAM,QAAQ,GAAG,MAAM,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAChD,MAAM,QAAQ,GAAG,CAAC,QAAQ,CAAC,KAAK,KAAK,EAAE,CAAC,CAAC;IACzC,MAAM,IAAI,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC;IAE3C,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,KAAK,MAAM,KAAK,IAAI,IAAI,EAAE,CAAC;QACzB,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC;YACtC,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC;gBACrF,KAAK,CAAC,IAAI,GAAG,SAAS,CAAC;gBACvB,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;gBACxB,OAAO,GAAG,IAAI,CAAC;YACjB,CAAC;QACH,CAAC;IACH,CAAC;IACD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;IACvD,CAAC;IAED,MAAM,aAAa,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACpC,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,EAAE,OAAO,EAAE,CAAC;AAC5F,CAAC;AAED,KAAK,UAAU,mBAAmB;IAChC,MAAM,IAAI,GAAG,kBAAkB,EAAE,CAAC;IAClC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;IAEzE,MAAM,QAAQ,GAAG,MAAM,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAChD,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC,UAAU,CAAC,CAAC;IAC1C,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;IAEhF,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,MAAM,IAAI,GAAgB,EAAE,CAAC;IAC7B,KAAK,MAAM,KAAK,IAAI,IAAI,EAAE,CAAC;QACzB,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC;QACrC,MAAM,QAAQ,GAAG,UAAU,CAAC,MAAM,CAChC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC,CAC/F,CAAC;QACF,OAAO,IAAI,UAAU,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;QAC/C,IAAI,QAAQ,CAAC,MAAM;YAAE,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;IAChE,CAAC;IAED,IAAI,IAAI,CAAC,MAAM;QAAE,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC;;QAC9C,OAAO,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAEvC,MAAM,aAAa,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACpC,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;AACjD,CAAC;AAED,SAAS,eAAe;IACtB,OAAO,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,OAAO,CAAC;AAClD,CAAC;AAED,SAAS,kBAAkB;IACzB,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC;IACzE,OAAO,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;AACrC,CAAC;AAED,KAAK,UAAU,kBAAkB,CAAC,IAAY;IAC5C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACzC,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACjD,OAAO,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAE,MAAyB,CAAC,CAAC,CAAC,EAAE,CAAC;IAChF,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,IAAY,EAAE,KAAc;IACvD,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAChD,MAAM,SAAS,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;AAC/D,CAAC;AAED,SAAS,eAAe,CAAC,KAAyB;IAChD,IAAI,CAAC,KAAK;QAAE,OAAO,CAAC,aAAa,CAAC,CAAC;IACnC,MAAM,MAAM,GAAoB,EAAE,CAAC;IACnC,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;QAC9E,IAAK,eAA4B,CAAC,QAAQ,CAAC,GAAG,CAAC;YAAE,MAAM,CAAC,IAAI,CAAC,GAAoB,CAAC,CAAC;;YAC9E,MAAM,IAAI,KAAK,CAAC,uBAAuB,GAAG,gBAAgB,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAChG,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC;AAClD,CAAC;AAED,SAAS,gBAAgB,CAAC,OAAgB,EAAE,MAAwC;IAClF,WAAW,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,CAAC,OAAO,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;AAC7E,CAAC"}
@@ -0,0 +1,39 @@
1
+ import { buildFindPeopleFlowStart } from "./agent-clients.js";
2
+ import type { EthosClient } from "./client.js";
3
+ import type { EthosConfig } from "./config.js";
4
+ export type BrowserFlowHandoff = {
5
+ status: "pending" | "claimed";
6
+ handoff_token: string;
7
+ handoff_url: string;
8
+ destination_url: string;
9
+ destination_path: string;
10
+ flow: string;
11
+ org_id: string;
12
+ org_name: string;
13
+ agent_client?: string | null;
14
+ agent_surface?: string | null;
15
+ result_table_id?: string | null;
16
+ expires_at: string;
17
+ };
18
+ export type FindPeopleFlowOptions = {
19
+ agentClient?: string;
20
+ agentSurface?: string;
21
+ appUrl?: string;
22
+ codexThreadId?: string;
23
+ returnUrl?: string;
24
+ };
25
+ export type FindPeopleHandoff = ReturnType<typeof buildFindPeopleFlowStart> & {
26
+ org_id: string;
27
+ org_name: string;
28
+ handoff_token: string;
29
+ upload_url: string;
30
+ handoff_url: string;
31
+ destination_url: string;
32
+ destination_path: string;
33
+ };
34
+ /**
35
+ * Create a browser handoff for the find-people-at-companies flow. Shared by
36
+ * `flows start` and the `hooks eager-open` UserPromptSubmit handler so both go
37
+ * through the exact same flow-start logic and target the same environment.
38
+ */
39
+ export declare function createFindPeopleHandoff(client: EthosClient, config: EthosConfig, options: FindPeopleFlowOptions): Promise<FindPeopleHandoff>;
@@ -0,0 +1,37 @@
1
+ import { FIND_PEOPLE_AT_COMPANIES_FLOW, buildFindPeopleFlowStart, inferAppUrl, } from "./agent-clients.js";
2
+ import { jsonRequest } from "./command-helpers.js";
3
+ /**
4
+ * Create a browser handoff for the find-people-at-companies flow. Shared by
5
+ * `flows start` and the `hooks eager-open` UserPromptSubmit handler so both go
6
+ * through the exact same flow-start logic and target the same environment.
7
+ */
8
+ export async function createFindPeopleHandoff(client, config, options) {
9
+ const appUrl = options.appUrl || process.env.ETHOS_APP_URL || inferAppUrl(config.apiUrl);
10
+ const flowStart = buildFindPeopleFlowStart({
11
+ agentClient: options.agentClient,
12
+ agentSurface: options.agentSurface,
13
+ appUrl,
14
+ codexThreadId: options.codexThreadId,
15
+ returnUrl: options.returnUrl,
16
+ });
17
+ const destinationUrl = new URL(flowStart.upload_url);
18
+ const destinationPath = `${destinationUrl.pathname}${destinationUrl.search}`;
19
+ const handoff = await client.request("/v1/auth/browser-handoffs", jsonRequest("POST", {
20
+ app_url: appUrl.replace(/\/+$/, ""),
21
+ destination_path: destinationPath,
22
+ flow: FIND_PEOPLE_AT_COMPANIES_FLOW,
23
+ agent_client: flowStart.agent_client,
24
+ agent_surface: flowStart.agent_surface,
25
+ }));
26
+ return {
27
+ ...flowStart,
28
+ org_id: handoff.org_id,
29
+ org_name: handoff.org_name,
30
+ handoff_token: handoff.handoff_token,
31
+ upload_url: handoff.handoff_url,
32
+ handoff_url: handoff.handoff_url,
33
+ destination_url: handoff.destination_url,
34
+ destination_path: handoff.destination_path,
35
+ };
36
+ }
37
+ //# sourceMappingURL=find-people-flow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"find-people-flow.js","sourceRoot":"","sources":["../../src/lib/find-people-flow.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,6BAA6B,EAC7B,wBAAwB,EACxB,WAAW,GACZ,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAoCnD;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,MAAmB,EACnB,MAAmB,EACnB,OAA8B;IAE9B,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACzF,MAAM,SAAS,GAAG,wBAAwB,CAAC;QACzC,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,YAAY,EAAE,OAAO,CAAC,YAAY;QAClC,MAAM;QACN,aAAa,EAAE,OAAO,CAAC,aAAa;QACpC,SAAS,EAAE,OAAO,CAAC,SAAS;KAC7B,CAAC,CAAC;IACH,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;IACrD,MAAM,eAAe,GAAG,GAAG,cAAc,CAAC,QAAQ,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC;IAC7E,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,OAAO,CAClC,2BAA2B,EAC3B,WAAW,CAAC,MAAM,EAAE;QAClB,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;QACnC,gBAAgB,EAAE,eAAe;QACjC,IAAI,EAAE,6BAA6B;QACnC,YAAY,EAAE,SAAS,CAAC,YAAY;QACpC,aAAa,EAAE,SAAS,CAAC,aAAa;KACvC,CAAC,CACH,CAAC;IACF,OAAO;QACL,GAAG,SAAS;QACZ,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,aAAa,EAAE,OAAO,CAAC,aAAa;QACpC,UAAU,EAAE,OAAO,CAAC,WAAW;QAC/B,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,eAAe,EAAE,OAAO,CAAC,eAAe;QACxC,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;KAC3C,CAAC;AACJ,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Open a URL in the user's default browser without blocking the CLI.
3
+ * Failures are swallowed because callers always print the URL as a fallback.
4
+ */
5
+ export declare function openInBrowser(url: string): void;
@@ -0,0 +1,21 @@
1
+ import { spawn } from "node:child_process";
2
+ /**
3
+ * Open a URL in the user's default browser without blocking the CLI.
4
+ * Failures are swallowed because callers always print the URL as a fallback.
5
+ */
6
+ export function openInBrowser(url) {
7
+ const command = process.platform === "darwin" ? "open" : process.platform === "win32" ? "cmd" : "xdg-open";
8
+ const args = process.platform === "win32" ? ["/c", "start", "", url] : [url];
9
+ try {
10
+ const child = spawn(command, args, { detached: true, stdio: "ignore" });
11
+ // A missing opener (e.g. headless Linux without xdg-open) surfaces as an
12
+ // async error event; swallow it so it cannot crash the CLI. The printed
13
+ // URL remains the fallback.
14
+ child.once("error", () => { });
15
+ child.unref();
16
+ }
17
+ catch {
18
+ // The URL was already printed, so the user can open it manually.
19
+ }
20
+ }
21
+ //# sourceMappingURL=open-browser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"open-browser.js","sourceRoot":"","sources":["../../src/lib/open-browser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAE3C;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,GAAW;IACvC,MAAM,OAAO,GAAG,OAAO,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC;IAC3G,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAC7E,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QACxE,yEAAyE;QACzE,wEAAwE;QACxE,4BAA4B;QAC5B,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAC9B,KAAK,CAAC,KAAK,EAAE,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACP,iEAAiE;IACnE,CAAC;AACH,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ethos-cli",
3
- "version": "0.3.0",
3
+ "version": "0.5.0",
4
4
  "description": "Commander-based CLI for Ethos table operations",
5
5
  "homepage": "https://github.com/cluster-software/ethos#readme",
6
6
  "repository": {
@@ -11,10 +11,11 @@ pass `--api-url` for local development or an explicitly requested environment.
11
11
 
12
12
  ## Required CLI
13
13
 
14
- The Ethos CLI (`ethos`) is required. The first command in this skill is:
14
+ The Ethos CLI (`ethos`) is required. The first command in this skill opens the
15
+ upload browser straight away:
15
16
 
16
17
  ```sh
17
- ethos auth status --json
18
+ ethos flows start find-people-at-companies --agent-client auto --open --json
18
19
  ```
19
20
 
20
21
  If that command fails because `ethos` is not installed or not available on
@@ -24,16 +25,20 @@ If that command fails because `ethos` is not installed or not available on
24
25
  npm install -g ethos-cli@latest --prefer-online
25
26
  ```
26
27
 
28
+ If it fails because the CLI is not authenticated, run
29
+ `ethos auth login --agent-client auto`, then re-run the `flows start` command.
30
+ Do not run a separate `ethos auth status` first; `flows start` already requires
31
+ auth and surfaces a clear error when login is needed.
32
+
27
33
  ## Flow
28
34
 
29
35
  Keep CSV upload in the browser-based Ethos product flow:
30
36
 
31
- 1. Ask the Ethos CLI for the upload flow metadata.
32
- 2. Open the returned upload URL in the browser available to this agent client.
33
- 3. Immediately ask the user for ICP, buying signals, person targets, and max contacts while they upload.
34
- 4. Capture the uploaded table id from the upload-complete table URL.
35
- 5. Once the brief is ready, inspect the table, create the `people_sourcing` agent, and create the agent-client-created column with the CLI.
36
- 6. Run the column for the FIRST 3 ROWS ONLY. Tell the user you're running for 3 rows to see if the results are good. If yes, the next step is to run on the whole table. If not, refine the agent based on their feedback so it finds the right people.
37
+ 1. Start the flow and open the upload browser in one command (`ethos flows start … --open`). Save the `handoff_token` from the response.
38
+ 2. Immediately ask the user for ICP, buying signals, person targets, and max contacts while they upload.
39
+ 3. Capture the uploaded table id automatically with `ethos flows wait "$HANDOFF_TOKEN" --json`. Do not ask the user to paste the table URL unless `flows wait` cannot recover.
40
+ 4. Once the brief is ready, inspect the table, create the `people_sourcing` agent, and create the agent-client-created column with the CLI.
41
+ 5. Run the column for the FIRST 3 ROWS ONLY. Tell the user you're running for 3 rows to see if the results are good. If yes, the next step is to run on the whole table. If not, refine the agent based on their feedback so it finds the right people.
37
42
 
38
43
  Do not run `ethos tables import-csv` for this skill unless the user explicitly
39
44
  asks for a CLI-only/non-browser fallback. The browser upload is part of the
@@ -41,31 +46,36 @@ product flow and must not be replaced by CLI import.
41
46
 
42
47
  ## Authenticate
43
48
 
44
- Check auth first:
45
-
46
- ```sh
47
- ethos auth status --json
48
- ```
49
-
50
- If unauthenticated, run:
49
+ Authentication is handled implicitly by `flows start`; do not run a separate
50
+ `ethos auth status` pre-check. Only if `flows start` reports that the CLI is not
51
+ authenticated, run:
51
52
 
52
53
  ```sh
53
54
  ethos auth login --agent-client auto
54
55
  ```
55
56
 
56
- The browser claim flow handles production auth. Do not ask for API tokens unless
57
- the user explicitly wants a non-browser setup.
57
+ then re-run the `flows start` command. The browser claim flow handles production
58
+ auth. Do not ask for API tokens unless the user explicitly wants a non-browser
59
+ setup.
58
60
 
59
61
  ## Start Upload Flow
60
62
 
61
- Start the browser handoff flow through the CLI abstraction instead of constructing client-specific URLs:
63
+ **Reuse a pre-started flow first.** If the conversation already contains an
64
+ injected Ethos handoff — for example a `UserPromptSubmit` hook reporting that the
65
+ upload browser is already opening and providing a `handoff_token` — do NOT run
66
+ `ethos flows start` again. Reuse that `handoff_token`: skip to the brief and then
67
+ `ethos flows wait <handoff_token>`. Only run the command below when no such
68
+ handoff has been provided.
69
+
70
+ Start the browser handoff flow through the CLI abstraction instead of constructing client-specific URLs. Pass `--open` so the CLI opens the upload browser itself:
62
71
 
63
72
  ```sh
64
- ethos flows start find-people-at-companies --agent-client auto --json
73
+ ethos flows start find-people-at-companies --agent-client auto --open --json
65
74
  ```
66
75
 
67
76
  Save these fields from `response`:
68
77
 
78
+ - `handoff_token` (needed for `ethos flows wait`)
69
79
  - `upload_url`
70
80
  - `agent_client`
71
81
  - `agent_client_label`
@@ -73,7 +83,8 @@ Save these fields from `response`:
73
83
  - `next_prompt`
74
84
 
75
85
  The `upload_url` is a handoff URL that verifies the browser session and
76
- workspace before redirecting to the CSV upload modal.
86
+ workspace before redirecting to the CSV upload modal. With `--open`, the CLI
87
+ already launched it in the default browser.
77
88
 
78
89
  If the detected client is wrong, rerun the same command with an explicit client,
79
90
  such as `--agent-client codex` or `--agent-client claude-desktop`.
@@ -83,50 +94,55 @@ session.
83
94
 
84
95
  ## Open Browser Upload
85
96
 
86
- Open `response.upload_url` according to the active client:
87
-
88
- - In Codex, use the Browser plugin / in-app Browser. Keep the upload and table
89
- view in that Codex browser surface. The upload URL already opens the CSV
90
- upload modal, so do not click `Import CSV` or take any other browser action
91
- after navigating unless the user asks for help.
92
- - In Claude Code, Cursor, or another non-Codex shell-based client, use the
93
- OS/browser shell opener first:
97
+ With `--open`, the CLI already launched `response.upload_url` in the default
98
+ browser and the CSV upload modal opens directly. You usually do not open
99
+ anything yourself. Handle the exceptions per client:
94
100
 
95
- ```sh
96
- open "$UPLOAD_URL"
97
- ```
101
+ - In Codex, the in-app Browser is the right surface. If `--open` did not surface
102
+ the page there, open `response.upload_url` in the Codex Browser. Do not click
103
+ `Import CSV` or take other browser actions after navigating unless the user
104
+ asks for help.
105
+ - In Claude Code, Cursor, or another shell-based client, `--open` uses the OS
106
+ opener. If it failed (for example, no desktop session), run `open "$UPLOAD_URL"`
107
+ yourself, and only fall back to MCP browser tools, Chrome connectors, or in-app
108
+ browser plugins if that also fails. If every option fails, show the URL and ask
109
+ the user to open it.
98
110
 
99
- Do this before using MCP browser tools, Chrome connectors, in-app browser
100
- plugins, or other browser automation connectors. Only use those connectors if
101
- `open "$UPLOAD_URL"` fails or is unavailable in the current environment. If
102
- all browser-opening options fail, show the URL to the user and ask them to
103
- open it.
104
-
105
- After navigating to the upload URL, immediately ask `response.next_prompt`. If
106
- the flow response is not available for some reason, ask:
111
+ Right after the browser opens, immediately ask `response.next_prompt`. If the
112
+ flow response is not available for some reason, ask:
107
113
 
108
114
  ```text
109
115
  Please describe your ICP, any signals that would make them a good fit for your product or service, and where that data may live. You can keep typing while the CSV uploads.
110
116
  ```
111
117
 
112
- If you can inspect the browser URL, poll it every 2 seconds while the user
113
- uploads and answers. The upload-completion indicator is this URL shape:
118
+ ## Capture The Uploaded Table
114
119
 
115
- ```text
116
- /tables/<TABLE_ID>?agent_flow=find-people-at-companies&uploaded=1&sidebar=collapsed&agent_client=<CLIENT>[...]
120
+ When the user uploads the CSV, Ethos links the new table to this flow. Get the
121
+ table id by waiting on the handoff instead of asking for a pasted URL:
122
+
123
+ ```sh
124
+ ethos flows wait "$HANDOFF_TOKEN" --json
117
125
  ```
118
126
 
119
- When the browser URL matches that shape, save the table id from the URL. If you
120
- cannot inspect the browser URL in this client, ask the user to return with or
121
- paste the uploaded table URL after the upload completes, then extract the table
122
- id from that URL. Start collecting the targeting brief immediately. Do not run
123
- table inspection or `source-people --help` just because the upload completed;
124
- if those CLI commands are needed, run them later while setting up the agent and
125
- table run.
127
+ This blocks until the upload completes (up to `--timeout`, default 300s) and
128
+ returns `response.table_id` and `response.org_id`. Save both.
129
+
130
+ - Run it after you have asked for the brief ideally once the user replies or
131
+ says they have uploaded so the table is usually already there and the
132
+ command returns right away.
133
+ - If it times out because the user has not uploaded yet, just re-run the same
134
+ command. The upload window is about 10 minutes from `flows start`.
135
+ - Only fall back if `flows wait` reports the flow expired or keeps timing out:
136
+ if you can inspect the browser URL, the completed shape is
137
+ `/tables/<TABLE_ID>?agent_flow=find-people-at-companies&uploaded=1&...`;
138
+ otherwise ask the user to paste the uploaded table URL and extract the id.
139
+
140
+ Do not run table inspection or `source-people --help` just because the upload
141
+ completed; run those later while setting up the agent and table run.
126
142
 
127
143
  ## Collect The Brief
128
144
 
129
- After the upload-complete URL appears, ask only for anything still missing:
145
+ After `flows wait` returns the table id, ask only for anything still missing:
130
146
 
131
147
  - ICP fit criteria for companies.
132
148
  - Buying-signal criteria to prioritize.