@tickernelz/paperclip-pro-adapter-grok-local 2026.925.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/LICENSE +22 -0
- package/dist/cli/format-event.d.ts +2 -0
- package/dist/cli/format-event.d.ts.map +1 -0
- package/dist/cli/format-event.js +55 -0
- package/dist/cli/format-event.js.map +1 -0
- package/dist/cli/format-event.test.d.ts +2 -0
- package/dist/cli/format-event.test.d.ts.map +1 -0
- package/dist/cli/format-event.test.js +19 -0
- package/dist/cli/format-event.test.js.map +1 -0
- package/dist/cli/index.d.ts +2 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +2 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +53 -0
- package/dist/index.js.map +1 -0
- package/dist/server/adapter-auth-promotion.d.ts +87 -0
- package/dist/server/adapter-auth-promotion.d.ts.map +1 -0
- package/dist/server/adapter-auth-promotion.js +294 -0
- package/dist/server/adapter-auth-promotion.js.map +1 -0
- package/dist/server/adapter-auth-promotion.test.d.ts +2 -0
- package/dist/server/adapter-auth-promotion.test.d.ts.map +1 -0
- package/dist/server/adapter-auth-promotion.test.js +563 -0
- package/dist/server/adapter-auth-promotion.test.js.map +1 -0
- package/dist/server/device-login-parse.d.ts +23 -0
- package/dist/server/device-login-parse.d.ts.map +1 -0
- package/dist/server/device-login-parse.js +148 -0
- package/dist/server/device-login-parse.js.map +1 -0
- package/dist/server/device-login-parse.test.d.ts +2 -0
- package/dist/server/device-login-parse.test.d.ts.map +1 -0
- package/dist/server/device-login-parse.test.js +146 -0
- package/dist/server/device-login-parse.test.js.map +1 -0
- package/dist/server/execute.d.ts +3 -0
- package/dist/server/execute.d.ts.map +1 -0
- package/dist/server/execute.js +572 -0
- package/dist/server/execute.js.map +1 -0
- package/dist/server/execute.test.d.ts +2 -0
- package/dist/server/execute.test.d.ts.map +1 -0
- package/dist/server/execute.test.js +731 -0
- package/dist/server/execute.test.js.map +1 -0
- package/dist/server/grok-auth-copyback.d.ts +48 -0
- package/dist/server/grok-auth-copyback.d.ts.map +1 -0
- package/dist/server/grok-auth-copyback.js +92 -0
- package/dist/server/grok-auth-copyback.js.map +1 -0
- package/dist/server/grok-auth-copyback.test.d.ts +2 -0
- package/dist/server/grok-auth-copyback.test.d.ts.map +1 -0
- package/dist/server/grok-auth-copyback.test.js +246 -0
- package/dist/server/grok-auth-copyback.test.js.map +1 -0
- package/dist/server/grok-auth-merge-decision.cjs +157 -0
- package/dist/server/grok-auth-merge-decision.d.ts +21 -0
- package/dist/server/grok-auth-merge-decision.d.ts.map +1 -0
- package/dist/server/grok-auth-merge-decision.js +58 -0
- package/dist/server/grok-auth-merge-decision.js.map +1 -0
- package/dist/server/grok-auth-merge-decision.test.d.ts +2 -0
- package/dist/server/grok-auth-merge-decision.test.d.ts.map +1 -0
- package/dist/server/grok-auth-merge-decision.test.js +189 -0
- package/dist/server/grok-auth-merge-decision.test.js.map +1 -0
- package/dist/server/grok-home.d.ts +57 -0
- package/dist/server/grok-home.d.ts.map +1 -0
- package/dist/server/grok-home.js +145 -0
- package/dist/server/grok-home.js.map +1 -0
- package/dist/server/grok-home.test.d.ts +2 -0
- package/dist/server/grok-home.test.d.ts.map +1 -0
- package/dist/server/grok-home.test.js +109 -0
- package/dist/server/grok-home.test.js.map +1 -0
- package/dist/server/index.d.ts +12 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +67 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/parse.d.ts +15 -0
- package/dist/server/parse.d.ts.map +1 -0
- package/dist/server/parse.js +93 -0
- package/dist/server/parse.js.map +1 -0
- package/dist/server/parse.test.d.ts +2 -0
- package/dist/server/parse.test.d.ts.map +1 -0
- package/dist/server/parse.test.js +82 -0
- package/dist/server/parse.test.js.map +1 -0
- package/dist/server/skills.d.ts +4 -0
- package/dist/server/skills.d.ts.map +1 -0
- package/dist/server/skills.js +21 -0
- package/dist/server/skills.js.map +1 -0
- package/dist/server/test.d.ts +9 -0
- package/dist/server/test.d.ts.map +1 -0
- package/dist/server/test.js +362 -0
- package/dist/server/test.js.map +1 -0
- package/dist/server/test.test.d.ts +2 -0
- package/dist/server/test.test.d.ts.map +1 -0
- package/dist/server/test.test.js +293 -0
- package/dist/server/test.test.js.map +1 -0
- package/dist/shared/turn-boundary.d.ts +7 -0
- package/dist/shared/turn-boundary.d.ts.map +1 -0
- package/dist/shared/turn-boundary.js +44 -0
- package/dist/shared/turn-boundary.js.map +1 -0
- package/dist/shared/turn-boundary.test.d.ts +2 -0
- package/dist/shared/turn-boundary.test.d.ts.map +1 -0
- package/dist/shared/turn-boundary.test.js +43 -0
- package/dist/shared/turn-boundary.test.js.map +1 -0
- package/dist/ui/build-config.d.ts +3 -0
- package/dist/ui/build-config.d.ts.map +1 -0
- package/dist/ui/build-config.js +29 -0
- package/dist/ui/build-config.js.map +1 -0
- package/dist/ui/build-config.test.d.ts +2 -0
- package/dist/ui/build-config.test.d.ts.map +1 -0
- package/dist/ui/build-config.test.js +26 -0
- package/dist/ui/build-config.test.js.map +1 -0
- package/dist/ui/index.d.ts +3 -0
- package/dist/ui/index.d.ts.map +1 -0
- package/dist/ui/index.js +3 -0
- package/dist/ui/index.js.map +1 -0
- package/dist/ui/parse-stdout.d.ts +7 -0
- package/dist/ui/parse-stdout.d.ts.map +1 -0
- package/dist/ui/parse-stdout.js +76 -0
- package/dist/ui/parse-stdout.js.map +1 -0
- package/dist/ui/parse-stdout.test.d.ts +2 -0
- package/dist/ui/parse-stdout.test.d.ts.map +1 -0
- package/dist/ui/parse-stdout.test.js +62 -0
- package/dist/ui/parse-stdout.test.js.map +1 -0
- package/package.json +58 -0
|
@@ -0,0 +1,572 @@
|
|
|
1
|
+
import fs from "node:fs/promises";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { fileURLToPath } from "node:url";
|
|
4
|
+
import { adapterExecutionTargetIsRemote, adapterExecutionTargetRemoteCwd, adapterExecutionTargetSessionIdentity, adapterExecutionTargetSessionMatches, describeAdapterExecutionTarget, ensureAdapterExecutionTargetCommandResolvable, ensureAdapterExecutionTargetRuntimeCommandInstalled, overrideAdapterExecutionTargetRemoteCwd, prepareAdapterExecutionTargetRuntime, readAdapterExecutionTarget, resolveAdapterExecutionTargetCommandForLogs, resolveAdapterExecutionTargetTimeoutSec, runAdapterExecutionTargetProcess, } from "@tickernelz/paperclip-pro-adapter-utils/execution-target";
|
|
5
|
+
import { asBoolean, asNumber, asString, asStringArray, buildInvocationEnvForLogs, buildPaperclipEnv, buildRuntimeToolsEnv, ensureAbsoluteDirectory, ensurePathInEnv, joinPromptSections, materializePaperclipSkillCopy, parseObject, readPaperclipIssueWorkModeFromContext, readPaperclipRuntimeSkillEntries, renderTemplate, renderPaperclipWakePrompt, selectPaperclipTaskMarkdown, selectInitialCommunicationGuidance, isPaperclipRecoveryWakePayload, resolveLegacyPaperclipDesiredSkillNames, refreshPaperclipWorkspaceEnvForExecution, DEFAULT_PAPERCLIP_AGENT_PROMPT_TEMPLATE, DEFAULT_PAPERCLIP_CONVERSATION_PROMPT_TEMPLATE, } from "@tickernelz/paperclip-pro-adapter-utils/server-utils";
|
|
6
|
+
import { DEFAULT_GROK_LOCAL_MODEL } from "../index.js";
|
|
7
|
+
import { copyBackGrokAuth } from "./grok-auth-copyback.js";
|
|
8
|
+
import { grokHomeHasUsableAuth, resolveManagedGrokHomeDir, stageGrokHomeForSync } from "./grok-home.js";
|
|
9
|
+
import { isGrokUnknownSessionError, parseGrokJsonl } from "./parse.js";
|
|
10
|
+
const __moduleDir = path.dirname(fileURLToPath(import.meta.url));
|
|
11
|
+
function firstNonEmptyLine(text) {
|
|
12
|
+
return (text
|
|
13
|
+
.split(/\r?\n/)
|
|
14
|
+
.map((line) => line.trim())
|
|
15
|
+
.find(Boolean) ?? "");
|
|
16
|
+
}
|
|
17
|
+
function hasNonEmptyEnvValue(env, key) {
|
|
18
|
+
const raw = env[key];
|
|
19
|
+
return typeof raw === "string" && raw.trim().length > 0;
|
|
20
|
+
}
|
|
21
|
+
function renderPaperclipEnvNote(env) {
|
|
22
|
+
const paperclipKeys = Object.keys(env)
|
|
23
|
+
.filter((key) => key.startsWith("PAPERCLIP_"))
|
|
24
|
+
.sort();
|
|
25
|
+
if (paperclipKeys.length === 0)
|
|
26
|
+
return "";
|
|
27
|
+
return [
|
|
28
|
+
"Paperclip runtime note:",
|
|
29
|
+
`The following PAPERCLIP_* environment variables are available in this run: ${paperclipKeys.join(", ")}`,
|
|
30
|
+
"Do not assume these variables are missing without checking your shell environment.",
|
|
31
|
+
"",
|
|
32
|
+
"",
|
|
33
|
+
].join("\n");
|
|
34
|
+
}
|
|
35
|
+
function renderApiAccessNote(env) {
|
|
36
|
+
if (!hasNonEmptyEnvValue(env, "PAPERCLIP_API_URL") || !hasNonEmptyEnvValue(env, "PAPERCLIP_API_KEY"))
|
|
37
|
+
return "";
|
|
38
|
+
return [
|
|
39
|
+
"Paperclip API access note:",
|
|
40
|
+
"Use shell commands with curl to make Paperclip API requests when needed.",
|
|
41
|
+
"Include X-Paperclip-Run-Id on mutating requests.",
|
|
42
|
+
"",
|
|
43
|
+
"",
|
|
44
|
+
].join("\n");
|
|
45
|
+
}
|
|
46
|
+
async function pathExists(candidate) {
|
|
47
|
+
return fs.access(candidate).then(() => true).catch(() => false);
|
|
48
|
+
}
|
|
49
|
+
async function stageGrokProjectAssets(input) {
|
|
50
|
+
const cleanup = [];
|
|
51
|
+
const ensureCleanupDir = (candidate) => {
|
|
52
|
+
cleanup.push({ kind: "dir", path: candidate });
|
|
53
|
+
};
|
|
54
|
+
const ensureCleanupFile = (candidate) => {
|
|
55
|
+
cleanup.push({ kind: "file", path: candidate });
|
|
56
|
+
};
|
|
57
|
+
let stagedInstructionsPath = null;
|
|
58
|
+
let rulesFilePath = null;
|
|
59
|
+
let stagedSkillsCount = 0;
|
|
60
|
+
const instructionsTarget = path.join(input.cwd, "Agents.md");
|
|
61
|
+
if (input.instructionsFilePath) {
|
|
62
|
+
if (!await pathExists(instructionsTarget)) {
|
|
63
|
+
await fs.copyFile(input.instructionsFilePath, instructionsTarget);
|
|
64
|
+
ensureCleanupFile(instructionsTarget);
|
|
65
|
+
stagedInstructionsPath = instructionsTarget;
|
|
66
|
+
}
|
|
67
|
+
else if (path.resolve(instructionsTarget) !== path.resolve(input.instructionsFilePath)) {
|
|
68
|
+
rulesFilePath = input.instructionsFilePath;
|
|
69
|
+
await input.onLog("stdout", `[paperclip] Grok workspace already contains ${instructionsTarget}; using --rules @${input.instructionsFilePath} instead of overwriting it.\n`);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
const canonicalAgents = path.join(input.cwd, "AGENTS.md");
|
|
74
|
+
if (!await pathExists(instructionsTarget) && await pathExists(canonicalAgents)) {
|
|
75
|
+
await fs.copyFile(canonicalAgents, instructionsTarget);
|
|
76
|
+
ensureCleanupFile(instructionsTarget);
|
|
77
|
+
stagedInstructionsPath = instructionsTarget;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
const desiredSet = new Set(input.desiredSkillNames);
|
|
81
|
+
const selectedSkills = input.skillEntries.filter((entry) => desiredSet.has(entry.key));
|
|
82
|
+
if (selectedSkills.length > 0) {
|
|
83
|
+
const claudeDir = path.join(input.cwd, ".claude");
|
|
84
|
+
const skillsRoot = path.join(claudeDir, "skills");
|
|
85
|
+
if (!await pathExists(claudeDir)) {
|
|
86
|
+
await fs.mkdir(claudeDir, { recursive: true });
|
|
87
|
+
ensureCleanupDir(claudeDir);
|
|
88
|
+
}
|
|
89
|
+
if (!await pathExists(skillsRoot)) {
|
|
90
|
+
await fs.mkdir(skillsRoot, { recursive: true });
|
|
91
|
+
ensureCleanupDir(skillsRoot);
|
|
92
|
+
}
|
|
93
|
+
for (const skill of selectedSkills) {
|
|
94
|
+
const target = path.join(skillsRoot, skill.runtimeName);
|
|
95
|
+
if (await pathExists(target)) {
|
|
96
|
+
await input.onLog("stdout", `[paperclip] Grok skill target already exists at ${target}; leaving it unchanged.\n`);
|
|
97
|
+
continue;
|
|
98
|
+
}
|
|
99
|
+
await materializePaperclipSkillCopy(skill.source, target);
|
|
100
|
+
ensureCleanupDir(target);
|
|
101
|
+
stagedSkillsCount += 1;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
return {
|
|
105
|
+
stagedSkillsCount,
|
|
106
|
+
stagedInstructionsPath,
|
|
107
|
+
rulesFilePath,
|
|
108
|
+
cleanup: async () => {
|
|
109
|
+
for (const entry of [...cleanup].reverse()) {
|
|
110
|
+
if (entry.kind === "file") {
|
|
111
|
+
await fs.rm(entry.path, { force: true }).catch(() => undefined);
|
|
112
|
+
continue;
|
|
113
|
+
}
|
|
114
|
+
await fs.rm(entry.path, { recursive: true, force: true }).catch(() => undefined);
|
|
115
|
+
}
|
|
116
|
+
},
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
function resolveBillingType(env) {
|
|
120
|
+
return hasNonEmptyEnvValue(env, "XAI_API_KEY") ? "api" : "subscription";
|
|
121
|
+
}
|
|
122
|
+
export async function execute(ctx) {
|
|
123
|
+
const { runId, agent, runtime, config, context, onLog, onMeta, onSpawn, authToken } = ctx;
|
|
124
|
+
const executionTarget = readAdapterExecutionTarget({
|
|
125
|
+
executionTarget: ctx.executionTarget,
|
|
126
|
+
legacyRemoteExecution: ctx.executionTransport?.remoteExecution,
|
|
127
|
+
});
|
|
128
|
+
const executionTargetIsRemote = adapterExecutionTargetIsRemote(executionTarget);
|
|
129
|
+
const promptTemplate = asString(config.promptTemplate, context.conversationMode === true
|
|
130
|
+
? DEFAULT_PAPERCLIP_CONVERSATION_PROMPT_TEMPLATE
|
|
131
|
+
: DEFAULT_PAPERCLIP_AGENT_PROMPT_TEMPLATE);
|
|
132
|
+
const command = asString(config.command, "grok");
|
|
133
|
+
const model = asString(config.model, DEFAULT_GROK_LOCAL_MODEL).trim();
|
|
134
|
+
// No default permission mode: Grok >= 1.0 enforces `dontAsk` as
|
|
135
|
+
// deny-by-default and it overrides --always-approve, so passing it broke
|
|
136
|
+
// every unattended run (the first tool call died with "User cancelled the
|
|
137
|
+
// execution for tool ..."). --always-approve alone is the unattended policy.
|
|
138
|
+
const permissionMode = asString(config.permissionMode, "").trim();
|
|
139
|
+
const reasoningEffort = asString(config.reasoningEffort, "").trim();
|
|
140
|
+
const maxTurns = asNumber(config.maxTurns, 0);
|
|
141
|
+
const alwaysApprove = asBoolean(config.alwaysApprove, true);
|
|
142
|
+
const disableWebSearch = asBoolean(config.disableWebSearch, true);
|
|
143
|
+
const workspaceContext = parseObject(context.paperclipWorkspace);
|
|
144
|
+
const workspaceCwd = asString(workspaceContext.cwd, "");
|
|
145
|
+
const workspaceSource = asString(workspaceContext.source, "");
|
|
146
|
+
const workspaceId = asString(workspaceContext.workspaceId, "");
|
|
147
|
+
const workspaceRepoUrl = asString(workspaceContext.repoUrl, "");
|
|
148
|
+
const workspaceRepoRef = asString(workspaceContext.repoRef, "");
|
|
149
|
+
const agentHome = asString(workspaceContext.agentHome, "");
|
|
150
|
+
const workspaceHints = Array.isArray(context.paperclipWorkspaces)
|
|
151
|
+
? context.paperclipWorkspaces.filter((value) => typeof value === "object" && value !== null)
|
|
152
|
+
: [];
|
|
153
|
+
const configuredCwd = asString(config.cwd, "");
|
|
154
|
+
const useConfiguredInsteadOfAgentHome = workspaceSource === "agent_home" && configuredCwd.length > 0;
|
|
155
|
+
const effectiveWorkspaceCwd = useConfiguredInsteadOfAgentHome ? "" : workspaceCwd;
|
|
156
|
+
const cwd = effectiveWorkspaceCwd || configuredCwd || process.cwd();
|
|
157
|
+
let effectiveExecutionCwd = adapterExecutionTargetRemoteCwd(executionTarget, cwd);
|
|
158
|
+
await ensureAbsoluteDirectory(cwd, { createIfMissing: true });
|
|
159
|
+
const grokSkillEntries = await readPaperclipRuntimeSkillEntries(config, __moduleDir);
|
|
160
|
+
const desiredGrokSkillNames = resolveLegacyPaperclipDesiredSkillNames(config, grokSkillEntries);
|
|
161
|
+
const instructionsFilePath = asString(config.instructionsFilePath, "").trim();
|
|
162
|
+
const stagedAssets = await stageGrokProjectAssets({
|
|
163
|
+
cwd,
|
|
164
|
+
instructionsFilePath,
|
|
165
|
+
skillEntries: grokSkillEntries,
|
|
166
|
+
desiredSkillNames: desiredGrokSkillNames,
|
|
167
|
+
onLog,
|
|
168
|
+
});
|
|
169
|
+
let restoreRemoteWorkspace = null;
|
|
170
|
+
// Declared here (not inside the try) so the outer `finally` can remove it on
|
|
171
|
+
// every exit path (teardown and setup failure alike), mirroring the Codex
|
|
172
|
+
// adapter's `stagedCodexHomeDir` handling.
|
|
173
|
+
let stagedGrokHomeDir = null;
|
|
174
|
+
try {
|
|
175
|
+
const envConfig = parseObject(config.env);
|
|
176
|
+
const env = {
|
|
177
|
+
...buildPaperclipEnv(agent),
|
|
178
|
+
...buildRuntimeToolsEnv(ctx.runtimeTools),
|
|
179
|
+
};
|
|
180
|
+
env.PAPERCLIP_RUN_ID = runId;
|
|
181
|
+
const wakeTaskId = (typeof context.taskId === "string" && context.taskId.trim().length > 0 && context.taskId.trim()) ||
|
|
182
|
+
(typeof context.issueId === "string" && context.issueId.trim().length > 0 && context.issueId.trim()) ||
|
|
183
|
+
null;
|
|
184
|
+
const wakeReason = typeof context.wakeReason === "string" && context.wakeReason.trim().length > 0
|
|
185
|
+
? context.wakeReason.trim()
|
|
186
|
+
: null;
|
|
187
|
+
const wakeCommentId = (typeof context.wakeCommentId === "string" && context.wakeCommentId.trim().length > 0 && context.wakeCommentId.trim()) ||
|
|
188
|
+
(typeof context.commentId === "string" && context.commentId.trim().length > 0 && context.commentId.trim()) ||
|
|
189
|
+
null;
|
|
190
|
+
const approvalId = typeof context.approvalId === "string" && context.approvalId.trim().length > 0
|
|
191
|
+
? context.approvalId.trim()
|
|
192
|
+
: null;
|
|
193
|
+
const approvalStatus = typeof context.approvalStatus === "string" && context.approvalStatus.trim().length > 0
|
|
194
|
+
? context.approvalStatus.trim()
|
|
195
|
+
: null;
|
|
196
|
+
const linkedIssueIds = Array.isArray(context.issueIds)
|
|
197
|
+
? context.issueIds.filter((value) => typeof value === "string" && value.trim().length > 0)
|
|
198
|
+
: [];
|
|
199
|
+
const issueWorkMode = readPaperclipIssueWorkModeFromContext(context);
|
|
200
|
+
if (wakeTaskId)
|
|
201
|
+
env.PAPERCLIP_TASK_ID = wakeTaskId;
|
|
202
|
+
if (issueWorkMode)
|
|
203
|
+
env.PAPERCLIP_ISSUE_WORK_MODE = issueWorkMode;
|
|
204
|
+
if (wakeReason)
|
|
205
|
+
env.PAPERCLIP_WAKE_REASON = wakeReason;
|
|
206
|
+
if (wakeCommentId)
|
|
207
|
+
env.PAPERCLIP_WAKE_COMMENT_ID = wakeCommentId;
|
|
208
|
+
if (approvalId)
|
|
209
|
+
env.PAPERCLIP_APPROVAL_ID = approvalId;
|
|
210
|
+
if (approvalStatus)
|
|
211
|
+
env.PAPERCLIP_APPROVAL_STATUS = approvalStatus;
|
|
212
|
+
if (linkedIssueIds.length > 0)
|
|
213
|
+
env.PAPERCLIP_LINKED_ISSUE_IDS = linkedIssueIds.join(",");
|
|
214
|
+
refreshPaperclipWorkspaceEnvForExecution({
|
|
215
|
+
env,
|
|
216
|
+
envConfig,
|
|
217
|
+
workspaceCwd: effectiveWorkspaceCwd,
|
|
218
|
+
workspaceSource,
|
|
219
|
+
workspaceId,
|
|
220
|
+
workspaceRepoUrl,
|
|
221
|
+
workspaceRepoRef,
|
|
222
|
+
workspaceHints,
|
|
223
|
+
agentHome,
|
|
224
|
+
executionTargetIsRemote,
|
|
225
|
+
executionCwd: effectiveExecutionCwd,
|
|
226
|
+
});
|
|
227
|
+
if (authToken) {
|
|
228
|
+
env.PAPERCLIP_API_KEY = authToken;
|
|
229
|
+
}
|
|
230
|
+
// Held before the remote block below, so the remote lane can stage this
|
|
231
|
+
// same host home into the sandbox without re-resolving it.
|
|
232
|
+
const hostGrokHome = config.managedAiConnection ? asString(env.GROK_HOME, "") : resolveManagedGrokHomeDir(process.env, agent.companyId);
|
|
233
|
+
// Subscription mode (no XAI_API_KEY): pin GROK_HOME to the company-scoped
|
|
234
|
+
// home a completed device login wrote. Do not pin an empty local home —
|
|
235
|
+
// that shadows the host `~/.grok` login and fails with "Not signed in"
|
|
236
|
+
// (#13568). Remote/sandbox runs and managed AI connections still pin so
|
|
237
|
+
// they cannot fall through to the host credential. The API-key path below
|
|
238
|
+
// (`resolveBillingType`) stays unchanged when the key exists.
|
|
239
|
+
// Explicit empty overrides clear inherited API keys in the child process.
|
|
240
|
+
// Use the same precedence here when selecting its credential home.
|
|
241
|
+
const isGrokSubscriptionMode = !hasNonEmptyEnvValue(config.managedAiConnection ? env : { ...process.env, ...env }, "XAI_API_KEY");
|
|
242
|
+
if (isGrokSubscriptionMode) {
|
|
243
|
+
const pinManagedHome = executionTargetIsRemote ||
|
|
244
|
+
Boolean(config.managedAiConnection) ||
|
|
245
|
+
(hostGrokHome.length > 0 && await grokHomeHasUsableAuth(hostGrokHome));
|
|
246
|
+
if (pinManagedHome) {
|
|
247
|
+
env.GROK_HOME = hostGrokHome;
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
const timeoutSec = resolveAdapterExecutionTargetTimeoutSec(executionTarget, asNumber(config.timeoutSec, 0));
|
|
251
|
+
const graceSec = asNumber(config.graceSec, 20);
|
|
252
|
+
await ensureAdapterExecutionTargetRuntimeCommandInstalled({
|
|
253
|
+
runId,
|
|
254
|
+
target: executionTarget,
|
|
255
|
+
installCommand: ctx.runtimeCommandSpec?.installCommand,
|
|
256
|
+
detectCommand: ctx.runtimeCommandSpec?.detectCommand,
|
|
257
|
+
cwd,
|
|
258
|
+
env,
|
|
259
|
+
timeoutSec,
|
|
260
|
+
graceSec,
|
|
261
|
+
onLog,
|
|
262
|
+
});
|
|
263
|
+
if (executionTargetIsRemote) {
|
|
264
|
+
await onLog("stdout", `[paperclip] Syncing Grok workspace to ${describeAdapterExecutionTarget(executionTarget)}.\n`);
|
|
265
|
+
// Stage only the credential file the remote lane needs into a curated
|
|
266
|
+
// temp dir and ship THAT as the `home` asset, the same curated-snapshot
|
|
267
|
+
// approach the Codex adapter uses. Subscription mode only: an API-key
|
|
268
|
+
// run authenticates from the environment variable and needs no home.
|
|
269
|
+
if (isGrokSubscriptionMode) {
|
|
270
|
+
stagedGrokHomeDir = await stageGrokHomeForSync(hostGrokHome, { runId });
|
|
271
|
+
}
|
|
272
|
+
const preparedExecutionTargetRuntime = await prepareAdapterExecutionTargetRuntime({
|
|
273
|
+
runId,
|
|
274
|
+
target: executionTarget,
|
|
275
|
+
adapterKey: "grok",
|
|
276
|
+
workspaceLocalDir: cwd,
|
|
277
|
+
timeoutSec,
|
|
278
|
+
installCommand: ctx.runtimeCommandSpec?.installCommand ?? null,
|
|
279
|
+
detectCommand: ctx.runtimeCommandSpec?.detectCommand ?? command,
|
|
280
|
+
onProgress: (line) => onLog("stdout", line),
|
|
281
|
+
onRuntimeProgress: ctx.onRuntimeProgress,
|
|
282
|
+
assets: stagedGrokHomeDir
|
|
283
|
+
? [
|
|
284
|
+
{
|
|
285
|
+
key: "home",
|
|
286
|
+
localDir: stagedGrokHomeDir,
|
|
287
|
+
followSymlinks: true,
|
|
288
|
+
// Outbound (sandbox to host) copy-out: at teardown, read the
|
|
289
|
+
// sandbox's `auth.json` and — guarded by the direction-
|
|
290
|
+
// agnostic decision predicate under a directory lock —
|
|
291
|
+
// atomically install it onto the shared host credential when
|
|
292
|
+
// it is a strictly-later same-identity copy. The destination
|
|
293
|
+
// is always the server-derived managed Grok home, never a
|
|
294
|
+
// value read from `env.GROK_HOME`. A copy-out failure never
|
|
295
|
+
// fails the run: `copyBackGrokAuth` logs the errno code and
|
|
296
|
+
// rethrows, and this callback swallows that rejection.
|
|
297
|
+
restore: async ({ assetDir, readFile }) => void (await copyBackGrokAuth({
|
|
298
|
+
readSandboxAuth: () => readFile(path.posix.join(assetDir, "auth.json")),
|
|
299
|
+
hostHomeDir: hostGrokHome,
|
|
300
|
+
log: (line) => onLog("stdout", `${line}\n`),
|
|
301
|
+
env: process.env,
|
|
302
|
+
}).catch(() => undefined)),
|
|
303
|
+
},
|
|
304
|
+
]
|
|
305
|
+
: undefined,
|
|
306
|
+
});
|
|
307
|
+
restoreRemoteWorkspace = () => preparedExecutionTargetRuntime.restoreWorkspace((line) => onLog("stdout", line));
|
|
308
|
+
effectiveExecutionCwd = preparedExecutionTargetRuntime.workspaceRemoteDir ?? effectiveExecutionCwd;
|
|
309
|
+
refreshPaperclipWorkspaceEnvForExecution({
|
|
310
|
+
env,
|
|
311
|
+
envConfig,
|
|
312
|
+
workspaceCwd: effectiveWorkspaceCwd,
|
|
313
|
+
workspaceSource,
|
|
314
|
+
workspaceId,
|
|
315
|
+
workspaceRepoUrl,
|
|
316
|
+
workspaceRepoRef,
|
|
317
|
+
workspaceHints,
|
|
318
|
+
agentHome,
|
|
319
|
+
executionTargetIsRemote,
|
|
320
|
+
executionCwd: effectiveExecutionCwd,
|
|
321
|
+
});
|
|
322
|
+
// Set GROK_HOME after the refresh above, so the refresh cannot overwrite
|
|
323
|
+
// it. The fixed fallback path mirrors `prepareAdapterExecutionTargetRuntime`'s
|
|
324
|
+
// own `home` asset layout, in case `assetDirs.home` is absent.
|
|
325
|
+
if (isGrokSubscriptionMode) {
|
|
326
|
+
env.GROK_HOME =
|
|
327
|
+
preparedExecutionTargetRuntime.assetDirs.home ??
|
|
328
|
+
path.posix.join(effectiveExecutionCwd, ".paperclip-runtime", "grok", "home");
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
const runtimeExecutionTarget = overrideAdapterExecutionTargetRemoteCwd(executionTarget, effectiveExecutionCwd);
|
|
332
|
+
const effectiveEnv = Object.fromEntries(Object.entries({ ...process.env, ...env }).filter((entry) => typeof entry[1] === "string"));
|
|
333
|
+
const runtimeEnv = ensurePathInEnv(effectiveEnv);
|
|
334
|
+
await ensureAdapterExecutionTargetCommandResolvable(command, executionTarget, cwd, runtimeEnv, {
|
|
335
|
+
installCommand: ctx.runtimeCommandSpec?.installCommand ?? null,
|
|
336
|
+
timeoutSec,
|
|
337
|
+
});
|
|
338
|
+
const resolvedCommand = await resolveAdapterExecutionTargetCommandForLogs(command, executionTarget, cwd, runtimeEnv);
|
|
339
|
+
const loggedEnv = buildInvocationEnvForLogs(env, {
|
|
340
|
+
runtimeEnv,
|
|
341
|
+
includeRuntimeKeys: ["HOME"],
|
|
342
|
+
resolvedCommand,
|
|
343
|
+
});
|
|
344
|
+
const billingType = resolveBillingType(effectiveEnv);
|
|
345
|
+
const runtimeSessionParams = parseObject(runtime.sessionParams);
|
|
346
|
+
const runtimeSessionId = asString(runtimeSessionParams.sessionId, runtime.sessionId ?? "");
|
|
347
|
+
const runtimeSessionCwd = asString(runtimeSessionParams.cwd, "");
|
|
348
|
+
const runtimeRemoteExecution = parseObject(runtimeSessionParams.remoteExecution);
|
|
349
|
+
const canResumeSession = runtimeSessionId.length > 0 &&
|
|
350
|
+
(runtimeSessionCwd.length === 0 || path.resolve(runtimeSessionCwd) === path.resolve(effectiveExecutionCwd)) &&
|
|
351
|
+
adapterExecutionTargetSessionMatches(runtimeRemoteExecution, runtimeExecutionTarget);
|
|
352
|
+
const sessionId = canResumeSession ? runtimeSessionId : null;
|
|
353
|
+
if (executionTargetIsRemote && runtimeSessionId && !canResumeSession) {
|
|
354
|
+
await onLog("stdout", `[paperclip] Grok session "${runtimeSessionId}" does not match the current remote execution identity and will not be resumed in "${effectiveExecutionCwd}". Starting a fresh remote session.\n`);
|
|
355
|
+
}
|
|
356
|
+
else if (runtimeSessionId && !canResumeSession) {
|
|
357
|
+
await onLog("stdout", `[paperclip] Grok session "${runtimeSessionId}" was saved for cwd "${runtimeSessionCwd}" and will not be resumed in "${effectiveExecutionCwd}".\n`);
|
|
358
|
+
}
|
|
359
|
+
const commandNotes = (() => {
|
|
360
|
+
const notes = ["Prompt is passed to Grok via --single in headless mode."];
|
|
361
|
+
if (alwaysApprove)
|
|
362
|
+
notes.push("Added --always-approve for unattended execution.");
|
|
363
|
+
if (stagedAssets.stagedInstructionsPath) {
|
|
364
|
+
notes.push(`Staged project instructions at ${stagedAssets.stagedInstructionsPath} for native Grok discovery.`);
|
|
365
|
+
}
|
|
366
|
+
if (stagedAssets.rulesFilePath) {
|
|
367
|
+
notes.push(`Applied fallback instructions via --rules @${stagedAssets.rulesFilePath}.`);
|
|
368
|
+
}
|
|
369
|
+
if (stagedAssets.stagedSkillsCount > 0) {
|
|
370
|
+
notes.push(`Staged ${stagedAssets.stagedSkillsCount} Paperclip skill(s) into .claude/skills for native Grok discovery.`);
|
|
371
|
+
}
|
|
372
|
+
return notes;
|
|
373
|
+
})();
|
|
374
|
+
const templateData = {
|
|
375
|
+
agentId: agent.id,
|
|
376
|
+
companyId: agent.companyId,
|
|
377
|
+
runId,
|
|
378
|
+
company: { id: agent.companyId },
|
|
379
|
+
agent,
|
|
380
|
+
run: { id: runId, source: "on_demand" },
|
|
381
|
+
context,
|
|
382
|
+
};
|
|
383
|
+
const taskContextNote = context.conversationMode === true
|
|
384
|
+
? selectPaperclipTaskMarkdown(context, { resumedSession: Boolean(sessionId), includeCommunicationGuidance: false })
|
|
385
|
+
: "";
|
|
386
|
+
const wakePrompt = renderPaperclipWakePrompt(context.paperclipWake, {
|
|
387
|
+
conversationMode: context.conversationMode === true,
|
|
388
|
+
resumedSession: Boolean(sessionId),
|
|
389
|
+
suppressIssueDescription: taskContextNote.length > 0,
|
|
390
|
+
});
|
|
391
|
+
const shouldUseResumeDeltaPrompt = Boolean(sessionId) && wakePrompt.length > 0;
|
|
392
|
+
const renderedPrompt = shouldUseResumeDeltaPrompt || isPaperclipRecoveryWakePayload(context.paperclipWake)
|
|
393
|
+
? ""
|
|
394
|
+
: renderTemplate(promptTemplate, templateData);
|
|
395
|
+
const sessionHandoffNote = asString(context.paperclipSessionHandoffMarkdown, "").trim();
|
|
396
|
+
const paperclipEnvNote = renderPaperclipEnvNote(env);
|
|
397
|
+
const apiAccessNote = renderApiAccessNote(env);
|
|
398
|
+
const basePrompt = joinPromptSections([
|
|
399
|
+
wakePrompt,
|
|
400
|
+
taskContextNote,
|
|
401
|
+
sessionHandoffNote,
|
|
402
|
+
paperclipEnvNote,
|
|
403
|
+
apiAccessNote,
|
|
404
|
+
renderedPrompt,
|
|
405
|
+
]);
|
|
406
|
+
const promptMetrics = {
|
|
407
|
+
promptChars: basePrompt.length,
|
|
408
|
+
wakePromptChars: wakePrompt.length,
|
|
409
|
+
taskContextChars: taskContextNote.length,
|
|
410
|
+
sessionHandoffChars: sessionHandoffNote.length,
|
|
411
|
+
runtimeNoteChars: paperclipEnvNote.length + apiAccessNote.length,
|
|
412
|
+
heartbeatPromptChars: renderedPrompt.length,
|
|
413
|
+
};
|
|
414
|
+
const buildArgs = (resumeSessionId, prompt) => {
|
|
415
|
+
const args = ["--cwd", effectiveExecutionCwd, "--output-format", "streaming-json"];
|
|
416
|
+
if (resumeSessionId)
|
|
417
|
+
args.push("--resume", resumeSessionId);
|
|
418
|
+
if (model && model !== DEFAULT_GROK_LOCAL_MODEL)
|
|
419
|
+
args.push("--model", model);
|
|
420
|
+
if (reasoningEffort)
|
|
421
|
+
args.push("--reasoning-effort", reasoningEffort);
|
|
422
|
+
if (maxTurns > 0)
|
|
423
|
+
args.push("--max-turns", String(maxTurns));
|
|
424
|
+
if (permissionMode)
|
|
425
|
+
args.push("--permission-mode", permissionMode);
|
|
426
|
+
if (alwaysApprove)
|
|
427
|
+
args.push("--always-approve");
|
|
428
|
+
if (disableWebSearch)
|
|
429
|
+
args.push("--disable-web-search");
|
|
430
|
+
if (stagedAssets.rulesFilePath)
|
|
431
|
+
args.push("--rules", `@${stagedAssets.rulesFilePath}`);
|
|
432
|
+
const extraArgs = (() => {
|
|
433
|
+
const fromExtraArgs = asStringArray(config.extraArgs);
|
|
434
|
+
if (fromExtraArgs.length > 0)
|
|
435
|
+
return fromExtraArgs;
|
|
436
|
+
return asStringArray(config.args);
|
|
437
|
+
})();
|
|
438
|
+
if (extraArgs.length > 0)
|
|
439
|
+
args.push(...extraArgs);
|
|
440
|
+
args.push("--single", prompt);
|
|
441
|
+
return args;
|
|
442
|
+
};
|
|
443
|
+
const runAttempt = async (resumeSessionId) => {
|
|
444
|
+
const prompt = joinPromptSections([
|
|
445
|
+
selectInitialCommunicationGuidance(context, { resumedSession: Boolean(resumeSessionId) }),
|
|
446
|
+
basePrompt,
|
|
447
|
+
]);
|
|
448
|
+
const args = buildArgs(resumeSessionId, prompt);
|
|
449
|
+
if (onMeta) {
|
|
450
|
+
await onMeta({
|
|
451
|
+
adapterType: "grok_local",
|
|
452
|
+
command: resolvedCommand,
|
|
453
|
+
cwd: effectiveExecutionCwd,
|
|
454
|
+
commandNotes,
|
|
455
|
+
commandArgs: args.map((value, index) => (index === args.length - 1 ? `<prompt ${prompt.length} chars>` : value)),
|
|
456
|
+
env: loggedEnv,
|
|
457
|
+
prompt,
|
|
458
|
+
promptMetrics: { ...promptMetrics, promptChars: prompt.length },
|
|
459
|
+
context,
|
|
460
|
+
});
|
|
461
|
+
}
|
|
462
|
+
const proc = await runAdapterExecutionTargetProcess(runId, runtimeExecutionTarget, command, args, {
|
|
463
|
+
cwd,
|
|
464
|
+
env,
|
|
465
|
+
timeoutSec,
|
|
466
|
+
graceSec,
|
|
467
|
+
onSpawn,
|
|
468
|
+
onRuntimeProgress: ctx.onRuntimeProgress,
|
|
469
|
+
onLog,
|
|
470
|
+
});
|
|
471
|
+
return {
|
|
472
|
+
proc,
|
|
473
|
+
parsed: parseGrokJsonl(proc.stdout),
|
|
474
|
+
};
|
|
475
|
+
};
|
|
476
|
+
const toResult = (attempt, clearSessionOnMissingSession = false, isRetry = false) => {
|
|
477
|
+
if (attempt.proc.timedOut) {
|
|
478
|
+
return {
|
|
479
|
+
exitCode: attempt.proc.exitCode,
|
|
480
|
+
signal: attempt.proc.signal,
|
|
481
|
+
timedOut: true,
|
|
482
|
+
errorMessage: `Timed out after ${timeoutSec}s`,
|
|
483
|
+
clearSession: clearSessionOnMissingSession,
|
|
484
|
+
};
|
|
485
|
+
}
|
|
486
|
+
const failed = (attempt.proc.exitCode ?? 0) !== 0;
|
|
487
|
+
const parsedError = typeof attempt.parsed.errorMessage === "string" ? attempt.parsed.errorMessage.trim() : "";
|
|
488
|
+
const stderrLine = firstNonEmptyLine(attempt.proc.stderr);
|
|
489
|
+
const fallbackErrorMessage = parsedError ||
|
|
490
|
+
stderrLine ||
|
|
491
|
+
`Grok exited with code ${attempt.proc.exitCode ?? -1}`;
|
|
492
|
+
const canFallbackToRuntimeSession = !isRetry;
|
|
493
|
+
const resolvedSessionId = attempt.parsed.sessionId
|
|
494
|
+
?? (canFallbackToRuntimeSession ? (runtimeSessionId ?? runtime.sessionId ?? null) : null);
|
|
495
|
+
const resolvedSessionParams = resolvedSessionId
|
|
496
|
+
? {
|
|
497
|
+
sessionId: resolvedSessionId,
|
|
498
|
+
cwd: effectiveExecutionCwd,
|
|
499
|
+
...(workspaceId ? { workspaceId } : {}),
|
|
500
|
+
...(workspaceRepoUrl ? { repoUrl: workspaceRepoUrl } : {}),
|
|
501
|
+
...(workspaceRepoRef ? { repoRef: workspaceRepoRef } : {}),
|
|
502
|
+
...(executionTargetIsRemote
|
|
503
|
+
? {
|
|
504
|
+
remoteExecution: adapterExecutionTargetSessionIdentity(runtimeExecutionTarget),
|
|
505
|
+
}
|
|
506
|
+
: {}),
|
|
507
|
+
}
|
|
508
|
+
: null;
|
|
509
|
+
return {
|
|
510
|
+
exitCode: attempt.proc.exitCode,
|
|
511
|
+
signal: attempt.proc.signal,
|
|
512
|
+
timedOut: false,
|
|
513
|
+
errorMessage: failed ? fallbackErrorMessage : null,
|
|
514
|
+
usage: {
|
|
515
|
+
inputTokens: attempt.parsed.inputTokens,
|
|
516
|
+
outputTokens: attempt.parsed.outputTokens,
|
|
517
|
+
cachedInputTokens: attempt.parsed.cachedInputTokens,
|
|
518
|
+
},
|
|
519
|
+
// Each `--single` invocation reports usage for just that process, not
|
|
520
|
+
// a running total for the resumed session, so the server must not
|
|
521
|
+
// delta it against the previous run's usage.
|
|
522
|
+
usageBasis: "per_run",
|
|
523
|
+
sessionId: resolvedSessionId,
|
|
524
|
+
sessionParams: resolvedSessionParams,
|
|
525
|
+
sessionDisplayId: resolvedSessionId,
|
|
526
|
+
provider: "xai",
|
|
527
|
+
biller: billingType === "api" ? "xai" : "grok",
|
|
528
|
+
model,
|
|
529
|
+
billingType,
|
|
530
|
+
// Subscription billing (OAuth/SuperGrok) has no marginal dollar cost per run,
|
|
531
|
+
// so we only surface costUsd for metered API-key billing.
|
|
532
|
+
costUsd: billingType === "api" ? attempt.parsed.costUsd : null,
|
|
533
|
+
resultJson: {
|
|
534
|
+
stopReason: attempt.parsed.stopReason,
|
|
535
|
+
requestId: attempt.parsed.requestId,
|
|
536
|
+
...(failed ? { stderr: attempt.proc.stderr } : {}),
|
|
537
|
+
},
|
|
538
|
+
summary: attempt.parsed.summary,
|
|
539
|
+
clearSession: Boolean(clearSessionOnMissingSession && !resolvedSessionId),
|
|
540
|
+
};
|
|
541
|
+
};
|
|
542
|
+
const initial = await runAttempt(sessionId);
|
|
543
|
+
if (sessionId &&
|
|
544
|
+
!initial.proc.timedOut &&
|
|
545
|
+
(initial.proc.exitCode ?? 0) !== 0 &&
|
|
546
|
+
isGrokUnknownSessionError(initial.proc.stdout, initial.proc.stderr)) {
|
|
547
|
+
await onLog("stdout", `[paperclip] Grok resume session "${sessionId}" is unavailable; retrying with a fresh session.\n`);
|
|
548
|
+
const retry = await runAttempt(null);
|
|
549
|
+
return toResult(retry, true, true);
|
|
550
|
+
}
|
|
551
|
+
return toResult(initial);
|
|
552
|
+
}
|
|
553
|
+
finally {
|
|
554
|
+
// Remove the staged GROK_HOME allowlist temp dir first, before the
|
|
555
|
+
// `Promise.all` below. A rejecting member of that `Promise.all` (for
|
|
556
|
+
// example a failed workspace restore) throws out of this `finally` and
|
|
557
|
+
// skips every statement after it, so the removal must run before that
|
|
558
|
+
// await to hold on every exit path (teardown AND error), never only the
|
|
559
|
+
// happy path. Cleanup failure is logged, not fatal — a leaked temp dir
|
|
560
|
+
// must not crash the run.
|
|
561
|
+
if (stagedGrokHomeDir) {
|
|
562
|
+
await fs.rm(stagedGrokHomeDir, { recursive: true, force: true }).catch(async (error) => {
|
|
563
|
+
await onLog("stderr", `[paperclip] Failed to remove staged Grok home "${stagedGrokHomeDir}": ${error instanceof Error ? error.message : String(error)}\n`);
|
|
564
|
+
});
|
|
565
|
+
}
|
|
566
|
+
await Promise.all([
|
|
567
|
+
restoreRemoteWorkspace?.(),
|
|
568
|
+
stagedAssets.cleanup(),
|
|
569
|
+
]);
|
|
570
|
+
}
|
|
571
|
+
}
|
|
572
|
+
//# sourceMappingURL=execute.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"execute.js","sourceRoot":"","sources":["../../src/server/execute.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"execute.test.d.ts","sourceRoot":"","sources":["../../src/server/execute.test.ts"],"names":[],"mappings":""}
|