@prismatic-io/lux 0.0.2-preview.29 → 0.0.2-preview.30

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 (152) hide show
  1. package/lib/answerers/persona/index.d.ts +6 -0
  2. package/lib/answerers/persona/index.d.ts.map +1 -1
  3. package/lib/answerers/persona/index.js +5 -0
  4. package/lib/answerers/persona/index.js.map +1 -1
  5. package/lib/assertions/core/command-exits-zero.d.ts +2 -0
  6. package/lib/assertions/core/command-exits-zero.d.ts.map +1 -1
  7. package/lib/assertions/core/command-exits-zero.js +46 -4
  8. package/lib/assertions/core/command-exits-zero.js.map +1 -1
  9. package/lib/assertions/rubric/index.d.ts +16 -0
  10. package/lib/assertions/rubric/index.d.ts.map +1 -1
  11. package/lib/assertions/rubric/index.js +34 -3
  12. package/lib/assertions/rubric/index.js.map +1 -1
  13. package/lib/assertions/rubric/internal.d.ts +14 -0
  14. package/lib/assertions/rubric/internal.d.ts.map +1 -1
  15. package/lib/assertions/rubric/internal.js +122 -12
  16. package/lib/assertions/rubric/internal.js.map +1 -1
  17. package/lib/core/agent-environment.d.ts +5 -0
  18. package/lib/core/agent-environment.d.ts.map +1 -0
  19. package/lib/core/agent-environment.js +47 -0
  20. package/lib/core/agent-environment.js.map +1 -0
  21. package/lib/core/command-verification.d.ts +10 -0
  22. package/lib/core/command-verification.d.ts.map +1 -0
  23. package/lib/core/command-verification.js +66 -0
  24. package/lib/core/command-verification.js.map +1 -0
  25. package/lib/core/driver.d.ts +7 -0
  26. package/lib/core/driver.d.ts.map +1 -1
  27. package/lib/core/driver.js +2 -0
  28. package/lib/core/driver.js.map +1 -1
  29. package/lib/core/index.d.ts +2 -0
  30. package/lib/core/index.d.ts.map +1 -1
  31. package/lib/core/index.js +2 -0
  32. package/lib/core/index.js.map +1 -1
  33. package/lib/core/model-cli.d.ts +5 -0
  34. package/lib/core/model-cli.d.ts.map +1 -1
  35. package/lib/core/model-cli.js +8 -2
  36. package/lib/core/model-cli.js.map +1 -1
  37. package/lib/core/run.d.ts +5 -0
  38. package/lib/core/run.d.ts.map +1 -1
  39. package/lib/core/secure-copy.d.ts.map +1 -0
  40. package/lib/core/secure-copy.js.map +1 -0
  41. package/lib/drivers/antigravity/config.d.ts +3 -0
  42. package/lib/drivers/antigravity/config.d.ts.map +1 -1
  43. package/lib/drivers/antigravity/config.js +2 -0
  44. package/lib/drivers/antigravity/config.js.map +1 -1
  45. package/lib/drivers/antigravity/index.d.ts +4 -0
  46. package/lib/drivers/antigravity/index.d.ts.map +1 -1
  47. package/lib/drivers/antigravity/runtime.d.ts.map +1 -1
  48. package/lib/drivers/antigravity/runtime.js +7 -2
  49. package/lib/drivers/antigravity/runtime.js.map +1 -1
  50. package/lib/drivers/claude-code/index.d.ts +18 -4
  51. package/lib/drivers/claude-code/index.d.ts.map +1 -1
  52. package/lib/drivers/claude-code/index.js +97 -200
  53. package/lib/drivers/claude-code/index.js.map +1 -1
  54. package/lib/drivers/claude-code/isolation.d.ts +8 -0
  55. package/lib/drivers/claude-code/isolation.d.ts.map +1 -0
  56. package/lib/drivers/claude-code/isolation.js +199 -0
  57. package/lib/drivers/claude-code/isolation.js.map +1 -0
  58. package/lib/drivers/codex/config.d.ts +3 -0
  59. package/lib/drivers/codex/config.d.ts.map +1 -1
  60. package/lib/drivers/codex/config.js +2 -0
  61. package/lib/drivers/codex/config.js.map +1 -1
  62. package/lib/drivers/codex/index.d.ts +4 -0
  63. package/lib/drivers/codex/index.d.ts.map +1 -1
  64. package/lib/drivers/codex/index.js +52 -24
  65. package/lib/drivers/codex/index.js.map +1 -1
  66. package/lib/drivers/copilot/config.d.ts +3 -0
  67. package/lib/drivers/copilot/config.d.ts.map +1 -1
  68. package/lib/drivers/copilot/config.js +2 -0
  69. package/lib/drivers/copilot/config.js.map +1 -1
  70. package/lib/drivers/copilot/index.d.ts +4 -0
  71. package/lib/drivers/copilot/index.d.ts.map +1 -1
  72. package/lib/drivers/copilot/index.js +2 -1
  73. package/lib/drivers/copilot/index.js.map +1 -1
  74. package/lib/drivers/cursor/config.d.ts +1 -0
  75. package/lib/drivers/cursor/config.d.ts.map +1 -1
  76. package/lib/drivers/cursor/config.js +2 -0
  77. package/lib/drivers/cursor/config.js.map +1 -1
  78. package/lib/drivers/cursor/index.d.ts +2 -0
  79. package/lib/drivers/cursor/index.d.ts.map +1 -1
  80. package/lib/drivers/cursor/index.js +2 -1
  81. package/lib/drivers/cursor/index.js.map +1 -1
  82. package/lib/drivers/grok-build/config.d.ts +3 -0
  83. package/lib/drivers/grok-build/config.d.ts.map +1 -1
  84. package/lib/drivers/grok-build/config.js +2 -0
  85. package/lib/drivers/grok-build/config.js.map +1 -1
  86. package/lib/drivers/grok-build/index.d.ts +4 -0
  87. package/lib/drivers/grok-build/index.d.ts.map +1 -1
  88. package/lib/drivers/grok-build/index.js +2 -1
  89. package/lib/drivers/grok-build/index.js.map +1 -1
  90. package/lib/drivers/subprocess/index.d.ts +3 -3
  91. package/lib/drivers/subprocess/index.d.ts.map +1 -1
  92. package/lib/drivers/subprocess/index.js +5 -2
  93. package/lib/drivers/subprocess/index.js.map +1 -1
  94. package/lib/orchestrator/artifact-origin.d.ts +3 -0
  95. package/lib/orchestrator/artifact-origin.d.ts.map +1 -0
  96. package/lib/orchestrator/artifact-origin.js +40 -0
  97. package/lib/orchestrator/artifact-origin.js.map +1 -0
  98. package/lib/orchestrator/config.d.ts +6 -0
  99. package/lib/orchestrator/config.d.ts.map +1 -1
  100. package/lib/orchestrator/experiment-context.d.ts +2 -0
  101. package/lib/orchestrator/experiment-context.d.ts.map +1 -1
  102. package/lib/orchestrator/experiment-corpus.d.ts.map +1 -1
  103. package/lib/orchestrator/experiment-corpus.js +2 -2
  104. package/lib/orchestrator/experiment-corpus.js.map +1 -1
  105. package/lib/orchestrator/experiment-identity.d.ts.map +1 -1
  106. package/lib/orchestrator/experiment-identity.js +4 -4
  107. package/lib/orchestrator/experiment-identity.js.map +1 -1
  108. package/lib/orchestrator/fixture-identity.d.ts +1 -0
  109. package/lib/orchestrator/fixture-identity.d.ts.map +1 -1
  110. package/lib/orchestrator/fixture-identity.js +6 -1
  111. package/lib/orchestrator/fixture-identity.js.map +1 -1
  112. package/lib/orchestrator/orchestrator.d.ts.map +1 -1
  113. package/lib/orchestrator/orchestrator.js +2 -2
  114. package/lib/orchestrator/orchestrator.js.map +1 -1
  115. package/lib/orchestrator/run-execution.d.ts.map +1 -1
  116. package/lib/orchestrator/run-execution.js +14 -3
  117. package/lib/orchestrator/run-execution.js.map +1 -1
  118. package/package.json +1 -1
  119. package/skills/lux-answerer/SKILL.md +1 -1
  120. package/src/answerers/persona/index.ts +5 -0
  121. package/src/assertions/core/command-exits-zero.ts +57 -4
  122. package/src/assertions/rubric/index.ts +38 -3
  123. package/src/assertions/rubric/internal.ts +172 -11
  124. package/src/core/agent-environment.ts +64 -0
  125. package/src/core/command-verification.ts +74 -0
  126. package/src/core/driver.ts +4 -0
  127. package/src/core/index.ts +2 -0
  128. package/src/core/model-cli.ts +14 -2
  129. package/src/drivers/antigravity/config.ts +2 -0
  130. package/src/drivers/antigravity/runtime.ts +8 -2
  131. package/src/drivers/claude-code/index.ts +112 -221
  132. package/src/drivers/claude-code/isolation.ts +228 -0
  133. package/src/drivers/codex/config.ts +2 -0
  134. package/src/drivers/codex/index.ts +71 -31
  135. package/src/drivers/copilot/config.ts +2 -0
  136. package/src/drivers/copilot/index.ts +2 -1
  137. package/src/drivers/cursor/config.ts +2 -0
  138. package/src/drivers/cursor/index.ts +2 -1
  139. package/src/drivers/grok-build/config.ts +2 -0
  140. package/src/drivers/grok-build/index.ts +2 -1
  141. package/src/drivers/subprocess/index.ts +5 -2
  142. package/src/orchestrator/artifact-origin.ts +50 -0
  143. package/src/orchestrator/experiment-corpus.ts +10 -7
  144. package/src/orchestrator/experiment-identity.ts +16 -13
  145. package/src/orchestrator/fixture-identity.ts +9 -1
  146. package/src/orchestrator/orchestrator.ts +12 -6
  147. package/src/orchestrator/run-execution.ts +21 -4
  148. package/lib/drivers/shared/secure-copy.d.ts.map +0 -1
  149. package/lib/drivers/shared/secure-copy.js.map +0 -1
  150. /package/lib/{drivers/shared → core}/secure-copy.d.ts +0 -0
  151. /package/lib/{drivers/shared → core}/secure-copy.js +0 -0
  152. /package/src/{drivers/shared → core}/secure-copy.ts +0 -0
@@ -5,6 +5,7 @@ import { contentHash, type FixturesRef, valueHash } from "../core/index.js";
5
5
  export type FixtureIdentity = {
6
6
  rootDir: string;
7
7
  hash: string;
8
+ fileHashes: ReadonlyMap<string, string>;
8
9
  };
9
10
 
10
11
  const fixtureEntries = async (
@@ -63,5 +64,12 @@ export const fixtureIdentity = async (
63
64
  if (metadata.isSymbolicLink() || !metadata.isDirectory()) {
64
65
  throw new Error(`fixtures: expected a real directory: ${rootDir}`);
65
66
  }
66
- return { rootDir, hash: valueHash(await fixtureEntries(rootDir)) };
67
+ const entries = await fixtureEntries(rootDir);
68
+ return {
69
+ rootDir,
70
+ hash: valueHash(entries),
71
+ fileHashes: new Map(
72
+ entries.flatMap((entry) => (entry.hash === undefined ? [] : [[entry.path, entry.hash]])),
73
+ ),
74
+ };
67
75
  };
@@ -358,13 +358,19 @@ export class Orchestrator {
358
358
  registry,
359
359
  );
360
360
 
361
- const driverRef = resolveDriverReference(evalCase, this.defaultDriver, request.driver);
361
+ const driverRef = bindSubjectRoot(
362
+ resolveDriverReference(evalCase, this.defaultDriver, request.driver),
363
+ request.subjectRoot,
364
+ );
362
365
  const driverName = driverNameOf(driverRef);
363
- const answererRef = resolveAnswererReference(
364
- evalCase,
365
- this.defaultAnswerer,
366
- this.harness,
367
- request.answererOverride,
366
+ const answererRef = bindSubjectRoot(
367
+ resolveAnswererReference(
368
+ evalCase,
369
+ this.defaultAnswerer,
370
+ this.harness,
371
+ request.answererOverride,
372
+ ),
373
+ request.subjectRoot,
368
374
  );
369
375
  const answererName = answererNameOf(answererRef);
370
376
 
@@ -12,6 +12,7 @@ import {
12
12
  type AnswerHistoryEntry,
13
13
  type Artifact,
14
14
  actionTiming,
15
+ bindRunExecutionWorkspace,
15
16
  type EvalCase,
16
17
  emptyUsage,
17
18
  type FixturesRef,
@@ -38,6 +39,7 @@ import {
38
39
  TokenUsageSchema,
39
40
  valueHash,
40
41
  } from "../core/index.js";
42
+ import { identifyArtifactOrigins } from "./artifact-origin.js";
41
43
  import {
42
44
  createDriverSession,
43
45
  type DriverSession,
@@ -115,7 +117,9 @@ const readAnswererUsage = (answerer: Answerer): TokenUsage =>
115
117
  const stageFixtures = async (
116
118
  ref: FixturesRef | undefined,
117
119
  options: { fixturesRoot?: string; casePath: string; artifactsDir: string },
118
- ): Promise<{ fixtures: ResolvedFixtures; hash: string } | undefined> => {
120
+ ): Promise<
121
+ { fixtures: ResolvedFixtures; hash: string; fileHashes: ReadonlyMap<string, string> } | undefined
122
+ > => {
119
123
  if (!ref) return undefined;
120
124
  const path = typeof ref === "string" ? ref : ref.path;
121
125
  if (!isAbsolute(path) && !options.fixturesRoot && options.casePath === INLINE_CASE_PATH) {
@@ -130,7 +134,11 @@ const stageFixtures = async (
130
134
  if (staged.hash !== source.hash) {
131
135
  throw new Error(`fixtures: tree changed while staging: ${source.rootDir}`);
132
136
  }
133
- return { fixtures: { rootDir: source.rootDir }, hash: staged.hash };
137
+ return {
138
+ fixtures: { rootDir: source.rootDir },
139
+ hash: staged.hash,
140
+ fileHashes: staged.fileHashes,
141
+ };
134
142
  };
135
143
 
136
144
  export const runDirOfError = (error: unknown): string | null =>
@@ -308,6 +316,7 @@ class RunExecution implements RunLifecycleEffects<RunResult> {
308
316
  private loop: DriverSession | undefined;
309
317
  private ready: ReadyState | undefined;
310
318
  private fixturesHash: string | undefined;
319
+ private fixtureFileHashes: ReadonlyMap<string, string> = new Map();
311
320
  private startAttempted = false;
312
321
  private loopOutcome: DriverSessionOutcome | undefined;
313
322
  private collection: Collection = { artifacts: [] };
@@ -378,6 +387,7 @@ class RunExecution implements RunLifecycleEffects<RunResult> {
378
387
  artifactsDir: this.workspace.path,
379
388
  });
380
389
  this.fixturesHash = staged?.hash;
390
+ this.fixtureFileHashes = staged?.fileHashes ?? new Map();
381
391
  if (request.abortSignal?.aborted) return;
382
392
 
383
393
  this.lifecycle("start-driver");
@@ -437,6 +447,8 @@ class RunExecution implements RunLifecycleEffects<RunResult> {
437
447
  this.metadata = completed.metadata;
438
448
  this.usage = completed.usage;
439
449
  this.run = completed.run;
450
+ const executionWorkspace = await this.args.driver.verificationWorkspace?.();
451
+ if (executionWorkspace) bindRunExecutionWorkspace(this.run, executionWorkspace);
440
452
  await writeFrozenCase(this.runDir.path, this.args.authoredCase, this.args.casePath);
441
453
  await this.runDir.writeJson("run.json", completed.metadata);
442
454
  await this.runDir.writeJson("artifacts.json", this.collection.artifacts);
@@ -577,9 +589,14 @@ class RunExecution implements RunLifecycleEffects<RunResult> {
577
589
  try {
578
590
  await this.args.driver.quiesce?.();
579
591
  const artifacts = await this.args.driver.collect();
592
+ const archived =
593
+ (await this.workspace?.archive(this.runDir.artifactsDir, artifacts)) ?? artifacts;
580
594
  return {
581
- artifacts:
582
- (await this.workspace?.archive(this.runDir.artifactsDir, artifacts)) ?? artifacts,
595
+ artifacts: await identifyArtifactOrigins(
596
+ this.runDir.path,
597
+ archived,
598
+ this.fixtureFileHashes,
599
+ ),
583
600
  };
584
601
  } catch (error) {
585
602
  const reason = errorMessage(error);
@@ -1 +0,0 @@
1
- {"version":3,"file":"secure-copy.d.ts","sourceRoot":"","sources":["../../../src/drivers/shared/secure-copy.ts"],"names":[],"mappings":"AASA,eAAO,MAAM,uBAAuB,eACtB,MAAM,cACN,MAAM,cACN,MAAM,KACjB,OAAO,CAAC,IAAI,CA0Bd,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"secure-copy.js","sourceRoot":"","sources":["../../../src/drivers/shared/secure-copy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAC1E,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAEzC,MAAM,QAAQ,GAAG,CAAC,MAAc,EAAE,KAAa,EAAW,EAAE;IAC1D,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC7B,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;IAC5B,OAAO,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,IAAI,GAAG,GAAG,EAAE,CAAC,CAAC;AAC3D,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,uBAAuB,GAAG,KAAK,EAC1C,UAAkB,EAClB,UAAkB,EAClB,UAAkB,EACH,EAAE;IACjB,IAAI,CAAC,MAAM,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC;QAC/C,MAAM,IAAI,KAAK,CAAC,iCAAiC,UAAU,EAAE,CAAC,CAAC;IACjE,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,QAAQ,GAAG,CAAC,SAAS,CAAC,UAAU,IAAI,CAAC,CAAC,CAAC,CAAC;IACxF,IAAI,MAAoD,CAAC;IACzD,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;QACvC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,mCAAmC,UAAU,EAAE,CAAC,CAAC;QAC3F,MAAM,cAAc,GAAG,MAAM,QAAQ,CAAC,UAAU,CAAC,CAAC;QAClD,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,cAAc,CAAC,EAAE,CAAC;YAC1C,MAAM,IAAI,KAAK,CAAC,qDAAqD,UAAU,EAAE,CAAC,CAAC;QACrF,CAAC;QACD,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,CAAC;QAChD,IACE,CAAC,YAAY,CAAC,MAAM,EAAE;YACtB,YAAY,CAAC,GAAG,KAAK,UAAU,CAAC,GAAG;YACnC,YAAY,CAAC,GAAG,KAAK,UAAU,CAAC,GAAG,EACnC,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,2CAA2C,UAAU,EAAE,CAAC,CAAC;QAC3E,CAAC;QACD,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,UAAU,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC;QAC/D,MAAM,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,gBAAgB,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;IACxE,CAAC;YAAS,CAAC;QACT,MAAM,OAAO,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAClF,CAAC;AACH,CAAC,CAAC"}
File without changes
File without changes
File without changes