@autopilot-harness/port-claude-code 0.2.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 ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Autopilot Harness contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,118 @@
1
+ import { type PhaseActionConfig, type ReviewEngine, type StateStore } from "@autopilot-harness/core";
2
+ /** Claude Code UserPromptSubmit (and compatible) stdin fields. */
3
+ export interface ClaudeSubmitPayload {
4
+ session_id?: string;
5
+ sessionId?: string;
6
+ prompt?: string;
7
+ /** Session cwd from Claude (informational). Store/checklist always use install root. */
8
+ cwd?: string;
9
+ transcript_path?: string;
10
+ transcriptPath?: string;
11
+ /** Some hosts may still send Cursor-shaped ids. */
12
+ conversation_id?: string;
13
+ conversationId?: string;
14
+ }
15
+ /** Claude Code PostToolUse stdin (Edit / Write / NotebookEdit). */
16
+ export interface ClaudeEditPayload {
17
+ session_id?: string;
18
+ sessionId?: string;
19
+ conversation_id?: string;
20
+ conversationId?: string;
21
+ cwd?: string;
22
+ tool_name?: string;
23
+ toolName?: string;
24
+ tool_input?: Record<string, unknown>;
25
+ toolInput?: Record<string, unknown>;
26
+ }
27
+ /** Claude Code Stop / StopFailure stdin. */
28
+ export interface ClaudeStopPayload {
29
+ session_id?: string;
30
+ sessionId?: string;
31
+ conversation_id?: string;
32
+ conversationId?: string;
33
+ cwd?: string;
34
+ transcript_path?: string;
35
+ transcriptPath?: string;
36
+ /**
37
+ * Cursor (and similar) may invoke `.claude` Stop hooks with IDE stop status.
38
+ * When present, must drive abort vs recover (do not ignore).
39
+ */
40
+ status?: string;
41
+ /** True when this stop is already a stop-hook continuation. */
42
+ stop_hook_active?: boolean;
43
+ stopHookActive?: boolean;
44
+ hook_event_name?: string;
45
+ hookEventName?: string;
46
+ last_assistant_message?: string;
47
+ /** StopFailure may carry error detail. */
48
+ error?: unknown;
49
+ message?: unknown;
50
+ reason?: unknown;
51
+ status_message?: unknown;
52
+ detail?: unknown;
53
+ title?: unknown;
54
+ }
55
+ export interface ClaudePortConfig {
56
+ phaseActions?: PhaseActionConfig;
57
+ }
58
+ /** Claude UserPromptSubmit / decision-control stdout. */
59
+ export interface ClaudeSubmitResult {
60
+ decision?: "block";
61
+ reason?: string;
62
+ continue?: boolean;
63
+ stopReason?: string;
64
+ hookSpecificOutput?: {
65
+ hookEventName: "UserPromptSubmit";
66
+ additionalContext?: string;
67
+ };
68
+ }
69
+ /** Claude Stop / StopFailure stdout. */
70
+ export interface ClaudeStopResult {
71
+ decision?: "block";
72
+ reason?: string;
73
+ continue?: boolean;
74
+ stopReason?: string;
75
+ hookSpecificOutput?: {
76
+ hookEventName: "Stop" | "StopFailure";
77
+ additionalContext?: string;
78
+ };
79
+ }
80
+ /**
81
+ * Map Claude stop_hook_active → ReviewEngine loopCount.
82
+ * true ⇒ in auto-continuation chain (same role as Cursor loop_count > 0).
83
+ */
84
+ export declare function loopCountFromStopHookActive(payload: ClaudeStopPayload): number;
85
+ /** Flatten stop error fields for abort-marker checks (Cursor may cross-fire). */
86
+ export declare function collectClaudeStopErrorText(payload: ClaudeStopPayload): string;
87
+ /**
88
+ * Map Claude Stop / StopFailure (+ Cursor cross-fire) → engine status.
89
+ *
90
+ * Cursor IDE may run `.claude/settings.json` Stop hooks on user Stop with
91
+ * `status: "aborted"`. Ignoring that used to inject recover and fight the
92
+ * Cursor abort path (loop with BLOCK_CAP=0).
93
+ */
94
+ export declare function normalizeClaudeStopStatus(payload: ClaudeStopPayload, opts?: {
95
+ status?: "completed" | "error" | "aborted";
96
+ }): "completed" | "error" | "aborted";
97
+ /** Extract edited file path from PostToolUse tool_input. */
98
+ export declare function filePathFromClaudeEdit(payload: ClaudeEditPayload): string;
99
+ /** Whether this PostToolUse tool should arm product-edit detection. */
100
+ export declare function isClaudeEditTool(toolName: string): boolean;
101
+ /**
102
+ * UserPromptSubmit → core triggers / fail-closed.
103
+ * Fail-closed uses Claude `decision: "block"` (erases prompt) + `reason`.
104
+ */
105
+ export declare function handleUserPromptSubmit(store: StateStore, payload: ClaudeSubmitPayload, projectRoot: string, portConfig?: ClaudePortConfig): ClaudeSubmitResult;
106
+ /** PostToolUse (Edit|Write|NotebookEdit) → markCodeEdited. */
107
+ export declare function handlePostToolUse(store: StateStore, payload: ClaudeEditPayload, projectRoot: string): void;
108
+ /**
109
+ * Stop / StopFailure → ReviewEngine.
110
+ * Continuing followups use decision:block + reason (Autopilot chain text).
111
+ * No followup → {}.
112
+ */
113
+ export declare function handleStop(engine: ReviewEngine, payload: ClaudeStopPayload, opts?: {
114
+ status?: "completed" | "error" | "aborted";
115
+ }): ClaudeStopResult;
116
+ /** Convenience: StopFailure event → handleStop(status=error). */
117
+ export declare function handleStopFailure(engine: ReviewEngine, payload: ClaudeStopPayload): ClaudeStopResult;
118
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js ADDED
@@ -0,0 +1,344 @@
1
+ import { applyOff, applyOn, applyReplan, applyResume, applyResumeReview, applyRun, applyTrackPick, ensureAmbientReviewSession, effectiveReviewingItemId, firstUnchecked, isHarnessFollowupMessage, isProductCodeEdit, isRecoverOrStuckFollowupMessage, isUserAbortText, loadProjectReviewConfig, parseAdvanceNextItemId, parseChecklist, parseTrigger, } from "@autopilot-harness/core";
2
+ const CLAUDE_PLATFORM = "claude-code";
3
+ function sid(p) {
4
+ return (p.session_id ??
5
+ p.sessionId ??
6
+ p.conversation_id ??
7
+ p.conversationId ??
8
+ "").trim();
9
+ }
10
+ /**
11
+ * Map Claude stop_hook_active → ReviewEngine loopCount.
12
+ * true ⇒ in auto-continuation chain (same role as Cursor loop_count > 0).
13
+ */
14
+ export function loopCountFromStopHookActive(payload) {
15
+ const active = payload.stop_hook_active ?? payload.stopHookActive;
16
+ return active === true ? 1 : 0;
17
+ }
18
+ /** Flatten stop error fields for abort-marker checks (Cursor may cross-fire). */
19
+ export function collectClaudeStopErrorText(payload) {
20
+ if (!payload || typeof payload !== "object")
21
+ return "";
22
+ const MAX_CHARS = 8_192;
23
+ const parts = [];
24
+ try {
25
+ const push = (value) => {
26
+ if (typeof value === "string" && value.trim()) {
27
+ parts.push(value);
28
+ return;
29
+ }
30
+ if (Array.isArray(value)) {
31
+ for (const item of value.slice(0, 8)) {
32
+ if (typeof item === "string" && item.trim())
33
+ parts.push(item);
34
+ }
35
+ return;
36
+ }
37
+ if (value && typeof value === "object") {
38
+ const o = value;
39
+ for (const key of [
40
+ "message",
41
+ "error",
42
+ "name",
43
+ "stack",
44
+ "detail",
45
+ "title",
46
+ ]) {
47
+ const nested = o[key];
48
+ if (typeof nested === "string" && nested.trim())
49
+ parts.push(nested);
50
+ }
51
+ }
52
+ };
53
+ push(payload.error);
54
+ push(payload.message);
55
+ push(payload.status_message);
56
+ push(payload.reason);
57
+ push(payload.detail);
58
+ push(payload.title);
59
+ }
60
+ catch {
61
+ return "";
62
+ }
63
+ const joined = parts.join("\n");
64
+ return joined.length > MAX_CHARS ? joined.slice(0, MAX_CHARS) : joined;
65
+ }
66
+ /**
67
+ * Map Claude Stop / StopFailure (+ Cursor cross-fire) → engine status.
68
+ *
69
+ * Cursor IDE may run `.claude/settings.json` Stop hooks on user Stop with
70
+ * `status: "aborted"`. Ignoring that used to inject recover and fight the
71
+ * Cursor abort path (loop with BLOCK_CAP=0).
72
+ */
73
+ export function normalizeClaudeStopStatus(payload, opts) {
74
+ if (!payload || typeof payload !== "object" || Array.isArray(payload)) {
75
+ return opts?.status ?? "completed";
76
+ }
77
+ const statusRaw = String(payload.status ?? "")
78
+ .toLowerCase()
79
+ .trim();
80
+ const errText = collectClaudeStopErrorText(payload);
81
+ if (statusRaw === "aborted" ||
82
+ statusRaw === "cancelled" ||
83
+ statusRaw === "canceled") {
84
+ return "aborted";
85
+ }
86
+ if (opts?.status === "aborted")
87
+ return "aborted";
88
+ if (statusRaw === "error" || statusRaw === "failed") {
89
+ if (isUserAbortText(errText))
90
+ return "aborted";
91
+ return "error";
92
+ }
93
+ if (opts?.status === "error") {
94
+ if (isUserAbortText(errText))
95
+ return "aborted";
96
+ return "error";
97
+ }
98
+ if (opts?.status === "completed")
99
+ return "completed";
100
+ const hookName = String(payload.hook_event_name ?? payload.hookEventName ?? "").trim();
101
+ if (/^stopfailure$/i.test(hookName)) {
102
+ if (isUserAbortText(errText))
103
+ return "aborted";
104
+ return "error";
105
+ }
106
+ if (!statusRaw && isUserAbortText(errText))
107
+ return "aborted";
108
+ return "completed";
109
+ }
110
+ /** Non-empty reason required by Claude when decision is "block". */
111
+ function blockReason(message, fallback) {
112
+ const m = typeof message === "string" ? message.trim() : "";
113
+ return m || fallback;
114
+ }
115
+ /** Extract edited file path from PostToolUse tool_input. */
116
+ export function filePathFromClaudeEdit(payload) {
117
+ const input = payload.tool_input ?? payload.toolInput ?? {};
118
+ // Reject null / arrays / non-objects (hostile or malformed PostToolUse).
119
+ if (!input || typeof input !== "object" || Array.isArray(input))
120
+ return "";
121
+ const candidates = [
122
+ input.file_path,
123
+ input.filePath,
124
+ input.notebook_path,
125
+ input.notebookPath,
126
+ input.path,
127
+ ];
128
+ for (const c of candidates) {
129
+ if (typeof c === "string" && c.trim())
130
+ return c.trim();
131
+ }
132
+ return "";
133
+ }
134
+ /** Whether this PostToolUse tool should arm product-edit detection. */
135
+ export function isClaudeEditTool(toolName) {
136
+ const n = toolName.trim();
137
+ return n === "Edit" || n === "Write" || n === "NotebookEdit";
138
+ }
139
+ /** Persist host id on the session row (core defaults to "cursor"). */
140
+ function stampClaudePlatform(store, conversationId, projectRoot) {
141
+ const session = store.getSession(conversationId);
142
+ // Raw equality so mixed-case / scrubbed hosts still get canonicalized.
143
+ if (!session || session.platform === CLAUDE_PLATFORM)
144
+ return;
145
+ store.upsertSession({
146
+ conversation_id: conversationId,
147
+ project_root: session.project_root || projectRoot,
148
+ code_root: session.code_root || projectRoot,
149
+ platform: CLAUDE_PLATFORM,
150
+ });
151
+ }
152
+ /**
153
+ * UserPromptSubmit → core triggers / fail-closed.
154
+ * Fail-closed uses Claude `decision: "block"` (erases prompt) + `reason`.
155
+ */
156
+ export function handleUserPromptSubmit(store, payload, projectRoot, portConfig) {
157
+ const conversationId = sid(payload);
158
+ if (!conversationId)
159
+ return {};
160
+ // Always use install-root projectRoot from the hook (like Cursor). Never
161
+ // trust payload.cwd — a subdirectory or hostile cwd would mis-bind state.db.
162
+ const prompt = typeof payload.prompt === "string" ? payload.prompt : "";
163
+ try {
164
+ store.clearPendingFollowupIf(conversationId, isRecoverOrStuckFollowupMessage);
165
+ }
166
+ catch {
167
+ /* best-effort */
168
+ }
169
+ const session = store.getSession(conversationId);
170
+ const trigger = parseTrigger({
171
+ prompt,
172
+ conversationId,
173
+ projectRoot,
174
+ pendingAction: session?.pending_action,
175
+ });
176
+ const actionConfig = portConfig?.phaseActions;
177
+ const gateFallback = "Autopilot rejected this prompt. Check `npx autopilot-harness status`.";
178
+ if (trigger) {
179
+ if (trigger.kind === "off") {
180
+ applyOff(store, conversationId);
181
+ stampClaudePlatform(store, conversationId, projectRoot);
182
+ return {};
183
+ }
184
+ if (trigger.kind === "on") {
185
+ const result = applyOn(store, conversationId, projectRoot, {
186
+ initialBrief: trigger.initialBrief,
187
+ slug: trigger.slug,
188
+ platform: CLAUDE_PLATFORM,
189
+ });
190
+ if (!result.ok) {
191
+ stampClaudePlatform(store, conversationId, projectRoot);
192
+ return {
193
+ decision: "block",
194
+ reason: blockReason(result.userMessage, gateFallback),
195
+ };
196
+ }
197
+ return {};
198
+ }
199
+ if (trigger.kind === "resume") {
200
+ const result = applyResume(store, conversationId, {
201
+ slug: trigger.slug,
202
+ });
203
+ if (!result.ok) {
204
+ stampClaudePlatform(store, conversationId, projectRoot);
205
+ return {
206
+ decision: "block",
207
+ reason: blockReason(result.userMessage, gateFallback),
208
+ };
209
+ }
210
+ stampClaudePlatform(store, conversationId, projectRoot);
211
+ return {};
212
+ }
213
+ if (trigger.kind === "resume_review") {
214
+ applyResumeReview(store, conversationId);
215
+ stampClaudePlatform(store, conversationId, projectRoot);
216
+ return {};
217
+ }
218
+ if (trigger.kind === "run") {
219
+ const result = applyRun(store, conversationId, projectRoot, {
220
+ slug: trigger.slug,
221
+ config: actionConfig,
222
+ platform: CLAUDE_PLATFORM,
223
+ });
224
+ if (!result.ok) {
225
+ stampClaudePlatform(store, conversationId, projectRoot);
226
+ return {
227
+ decision: "block",
228
+ reason: blockReason(result.userMessage, gateFallback),
229
+ };
230
+ }
231
+ return {};
232
+ }
233
+ if (trigger.kind === "replan") {
234
+ const result = applyReplan(store, conversationId, projectRoot, {
235
+ slug: trigger.slug,
236
+ config: actionConfig,
237
+ platform: CLAUDE_PLATFORM,
238
+ });
239
+ if (!result.ok) {
240
+ stampClaudePlatform(store, conversationId, projectRoot);
241
+ return {
242
+ decision: "block",
243
+ reason: blockReason(result.userMessage, gateFallback),
244
+ };
245
+ }
246
+ return {};
247
+ }
248
+ if (trigger.kind === "track_pick" && trigger.trackPick) {
249
+ const result = applyTrackPick(store, conversationId, projectRoot, trigger.trackPick, { config: actionConfig, platform: CLAUDE_PLATFORM });
250
+ if (!result.ok) {
251
+ stampClaudePlatform(store, conversationId, projectRoot);
252
+ return {
253
+ decision: "block",
254
+ reason: blockReason(result.userMessage, gateFallback),
255
+ };
256
+ }
257
+ return {};
258
+ }
259
+ return {};
260
+ }
261
+ if (!isHarnessFollowupMessage(prompt)) {
262
+ store.clearChainPending(conversationId);
263
+ }
264
+ stampClaudePlatform(store, conversationId, projectRoot);
265
+ return {};
266
+ }
267
+ /** PostToolUse (Edit|Write|NotebookEdit) → markCodeEdited. */
268
+ export function handlePostToolUse(store, payload, projectRoot) {
269
+ const conversationId = sid(payload);
270
+ const toolName = String(payload.tool_name ?? payload.toolName ?? "").trim();
271
+ if (!conversationId || !isClaudeEditTool(toolName))
272
+ return;
273
+ const filePath = filePathFromClaudeEdit(payload);
274
+ if (!filePath)
275
+ return;
276
+ if (!isProductCodeEdit(filePath, { projectRoot }))
277
+ return;
278
+ const cfg = loadProjectReviewConfig(projectRoot);
279
+ if (cfg.reviewScope === "project") {
280
+ ensureAmbientReviewSession(store, conversationId, projectRoot, cfg.reviewScope, CLAUDE_PLATFORM);
281
+ }
282
+ stampClaudePlatform(store, conversationId, projectRoot);
283
+ const session = store.getSession(conversationId);
284
+ const checklistPath = session?.checklist_path?.trim() ?? "";
285
+ let checklistSnap = null;
286
+ if (checklistPath) {
287
+ try {
288
+ checklistSnap = parseChecklist(checklistPath, { projectRoot });
289
+ }
290
+ catch {
291
+ /* checklist unreadable — still arm code_edited */
292
+ }
293
+ }
294
+ store.markCodeEdited(conversationId, (chain) => {
295
+ const fromPending = parseAdvanceNextItemId(chain.pending_followup);
296
+ if (checklistSnap) {
297
+ if (fromPending && effectiveReviewingItemId(checklistSnap, fromPending)) {
298
+ return fromPending;
299
+ }
300
+ return firstUnchecked(checklistSnap)?.id ?? null;
301
+ }
302
+ return fromPending;
303
+ });
304
+ }
305
+ /**
306
+ * Stop / StopFailure → ReviewEngine.
307
+ * Continuing followups use decision:block + reason (Autopilot chain text).
308
+ * No followup → {}.
309
+ */
310
+ export function handleStop(engine, payload, opts) {
311
+ const conversationId = sid(payload);
312
+ if (!conversationId)
313
+ return {};
314
+ const status = normalizeClaudeStopStatus(payload, opts);
315
+ const transcriptRaw = payload.transcript_path ?? payload.transcriptPath;
316
+ const transcriptPath = typeof transcriptRaw === "string" && transcriptRaw.trim()
317
+ ? transcriptRaw.trim()
318
+ : undefined;
319
+ const action = engine.handleStop({
320
+ conversationId,
321
+ status,
322
+ loopCount: loopCountFromStopHookActive(payload),
323
+ transcriptPath,
324
+ platform: CLAUDE_PLATFORM,
325
+ });
326
+ if (!action?.message)
327
+ return {};
328
+ const reason = blockReason(action.message, "Autopilot followup");
329
+ // loop:false = deliver once without requesting another agent turn (e.g.
330
+ // stuck after pause-threshold upsert failed). decision:block would keep
331
+ // continuing — disastrous with CLAUDE_CODE_STOP_HOOK_BLOCK_CAP=0.
332
+ if (!action.loop) {
333
+ return { continue: false, stopReason: reason };
334
+ }
335
+ return {
336
+ decision: "block",
337
+ reason,
338
+ };
339
+ }
340
+ /** Convenience: StopFailure event → handleStop(status=error). */
341
+ export function handleStopFailure(engine, payload) {
342
+ return handleStop(engine, payload, { status: "error" });
343
+ }
344
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,43 @@
1
+ {
2
+ "name": "@autopilot-harness/port-claude-code",
3
+ "version": "0.2.0",
4
+ "description": "Autopilot harness Claude Code host port",
5
+ "license": "MIT",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "git+https://github.com/mt2007/autopilot-harness.git",
9
+ "directory": "packages/ports/claude-code"
10
+ },
11
+ "homepage": "https://github.com/mt2007/autopilot-harness#readme",
12
+ "bugs": {
13
+ "url": "https://github.com/mt2007/autopilot-harness/issues"
14
+ },
15
+ "type": "module",
16
+ "main": "./dist/index.js",
17
+ "types": "./dist/index.d.ts",
18
+ "exports": {
19
+ ".": {
20
+ "types": "./dist/index.d.ts",
21
+ "import": "./dist/index.js"
22
+ }
23
+ },
24
+ "files": [
25
+ "dist"
26
+ ],
27
+ "dependencies": {
28
+ "@autopilot-harness/core": "0.2.0"
29
+ },
30
+ "devDependencies": {
31
+ "typescript": "^5.8.2"
32
+ },
33
+ "engines": {
34
+ "node": ">=22"
35
+ },
36
+ "publishConfig": {
37
+ "access": "public"
38
+ },
39
+ "scripts": {
40
+ "build": "tsc -p tsconfig.json",
41
+ "typecheck": "tsc -p tsconfig.json --noEmit"
42
+ }
43
+ }