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,254 @@
1
+ #!/usr/bin/env node
2
+ declare const createArtifactLayout: any;
3
+ type CliArgValue = string | boolean | Array<string | boolean>;
4
+ type CliArgs = {
5
+ 'adb-artifacts'?: string | boolean;
6
+ 'simctl-artifacts'?: string | boolean;
7
+ capture?: CliArgValue;
8
+ config?: string | boolean;
9
+ scenario?: string | boolean;
10
+ events?: string | boolean;
11
+ out?: string | boolean;
12
+ provider?: CliArgValue;
13
+ 'run-id'?: string | boolean;
14
+ signal?: CliArgValue;
15
+ [key: string]: CliArgValue | undefined;
16
+ };
17
+ type ProfileRunResult = {
18
+ runDir: string;
19
+ health: Record<string, unknown>;
20
+ verdict: Record<string, unknown>;
21
+ };
22
+ type ProfilePlatform = 'android' | 'ios';
23
+ type ProfileMobileOptions = {
24
+ comparisonLane?: string;
25
+ defaultDriver: string;
26
+ interactionDriver?: string;
27
+ platform: ProfilePlatform;
28
+ };
29
+ type CaptureEvidenceKind = 'screenshot' | 'uiTree' | 'video';
30
+ type ProviderEvidenceKind = 'accessibility' | 'logs' | 'profiler';
31
+ type SignalEvidenceKind = 'js' | 'memory' | 'network';
32
+ type EvidenceChannel = 'capture' | 'provider' | 'signal';
33
+ type EvidenceKind = CaptureEvidenceKind | ProviderEvidenceKind | SignalEvidenceKind;
34
+ type EvidenceAttachment = {
35
+ channel: EvidenceChannel;
36
+ destinationPath: string;
37
+ kind: EvidenceKind;
38
+ manifestPath: string;
39
+ sha256: string;
40
+ sourcePath: string;
41
+ sourceFileName: string;
42
+ sizeBytes: number;
43
+ };
44
+ type EvidenceAttachmentInput = {
45
+ channel: EvidenceChannel;
46
+ destinationPath: string;
47
+ kind: EvidenceKind;
48
+ manifestPath: string;
49
+ sourcePath: string;
50
+ };
51
+ type AttachedEvidence = {
52
+ attachments: EvidenceAttachment[];
53
+ captures: {
54
+ screenshots: string[];
55
+ uiTree: string | null;
56
+ video: string | null;
57
+ };
58
+ copies: EvidenceAttachment[];
59
+ signals: Record<SignalEvidenceKind, string[]>;
60
+ };
61
+ type ProviderCommandOutput = {
62
+ channel: EvidenceChannel;
63
+ kind: EvidenceKind;
64
+ path: string;
65
+ };
66
+ type ProviderCommand = {
67
+ args?: string[];
68
+ command: string;
69
+ cwd?: string;
70
+ env?: Record<string, string>;
71
+ id: string;
72
+ outputs: ProviderCommandOutput[];
73
+ phase: 'prepare' | 'startWindow' | 'capture' | 'stopWindow' | 'finalize';
74
+ };
75
+ type ProviderCommandFailure = {
76
+ commandId: string;
77
+ code?: string;
78
+ exitCode: number | null;
79
+ message?: string;
80
+ name?: string;
81
+ nextAction?: string;
82
+ nextActionCode?: string;
83
+ phase: ProviderCommand['phase'];
84
+ providerId: string;
85
+ rawPath?: string;
86
+ };
87
+ /**
88
+ * Prints CLI usage to stderr.
89
+ *
90
+ * @returns {void}
91
+ */
92
+ declare function usage({ binaryName, output, platform, }: {
93
+ binaryName: string;
94
+ output?: {
95
+ write: (message: string) => unknown;
96
+ };
97
+ platform: ProfilePlatform;
98
+ }): void;
99
+ /**
100
+ * Parses `--key value` arguments for a mobile profile runner.
101
+ *
102
+ * @param {string[]} argv
103
+ * @returns {CliArgs}
104
+ */
105
+ declare function parseArgs(argv: string[]): CliArgs;
106
+ /**
107
+ * Returns a scalar CLI flag value, ignoring repeated values for scalar-only flags.
108
+ *
109
+ * @param {string | boolean | Array<string | boolean> | undefined} value
110
+ * @returns {string | boolean | undefined}
111
+ */
112
+ declare function readScalarArg(value: CliArgValue | undefined): string | boolean | undefined;
113
+ /**
114
+ * Converts internal attachment copy plans into manifest-safe metadata.
115
+ *
116
+ * @param {EvidenceAttachment[]} attachments
117
+ * @returns {Record<string, unknown>[]}
118
+ */
119
+ declare function buildEvidenceAttachmentManifest(attachments: EvidenceAttachment[]): Record<string, unknown>[];
120
+ /**
121
+ * Validates provider artifact files and resolves their stable run destinations.
122
+ *
123
+ * @param {{args: CliArgs, layout: ReturnType<typeof createArtifactLayout>, providerInputs?: EvidenceAttachmentInput[]}} options
124
+ * @returns {Promise<AttachedEvidence>}
125
+ */
126
+ declare function resolveAttachedEvidence({ args, layout, providerInputs, }: {
127
+ args: CliArgs;
128
+ layout: ReturnType<typeof createArtifactLayout>;
129
+ providerInputs?: EvidenceAttachmentInput[];
130
+ }): Promise<AttachedEvidence>;
131
+ /**
132
+ * Builds scenario health from profile metrics.
133
+ *
134
+ * @param {{scenario: Record<string, unknown>, runId: string, metrics: Record<string, unknown>}} options
135
+ * @returns {Record<string, unknown>}
136
+ */
137
+ declare function buildProfileHealth({ scenario, runId, metrics, }: {
138
+ scenario: Record<string, any>;
139
+ runId: string;
140
+ metrics: Record<string, any>;
141
+ }): Record<string, unknown>;
142
+ /**
143
+ * Builds failed scenario health from evidence-provider command failures.
144
+ *
145
+ * @param {{failures: ProviderCommandFailure[], runId: string, scenario: Record<string, unknown>}} options
146
+ * @returns {Record<string, unknown>}
147
+ */
148
+ declare function buildProviderCommandFailureHealth({ failures, runId, scenario, }: {
149
+ failures: ProviderCommandFailure[];
150
+ runId: string;
151
+ scenario: Record<string, any>;
152
+ }): Record<string, unknown>;
153
+ /**
154
+ * Converts profile budget evaluation checks into verdict budget checks.
155
+ *
156
+ * @param {Record<string, unknown> | null | undefined} budgetEvaluation
157
+ * @returns {Record<string, unknown>[]}
158
+ */
159
+ declare function buildVerdictBudgetChecks(budgetEvaluation: Record<string, any> | null | undefined): Record<string, unknown>[];
160
+ /**
161
+ * Builds product verdict from profile metrics and budget evaluation.
162
+ *
163
+ * @param {{scenario: Record<string, unknown>, runId: string, health: Record<string, unknown>, metrics: Record<string, unknown>}} options
164
+ * @returns {Record<string, unknown>}
165
+ */
166
+ declare function buildProfileVerdict({ scenario, runId, health, metrics, }: {
167
+ scenario: Record<string, any>;
168
+ runId: string;
169
+ health: Record<string, any>;
170
+ metrics: Record<string, any>;
171
+ }): Record<string, unknown>;
172
+ /**
173
+ * Resolves the configured artifact root for a platform profile run.
174
+ *
175
+ * @param {{args: CliArgs, config: Record<string, unknown>, configPath: string, platform: ProfilePlatform}} options
176
+ * @returns {string}
177
+ */
178
+ declare function resolveArtifactRoot({ args, config, configPath, platform, }: {
179
+ args: CliArgs;
180
+ config: Record<string, any>;
181
+ configPath: string;
182
+ platform: ProfilePlatform;
183
+ }): string;
184
+ /**
185
+ * Resolves the app identifier used in profile manifests.
186
+ *
187
+ * @param {{config: Record<string, unknown>, platform: ProfilePlatform}} options
188
+ * @returns {string}
189
+ */
190
+ declare function resolveAppId({ config, platform }: {
191
+ config: Record<string, any>;
192
+ platform: ProfilePlatform;
193
+ }): string;
194
+ /**
195
+ * Resolves the interaction driver recorded in profile artifacts.
196
+ *
197
+ * @param {{config: Record<string, unknown>, options: ProfileMobileOptions, scenario: Record<string, unknown>}} options
198
+ * @returns {string}
199
+ */
200
+ declare function resolveInteractionDriver({ config, options, scenario, }: {
201
+ config: Record<string, any>;
202
+ options: ProfileMobileOptions;
203
+ scenario: Record<string, any>;
204
+ }): string;
205
+ /**
206
+ * Resolves the stable comparison lane used for historical baseline selection.
207
+ *
208
+ * @param {{args: CliArgs, options: ProfileMobileOptions, scenario: Record<string, unknown>}} options
209
+ * @returns {string | undefined}
210
+ */
211
+ declare function resolveComparisonLane({ args, options, scenario, }: {
212
+ args: CliArgs;
213
+ options: ProfileMobileOptions;
214
+ scenario: Record<string, any>;
215
+ }): string | undefined;
216
+ /**
217
+ * Resolves the profile event log source from explicit logs or prior adb artifacts.
218
+ *
219
+ * @param {{args: CliArgs, platform: ProfilePlatform}} options
220
+ * @returns {string | null}
221
+ */
222
+ declare function resolveEventLogPath({ args, platform }: {
223
+ args: CliArgs;
224
+ platform: ProfilePlatform;
225
+ }): string | null;
226
+ /**
227
+ * Creates a stable fingerprint for the scenario contract used by one run.
228
+ *
229
+ * @param {Record<string, unknown>} scenario
230
+ * @returns {string}
231
+ */
232
+ declare function hashScenarioContract(scenario: Record<string, unknown>): string;
233
+ /**
234
+ * Runs the mobile log-ingest profile artifact pipeline.
235
+ *
236
+ * @param {CliArgs} args
237
+ * @param {ProfileMobileOptions} options
238
+ * @returns {Promise<ProfileRunResult>}
239
+ */
240
+ declare function runProfileMobile(args: CliArgs, options: ProfileMobileOptions): Promise<ProfileRunResult>;
241
+ /**
242
+ * Runs a platform-specific profile CLI.
243
+ *
244
+ * @param {{argv: string[], binaryName: string, platform: ProfilePlatform, defaultDriver: string}} options
245
+ * @returns {Promise<void>}
246
+ */
247
+ declare function runProfileCli({ argv, binaryName, defaultDriver, platform, }: {
248
+ argv: string[];
249
+ binaryName: string;
250
+ defaultDriver: string;
251
+ platform: ProfilePlatform;
252
+ }): Promise<void>;
253
+ export { buildProfileHealth, buildProviderCommandFailureHealth, buildProfileVerdict, buildVerdictBudgetChecks, parseArgs, buildEvidenceAttachmentManifest, readScalarArg, resolveAppId, resolveArtifactRoot, resolveAttachedEvidence, resolveComparisonLane, resolveEventLogPath, resolveInteractionDriver, runProfileCli, runProfileMobile, hashScenarioContract, usage, };
254
+ export type { CliArgs, ProfileMobileOptions, ProfilePlatform, ProfileRunResult, };