agent-session-replayer 0.1.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/README.md +239 -0
- package/dist/chunk-QE3DOXM4.js +142 -0
- package/dist/chunk-QE3DOXM4.js.map +1 -0
- package/dist/index.cjs +573 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +7 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.js +427 -0
- package/dist/index.js.map +1 -0
- package/dist/schema.cjs +169 -0
- package/dist/schema.cjs.map +1 -0
- package/dist/schema.d.cts +67 -0
- package/dist/schema.d.ts +67 -0
- package/dist/schema.js +16 -0
- package/dist/schema.js.map +1 -0
- package/dist/styles.css +1 -0
- package/dist/types-DBa28H8n.d.cts +63 -0
- package/dist/types-DBa28H8n.d.ts +63 -0
- package/package.json +47 -0
package/dist/schema.cjs
ADDED
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// src/schema.ts
|
|
21
|
+
var schema_exports = {};
|
|
22
|
+
__export(schema_exports, {
|
|
23
|
+
agentSessionContentJsonSchema: () => agentSessionContentJsonSchema,
|
|
24
|
+
parseAgentSessionContent: () => parseAgentSessionContent
|
|
25
|
+
});
|
|
26
|
+
module.exports = __toCommonJS(schema_exports);
|
|
27
|
+
var import_zod2 = require("zod");
|
|
28
|
+
|
|
29
|
+
// src/validation.ts
|
|
30
|
+
var import_zod = require("zod");
|
|
31
|
+
var nonEmpty = import_zod.z.string().min(1);
|
|
32
|
+
var actorSchema = import_zod.z.enum(["implementer", "reviewer"]);
|
|
33
|
+
var eventTypeSchema = import_zod.z.enum([
|
|
34
|
+
"task_received",
|
|
35
|
+
"plan",
|
|
36
|
+
"patch",
|
|
37
|
+
"review_request",
|
|
38
|
+
"review_start",
|
|
39
|
+
"blocking_finding",
|
|
40
|
+
"revision",
|
|
41
|
+
"verification",
|
|
42
|
+
"approval"
|
|
43
|
+
]);
|
|
44
|
+
var blockKindSchema = import_zod.z.enum([
|
|
45
|
+
"message",
|
|
46
|
+
"code",
|
|
47
|
+
"tool_call",
|
|
48
|
+
"tool_output",
|
|
49
|
+
"finding",
|
|
50
|
+
"patch",
|
|
51
|
+
"git_diff",
|
|
52
|
+
"status",
|
|
53
|
+
"result"
|
|
54
|
+
]);
|
|
55
|
+
var agentSchema = import_zod.z.object({
|
|
56
|
+
id: nonEmpty,
|
|
57
|
+
name: nonEmpty,
|
|
58
|
+
role: nonEmpty,
|
|
59
|
+
context: nonEmpty
|
|
60
|
+
}).strict();
|
|
61
|
+
var blockSchema = import_zod.z.object({
|
|
62
|
+
id: nonEmpty,
|
|
63
|
+
kind: blockKindSchema,
|
|
64
|
+
title: nonEmpty.optional(),
|
|
65
|
+
content: nonEmpty,
|
|
66
|
+
language: nonEmpty.optional()
|
|
67
|
+
}).strict();
|
|
68
|
+
var eventSchema = import_zod.z.object({
|
|
69
|
+
id: nonEmpty,
|
|
70
|
+
type: eventTypeSchema,
|
|
71
|
+
actor: actorSchema,
|
|
72
|
+
title: nonEmpty,
|
|
73
|
+
summary: nonEmpty,
|
|
74
|
+
blocks: import_zod.z.array(blockSchema).min(1).describe("Block IDs must be unique within each event. The runtime parser enforces this constraint.")
|
|
75
|
+
}).strict().superRefine((event, context) => {
|
|
76
|
+
if (new Set(event.blocks.map(({ id }) => id)).size !== event.blocks.length) {
|
|
77
|
+
context.addIssue({
|
|
78
|
+
code: "custom",
|
|
79
|
+
path: ["blocks"],
|
|
80
|
+
message: "Block IDs must be unique within an event"
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
var sessionSchema = import_zod.z.object({
|
|
85
|
+
id: nonEmpty,
|
|
86
|
+
title: nonEmpty,
|
|
87
|
+
summary: nonEmpty,
|
|
88
|
+
repository: nonEmpty,
|
|
89
|
+
branch: nonEmpty,
|
|
90
|
+
events: import_zod.z.array(eventSchema).min(1).describe("Event IDs must be unique within each case. The runtime parser enforces this constraint.")
|
|
91
|
+
}).strict().superRefine((session, context) => {
|
|
92
|
+
if (new Set(session.events.map(({ id }) => id)).size !== session.events.length) {
|
|
93
|
+
context.addIssue({
|
|
94
|
+
code: "custom",
|
|
95
|
+
path: ["events"],
|
|
96
|
+
message: "Event IDs must be unique within a case"
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
});
|
|
100
|
+
var colorsSchema = import_zod.z.object({
|
|
101
|
+
background: import_zod.z.string().optional(),
|
|
102
|
+
surface: import_zod.z.string().optional(),
|
|
103
|
+
border: import_zod.z.string().optional(),
|
|
104
|
+
text: import_zod.z.string().optional(),
|
|
105
|
+
muted: import_zod.z.string().optional(),
|
|
106
|
+
implementer: import_zod.z.string().optional(),
|
|
107
|
+
reviewer: import_zod.z.string().optional(),
|
|
108
|
+
success: import_zod.z.string().optional(),
|
|
109
|
+
danger: import_zod.z.string().optional(),
|
|
110
|
+
focus: import_zod.z.string().optional()
|
|
111
|
+
}).strict();
|
|
112
|
+
var replayContentShape = {
|
|
113
|
+
agents: import_zod.z.object({ implementer: agentSchema, reviewer: agentSchema }).strict(),
|
|
114
|
+
cases: import_zod.z.array(sessionSchema).min(1).describe("Case IDs must be unique across this array. The runtime parser enforces this constraint.")
|
|
115
|
+
};
|
|
116
|
+
function addReplayContentIssues(value, context) {
|
|
117
|
+
if (new Set(value.cases.map(({ id }) => id)).size !== value.cases.length) {
|
|
118
|
+
context.addIssue({ code: "custom", path: ["cases"], message: "Case IDs must be unique" });
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
var replayContentSchema = import_zod.z.object(replayContentShape).strict().superRefine(addReplayContentIssues);
|
|
122
|
+
var propsSchema = import_zod.z.object({
|
|
123
|
+
...replayContentShape,
|
|
124
|
+
typingSpeed: import_zod.z.number().finite().positive(),
|
|
125
|
+
eventDelayMs: import_zod.z.number().finite().nonnegative(),
|
|
126
|
+
height: import_zod.z.number({ error: "height must be greater than zero." }).refine((value) => Number.isFinite(value) && value > 0, "height must be greater than zero."),
|
|
127
|
+
colors: colorsSchema.optional(),
|
|
128
|
+
caseIndex: import_zod.z.number().int().nonnegative().optional(),
|
|
129
|
+
initialCaseIndex: import_zod.z.number().int().nonnegative(),
|
|
130
|
+
className: import_zod.z.string().optional(),
|
|
131
|
+
onCaseChange: import_zod.z.function().optional(),
|
|
132
|
+
onEventStart: import_zod.z.function().optional(),
|
|
133
|
+
onEventComplete: import_zod.z.function().optional(),
|
|
134
|
+
onCaseComplete: import_zod.z.function().optional()
|
|
135
|
+
}).strict().superRefine((props, context) => {
|
|
136
|
+
addReplayContentIssues(props, context);
|
|
137
|
+
for (const key of ["caseIndex", "initialCaseIndex"]) {
|
|
138
|
+
const value = props[key];
|
|
139
|
+
if (value !== void 0 && value >= props.cases.length) {
|
|
140
|
+
context.addIssue({
|
|
141
|
+
code: "custom",
|
|
142
|
+
path: [key],
|
|
143
|
+
message: `${key} must reference an available case`
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
});
|
|
148
|
+
function formatPath(path) {
|
|
149
|
+
const formatted = path.reduce((result, part) => typeof part === "number" ? `${result}[${part}]` : result ? `${result}.${String(part)}` : String(part), "");
|
|
150
|
+
return formatted || "$";
|
|
151
|
+
}
|
|
152
|
+
function parseAgentSessionContent(value) {
|
|
153
|
+
const result = replayContentSchema.safeParse(value);
|
|
154
|
+
if (result.success) return result.data;
|
|
155
|
+
const details = result.error.issues.map((issue) => `${formatPath(issue.path)}: ${issue.message}`).join("; ");
|
|
156
|
+
throw new Error(`Replay content is invalid: ${details}`);
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
// src/schema.ts
|
|
160
|
+
var agentSessionContentJsonSchema = import_zod2.z.toJSONSchema(replayContentSchema, {
|
|
161
|
+
target: "draft-2020-12",
|
|
162
|
+
reused: "ref"
|
|
163
|
+
});
|
|
164
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
165
|
+
0 && (module.exports = {
|
|
166
|
+
agentSessionContentJsonSchema,
|
|
167
|
+
parseAgentSessionContent
|
|
168
|
+
});
|
|
169
|
+
//# sourceMappingURL=schema.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/schema.ts","../src/validation.ts"],"sourcesContent":["import { z } from \"zod\";\nimport type { AgentSessionContent } from \"./types\";\nimport { parseAgentSessionContent, replayContentSchema } from \"./validation\";\n\nexport type { AgentSessionContent };\nexport { parseAgentSessionContent };\n\nexport const agentSessionContentJsonSchema = z.toJSONSchema(replayContentSchema, {\n target: \"draft-2020-12\",\n reused: \"ref\",\n});\n","import { z } from \"zod\";\nimport type { AgentSessionContent, AgentSessionReplayerProps } from \"./types\";\n\nconst nonEmpty = z.string().min(1);\nconst actorSchema = z.enum([\"implementer\", \"reviewer\"]);\nconst eventTypeSchema = z.enum([\n \"task_received\", \"plan\", \"patch\", \"review_request\", \"review_start\",\n \"blocking_finding\", \"revision\", \"verification\", \"approval\",\n]);\nconst blockKindSchema = z.enum([\n \"message\", \"code\", \"tool_call\", \"tool_output\", \"finding\", \"patch\",\n \"git_diff\", \"status\", \"result\",\n]);\n\nconst agentSchema = z.object({\n id: nonEmpty,\n name: nonEmpty,\n role: nonEmpty,\n context: nonEmpty,\n}).strict();\n\nconst blockSchema = z.object({\n id: nonEmpty,\n kind: blockKindSchema,\n title: nonEmpty.optional(),\n content: nonEmpty,\n language: nonEmpty.optional(),\n}).strict();\n\nconst eventSchema = z.object({\n id: nonEmpty,\n type: eventTypeSchema,\n actor: actorSchema,\n title: nonEmpty,\n summary: nonEmpty,\n blocks: z.array(blockSchema).min(1)\n .describe(\"Block IDs must be unique within each event. The runtime parser enforces this constraint.\"),\n}).strict().superRefine((event, context) => {\n if (new Set(event.blocks.map(({ id }) => id)).size !== event.blocks.length) {\n context.addIssue({\n code: \"custom\",\n path: [\"blocks\"],\n message: \"Block IDs must be unique within an event\",\n });\n }\n});\n\nconst sessionSchema = z.object({\n id: nonEmpty,\n title: nonEmpty,\n summary: nonEmpty,\n repository: nonEmpty,\n branch: nonEmpty,\n events: z.array(eventSchema).min(1)\n .describe(\"Event IDs must be unique within each case. The runtime parser enforces this constraint.\"),\n}).strict().superRefine((session, context) => {\n if (new Set(session.events.map(({ id }) => id)).size !== session.events.length) {\n context.addIssue({\n code: \"custom\",\n path: [\"events\"],\n message: \"Event IDs must be unique within a case\",\n });\n }\n});\n\nconst colorsSchema = z.object({\n background: z.string().optional(),\n surface: z.string().optional(),\n border: z.string().optional(),\n text: z.string().optional(),\n muted: z.string().optional(),\n implementer: z.string().optional(),\n reviewer: z.string().optional(),\n success: z.string().optional(),\n danger: z.string().optional(),\n focus: z.string().optional(),\n}).strict();\n\nconst replayContentShape = {\n agents: z.object({ implementer: agentSchema, reviewer: agentSchema }).strict(),\n cases: z.array(sessionSchema).min(1)\n .describe(\"Case IDs must be unique across this array. The runtime parser enforces this constraint.\"),\n};\n\nfunction addReplayContentIssues(\n value: { cases: Array<{ id: string }> },\n context: z.RefinementCtx,\n) {\n if (new Set(value.cases.map(({ id }) => id)).size !== value.cases.length) {\n context.addIssue({ code: \"custom\", path: [\"cases\"], message: \"Case IDs must be unique\" });\n }\n}\n\nexport const replayContentSchema = z.object(replayContentShape)\n .strict()\n .superRefine(addReplayContentIssues);\n\nconst propsSchema = z.object({\n ...replayContentShape,\n typingSpeed: z.number().finite().positive(),\n eventDelayMs: z.number().finite().nonnegative(),\n height: z.number({ error: \"height must be greater than zero.\" })\n .refine((value) => Number.isFinite(value) && value > 0, \"height must be greater than zero.\"),\n colors: colorsSchema.optional(),\n caseIndex: z.number().int().nonnegative().optional(),\n initialCaseIndex: z.number().int().nonnegative(),\n className: z.string().optional(),\n onCaseChange: z.function().optional(),\n onEventStart: z.function().optional(),\n onEventComplete: z.function().optional(),\n onCaseComplete: z.function().optional(),\n}).strict().superRefine((props, context) => {\n addReplayContentIssues(props, context);\n\n for (const key of [\"caseIndex\", \"initialCaseIndex\"] as const) {\n const value = props[key];\n if (value !== undefined && value >= props.cases.length) {\n context.addIssue({\n code: \"custom\",\n path: [key],\n message: `${key} must reference an available case`,\n });\n }\n }\n});\n\ntype ParsedProps = AgentSessionReplayerProps & Required<Pick<AgentSessionReplayerProps,\n \"typingSpeed\" | \"eventDelayMs\" | \"height\" | \"initialCaseIndex\"\n>>;\n\nfunction formatPath(path: PropertyKey[]): string {\n const formatted = path.reduce<string>((result, part) => (\n typeof part === \"number\"\n ? `${result}[${part}]`\n : result ? `${result}.${String(part)}` : String(part)\n ), \"\");\n\n return formatted || \"$\";\n}\n\nexport function parseReplayerProps(value: unknown): ParsedProps {\n const result = propsSchema.safeParse(value);\n if (result.success) return result.data as ParsedProps;\n\n const details = result.error.issues\n .map((issue) => `${formatPath(issue.path)}: ${issue.message}`)\n .join(\"; \");\n throw new Error(`AgentSessionReplayer received invalid props: ${details}`);\n}\n\nexport function parseAgentSessionContent(value: unknown): AgentSessionContent {\n const result = replayContentSchema.safeParse(value);\n if (result.success) return result.data as AgentSessionContent;\n\n const details = result.error.issues\n .map((issue) => `${formatPath(issue.path)}: ${issue.message}`)\n .join(\"; \");\n throw new Error(`Replay content is invalid: ${details}`);\n}\n"],"mappings":"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","names":["import_zod"]}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { i as AgentSessionContent } from './types-DBa28H8n.cjs';
|
|
3
|
+
|
|
4
|
+
declare function parseAgentSessionContent(value: unknown): AgentSessionContent;
|
|
5
|
+
|
|
6
|
+
declare const agentSessionContentJsonSchema: z.core.ZodStandardJSONSchemaPayload<z.ZodObject<{
|
|
7
|
+
agents: z.ZodObject<{
|
|
8
|
+
implementer: z.ZodObject<{
|
|
9
|
+
id: z.ZodString;
|
|
10
|
+
name: z.ZodString;
|
|
11
|
+
role: z.ZodString;
|
|
12
|
+
context: z.ZodString;
|
|
13
|
+
}, z.core.$strict>;
|
|
14
|
+
reviewer: z.ZodObject<{
|
|
15
|
+
id: z.ZodString;
|
|
16
|
+
name: z.ZodString;
|
|
17
|
+
role: z.ZodString;
|
|
18
|
+
context: z.ZodString;
|
|
19
|
+
}, z.core.$strict>;
|
|
20
|
+
}, z.core.$strict>;
|
|
21
|
+
cases: z.ZodArray<z.ZodObject<{
|
|
22
|
+
id: z.ZodString;
|
|
23
|
+
title: z.ZodString;
|
|
24
|
+
summary: z.ZodString;
|
|
25
|
+
repository: z.ZodString;
|
|
26
|
+
branch: z.ZodString;
|
|
27
|
+
events: z.ZodArray<z.ZodObject<{
|
|
28
|
+
id: z.ZodString;
|
|
29
|
+
type: z.ZodEnum<{
|
|
30
|
+
task_received: "task_received";
|
|
31
|
+
plan: "plan";
|
|
32
|
+
patch: "patch";
|
|
33
|
+
review_request: "review_request";
|
|
34
|
+
review_start: "review_start";
|
|
35
|
+
blocking_finding: "blocking_finding";
|
|
36
|
+
revision: "revision";
|
|
37
|
+
verification: "verification";
|
|
38
|
+
approval: "approval";
|
|
39
|
+
}>;
|
|
40
|
+
actor: z.ZodEnum<{
|
|
41
|
+
implementer: "implementer";
|
|
42
|
+
reviewer: "reviewer";
|
|
43
|
+
}>;
|
|
44
|
+
title: z.ZodString;
|
|
45
|
+
summary: z.ZodString;
|
|
46
|
+
blocks: z.ZodArray<z.ZodObject<{
|
|
47
|
+
id: z.ZodString;
|
|
48
|
+
kind: z.ZodEnum<{
|
|
49
|
+
message: "message";
|
|
50
|
+
patch: "patch";
|
|
51
|
+
code: "code";
|
|
52
|
+
tool_call: "tool_call";
|
|
53
|
+
tool_output: "tool_output";
|
|
54
|
+
finding: "finding";
|
|
55
|
+
git_diff: "git_diff";
|
|
56
|
+
status: "status";
|
|
57
|
+
result: "result";
|
|
58
|
+
}>;
|
|
59
|
+
title: z.ZodOptional<z.ZodString>;
|
|
60
|
+
content: z.ZodString;
|
|
61
|
+
language: z.ZodOptional<z.ZodString>;
|
|
62
|
+
}, z.core.$strict>>;
|
|
63
|
+
}, z.core.$strict>>;
|
|
64
|
+
}, z.core.$strict>>;
|
|
65
|
+
}, z.core.$strict>>;
|
|
66
|
+
|
|
67
|
+
export { AgentSessionContent, agentSessionContentJsonSchema, parseAgentSessionContent };
|
package/dist/schema.d.ts
ADDED
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { i as AgentSessionContent } from './types-DBa28H8n.js';
|
|
3
|
+
|
|
4
|
+
declare function parseAgentSessionContent(value: unknown): AgentSessionContent;
|
|
5
|
+
|
|
6
|
+
declare const agentSessionContentJsonSchema: z.core.ZodStandardJSONSchemaPayload<z.ZodObject<{
|
|
7
|
+
agents: z.ZodObject<{
|
|
8
|
+
implementer: z.ZodObject<{
|
|
9
|
+
id: z.ZodString;
|
|
10
|
+
name: z.ZodString;
|
|
11
|
+
role: z.ZodString;
|
|
12
|
+
context: z.ZodString;
|
|
13
|
+
}, z.core.$strict>;
|
|
14
|
+
reviewer: z.ZodObject<{
|
|
15
|
+
id: z.ZodString;
|
|
16
|
+
name: z.ZodString;
|
|
17
|
+
role: z.ZodString;
|
|
18
|
+
context: z.ZodString;
|
|
19
|
+
}, z.core.$strict>;
|
|
20
|
+
}, z.core.$strict>;
|
|
21
|
+
cases: z.ZodArray<z.ZodObject<{
|
|
22
|
+
id: z.ZodString;
|
|
23
|
+
title: z.ZodString;
|
|
24
|
+
summary: z.ZodString;
|
|
25
|
+
repository: z.ZodString;
|
|
26
|
+
branch: z.ZodString;
|
|
27
|
+
events: z.ZodArray<z.ZodObject<{
|
|
28
|
+
id: z.ZodString;
|
|
29
|
+
type: z.ZodEnum<{
|
|
30
|
+
task_received: "task_received";
|
|
31
|
+
plan: "plan";
|
|
32
|
+
patch: "patch";
|
|
33
|
+
review_request: "review_request";
|
|
34
|
+
review_start: "review_start";
|
|
35
|
+
blocking_finding: "blocking_finding";
|
|
36
|
+
revision: "revision";
|
|
37
|
+
verification: "verification";
|
|
38
|
+
approval: "approval";
|
|
39
|
+
}>;
|
|
40
|
+
actor: z.ZodEnum<{
|
|
41
|
+
implementer: "implementer";
|
|
42
|
+
reviewer: "reviewer";
|
|
43
|
+
}>;
|
|
44
|
+
title: z.ZodString;
|
|
45
|
+
summary: z.ZodString;
|
|
46
|
+
blocks: z.ZodArray<z.ZodObject<{
|
|
47
|
+
id: z.ZodString;
|
|
48
|
+
kind: z.ZodEnum<{
|
|
49
|
+
message: "message";
|
|
50
|
+
patch: "patch";
|
|
51
|
+
code: "code";
|
|
52
|
+
tool_call: "tool_call";
|
|
53
|
+
tool_output: "tool_output";
|
|
54
|
+
finding: "finding";
|
|
55
|
+
git_diff: "git_diff";
|
|
56
|
+
status: "status";
|
|
57
|
+
result: "result";
|
|
58
|
+
}>;
|
|
59
|
+
title: z.ZodOptional<z.ZodString>;
|
|
60
|
+
content: z.ZodString;
|
|
61
|
+
language: z.ZodOptional<z.ZodString>;
|
|
62
|
+
}, z.core.$strict>>;
|
|
63
|
+
}, z.core.$strict>>;
|
|
64
|
+
}, z.core.$strict>>;
|
|
65
|
+
}, z.core.$strict>>;
|
|
66
|
+
|
|
67
|
+
export { AgentSessionContent, agentSessionContentJsonSchema, parseAgentSessionContent };
|
package/dist/schema.js
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import {
|
|
2
|
+
parseAgentSessionContent,
|
|
3
|
+
replayContentSchema
|
|
4
|
+
} from "./chunk-QE3DOXM4.js";
|
|
5
|
+
|
|
6
|
+
// src/schema.ts
|
|
7
|
+
import { z } from "zod";
|
|
8
|
+
var agentSessionContentJsonSchema = z.toJSONSchema(replayContentSchema, {
|
|
9
|
+
target: "draft-2020-12",
|
|
10
|
+
reused: "ref"
|
|
11
|
+
});
|
|
12
|
+
export {
|
|
13
|
+
agentSessionContentJsonSchema,
|
|
14
|
+
parseAgentSessionContent
|
|
15
|
+
};
|
|
16
|
+
//# sourceMappingURL=schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/schema.ts"],"sourcesContent":["import { z } from \"zod\";\nimport type { AgentSessionContent } from \"./types\";\nimport { parseAgentSessionContent, replayContentSchema } from \"./validation\";\n\nexport type { AgentSessionContent };\nexport { parseAgentSessionContent };\n\nexport const agentSessionContentJsonSchema = z.toJSONSchema(replayContentSchema, {\n target: \"draft-2020-12\",\n reused: \"ref\",\n});\n"],"mappings":";;;;;;AAAA,SAAS,SAAS;AAOX,IAAM,gCAAgC,EAAE,aAAa,qBAAqB;AAAA,EAC/E,QAAQ;AAAA,EACR,QAAQ;AACV,CAAC;","names":[]}
|
package/dist/styles.css
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@layer components{[data-agent-session-replayer]{--asr-background:#090b0d;--asr-surface:#0b0e11;--asr-border:#292d35;--asr-text:#e8e5e0;--asr-muted:#777c88;--asr-implementer:#f5eedf;--asr-reviewer:#df754f;--asr-success:#42d17b;--asr-danger:#ed736e;--asr-focus:#91beff;width:auto;min-width:0;max-width:100%;height:var(--asr-height);border:1px solid var(--asr-border);min-height:0;color:var(--asr-text);background:var(--asr-background);font-synthesis:none;border-radius:22px;flex-direction:column;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Open Sans,Helvetica Neue,sans-serif;display:flex;overflow:hidden;box-shadow:0 28px 100px #0008}[data-agent-session-replayer],[data-agent-session-replayer] [class^=asr-],[data-agent-session-replayer] [class*=\ asr-],[data-agent-session-replayer] [class^=asr-]:before,[data-agent-session-replayer] [class^=asr-]:after,[data-agent-session-replayer] [class*=\ asr-]:before,[data-agent-session-replayer] [class*=\ asr-]:after{box-sizing:border-box}[data-agent-session-replayer] .asr-topbar{border-bottom:1px solid var(--asr-border);background:color-mix(in srgb,var(--asr-background) 92%,transparent);flex:none;justify-content:space-between;align-items:center;min-height:68px;padding:0 max(24px,50vw - 750px);display:flex}[data-agent-session-replayer] .asr-brand{color:#e19070;text-transform:uppercase;letter-spacing:.15em;font:700 11px ui-monospace,monospace}[data-agent-session-replayer] .asr-truth-chip{color:#858a95;border:1px solid var(--asr-border);border-radius:99px;padding:7px 11px;font:10px ui-monospace,monospace}[data-agent-session-replayer] .asr-hero{text-align:center;flex:none;max-width:950px;margin:auto;padding:24px 22px 18px}[data-agent-session-replayer] .asr-kicker{color:var(--asr-success);text-transform:uppercase;letter-spacing:.2em;font:12px ui-monospace,monospace}[data-agent-session-replayer] .asr-hero h1{letter-spacing:-.02em;margin:14px 0;font-size:16px;font-weight:580;line-height:1.3}[data-agent-session-replayer] .asr-hero>p:last-child{color:#8e929b;max-width:630px;margin:22px auto 0;font-size:14px;line-height:1.65}[data-agent-session-replayer] .asr-chat-stage{background:var(--asr-surface);flex-direction:column;flex:1;width:100%;height:100%;min-height:0;margin:0;display:flex;overflow:hidden}[data-agent-session-replayer] .asr-frame-header{flex:none;padding:28px 48px 16px}[data-agent-session-replayer] .asr-workflow-line{align-items:center;gap:22px;display:flex}[data-agent-session-replayer] .asr-brand{border:1px solid color-mix(in srgb,var(--asr-reviewer) 45%,var(--asr-border));color:#e19070;text-transform:uppercase;letter-spacing:.15em;border-radius:999px;align-items:center;gap:8px;padding:8px 14px;font:700 11px ui-monospace,monospace;display:inline-flex}[data-agent-session-replayer] .asr-review-label{color:#777c88;text-transform:uppercase;letter-spacing:.24em;font:11px ui-monospace,monospace}[data-agent-session-replayer] .asr-case-summary{color:var(--asr-success);letter-spacing:.04em;margin:15px 0 0;font:13px ui-monospace,monospace}[data-agent-session-replayer] .asr-case-nav{flex:none;justify-content:space-between;align-items:center;gap:24px;padding:9px 48px 10px;display:flex}[data-agent-session-replayer] .asr-case-nav>div:first-child{gap:3px;min-width:0;display:grid}[data-agent-session-replayer] .asr-case-progress{color:#777c88;text-transform:lowercase;font:11px ui-monospace,monospace}[data-agent-session-replayer] .asr-repository{color:#5e6470;font:10px ui-monospace,monospace}[data-agent-session-replayer] .asr-stage-header{border-bottom:1px solid var(--asr-border);color:#8a8f9a;flex:none;justify-content:space-between;align-items:center;min-height:66px;padding:0 34px;font:11px ui-monospace,monospace;display:flex}[data-agent-session-replayer] .asr-stage-header div{align-items:center;gap:14px;display:flex}[data-agent-session-replayer] .asr-stage-header strong{color:#d0d1d4}[data-agent-session-replayer] .asr-stage-header div span{color:#5e6470;white-space:nowrap}[data-agent-session-replayer] .asr-case-title{color:var(--asr-text);margin:0;font:600 14px/1.3 ui-monospace,monospace}[data-agent-session-replayer] .asr-agent-row{grid-template-columns:1fr 1fr;gap:40px;padding:32px 48px 22px;display:grid}[data-agent-session-replayer] .asr-agent{opacity:.46;align-items:flex-start;gap:14px;transition:opacity .18s;display:flex}[data-agent-session-replayer] .asr-agent.asr-is-active{opacity:1}[data-agent-session-replayer] .asr-agent--reviewer{text-align:right;flex-direction:row-reverse;justify-self:end}[data-agent-session-replayer] .asr-agent-avatar{background:var(--asr-implementer);color:#17191d;border-radius:50%;flex-shrink:0;place-items:center;width:40px;height:40px;font-size:16px;display:grid}[data-agent-session-replayer] .asr-agent--reviewer .asr-agent-avatar{background:var(--asr-reviewer)}[data-agent-session-replayer] .asr-agent strong{font:700 13px ui-monospace,monospace}[data-agent-session-replayer] .asr-agent div>span{color:#686e7b;font:12px ui-monospace,monospace}[data-agent-session-replayer] .asr-agent--reviewer div>span{color:var(--asr-danger)}[data-agent-session-replayer] .asr-agent p{color:#6b707b;margin:8px 0 0;font-size:11px}[data-agent-session-replayer] .asr-transcript{overscroll-behavior:contain;scrollbar-gutter:stable;flex-direction:column;flex:1;gap:10px;min-height:0;padding:18px 48px 36px;display:flex;overflow-y:auto}[data-agent-session-replayer] .asr-collapse-shell{contain:layout paint;min-height:46px;position:relative;overflow:hidden}[data-agent-session-replayer] .asr-collapse-expanded{position:relative}[data-agent-session-replayer] .asr-collapse-summary{opacity:0;pointer-events:none;position:absolute;inset:0}[data-agent-session-replayer] .asr-completed-event{min-width:0}[data-agent-session-replayer] .asr-event-summary-row{color:#666c77;width:100%;min-height:46px;font:inherit;text-align:left;cursor:pointer;background:#0c0f12;border:1px solid #20242b;border-radius:9px;grid-template-columns:34px 180px minmax(0,1fr) 18px;align-items:center;gap:12px;padding:8px 15px;display:grid}[data-agent-session-replayer] .asr-event-summary-row--reviewer{border-color:#332322;margin-left:18%}[data-agent-session-replayer] .asr-event-summary-row--implementer{margin-right:18%}[data-agent-session-replayer] .asr-event-summary-row span{font:9px ui-monospace,monospace}[data-agent-session-replayer] .asr-event-summary-row strong{color:#9b9ea6;font-size:11px}[data-agent-session-replayer] .asr-event-summary-row p{white-space:nowrap;text-overflow:ellipsis;margin:0;font-size:10px;overflow:hidden}[data-agent-session-replayer] button.asr-event-summary-row:hover{background:#101419;border-color:#3a404a}[data-agent-session-replayer] button.asr-event-summary-row:focus-visible{outline:2px solid var(--asr-focus);outline-offset:3px}[data-agent-session-replayer] .asr-disclosure{justify-self:end;transition:transform .18s}[data-agent-session-replayer] .asr-expanded-event{width:min(900px,78%);padding-top:8px;position:relative}[data-agent-session-replayer] .asr-expanded-event--reviewer{margin-left:auto}[data-agent-session-replayer] .asr-event-heading{color:#838894;justify-content:space-between;align-items:center;margin:0 0 10px;font:11px ui-monospace,monospace;display:flex}[data-agent-session-replayer] .asr-expanded-event--reviewer .asr-event-heading{color:var(--asr-danger);flex-direction:row-reverse}[data-agent-session-replayer] .asr-event-heading strong{color:#c8c8ca;font-size:12px}[data-agent-session-replayer] .asr-expanded-toggle{color:#838894;width:100%;text-align:inherit;cursor:pointer;background:0 0;border:0;justify-content:space-between;align-items:center;margin:0 0 10px;padding:0;font:11px ui-monospace,monospace;display:flex}[data-agent-session-replayer] .asr-expanded-event--reviewer .asr-expanded-toggle{color:var(--asr-danger);flex-direction:row-reverse}[data-agent-session-replayer] .asr-expanded-toggle strong{color:#c8c8ca;font-size:12px}[data-agent-session-replayer] .asr-expanded-toggle:focus-visible{outline:2px solid var(--asr-focus);outline-offset:3px}[data-agent-session-replayer] .asr-blocks{flex-direction:column;gap:10px;display:flex}[data-agent-session-replayer] .asr-chat-block{color:#c4c5c9;background:#0a0c0f;border:1px solid #2a2e36;border-radius:10px;overflow:hidden}[data-agent-session-replayer] .asr-chat-block header{color:#878d99;border-bottom:1px solid #242830;padding:9px 14px;font:10px ui-monospace,monospace}[data-agent-session-replayer] .asr-chat-block header span{color:#555c68;text-transform:uppercase;margin-right:12px}[data-agent-session-replayer] .asr-chat-block p,[data-agent-session-replayer] .asr-chat-block pre{white-space:pre-wrap;overflow-wrap:anywhere;margin:0;padding:16px 18px;font-size:13px;line-height:1.7}[data-agent-session-replayer] .asr-chat-block pre{color:#c7ccd6;font:12px/1.65 ui-monospace,monospace;overflow:auto}[data-agent-session-replayer] .asr-chat-block--message{background:#101216}[data-agent-session-replayer] .asr-expanded-event--reviewer .asr-chat-block--message{background:#1a1010;border-color:#61231f}[data-agent-session-replayer] .asr-chat-block--finding{background:#21100f;border-color:#732821}[data-agent-session-replayer] .asr-chat-block--patch,[data-agent-session-replayer] .asr-chat-block--result{background:#0b1712;border-color:#174e32}[data-agent-session-replayer] .asr-chat-block--git_diff{background:#0b1015;border-color:#263746}[data-agent-session-replayer] .asr-chat-block .asr-git-diff{white-space:pre;overflow-wrap:normal;overflow:auto hidden}[data-agent-session-replayer] .asr-git-diff-line{width:max-content;min-width:100%;padding:0 4px;display:block}[data-agent-session-replayer] .asr-git-diff-line--metadata{color:#8b93a1}[data-agent-session-replayer] .asr-git-diff-line--hunk{color:#9ac8ff;background:#132235}[data-agent-session-replayer] .asr-git-diff-line--addition{color:#86d9a5;background:#12301e}[data-agent-session-replayer] .asr-git-diff-line--removal{color:#ff9b97;background:#381719}[data-agent-session-replayer] .asr-chat-block--status{color:#8c929d;width:max-content;max-width:100%}[data-agent-session-replayer] .asr-chat-block--status p{padding:10px 14px;font:10px ui-monospace,monospace}[data-agent-session-replayer] .asr-chat-block--tool_call header{color:#83aef4}[data-agent-session-replayer] .asr-typing-caret{background:#ddd;width:7px;height:15px;margin:8px 0 0 5px;animation:.75s step-end infinite asr-blink;display:inline-block}[data-agent-session-replayer] .asr-controls{-webkit-backdrop-filter:none;backdrop-filter:none;background:0 0;flex:none;align-items:center;gap:8px;padding:0;display:flex;position:static}[data-agent-session-replayer] .asr-controls button{white-space:normal;color:#b7bac1;cursor:pointer;min-width:0;min-height:44px;font:inherit;background:#111419;border:1px solid #30343c;border-radius:8px}[data-agent-session-replayer] .asr-controls button:focus-visible{outline:2px solid var(--asr-focus);outline-offset:3px}[data-agent-session-replayer] .asr-controls button:disabled{opacity:.3;cursor:not-allowed}[data-agent-session-replayer] .asr-controls button:not(:disabled):active{transform:scale(.98)}[data-agent-session-replayer] .asr-controls .asr-next-button{color:#dfe9fa;background:#202631;border-color:#91beff;min-width:150px;font-weight:600}[data-agent-session-replayer] .asr-live-status{clip:rect(0 0 0 0);width:1px;height:1px;position:absolute;overflow:hidden}[data-agent-session-replayer] .asr-footer{border-top:1px solid var(--asr-border);color:#666c77;flex:none;justify-content:space-between;align-items:center;gap:20px;padding:14px 48px;font-size:10px;line-height:1.5;display:flex}[data-agent-session-replayer] .asr-watermark{color:color-mix(in srgb,var(--asr-text) 58%,var(--asr-muted));letter-spacing:.08em;flex:none;font:600 10px ui-monospace,monospace;text-decoration:none}[data-agent-session-replayer] .asr-watermark:hover{color:var(--asr-text)}[data-agent-session-replayer] .asr-watermark:focus-visible{outline:2px solid var(--asr-focus);outline-offset:3px;border-radius:2px}}@keyframes asr-blink{50%{opacity:0}}@media (max-width:760px){[data-agent-session-replayer]{border-radius:13px}[data-agent-session-replayer] .asr-frame-header{padding:20px 16px 10px}[data-agent-session-replayer] .asr-workflow-line{flex-wrap:wrap;gap:10px}[data-agent-session-replayer] .asr-case-summary{font-size:11px}[data-agent-session-replayer] .asr-case-nav{align-items:flex-end;padding:9px 16px 10px}[data-agent-session-replayer] .asr-stage-header{padding:0 16px}[data-agent-session-replayer] .asr-stage-header div span{display:none}[data-agent-session-replayer] .asr-agent-row{grid-template-columns:1fr;gap:12px;padding:22px 16px 10px}[data-agent-session-replayer] .asr-agent--reviewer{justify-self:stretch}[data-agent-session-replayer] .asr-agent{opacity:.35}[data-agent-session-replayer] .asr-agent p{display:none}[data-agent-session-replayer] .asr-transcript{min-height:0;padding:12px 14px 24px}[data-agent-session-replayer] .asr-event-summary-row{grid-template-columns:24px minmax(0,1fr) 18px;padding:7px 9px}[data-agent-session-replayer] .asr-event-summary-row p{display:none}[data-agent-session-replayer] .asr-event-summary-row--reviewer,[data-agent-session-replayer] .asr-event-summary-row--implementer{margin:0}[data-agent-session-replayer] .asr-expanded-event{width:100%}[data-agent-session-replayer] .asr-chat-block p,[data-agent-session-replayer] .asr-chat-block pre{padding:14px;font-size:11px}[data-agent-session-replayer] .asr-controls button{padding-inline:8px;font-size:10px}[data-agent-session-replayer] .asr-controls .asr-next-button{min-width:110px}[data-agent-session-replayer] .asr-footer{padding:10px 16px}}@media (max-width:420px){[data-agent-session-replayer] .asr-case-nav{flex-direction:column;align-items:stretch;gap:8px}[data-agent-session-replayer] .asr-controls{width:100%}[data-agent-session-replayer] .asr-controls button{flex:1}}@media (prefers-reduced-motion:reduce){[data-agent-session-replayer],[data-agent-session-replayer] .asr-agent,[data-agent-session-replayer] .asr-typing-caret,[data-agent-session-replayer] .asr-controls button{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important}}@media (prefers-reduced-transparency:reduce){[data-agent-session-replayer] .asr-controls{background:var(--asr-surface);-webkit-backdrop-filter:none;backdrop-filter:none}}@media (prefers-contrast:more){[data-agent-session-replayer] .asr-chat-stage,[data-agent-session-replayer] .asr-chat-block,[data-agent-session-replayer] .asr-controls button{border-color:color-mix(in srgb,var(--asr-text) 55%,var(--asr-border))}[data-agent-session-replayer] .asr-event-summary-row,[data-agent-session-replayer] .asr-agent p{color:color-mix(in srgb,var(--asr-text) 70%,var(--asr-muted))}}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
type AgentActor = "implementer" | "reviewer";
|
|
2
|
+
type AgentEventType = "task_received" | "plan" | "patch" | "review_request" | "review_start" | "blocking_finding" | "revision" | "verification" | "approval";
|
|
3
|
+
type AgentBlockKind = "message" | "code" | "tool_call" | "tool_output" | "finding" | "patch" | "git_diff" | "status" | "result";
|
|
4
|
+
interface AgentIdentity {
|
|
5
|
+
id: string;
|
|
6
|
+
name: string;
|
|
7
|
+
role: string;
|
|
8
|
+
context: string;
|
|
9
|
+
}
|
|
10
|
+
interface AgentSessionBlock {
|
|
11
|
+
id: string;
|
|
12
|
+
kind: AgentBlockKind;
|
|
13
|
+
title?: string;
|
|
14
|
+
content: string;
|
|
15
|
+
language?: string;
|
|
16
|
+
}
|
|
17
|
+
interface AgentSessionEvent {
|
|
18
|
+
id: string;
|
|
19
|
+
type: AgentEventType;
|
|
20
|
+
actor: AgentActor;
|
|
21
|
+
title: string;
|
|
22
|
+
summary: string;
|
|
23
|
+
blocks: AgentSessionBlock[];
|
|
24
|
+
}
|
|
25
|
+
interface AgentSession {
|
|
26
|
+
id: string;
|
|
27
|
+
title: string;
|
|
28
|
+
summary: string;
|
|
29
|
+
repository: string;
|
|
30
|
+
branch: string;
|
|
31
|
+
events: AgentSessionEvent[];
|
|
32
|
+
}
|
|
33
|
+
interface AgentSessionContent {
|
|
34
|
+
agents: Record<AgentActor, AgentIdentity>;
|
|
35
|
+
cases: AgentSession[];
|
|
36
|
+
}
|
|
37
|
+
interface AgentSessionColors {
|
|
38
|
+
background?: string;
|
|
39
|
+
surface?: string;
|
|
40
|
+
border?: string;
|
|
41
|
+
text?: string;
|
|
42
|
+
muted?: string;
|
|
43
|
+
implementer?: string;
|
|
44
|
+
reviewer?: string;
|
|
45
|
+
success?: string;
|
|
46
|
+
danger?: string;
|
|
47
|
+
focus?: string;
|
|
48
|
+
}
|
|
49
|
+
interface AgentSessionReplayerProps extends AgentSessionContent {
|
|
50
|
+
typingSpeed?: number;
|
|
51
|
+
eventDelayMs?: number;
|
|
52
|
+
height?: number;
|
|
53
|
+
colors?: AgentSessionColors;
|
|
54
|
+
caseIndex?: number;
|
|
55
|
+
initialCaseIndex?: number;
|
|
56
|
+
className?: string;
|
|
57
|
+
onCaseChange?: (caseIndex: number, item: AgentSession) => void;
|
|
58
|
+
onEventStart?: (event: AgentSessionEvent, item: AgentSession) => void;
|
|
59
|
+
onEventComplete?: (event: AgentSessionEvent, item: AgentSession) => void;
|
|
60
|
+
onCaseComplete?: (item: AgentSession) => void;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
export type { AgentSessionReplayerProps as A, AgentActor as a, AgentBlockKind as b, AgentEventType as c, AgentIdentity as d, AgentSession as e, AgentSessionBlock as f, AgentSessionColors as g, AgentSessionEvent as h, AgentSessionContent as i };
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
type AgentActor = "implementer" | "reviewer";
|
|
2
|
+
type AgentEventType = "task_received" | "plan" | "patch" | "review_request" | "review_start" | "blocking_finding" | "revision" | "verification" | "approval";
|
|
3
|
+
type AgentBlockKind = "message" | "code" | "tool_call" | "tool_output" | "finding" | "patch" | "git_diff" | "status" | "result";
|
|
4
|
+
interface AgentIdentity {
|
|
5
|
+
id: string;
|
|
6
|
+
name: string;
|
|
7
|
+
role: string;
|
|
8
|
+
context: string;
|
|
9
|
+
}
|
|
10
|
+
interface AgentSessionBlock {
|
|
11
|
+
id: string;
|
|
12
|
+
kind: AgentBlockKind;
|
|
13
|
+
title?: string;
|
|
14
|
+
content: string;
|
|
15
|
+
language?: string;
|
|
16
|
+
}
|
|
17
|
+
interface AgentSessionEvent {
|
|
18
|
+
id: string;
|
|
19
|
+
type: AgentEventType;
|
|
20
|
+
actor: AgentActor;
|
|
21
|
+
title: string;
|
|
22
|
+
summary: string;
|
|
23
|
+
blocks: AgentSessionBlock[];
|
|
24
|
+
}
|
|
25
|
+
interface AgentSession {
|
|
26
|
+
id: string;
|
|
27
|
+
title: string;
|
|
28
|
+
summary: string;
|
|
29
|
+
repository: string;
|
|
30
|
+
branch: string;
|
|
31
|
+
events: AgentSessionEvent[];
|
|
32
|
+
}
|
|
33
|
+
interface AgentSessionContent {
|
|
34
|
+
agents: Record<AgentActor, AgentIdentity>;
|
|
35
|
+
cases: AgentSession[];
|
|
36
|
+
}
|
|
37
|
+
interface AgentSessionColors {
|
|
38
|
+
background?: string;
|
|
39
|
+
surface?: string;
|
|
40
|
+
border?: string;
|
|
41
|
+
text?: string;
|
|
42
|
+
muted?: string;
|
|
43
|
+
implementer?: string;
|
|
44
|
+
reviewer?: string;
|
|
45
|
+
success?: string;
|
|
46
|
+
danger?: string;
|
|
47
|
+
focus?: string;
|
|
48
|
+
}
|
|
49
|
+
interface AgentSessionReplayerProps extends AgentSessionContent {
|
|
50
|
+
typingSpeed?: number;
|
|
51
|
+
eventDelayMs?: number;
|
|
52
|
+
height?: number;
|
|
53
|
+
colors?: AgentSessionColors;
|
|
54
|
+
caseIndex?: number;
|
|
55
|
+
initialCaseIndex?: number;
|
|
56
|
+
className?: string;
|
|
57
|
+
onCaseChange?: (caseIndex: number, item: AgentSession) => void;
|
|
58
|
+
onEventStart?: (event: AgentSessionEvent, item: AgentSession) => void;
|
|
59
|
+
onEventComplete?: (event: AgentSessionEvent, item: AgentSession) => void;
|
|
60
|
+
onCaseComplete?: (item: AgentSession) => void;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
export type { AgentSessionReplayerProps as A, AgentActor as a, AgentBlockKind as b, AgentEventType as c, AgentIdentity as d, AgentSession as e, AgentSessionBlock as f, AgentSessionColors as g, AgentSessionEvent as h, AgentSessionContent as i };
|
package/package.json
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "agent-session-replayer",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Embeddable scripted agent session replayer for React",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"sideEffects": ["./dist/styles.css"],
|
|
8
|
+
"files": ["dist", "README.md"],
|
|
9
|
+
"main": "./dist/index.cjs",
|
|
10
|
+
"module": "./dist/index.js",
|
|
11
|
+
"types": "./dist/index.d.ts",
|
|
12
|
+
"exports": {
|
|
13
|
+
".": {
|
|
14
|
+
"types": "./dist/index.d.ts",
|
|
15
|
+
"import": "./dist/index.js",
|
|
16
|
+
"require": "./dist/index.cjs"
|
|
17
|
+
},
|
|
18
|
+
"./schema": {
|
|
19
|
+
"types": "./dist/schema.d.ts",
|
|
20
|
+
"import": "./dist/schema.js",
|
|
21
|
+
"require": "./dist/schema.cjs"
|
|
22
|
+
},
|
|
23
|
+
"./styles.css": "./dist/styles.css"
|
|
24
|
+
},
|
|
25
|
+
"scripts": {
|
|
26
|
+
"build": "tsup && tailwindcss -i ./src/styles.css -o ./dist/styles.css --minify",
|
|
27
|
+
"pack": "bun run build && bun pm pack --destination ./artifacts"
|
|
28
|
+
},
|
|
29
|
+
"peerDependencies": {
|
|
30
|
+
"react": ">=18 <20",
|
|
31
|
+
"react-dom": ">=18 <20"
|
|
32
|
+
},
|
|
33
|
+
"devDependencies": {
|
|
34
|
+
"@types/react": "^19.1.10",
|
|
35
|
+
"@types/react-dom": "^19.1.7",
|
|
36
|
+
"react": "^19.1.1",
|
|
37
|
+
"react-dom": "^19.1.1",
|
|
38
|
+
"tailwindcss": "^4.3.2",
|
|
39
|
+
"@tailwindcss/cli": "^4.3.2",
|
|
40
|
+
"tsup": "^8.5.1",
|
|
41
|
+
"typescript": "^5.9.2"
|
|
42
|
+
},
|
|
43
|
+
"keywords": ["react", "agent", "session", "replay", "workflow"],
|
|
44
|
+
"dependencies": {
|
|
45
|
+
"zod": "^4.0.17"
|
|
46
|
+
}
|
|
47
|
+
}
|