@posthog/agent 2.3.386 → 2.3.388

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.
Files changed (45) hide show
  1. package/dist/adapters/claude/session/jsonl-hydration.d.ts +1 -0
  2. package/dist/agent.d.ts +1 -0
  3. package/dist/agent.js +20 -2
  4. package/dist/agent.js.map +1 -1
  5. package/dist/handoff-checkpoint.d.ts +43 -0
  6. package/dist/handoff-checkpoint.js +6684 -0
  7. package/dist/handoff-checkpoint.js.map +1 -0
  8. package/dist/index.d.ts +2 -0
  9. package/dist/index.js +2 -0
  10. package/dist/index.js.map +1 -1
  11. package/dist/posthog-api.d.ts +2 -0
  12. package/dist/posthog-api.js +18 -2
  13. package/dist/posthog-api.js.map +1 -1
  14. package/dist/resume.d.ts +4 -8
  15. package/dist/resume.js +266 -6491
  16. package/dist/resume.js.map +1 -1
  17. package/dist/server/agent-server.d.ts +7 -16
  18. package/dist/server/agent-server.js +2333 -1383
  19. package/dist/server/agent-server.js.map +1 -1
  20. package/dist/server/bin.cjs +2332 -1382
  21. package/dist/server/bin.cjs.map +1 -1
  22. package/dist/server/schemas.d.ts +191 -0
  23. package/dist/server/schemas.js +108 -0
  24. package/dist/server/schemas.js.map +1 -0
  25. package/dist/tree-tracker.d.ts +1 -0
  26. package/dist/tree-tracker.js +18 -4
  27. package/dist/tree-tracker.js.map +1 -1
  28. package/dist/types.d.ts +18 -1
  29. package/dist/types.js +5 -0
  30. package/dist/types.js.map +1 -1
  31. package/package.json +10 -2
  32. package/src/acp-extensions.ts +3 -0
  33. package/src/handoff-checkpoint.test.ts +183 -0
  34. package/src/handoff-checkpoint.ts +367 -0
  35. package/src/posthog-api.test.ts +29 -0
  36. package/src/posthog-api.ts +13 -1
  37. package/src/resume.ts +27 -12
  38. package/src/sagas/apply-snapshot-saga.ts +7 -0
  39. package/src/sagas/capture-tree-saga.ts +10 -3
  40. package/src/sagas/resume-saga.test.ts +7 -47
  41. package/src/sagas/resume-saga.ts +42 -64
  42. package/src/sagas/test-fixtures.ts +46 -0
  43. package/src/server/agent-server.ts +193 -70
  44. package/src/server/schemas.ts +21 -2
  45. 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":[]}
@@ -1,6 +1,7 @@
1
1
  import { PostHogAPIClient } from './posthog-api.js';
2
2
  import { TreeSnapshot } from './types.js';
3
3
  import { L as Logger } from './logger-RC7sPv0S.js';
4
+ import '@posthog/git/handoff';
4
5
 
5
6
  /**
6
7
  * TreeTracker - Git tree-based state capture for cloud/local sync
@@ -6116,6 +6116,13 @@ var ApplySnapshotSaga = class extends Saga {
6116
6116
  const base64Content = Buffer.from(arrayBuffer).toString("utf-8");
6117
6117
  const binaryContent = Buffer.from(base64Content, "base64");
6118
6118
  await writeFile3(archivePath, binaryContent);
6119
+ this.log.info("Tree archive downloaded", {
6120
+ treeHash: snapshot.treeHash,
6121
+ snapshotBytes: binaryContent.byteLength,
6122
+ snapshotWireBytes: arrayBuffer.byteLength,
6123
+ totalBytes: binaryContent.byteLength,
6124
+ totalWireBytes: arrayBuffer.byteLength
6125
+ });
6119
6126
  },
6120
6127
  rollback: async () => {
6121
6128
  if (this.archivePath) {
@@ -6224,6 +6231,8 @@ var CaptureTreeSaga2 = class extends Saga {
6224
6231
  execute: async () => {
6225
6232
  const archiveContent = await readFile3(archivePath);
6226
6233
  const base64Content = archiveContent.toString("base64");
6234
+ const snapshotBytes = archiveContent.byteLength;
6235
+ const snapshotWireBytes = Buffer.byteLength(base64Content, "utf-8");
6227
6236
  const artifacts = await apiClient.uploadTaskArtifacts(taskId, runId, [
6228
6237
  {
6229
6238
  name: `trees/${treeHash}.tar.gz`,
@@ -6232,12 +6241,17 @@ var CaptureTreeSaga2 = class extends Saga {
6232
6241
  content_type: "application/gzip"
6233
6242
  }
6234
6243
  ]);
6235
- if (artifacts.length > 0 && artifacts[0].storage_path) {
6244
+ const uploadedArtifact = artifacts[0];
6245
+ if (uploadedArtifact?.storage_path) {
6236
6246
  this.log.info("Tree archive uploaded", {
6237
- storagePath: artifacts[0].storage_path,
6238
- treeHash
6247
+ storagePath: uploadedArtifact.storage_path,
6248
+ treeHash,
6249
+ snapshotBytes,
6250
+ snapshotWireBytes,
6251
+ totalBytes: snapshotBytes,
6252
+ totalWireBytes: snapshotWireBytes
6239
6253
  });
6240
- return artifacts[0].storage_path;
6254
+ return uploadedArtifact.storage_path;
6241
6255
  }
6242
6256
  return void 0;
6243
6257
  },