agent-scenario-loop 0.1.0

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 (170) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +119 -0
  3. package/app/profile-session.ts +812 -0
  4. package/core/config-template.json +41 -0
  5. package/dist/core/agent-summary.d.ts +15 -0
  6. package/dist/core/agent-summary.js +177 -0
  7. package/dist/core/artifact-contract.d.ts +151 -0
  8. package/dist/core/artifact-contract.js +897 -0
  9. package/dist/core/artifact-layout.d.ts +56 -0
  10. package/dist/core/artifact-layout.js +61 -0
  11. package/dist/core/artifact-writer.d.ts +44 -0
  12. package/dist/core/artifact-writer.js +55 -0
  13. package/dist/core/comparison.d.ts +133 -0
  14. package/dist/core/comparison.js +294 -0
  15. package/dist/core/evidence-interpreter.d.ts +28 -0
  16. package/dist/core/evidence-interpreter.js +69 -0
  17. package/dist/core/execution-plan.d.ts +44 -0
  18. package/dist/core/execution-plan.js +95 -0
  19. package/dist/core/planner.d.ts +132 -0
  20. package/dist/core/planner.js +812 -0
  21. package/dist/core/ports.d.ts +198 -0
  22. package/dist/core/ports.js +146 -0
  23. package/dist/core/run-index.d.ts +62 -0
  24. package/dist/core/run-index.js +143 -0
  25. package/dist/core/schema-validator.d.ts +86 -0
  26. package/dist/core/schema-validator.js +407 -0
  27. package/dist/index.d.ts +11 -0
  28. package/dist/index.js +27 -0
  29. package/dist/runner/agent-device-driver.d.ts +126 -0
  30. package/dist/runner/agent-device-driver.js +168 -0
  31. package/dist/runner/agent-device.d.ts +295 -0
  32. package/dist/runner/agent-device.js +1271 -0
  33. package/dist/runner/android-adb-driver.d.ts +175 -0
  34. package/dist/runner/android-adb-driver.js +399 -0
  35. package/dist/runner/android-adb.d.ts +254 -0
  36. package/dist/runner/android-adb.js +1618 -0
  37. package/dist/runner/argent-driver.d.ts +183 -0
  38. package/dist/runner/argent-driver.js +297 -0
  39. package/dist/runner/argent.d.ts +349 -0
  40. package/dist/runner/argent.js +1211 -0
  41. package/dist/runner/check-plan.d.ts +45 -0
  42. package/dist/runner/check-plan.js +210 -0
  43. package/dist/runner/cli.d.ts +20 -0
  44. package/dist/runner/cli.js +23 -0
  45. package/dist/runner/compare-latest.d.ts +99 -0
  46. package/dist/runner/compare-latest.js +233 -0
  47. package/dist/runner/compare.d.ts +58 -0
  48. package/dist/runner/compare.js +157 -0
  49. package/dist/runner/demo-loop.d.ts +45 -0
  50. package/dist/runner/demo-loop.js +170 -0
  51. package/dist/runner/example-android-live.d.ts +137 -0
  52. package/dist/runner/example-android-live.js +454 -0
  53. package/dist/runner/example-ios-live.d.ts +137 -0
  54. package/dist/runner/example-ios-live.js +471 -0
  55. package/dist/runner/host-doctor.d.ts +131 -0
  56. package/dist/runner/host-doctor.js +628 -0
  57. package/dist/runner/init-project.d.ts +88 -0
  58. package/dist/runner/init-project.js +263 -0
  59. package/dist/runner/ios-simctl-driver.d.ts +69 -0
  60. package/dist/runner/ios-simctl-driver.js +97 -0
  61. package/dist/runner/ios-simctl.d.ts +254 -0
  62. package/dist/runner/ios-simctl.js +1415 -0
  63. package/dist/runner/live-android.d.ts +137 -0
  64. package/dist/runner/live-android.js +539 -0
  65. package/dist/runner/live-comparison.d.ts +67 -0
  66. package/dist/runner/live-comparison.js +147 -0
  67. package/dist/runner/live-ios.d.ts +137 -0
  68. package/dist/runner/live-ios.js +460 -0
  69. package/dist/runner/live-proof-summary.d.ts +263 -0
  70. package/dist/runner/live-proof-summary.js +465 -0
  71. package/dist/runner/live-proof.d.ts +467 -0
  72. package/dist/runner/live-proof.js +920 -0
  73. package/dist/runner/local-env.d.ts +64 -0
  74. package/dist/runner/local-env.js +155 -0
  75. package/dist/runner/profile-android.d.ts +82 -0
  76. package/dist/runner/profile-android.js +671 -0
  77. package/dist/runner/profile-ios.d.ts +108 -0
  78. package/dist/runner/profile-ios.js +532 -0
  79. package/dist/runner/profile-mobile.d.ts +254 -0
  80. package/dist/runner/profile-mobile.js +1307 -0
  81. package/dist/runner/validate-project.d.ts +273 -0
  82. package/dist/runner/validate-project.js +1501 -0
  83. package/docs/adapters.md +145 -0
  84. package/docs/api.md +94 -0
  85. package/docs/authoring.md +196 -0
  86. package/docs/concepts.md +136 -0
  87. package/docs/consumer-rehearsal.md +115 -0
  88. package/docs/contracts.md +267 -0
  89. package/docs/live-proofs.md +270 -0
  90. package/docs/principles.md +46 -0
  91. package/examples/event-logs/app-startup-baseline.log +4 -0
  92. package/examples/event-logs/app-startup-current.log +4 -0
  93. package/examples/minimal-app/README.md +70 -0
  94. package/examples/mobile-app/README.md +302 -0
  95. package/examples/mobile-app/app.json +22 -0
  96. package/examples/mobile-app/asl/package-scripts.json +32 -0
  97. package/examples/mobile-app/asl.config.json +37 -0
  98. package/examples/mobile-app/event-logs/android-app-startup.log +4 -0
  99. package/examples/mobile-app/event-logs/android-open-close-cycle.log +12 -0
  100. package/examples/mobile-app/event-logs/android-scroll-settle.log +12 -0
  101. package/examples/mobile-app/event-logs/app-startup.log +4 -0
  102. package/examples/mobile-app/event-logs/open-close-cycle.log +12 -0
  103. package/examples/mobile-app/event-logs/scroll-settle.log +12 -0
  104. package/examples/mobile-app/index.ts +20 -0
  105. package/examples/mobile-app/metro.config.js +20 -0
  106. package/examples/mobile-app/package.json +62 -0
  107. package/examples/mobile-app/patches/expo-modules-jsi@56.0.10.patch +19 -0
  108. package/examples/mobile-app/plugins/with-ios-build-compat.js +271 -0
  109. package/examples/mobile-app/pnpm-lock.yaml +4440 -0
  110. package/examples/mobile-app/runner-manifests/evidence-provider.json +79 -0
  111. package/examples/mobile-app/runner-manifests/primary-runner.json +19 -0
  112. package/examples/mobile-app/scenarios/android/app-startup-video.json +73 -0
  113. package/examples/mobile-app/scenarios/android/app-startup.json +44 -0
  114. package/examples/mobile-app/scenarios/android/open-close-cycle.json +54 -0
  115. package/examples/mobile-app/scenarios/android/scroll-settle.json +49 -0
  116. package/examples/mobile-app/scenarios/ios/app-startup.json +44 -0
  117. package/examples/mobile-app/scenarios/ios/open-close-cycle.json +54 -0
  118. package/examples/mobile-app/scenarios/ios/scroll-settle.json +49 -0
  119. package/examples/mobile-app/scenarios/mobile/app-startup.json +91 -0
  120. package/examples/mobile-app/scenarios/mobile/open-close-cycle.json +160 -0
  121. package/examples/mobile-app/scenarios/mobile/scroll-settle.json +148 -0
  122. package/examples/mobile-app/scripts/asl-capture-accessibility-provider.mjs +112 -0
  123. package/examples/mobile-app/scripts/asl-capture-profiler-provider.mjs +127 -0
  124. package/examples/mobile-app/src/devtools/profile-session.ts +7 -0
  125. package/examples/mobile-app/src/example-screen.tsx +322 -0
  126. package/examples/mobile-app/tsconfig.json +16 -0
  127. package/examples/mobile-app/tsconfig.typecheck.json +13 -0
  128. package/examples/runners/README.md +44 -0
  129. package/examples/runners/adb-android.json +25 -0
  130. package/examples/runners/agent-device-android.json +27 -0
  131. package/examples/runners/agent-device-ios.json +27 -0
  132. package/examples/runners/argent-android.json +32 -0
  133. package/examples/runners/argent-ios.json +32 -0
  134. package/examples/runners/argent-react-profiler-provider.json +15 -0
  135. package/examples/runners/axe-accessibility-provider.json +24 -0
  136. package/examples/runners/manual-log-ingest.json +9 -0
  137. package/examples/runners/rozenite-profiler-provider.json +9 -0
  138. package/examples/runners/script-accessibility-provider.json +24 -0
  139. package/examples/runners/script-memory-provider.json +24 -0
  140. package/examples/runners/script-network-provider.json +24 -0
  141. package/examples/runners/script-profiler-provider.json +30 -0
  142. package/examples/runners/xcodebuildmcp-ios.json +29 -0
  143. package/examples/scenarios/ios/app-startup.json +28 -0
  144. package/examples/scenarios/ios/open-close-cycle.json +35 -0
  145. package/examples/scenarios/mobile/app-startup.json +72 -0
  146. package/examples/scenarios/mobile/media-open-close.json +141 -0
  147. package/examples/scenarios/mobile/open-close-cycle.json +135 -0
  148. package/examples/scenarios/mobile/scroll-settle.json +106 -0
  149. package/package.json +240 -0
  150. package/schemas/budget-verdict.schema.json +115 -0
  151. package/schemas/causal-run.schema.json +279 -0
  152. package/schemas/comparison.schema.json +196 -0
  153. package/schemas/health.schema.json +108 -0
  154. package/schemas/live-proof-set.schema.json +195 -0
  155. package/schemas/live-proof.schema.json +413 -0
  156. package/schemas/manifest.schema.json +204 -0
  157. package/schemas/metrics.schema.json +137 -0
  158. package/schemas/project-validation.schema.json +343 -0
  159. package/schemas/runner-capabilities.schema.json +217 -0
  160. package/schemas/scenario.schema.json +400 -0
  161. package/schemas/verdict.schema.json +88 -0
  162. package/templates/evidence-provider.json +83 -0
  163. package/templates/gitignore-snippet +9 -0
  164. package/templates/integration-readme.md +125 -0
  165. package/templates/mobile-scenario.json +133 -0
  166. package/templates/package-scripts.json +32 -0
  167. package/templates/primary-runner.json +19 -0
  168. package/templates/project.config.json +37 -0
  169. package/templates/scripts/asl-capture-accessibility-provider.mjs +112 -0
  170. package/templates/scripts/asl-capture-profiler-provider.mjs +127 -0
@@ -0,0 +1,263 @@
1
+ type LiveProofPlatform = 'android' | 'ios';
2
+ type LiveProofProfilePointer = {
3
+ healthStatus?: string;
4
+ label: string;
5
+ runDir: string;
6
+ runId: string;
7
+ scenarioId: string;
8
+ verdictStatus?: string;
9
+ };
10
+ type LiveProofInteractionProofPointer = {
11
+ captures?: LiveProofInteractionProofCaptures;
12
+ healthStatus?: string;
13
+ label: string;
14
+ runDir: string;
15
+ runId: string;
16
+ runnerId: string;
17
+ scenarioId: string;
18
+ warnings?: LiveProofInteractionProofWarnings;
19
+ verdictStatus?: string;
20
+ };
21
+ type LiveProofSkippedInteractionProofPointer = {
22
+ label: string;
23
+ nextAction: {
24
+ code: string;
25
+ summary: string;
26
+ };
27
+ reason: string;
28
+ runId: string;
29
+ runnerId: string;
30
+ scenarioId: string;
31
+ };
32
+ type LiveProofInteractionProofCaptures = {
33
+ screenshots: string[];
34
+ };
35
+ type LiveProofInteractionProofWarning = {
36
+ code: string;
37
+ message: string;
38
+ name: string;
39
+ nextAction?: {
40
+ code: string;
41
+ summary: string;
42
+ };
43
+ };
44
+ type LiveProofInteractionProofWarnings = {
45
+ checks: LiveProofInteractionProofWarning[];
46
+ count: number;
47
+ };
48
+ type LiveProofComparisonPointer = {
49
+ baselineDir: string | null;
50
+ comparisonDir: string | null;
51
+ label: string;
52
+ metricSummary?: LiveProofComparisonMetricSummary;
53
+ reason: string | null;
54
+ runId: string;
55
+ scenarioId: string;
56
+ status: 'better' | 'worse' | 'unchanged' | 'mixed' | 'inconclusive' | 'skipped';
57
+ summaryPath: string | null;
58
+ };
59
+ type LiveProofComparisonMetricStatus = 'better' | 'worse' | 'unchanged' | 'inconclusive';
60
+ type LiveProofComparisonMetricSummary = {
61
+ counts: Record<LiveProofComparisonMetricStatus, number>;
62
+ notableMetrics: Array<{
63
+ baseline: number | boolean | null;
64
+ current: number | boolean | null;
65
+ delta: number | null;
66
+ name: string;
67
+ status: Exclude<LiveProofComparisonMetricStatus, 'unchanged'>;
68
+ unit: string;
69
+ }>;
70
+ };
71
+ type LiveProofArtifact = {
72
+ comparisons: LiveProofComparisonPointer[];
73
+ comparisonCounts: LiveProofComparisonCounts;
74
+ comparisonStatus: LiveProofComparisonStatus;
75
+ nextAction: LiveProofNextAction;
76
+ outputDir: string;
77
+ platform: LiveProofPlatform;
78
+ interactionProofs?: Array<LiveProofInteractionProofPointer & {
79
+ summaryPath: string;
80
+ }>;
81
+ skippedInteractionProofs?: LiveProofSkippedInteractionProofPointer[];
82
+ preflight: {
83
+ healthStatus: string;
84
+ runDir: string;
85
+ runId: string;
86
+ summaryPath: string;
87
+ verdictStatus: string;
88
+ };
89
+ profiles: Array<LiveProofProfilePointer & {
90
+ summaryPath: string;
91
+ }>;
92
+ runId: string;
93
+ schemaVersion: '1.0.0';
94
+ status: 'passed' | 'failed';
95
+ summary: string;
96
+ };
97
+ type LiveProofComparisonStatus = ('baseline_missing' | 'improved' | 'inconclusive' | 'mixed' | 'not_compared' | 'regressed' | 'unchanged');
98
+ type LiveProofComparisonCounts = {
99
+ better: number;
100
+ inconclusive: number;
101
+ mixed: number;
102
+ skipped: number;
103
+ unchanged: number;
104
+ worse: number;
105
+ };
106
+ type LiveProofNextAction = {
107
+ code: 'establish_baseline' | 'inspect_failed_run' | 'inspect_inconclusive' | 'inspect_mixed' | 'inspect_regressions' | 'inspect_summary';
108
+ summary: string;
109
+ };
110
+ type LiveProofSummaryResult = {
111
+ liveProofDir: string;
112
+ liveProofPath: string;
113
+ summaryPath: string;
114
+ };
115
+ type WriteLiveProofSummaryOptions = {
116
+ comparisons: LiveProofComparisonPointer[];
117
+ interactionProofs?: LiveProofInteractionProofPointer[];
118
+ outputDir: string;
119
+ platform: LiveProofPlatform;
120
+ preflightDir: string;
121
+ preflightRunId: string;
122
+ profiles: LiveProofProfilePointer[];
123
+ runId: string;
124
+ skippedInteractionProofs?: LiveProofSkippedInteractionProofPointer[];
125
+ };
126
+ /**
127
+ * Reads the profile run status fields that agents need at the aggregate entrypoint.
128
+ *
129
+ * @param {string} runDir
130
+ * @returns {{healthStatus: string, verdictStatus: string}}
131
+ */
132
+ declare function readProfileRunStatus(runDir: string): {
133
+ healthStatus: string;
134
+ verdictStatus: string;
135
+ };
136
+ /**
137
+ * Reads capture inventory from a sidecar interaction proof when available.
138
+ *
139
+ * @param {string} runDir
140
+ * @returns {LiveProofInteractionProofCaptures | null}
141
+ */
142
+ declare function readInteractionProofCaptures(runDir: string): LiveProofInteractionProofCaptures | null;
143
+ /**
144
+ * Reads warning checks from a sidecar interaction proof health artifact.
145
+ *
146
+ * @param {string} runDir
147
+ * @returns {LiveProofInteractionProofWarnings | null}
148
+ */
149
+ declare function readInteractionProofWarnings(runDir: string): LiveProofInteractionProofWarnings | null;
150
+ /**
151
+ * Builds a compact summary sentence for an aggregate live proof.
152
+ *
153
+ * @param {{platform: string, profileCount: number, comparisonCount: number}} options
154
+ * @returns {string}
155
+ */
156
+ declare function buildLiveProofSummary({ comparisonCount, comparisonStatus, failedInteractionProofCount, failedProfileCount, interactionProofCount, interactionWarningCount, platform, profileCount, skippedInteractionProofCount, status, }: {
157
+ comparisonCount: number;
158
+ comparisonStatus: LiveProofComparisonStatus;
159
+ failedInteractionProofCount?: number;
160
+ failedProfileCount?: number;
161
+ interactionProofCount?: number;
162
+ interactionWarningCount?: number;
163
+ platform: string;
164
+ profileCount: number;
165
+ skippedInteractionProofCount?: number;
166
+ status?: 'failed' | 'passed';
167
+ }): string;
168
+ /**
169
+ * Collapses per-scenario comparison results into one batch status.
170
+ *
171
+ * @param {LiveProofComparisonPointer[]} comparisons
172
+ * @returns {LiveProofComparisonStatus}
173
+ */
174
+ declare function buildLiveProofComparisonStatus(comparisons: LiveProofComparisonPointer[]): LiveProofComparisonStatus;
175
+ /**
176
+ * Counts per-scenario comparison outcomes for agent-readable aggregate summaries.
177
+ *
178
+ * @param {LiveProofComparisonPointer[]} comparisons
179
+ * @returns {LiveProofComparisonCounts}
180
+ */
181
+ declare function buildLiveProofComparisonCounts(comparisons: LiveProofComparisonPointer[]): LiveProofComparisonCounts;
182
+ /**
183
+ * Builds the next action an agent should take after reading the batch proof.
184
+ *
185
+ * @param {LiveProofComparisonStatus} comparisonStatus
186
+ * @returns {LiveProofNextAction}
187
+ */
188
+ declare function buildLiveProofNextAction(comparisonStatus: LiveProofComparisonStatus, status?: 'failed' | 'passed'): LiveProofNextAction;
189
+ /**
190
+ * Reports whether a referenced run is healthy enough to trust as proof.
191
+ *
192
+ * @param {{healthStatus?: string, verdictStatus?: string}} status
193
+ * @returns {boolean}
194
+ */
195
+ declare function isTrustedLiveRunStatus(status: {
196
+ healthStatus?: string;
197
+ verdictStatus?: string;
198
+ }): boolean;
199
+ /**
200
+ * Derives the aggregate live-proof status from the linked evidence pointers.
201
+ *
202
+ * @param {{preflight: {healthStatus?: string, verdictStatus?: string}, profiles: Array<{healthStatus?: string, verdictStatus?: string}>, interactionProofs: Array<{healthStatus?: string, verdictStatus?: string}>, skippedInteractionProofCount?: number}} options
203
+ * @returns {'failed' | 'passed'}
204
+ */
205
+ declare function buildLiveProofStatus({ interactionProofs, preflight, profiles, skippedInteractionProofCount, }: {
206
+ interactionProofs: Array<{
207
+ healthStatus?: string;
208
+ verdictStatus?: string;
209
+ }>;
210
+ preflight: {
211
+ healthStatus?: string;
212
+ verdictStatus?: string;
213
+ };
214
+ profiles: Array<{
215
+ healthStatus?: string;
216
+ verdictStatus?: string;
217
+ }>;
218
+ skippedInteractionProofCount?: number;
219
+ }): 'failed' | 'passed';
220
+ /**
221
+ * Formats compact metric counts and highlights for one comparison pointer.
222
+ *
223
+ * @param {LiveProofComparisonPointer} comparison
224
+ * @returns {string}
225
+ */
226
+ declare function formatComparisonMetricSummary(comparison: LiveProofComparisonPointer): string;
227
+ /**
228
+ * Formats sidecar capture inventory for aggregate markdown.
229
+ *
230
+ * @param {LiveProofInteractionProofPointer} proof
231
+ * @returns {string}
232
+ */
233
+ declare function formatInteractionProofCaptures(proof: LiveProofInteractionProofPointer): string;
234
+ /**
235
+ * Formats sidecar warnings for aggregate markdown.
236
+ *
237
+ * @param {LiveProofInteractionProofPointer} proof
238
+ * @returns {string}
239
+ */
240
+ declare function formatInteractionProofWarnings(proof: LiveProofInteractionProofPointer): string;
241
+ /**
242
+ * Formats sidecar warning details for aggregate markdown.
243
+ *
244
+ * @param {LiveProofInteractionProofPointer} proof
245
+ * @returns {string[]}
246
+ */
247
+ declare function formatInteractionProofWarningDetails(proof: LiveProofInteractionProofPointer): string[];
248
+ /**
249
+ * Builds markdown for the aggregate live proof entrypoint.
250
+ *
251
+ * @param {LiveProofArtifact} artifact
252
+ * @returns {string}
253
+ */
254
+ declare function buildLiveProofMarkdown(artifact: LiveProofArtifact): string;
255
+ /**
256
+ * Writes schema-validated aggregate live proof artifacts.
257
+ *
258
+ * @param {WriteLiveProofSummaryOptions} options
259
+ * @returns {Promise<LiveProofSummaryResult>}
260
+ */
261
+ declare function writeLiveProofSummary({ comparisons, interactionProofs, outputDir, platform, preflightDir, preflightRunId, profiles, runId, skippedInteractionProofs, }: WriteLiveProofSummaryOptions): Promise<LiveProofSummaryResult>;
262
+ export { buildLiveProofComparisonCounts, buildLiveProofComparisonStatus, buildLiveProofMarkdown, buildLiveProofNextAction, buildLiveProofSummary, buildLiveProofStatus, formatComparisonMetricSummary, formatInteractionProofCaptures, formatInteractionProofWarningDetails, formatInteractionProofWarnings, isTrustedLiveRunStatus, readInteractionProofCaptures, readInteractionProofWarnings, readProfileRunStatus, writeLiveProofSummary, };
263
+ export type { LiveProofArtifact, LiveProofComparisonCounts, LiveProofComparisonMetricSummary, LiveProofComparisonPointer, LiveProofComparisonStatus, LiveProofInteractionProofCaptures, LiveProofInteractionProofPointer, LiveProofNextAction, LiveProofPlatform, LiveProofProfilePointer, LiveProofSkippedInteractionProofPointer, LiveProofSummaryResult, WriteLiveProofSummaryOptions, };