poe-code 3.0.129 → 3.0.131

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.
@@ -0,0 +1,330 @@
1
+ import fs from "node:fs/promises";
2
+ import path from "node:path";
3
+ import { fileURLToPath, pathToFileURL } from "node:url";
4
+ import { Node, Project, SyntaxKind } from "ts-morph";
5
+ const GENERATED_TYPES_OUTPUT_PATH = [
6
+ "packages",
7
+ "py-poe-spawn",
8
+ "src",
9
+ "poe_spawn",
10
+ "types.py"
11
+ ];
12
+ export function generateAgentSpawnPythonTypes(options) {
13
+ const usageEventInterface = options.acpTypesSourceFile.getInterface("UsageEvent");
14
+ const usagePayloadSignature = usageEventInterface
15
+ ? buildUsagePayloadSignature(usageEventInterface)
16
+ : undefined;
17
+ const events = resolveKnownEventNames(options.acpTypesSourceFile).map((name) => {
18
+ const declaration = options.acpTypesSourceFile.getInterfaceOrThrow(name);
19
+ return buildPythonClass(declaration, usagePayloadSignature);
20
+ });
21
+ const agentIds = resolveSpawnableAgentIds(options.spawnConfigs);
22
+ const spawnModes = resolveStringLiteralUnion(options.spawnTypesSourceFile, "SpawnMode");
23
+ const acpEventNames = events
24
+ .filter((event) => event.eventValue !== "spawn_result")
25
+ .map((event) => event.name);
26
+ return [
27
+ "from dataclasses import dataclass",
28
+ "from enum import Enum",
29
+ "from typing import Literal, Optional, Union",
30
+ "",
31
+ "",
32
+ renderEnum("Agent", agentIds),
33
+ "",
34
+ "",
35
+ renderEnum("SpawnMode", spawnModes),
36
+ "",
37
+ "",
38
+ events.map(renderDataclass).join("\n\n\n"),
39
+ "",
40
+ "",
41
+ renderAcpEventUnion(acpEventNames)
42
+ ].join("\n");
43
+ }
44
+ export async function runAgentSpawnPythonTypeCodegen(options = {}) {
45
+ const repoRoot = options.repoRoot ?? resolveRepoRoot();
46
+ const project = options.project ??
47
+ new Project({
48
+ skipAddingFilesFromTsConfig: true
49
+ });
50
+ const acpTypesSourceFile = project.addSourceFileAtPath(path.join(repoRoot, "packages", "agent-spawn", "src", "acp", "types.ts"));
51
+ const spawnTypesSourceFile = project.addSourceFileAtPath(path.join(repoRoot, "packages", "agent-spawn", "src", "types.ts"));
52
+ const spawnConfigs = options.spawnConfigs ?? (await loadSpawnConfigs(repoRoot));
53
+ const generated = `${generateAgentSpawnPythonTypes({
54
+ acpTypesSourceFile,
55
+ spawnTypesSourceFile,
56
+ spawnConfigs
57
+ })}\n`;
58
+ const outputPath = path.join(repoRoot, ...GENERATED_TYPES_OUTPUT_PATH);
59
+ const existing = await readFileIfExists(outputPath);
60
+ if (options.check) {
61
+ if (existing !== generated) {
62
+ throw new Error(`Generated Python types are out of date. Run \`npm run codegen:python-types\`.`);
63
+ }
64
+ return;
65
+ }
66
+ await fs.mkdir(path.dirname(outputPath), { recursive: true });
67
+ await fs.writeFile(outputPath, generated, "utf8");
68
+ }
69
+ function resolveRepoRoot() {
70
+ return path.resolve(path.dirname(fileURLToPath(import.meta.url)), "..", "..");
71
+ }
72
+ async function readFileIfExists(filePath) {
73
+ try {
74
+ return await fs.readFile(filePath, "utf8");
75
+ }
76
+ catch (error) {
77
+ if (error.code === "ENOENT") {
78
+ return undefined;
79
+ }
80
+ throw error;
81
+ }
82
+ }
83
+ async function loadSpawnConfigs(repoRoot) {
84
+ const moduleUrl = pathToFileURL(path.join(repoRoot, "packages", "agent-spawn", "src", "configs", "index.ts")).href;
85
+ const module = (await import(moduleUrl));
86
+ return module.allSpawnConfigs;
87
+ }
88
+ function resolveKnownEventNames(sourceFile) {
89
+ const knownAcpEvent = sourceFile.getTypeAliasOrThrow("KnownAcpEvent");
90
+ const typeNode = knownAcpEvent.getTypeNodeOrThrow();
91
+ if (!Node.isUnionTypeNode(typeNode)) {
92
+ if (!Node.isTypeReference(typeNode)) {
93
+ throw new Error("KnownAcpEvent must reference one or more interfaces.");
94
+ }
95
+ return [typeNode.getTypeName().getText()];
96
+ }
97
+ return typeNode.getTypeNodes().map((node) => {
98
+ if (!Node.isTypeReference(node)) {
99
+ throw new Error(`KnownAcpEvent can only contain interface references. Received ${node.getText()}.`);
100
+ }
101
+ return node.getTypeName().getText();
102
+ });
103
+ }
104
+ function buildUsagePayloadSignature(usageEventInterface) {
105
+ return usageEventInterface
106
+ .getProperties()
107
+ .filter((property) => property.getName() !== "event" && !shouldSkipProperty(property.getName()))
108
+ .map((property) => {
109
+ const typeNode = property.getTypeNodeOrThrow();
110
+ const resolved = unwrapOptionalType(typeNode);
111
+ return `${property.getName()}:${resolved.typeNode.getText()}:${resolved.optional || property.hasQuestionToken()}`;
112
+ })
113
+ .join("|");
114
+ }
115
+ function buildPythonClass(declaration, usagePayloadSignature) {
116
+ const eventProperty = declaration.getPropertyOrThrow("event");
117
+ const eventValue = resolveStringLiteralType(eventProperty.getTypeNodeOrThrow());
118
+ const fields = declaration
119
+ .getProperties()
120
+ .filter((property) => !shouldSkipProperty(property.getName()))
121
+ .map((property) => buildPythonField(property, usagePayloadSignature))
122
+ .sort(comparePythonFields);
123
+ return {
124
+ name: declaration.getName(),
125
+ eventValue,
126
+ fields
127
+ };
128
+ }
129
+ function buildPythonField(property, usagePayloadSignature) {
130
+ const typeNode = property.getTypeNodeOrThrow();
131
+ const resolved = unwrapOptionalType(typeNode);
132
+ const pythonName = toSnakeCase(property.getName());
133
+ const baseType = mapTypeNodeToPython(resolved.typeNode, property.getName(), usagePayloadSignature);
134
+ const optional = property.hasQuestionToken() || resolved.optional;
135
+ return {
136
+ name: pythonName,
137
+ type: optional ? wrapOptional(baseType) : baseType,
138
+ optional
139
+ };
140
+ }
141
+ function comparePythonFields(left, right) {
142
+ if (left.name === "event") {
143
+ return -1;
144
+ }
145
+ if (right.name === "event") {
146
+ return 1;
147
+ }
148
+ if (left.optional === right.optional) {
149
+ return 0;
150
+ }
151
+ return left.optional ? 1 : -1;
152
+ }
153
+ function mapTypeNodeToPython(typeNode, propertyName, usagePayloadSignature) {
154
+ if (Node.isUnionTypeNode(typeNode)) {
155
+ const resolved = unwrapOptionalType(typeNode);
156
+ if (resolved.optional) {
157
+ return wrapOptional(mapTypeNodeToPython(resolved.typeNode, propertyName, usagePayloadSignature));
158
+ }
159
+ const literalUnion = renderLiteralUnion(typeNode.getTypeNodes());
160
+ if (literalUnion) {
161
+ return literalUnion;
162
+ }
163
+ const memberTypes = [
164
+ ...new Set(typeNode
165
+ .getTypeNodes()
166
+ .map((node) => mapTypeNodeToPython(node, propertyName, usagePayloadSignature)))
167
+ ];
168
+ return memberTypes.length === 1 ? memberTypes[0] : `Union[${memberTypes.join(", ")}]`;
169
+ }
170
+ if (Node.isParenthesizedTypeNode(typeNode)) {
171
+ return mapTypeNodeToPython(typeNode.getTypeNode(), propertyName, usagePayloadSignature);
172
+ }
173
+ if (Node.isTypeReference(typeNode)) {
174
+ const aliasDeclaration = resolveTypeAliasDeclaration(typeNode);
175
+ if (aliasDeclaration) {
176
+ return mapTypeNodeToPython(aliasDeclaration.getTypeNodeOrThrow(), propertyName, usagePayloadSignature);
177
+ }
178
+ if (typeNode.getTypeName().getText() === "Record") {
179
+ return "object";
180
+ }
181
+ }
182
+ if (Node.isLiteralTypeNode(typeNode)) {
183
+ const literal = typeNode.getLiteral();
184
+ if (Node.isStringLiteral(literal)) {
185
+ return `Literal["${literal.getLiteralValue()}"]`;
186
+ }
187
+ }
188
+ if (Node.isTypeLiteral(typeNode)) {
189
+ return isUsagePayloadType(typeNode, usagePayloadSignature) ? "UsageEvent" : "object";
190
+ }
191
+ if (typeNode.getKind() === SyntaxKind.StringKeyword) {
192
+ return "str";
193
+ }
194
+ if (typeNode.getKind() === SyntaxKind.NumberKeyword) {
195
+ return resolvePythonNumberType(propertyName);
196
+ }
197
+ if (typeNode.getKind() === SyntaxKind.BooleanKeyword) {
198
+ return "bool";
199
+ }
200
+ return "object";
201
+ }
202
+ function renderLiteralUnion(typeNodes) {
203
+ const literalNodes = typeNodes.filter((typeNode) => Node.isLiteralTypeNode(typeNode));
204
+ if (literalNodes.length !== typeNodes.length) {
205
+ return undefined;
206
+ }
207
+ const literalValues = literalNodes
208
+ .map((typeNode) => typeNode.getLiteral())
209
+ .filter(Node.isStringLiteral)
210
+ .map((literal) => literal.getLiteralValue());
211
+ if (literalValues.length !== typeNodes.length) {
212
+ return undefined;
213
+ }
214
+ return `Literal[${literalValues.map((value) => `"${value}"`).join(", ")}]`;
215
+ }
216
+ function resolveTypeAliasDeclaration(typeNode) {
217
+ if (!Node.isTypeReference(typeNode)) {
218
+ return undefined;
219
+ }
220
+ const type = typeNode.getType();
221
+ const aliasSymbol = type.getAliasSymbol();
222
+ const symbol = aliasSymbol ?? type.getSymbol();
223
+ return symbol?.getDeclarations().find(Node.isTypeAliasDeclaration);
224
+ }
225
+ function unwrapOptionalType(typeNode) {
226
+ if (!Node.isUnionTypeNode(typeNode)) {
227
+ return {
228
+ typeNode,
229
+ optional: false
230
+ };
231
+ }
232
+ const nonNullableNodes = typeNode
233
+ .getTypeNodes()
234
+ .filter((node) => node.getKind() !== SyntaxKind.UndefinedKeyword)
235
+ .filter((node) => node.getKind() !== SyntaxKind.NullKeyword);
236
+ if (nonNullableNodes.length !== typeNode.getTypeNodes().length && nonNullableNodes.length === 1) {
237
+ return {
238
+ typeNode: nonNullableNodes[0],
239
+ optional: true
240
+ };
241
+ }
242
+ return {
243
+ typeNode,
244
+ optional: false
245
+ };
246
+ }
247
+ function resolveStringLiteralType(typeNode) {
248
+ if (!Node.isLiteralTypeNode(typeNode)) {
249
+ throw new Error(`Expected a string literal type, received ${typeNode.getText()}.`);
250
+ }
251
+ const literal = typeNode.getLiteral();
252
+ if (!Node.isStringLiteral(literal)) {
253
+ throw new Error(`Expected a string literal type, received ${typeNode.getText()}.`);
254
+ }
255
+ return literal.getLiteralValue();
256
+ }
257
+ function resolveStringLiteralUnion(sourceFile, aliasName) {
258
+ const alias = sourceFile.getTypeAliasOrThrow(aliasName);
259
+ const typeNode = alias.getTypeNodeOrThrow();
260
+ if (!Node.isUnionTypeNode(typeNode)) {
261
+ return [resolveStringLiteralType(typeNode)];
262
+ }
263
+ return typeNode.getTypeNodes().map(resolveStringLiteralType);
264
+ }
265
+ function resolveSpawnableAgentIds(spawnConfigs) {
266
+ return spawnConfigs.filter((config) => config.kind === "cli").map((config) => config.agentId);
267
+ }
268
+ function shouldSkipProperty(propertyName) {
269
+ return propertyName === "_meta";
270
+ }
271
+ function resolvePythonNumberType(propertyName) {
272
+ return propertyName.toLowerCase().includes("cost") ? "float" : "int";
273
+ }
274
+ function wrapOptional(typeName) {
275
+ return typeName.startsWith("Optional[") ? typeName : `Optional[${typeName}]`;
276
+ }
277
+ function isUsagePayloadType(typeNode, usagePayloadSignature) {
278
+ if (!usagePayloadSignature) {
279
+ return false;
280
+ }
281
+ const signature = typeNode
282
+ .getProperties()
283
+ .map((property) => {
284
+ const resolved = unwrapOptionalType(property.getTypeNodeOrThrow());
285
+ return `${property.getName()}:${resolved.typeNode.getText()}:${resolved.optional || property.hasQuestionToken()}`;
286
+ })
287
+ .join("|");
288
+ return signature === usagePayloadSignature;
289
+ }
290
+ function renderEnum(name, values) {
291
+ const lines = [`class ${name}(str, Enum):`];
292
+ if (values.length === 0) {
293
+ lines.push(" pass");
294
+ return lines.join("\n");
295
+ }
296
+ for (const value of values) {
297
+ lines.push(` ${toEnumMemberName(value)} = "${value}"`);
298
+ }
299
+ return lines.join("\n");
300
+ }
301
+ function renderDataclass(pythonClass) {
302
+ return [
303
+ "@dataclass",
304
+ `class ${pythonClass.name}:`,
305
+ ...pythonClass.fields.map((field) => field.optional
306
+ ? ` ${field.name}: ${field.type} = None`
307
+ : ` ${field.name}: ${field.type}`)
308
+ ].join("\n");
309
+ }
310
+ function renderAcpEventUnion(eventNames) {
311
+ const lines = ["AcpEvent = Union["];
312
+ for (const eventName of eventNames) {
313
+ lines.push(` ${eventName},`);
314
+ }
315
+ lines.push("]");
316
+ return lines.join("\n");
317
+ }
318
+ function toEnumMemberName(value) {
319
+ return value
320
+ .replaceAll(/[^a-zA-Z0-9]+/g, "_")
321
+ .replaceAll(/^_+|_+$/g, "")
322
+ .toUpperCase();
323
+ }
324
+ function toSnakeCase(value) {
325
+ return value
326
+ .replaceAll(/([a-z0-9])([A-Z])/g, "$1_$2")
327
+ .replaceAll(/-/g, "_")
328
+ .toLowerCase();
329
+ }
330
+ //# sourceMappingURL=agent-spawn-py-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-spawn-py-types.js","sourceRoot":"","sources":["../../src/codegen/agent-spawn-py-types.ts"],"names":[],"mappings":"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"}