ethos-cli 0.7.1 → 0.7.2
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/commands/hooks.d.ts
CHANGED
|
@@ -1,3 +1,7 @@
|
|
|
1
1
|
import type { Command } from "commander";
|
|
2
|
+
import { type AgentClientId } from "../lib/agent-clients.js";
|
|
3
|
+
import { type FindPeopleHandoff } from "../lib/find-people-flow.js";
|
|
2
4
|
export declare function registerHooks(program: Command): void;
|
|
3
5
|
export declare function matchesEagerOpenTrigger(prompt: string): boolean;
|
|
6
|
+
export declare function eagerOpenContext(handoff: FindPeopleHandoff, clientId: AgentClientId): string;
|
|
7
|
+
export declare function findBundledBrowserSkillPath(codexHome?: string): string | null;
|
package/dist/commands/hooks.js
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
import { readFileSync } from "node:fs";
|
|
1
|
+
import { existsSync, readFileSync, readdirSync } from "node:fs";
|
|
2
|
+
import { homedir } from "node:os";
|
|
3
|
+
import { join } from "node:path";
|
|
2
4
|
import { resolveAgentClientId } from "../lib/agent-clients.js";
|
|
3
5
|
import { withClient } from "../lib/command-helpers.js";
|
|
4
6
|
import { isJsonMode } from "../lib/config.js";
|
|
@@ -8,6 +10,8 @@ import { openInBrowser } from "../lib/open-browser.js";
|
|
|
8
10
|
import { printResult } from "../lib/output.js";
|
|
9
11
|
const SKILL = "find-people-at-companies";
|
|
10
12
|
const HOOK_EVENT = "UserPromptSubmit";
|
|
13
|
+
const BROWSER_SKILL_NAME = "browser:control-in-app-browser";
|
|
14
|
+
const BROWSER_SKILL_SUFFIX = join("skills", "control-in-app-browser", "SKILL.md");
|
|
11
15
|
// Explicit invocation only: Codex's skill-link shape must appear in the prompt.
|
|
12
16
|
// Mentions in prose, pasted transcripts, and debug discussion should no-op.
|
|
13
17
|
const EAGER_OPEN_TRIGGER = /\[\$find-people-at-companies\]\([^)]*\/find-people-at-companies\/SKILL\.md\)/i;
|
|
@@ -60,12 +64,12 @@ function readHookPrompt() {
|
|
|
60
64
|
return "";
|
|
61
65
|
}
|
|
62
66
|
}
|
|
63
|
-
function eagerOpenContext(handoff, clientId) {
|
|
67
|
+
export function eagerOpenContext(handoff, clientId) {
|
|
64
68
|
const workspace = handoff.org_name ? ` in workspace "${handoff.org_name}"` : "";
|
|
65
69
|
const browserInstruction = clientId === "codex"
|
|
66
70
|
? `Open upload_url in the Codex in-app Browser now.`
|
|
67
71
|
: `The upload browser is already opening in the OS browser.`;
|
|
68
|
-
|
|
72
|
+
const baseContext = [
|
|
69
73
|
`ETHOS_FIND_PEOPLE_HANDOFF_READY`,
|
|
70
74
|
`This is the hook-created upload handoff for the current ${SKILL} request${workspace}.`,
|
|
71
75
|
`Do not say no hook handoff was injected.`,
|
|
@@ -79,6 +83,12 @@ function eagerOpenContext(handoff, clientId) {
|
|
|
79
83
|
`org_name=${handoff.org_name}`,
|
|
80
84
|
`Next: ask the user for their ICP and buying-signal brief while they upload, then run \`ethos flows wait ${handoff.handoff_token} --json\` to capture the uploaded table id.`,
|
|
81
85
|
].join("\n");
|
|
86
|
+
if (clientId !== "codex")
|
|
87
|
+
return baseContext;
|
|
88
|
+
const browserSkillContext = injectedBrowserSkillContext();
|
|
89
|
+
if (!browserSkillContext)
|
|
90
|
+
return baseContext;
|
|
91
|
+
return `${baseContext}\n\n${browserSkillContext}`;
|
|
82
92
|
}
|
|
83
93
|
function eagerOpenFailureContext(error) {
|
|
84
94
|
const message = error instanceof Error ? error.message : String(error);
|
|
@@ -90,6 +100,63 @@ function eagerOpenFailureContext(error) {
|
|
|
90
100
|
return (`Ethos find-people: the eager handoff hook could not create an upload flow (${message}). ` +
|
|
91
101
|
`Continue with the skill fallback; if auth is missing, run \`ethos auth login --agent-client auto\` before \`ethos flows start\`.`);
|
|
92
102
|
}
|
|
103
|
+
function injectedBrowserSkillContext() {
|
|
104
|
+
const path = findBundledBrowserSkillPath();
|
|
105
|
+
if (!path)
|
|
106
|
+
return null;
|
|
107
|
+
try {
|
|
108
|
+
const skillText = readFileSync(path, "utf8").trim();
|
|
109
|
+
if (!skillText)
|
|
110
|
+
return null;
|
|
111
|
+
return [
|
|
112
|
+
`The following block is the complete local ${BROWSER_SKILL_NAME} skill, injected by the Ethos ${HOOK_EVENT} hook before this turn.`,
|
|
113
|
+
`Use these instructions immediately to open the upload URL above in the Codex in-app Browser.`,
|
|
114
|
+
`Do not read or load ${BROWSER_SKILL_NAME} again unless this injected copy appears missing or truncated.`,
|
|
115
|
+
"",
|
|
116
|
+
`----- BEGIN injected ${BROWSER_SKILL_NAME} SKILL.md (${path}) -----`,
|
|
117
|
+
skillText,
|
|
118
|
+
`----- END injected ${BROWSER_SKILL_NAME} SKILL.md -----`,
|
|
119
|
+
].join("\n");
|
|
120
|
+
}
|
|
121
|
+
catch {
|
|
122
|
+
return null;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
export function findBundledBrowserSkillPath(codexHome = process.env.CODEX_HOME || join(homedir(), ".codex")) {
|
|
126
|
+
const browserCacheRoot = join(codexHome, "plugins", "cache", "openai-bundled", "browser");
|
|
127
|
+
let entries;
|
|
128
|
+
try {
|
|
129
|
+
entries = readdirSync(browserCacheRoot, { withFileTypes: true });
|
|
130
|
+
}
|
|
131
|
+
catch {
|
|
132
|
+
return null;
|
|
133
|
+
}
|
|
134
|
+
const candidateDirs = entries
|
|
135
|
+
.filter((entry) => entry.isDirectory())
|
|
136
|
+
.map((entry) => entry.name)
|
|
137
|
+
.sort(compareVersionish)
|
|
138
|
+
.reverse();
|
|
139
|
+
for (const versionDir of candidateDirs) {
|
|
140
|
+
const candidate = join(browserCacheRoot, versionDir, BROWSER_SKILL_SUFFIX);
|
|
141
|
+
if (existsSync(candidate))
|
|
142
|
+
return candidate;
|
|
143
|
+
}
|
|
144
|
+
return null;
|
|
145
|
+
}
|
|
146
|
+
function compareVersionish(left, right) {
|
|
147
|
+
const leftParts = left.split(".").map((part) => Number.parseInt(part, 10));
|
|
148
|
+
const rightParts = right.split(".").map((part) => Number.parseInt(part, 10));
|
|
149
|
+
const partCount = Math.max(leftParts.length, rightParts.length);
|
|
150
|
+
for (let index = 0; index < partCount; index += 1) {
|
|
151
|
+
const leftPart = leftParts[index] ?? 0;
|
|
152
|
+
const rightPart = rightParts[index] ?? 0;
|
|
153
|
+
if (Number.isNaN(leftPart) || Number.isNaN(rightPart))
|
|
154
|
+
return left.localeCompare(right);
|
|
155
|
+
if (leftPart !== rightPart)
|
|
156
|
+
return leftPart - rightPart;
|
|
157
|
+
}
|
|
158
|
+
return left.localeCompare(right);
|
|
159
|
+
}
|
|
93
160
|
function emitAdditionalContext(additionalContext) {
|
|
94
161
|
process.stdout.write(JSON.stringify({
|
|
95
162
|
hookSpecificOutput: { hookEventName: HOOK_EVENT, additionalContext },
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../src/commands/hooks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../src/commands/hooks.ts"],"names":[],"mappings":"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"}
|