poe-code 3.0.187 → 3.0.189

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 (95) hide show
  1. package/dist/cli/commands/experiment.js +1 -1
  2. package/dist/cli/commands/experiment.js.map +1 -1
  3. package/dist/cli/commands/pipeline-init.js +1 -1
  4. package/dist/cli/commands/pipeline-init.js.map +1 -1
  5. package/dist/cli/commands/pipeline.js +1 -1
  6. package/dist/cli/commands/pipeline.js.map +1 -1
  7. package/dist/cli/commands/spawn.js +2 -1
  8. package/dist/cli/commands/spawn.js.map +1 -1
  9. package/dist/cli/program.js +6 -6
  10. package/dist/cli/program.js.map +1 -1
  11. package/dist/index.js +122 -225
  12. package/dist/index.js.map +4 -4
  13. package/dist/prompts/github-issue-comment-created.md +1 -0
  14. package/dist/prompts/github-issue-opened.md +1 -0
  15. package/dist/prompts/github-pull-request-comment-created.md +1 -0
  16. package/dist/prompts/github-pull-request-opened.md +1 -0
  17. package/dist/prompts/github-pull-request-synchronized.md +1 -0
  18. package/dist/providers/claude-code.js +2 -76
  19. package/dist/providers/claude-code.js.map +4 -4
  20. package/dist/providers/codex.js +2 -76
  21. package/dist/providers/codex.js.map +4 -4
  22. package/dist/providers/goose.js +2 -76
  23. package/dist/providers/goose.js.map +4 -4
  24. package/dist/providers/kimi.js +2 -76
  25. package/dist/providers/kimi.js.map +4 -4
  26. package/dist/providers/opencode.js +2 -76
  27. package/dist/providers/opencode.js.map +4 -4
  28. package/dist/providers/poe-agent.js +23 -107
  29. package/dist/providers/poe-agent.js.map +4 -4
  30. package/dist/sdk/experiment.js +1 -1
  31. package/dist/sdk/experiment.js.map +1 -1
  32. package/package.json +10 -30
  33. package/packages/design-system/dist/prompts/primitives/cancel.d.ts +1 -1
  34. package/packages/design-system/dist/prompts/primitives/cancel.js +1 -1
  35. package/packages/cmdkit/dist/cli.compile-check.d.ts +0 -1
  36. package/packages/cmdkit/dist/cli.compile-check.js +0 -26
  37. package/packages/cmdkit/dist/cli.d.ts +0 -12
  38. package/packages/cmdkit/dist/cli.js +0 -2331
  39. package/packages/cmdkit/dist/cli.js.map +0 -7
  40. package/packages/cmdkit/dist/index.compile-check.d.ts +0 -1
  41. package/packages/cmdkit/dist/index.compile-check.js +0 -50
  42. package/packages/cmdkit/dist/index.d.ts +0 -164
  43. package/packages/cmdkit/dist/index.js +0 -561
  44. package/packages/cmdkit/dist/index.js.map +0 -7
  45. package/packages/cmdkit/dist/mcp.compile-check.d.ts +0 -1
  46. package/packages/cmdkit/dist/mcp.compile-check.js +0 -26
  47. package/packages/cmdkit/dist/mcp.d.ts +0 -31
  48. package/packages/cmdkit/dist/mcp.js +0 -1254
  49. package/packages/cmdkit/dist/mcp.js.map +0 -7
  50. package/packages/cmdkit/dist/number-schema.d.ts +0 -3
  51. package/packages/cmdkit/dist/number-schema.js +0 -8
  52. package/packages/cmdkit/dist/renderer.d.ts +0 -5
  53. package/packages/cmdkit/dist/renderer.js +0 -164
  54. package/packages/cmdkit/dist/renderer.js.map +0 -7
  55. package/packages/cmdkit/dist/schema-scope.d.ts +0 -4
  56. package/packages/cmdkit/dist/schema-scope.js +0 -34
  57. package/packages/cmdkit/dist/sdk.compile-check.d.ts +0 -1
  58. package/packages/cmdkit/dist/sdk.compile-check.js +0 -79
  59. package/packages/cmdkit/dist/sdk.d.ts +0 -63
  60. package/packages/cmdkit/dist/sdk.js +0 -369
  61. package/packages/cmdkit/dist/sdk.js.map +0 -7
  62. package/packages/cmdkit-openapi/dist/api-command.d.ts +0 -7
  63. package/packages/cmdkit-openapi/dist/api-command.js +0 -4
  64. package/packages/cmdkit-openapi/dist/auth/bearer-token-auth.d.ts +0 -8
  65. package/packages/cmdkit-openapi/dist/auth/bearer-token-auth.js +0 -216
  66. package/packages/cmdkit-openapi/dist/auth/types.d.ts +0 -9
  67. package/packages/cmdkit-openapi/dist/auth/types.js +0 -1
  68. package/packages/cmdkit-openapi/dist/bin/generate.d.ts +0 -40
  69. package/packages/cmdkit-openapi/dist/bin/generate.js +0 -248
  70. package/packages/cmdkit-openapi/dist/define-client.d.ts +0 -20
  71. package/packages/cmdkit-openapi/dist/define-client.js +0 -148
  72. package/packages/cmdkit-openapi/dist/generate.d.ts +0 -210
  73. package/packages/cmdkit-openapi/dist/generate.js +0 -1131
  74. package/packages/cmdkit-openapi/dist/group-by-noun.d.ts +0 -6
  75. package/packages/cmdkit-openapi/dist/group-by-noun.js +0 -17
  76. package/packages/cmdkit-openapi/dist/http.d.ts +0 -26
  77. package/packages/cmdkit-openapi/dist/http.js +0 -123
  78. package/packages/cmdkit-openapi/dist/index.d.ts +0 -12
  79. package/packages/cmdkit-openapi/dist/index.js +0 -6
  80. package/packages/cmdkit-openapi/dist/interpreter.d.ts +0 -6
  81. package/packages/cmdkit-openapi/dist/interpreter.js +0 -289
  82. package/packages/cmdkit-openapi/dist/lock.d.ts +0 -14
  83. package/packages/cmdkit-openapi/dist/lock.js +0 -48
  84. package/packages/cmdkit-openapi/dist/naming.d.ts +0 -24
  85. package/packages/cmdkit-openapi/dist/naming.js +0 -218
  86. package/packages/cmdkit-openapi/dist/request-shape.d.ts +0 -15
  87. package/packages/cmdkit-openapi/dist/request-shape.js +0 -5
  88. package/packages/cmdkit-openapi/dist/runtime.d.ts +0 -13
  89. package/packages/cmdkit-openapi/dist/runtime.js +0 -94
  90. package/packages/cmdkit-openapi/dist/spec-source.d.ts +0 -11
  91. package/packages/cmdkit-openapi/dist/spec-source.js +0 -63
  92. package/packages/cmdkit-schema/dist/index.compile-check.d.ts +0 -1
  93. package/packages/cmdkit-schema/dist/index.compile-check.js +0 -12
  94. package/packages/cmdkit-schema/dist/index.d.ts +0 -124
  95. package/packages/cmdkit-schema/dist/index.js +0 -175
@@ -1,561 +0,0 @@
1
- // packages/cmdkit/src/index.ts
2
- import { fileURLToPath } from "node:url";
3
-
4
- // packages/cmdkit-schema/src/index.ts
5
- function withMetadata(schema, jsonSchema) {
6
- if (schema.description !== void 0) {
7
- jsonSchema.description = schema.description;
8
- }
9
- if (schema.default !== void 0) {
10
- jsonSchema.default = schema.default;
11
- }
12
- if (schema.nullable === true) {
13
- jsonSchema.nullable = true;
14
- }
15
- return jsonSchema;
16
- }
17
- function withStringMetadata(schema, jsonSchema) {
18
- if (schema.minLength !== void 0) {
19
- jsonSchema.minLength = schema.minLength;
20
- }
21
- if (schema.maxLength !== void 0) {
22
- jsonSchema.maxLength = schema.maxLength;
23
- }
24
- if (schema.pattern !== void 0) {
25
- jsonSchema.pattern = schema.pattern;
26
- }
27
- if (schema.format !== void 0) {
28
- jsonSchema.format = schema.format;
29
- }
30
- return withMetadata(schema, jsonSchema);
31
- }
32
- function withNumberMetadata(schema, jsonSchema) {
33
- if (schema.minimum !== void 0) {
34
- jsonSchema.minimum = schema.minimum;
35
- }
36
- if (schema.maximum !== void 0) {
37
- jsonSchema.maximum = schema.maximum;
38
- }
39
- return withMetadata(schema, jsonSchema);
40
- }
41
- function withArrayMetadata(schema, jsonSchema) {
42
- if (schema.minItems !== void 0) {
43
- jsonSchema.minItems = schema.minItems;
44
- }
45
- if (schema.maxItems !== void 0) {
46
- jsonSchema.maxItems = schema.maxItems;
47
- }
48
- return withMetadata(schema, jsonSchema);
49
- }
50
- function withObjectMetadata(schema, jsonSchema) {
51
- if (schema.additionalProperties !== void 0) {
52
- jsonSchema.additionalProperties = schema.additionalProperties;
53
- }
54
- return withMetadata(schema, jsonSchema);
55
- }
56
- function getEnumJsonType(values) {
57
- const [firstValue] = values;
58
- if (firstValue === void 0) {
59
- return void 0;
60
- }
61
- const firstType = typeof firstValue;
62
- const isSinglePrimitiveType = values.every((value) => typeof value === firstType);
63
- if (!isSinglePrimitiveType) {
64
- return void 0;
65
- }
66
- if (firstType === "string" || firstType === "number" || firstType === "boolean") {
67
- return firstType;
68
- }
69
- return void 0;
70
- }
71
- function isOptionalSchema(schema) {
72
- return schema.kind === "optional";
73
- }
74
- function assertValidEnumValues(values) {
75
- if (values.length === 0) {
76
- throw new Error("Enum schema requires at least one value");
77
- }
78
- const uniqueValues = new Set(values);
79
- if (uniqueValues.size !== values.length) {
80
- throw new Error("Enum schema values must be unique");
81
- }
82
- }
83
- function unwrapOptional(schema) {
84
- if (isOptionalSchema(schema)) {
85
- return unwrapOptional(schema.inner);
86
- }
87
- return schema;
88
- }
89
- var S = {
90
- String(options = {}) {
91
- return {
92
- kind: "string",
93
- ...options
94
- };
95
- },
96
- Number(options = {}) {
97
- return {
98
- kind: "number",
99
- ...options
100
- };
101
- },
102
- Boolean(options = {}) {
103
- return {
104
- kind: "boolean",
105
- ...options
106
- };
107
- },
108
- Enum(values, options = {}) {
109
- assertValidEnumValues(values);
110
- return {
111
- kind: "enum",
112
- values,
113
- ...options
114
- };
115
- },
116
- Array(item, options = {}) {
117
- return {
118
- kind: "array",
119
- item,
120
- ...options
121
- };
122
- },
123
- Object(shape, options = {}) {
124
- return {
125
- kind: "object",
126
- shape,
127
- ...options
128
- };
129
- },
130
- Optional(inner) {
131
- return {
132
- kind: "optional",
133
- inner
134
- };
135
- }
136
- };
137
- function toJsonSchema(schema) {
138
- const unwrappedSchema = unwrapOptional(schema);
139
- switch (unwrappedSchema.kind) {
140
- case "string":
141
- return withStringMetadata(unwrappedSchema, { type: "string" });
142
- case "number":
143
- return withNumberMetadata(unwrappedSchema, { type: unwrappedSchema.jsonType ?? "number" });
144
- case "boolean":
145
- return withMetadata(unwrappedSchema, { type: "boolean" });
146
- case "enum": {
147
- const jsonSchema = {
148
- enum: unwrappedSchema.nullable === true ? [...unwrappedSchema.values, null] : [...unwrappedSchema.values]
149
- };
150
- const enumType = unwrappedSchema.jsonType ?? getEnumJsonType(unwrappedSchema.values);
151
- if (enumType !== void 0) {
152
- jsonSchema.type = enumType;
153
- }
154
- return withMetadata(unwrappedSchema, jsonSchema);
155
- }
156
- case "array":
157
- return withArrayMetadata(unwrappedSchema, {
158
- type: "array",
159
- items: toJsonSchema(unwrappedSchema.item)
160
- });
161
- case "object": {
162
- const properties = {};
163
- const required = [];
164
- for (const [key, propertySchema] of Object.entries(unwrappedSchema.shape)) {
165
- properties[key] = toJsonSchema(propertySchema);
166
- if (!isOptionalSchema(propertySchema)) {
167
- required.push(key);
168
- }
169
- }
170
- return withObjectMetadata(unwrappedSchema, {
171
- type: "object",
172
- properties,
173
- required
174
- });
175
- }
176
- }
177
- }
178
-
179
- // packages/cmdkit/src/index.ts
180
- var commandConfigSymbol = /* @__PURE__ */ Symbol("cmdkit.command.config");
181
- var groupConfigSymbol = /* @__PURE__ */ Symbol("cmdkit.group.config");
182
- var commandSourcePathSymbol = /* @__PURE__ */ Symbol("cmdkit.command.sourcePath");
183
- var UserError = class extends Error {
184
- constructor(message) {
185
- super(message);
186
- this.name = "UserError";
187
- }
188
- };
189
- function cloneScope(scope) {
190
- return scope === void 0 ? void 0 : [...scope];
191
- }
192
- function cloneSecretDefinition(secret) {
193
- return {
194
- env: secret.env,
195
- description: secret.description,
196
- optional: secret.optional
197
- };
198
- }
199
- function cloneSecrets(secrets) {
200
- if (secrets === void 0) {
201
- return {};
202
- }
203
- return Object.fromEntries(
204
- Object.entries(secrets).map(([key, secret]) => [key, cloneSecretDefinition(secret)])
205
- );
206
- }
207
- function cloneRequires(requires) {
208
- if (requires === void 0) {
209
- return void 0;
210
- }
211
- return {
212
- auth: requires.auth,
213
- apiVersion: requires.apiVersion,
214
- check: requires.check
215
- };
216
- }
217
- function parseStackPath(candidate) {
218
- if (candidate.startsWith("file://")) {
219
- try {
220
- return fileURLToPath(candidate);
221
- } catch {
222
- return void 0;
223
- }
224
- }
225
- if (candidate.startsWith("/")) {
226
- return candidate;
227
- }
228
- return void 0;
229
- }
230
- function extractStackPath(line) {
231
- const trimmed = line.trim();
232
- const fileIndex = trimmed.indexOf("file://");
233
- if (fileIndex >= 0) {
234
- const location2 = trimmed.slice(fileIndex);
235
- const separatorIndex2 = location2.lastIndexOf(":");
236
- const previousSeparatorIndex2 = separatorIndex2 >= 0 ? location2.lastIndexOf(":", separatorIndex2 - 1) : -1;
237
- const candidate2 = separatorIndex2 >= 0 && previousSeparatorIndex2 >= 0 ? location2.slice(0, previousSeparatorIndex2) : location2;
238
- return parseStackPath(candidate2);
239
- }
240
- const slashIndex = trimmed.indexOf("/");
241
- if (slashIndex < 0) {
242
- return void 0;
243
- }
244
- const location = trimmed.slice(slashIndex);
245
- const separatorIndex = location.lastIndexOf(":");
246
- const previousSeparatorIndex = separatorIndex >= 0 ? location.lastIndexOf(":", separatorIndex - 1) : -1;
247
- const candidate = separatorIndex >= 0 && previousSeparatorIndex >= 0 ? location.slice(0, previousSeparatorIndex) : location;
248
- return parseStackPath(candidate);
249
- }
250
- function inferCommandSourcePath() {
251
- const stack = new Error().stack;
252
- if (typeof stack !== "string") {
253
- return void 0;
254
- }
255
- for (const line of stack.split("\n").slice(1)) {
256
- const candidate = extractStackPath(line);
257
- if (candidate === void 0) {
258
- continue;
259
- }
260
- if (candidate.includes("/packages/cmdkit/src/index.ts") || candidate.includes("/packages/cmdkit/dist/index.js")) {
261
- continue;
262
- }
263
- return candidate;
264
- }
265
- return void 0;
266
- }
267
- function composeChecks(parentCheck, childCheck) {
268
- if (parentCheck === void 0) {
269
- return childCheck;
270
- }
271
- if (childCheck === void 0) {
272
- return parentCheck;
273
- }
274
- return async (ctx) => {
275
- const parentResult = await parentCheck(ctx);
276
- if (!parentResult.ok) {
277
- return parentResult;
278
- }
279
- return childCheck(ctx);
280
- };
281
- }
282
- function mergeRequires(parent, child) {
283
- if (parent === void 0 && child === void 0) {
284
- return void 0;
285
- }
286
- const merged = {
287
- auth: child?.auth ?? parent?.auth,
288
- apiVersion: child?.apiVersion ?? parent?.apiVersion,
289
- check: composeChecks(parent?.check, child?.check)
290
- };
291
- if (merged.auth === void 0 && merged.apiVersion === void 0 && merged.check === void 0) {
292
- return void 0;
293
- }
294
- return merged;
295
- }
296
- function parseSimpleSemver(value) {
297
- const parts = value.split(".");
298
- if (parts.length !== 3) {
299
- return void 0;
300
- }
301
- const parsed = parts.map((part) => {
302
- if (part.length === 0) {
303
- return Number.NaN;
304
- }
305
- for (const char of part) {
306
- if (char < "0" || char > "9") {
307
- return Number.NaN;
308
- }
309
- }
310
- return Number(part);
311
- });
312
- if (parsed.some((part) => !Number.isInteger(part) || part < 0)) {
313
- return void 0;
314
- }
315
- return parsed;
316
- }
317
- function parseMinimumApiVersion(requirement) {
318
- if (!requirement.startsWith(">=")) {
319
- return void 0;
320
- }
321
- return parseSimpleSemver(requirement.slice(2).trim());
322
- }
323
- function compareSemver(left, right) {
324
- for (let index = 0; index < left.length; index += 1) {
325
- if (left[index] === right[index]) {
326
- continue;
327
- }
328
- return left[index] > right[index] ? 1 : -1;
329
- }
330
- return 0;
331
- }
332
- function resolveCommandSecrets(command, env = process.env) {
333
- const secrets = {};
334
- for (const [name, secret] of Object.entries(command.secrets)) {
335
- const value = env[secret.env];
336
- if (value === void 0 && secret.optional !== true) {
337
- const details = secret.description ? `
338
- ${secret.description}` : "";
339
- throw new UserError(`Error: Missing required secret ${secret.env}${details}`);
340
- }
341
- secrets[name] = value;
342
- }
343
- return secrets;
344
- }
345
- async function assertCommandRequirements(command, context, options = {}) {
346
- const requires = command.requires;
347
- if (requires === void 0) {
348
- return;
349
- }
350
- const env = options.env ?? process.env;
351
- const authEnvVar = options.authEnvVar ?? "POE_API_KEY";
352
- if (requires.auth === true && env[authEnvVar] === void 0) {
353
- throw new UserError(
354
- `Error: Command "${command.name}" requires authentication.
355
- Run 'poe-code login' first.`
356
- );
357
- }
358
- if (requires.apiVersion !== void 0) {
359
- const minimumVersion = parseMinimumApiVersion(requires.apiVersion);
360
- if (minimumVersion === void 0) {
361
- throw new UserError(
362
- `Error: Command "${command.name}" has invalid apiVersion requirement "${requires.apiVersion}". Expected format ">=X.Y.Z".`
363
- );
364
- }
365
- if (options.apiVersion === void 0) {
366
- throw new UserError(
367
- `Error: Command "${command.name}" requires API version ${requires.apiVersion}, but no runner API version was provided.`
368
- );
369
- }
370
- const runnerVersion = parseSimpleSemver(options.apiVersion);
371
- if (runnerVersion === void 0) {
372
- throw new UserError(
373
- `Error: Command "${command.name}" requires API version ${requires.apiVersion}, but runner API version "${options.apiVersion}" is not valid semver.`
374
- );
375
- }
376
- if (compareSemver(runnerVersion, minimumVersion) < 0) {
377
- throw new UserError(
378
- `Error: Command "${command.name}" requires API version ${requires.apiVersion}, but runner API version is ${options.apiVersion}.`
379
- );
380
- }
381
- }
382
- const checkResult = await requires.check?.(context);
383
- if (checkResult && !checkResult.ok) {
384
- throw new UserError(checkResult.message ?? "Command precondition failed.");
385
- }
386
- }
387
- function mergeSecrets(parent, child) {
388
- return cloneSecrets({
389
- ...parent,
390
- ...child
391
- });
392
- }
393
- function resolveCommandScope(ownScope, inheritedScope) {
394
- return cloneScope(ownScope ?? inheritedScope) ?? ["cli", "sdk"];
395
- }
396
- function resolveGroupScope(ownScope, inheritedScope) {
397
- return cloneScope(ownScope ?? inheritedScope);
398
- }
399
- function createBaseCommand(config) {
400
- const command = {
401
- kind: "command",
402
- name: config.name,
403
- description: config.description,
404
- aliases: [...config.aliases ?? []],
405
- positional: [...config.positional ?? []],
406
- params: config.params,
407
- secrets: cloneSecrets(config.secrets),
408
- scope: resolveCommandScope(config.scope, void 0),
409
- confirm: config.confirm ?? false,
410
- requires: cloneRequires(config.requires),
411
- handler: config.handler,
412
- render: config.render
413
- };
414
- Object.defineProperty(command, commandConfigSymbol, {
415
- value: {
416
- scope: cloneScope(config.scope),
417
- secrets: cloneSecrets(config.secrets),
418
- requires: cloneRequires(config.requires),
419
- sourcePath: inferCommandSourcePath()
420
- }
421
- });
422
- return command;
423
- }
424
- function createBaseGroup(config) {
425
- const group = {
426
- kind: "group",
427
- name: config.name,
428
- description: config.description,
429
- aliases: [...config.aliases ?? []],
430
- scope: resolveGroupScope(config.scope, void 0),
431
- secrets: cloneSecrets(config.secrets),
432
- requires: cloneRequires(config.requires),
433
- children: [],
434
- default: void 0
435
- };
436
- Object.defineProperty(group, groupConfigSymbol, {
437
- value: {
438
- scope: cloneScope(config.scope),
439
- secrets: cloneSecrets(config.secrets),
440
- requires: cloneRequires(config.requires),
441
- children: [...config.children],
442
- default: config.default
443
- }
444
- });
445
- return group;
446
- }
447
- function getInternalCommandConfig(command) {
448
- return command[commandConfigSymbol];
449
- }
450
- function getInternalGroupConfig(group) {
451
- return group[groupConfigSymbol];
452
- }
453
- function materializeCommand(command, inherited) {
454
- const internal = getInternalCommandConfig(command);
455
- const materialized = {
456
- kind: "command",
457
- name: command.name,
458
- description: command.description,
459
- aliases: [...command.aliases],
460
- positional: [...command.positional],
461
- params: command.params,
462
- secrets: mergeSecrets(inherited.secrets, internal.secrets),
463
- scope: resolveCommandScope(internal.scope, inherited.scope),
464
- confirm: command.confirm,
465
- requires: mergeRequires(inherited.requires, internal.requires),
466
- handler: command.handler,
467
- render: command.render
468
- };
469
- Object.defineProperty(materialized, commandConfigSymbol, {
470
- value: {
471
- scope: cloneScope(internal.scope),
472
- secrets: cloneSecrets(internal.secrets),
473
- requires: cloneRequires(internal.requires),
474
- sourcePath: internal.sourcePath
475
- }
476
- });
477
- Object.defineProperty(materialized, commandSourcePathSymbol, {
478
- value: internal.sourcePath
479
- });
480
- return materialized;
481
- }
482
- function materializeGroup(group, inherited) {
483
- const internal = getInternalGroupConfig(group);
484
- const scope = resolveGroupScope(internal.scope, inherited.scope);
485
- const secrets = mergeSecrets(inherited.secrets, internal.secrets);
486
- const requires = mergeRequires(inherited.requires, internal.requires);
487
- const materializedChildren = internal.children.map(
488
- (child) => materializeNode(child, {
489
- scope,
490
- secrets,
491
- requires
492
- })
493
- );
494
- let defaultChild;
495
- if (internal.default !== void 0) {
496
- const defaultIndex = internal.children.indexOf(internal.default);
497
- if (defaultIndex === -1) {
498
- throw new UserError(`Default command "${internal.default.name}" must be listed in children.`);
499
- }
500
- const resolvedDefault = materializedChildren[defaultIndex];
501
- if (resolvedDefault?.kind !== "command") {
502
- throw new UserError(`Default child "${internal.default.name}" must be a command.`);
503
- }
504
- defaultChild = resolvedDefault;
505
- }
506
- const materialized = {
507
- kind: "group",
508
- name: group.name,
509
- description: group.description,
510
- aliases: [...group.aliases],
511
- scope,
512
- secrets,
513
- requires,
514
- children: materializedChildren,
515
- default: defaultChild
516
- };
517
- Object.defineProperty(materialized, groupConfigSymbol, {
518
- value: {
519
- scope: cloneScope(internal.scope),
520
- secrets: cloneSecrets(internal.secrets),
521
- requires: cloneRequires(internal.requires),
522
- children: [...internal.children],
523
- default: internal.default
524
- }
525
- });
526
- return materialized;
527
- }
528
- function materializeNode(node, inherited) {
529
- if (node.kind === "command") {
530
- return materializeCommand(node, inherited);
531
- }
532
- return materializeGroup(node, inherited);
533
- }
534
- function defineCommand(config) {
535
- return materializeCommand(createBaseCommand(config), {
536
- scope: void 0,
537
- secrets: {},
538
- requires: void 0
539
- });
540
- }
541
- function defineGroup(config) {
542
- return materializeGroup(createBaseGroup(config), {
543
- scope: void 0,
544
- secrets: {},
545
- requires: void 0
546
- });
547
- }
548
- function getCommandSourcePath(command) {
549
- return command[commandSourcePathSymbol];
550
- }
551
- export {
552
- S,
553
- UserError,
554
- assertCommandRequirements,
555
- defineCommand,
556
- defineGroup,
557
- getCommandSourcePath,
558
- resolveCommandSecrets,
559
- toJsonSchema
560
- };
561
- //# sourceMappingURL=index.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../src/index.ts", "../../cmdkit-schema/src/index.ts"],
4
- "sourcesContent": ["import { fileURLToPath } from \"node:url\";\nimport type { ObjectSchema, Static } from \"@poe-code/cmdkit-schema\";\nimport type { LoggerOutput, RenderTableOptions, ThemePalette } from \"@poe-code/design-system\";\n\nconst commandConfigSymbol = Symbol(\"cmdkit.command.config\");\nconst groupConfigSymbol = Symbol(\"cmdkit.group.config\");\nconst commandSourcePathSymbol = Symbol(\"cmdkit.command.sourcePath\");\n\ntype ScopeValue = \"cli\" | \"mcp\" | \"sdk\";\ntype AnyObjectSchema = ObjectSchema<Record<string, never>>;\ntype EmptyServices = Record<string, never>;\ntype ScopeInput = readonly Scope[] | undefined;\n\nexport type Scope = ScopeValue;\n\nexport interface SecretDefinition {\n env: string;\n description?: string;\n optional?: boolean;\n}\n\nexport type SecretDeclarations = Record<string, SecretDefinition>;\n\ntype OptionalSecretKeys<TSecrets extends SecretDeclarations> = {\n [TKey in keyof TSecrets]: TSecrets[TKey] extends { optional: true } ? TKey : never;\n}[keyof TSecrets];\n\ntype RequiredSecretKeys<TSecrets extends SecretDeclarations> = Exclude<\n keyof TSecrets,\n OptionalSecretKeys<TSecrets>\n>;\n\nexport type InferSecrets<TSecrets extends SecretDeclarations | undefined> =\n TSecrets extends SecretDeclarations\n ? { [TKey in RequiredSecretKeys<TSecrets>]: string } & {\n [TKey in OptionalSecretKeys<TSecrets>]?: string;\n }\n : Record<string, never>;\n\nexport interface HandlerFs {\n readFile(path: string, encoding?: BufferEncoding): Promise<string>;\n writeFile(path: string, contents: string): Promise<void>;\n exists(path: string): Promise<boolean>;\n}\n\nexport interface HandlerEnv {\n get(key: string): string | undefined;\n}\n\nexport interface RenderPrimitives {\n logger: LoggerOutput;\n renderTable(options: RenderTableOptions): string;\n getTheme(): ThemePalette;\n note(message: string, title?: string): void;\n}\n\nexport interface CheckResult {\n ok: boolean;\n message?: string;\n}\n\nexport type GroupCheckContext<TServices extends object = EmptyServices> = TServices & {\n params?: unknown;\n secrets?: Record<string, string | undefined>;\n fetch: typeof globalThis.fetch;\n fs: HandlerFs;\n env: HandlerEnv;\n progress(message: string): void;\n};\n\nexport type CommandCheckContext<\n TParamsSchema extends ObjectSchema<any> = AnyObjectSchema,\n TSecrets extends SecretDeclarations | undefined = undefined,\n TServices extends object = EmptyServices,\n> = TServices & {\n params?: Static<TParamsSchema>;\n secrets?: InferSecrets<TSecrets>;\n fetch: typeof globalThis.fetch;\n fs: HandlerFs;\n env: HandlerEnv;\n progress(message: string): void;\n};\n\nexport interface Requires<TContext = unknown> {\n auth?: boolean;\n apiVersion?: string;\n check?: (ctx: TContext) => Promise<CheckResult>;\n}\n\nexport interface Renderers<TResult> {\n rich?: (result: TResult, primitives: RenderPrimitives) => void;\n markdown?: (result: TResult, primitives: RenderPrimitives) => string;\n json?: (result: TResult, primitives: RenderPrimitives) => unknown;\n}\n\nexport type HandlerContext<\n TParamsSchema extends ObjectSchema<any> = AnyObjectSchema,\n TSecrets extends SecretDeclarations | undefined = undefined,\n TServices extends object = EmptyServices,\n> = TServices & {\n params: Static<TParamsSchema>;\n secrets: InferSecrets<TSecrets>;\n fetch: typeof globalThis.fetch;\n fs: HandlerFs;\n env: HandlerEnv;\n progress(message: string): void;\n};\n\nexport interface CommandConfig<\n TServices extends object,\n TParamsSchema extends ObjectSchema<any>,\n TSecrets extends SecretDeclarations | undefined,\n TResult,\n> {\n name: string;\n description?: string;\n aliases?: string[];\n positional?: string[];\n params: TParamsSchema;\n secrets?: TSecrets;\n scope?: Scope[];\n confirm?: boolean;\n requires?: Requires<CommandCheckContext<TParamsSchema, TSecrets, TServices>>;\n handler: (ctx: HandlerContext<TParamsSchema, TSecrets, TServices>) => Promise<TResult>;\n render?: Renderers<TResult>;\n}\n\nexport interface Command<\n TServices extends object = EmptyServices,\n TParamsSchema extends ObjectSchema<any> = AnyObjectSchema,\n TSecrets extends SecretDeclarations | undefined = undefined,\n TResult = unknown,\n> {\n kind: \"command\";\n name: string;\n description?: string;\n aliases: string[];\n positional: string[];\n params: TParamsSchema;\n secrets: SecretDeclarations;\n scope: Scope[];\n confirm: boolean;\n requires?: Requires<any>;\n handler: (ctx: HandlerContext<TParamsSchema, TSecrets, TServices>) => Promise<TResult>;\n render?: Renderers<TResult>;\n}\n\nexport interface GroupConfig<TServices extends object> {\n name: string;\n description?: string;\n aliases?: string[];\n scope?: Scope[];\n secrets?: SecretDeclarations;\n requires?: Requires<GroupCheckContext<TServices>>;\n children: Array<CommandNode<TServices>>;\n default?: Command<TServices, any, any, any>;\n}\n\nexport interface Group<TServices extends object = EmptyServices> {\n kind: \"group\";\n name: string;\n description?: string;\n aliases: string[];\n scope?: Scope[];\n secrets: SecretDeclarations;\n requires?: Requires<any>;\n children: Array<CommandNode<TServices>>;\n default?: Command<TServices, any, any, any>;\n}\n\nexport type CommandNode<TServices extends object = EmptyServices> =\n | Command<TServices, any, any, any>\n | Group<TServices>;\n\nexport interface CommandTypeInfo<\n TName extends string = string,\n TParamsSchema extends ObjectSchema<any> = AnyObjectSchema,\n TResult = unknown,\n TOwnScope extends ScopeInput = ScopeInput,\n> {\n name: TName;\n params: TParamsSchema;\n result: TResult;\n ownScope: TOwnScope;\n}\n\nexport interface GroupTypeInfo<\n TServices extends object = EmptyServices,\n TName extends string = string,\n TChildren extends readonly unknown[] = readonly CommandNode<TServices>[],\n TOwnScope extends ScopeInput = ScopeInput,\n> {\n name: TName;\n children: TChildren;\n ownScope: TOwnScope;\n}\n\ntype TypedCommandMetadata<\n TName extends string,\n TParamsSchema extends ObjectSchema<any>,\n TResult,\n TOwnScope extends ScopeInput,\n> = {\n readonly __cmdkitCommandTypeInfo: CommandTypeInfo<TName, TParamsSchema, TResult, TOwnScope>;\n};\n\ntype TypedGroupMetadata<\n TServices extends object,\n TName extends string,\n TChildren extends readonly unknown[],\n TOwnScope extends ScopeInput,\n> = {\n readonly __cmdkitGroupTypeInfo: GroupTypeInfo<TServices, TName, TChildren, TOwnScope>;\n};\n\ninterface InternalCommandConfig {\n scope?: Scope[];\n secrets: SecretDeclarations;\n requires?: Requires<any>;\n sourcePath?: string;\n}\n\ninterface InternalGroupConfig<TServices extends object> {\n scope?: Scope[];\n secrets: SecretDeclarations;\n requires?: Requires<any>;\n children: Array<CommandNode<TServices>>;\n default?: Command<TServices, any, any, any>;\n}\n\ninterface InheritedMetadata {\n scope?: Scope[];\n secrets: SecretDeclarations;\n requires?: Requires<any>;\n}\n\nexport class UserError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"UserError\";\n }\n}\n\nexport interface CommandRequirementOptions {\n apiVersion?: string;\n authEnvVar?: string;\n env?: Record<string, string | undefined>;\n}\n\nfunction cloneScope(scope: Scope[] | undefined): Scope[] | undefined {\n return scope === undefined ? undefined : [...scope];\n}\n\nfunction cloneSecretDefinition(secret: SecretDefinition): SecretDefinition {\n return {\n env: secret.env,\n description: secret.description,\n optional: secret.optional,\n };\n}\n\nfunction cloneSecrets(secrets: SecretDeclarations | undefined): SecretDeclarations {\n if (secrets === undefined) {\n return {};\n }\n\n return Object.fromEntries(\n Object.entries(secrets).map(([key, secret]) => [key, cloneSecretDefinition(secret)])\n );\n}\n\nfunction cloneRequires<TContext>(requires: Requires<TContext> | undefined): Requires<TContext> | undefined {\n if (requires === undefined) {\n return undefined;\n }\n\n return {\n auth: requires.auth,\n apiVersion: requires.apiVersion,\n check: requires.check,\n };\n}\n\nfunction parseStackPath(candidate: string): string | undefined {\n if (candidate.startsWith(\"file://\")) {\n try {\n return fileURLToPath(candidate);\n } catch {\n return undefined;\n }\n }\n\n if (candidate.startsWith(\"/\")) {\n return candidate;\n }\n\n return undefined;\n}\n\nfunction extractStackPath(line: string): string | undefined {\n const trimmed = line.trim();\n const fileIndex = trimmed.indexOf(\"file://\");\n\n if (fileIndex >= 0) {\n const location = trimmed.slice(fileIndex);\n const separatorIndex = location.lastIndexOf(\":\");\n const previousSeparatorIndex = separatorIndex >= 0 ? location.lastIndexOf(\":\", separatorIndex - 1) : -1;\n const candidate =\n separatorIndex >= 0 && previousSeparatorIndex >= 0\n ? location.slice(0, previousSeparatorIndex)\n : location;\n\n return parseStackPath(candidate);\n }\n\n const slashIndex = trimmed.indexOf(\"/\");\n if (slashIndex < 0) {\n return undefined;\n }\n\n const location = trimmed.slice(slashIndex);\n const separatorIndex = location.lastIndexOf(\":\");\n const previousSeparatorIndex = separatorIndex >= 0 ? location.lastIndexOf(\":\", separatorIndex - 1) : -1;\n const candidate =\n separatorIndex >= 0 && previousSeparatorIndex >= 0\n ? location.slice(0, previousSeparatorIndex)\n : location;\n\n return parseStackPath(candidate);\n}\n\nfunction inferCommandSourcePath(): string | undefined {\n const stack = new Error().stack;\n\n if (typeof stack !== \"string\") {\n return undefined;\n }\n\n for (const line of stack.split(\"\\n\").slice(1)) {\n const candidate = extractStackPath(line);\n\n if (candidate === undefined) {\n continue;\n }\n\n if (\n candidate.includes(\"/packages/cmdkit/src/index.ts\") ||\n candidate.includes(\"/packages/cmdkit/dist/index.js\")\n ) {\n continue;\n }\n\n return candidate;\n }\n\n return undefined;\n}\n\nfunction composeChecks(\n parentCheck: Requires<any>[\"check\"] | undefined,\n childCheck: Requires<any>[\"check\"] | undefined\n): Requires<any>[\"check\"] | undefined {\n if (parentCheck === undefined) {\n return childCheck;\n }\n\n if (childCheck === undefined) {\n return parentCheck;\n }\n\n return async (ctx) => {\n const parentResult = await parentCheck(ctx);\n if (!parentResult.ok) {\n return parentResult;\n }\n\n return childCheck(ctx);\n };\n}\n\nfunction mergeRequires(parent: Requires<any> | undefined, child: Requires<any> | undefined): Requires<any> | undefined {\n if (parent === undefined && child === undefined) {\n return undefined;\n }\n\n const merged: Requires<any> = {\n auth: child?.auth ?? parent?.auth,\n apiVersion: child?.apiVersion ?? parent?.apiVersion,\n check: composeChecks(parent?.check, child?.check),\n };\n\n if (\n merged.auth === undefined &&\n merged.apiVersion === undefined &&\n merged.check === undefined\n ) {\n return undefined;\n }\n\n return merged;\n}\n\nfunction parseSimpleSemver(value: string): [number, number, number] | undefined {\n const parts = value.split(\".\");\n if (parts.length !== 3) {\n return undefined;\n }\n\n const parsed = parts.map((part) => {\n if (part.length === 0) {\n return Number.NaN;\n }\n\n for (const char of part) {\n if (char < \"0\" || char > \"9\") {\n return Number.NaN;\n }\n }\n\n return Number(part);\n });\n\n if (parsed.some((part) => !Number.isInteger(part) || part < 0)) {\n return undefined;\n }\n\n return parsed as [number, number, number];\n}\n\nfunction parseMinimumApiVersion(requirement: string): [number, number, number] | undefined {\n if (!requirement.startsWith(\">=\")) {\n return undefined;\n }\n\n return parseSimpleSemver(requirement.slice(2).trim());\n}\n\nfunction compareSemver(left: [number, number, number], right: [number, number, number]): number {\n for (let index = 0; index < left.length; index += 1) {\n if (left[index] === right[index]) {\n continue;\n }\n\n return left[index]! > right[index]! ? 1 : -1;\n }\n\n return 0;\n}\n\nexport function resolveCommandSecrets(\n command: Command<any, any, any, any>,\n env: Record<string, string | undefined> = process.env\n): Record<string, string | undefined> {\n const secrets: Record<string, string | undefined> = {};\n\n for (const [name, secret] of Object.entries(command.secrets)) {\n const value = env[secret.env];\n\n if (value === undefined && secret.optional !== true) {\n const details = secret.description ? `\\n ${secret.description}` : \"\";\n throw new UserError(`Error: Missing required secret ${secret.env}${details}`);\n }\n\n secrets[name] = value;\n }\n\n return secrets;\n}\n\nexport async function assertCommandRequirements(\n command: Command<any, any, any, any>,\n context: GroupCheckContext<any>,\n options: CommandRequirementOptions = {}\n): Promise<void> {\n const requires = command.requires;\n if (requires === undefined) {\n return;\n }\n\n const env = options.env ?? process.env;\n const authEnvVar = options.authEnvVar ?? \"POE_API_KEY\";\n\n if (requires.auth === true && env[authEnvVar] === undefined) {\n throw new UserError(\n `Error: Command \"${command.name}\" requires authentication.\\n Run 'poe-code login' first.`\n );\n }\n\n if (requires.apiVersion !== undefined) {\n const minimumVersion = parseMinimumApiVersion(requires.apiVersion);\n if (minimumVersion === undefined) {\n throw new UserError(\n `Error: Command \"${command.name}\" has invalid apiVersion requirement \"${requires.apiVersion}\". Expected format \">=X.Y.Z\".`\n );\n }\n\n if (options.apiVersion === undefined) {\n throw new UserError(\n `Error: Command \"${command.name}\" requires API version ${requires.apiVersion}, but no runner API version was provided.`\n );\n }\n\n const runnerVersion = parseSimpleSemver(options.apiVersion);\n if (runnerVersion === undefined) {\n throw new UserError(\n `Error: Command \"${command.name}\" requires API version ${requires.apiVersion}, but runner API version \"${options.apiVersion}\" is not valid semver.`\n );\n }\n\n if (compareSemver(runnerVersion, minimumVersion) < 0) {\n throw new UserError(\n `Error: Command \"${command.name}\" requires API version ${requires.apiVersion}, but runner API version is ${options.apiVersion}.`\n );\n }\n }\n\n const checkResult = await requires.check?.(context);\n if (checkResult && !checkResult.ok) {\n throw new UserError(checkResult.message ?? \"Command precondition failed.\");\n }\n}\n\nfunction mergeSecrets(parent: SecretDeclarations, child: SecretDeclarations): SecretDeclarations {\n return cloneSecrets({\n ...parent,\n ...child,\n });\n}\n\nfunction resolveCommandScope(ownScope: Scope[] | undefined, inheritedScope: Scope[] | undefined): Scope[] {\n return cloneScope(ownScope ?? inheritedScope) ?? [\"cli\", \"sdk\"];\n}\n\nfunction resolveGroupScope(ownScope: Scope[] | undefined, inheritedScope: Scope[] | undefined): Scope[] | undefined {\n return cloneScope(ownScope ?? inheritedScope);\n}\n\nfunction createBaseCommand<\n TServices extends object,\n TParamsSchema extends ObjectSchema<any>,\n TSecrets extends SecretDeclarations | undefined,\n TResult,\n>(\n config: CommandConfig<TServices, TParamsSchema, TSecrets, TResult>\n): Command<TServices, TParamsSchema, TSecrets, TResult> {\n const command: Command<TServices, TParamsSchema, TSecrets, TResult> = {\n kind: \"command\",\n name: config.name,\n description: config.description,\n aliases: [...(config.aliases ?? [])],\n positional: [...(config.positional ?? [])],\n params: config.params,\n secrets: cloneSecrets(config.secrets),\n scope: resolveCommandScope(config.scope, undefined),\n confirm: config.confirm ?? false,\n requires: cloneRequires(config.requires),\n handler: config.handler,\n render: config.render,\n };\n\n Object.defineProperty(command, commandConfigSymbol, {\n value: {\n scope: cloneScope(config.scope),\n secrets: cloneSecrets(config.secrets),\n requires: cloneRequires(config.requires),\n sourcePath: inferCommandSourcePath(),\n } satisfies InternalCommandConfig,\n });\n\n return command;\n}\n\nfunction createBaseGroup<TServices extends object>(config: GroupConfig<TServices>): Group<TServices> {\n const group: Group<TServices> = {\n kind: \"group\",\n name: config.name,\n description: config.description,\n aliases: [...(config.aliases ?? [])],\n scope: resolveGroupScope(config.scope, undefined),\n secrets: cloneSecrets(config.secrets),\n requires: cloneRequires(config.requires),\n children: [],\n default: undefined,\n };\n\n Object.defineProperty(group, groupConfigSymbol, {\n value: {\n scope: cloneScope(config.scope),\n secrets: cloneSecrets(config.secrets),\n requires: cloneRequires(config.requires),\n children: [...config.children],\n default: config.default,\n } satisfies InternalGroupConfig<TServices>,\n });\n\n return group;\n}\n\nfunction getInternalCommandConfig(command: Command<any, any, any, any>): InternalCommandConfig {\n return (command as Command<any, any, any, any> & { [commandConfigSymbol]: InternalCommandConfig })[\n commandConfigSymbol\n ];\n}\n\nfunction getInternalGroupConfig<TServices extends object>(group: Group<TServices>): InternalGroupConfig<TServices> {\n return (group as Group<TServices> & { [groupConfigSymbol]: InternalGroupConfig<TServices> })[\n groupConfigSymbol\n ];\n}\n\nfunction materializeCommand<\n TServices extends object,\n TParamsSchema extends ObjectSchema<any>,\n TSecrets extends SecretDeclarations | undefined,\n TResult,\n>(\n command: Command<TServices, TParamsSchema, TSecrets, TResult>,\n inherited: InheritedMetadata\n): Command<TServices, TParamsSchema, TSecrets, TResult> {\n const internal = getInternalCommandConfig(command);\n\n const materialized: Command<TServices, TParamsSchema, TSecrets, TResult> = {\n kind: \"command\",\n name: command.name,\n description: command.description,\n aliases: [...command.aliases],\n positional: [...command.positional],\n params: command.params,\n secrets: mergeSecrets(inherited.secrets, internal.secrets),\n scope: resolveCommandScope(internal.scope, inherited.scope),\n confirm: command.confirm,\n requires: mergeRequires(inherited.requires, internal.requires),\n handler: command.handler,\n render: command.render,\n };\n\n Object.defineProperty(materialized, commandConfigSymbol, {\n value: {\n scope: cloneScope(internal.scope),\n secrets: cloneSecrets(internal.secrets),\n requires: cloneRequires(internal.requires),\n sourcePath: internal.sourcePath,\n } satisfies InternalCommandConfig,\n });\n\n Object.defineProperty(materialized, commandSourcePathSymbol, {\n value: internal.sourcePath,\n });\n\n return materialized;\n}\n\nfunction materializeGroup<TServices extends object>(\n group: Group<TServices>,\n inherited: InheritedMetadata\n): Group<TServices> {\n const internal = getInternalGroupConfig(group);\n const scope = resolveGroupScope(internal.scope, inherited.scope);\n const secrets = mergeSecrets(inherited.secrets, internal.secrets);\n const requires = mergeRequires(inherited.requires, internal.requires);\n const materializedChildren = internal.children.map((child) =>\n materializeNode(child, {\n scope,\n secrets,\n requires,\n })\n );\n\n let defaultChild: Command<TServices, any, any, any> | undefined;\n\n if (internal.default !== undefined) {\n const defaultIndex = internal.children.indexOf(internal.default);\n\n if (defaultIndex === -1) {\n throw new UserError(`Default command \"${internal.default.name}\" must be listed in children.`);\n }\n\n const resolvedDefault = materializedChildren[defaultIndex];\n if (resolvedDefault?.kind !== \"command\") {\n throw new UserError(`Default child \"${internal.default.name}\" must be a command.`);\n }\n\n defaultChild = resolvedDefault;\n }\n\n const materialized: Group<TServices> = {\n kind: \"group\",\n name: group.name,\n description: group.description,\n aliases: [...group.aliases],\n scope,\n secrets,\n requires,\n children: materializedChildren,\n default: defaultChild,\n };\n\n Object.defineProperty(materialized, groupConfigSymbol, {\n value: {\n scope: cloneScope(internal.scope),\n secrets: cloneSecrets(internal.secrets),\n requires: cloneRequires(internal.requires),\n children: [...internal.children],\n default: internal.default,\n } satisfies InternalGroupConfig<TServices>,\n });\n\n return materialized;\n}\n\nfunction materializeNode<TServices extends object>(\n node: CommandNode<TServices>,\n inherited: InheritedMetadata\n): CommandNode<TServices> {\n if (node.kind === \"command\") {\n return materializeCommand(node, inherited);\n }\n\n return materializeGroup(node, inherited);\n}\n\nexport function defineCommand<\n TServices extends object = EmptyServices,\n TName extends string = string,\n TParamsSchema extends ObjectSchema<any> = AnyObjectSchema,\n TSecrets extends SecretDeclarations | undefined = undefined,\n TResult = unknown,\n TOwnScope extends ScopeInput = undefined,\n>(\n config: Omit<CommandConfig<TServices, TParamsSchema, TSecrets, TResult>, \"name\" | \"scope\"> & {\n name: TName;\n scope?: TOwnScope;\n }\n): Command<TServices, TParamsSchema, TSecrets, TResult> &\n TypedCommandMetadata<TName, TParamsSchema, TResult, TOwnScope> {\n return materializeCommand(createBaseCommand(config as CommandConfig<TServices, TParamsSchema, TSecrets, TResult>), {\n scope: undefined,\n secrets: {},\n requires: undefined,\n }) as Command<TServices, TParamsSchema, TSecrets, TResult> &\n TypedCommandMetadata<TName, TParamsSchema, TResult, TOwnScope>;\n}\n\nexport function defineGroup<\n TServices extends object = EmptyServices,\n TName extends string = string,\n TChildren extends readonly unknown[] = readonly CommandNode<TServices>[],\n TOwnScope extends ScopeInput = undefined,\n>(\n config: Omit<GroupConfig<TServices>, \"name\" | \"children\" | \"scope\"> & {\n name: TName;\n children: TChildren & readonly CommandNode<TServices>[];\n scope?: TOwnScope;\n }\n): Group<TServices> & TypedGroupMetadata<TServices, TName, TChildren, TOwnScope> {\n return materializeGroup(createBaseGroup(config as unknown as GroupConfig<TServices>), {\n scope: undefined,\n secrets: {},\n requires: undefined,\n }) as Group<TServices> & TypedGroupMetadata<TServices, TName, TChildren, TOwnScope>;\n}\n\nexport function getCommandSourcePath(command: Command<any, any, any, any>): string | undefined {\n return (command as Command<any, any, any, any> & { [commandSourcePathSymbol]?: string })[\n commandSourcePathSymbol\n ];\n}\n\nexport { S, toJsonSchema } from \"@poe-code/cmdkit-schema\";\nexport type { AnySchema, ArraySchema, BooleanSchema, EnumSchema, JsonSchema, NumberSchema, ObjectSchema, OptionalSchema, Static, StringSchema } from \"@poe-code/cmdkit-schema\";\n", "type JsonSchemaType = \"string\" | \"number\" | \"integer\" | \"boolean\" | \"array\" | \"object\";\ntype SchemaKind =\n | \"string\"\n | \"number\"\n | \"boolean\"\n | \"enum\"\n | \"array\"\n | \"object\"\n | \"optional\";\ntype EnumValue = string | number | boolean;\ntype JsonSchemaEnumValue = EnumValue | null;\ntype NumberJsonType = \"number\" | \"integer\";\ntype NonEmptyReadonlyArray<T> = readonly [T, ...T[]];\ntype ObjectShape = Record<string, AnySchema>;\ntype SchemaScope = \"cli\" | \"mcp\" | \"sdk\";\ntype StringMetadata = {\n format?: string;\n maxLength?: number;\n minLength?: number;\n pattern?: string;\n};\ntype NumberMetadata = {\n maximum?: number;\n minimum?: number;\n};\ntype ArrayMetadata = {\n maxItems?: number;\n minItems?: number;\n};\ntype ObjectMetadata = {\n additionalProperties?: boolean;\n};\ntype OptionalKeys<TShape extends ObjectShape> = {\n [TKey in keyof TShape]: TShape[TKey] extends OptionalSchema<any> ? TKey : never;\n}[keyof TShape];\ntype RequiredKeys<TShape extends ObjectShape> = Exclude<keyof TShape, OptionalKeys<TShape>>;\n\ntype PropertyStatic<TSchema extends AnySchema> = TSchema extends OptionalSchema<infer TInner>\n ? Static<TInner>\n : Static<TSchema>;\n\ntype InferObject<TShape extends ObjectShape> = {\n [TKey in RequiredKeys<TShape>]: PropertyStatic<TShape[TKey]>;\n} & {\n [TKey in OptionalKeys<TShape>]?: PropertyStatic<TShape[TKey]>;\n};\n\ntype SchemaOptions<TDefault> = {\n description?: string;\n default?: TDefault;\n nullable?: boolean;\n requiredScopes?: readonly SchemaScope[];\n short?: string;\n scope?: readonly SchemaScope[];\n};\n\ninterface SchemaBase<TKind extends SchemaKind, TStatic> {\n readonly kind: TKind;\n readonly description?: string;\n readonly default?: TStatic;\n readonly nullable?: boolean;\n readonly requiredScopes?: readonly SchemaScope[];\n readonly short?: string;\n readonly scope?: readonly SchemaScope[];\n readonly __static?: TStatic;\n}\n\nexport interface JsonSchema {\n additionalProperties?: boolean;\n type?: JsonSchemaType;\n description?: string;\n default?: unknown;\n enum?: ReadonlyArray<JsonSchemaEnumValue>;\n format?: string;\n items?: JsonSchema;\n maxItems?: number;\n maximum?: number;\n maxLength?: number;\n minItems?: number;\n minimum?: number;\n minLength?: number;\n nullable?: boolean;\n pattern?: string;\n properties?: Record<string, JsonSchema>;\n required?: string[];\n}\n\nexport interface StringSchema extends SchemaBase<\"string\", string>, StringMetadata {}\n\nexport interface NumberSchema extends SchemaBase<\"number\", number>, NumberMetadata {\n readonly jsonType?: NumberJsonType;\n}\n\nexport type BooleanSchema = SchemaBase<\"boolean\", boolean>;\n\nexport interface EnumSchema<TValues extends NonEmptyReadonlyArray<EnumValue>>\n extends SchemaBase<\"enum\", TValues[number]> {\n readonly values: TValues;\n readonly jsonType?: \"integer\";\n readonly labels?: Partial<Record<string, string>>;\n readonly loadOptions?:\n | (() => Array<{ label: string; value: string }>)\n | (() => Promise<Array<{ label: string; value: string }>>);\n}\n\nexport interface ArraySchema<TItem extends AnySchema>\n extends SchemaBase<\"array\", Array<Static<TItem>>>, ArrayMetadata {\n readonly item: TItem;\n}\n\nexport interface ObjectSchema<TShape extends ObjectShape>\n extends SchemaBase<\"object\", InferObject<TShape>>, ObjectMetadata {\n readonly shape: TShape;\n}\n\nexport interface OptionalSchema<TInner extends AnySchema>\n extends SchemaBase<\"optional\", Static<TInner> | undefined> {\n readonly inner: TInner;\n}\n\nexport type AnySchema =\n | StringSchema\n | NumberSchema\n | BooleanSchema\n | EnumSchema<NonEmptyReadonlyArray<EnumValue>>\n | ArraySchema<AnySchema>\n | ObjectSchema<ObjectShape>\n | OptionalSchema<AnySchema>;\n\nexport type Static<TSchema extends AnySchema> = TSchema extends SchemaBase<any, infer TStatic>\n ? TStatic\n : never;\n\nfunction withMetadata<TSchema extends AnySchema>(\n schema: TSchema,\n jsonSchema: JsonSchema\n): JsonSchema {\n if (schema.description !== undefined) {\n jsonSchema.description = schema.description;\n }\n\n if (schema.default !== undefined) {\n jsonSchema.default = schema.default;\n }\n\n if (schema.nullable === true) {\n jsonSchema.nullable = true;\n }\n\n return jsonSchema;\n}\n\nfunction withStringMetadata(schema: StringSchema, jsonSchema: JsonSchema): JsonSchema {\n if (schema.minLength !== undefined) {\n jsonSchema.minLength = schema.minLength;\n }\n\n if (schema.maxLength !== undefined) {\n jsonSchema.maxLength = schema.maxLength;\n }\n\n if (schema.pattern !== undefined) {\n jsonSchema.pattern = schema.pattern;\n }\n\n if (schema.format !== undefined) {\n jsonSchema.format = schema.format;\n }\n\n return withMetadata(schema, jsonSchema);\n}\n\nfunction withNumberMetadata(schema: NumberSchema, jsonSchema: JsonSchema): JsonSchema {\n if (schema.minimum !== undefined) {\n jsonSchema.minimum = schema.minimum;\n }\n\n if (schema.maximum !== undefined) {\n jsonSchema.maximum = schema.maximum;\n }\n\n return withMetadata(schema, jsonSchema);\n}\n\nfunction withArrayMetadata(schema: ArraySchema<any>, jsonSchema: JsonSchema): JsonSchema {\n if (schema.minItems !== undefined) {\n jsonSchema.minItems = schema.minItems;\n }\n\n if (schema.maxItems !== undefined) {\n jsonSchema.maxItems = schema.maxItems;\n }\n\n return withMetadata(schema, jsonSchema);\n}\n\nfunction withObjectMetadata(schema: ObjectSchema<any>, jsonSchema: JsonSchema): JsonSchema {\n if (schema.additionalProperties !== undefined) {\n jsonSchema.additionalProperties = schema.additionalProperties;\n }\n\n return withMetadata(schema, jsonSchema);\n}\n\nfunction getEnumJsonType(values: ReadonlyArray<EnumValue>): JsonSchemaType | undefined {\n const [firstValue] = values;\n\n if (firstValue === undefined) {\n return undefined;\n }\n\n const firstType = typeof firstValue;\n const isSinglePrimitiveType = values.every((value) => typeof value === firstType);\n\n if (!isSinglePrimitiveType) {\n return undefined;\n }\n\n if (firstType === \"string\" || firstType === \"number\" || firstType === \"boolean\") {\n return firstType;\n }\n\n return undefined;\n}\n\nfunction isOptionalSchema(schema: AnySchema): schema is OptionalSchema<AnySchema> {\n return schema.kind === \"optional\";\n}\n\nfunction assertValidEnumValues(values: ReadonlyArray<EnumValue>): void {\n if (values.length === 0) {\n throw new Error(\"Enum schema requires at least one value\");\n }\n\n const uniqueValues = new Set(values);\n\n if (uniqueValues.size !== values.length) {\n throw new Error(\"Enum schema values must be unique\");\n }\n}\n\nfunction unwrapOptional(schema: AnySchema): Exclude<AnySchema, OptionalSchema<AnySchema>> {\n if (isOptionalSchema(schema)) {\n return unwrapOptional(schema.inner);\n }\n\n return schema;\n}\n\nexport const S = {\n String(options: SchemaOptions<string> & StringMetadata = {}): StringSchema {\n return {\n kind: \"string\",\n ...options,\n };\n },\n\n Number(\n options: SchemaOptions<number> & NumberMetadata & { jsonType?: NumberJsonType } = {}\n ): NumberSchema {\n return {\n kind: \"number\",\n ...options,\n };\n },\n\n Boolean(options: SchemaOptions<boolean> = {}): BooleanSchema {\n return {\n kind: \"boolean\",\n ...options,\n };\n },\n\n Enum<const TValues extends NonEmptyReadonlyArray<EnumValue>>(\n values: TValues,\n options: SchemaOptions<TValues[number]> & {\n jsonType?: \"integer\";\n labels?: Partial<Record<string, string>>;\n loadOptions?:\n | (() => Array<{ label: string; value: string }>)\n | (() => Promise<Array<{ label: string; value: string }>>);\n } = {}\n ): EnumSchema<TValues> {\n assertValidEnumValues(values);\n\n return {\n kind: \"enum\",\n values,\n ...options,\n };\n },\n\n Array<TItem extends AnySchema>(\n item: TItem,\n options: SchemaOptions<Array<Static<TItem>>> & ArrayMetadata = {}\n ): ArraySchema<TItem> {\n return {\n kind: \"array\",\n item,\n ...options,\n };\n },\n\n Object<const TShape extends ObjectShape>(\n shape: TShape,\n options: SchemaOptions<InferObject<TShape>> & ObjectMetadata = {}\n ): ObjectSchema<TShape> {\n return {\n kind: \"object\",\n shape,\n ...options,\n };\n },\n\n Optional<TInner extends AnySchema>(inner: TInner): OptionalSchema<TInner> {\n return {\n kind: \"optional\",\n inner,\n };\n },\n} as const;\n\nexport function toJsonSchema(schema: AnySchema): JsonSchema {\n const unwrappedSchema = unwrapOptional(schema);\n\n switch (unwrappedSchema.kind) {\n case \"string\":\n return withStringMetadata(unwrappedSchema, { type: \"string\" });\n\n case \"number\":\n return withNumberMetadata(unwrappedSchema, { type: unwrappedSchema.jsonType ?? \"number\" });\n\n case \"boolean\":\n return withMetadata(unwrappedSchema, { type: \"boolean\" });\n\n case \"enum\": {\n const jsonSchema: JsonSchema = {\n enum:\n unwrappedSchema.nullable === true\n ? [...unwrappedSchema.values, null]\n : [...unwrappedSchema.values],\n };\n const enumType = unwrappedSchema.jsonType ?? getEnumJsonType(unwrappedSchema.values);\n\n if (enumType !== undefined) {\n jsonSchema.type = enumType;\n }\n\n return withMetadata(unwrappedSchema, jsonSchema);\n }\n\n case \"array\":\n return withArrayMetadata(unwrappedSchema, {\n type: \"array\",\n items: toJsonSchema(unwrappedSchema.item),\n });\n\n case \"object\": {\n const properties: Record<string, JsonSchema> = {};\n const required: string[] = [];\n\n for (const [key, propertySchema] of Object.entries(unwrappedSchema.shape)) {\n properties[key] = toJsonSchema(propertySchema);\n\n if (!isOptionalSchema(propertySchema)) {\n required.push(key);\n }\n }\n\n return withObjectMetadata(unwrappedSchema, {\n type: \"object\",\n properties,\n required,\n });\n }\n }\n}\n"],
5
- "mappings": "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",
6
- "names": ["location", "separatorIndex", "previousSeparatorIndex", "candidate"]
7
- }
@@ -1 +0,0 @@
1
- export {};