@posthog/agent 2.3.385 → 2.3.387
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/adapters/claude/session/jsonl-hydration.d.ts +1 -0
- package/dist/agent.d.ts +1 -0
- package/dist/agent.js +21 -2
- package/dist/agent.js.map +1 -1
- package/dist/handoff-checkpoint.d.ts +39 -0
- package/dist/handoff-checkpoint.js +6679 -0
- package/dist/handoff-checkpoint.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/logger-RC7sPv0S.d.ts +24 -0
- package/dist/posthog-api.d.ts +1 -0
- package/dist/posthog-api.js +19 -2
- package/dist/posthog-api.js.map +1 -1
- package/dist/resume.d.ts +71 -0
- package/dist/resume.js +6838 -0
- package/dist/resume.js.map +1 -0
- package/dist/server/agent-server.d.ts +5 -18
- package/dist/server/agent-server.js +1373 -432
- package/dist/server/agent-server.js.map +1 -1
- package/dist/server/bin.cjs +1370 -429
- package/dist/server/bin.cjs.map +1 -1
- package/dist/server/schemas.d.ts +191 -0
- package/dist/server/schemas.js +108 -0
- package/dist/server/schemas.js.map +1 -0
- package/dist/tree-tracker.d.ts +68 -0
- package/dist/tree-tracker.js +6431 -0
- package/dist/tree-tracker.js.map +1 -0
- package/dist/types.d.ts +18 -1
- package/dist/types.js +5 -0
- package/dist/types.js.map +1 -1
- package/package.json +17 -1
- package/src/acp-extensions.ts +3 -0
- package/src/handoff-checkpoint.test.ts +183 -0
- package/src/handoff-checkpoint.ts +361 -0
- package/src/posthog-api.test.ts +29 -0
- package/src/posthog-api.ts +5 -1
- package/src/resume.ts +58 -1
- package/src/sagas/apply-snapshot-saga.ts +7 -0
- package/src/sagas/capture-tree-saga.ts +10 -3
- package/src/sagas/resume-saga.ts +32 -0
- package/src/sagas/test-fixtures.ts +46 -0
- package/src/server/agent-server.ts +76 -57
- package/src/server/schemas.ts +21 -2
- package/src/types.ts +24 -0
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
import { z } from 'zod/v4';
|
|
2
|
+
|
|
3
|
+
declare const handoffLocalGitStateSchema: z.ZodObject<{
|
|
4
|
+
head: z.ZodPipe<z.ZodOptional<z.ZodNullable<z.ZodString>>, z.ZodTransform<string | null, string | null | undefined>>;
|
|
5
|
+
branch: z.ZodPipe<z.ZodOptional<z.ZodNullable<z.ZodString>>, z.ZodTransform<string | null, string | null | undefined>>;
|
|
6
|
+
upstreamHead: z.ZodPipe<z.ZodOptional<z.ZodNullable<z.ZodString>>, z.ZodTransform<string | null, string | null | undefined>>;
|
|
7
|
+
upstreamRemote: z.ZodPipe<z.ZodOptional<z.ZodNullable<z.ZodString>>, z.ZodTransform<string | null, string | null | undefined>>;
|
|
8
|
+
upstreamMergeRef: z.ZodPipe<z.ZodOptional<z.ZodNullable<z.ZodString>>, z.ZodTransform<string | null, string | null | undefined>>;
|
|
9
|
+
}, z.core.$strip>;
|
|
10
|
+
declare const remoteMcpServerSchema: z.ZodObject<{
|
|
11
|
+
type: z.ZodEnum<{
|
|
12
|
+
http: "http";
|
|
13
|
+
sse: "sse";
|
|
14
|
+
}>;
|
|
15
|
+
name: z.ZodString;
|
|
16
|
+
url: z.ZodURL;
|
|
17
|
+
headers: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
18
|
+
name: z.ZodString;
|
|
19
|
+
value: z.ZodString;
|
|
20
|
+
}, z.core.$strip>>>;
|
|
21
|
+
}, z.core.$strip>;
|
|
22
|
+
declare const mcpServersSchema: z.ZodArray<z.ZodObject<{
|
|
23
|
+
type: z.ZodEnum<{
|
|
24
|
+
http: "http";
|
|
25
|
+
sse: "sse";
|
|
26
|
+
}>;
|
|
27
|
+
name: z.ZodString;
|
|
28
|
+
url: z.ZodURL;
|
|
29
|
+
headers: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
30
|
+
name: z.ZodString;
|
|
31
|
+
value: z.ZodString;
|
|
32
|
+
}, z.core.$strip>>>;
|
|
33
|
+
}, z.core.$strip>>;
|
|
34
|
+
type RemoteMcpServer = z.infer<typeof remoteMcpServerSchema>;
|
|
35
|
+
declare const claudeCodeConfigSchema: z.ZodObject<{
|
|
36
|
+
systemPrompt: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
|
|
37
|
+
type: z.ZodLiteral<"preset">;
|
|
38
|
+
preset: z.ZodLiteral<"claude_code">;
|
|
39
|
+
append: z.ZodOptional<z.ZodString>;
|
|
40
|
+
}, z.core.$strip>]>>;
|
|
41
|
+
plugins: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
42
|
+
type: z.ZodLiteral<"local">;
|
|
43
|
+
path: z.ZodString;
|
|
44
|
+
}, z.core.$strip>>>;
|
|
45
|
+
}, z.core.$strip>;
|
|
46
|
+
declare const jsonRpcRequestSchema: z.ZodObject<{
|
|
47
|
+
jsonrpc: z.ZodLiteral<"2.0">;
|
|
48
|
+
method: z.ZodString;
|
|
49
|
+
params: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
50
|
+
id: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>;
|
|
51
|
+
}, z.core.$strip>;
|
|
52
|
+
type JsonRpcRequest = z.infer<typeof jsonRpcRequestSchema>;
|
|
53
|
+
declare const userMessageParamsSchema: z.ZodObject<{
|
|
54
|
+
content: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnknown>>]>>;
|
|
55
|
+
artifacts: z.ZodOptional<z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
|
|
56
|
+
}, z.core.$strip>;
|
|
57
|
+
declare const permissionResponseParamsSchema: z.ZodObject<{
|
|
58
|
+
requestId: z.ZodString;
|
|
59
|
+
optionId: z.ZodString;
|
|
60
|
+
customInput: z.ZodOptional<z.ZodString>;
|
|
61
|
+
answers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
62
|
+
}, z.core.$strip>;
|
|
63
|
+
declare const setConfigOptionParamsSchema: z.ZodObject<{
|
|
64
|
+
configId: z.ZodString;
|
|
65
|
+
value: z.ZodString;
|
|
66
|
+
}, z.core.$strip>;
|
|
67
|
+
declare const refreshSessionParamsSchema: z.ZodObject<{
|
|
68
|
+
mcpServers: z.ZodArray<z.ZodObject<{
|
|
69
|
+
type: z.ZodEnum<{
|
|
70
|
+
http: "http";
|
|
71
|
+
sse: "sse";
|
|
72
|
+
}>;
|
|
73
|
+
name: z.ZodString;
|
|
74
|
+
url: z.ZodURL;
|
|
75
|
+
headers: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
76
|
+
name: z.ZodString;
|
|
77
|
+
value: z.ZodString;
|
|
78
|
+
}, z.core.$strip>>>;
|
|
79
|
+
}, z.core.$strip>>;
|
|
80
|
+
}, z.core.$strip>;
|
|
81
|
+
declare const closeParamsSchema: z.ZodOptional<z.ZodObject<{
|
|
82
|
+
localGitState: z.ZodOptional<z.ZodObject<{
|
|
83
|
+
head: z.ZodPipe<z.ZodOptional<z.ZodNullable<z.ZodString>>, z.ZodTransform<string | null, string | null | undefined>>;
|
|
84
|
+
branch: z.ZodPipe<z.ZodOptional<z.ZodNullable<z.ZodString>>, z.ZodTransform<string | null, string | null | undefined>>;
|
|
85
|
+
upstreamHead: z.ZodPipe<z.ZodOptional<z.ZodNullable<z.ZodString>>, z.ZodTransform<string | null, string | null | undefined>>;
|
|
86
|
+
upstreamRemote: z.ZodPipe<z.ZodOptional<z.ZodNullable<z.ZodString>>, z.ZodTransform<string | null, string | null | undefined>>;
|
|
87
|
+
upstreamMergeRef: z.ZodPipe<z.ZodOptional<z.ZodNullable<z.ZodString>>, z.ZodTransform<string | null, string | null | undefined>>;
|
|
88
|
+
}, z.core.$strip>>;
|
|
89
|
+
}, z.core.$strip>>;
|
|
90
|
+
declare const commandParamsSchemas: {
|
|
91
|
+
readonly user_message: z.ZodObject<{
|
|
92
|
+
content: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnknown>>]>>;
|
|
93
|
+
artifacts: z.ZodOptional<z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
|
|
94
|
+
}, z.core.$strip>;
|
|
95
|
+
readonly "posthog/user_message": z.ZodObject<{
|
|
96
|
+
content: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnknown>>]>>;
|
|
97
|
+
artifacts: z.ZodOptional<z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
|
|
98
|
+
}, z.core.$strip>;
|
|
99
|
+
readonly cancel: z.ZodOptional<z.ZodObject<{}, z.core.$strip>>;
|
|
100
|
+
readonly "posthog/cancel": z.ZodOptional<z.ZodObject<{}, z.core.$strip>>;
|
|
101
|
+
readonly close: z.ZodOptional<z.ZodObject<{
|
|
102
|
+
localGitState: z.ZodOptional<z.ZodObject<{
|
|
103
|
+
head: z.ZodPipe<z.ZodOptional<z.ZodNullable<z.ZodString>>, z.ZodTransform<string | null, string | null | undefined>>;
|
|
104
|
+
branch: z.ZodPipe<z.ZodOptional<z.ZodNullable<z.ZodString>>, z.ZodTransform<string | null, string | null | undefined>>;
|
|
105
|
+
upstreamHead: z.ZodPipe<z.ZodOptional<z.ZodNullable<z.ZodString>>, z.ZodTransform<string | null, string | null | undefined>>;
|
|
106
|
+
upstreamRemote: z.ZodPipe<z.ZodOptional<z.ZodNullable<z.ZodString>>, z.ZodTransform<string | null, string | null | undefined>>;
|
|
107
|
+
upstreamMergeRef: z.ZodPipe<z.ZodOptional<z.ZodNullable<z.ZodString>>, z.ZodTransform<string | null, string | null | undefined>>;
|
|
108
|
+
}, z.core.$strip>>;
|
|
109
|
+
}, z.core.$strip>>;
|
|
110
|
+
readonly "posthog/close": z.ZodOptional<z.ZodObject<{
|
|
111
|
+
localGitState: z.ZodOptional<z.ZodObject<{
|
|
112
|
+
head: z.ZodPipe<z.ZodOptional<z.ZodNullable<z.ZodString>>, z.ZodTransform<string | null, string | null | undefined>>;
|
|
113
|
+
branch: z.ZodPipe<z.ZodOptional<z.ZodNullable<z.ZodString>>, z.ZodTransform<string | null, string | null | undefined>>;
|
|
114
|
+
upstreamHead: z.ZodPipe<z.ZodOptional<z.ZodNullable<z.ZodString>>, z.ZodTransform<string | null, string | null | undefined>>;
|
|
115
|
+
upstreamRemote: z.ZodPipe<z.ZodOptional<z.ZodNullable<z.ZodString>>, z.ZodTransform<string | null, string | null | undefined>>;
|
|
116
|
+
upstreamMergeRef: z.ZodPipe<z.ZodOptional<z.ZodNullable<z.ZodString>>, z.ZodTransform<string | null, string | null | undefined>>;
|
|
117
|
+
}, z.core.$strip>>;
|
|
118
|
+
}, z.core.$strip>>;
|
|
119
|
+
readonly permission_response: z.ZodObject<{
|
|
120
|
+
requestId: z.ZodString;
|
|
121
|
+
optionId: z.ZodString;
|
|
122
|
+
customInput: z.ZodOptional<z.ZodString>;
|
|
123
|
+
answers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
124
|
+
}, z.core.$strip>;
|
|
125
|
+
readonly "posthog/permission_response": z.ZodObject<{
|
|
126
|
+
requestId: z.ZodString;
|
|
127
|
+
optionId: z.ZodString;
|
|
128
|
+
customInput: z.ZodOptional<z.ZodString>;
|
|
129
|
+
answers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
130
|
+
}, z.core.$strip>;
|
|
131
|
+
readonly set_config_option: z.ZodObject<{
|
|
132
|
+
configId: z.ZodString;
|
|
133
|
+
value: z.ZodString;
|
|
134
|
+
}, z.core.$strip>;
|
|
135
|
+
readonly "posthog/set_config_option": z.ZodObject<{
|
|
136
|
+
configId: z.ZodString;
|
|
137
|
+
value: z.ZodString;
|
|
138
|
+
}, z.core.$strip>;
|
|
139
|
+
readonly refresh_session: z.ZodObject<{
|
|
140
|
+
mcpServers: z.ZodArray<z.ZodObject<{
|
|
141
|
+
type: z.ZodEnum<{
|
|
142
|
+
http: "http";
|
|
143
|
+
sse: "sse";
|
|
144
|
+
}>;
|
|
145
|
+
name: z.ZodString;
|
|
146
|
+
url: z.ZodURL;
|
|
147
|
+
headers: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
148
|
+
name: z.ZodString;
|
|
149
|
+
value: z.ZodString;
|
|
150
|
+
}, z.core.$strip>>>;
|
|
151
|
+
}, z.core.$strip>>;
|
|
152
|
+
}, z.core.$strip>;
|
|
153
|
+
readonly "posthog/refresh_session": z.ZodObject<{
|
|
154
|
+
mcpServers: z.ZodArray<z.ZodObject<{
|
|
155
|
+
type: z.ZodEnum<{
|
|
156
|
+
http: "http";
|
|
157
|
+
sse: "sse";
|
|
158
|
+
}>;
|
|
159
|
+
name: z.ZodString;
|
|
160
|
+
url: z.ZodURL;
|
|
161
|
+
headers: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
162
|
+
name: z.ZodString;
|
|
163
|
+
value: z.ZodString;
|
|
164
|
+
}, z.core.$strip>>>;
|
|
165
|
+
}, z.core.$strip>>;
|
|
166
|
+
}, z.core.$strip>;
|
|
167
|
+
readonly "_posthog/refresh_session": z.ZodObject<{
|
|
168
|
+
mcpServers: z.ZodArray<z.ZodObject<{
|
|
169
|
+
type: z.ZodEnum<{
|
|
170
|
+
http: "http";
|
|
171
|
+
sse: "sse";
|
|
172
|
+
}>;
|
|
173
|
+
name: z.ZodString;
|
|
174
|
+
url: z.ZodURL;
|
|
175
|
+
headers: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
176
|
+
name: z.ZodString;
|
|
177
|
+
value: z.ZodString;
|
|
178
|
+
}, z.core.$strip>>>;
|
|
179
|
+
}, z.core.$strip>>;
|
|
180
|
+
}, z.core.$strip>;
|
|
181
|
+
};
|
|
182
|
+
type CommandMethod = keyof typeof commandParamsSchemas;
|
|
183
|
+
declare function validateCommandParams(method: string, params: unknown): {
|
|
184
|
+
success: true;
|
|
185
|
+
data: unknown;
|
|
186
|
+
} | {
|
|
187
|
+
success: false;
|
|
188
|
+
error: string;
|
|
189
|
+
};
|
|
190
|
+
|
|
191
|
+
export { type CommandMethod, type JsonRpcRequest, type RemoteMcpServer, claudeCodeConfigSchema, closeParamsSchema, commandParamsSchemas, handoffLocalGitStateSchema, jsonRpcRequestSchema, mcpServersSchema, permissionResponseParamsSchema, refreshSessionParamsSchema, setConfigOptionParamsSchema, userMessageParamsSchema, validateCommandParams };
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
// src/server/schemas.ts
|
|
2
|
+
import { z } from "zod/v4";
|
|
3
|
+
var httpHeaderSchema = z.object({
|
|
4
|
+
name: z.string(),
|
|
5
|
+
value: z.string()
|
|
6
|
+
});
|
|
7
|
+
var nullishString = z.string().nullish().transform((value) => value ?? null);
|
|
8
|
+
var handoffLocalGitStateSchema = z.object({
|
|
9
|
+
head: nullishString,
|
|
10
|
+
branch: nullishString,
|
|
11
|
+
upstreamHead: nullishString,
|
|
12
|
+
upstreamRemote: nullishString,
|
|
13
|
+
upstreamMergeRef: nullishString
|
|
14
|
+
});
|
|
15
|
+
var remoteMcpServerSchema = z.object({
|
|
16
|
+
type: z.enum(["http", "sse"]),
|
|
17
|
+
name: z.string().min(1, "MCP server name is required"),
|
|
18
|
+
url: z.url({ error: "MCP server url must be a valid URL" }),
|
|
19
|
+
headers: z.array(httpHeaderSchema).default([])
|
|
20
|
+
});
|
|
21
|
+
var mcpServersSchema = z.array(remoteMcpServerSchema);
|
|
22
|
+
var claudeCodeConfigSchema = z.object({
|
|
23
|
+
systemPrompt: z.union([
|
|
24
|
+
z.string(),
|
|
25
|
+
z.object({
|
|
26
|
+
type: z.literal("preset"),
|
|
27
|
+
preset: z.literal("claude_code"),
|
|
28
|
+
append: z.string().optional()
|
|
29
|
+
})
|
|
30
|
+
]).optional(),
|
|
31
|
+
plugins: z.array(z.object({ type: z.literal("local"), path: z.string() })).optional()
|
|
32
|
+
});
|
|
33
|
+
var jsonRpcRequestSchema = z.object({
|
|
34
|
+
jsonrpc: z.literal("2.0"),
|
|
35
|
+
method: z.string(),
|
|
36
|
+
params: z.record(z.string(), z.unknown()).optional(),
|
|
37
|
+
id: z.union([z.string(), z.number()]).optional()
|
|
38
|
+
});
|
|
39
|
+
var userMessageParamsSchema = z.object({
|
|
40
|
+
content: z.union([
|
|
41
|
+
z.string().min(1, "Content is required"),
|
|
42
|
+
z.array(z.record(z.string(), z.unknown())).min(1, "Content is required")
|
|
43
|
+
]).optional(),
|
|
44
|
+
artifacts: z.array(z.record(z.string(), z.unknown())).optional()
|
|
45
|
+
}).refine(
|
|
46
|
+
(params) => {
|
|
47
|
+
const hasContent = typeof params.content === "string" ? params.content.trim().length > 0 : Array.isArray(params.content) && params.content.length > 0;
|
|
48
|
+
const hasArtifacts = Array.isArray(params.artifacts) && params.artifacts.length > 0;
|
|
49
|
+
return hasContent || hasArtifacts;
|
|
50
|
+
},
|
|
51
|
+
{ error: "Either content or artifacts are required" }
|
|
52
|
+
);
|
|
53
|
+
var permissionResponseParamsSchema = z.object({
|
|
54
|
+
requestId: z.string().min(1, "requestId is required"),
|
|
55
|
+
optionId: z.string().min(1, "optionId is required"),
|
|
56
|
+
customInput: z.string().optional(),
|
|
57
|
+
answers: z.record(z.string(), z.string()).optional()
|
|
58
|
+
});
|
|
59
|
+
var setConfigOptionParamsSchema = z.object({
|
|
60
|
+
configId: z.string().min(1, "configId is required"),
|
|
61
|
+
value: z.string().min(1, "value is required")
|
|
62
|
+
});
|
|
63
|
+
var refreshSessionParamsSchema = z.object({
|
|
64
|
+
mcpServers: mcpServersSchema
|
|
65
|
+
});
|
|
66
|
+
var closeParamsSchema = z.object({
|
|
67
|
+
localGitState: handoffLocalGitStateSchema.optional()
|
|
68
|
+
}).optional();
|
|
69
|
+
var commandParamsSchemas = {
|
|
70
|
+
user_message: userMessageParamsSchema,
|
|
71
|
+
"posthog/user_message": userMessageParamsSchema,
|
|
72
|
+
cancel: z.object({}).optional(),
|
|
73
|
+
"posthog/cancel": z.object({}).optional(),
|
|
74
|
+
close: closeParamsSchema,
|
|
75
|
+
"posthog/close": closeParamsSchema,
|
|
76
|
+
permission_response: permissionResponseParamsSchema,
|
|
77
|
+
"posthog/permission_response": permissionResponseParamsSchema,
|
|
78
|
+
set_config_option: setConfigOptionParamsSchema,
|
|
79
|
+
"posthog/set_config_option": setConfigOptionParamsSchema,
|
|
80
|
+
refresh_session: refreshSessionParamsSchema,
|
|
81
|
+
"posthog/refresh_session": refreshSessionParamsSchema,
|
|
82
|
+
"_posthog/refresh_session": refreshSessionParamsSchema
|
|
83
|
+
};
|
|
84
|
+
function validateCommandParams(method, params) {
|
|
85
|
+
const schema = commandParamsSchemas[method] ?? commandParamsSchemas[method.replace(/^_?posthog\//, "")];
|
|
86
|
+
if (!schema) {
|
|
87
|
+
return { success: false, error: `Unknown method: ${method}` };
|
|
88
|
+
}
|
|
89
|
+
const result = schema.safeParse(params);
|
|
90
|
+
if (!result.success) {
|
|
91
|
+
return { success: false, error: result.error.message };
|
|
92
|
+
}
|
|
93
|
+
return { success: true, data: result.data };
|
|
94
|
+
}
|
|
95
|
+
export {
|
|
96
|
+
claudeCodeConfigSchema,
|
|
97
|
+
closeParamsSchema,
|
|
98
|
+
commandParamsSchemas,
|
|
99
|
+
handoffLocalGitStateSchema,
|
|
100
|
+
jsonRpcRequestSchema,
|
|
101
|
+
mcpServersSchema,
|
|
102
|
+
permissionResponseParamsSchema,
|
|
103
|
+
refreshSessionParamsSchema,
|
|
104
|
+
setConfigOptionParamsSchema,
|
|
105
|
+
userMessageParamsSchema,
|
|
106
|
+
validateCommandParams
|
|
107
|
+
};
|
|
108
|
+
//# sourceMappingURL=schemas.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/server/schemas.ts"],"sourcesContent":["import { z } from \"zod/v4\";\n\nconst httpHeaderSchema = z.object({\n name: z.string(),\n value: z.string(),\n});\n\nconst nullishString = z\n .string()\n .nullish()\n .transform((value) => value ?? null);\n\nexport const handoffLocalGitStateSchema = z.object({\n head: nullishString,\n branch: nullishString,\n upstreamHead: nullishString,\n upstreamRemote: nullishString,\n upstreamMergeRef: nullishString,\n});\n\nconst remoteMcpServerSchema = z.object({\n type: z.enum([\"http\", \"sse\"]),\n name: z.string().min(1, \"MCP server name is required\"),\n url: z.url({ error: \"MCP server url must be a valid URL\" }),\n headers: z.array(httpHeaderSchema).default([]),\n});\n\nexport const mcpServersSchema = z.array(remoteMcpServerSchema);\n\nexport type RemoteMcpServer = z.infer<typeof remoteMcpServerSchema>;\n\nexport const claudeCodeConfigSchema = z.object({\n systemPrompt: z\n .union([\n z.string(),\n z.object({\n type: z.literal(\"preset\"),\n preset: z.literal(\"claude_code\"),\n append: z.string().optional(),\n }),\n ])\n .optional(),\n plugins: z\n .array(z.object({ type: z.literal(\"local\"), path: z.string() }))\n .optional(),\n});\n\nexport const jsonRpcRequestSchema = z.object({\n jsonrpc: z.literal(\"2.0\"),\n method: z.string(),\n params: z.record(z.string(), z.unknown()).optional(),\n id: z.union([z.string(), z.number()]).optional(),\n});\n\nexport type JsonRpcRequest = z.infer<typeof jsonRpcRequestSchema>;\n\nexport const userMessageParamsSchema = z\n .object({\n content: z\n .union([\n z.string().min(1, \"Content is required\"),\n z\n .array(z.record(z.string(), z.unknown()))\n .min(1, \"Content is required\"),\n ])\n .optional(),\n artifacts: z.array(z.record(z.string(), z.unknown())).optional(),\n })\n .refine(\n (params) => {\n const hasContent =\n typeof params.content === \"string\"\n ? params.content.trim().length > 0\n : Array.isArray(params.content) && params.content.length > 0;\n const hasArtifacts =\n Array.isArray(params.artifacts) && params.artifacts.length > 0;\n\n return hasContent || hasArtifacts;\n },\n { error: \"Either content or artifacts are required\" },\n );\n\nexport const permissionResponseParamsSchema = z.object({\n requestId: z.string().min(1, \"requestId is required\"),\n optionId: z.string().min(1, \"optionId is required\"),\n customInput: z.string().optional(),\n answers: z.record(z.string(), z.string()).optional(),\n});\n\nexport const setConfigOptionParamsSchema = z.object({\n configId: z.string().min(1, \"configId is required\"),\n value: z.string().min(1, \"value is required\"),\n});\n\nexport const refreshSessionParamsSchema = z.object({\n mcpServers: mcpServersSchema,\n});\n\nexport const closeParamsSchema = z\n .object({\n localGitState: handoffLocalGitStateSchema.optional(),\n })\n .optional();\n\nexport const commandParamsSchemas = {\n user_message: userMessageParamsSchema,\n \"posthog/user_message\": userMessageParamsSchema,\n cancel: z.object({}).optional(),\n \"posthog/cancel\": z.object({}).optional(),\n close: closeParamsSchema,\n \"posthog/close\": closeParamsSchema,\n permission_response: permissionResponseParamsSchema,\n \"posthog/permission_response\": permissionResponseParamsSchema,\n set_config_option: setConfigOptionParamsSchema,\n \"posthog/set_config_option\": setConfigOptionParamsSchema,\n refresh_session: refreshSessionParamsSchema,\n \"posthog/refresh_session\": refreshSessionParamsSchema,\n \"_posthog/refresh_session\": refreshSessionParamsSchema,\n} as const;\n\nexport type CommandMethod = keyof typeof commandParamsSchemas;\n\nexport function validateCommandParams(\n method: string,\n params: unknown,\n): { success: true; data: unknown } | { success: false; error: string } {\n const schema =\n commandParamsSchemas[method as CommandMethod] ??\n commandParamsSchemas[\n method.replace(/^_?posthog\\//, \"\") as keyof typeof commandParamsSchemas\n ];\n\n if (!schema) {\n return { success: false, error: `Unknown method: ${method}` };\n }\n\n const result = schema.safeParse(params);\n if (!result.success) {\n return { success: false, error: result.error.message };\n }\n\n return { success: true, data: result.data };\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { PostHogAPIClient } from './posthog-api.js';
|
|
2
|
+
import { TreeSnapshot } from './types.js';
|
|
3
|
+
import { L as Logger } from './logger-RC7sPv0S.js';
|
|
4
|
+
import '@posthog/git/handoff';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* TreeTracker - Git tree-based state capture for cloud/local sync
|
|
8
|
+
*
|
|
9
|
+
* Captures the entire working state as a git tree hash + archive:
|
|
10
|
+
* - Atomic state snapshots (no partial syncs)
|
|
11
|
+
* - Efficient delta detection using git's diffing
|
|
12
|
+
* - Simpler resume logic (restore tree, continue)
|
|
13
|
+
*
|
|
14
|
+
* Uses Saga pattern for atomic operations with automatic rollback on failure.
|
|
15
|
+
* Uses a temporary git index to avoid modifying the user's staging area.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
interface TreeTrackerConfig {
|
|
19
|
+
repositoryPath: string;
|
|
20
|
+
taskId: string;
|
|
21
|
+
runId: string;
|
|
22
|
+
apiClient?: PostHogAPIClient;
|
|
23
|
+
logger?: Logger;
|
|
24
|
+
}
|
|
25
|
+
declare class TreeTracker {
|
|
26
|
+
private repositoryPath;
|
|
27
|
+
private taskId;
|
|
28
|
+
private runId;
|
|
29
|
+
private apiClient?;
|
|
30
|
+
private logger;
|
|
31
|
+
private lastTreeHash;
|
|
32
|
+
constructor(config: TreeTrackerConfig);
|
|
33
|
+
/**
|
|
34
|
+
* Capture current working tree state as a snapshot.
|
|
35
|
+
* Uses a temporary index to avoid modifying user's staging area.
|
|
36
|
+
* Uses Saga pattern for atomic operation with automatic cleanup on failure.
|
|
37
|
+
*/
|
|
38
|
+
captureTree(options?: {
|
|
39
|
+
interrupted?: boolean;
|
|
40
|
+
}): Promise<TreeSnapshot | null>;
|
|
41
|
+
/**
|
|
42
|
+
* Download and apply a tree snapshot.
|
|
43
|
+
* Uses Saga pattern for atomic operation with rollback on failure.
|
|
44
|
+
*/
|
|
45
|
+
applyTreeSnapshot(snapshot: TreeSnapshot): Promise<void>;
|
|
46
|
+
/**
|
|
47
|
+
* Get the last captured tree hash.
|
|
48
|
+
*/
|
|
49
|
+
getLastTreeHash(): string | null;
|
|
50
|
+
/**
|
|
51
|
+
* Set the last tree hash (used when resuming).
|
|
52
|
+
*/
|
|
53
|
+
setLastTreeHash(hash: string | null): void;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Check if a commit is available on any remote branch.
|
|
57
|
+
* Used to validate that cloud can fetch the base commit during handoff.
|
|
58
|
+
*/
|
|
59
|
+
declare function isCommitOnRemote(commit: string, cwd: string): Promise<boolean>;
|
|
60
|
+
/**
|
|
61
|
+
* Validate that a snapshot can be handed off to cloud execution.
|
|
62
|
+
* Cloud needs to be able to fetch the baseCommit from a remote.
|
|
63
|
+
*
|
|
64
|
+
* @throws Error if the snapshot cannot be restored on cloud
|
|
65
|
+
*/
|
|
66
|
+
declare function validateForCloudHandoff(snapshot: TreeSnapshot, repositoryPath: string): Promise<void>;
|
|
67
|
+
|
|
68
|
+
export { TreeSnapshot, TreeTracker, type TreeTrackerConfig, isCommitOnRemote, validateForCloudHandoff };
|