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,273 @@
1
+ #!/usr/bin/env node
2
+ type CliArgs = {
3
+ config?: string | boolean;
4
+ out?: string | boolean;
5
+ platform?: string | boolean;
6
+ root?: string | boolean;
7
+ [key: string]: string | boolean | undefined;
8
+ };
9
+ type ProjectValidationPlan = {
10
+ healthStatus: string;
11
+ platform: string;
12
+ runId: string;
13
+ scenarioId: string;
14
+ scenarioPath: string;
15
+ };
16
+ type ProjectValidationAppHelper = {
17
+ missingExports: string[];
18
+ path: string;
19
+ status: 'present' | 'missing' | 'incomplete';
20
+ };
21
+ type ProjectValidationConfig = {
22
+ customDrivers: string[];
23
+ externalTargetDrivers: string[];
24
+ invalidFields: string[];
25
+ missingFields: string[];
26
+ missingSupportedDrivers: string[];
27
+ packageSupportedDrivers: string[];
28
+ path: string;
29
+ status: 'present' | 'missing' | 'incomplete';
30
+ supportedDrivers: string[];
31
+ };
32
+ type ProjectValidationScripts = {
33
+ invalidScripts: string[];
34
+ invalidPackageJsonScripts: string[];
35
+ missingPaths: string[];
36
+ missingPackageJsonScripts: string[];
37
+ mismatchedPackageJsonScripts: string[];
38
+ missingScripts: string[];
39
+ packageJsonPath: string;
40
+ packageJsonStatus: 'present' | 'missing' | 'incomplete';
41
+ path: string;
42
+ scriptNames: string[];
43
+ status: 'present' | 'missing' | 'incomplete';
44
+ unknownCommands: string[];
45
+ };
46
+ type ProjectValidationGitignore = {
47
+ configArtifactPatterns: string[];
48
+ missingConfigArtifactPatterns: string[];
49
+ missingPatterns: string[];
50
+ path: string;
51
+ requiredPatterns: string[];
52
+ snippetPath: string;
53
+ status: 'present' | 'missing' | 'incomplete';
54
+ };
55
+ type ProjectValidationNextAction = {
56
+ code: string;
57
+ message: string;
58
+ severity: 'error' | 'warning';
59
+ target: string;
60
+ };
61
+ type ProjectValidationResult = {
62
+ appHelper: ProjectValidationAppHelper;
63
+ config: ProjectValidationConfig;
64
+ configPath: string;
65
+ errors: string[];
66
+ gitignore: ProjectValidationGitignore;
67
+ nextActions: ProjectValidationNextAction[];
68
+ platform: string;
69
+ plans: ProjectValidationPlan[];
70
+ providerPaths: string[];
71
+ rootDir: string;
72
+ runnerPath: string;
73
+ scripts: ProjectValidationScripts;
74
+ scenarioCandidateDirectories: string[];
75
+ scenarioPaths: string[];
76
+ status: 'passed' | 'failed';
77
+ warnings: string[];
78
+ };
79
+ /**
80
+ * Prints CLI usage.
81
+ *
82
+ * @param {{write: (message: string) => unknown}} [output]
83
+ * @returns {void}
84
+ */
85
+ declare function usage(output?: {
86
+ write: (message: string) => unknown;
87
+ }): void;
88
+ /**
89
+ * Parses the small flag set for the project validator.
90
+ *
91
+ * @param {string[]} argv
92
+ * @returns {CliArgs}
93
+ */
94
+ declare function parseArgs(argv: string[]): CliArgs;
95
+ /**
96
+ * Resolves scenario directories from project config plus the scaffold default.
97
+ *
98
+ * @param {{configPath: string, requestedPlatform: string, rootDir: string}} options
99
+ * @returns {string[]}
100
+ */
101
+ declare function resolveScenarioDirectories({ configPath, requestedPlatform, rootDir, }: {
102
+ configPath: string;
103
+ requestedPlatform: string;
104
+ rootDir: string;
105
+ }): string[];
106
+ /**
107
+ * Lists scenario JSON files from resolved scenario directories.
108
+ *
109
+ * @param {string[]} scenarioCandidateDirectories
110
+ * @returns {string[]}
111
+ */
112
+ declare function listScenarioFilesFromDirectories(scenarioCandidateDirectories: string[]): string[];
113
+ /**
114
+ * Lists scenario JSON files from configured scenario directories.
115
+ *
116
+ * @param {{configPath: string, requestedPlatform: string, rootDir: string}} options
117
+ * @returns {string[]}
118
+ */
119
+ declare function listScenarioFiles({ configPath, requestedPlatform, rootDir, }: {
120
+ configPath: string;
121
+ requestedPlatform: string;
122
+ rootDir: string;
123
+ }): string[];
124
+ /**
125
+ * Resolves platforms that should be validated for one scenario.
126
+ *
127
+ * @param {{requestedPlatform: string, scenario: Record<string, unknown>}} options
128
+ * @returns {string[]}
129
+ */
130
+ declare function resolvePlatforms({ requestedPlatform, scenario, }: {
131
+ requestedPlatform: string;
132
+ scenario: Record<string, unknown>;
133
+ }): string[];
134
+ /**
135
+ * Builds a stable run id for one project-validation plan check.
136
+ *
137
+ * @param {{platform: string, scenarioId: string}} options
138
+ * @returns {string}
139
+ */
140
+ declare function buildValidationRunId({ platform, scenarioId, }: {
141
+ platform: string;
142
+ scenarioId: string;
143
+ }): string;
144
+ /**
145
+ * Validates that the generated app helper is present and still exposes the expected integration API.
146
+ *
147
+ * @param {string} rootDir
148
+ * @returns {ProjectValidationAppHelper}
149
+ */
150
+ declare function validateAppHelper(rootDir: string): ProjectValidationAppHelper;
151
+ /**
152
+ * Finds known placeholder values in the initialized project config.
153
+ *
154
+ * @param {Record<string, unknown>} config
155
+ * @returns {string[]}
156
+ */
157
+ declare function validateConfigPlaceholders(config: Record<string, unknown>): string[];
158
+ /**
159
+ * Validates required project config fields for live profile execution.
160
+ *
161
+ * @param {{configPath: string, requestedPlatform: string}} options
162
+ * @returns {ProjectValidationConfig}
163
+ */
164
+ declare function validateProjectConfig({ configPath, requestedPlatform, }: {
165
+ configPath: string;
166
+ requestedPlatform: string;
167
+ }): ProjectValidationConfig;
168
+ /**
169
+ * Validates that runtime proof artifacts are ignored by the consuming app.
170
+ *
171
+ * @param {string} rootDir
172
+ * @param {string} [configPath]
173
+ * @returns {ProjectValidationGitignore}
174
+ */
175
+ declare function validateGitignore(rootDir: string, configPath?: string): ProjectValidationGitignore;
176
+ /**
177
+ * Validates one generated package-script snippet against its expected lifecycle shape.
178
+ *
179
+ * @param {{command: string, scriptName: string}} options
180
+ * @returns {string | null}
181
+ */
182
+ declare function validatePackageScriptShape({ command, scriptName, }: {
183
+ command: string;
184
+ scriptName: string;
185
+ }): string | null;
186
+ /**
187
+ * Validates the generated package-script snippets against installed CLI bins and project-local inputs.
188
+ *
189
+ * @param {{packageRoot?: string, rootDir: string}} options
190
+ * @returns {ProjectValidationScripts}
191
+ */
192
+ declare function validatePackageScripts({ packageRoot, rootDir, }: {
193
+ packageRoot?: string;
194
+ rootDir: string;
195
+ }): ProjectValidationScripts;
196
+ /**
197
+ * Validates that generated snippets were intentionally merged into app package scripts.
198
+ *
199
+ * The generated snippet file owns canonical command shape. This check only
200
+ * proves the app exposes runnable script names so teams do not leave the
201
+ * snippets stranded under `asl/`.
202
+ *
203
+ * Direct installed-bin scripts are also compared against the generated
204
+ * snippets, catching stale merges while allowing source-tree wrappers.
205
+ *
206
+ * @param {{expectedScripts?: Record<string, unknown>, packageJsonPath: string}} options
207
+ * @returns {{invalidPackageJsonScripts: string[], missingPackageJsonScripts: string[], mismatchedPackageJsonScripts: string[], packageJsonStatus: 'present' | 'missing' | 'incomplete'}}
208
+ */
209
+ declare function validatePackageJsonScripts({ expectedScripts, packageJsonPath, }: {
210
+ expectedScripts?: Record<string, unknown>;
211
+ packageJsonPath: string;
212
+ }): {
213
+ invalidPackageJsonScripts: string[];
214
+ missingPackageJsonScripts: string[];
215
+ mismatchedPackageJsonScripts: string[];
216
+ packageJsonStatus: 'present' | 'missing' | 'incomplete';
217
+ };
218
+ /**
219
+ * Validates project-local script files referenced by evidence-provider commands.
220
+ *
221
+ * @param {{providerPaths: string[]}} options
222
+ * @returns {string[]}
223
+ */
224
+ declare function validateProviderCommandReferences({ providerPaths, }: {
225
+ providerPaths: string[];
226
+ }): string[];
227
+ /**
228
+ * Builds stable agent-readable next actions from project validation facts.
229
+ *
230
+ * @param {{appHelper: ProjectValidationAppHelper, config: ProjectValidationConfig, configPath: string, gitignore: ProjectValidationGitignore, plans: ProjectValidationPlan[], providerCommandMissingPaths: string[], requestedPlatform: string, rootDir: string, runnerPath: string, scenarioPaths: string[], scripts: ProjectValidationScripts, warnings: string[]}} options
231
+ * @returns {ProjectValidationNextAction[]}
232
+ */
233
+ declare function buildNextActions({ appHelper, config, configPath, gitignore, plans, providerCommandMissingPaths, requestedPlatform, rootDir, runnerPath, scenarioPaths, scripts, warnings, }: {
234
+ appHelper: ProjectValidationAppHelper;
235
+ config: ProjectValidationConfig;
236
+ configPath: string;
237
+ gitignore: ProjectValidationGitignore;
238
+ plans: ProjectValidationPlan[];
239
+ providerCommandMissingPaths: string[];
240
+ requestedPlatform: string;
241
+ rootDir: string;
242
+ runnerPath: string;
243
+ scenarioPaths: string[];
244
+ scripts: ProjectValidationScripts;
245
+ warnings: string[];
246
+ }): ProjectValidationNextAction[];
247
+ /**
248
+ * Validates a generated or hand-authored Agent Scenario Loop project.
249
+ *
250
+ * @param {{rootDir?: string, configPath?: string, platform?: string}} [options]
251
+ * @returns {Promise<ProjectValidationResult>}
252
+ */
253
+ declare function validateProject(options?: {
254
+ configPath?: string;
255
+ packageRoot?: string;
256
+ rootDir?: string;
257
+ platform?: string;
258
+ }): Promise<ProjectValidationResult>;
259
+ /**
260
+ * Formats project validation output for humans and agents.
261
+ *
262
+ * @param {ProjectValidationResult} result
263
+ * @returns {string}
264
+ */
265
+ declare function formatResult(result: ProjectValidationResult): string;
266
+ /**
267
+ * Runs the project validation CLI.
268
+ *
269
+ * @returns {Promise<void>}
270
+ */
271
+ declare function main(): Promise<void>;
272
+ export { buildValidationRunId, formatResult, listScenarioFiles, listScenarioFilesFromDirectories, main, parseArgs, resolveScenarioDirectories, resolvePlatforms, usage, buildNextActions, validateConfigPlaceholders, validateProjectConfig, validateGitignore, validatePackageJsonScripts, validateProject, validateAppHelper, validatePackageScriptShape, validatePackageScripts, validateProviderCommandReferences, };
273
+ export type { CliArgs, ProjectValidationAppHelper, ProjectValidationConfig, ProjectValidationGitignore, ProjectValidationNextAction, ProjectValidationPlan, ProjectValidationResult, ProjectValidationScripts, };