@prismatic-io/lux 0.0.2-preview.25 → 0.0.2-preview.26

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 (137) hide show
  1. package/lib/answerers/claude-code/index.d.ts +3 -3
  2. package/lib/answerers/claude-code/index.d.ts.map +1 -1
  3. package/lib/answerers/claude-code/index.js +3 -2
  4. package/lib/answerers/claude-code/index.js.map +1 -1
  5. package/lib/answerers/persona/index.d.ts +3 -3
  6. package/lib/answerers/persona/index.d.ts.map +1 -1
  7. package/lib/answerers/persona/index.js +3 -2
  8. package/lib/answerers/persona/index.js.map +1 -1
  9. package/lib/answerers/terminal/index.d.ts +3 -3
  10. package/lib/answerers/terminal/index.d.ts.map +1 -1
  11. package/lib/answerers/terminal/index.js +3 -2
  12. package/lib/answerers/terminal/index.js.map +1 -1
  13. package/lib/assertions/core/command-exits-zero.d.ts +1 -1
  14. package/lib/assertions/core/command-exits-zero.d.ts.map +1 -1
  15. package/lib/assertions/core/command-exits-zero.js +4 -3
  16. package/lib/assertions/core/command-exits-zero.js.map +1 -1
  17. package/lib/assertions/rubric/index.d.ts +2 -2
  18. package/lib/assertions/rubric/index.d.ts.map +1 -1
  19. package/lib/assertions/rubric/index.js +4 -3
  20. package/lib/assertions/rubric/index.js.map +1 -1
  21. package/lib/authoring.d.ts +1 -0
  22. package/lib/authoring.d.ts.map +1 -1
  23. package/lib/authoring.js +1 -0
  24. package/lib/authoring.js.map +1 -1
  25. package/lib/cli/output-schemas.d.ts +2 -2
  26. package/lib/core/duration.d.ts +5 -0
  27. package/lib/core/duration.d.ts.map +1 -0
  28. package/lib/core/duration.js +49 -0
  29. package/lib/core/duration.js.map +1 -0
  30. package/lib/core/experiment.d.ts +2 -2
  31. package/lib/core/experiment.d.ts.map +1 -1
  32. package/lib/core/experiment.js +2 -1
  33. package/lib/core/experiment.js.map +1 -1
  34. package/lib/core/index.d.ts +1 -0
  35. package/lib/core/index.d.ts.map +1 -1
  36. package/lib/core/index.js +1 -0
  37. package/lib/core/index.js.map +1 -1
  38. package/lib/drivers/antigravity/config.d.ts +3 -3
  39. package/lib/drivers/antigravity/config.d.ts.map +1 -1
  40. package/lib/drivers/antigravity/config.js +2 -1
  41. package/lib/drivers/antigravity/config.js.map +1 -1
  42. package/lib/drivers/antigravity/index.d.ts +4 -4
  43. package/lib/drivers/antigravity/index.js +1 -1
  44. package/lib/drivers/antigravity/index.js.map +1 -1
  45. package/lib/drivers/claude-code/index.d.ts +14 -14
  46. package/lib/drivers/claude-code/index.d.ts.map +1 -1
  47. package/lib/drivers/claude-code/index.js +10 -9
  48. package/lib/drivers/claude-code/index.js.map +1 -1
  49. package/lib/drivers/codex/config.d.ts +3 -3
  50. package/lib/drivers/codex/config.d.ts.map +1 -1
  51. package/lib/drivers/codex/config.js +2 -1
  52. package/lib/drivers/codex/config.js.map +1 -1
  53. package/lib/drivers/codex/index.d.ts +4 -4
  54. package/lib/drivers/codex/index.d.ts.map +1 -1
  55. package/lib/drivers/codex/index.js +4 -3
  56. package/lib/drivers/codex/index.js.map +1 -1
  57. package/lib/drivers/copilot/config.d.ts +6 -6
  58. package/lib/drivers/copilot/config.d.ts.map +1 -1
  59. package/lib/drivers/copilot/config.js +3 -2
  60. package/lib/drivers/copilot/config.js.map +1 -1
  61. package/lib/drivers/copilot/index.d.ts +8 -8
  62. package/lib/drivers/copilot/index.d.ts.map +1 -1
  63. package/lib/drivers/copilot/index.js +3 -2
  64. package/lib/drivers/copilot/index.js.map +1 -1
  65. package/lib/drivers/cursor/config.d.ts +2 -2
  66. package/lib/drivers/cursor/config.d.ts.map +1 -1
  67. package/lib/drivers/cursor/config.js +3 -2
  68. package/lib/drivers/cursor/config.js.map +1 -1
  69. package/lib/drivers/cursor/index.d.ts +4 -4
  70. package/lib/drivers/cursor/index.d.ts.map +1 -1
  71. package/lib/drivers/cursor/index.js +3 -2
  72. package/lib/drivers/cursor/index.js.map +1 -1
  73. package/lib/drivers/grok-build/config.d.ts +9 -9
  74. package/lib/drivers/grok-build/config.d.ts.map +1 -1
  75. package/lib/drivers/grok-build/config.js +4 -3
  76. package/lib/drivers/grok-build/config.js.map +1 -1
  77. package/lib/drivers/grok-build/index.d.ts +12 -12
  78. package/lib/drivers/grok-build/index.d.ts.map +1 -1
  79. package/lib/drivers/grok-build/index.js +5 -4
  80. package/lib/drivers/grok-build/index.js.map +1 -1
  81. package/lib/drivers/mcp/index.d.ts +6 -6
  82. package/lib/drivers/mcp/index.d.ts.map +1 -1
  83. package/lib/drivers/mcp/index.js +9 -8
  84. package/lib/drivers/mcp/index.js.map +1 -1
  85. package/lib/drivers/subprocess/index.d.ts +3 -3
  86. package/lib/drivers/subprocess/index.d.ts.map +1 -1
  87. package/lib/drivers/subprocess/index.js +4 -3
  88. package/lib/drivers/subprocess/index.js.map +1 -1
  89. package/lib/index.d.ts +1 -0
  90. package/lib/index.d.ts.map +1 -1
  91. package/lib/index.js +1 -0
  92. package/lib/index.js.map +1 -1
  93. package/lib/optimization/reflective.d.ts +1 -1
  94. package/lib/optimization/reflective.d.ts.map +1 -1
  95. package/lib/optimization/reflective.js +3 -2
  96. package/lib/optimization/reflective.js.map +1 -1
  97. package/lib/orchestrator/candidates.d.ts.map +1 -1
  98. package/lib/orchestrator/candidates.js +3 -2
  99. package/lib/orchestrator/candidates.js.map +1 -1
  100. package/lib/orchestrator/experiment-contracts.d.ts +1 -1
  101. package/lib/orchestrator/experiment-loader.d.ts +1 -1
  102. package/lib/orchestrator/experiment-report.d.ts +1 -1
  103. package/lib/orchestrator/experiment-runs.d.ts +1 -1
  104. package/lib/orchestrator/grading.js +1 -1
  105. package/lib/orchestrator/grading.js.map +1 -1
  106. package/lib/orchestrator/rubric-loader.js +1 -1
  107. package/lib/orchestrator/rubric-loader.js.map +1 -1
  108. package/package.json +1 -1
  109. package/skills/lux-answerer/SKILL.md +2 -2
  110. package/src/answerers/claude-code/index.ts +3 -2
  111. package/src/answerers/persona/index.ts +3 -2
  112. package/src/answerers/terminal/index.ts +3 -2
  113. package/src/assertions/core/command-exits-zero.ts +4 -3
  114. package/src/assertions/rubric/index.ts +4 -3
  115. package/src/authoring.ts +1 -0
  116. package/src/core/duration.ts +52 -0
  117. package/src/core/experiment.ts +2 -1
  118. package/src/core/index.ts +1 -0
  119. package/src/drivers/antigravity/config.ts +2 -1
  120. package/src/drivers/antigravity/index.ts +1 -1
  121. package/src/drivers/claude-code/index.ts +10 -9
  122. package/src/drivers/codex/config.ts +2 -1
  123. package/src/drivers/codex/index.ts +4 -3
  124. package/src/drivers/copilot/config.ts +3 -2
  125. package/src/drivers/copilot/index.ts +4 -3
  126. package/src/drivers/cursor/config.ts +3 -2
  127. package/src/drivers/cursor/index.ts +4 -3
  128. package/src/drivers/grok-build/README.md +2 -2
  129. package/src/drivers/grok-build/config.ts +4 -3
  130. package/src/drivers/grok-build/index.ts +6 -5
  131. package/src/drivers/mcp/index.ts +9 -8
  132. package/src/drivers/subprocess/index.ts +4 -3
  133. package/src/index.ts +1 -0
  134. package/src/optimization/reflective.ts +3 -2
  135. package/src/orchestrator/candidates.ts +3 -2
  136. package/src/orchestrator/grading.ts +1 -1
  137. package/src/orchestrator/rubric-loader.ts +1 -1
@@ -2,6 +2,7 @@ import type { ChildProcessWithoutNullStreams } from "node:child_process";
2
2
  import { createInterface } from "node:readline";
3
3
  import { fileURLToPath } from "node:url";
4
4
  import { z } from "zod";
5
+ import { DurationSchema, durationMs } from "../../core/duration.js";
5
6
  import {
6
7
  type AgentDriver,
7
8
  type Answer,
@@ -36,7 +37,7 @@ export const SubprocessDriverConfigSchema = z
36
37
  /** Inherit the host environment. Experiment mode always forces this off. */
37
38
  inheritEnv: z.boolean().optional(),
38
39
  protocol: z.enum(["lux-jsonl", "custom"]).default("lux-jsonl"),
39
- idleTimeoutMs: z.number().positive().default(120_000),
40
+ idleTimeout: DurationSchema.default("2 minutes"),
40
41
  maxInterrupts: z.number().positive().default(20),
41
42
  /**
42
43
  * Maximum files inventoried from LUX_ARTIFACTS_DIR. Keep the conservative
@@ -485,7 +486,7 @@ class SubprocessDriverImpl implements AgentDriver {
485
486
  private bumpIdleTimer(): void {
486
487
  this.clearIdleTimer();
487
488
  this.idleTimer = setTimeout(() => {
488
- const reason = `no event for ${this.config.idleTimeoutMs}ms`;
489
+ const reason = `no event for ${durationMs(this.config.idleTimeout)}ms`;
489
490
  // Idle before ready means start() is still pending; reject it (and kill
490
491
  // the child) or the orchestrator waits forever.
491
492
  const preReady = this.readyRejected !== null;
@@ -497,7 +498,7 @@ class SubprocessDriverImpl implements AgentDriver {
497
498
  // Kill immediately: the run is lost and the child would keep doing
498
499
  // billable work until close().
499
500
  this.terminate();
500
- }, this.config.idleTimeoutMs);
501
+ }, durationMs(this.config.idleTimeout));
501
502
  }
502
503
 
503
504
  private clearIdleTimer(): void {
package/src/index.ts CHANGED
@@ -1,3 +1,4 @@
1
+ export { DurationSchema, durationMs } from "./core/duration.js";
1
2
  // Public surface of @prismatic-io/lux. The package root exposes authoring
2
3
  // contracts, extension points, built-ins, and supported programmatic
3
4
  // lifecycles. Explicit exports keep implementation and test helpers private.
@@ -1,4 +1,5 @@
1
1
  import { z } from "zod";
2
+ import { DurationSchema, durationMs } from "../core/duration.js";
2
3
  import {
3
4
  type CandidateEvaluation,
4
5
  type CandidateProposal,
@@ -16,7 +17,7 @@ export const ReflectiveOptimizerConfigSchema = z
16
17
  model: z.string().optional(),
17
18
  command: z.string().optional(),
18
19
  reasoningEffort: ReasoningEffortSchema.optional(),
19
- timeoutMs: z.number().int().positive().default(180_000),
20
+ timeout: DurationSchema.default("3 minutes"),
20
21
  maxComponentChars: z.number().int().positive().default(80_000),
21
22
  maxAlternativeChars: z.number().int().positive().default(40_000),
22
23
  maxFeedbackChars: z.number().int().positive().default(50_000),
@@ -273,7 +274,7 @@ const reflectiveOptimizer = (config: ReflectiveOptimizerConfig): Optimizer => ({
273
274
  model,
274
275
  command: config.command,
275
276
  reasoningEffort: config.reasoningEffort,
276
- timeoutMs: config.timeoutMs,
277
+ timeoutMs: durationMs(config.timeout),
277
278
  system: systemPrompt(input.campaign.evaluation.kind),
278
279
  signal: input.abortSignal,
279
280
  prompt: builtPrompt.prompt,
@@ -5,6 +5,7 @@ import { basename, dirname, isAbsolute, join, normalize, relative, resolve, sep
5
5
  import { temporaryDirectory } from "tempy";
6
6
  import { glob } from "tinyglobby";
7
7
  import { z } from "zod";
8
+ import { durationMs } from "../core/duration.js";
8
9
  import { exec } from "../core/exec.js";
9
10
  import {
10
11
  type Candidate,
@@ -226,7 +227,7 @@ export const validateCandidate = async (
226
227
  try {
227
228
  return await exec(validation.command, validation.args, {
228
229
  cwd: materializedRoot,
229
- timeoutMs: validation.timeoutMs,
230
+ timeoutMs: durationMs(validation.timeout),
230
231
  env,
231
232
  ...(signal ? { signal } : {}),
232
233
  });
@@ -236,7 +237,7 @@ export const validateCandidate = async (
236
237
  })().finally(() => rm(validationHome, { recursive: true, force: true }));
237
238
  if (result.timedOut || result.exitCode !== 0) {
238
239
  const reason = result.timedOut
239
- ? `timed out after ${validation.timeoutMs}ms`
240
+ ? `timed out after ${durationMs(validation.timeout)}ms`
240
241
  : `exited ${result.exitCode}`;
241
242
  throw new Error(
242
243
  `candidate validation '${validation.command}' ${reason}: ${result.stderr.slice(0, 500)}`,
@@ -213,7 +213,7 @@ export const gradeRun = async (
213
213
  if (validatedConfigs && index >= validatedConfigs.length) {
214
214
  throw new Error(`validated assertion plan is missing assertions[${index}]`);
215
215
  }
216
- // Pass the validated config so schema defaults (e.g. timeoutMs)
216
+ // Pass the validated config so schema defaults (e.g. timeout)
217
217
  // reach evaluate(); the raw assertion object has none applied.
218
218
  const result = AssertionResultSchema.parse(
219
219
  await impl.evaluate(validated as typeof a, run, {
@@ -9,7 +9,7 @@ const CANDIDATE_FORBIDDEN_FIELDS = [
9
9
  "provider",
10
10
  "model",
11
11
  "reasoningEffort",
12
- "timeoutMs",
12
+ "timeout",
13
13
  "promptOverride",
14
14
  ] as const;
15
15
  const RawRubricDefinitionSchema = z.looseObject({