@plumloom/cli 0.1.4 → 0.1.6

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 (100) hide show
  1. package/README.md +6 -0
  2. package/dist/actions/config.d.ts +16 -0
  3. package/dist/actions/config.d.ts.map +1 -0
  4. package/dist/actions/config.js +28 -0
  5. package/dist/actions/config.js.map +1 -0
  6. package/dist/actions/imports.d.ts +120 -0
  7. package/dist/actions/imports.d.ts.map +1 -0
  8. package/dist/actions/imports.js +404 -0
  9. package/dist/actions/imports.js.map +1 -0
  10. package/dist/actions/init.d.ts +47 -0
  11. package/dist/actions/init.d.ts.map +1 -0
  12. package/dist/actions/init.js +89 -0
  13. package/dist/actions/init.js.map +1 -0
  14. package/dist/actions/pack.d.ts +36 -0
  15. package/dist/actions/pack.d.ts.map +1 -0
  16. package/dist/actions/pack.js +271 -0
  17. package/dist/actions/pack.js.map +1 -0
  18. package/dist/actions/suite.d.ts +4 -0
  19. package/dist/actions/suite.d.ts.map +1 -1
  20. package/dist/actions/suite.js +19 -0
  21. package/dist/actions/suite.js.map +1 -1
  22. package/dist/api/api.d.ts +3 -0
  23. package/dist/api/api.d.ts.map +1 -1
  24. package/dist/api/api.js +9 -0
  25. package/dist/api/api.js.map +1 -1
  26. package/dist/api/client.d.ts +2 -2
  27. package/dist/api/client.d.ts.map +1 -1
  28. package/dist/api/external-import.d.ts +9 -0
  29. package/dist/api/external-import.d.ts.map +1 -0
  30. package/dist/api/external-import.js +2 -0
  31. package/dist/api/external-import.js.map +1 -0
  32. package/dist/commands/executor.d.ts +1 -0
  33. package/dist/commands/executor.d.ts.map +1 -1
  34. package/dist/commands/executor.js +126 -2
  35. package/dist/commands/executor.js.map +1 -1
  36. package/dist/commands/imports.d.ts +6 -0
  37. package/dist/commands/imports.d.ts.map +1 -0
  38. package/dist/commands/imports.js +132 -0
  39. package/dist/commands/imports.js.map +1 -0
  40. package/dist/commands/program.d.ts.map +1 -1
  41. package/dist/commands/program.js +2 -0
  42. package/dist/commands/program.js.map +1 -1
  43. package/dist/commands/types.d.ts +5 -0
  44. package/dist/commands/types.d.ts.map +1 -1
  45. package/dist/errors/autoeval-error.d.ts +1 -0
  46. package/dist/errors/autoeval-error.d.ts.map +1 -1
  47. package/dist/errors/autoeval-error.js +1 -1
  48. package/dist/errors/autoeval-error.js.map +1 -1
  49. package/dist/errors/hints.d.ts.map +1 -1
  50. package/dist/errors/hints.js +7 -0
  51. package/dist/errors/hints.js.map +1 -1
  52. package/dist/gate/decision.d.ts +1 -1
  53. package/dist/gate/decision.d.ts.map +1 -1
  54. package/dist/gate/decision.js +8 -8
  55. package/dist/gate/decision.js.map +1 -1
  56. package/dist/github/pr-comment.d.ts +55 -0
  57. package/dist/github/pr-comment.d.ts.map +1 -0
  58. package/dist/github/pr-comment.js +287 -0
  59. package/dist/github/pr-comment.js.map +1 -0
  60. package/dist/github/reliability-report.d.ts +16 -0
  61. package/dist/github/reliability-report.d.ts.map +1 -0
  62. package/dist/github/reliability-report.js +341 -0
  63. package/dist/github/reliability-report.js.map +1 -0
  64. package/dist/mcp/schemas.d.ts +32 -0
  65. package/dist/mcp/schemas.d.ts.map +1 -1
  66. package/dist/mcp/schemas.js +55 -0
  67. package/dist/mcp/schemas.js.map +1 -1
  68. package/dist/mcp/tools.d.ts +2 -0
  69. package/dist/mcp/tools.d.ts.map +1 -1
  70. package/dist/mcp/tools.js +146 -17
  71. package/dist/mcp/tools.js.map +1 -1
  72. package/dist/output/imports.d.ts +3 -0
  73. package/dist/output/imports.d.ts.map +1 -0
  74. package/dist/output/imports.js +280 -0
  75. package/dist/output/imports.js.map +1 -0
  76. package/dist/output/next-steps.d.ts +26 -0
  77. package/dist/output/next-steps.d.ts.map +1 -0
  78. package/dist/output/next-steps.js +54 -0
  79. package/dist/output/next-steps.js.map +1 -0
  80. package/dist/packs/data.d.ts +3 -0
  81. package/dist/packs/data.d.ts.map +1 -0
  82. package/dist/packs/data.js +102 -0
  83. package/dist/packs/data.js.map +1 -0
  84. package/dist/packs/registry.d.ts +37 -0
  85. package/dist/packs/registry.d.ts.map +1 -0
  86. package/dist/packs/registry.js +19 -0
  87. package/dist/packs/registry.js.map +1 -0
  88. package/dist/reliability/evidence.d.ts +44 -0
  89. package/dist/reliability/evidence.d.ts.map +1 -0
  90. package/dist/reliability/evidence.js +259 -0
  91. package/dist/reliability/evidence.js.map +1 -0
  92. package/dist/settings/resolve.d.ts +14 -0
  93. package/dist/settings/resolve.d.ts.map +1 -0
  94. package/dist/settings/resolve.js +18 -0
  95. package/dist/settings/resolve.js.map +1 -0
  96. package/dist/settings/settings.d.ts +47 -0
  97. package/dist/settings/settings.d.ts.map +1 -0
  98. package/dist/settings/settings.js +169 -0
  99. package/dist/settings/settings.js.map +1 -0
  100. package/package.json +1 -1
package/README.md CHANGED
@@ -43,6 +43,12 @@ Eval decisions roll up with precedence `ERROR > FAIL > INCONCLUSIVE > PASS`, so
43
43
  configured threshold blocks the release as `INCONCLUSIVE` rather than passing silently. For a
44
44
  single evaluation, `autoeval gate <evaluation-id>` applies flag-based thresholds instead.
45
45
 
46
+ In an eligible same-repository GitHub pull request, set
47
+ `AUTOEVAL_PR_RELIABILITY_COMMENT=true` and provide the workflow `GITHUB_TOKEN` with
48
+ `pull-requests: write` to have `suite gate` create or update a context-aware reliability report
49
+ comment. The report presents the existing verdict and available Standard, Judgment, and
50
+ Repeatability evidence; reporting failures are non-blocking and never alter the gate exit code.
51
+
46
52
  ## Documentation
47
53
 
48
54
  - [Quickstart](https://github.com/plumloom-org/plumloom-autoeval/blob/main/docs/public/quickstart.md) —
@@ -0,0 +1,16 @@
1
+ import type { AutoevalSettings } from '../settings/settings.js';
2
+ /**
3
+ * Pure helpers for the `config` command group. The executor owns reading and
4
+ * writing the settings file; these functions validate a new value and compute
5
+ * the view used for display. Credential-shaped values are rejected before they
6
+ * can enter a settings object or output path.
7
+ */
8
+ export type ConfigField = 'defaultWorkspaceId' | 'defaultJudgeModelId' | 'defaultPrimaryModelId';
9
+ export declare function setConfigValue(settings: AutoevalSettings, field: ConfigField, rawValue: string): AutoevalSettings;
10
+ export type ConfigRow = {
11
+ label: string;
12
+ value: string;
13
+ };
14
+ /** Ordered rows for human display; unset defaults read as "(not set)". */
15
+ export declare function describeSettings(settings: AutoevalSettings): ConfigRow[];
16
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/actions/config.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAEhE;;;;;GAKG;AACH,MAAM,MAAM,WAAW,GAAG,oBAAoB,GAAG,qBAAqB,GAAG,uBAAuB,CAAC;AAEjG,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,gBAAgB,EAC1B,KAAK,EAAE,WAAW,EAClB,QAAQ,EAAE,MAAM,GACf,gBAAgB,CAelB;AAED,MAAM,MAAM,SAAS,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEzD,0EAA0E;AAC1E,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,gBAAgB,GAAG,SAAS,EAAE,CAQxE"}
@@ -0,0 +1,28 @@
1
+ import { AutoevalError } from '../errors/autoeval-error.js';
2
+ import { containsCliCredential } from '../auth/redact.js';
3
+ export function setConfigValue(settings, field, rawValue) {
4
+ const value = rawValue.trim();
5
+ if (value === '') {
6
+ throw new AutoevalError(`A non-empty value is required for ${field}.`, {
7
+ kind: 'usage',
8
+ code: 'INVALID_CONFIG_VALUE',
9
+ });
10
+ }
11
+ if (containsCliCredential(value)) {
12
+ throw new AutoevalError(`A credential cannot be saved as ${field}.`, {
13
+ kind: 'validation',
14
+ code: 'INVALID_CONFIG_VALUE',
15
+ });
16
+ }
17
+ return { ...settings, [field]: value };
18
+ }
19
+ /** Ordered rows for human display; unset defaults read as "(not set)". */
20
+ export function describeSettings(settings) {
21
+ const show = (value) => value !== undefined && value !== '' ? value : '(not set)';
22
+ return [
23
+ { label: 'Default workspace', value: show(settings.defaultWorkspaceId) },
24
+ { label: 'Default judge model', value: show(settings.defaultJudgeModelId) },
25
+ { label: 'Default primary model', value: show(settings.defaultPrimaryModelId) },
26
+ ];
27
+ }
28
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/actions/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAW1D,MAAM,UAAU,cAAc,CAC5B,QAA0B,EAC1B,KAAkB,EAClB,QAAgB;IAEhB,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;IAC9B,IAAI,KAAK,KAAK,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,aAAa,CAAC,qCAAqC,KAAK,GAAG,EAAE;YACrE,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,sBAAsB;SAC7B,CAAC,CAAC;IACL,CAAC;IACD,IAAI,qBAAqB,CAAC,KAAK,CAAC,EAAE,CAAC;QACjC,MAAM,IAAI,aAAa,CAAC,mCAAmC,KAAK,GAAG,EAAE;YACnE,IAAI,EAAE,YAAY;YAClB,IAAI,EAAE,sBAAsB;SAC7B,CAAC,CAAC;IACL,CAAC;IACD,OAAO,EAAE,GAAG,QAAQ,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,CAAC;AACzC,CAAC;AAID,0EAA0E;AAC1E,MAAM,UAAU,gBAAgB,CAAC,QAA0B;IACzD,MAAM,IAAI,GAAG,CAAC,KAAyB,EAAU,EAAE,CACjD,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC;IAC5D,OAAO;QACL,EAAE,KAAK,EAAE,mBAAmB,EAAE,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE;QACxE,EAAE,KAAK,EAAE,qBAAqB,EAAE,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE;QAC3E,EAAE,KAAK,EAAE,uBAAuB,EAAE,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,qBAAqB,CAAC,EAAE;KAChF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,120 @@
1
+ import { z } from 'zod';
2
+ import type { ActionContext } from './context.js';
3
+ export declare const openaiEvalIdSchema: z.ZodString;
4
+ export declare const importCommandSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
5
+ operation: z.ZodLiteral<"status">;
6
+ }, z.core.$strict>, z.ZodObject<{
7
+ operation: z.ZodLiteral<"connect">;
8
+ refresh: z.ZodDefault<z.ZodBoolean>;
9
+ }, z.core.$strict>, z.ZodObject<{
10
+ all: z.ZodDefault<z.ZodBoolean>;
11
+ page: z.ZodDefault<z.ZodNumber>;
12
+ size: z.ZodDefault<z.ZodNumber>;
13
+ search: z.ZodOptional<z.ZodString>;
14
+ operation: z.ZodLiteral<"review">;
15
+ }, z.core.$strict>, z.ZodObject<{
16
+ operation: z.ZodLiteral<"run">;
17
+ evalIds: z.ZodOptional<z.ZodArray<z.ZodString>>;
18
+ allNew: z.ZodDefault<z.ZodBoolean>;
19
+ }, z.core.$strict>, z.ZodObject<{
20
+ operation: z.ZodLiteral<"list">;
21
+ }, z.core.$strict>, z.ZodObject<{
22
+ size: z.ZodDefault<z.ZodNumber>;
23
+ page: z.ZodDefault<z.ZodNumber>;
24
+ search: z.ZodOptional<z.ZodString>;
25
+ operation: z.ZodLiteral<"evals">;
26
+ workspaceId: z.ZodUUID;
27
+ }, z.core.$strict>, z.ZodObject<{
28
+ operation: z.ZodLiteral<"show">;
29
+ evaluationId: z.ZodUUID;
30
+ run: z.ZodOptional<z.ZodUUID>;
31
+ showOutputs: z.ZodDefault<z.ZodBoolean>;
32
+ page: z.ZodDefault<z.ZodNumber>;
33
+ size: z.ZodDefault<z.ZodNumber>;
34
+ }, z.core.$strict>, z.ZodObject<{
35
+ operation: z.ZodLiteral<"insights">;
36
+ workspaceId: z.ZodUUID;
37
+ }, z.core.$strict>, z.ZodObject<{
38
+ operation: z.ZodLiteral<"remove">;
39
+ evaluationId: z.ZodUUID;
40
+ yes: z.ZodDefault<z.ZodBoolean>;
41
+ }, z.core.$strict>, z.ZodObject<{
42
+ operation: z.ZodLiteral<"disconnect">;
43
+ }, z.core.$strict>], "operation">;
44
+ export type ImportCommand = z.input<typeof importCommandSchema>;
45
+ export type ParsedImportCommand = z.output<typeof importCommandSchema>;
46
+ export declare const importReviewSchema: z.ZodPreprocess<z.ZodObject<{
47
+ evals: z.ZodArray<z.ZodObject<{
48
+ id: z.ZodOptional<z.ZodString>;
49
+ openai_eval_id: z.ZodOptional<z.ZodString>;
50
+ name: z.ZodString;
51
+ created_at: z.ZodOptional<z.ZodNullable<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>>;
52
+ last_run_at: z.ZodOptional<z.ZodNullable<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>>;
53
+ run_count: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
54
+ already_imported: z.ZodBoolean;
55
+ }, z.core.$loose>>;
56
+ total: z.ZodNumber;
57
+ page: z.ZodNumber;
58
+ size: z.ZodNumber;
59
+ items: z.ZodOptional<z.ZodArray<z.ZodObject<{
60
+ id: z.ZodOptional<z.ZodString>;
61
+ openai_eval_id: z.ZodOptional<z.ZodString>;
62
+ name: z.ZodString;
63
+ created_at: z.ZodOptional<z.ZodNullable<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>>;
64
+ last_run_at: z.ZodOptional<z.ZodNullable<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>>;
65
+ run_count: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
66
+ already_imported: z.ZodBoolean;
67
+ }, z.core.$loose>>>;
68
+ page_size: z.ZodOptional<z.ZodNumber>;
69
+ already_imported_count: z.ZodOptional<z.ZodNumber>;
70
+ }, z.core.$loose>>;
71
+ export type ImportReview = z.infer<typeof importReviewSchema>;
72
+ export declare const importWorkspaceEvalsSchema: z.ZodObject<{
73
+ page: z.ZodNumber;
74
+ page_size: z.ZodNumber;
75
+ total: z.ZodNumber;
76
+ workspace: z.ZodObject<{
77
+ workspace_id: z.ZodUUID;
78
+ name: z.ZodString;
79
+ }, z.core.$loose>;
80
+ items: z.ZodArray<z.ZodObject<{
81
+ eval_id: z.ZodUUID;
82
+ openai_eval_id: z.ZodString;
83
+ name: z.ZodString;
84
+ openai_created_at: z.ZodOptional<z.ZodNullable<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>>;
85
+ imported_at: z.ZodOptional<z.ZodNullable<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>>;
86
+ run_count: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
87
+ last_run_at: z.ZodOptional<z.ZodNullable<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>>;
88
+ }, z.core.$loose>>;
89
+ }, z.core.$loose>;
90
+ export declare const importBatchSchema: z.ZodObject<{
91
+ imported: z.ZodUnion<readonly [z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodRecord<z.ZodString, z.ZodJSONSchema>]>>, z.ZodNumber]>;
92
+ skipped: z.ZodUnion<readonly [z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodRecord<z.ZodString, z.ZodJSONSchema>]>>, z.ZodNumber]>;
93
+ failed: z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodRecord<z.ZodString, z.ZodJSONSchema>]>>;
94
+ eval_ids_imported: z.ZodOptional<z.ZodArray<z.ZodString>>;
95
+ workspace_id: z.ZodOptional<z.ZodNullable<z.ZodUUID>>;
96
+ }, z.core.$loose>;
97
+ export type ImportBatch = z.infer<typeof importBatchSchema>;
98
+ export declare function importEntryCount(entries: number | readonly unknown[]): number;
99
+ export declare const importStatusSchema: z.ZodPreprocess<z.ZodObject<{
100
+ key_present: z.ZodBoolean;
101
+ key_suffix: z.ZodOptional<z.ZodNullable<z.ZodString>>;
102
+ key_last4: z.ZodOptional<z.ZodNullable<z.ZodString>>;
103
+ cache_warm: z.ZodOptional<z.ZodBoolean>;
104
+ evals_access: z.ZodNullable<z.ZodEnum<{
105
+ ready: "ready";
106
+ not_ready: "not_ready";
107
+ forbidden: "forbidden";
108
+ unreachable: "unreachable";
109
+ }>>;
110
+ cache_status: z.ZodNullable<z.ZodEnum<{
111
+ warm: "warm";
112
+ cold: "cold";
113
+ }>>;
114
+ }, z.core.$loose>>;
115
+ export declare function importOutcomeExitCode(command: ParsedImportCommand, response: unknown): number;
116
+ export declare function executeImport(context: ActionContext, untrustedInput: ImportCommand, options?: {
117
+ signal?: AbortSignal;
118
+ onBatch?: (batch: ImportBatch, index: number, total: number) => void;
119
+ }): Promise<unknown>;
120
+ //# sourceMappingURL=imports.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"imports.d.ts","sourceRoot":"","sources":["../../src/actions/imports.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAElD,eAAO,MAAM,kBAAkB,aAAmD,CAAC;AAOnF,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iCAyC9B,CAAC;AAEH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAChE,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAwCvE,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;kBASC,CAAC;AACjC,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAC9D,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;iBAoB7B,CAAC;AAaX,eAAO,MAAM,iBAAiB;;;;;;iBAQpB,CAAC;AACX,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAC5D,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,OAAO,EAAE,GAAG,MAAM,CAE7E;AAYD,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;kBA4BC,CAAC;AAmJjC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,mBAAmB,EAAE,QAAQ,EAAE,OAAO,GAAG,MAAM,CAQ7F;AAED,wBAAsB,aAAa,CACjC,OAAO,EAAE,aAAa,EACtB,cAAc,EAAE,aAAa,EAC7B,OAAO,GAAE;IACP,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACjE,GACL,OAAO,CAAC,OAAO,CAAC,CAiJlB"}
@@ -0,0 +1,404 @@
1
+ import { z } from 'zod';
2
+ import { ApiError, extractUpstreamError } from '../api/errors.js';
3
+ import { AutoevalError } from '../errors/autoeval-error.js';
4
+ export const openaiEvalIdSchema = z.string().regex(/^eval_[A-Za-z0-9_-]{1,200}$/u);
5
+ const pageOptions = {
6
+ page: z.number().int().min(1).max(1000).default(1),
7
+ size: z.number().int().min(1).max(100).default(50),
8
+ search: z.string().trim().max(500).optional(),
9
+ };
10
+ export const importCommandSchema = z.discriminatedUnion('operation', [
11
+ z.object({ operation: z.literal('status') }).strict(),
12
+ z.object({ operation: z.literal('connect'), refresh: z.boolean().default(false) }).strict(),
13
+ z
14
+ .object({ operation: z.literal('review'), ...pageOptions, all: z.boolean().default(false) })
15
+ .strict(),
16
+ z
17
+ .object({
18
+ operation: z.literal('run'),
19
+ evalIds: z.array(openaiEvalIdSchema).max(25_000).optional(),
20
+ allNew: z.boolean().default(false),
21
+ })
22
+ .strict(),
23
+ z.object({ operation: z.literal('list') }).strict(),
24
+ z
25
+ .object({
26
+ operation: z.literal('evals'),
27
+ workspaceId: z.uuid(),
28
+ ...pageOptions,
29
+ size: z.number().int().min(1).max(200).default(50),
30
+ })
31
+ .strict(),
32
+ z
33
+ .object({
34
+ operation: z.literal('show'),
35
+ evaluationId: z.uuid(),
36
+ run: z.uuid().optional(),
37
+ showOutputs: z.boolean().default(false),
38
+ page: pageOptions.page,
39
+ size: pageOptions.size,
40
+ })
41
+ .strict(),
42
+ z.object({ operation: z.literal('insights'), workspaceId: z.uuid() }).strict(),
43
+ z
44
+ .object({
45
+ operation: z.literal('remove'),
46
+ evaluationId: z.uuid(),
47
+ yes: z.boolean().default(false),
48
+ })
49
+ .strict(),
50
+ z.object({ operation: z.literal('disconnect') }).strict(),
51
+ ]);
52
+ const jsonRecord = z.record(z.string(), z.json());
53
+ const importCountSchema = z.number().int().nonnegative().max(Number.MAX_SAFE_INTEGER);
54
+ const importConnectSchema = z
55
+ .object({
56
+ total: importCountSchema.optional(),
57
+ eval_count: importCountSchema.optional(),
58
+ total_evals: importCountSchema.optional(),
59
+ })
60
+ .loose()
61
+ .refine((response) => response.total !== undefined ||
62
+ response.eval_count !== undefined ||
63
+ response.total_evals !== undefined);
64
+ const sourceEvalSchema = z
65
+ .object({
66
+ id: openaiEvalIdSchema.optional(),
67
+ openai_eval_id: openaiEvalIdSchema.optional(),
68
+ name: z.string(),
69
+ created_at: z.union([z.string(), z.number()]).nullable().optional(),
70
+ last_run_at: z.union([z.string(), z.number()]).nullable().optional(),
71
+ run_count: z.number().int().nonnegative().nullable().optional(),
72
+ already_imported: z.boolean(),
73
+ })
74
+ .loose()
75
+ .refine((item) => item.id !== undefined || item.openai_eval_id !== undefined);
76
+ const normalizedImportReviewSchema = z
77
+ .object({
78
+ evals: z.array(sourceEvalSchema),
79
+ total: z.number().int().nonnegative(),
80
+ page: z.number().int().positive(),
81
+ size: z.number().int().positive(),
82
+ items: z.array(sourceEvalSchema).optional(),
83
+ page_size: z.number().int().positive().optional(),
84
+ already_imported_count: z.number().int().nonnegative().optional(),
85
+ })
86
+ .loose();
87
+ export const importReviewSchema = z.preprocess((input) => {
88
+ if (input === null || typeof input !== 'object' || Array.isArray(input))
89
+ return input;
90
+ const response = input;
91
+ if (!('items' in response) && !('page_size' in response))
92
+ return input;
93
+ return {
94
+ ...response,
95
+ evals: response.evals ?? response.items,
96
+ size: response.size ?? response.page_size,
97
+ };
98
+ }, normalizedImportReviewSchema);
99
+ export const importWorkspaceEvalsSchema = z
100
+ .object({
101
+ page: z.number().int().positive(),
102
+ page_size: z.number().int().positive(),
103
+ total: importCountSchema,
104
+ workspace: z.object({ workspace_id: z.uuid(), name: z.string() }).loose(),
105
+ items: z.array(z
106
+ .object({
107
+ eval_id: z.uuid(),
108
+ openai_eval_id: openaiEvalIdSchema,
109
+ name: z.string(),
110
+ openai_created_at: z.union([z.string(), z.number()]).nullable().optional(),
111
+ imported_at: z.union([z.string(), z.number()]).nullable().optional(),
112
+ run_count: importCountSchema.nullable().optional(),
113
+ last_run_at: z.union([z.string(), z.number()]).nullable().optional(),
114
+ })
115
+ .loose()),
116
+ })
117
+ .loose();
118
+ function sourceEvaluationId(evaluation) {
119
+ const id = evaluation.openai_eval_id ?? evaluation.id;
120
+ if (id === undefined) {
121
+ throw new AutoevalError('The import API returned an evaluation without a source ID.', {
122
+ kind: 'upstream',
123
+ code: 'INVALID_IMPORT_RESPONSE',
124
+ });
125
+ }
126
+ return id;
127
+ }
128
+ const batchEntrySchema = z.union([openaiEvalIdSchema, jsonRecord]);
129
+ const batchCountSchema = z.union([z.array(batchEntrySchema), z.number().int().nonnegative()]);
130
+ export const importBatchSchema = z
131
+ .object({
132
+ imported: batchCountSchema,
133
+ skipped: batchCountSchema,
134
+ failed: z.array(batchEntrySchema),
135
+ eval_ids_imported: z.array(openaiEvalIdSchema).optional(),
136
+ workspace_id: z.uuid().nullable().optional(),
137
+ })
138
+ .loose();
139
+ export function importEntryCount(entries) {
140
+ return typeof entries === 'number' ? entries : entries.length;
141
+ }
142
+ const normalizedImportStatusSchema = z
143
+ .object({
144
+ key_present: z.boolean(),
145
+ key_suffix: z.string().max(8).nullable().optional(),
146
+ key_last4: z.string().length(4).nullable().optional(),
147
+ cache_warm: z.boolean().optional(),
148
+ evals_access: z.enum(['ready', 'not_ready', 'forbidden', 'unreachable']).nullable(),
149
+ cache_status: z.enum(['warm', 'cold']).nullable(),
150
+ })
151
+ .loose();
152
+ export const importStatusSchema = z.preprocess((input) => {
153
+ if (input === null || typeof input !== 'object' || Array.isArray(input))
154
+ return input;
155
+ const response = input;
156
+ const code = extractUpstreamError(response).code;
157
+ const recognizedCode = code === 'KEY_PRESENT' ||
158
+ code === 'NO_KEY' ||
159
+ code === 'EVALS_FORBIDDEN' ||
160
+ code === 'OPENAI_UNREACHABLE';
161
+ if (code !== undefined && !recognizedCode)
162
+ return input;
163
+ if (!recognizedCode && !('cache_warm' in response) && !('key_last4' in response))
164
+ return input;
165
+ const keyPresent = response.key_present ?? (recognizedCode ? code !== 'NO_KEY' : undefined);
166
+ const cacheStatus = response.cache_status ??
167
+ (typeof response.cache_warm === 'boolean' ? (response.cache_warm ? 'warm' : 'cold') : null);
168
+ let access = response.evals_access;
169
+ if (access === undefined) {
170
+ if (code === 'EVALS_FORBIDDEN')
171
+ access = 'forbidden';
172
+ else if (code === 'OPENAI_UNREACHABLE')
173
+ access = 'unreachable';
174
+ else
175
+ access = 'not_ready';
176
+ }
177
+ return {
178
+ ...response,
179
+ key_present: keyPresent,
180
+ key_suffix: response.key_suffix ?? response.key_last4,
181
+ evals_access: access,
182
+ cache_status: cacheStatus,
183
+ };
184
+ }, normalizedImportStatusSchema);
185
+ const importErrors = {
186
+ NO_KEY: {
187
+ message: 'Add an OpenAI key in the Plumloom UI (AI Providers & Models), then run autoeval import connect.',
188
+ exitCode: 3,
189
+ },
190
+ INVALID_KEY: {
191
+ message: 'Replace the OpenAI key in the Plumloom UI (AI Providers & Models), then run autoeval import connect.',
192
+ exitCode: 3,
193
+ },
194
+ EVALS_FORBIDDEN: {
195
+ message: 'The configured OpenAI key cannot read Evals. Enable Evals access in OpenAI, then reconnect.',
196
+ exitCode: 4,
197
+ },
198
+ OPENAI_UNREACHABLE: {
199
+ message: 'OpenAI is unreachable. Try autoeval import connect again later.',
200
+ exitCode: 4,
201
+ },
202
+ };
203
+ function invalidImport(message, code = 'INVALID_IMPORT_ARGUMENTS') {
204
+ return new AutoevalError(message, { kind: 'usage', code });
205
+ }
206
+ function throwIfImportAborted(signal) {
207
+ if (signal?.aborted) {
208
+ throw new AutoevalError('Import request was canceled.', {
209
+ kind: 'network',
210
+ code: 'REQUEST_ABORTED',
211
+ });
212
+ }
213
+ }
214
+ async function requestImport(context, request, schema) {
215
+ throwIfImportAborted(request.signal);
216
+ try {
217
+ const response = await context.api.externalImport(request);
218
+ throwIfImportAborted(request.signal);
219
+ const code = extractUpstreamError(response).code;
220
+ const providerError = importErrors[code ?? ''];
221
+ const isStatusState = request.path === '/connect/status' &&
222
+ (code === 'NO_KEY' || code === 'EVALS_FORBIDDEN' || code === 'OPENAI_UNREACHABLE');
223
+ if (providerError && !isStatusState) {
224
+ throw new AutoevalError(providerError.message, {
225
+ kind: 'upstream',
226
+ code: code ?? 'IMPORT_PROVIDER_ERROR',
227
+ exitCode: providerError.exitCode,
228
+ });
229
+ }
230
+ const parsed = schema.safeParse(response);
231
+ if (!parsed.success)
232
+ throw new AutoevalError('The import API returned an unsupported response. Check CLI/backend compatibility.', { kind: 'upstream', code: 'INVALID_IMPORT_RESPONSE' });
233
+ return parsed.data;
234
+ }
235
+ catch (error) {
236
+ throwIfImportAborted(request.signal);
237
+ if (error instanceof ApiError) {
238
+ const providerError = importErrors[error.code ?? ''];
239
+ if (providerError)
240
+ throw new AutoevalError(providerError.message, {
241
+ kind: 'upstream',
242
+ code: error.code ?? 'IMPORT_PROVIDER_ERROR',
243
+ exitCode: providerError.exitCode,
244
+ });
245
+ if (error.status === 409)
246
+ throw new AutoevalError("Run 'autoeval import connect' first.", {
247
+ kind: 'validation',
248
+ code: 'IMPORT_CACHE_COLD',
249
+ exitCode: 9,
250
+ });
251
+ if (error.status === 405) {
252
+ throw new AutoevalError('The import endpoint does not support this HTTP method. Check CLI/backend route compatibility.', {
253
+ kind: 'unsupported',
254
+ code: 'IMPORT_METHOD_NOT_ALLOWED',
255
+ exitCode: 4,
256
+ });
257
+ }
258
+ throw new AutoevalError(`Import request failed (HTTP ${error.status}). Check access and try again.`, { kind: error.kind, code: error.code ?? 'IMPORT_REQUEST_FAILED', exitCode: error.exitCode });
259
+ }
260
+ throw error;
261
+ }
262
+ }
263
+ async function reviewImports(context, input, signal) {
264
+ const evals = [];
265
+ const seen = new Set();
266
+ let first;
267
+ for (let page = input.all ? 1 : input.page; page <= 1000; page += 1) {
268
+ const response = await requestImport(context, {
269
+ method: 'GET',
270
+ path: '',
271
+ query: { page, page_size: input.size, search: input.search ?? '' },
272
+ ...(signal ? { signal } : {}),
273
+ }, importReviewSchema);
274
+ if (!input.all)
275
+ return response;
276
+ first ??= response;
277
+ let added = 0;
278
+ for (const evaluation of response.evals) {
279
+ const id = sourceEvaluationId(evaluation);
280
+ if (!seen.has(id)) {
281
+ seen.add(id);
282
+ evals.push(evaluation);
283
+ added += 1;
284
+ }
285
+ }
286
+ if (evals.length > 25_000)
287
+ throw invalidImport('Discovery exceeds 25,000 evaluations. Narrow the search.', 'IMPORT_LIMIT_EXCEEDED');
288
+ if (page * response.size >= response.total) {
289
+ return { ...first, evals, ...(Array.isArray(first.items) ? { items: evals } : {}) };
290
+ }
291
+ if (added === 0)
292
+ throw new AutoevalError('Import discovery pagination did not advance. Reconnect and retry.', {
293
+ kind: 'upstream',
294
+ code: 'IMPORT_PAGINATION_STALLED',
295
+ });
296
+ }
297
+ throw invalidImport('Discovery exceeds 1,000 pages. Narrow the search.', 'IMPORT_LIMIT_EXCEEDED');
298
+ }
299
+ export function importOutcomeExitCode(command, response) {
300
+ if (command.operation === 'status') {
301
+ const status = importStatusSchema.parse(response);
302
+ return status.key_present ? 0 : 3;
303
+ }
304
+ if (command.operation === 'run')
305
+ return importBatchSchema.parse(response).failed.length > 0 ? 1 : 0;
306
+ return 0;
307
+ }
308
+ export async function executeImport(context, untrustedInput, options = {}) {
309
+ const parsed = importCommandSchema.safeParse(untrustedInput);
310
+ if (!parsed.success)
311
+ throw invalidImport('Invalid import arguments. Use UUIDs for Plumloom resources and eval_ IDs for OpenAI sources.');
312
+ const input = parsed.data;
313
+ const request = (method, path, schema, extras = {}) => requestImport(context, { method, path, ...extras, ...(options.signal ? { signal: options.signal } : {}) }, schema);
314
+ switch (input.operation) {
315
+ case 'status':
316
+ return request('GET', '/connect/status', importStatusSchema);
317
+ case 'connect':
318
+ return request('POST', input.refresh ? '/refresh' : '/connect', importConnectSchema);
319
+ case 'disconnect':
320
+ return ((await request('POST', '/disconnect', z.union([jsonRecord, z.undefined(), z.null()]))) ?? {
321
+ disconnected: true,
322
+ });
323
+ case 'review':
324
+ return reviewImports(context, input, options.signal);
325
+ case 'list':
326
+ return request('GET', '/workspaces', z.union([z.array(jsonRecord), z.object({ workspaces: z.array(jsonRecord) }).loose()]));
327
+ case 'evals':
328
+ return request('GET', `/workspaces/${input.workspaceId}`, importWorkspaceEvalsSchema, {
329
+ query: { page: input.page, page_size: input.size, search: input.search ?? '' },
330
+ });
331
+ case 'show':
332
+ return request('GET', `/evaluations/${input.evaluationId}`, z.object({ eval: z.object({ name: z.string() }).loose() }).loose(), {
333
+ query: { run_id: input.run, page: input.page, page_size: input.size },
334
+ });
335
+ case 'insights':
336
+ return request('GET', `/workspaces/${input.workspaceId}/insights`, z.object({ derived_by: z.literal('Plumloom') }).loose());
337
+ case 'remove': {
338
+ if (!input.yes)
339
+ throw invalidImport('Removal requires explicit confirmation (--yes).', 'IMPORT_CONFIRMATION_REQUIRED');
340
+ return request('DELETE', `/evaluations/${input.evaluationId}`, z.object({ deleted: z.literal(true) }).loose());
341
+ }
342
+ case 'run': {
343
+ if (input.allNew === (input.evalIds !== undefined))
344
+ throw invalidImport('Choose exactly one of --eval, --input, or --all-new.');
345
+ let evalIds = [...new Set(input.evalIds ?? [])];
346
+ if (input.allNew) {
347
+ const discovered = await reviewImports(context, { operation: 'review', all: true, page: 1, size: 100 }, options.signal);
348
+ evalIds = discovered.evals
349
+ .filter((evaluation) => !evaluation.already_imported)
350
+ .map(sourceEvaluationId);
351
+ }
352
+ if (!input.allNew && evalIds.length === 0)
353
+ throw invalidImport('Select at least one OpenAI evaluation.');
354
+ const summary = {
355
+ imported: [],
356
+ skipped: [],
357
+ failed: [],
358
+ eval_ids_imported: [],
359
+ batches: [],
360
+ };
361
+ for (let offset = 0; offset < evalIds.length; offset += 25) {
362
+ const batch = await request('POST', '/run', importBatchSchema, {
363
+ body: { eval_ids: evalIds.slice(offset, offset + 25) },
364
+ });
365
+ for (const field of ['imported', 'skipped']) {
366
+ const previous = summary[field];
367
+ const incoming = batch[field];
368
+ summary[field] =
369
+ typeof previous === 'number' || typeof incoming === 'number'
370
+ ? importEntryCount(previous) + importEntryCount(incoming)
371
+ : [...previous, ...incoming];
372
+ }
373
+ summary.failed.push(...batch.failed);
374
+ // Preserve the IDs actually imported by each backend batch.
375
+ // Do not infer IDs from a numeric imported count.
376
+ const importedIds = batch.eval_ids_imported ??
377
+ (Array.isArray(batch.imported)
378
+ ? batch.imported.filter((entry) => typeof entry === 'string')
379
+ : []);
380
+ summary.eval_ids_imported.push(...importedIds);
381
+ if (batch.workspace_id) {
382
+ if (summary.workspace_id && summary.workspace_id !== batch.workspace_id) {
383
+ throw new AutoevalError('Import batches returned different workspace IDs.', {
384
+ kind: 'upstream',
385
+ code: 'IMPORT_WORKSPACE_MISMATCH',
386
+ });
387
+ }
388
+ summary.workspace_id = batch.workspace_id;
389
+ }
390
+ summary.batches.push(batch);
391
+ options.onBatch?.(batch, offset / 25 + 1, Math.ceil(evalIds.length / 25));
392
+ }
393
+ return {
394
+ workspace_id: summary.workspace_id ?? null,
395
+ imported: summary.imported,
396
+ skipped: summary.skipped,
397
+ failed: summary.failed,
398
+ eval_ids_imported: summary.eval_ids_imported,
399
+ batches: summary.batches,
400
+ };
401
+ }
402
+ }
403
+ }
404
+ //# sourceMappingURL=imports.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"imports.js","sourceRoot":"","sources":["../../src/actions/imports.ts"],"names":[],"mappings":"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"}