mova_agent 0.1.1

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 (287) hide show
  1. package/README.md +94 -0
  2. package/build/scripts/check_docs.d.ts +2 -0
  3. package/build/scripts/check_docs.d.ts.map +1 -0
  4. package/build/scripts/check_docs.js +48 -0
  5. package/build/scripts/check_docs.js.map +1 -0
  6. package/build/scripts/check_schema_paths.d.ts +3 -0
  7. package/build/scripts/check_schema_paths.d.ts.map +1 -0
  8. package/build/scripts/check_schema_paths.js +15 -0
  9. package/build/scripts/check_schema_paths.js.map +1 -0
  10. package/build/scripts/check_schema_paths_dist.d.ts +3 -0
  11. package/build/scripts/check_schema_paths_dist.d.ts.map +1 -0
  12. package/build/scripts/check_schema_paths_dist.js +16 -0
  13. package/build/scripts/check_schema_paths_dist.js.map +1 -0
  14. package/build/scripts/check_structure.d.ts +2 -0
  15. package/build/scripts/check_structure.d.ts.map +1 -0
  16. package/build/scripts/check_structure.js +59 -0
  17. package/build/scripts/check_structure.js.map +1 -0
  18. package/build/scripts/debug_validate.d.ts +3 -0
  19. package/build/scripts/debug_validate.d.ts.map +1 -0
  20. package/build/scripts/debug_validate.js +39 -0
  21. package/build/scripts/debug_validate.js.map +1 -0
  22. package/build/scripts/debug_validate2.d.ts +3 -0
  23. package/build/scripts/debug_validate2.d.ts.map +1 -0
  24. package/build/scripts/debug_validate2.js +18 -0
  25. package/build/scripts/debug_validate2.js.map +1 -0
  26. package/build/scripts/debug_validate_runtime.d.ts +3 -0
  27. package/build/scripts/debug_validate_runtime.d.ts.map +1 -0
  28. package/build/scripts/debug_validate_runtime.js +39 -0
  29. package/build/scripts/debug_validate_runtime.js.map +1 -0
  30. package/build/scripts/dump_ajv_schemas.d.ts +2 -0
  31. package/build/scripts/dump_ajv_schemas.d.ts.map +1 -0
  32. package/build/scripts/dump_ajv_schemas.js +22 -0
  33. package/build/scripts/dump_ajv_schemas.js.map +1 -0
  34. package/build/scripts/dump_resolved_schema.d.ts +3 -0
  35. package/build/scripts/dump_resolved_schema.d.ts.map +1 -0
  36. package/build/scripts/dump_resolved_schema.js +22 -0
  37. package/build/scripts/dump_resolved_schema.js.map +1 -0
  38. package/build/scripts/gen_types.d.ts +2 -0
  39. package/build/scripts/gen_types.d.ts.map +1 -0
  40. package/build/scripts/gen_types.js +133 -0
  41. package/build/scripts/gen_types.js.map +1 -0
  42. package/build/scripts/inspect_validation.d.ts +3 -0
  43. package/build/scripts/inspect_validation.d.ts.map +1 -0
  44. package/build/scripts/inspect_validation.js +36 -0
  45. package/build/scripts/inspect_validation.js.map +1 -0
  46. package/build/scripts/legacy/check_errors.d.ts +3 -0
  47. package/build/scripts/legacy/check_errors.d.ts.map +1 -0
  48. package/build/scripts/legacy/check_errors.js +14 -0
  49. package/build/scripts/legacy/check_errors.js.map +1 -0
  50. package/build/scripts/legacy/compile_test.d.ts +5 -0
  51. package/build/scripts/legacy/compile_test.d.ts.map +1 -0
  52. package/build/scripts/legacy/compile_test.js +25 -0
  53. package/build/scripts/legacy/compile_test.js.map +1 -0
  54. package/build/scripts/legacy/debug_neg.d.ts +6 -0
  55. package/build/scripts/legacy/debug_neg.d.ts.map +1 -0
  56. package/build/scripts/legacy/debug_neg.js +230 -0
  57. package/build/scripts/legacy/debug_neg.js.map +1 -0
  58. package/build/scripts/legacy/debug_quality_pos.d.ts +5 -0
  59. package/build/scripts/legacy/debug_quality_pos.d.ts.map +1 -0
  60. package/build/scripts/legacy/debug_quality_pos.js +195 -0
  61. package/build/scripts/legacy/debug_quality_pos.js.map +1 -0
  62. package/build/scripts/legacy/debug_test.d.ts +1 -0
  63. package/build/scripts/legacy/debug_test.d.ts.map +1 -0
  64. package/build/scripts/legacy/debug_test.js +51 -0
  65. package/build/scripts/legacy/debug_test.js.map +1 -0
  66. package/build/scripts/legacy/hello_test.d.ts +1 -0
  67. package/build/scripts/legacy/hello_test.d.ts.map +1 -0
  68. package/build/scripts/legacy/hello_test.js +3 -0
  69. package/build/scripts/legacy/hello_test.js.map +1 -0
  70. package/build/scripts/legacy/import_test.d.ts +2 -0
  71. package/build/scripts/legacy/import_test.d.ts.map +1 -0
  72. package/build/scripts/legacy/import_test.js +4 -0
  73. package/build/scripts/legacy/import_test.js.map +1 -0
  74. package/build/scripts/legacy/quality_neg.d.ts +6 -0
  75. package/build/scripts/legacy/quality_neg.d.ts.map +1 -0
  76. package/build/scripts/legacy/quality_neg.js +362 -0
  77. package/build/scripts/legacy/quality_neg.js.map +1 -0
  78. package/build/scripts/legacy/quality_pos.d.ts +7 -0
  79. package/build/scripts/legacy/quality_pos.d.ts.map +1 -0
  80. package/build/scripts/legacy/quality_pos.js +345 -0
  81. package/build/scripts/legacy/quality_pos.js.map +1 -0
  82. package/build/scripts/legacy/simple_test.d.ts +2 -0
  83. package/build/scripts/legacy/simple_test.d.ts.map +1 -0
  84. package/build/scripts/legacy/simple_test.js +4 -0
  85. package/build/scripts/legacy/simple_test.js.map +1 -0
  86. package/build/scripts/legacy/test.d.ts +1 -0
  87. package/build/scripts/legacy/test.d.ts.map +1 -0
  88. package/build/scripts/legacy/test.js +3 -0
  89. package/build/scripts/legacy/test.js.map +1 -0
  90. package/build/scripts/legacy/test_additional_props.d.ts +6 -0
  91. package/build/scripts/legacy/test_additional_props.d.ts.map +1 -0
  92. package/build/scripts/legacy/test_additional_props.js +45 -0
  93. package/build/scripts/legacy/test_additional_props.js.map +1 -0
  94. package/build/scripts/legacy/test_ajv_validation.d.ts +2 -0
  95. package/build/scripts/legacy/test_ajv_validation.d.ts.map +1 -0
  96. package/build/scripts/legacy/test_ajv_validation.js +35 -0
  97. package/build/scripts/legacy/test_ajv_validation.js.map +1 -0
  98. package/build/scripts/legacy/test_build.d.ts +2 -0
  99. package/build/scripts/legacy/test_build.d.ts.map +1 -0
  100. package/build/scripts/legacy/test_build.js +14 -0
  101. package/build/scripts/legacy/test_build.js.map +1 -0
  102. package/build/scripts/legacy/test_direct.d.ts +3 -0
  103. package/build/scripts/legacy/test_direct.d.ts.map +1 -0
  104. package/build/scripts/legacy/test_direct.js +24 -0
  105. package/build/scripts/legacy/test_direct.js.map +1 -0
  106. package/build/scripts/legacy/test_import.d.ts +2 -0
  107. package/build/scripts/legacy/test_import.d.ts.map +1 -0
  108. package/build/scripts/legacy/test_import.js +7 -0
  109. package/build/scripts/legacy/test_import.js.map +1 -0
  110. package/build/scripts/legacy/test_mova_schemas.d.ts +2 -0
  111. package/build/scripts/legacy/test_mova_schemas.d.ts.map +1 -0
  112. package/build/scripts/legacy/test_mova_schemas.js +37 -0
  113. package/build/scripts/legacy/test_mova_schemas.js.map +1 -0
  114. package/build/scripts/legacy/test_scenario_integration.d.ts +13 -0
  115. package/build/scripts/legacy/test_scenario_integration.d.ts.map +1 -0
  116. package/build/scripts/legacy/test_scenario_integration.js +156 -0
  117. package/build/scripts/legacy/test_scenario_integration.js.map +1 -0
  118. package/build/scripts/legacy/test_schemas.d.ts +2 -0
  119. package/build/scripts/legacy/test_schemas.d.ts.map +1 -0
  120. package/build/scripts/legacy/test_schemas.js +48 -0
  121. package/build/scripts/legacy/test_schemas.js.map +1 -0
  122. package/build/scripts/legacy/test_schemas_simple.d.ts +2 -0
  123. package/build/scripts/legacy/test_schemas_simple.d.ts.map +1 -0
  124. package/build/scripts/legacy/test_schemas_simple.js +36 -0
  125. package/build/scripts/legacy/test_schemas_simple.js.map +1 -0
  126. package/build/scripts/legacy/test_simple.d.ts +4 -0
  127. package/build/scripts/legacy/test_simple.d.ts.map +1 -0
  128. package/build/scripts/legacy/test_simple.js +17 -0
  129. package/build/scripts/legacy/test_simple.js.map +1 -0
  130. package/build/scripts/legacy/test_warnings.d.ts +6 -0
  131. package/build/scripts/legacy/test_warnings.d.ts.map +1 -0
  132. package/build/scripts/legacy/test_warnings.js +48 -0
  133. package/build/scripts/legacy/test_warnings.js.map +1 -0
  134. package/build/scripts/legacy/very_simple_test.d.ts +1 -0
  135. package/build/scripts/legacy/very_simple_test.d.ts.map +1 -0
  136. package/build/scripts/legacy/very_simple_test.js +3 -0
  137. package/build/scripts/legacy/very_simple_test.js.map +1 -0
  138. package/build/scripts/merge_and_validate.d.ts +6 -0
  139. package/build/scripts/merge_and_validate.d.ts.map +1 -0
  140. package/build/scripts/merge_and_validate.js +53 -0
  141. package/build/scripts/merge_and_validate.js.map +1 -0
  142. package/build/src/ajv/ajv_loader.d.ts +47 -0
  143. package/build/src/ajv/ajv_loader.d.ts.map +1 -0
  144. package/build/src/ajv/ajv_loader.js +274 -0
  145. package/build/src/ajv/ajv_loader.js.map +1 -0
  146. package/build/src/ajv/schema_registry.d.ts +19 -0
  147. package/build/src/ajv/schema_registry.d.ts.map +1 -0
  148. package/build/src/ajv/schema_registry.js +121 -0
  149. package/build/src/ajv/schema_registry.js.map +1 -0
  150. package/build/src/drivers/__tests__/registry.test.d.ts +2 -0
  151. package/build/src/drivers/__tests__/registry.test.d.ts.map +1 -0
  152. package/build/src/drivers/__tests__/registry.test.js +100 -0
  153. package/build/src/drivers/__tests__/registry.test.js.map +1 -0
  154. package/build/src/drivers/httpDriver.d.ts +3 -0
  155. package/build/src/drivers/httpDriver.d.ts.map +1 -0
  156. package/build/src/drivers/httpDriver.js +76 -0
  157. package/build/src/drivers/httpDriver.js.map +1 -0
  158. package/build/src/drivers/index.d.ts +20 -0
  159. package/build/src/drivers/index.d.ts.map +1 -0
  160. package/build/src/drivers/index.js +33 -0
  161. package/build/src/drivers/index.js.map +1 -0
  162. package/build/src/drivers/restrictedShellDriver.d.ts +12 -0
  163. package/build/src/drivers/restrictedShellDriver.d.ts.map +1 -0
  164. package/build/src/drivers/restrictedShellDriver.js +88 -0
  165. package/build/src/drivers/restrictedShellDriver.js.map +1 -0
  166. package/build/src/episodes/__tests__/episode_writer_atomic.test.d.ts +2 -0
  167. package/build/src/episodes/__tests__/episode_writer_atomic.test.d.ts.map +1 -0
  168. package/build/src/episodes/__tests__/episode_writer_atomic.test.js +86 -0
  169. package/build/src/episodes/__tests__/episode_writer_atomic.test.js.map +1 -0
  170. package/build/src/episodes/episode_writer.d.ts +100 -0
  171. package/build/src/episodes/episode_writer.d.ts.map +1 -0
  172. package/build/src/episodes/episode_writer.js +503 -0
  173. package/build/src/episodes/episode_writer.js.map +1 -0
  174. package/build/src/episodes/episode_writer_atomic.d.ts +10 -0
  175. package/build/src/episodes/episode_writer_atomic.d.ts.map +1 -0
  176. package/build/src/episodes/episode_writer_atomic.js +46 -0
  177. package/build/src/episodes/episode_writer_atomic.js.map +1 -0
  178. package/build/src/evidence/evidence_writer.d.ts +16 -0
  179. package/build/src/evidence/evidence_writer.d.ts.map +1 -0
  180. package/build/src/evidence/evidence_writer.js +78 -0
  181. package/build/src/evidence/evidence_writer.js.map +1 -0
  182. package/build/src/handlers/registry.d.ts +20 -0
  183. package/build/src/handlers/registry.d.ts.map +1 -0
  184. package/build/src/handlers/registry.js +38 -0
  185. package/build/src/handlers/registry.js.map +1 -0
  186. package/build/src/interpreter/interpreter.d.ts +90 -0
  187. package/build/src/interpreter/interpreter.d.ts.map +1 -0
  188. package/build/src/interpreter/interpreter.js +732 -0
  189. package/build/src/interpreter/interpreter.js.map +1 -0
  190. package/build/src/interpreter/interpreter_with_budget.d.ts +92 -0
  191. package/build/src/interpreter/interpreter_with_budget.d.ts.map +1 -0
  192. package/build/src/interpreter/interpreter_with_budget.js +678 -0
  193. package/build/src/interpreter/interpreter_with_budget.js.map +1 -0
  194. package/build/src/logging/logger.d.ts +83 -0
  195. package/build/src/logging/logger.d.ts.map +1 -0
  196. package/build/src/logging/logger.js +226 -0
  197. package/build/src/logging/logger.js.map +1 -0
  198. package/build/src/policy/policy_engine.d.ts +116 -0
  199. package/build/src/policy/policy_engine.d.ts.map +1 -0
  200. package/build/src/policy/policy_engine.js +296 -0
  201. package/build/src/policy/policy_engine.js.map +1 -0
  202. package/build/src/skills/skills_layer.d.ts +94 -0
  203. package/build/src/skills/skills_layer.d.ts.map +1 -0
  204. package/build/src/skills/skills_layer.js +405 -0
  205. package/build/src/skills/skills_layer.js.map +1 -0
  206. package/build/src/telemetry/token_budget_enforcer.d.ts +113 -0
  207. package/build/src/telemetry/token_budget_enforcer.d.ts.map +1 -0
  208. package/build/src/telemetry/token_budget_enforcer.js +253 -0
  209. package/build/src/telemetry/token_budget_enforcer.js.map +1 -0
  210. package/build/src/telemetry/token_budget_loader.d.ts +29 -0
  211. package/build/src/telemetry/token_budget_loader.d.ts.map +1 -0
  212. package/build/src/telemetry/token_budget_loader.js +112 -0
  213. package/build/src/telemetry/token_budget_loader.js.map +1 -0
  214. package/build/src/telemetry/token_meter.d.ts +65 -0
  215. package/build/src/telemetry/token_meter.d.ts.map +1 -0
  216. package/build/src/telemetry/token_meter.js +153 -0
  217. package/build/src/telemetry/token_meter.js.map +1 -0
  218. package/build/src/ux/cli_interface.d.ts +85 -0
  219. package/build/src/ux/cli_interface.d.ts.map +1 -0
  220. package/build/src/ux/cli_interface.js +651 -0
  221. package/build/src/ux/cli_interface.js.map +1 -0
  222. package/build/test/drivers/registry.test.d.ts +2 -0
  223. package/build/test/drivers/registry.test.d.ts.map +1 -0
  224. package/build/test/drivers/registry.test.js +100 -0
  225. package/build/test/drivers/registry.test.js.map +1 -0
  226. package/build/test/episodes/episode_writer_atomic.test.d.ts +2 -0
  227. package/build/test/episodes/episode_writer_atomic.test.d.ts.map +1 -0
  228. package/build/test/episodes/episode_writer_atomic.test.js +86 -0
  229. package/build/test/episodes/episode_writer_atomic.test.js.map +1 -0
  230. package/build/tests/ajv/check_schemas.d.ts +4 -0
  231. package/build/tests/ajv/check_schemas.d.ts.map +1 -0
  232. package/build/tests/ajv/check_schemas.js +27 -0
  233. package/build/tests/ajv/check_schemas.js.map +1 -0
  234. package/build/tests/ajv/final_test.d.ts +2 -0
  235. package/build/tests/ajv/final_test.d.ts.map +1 -0
  236. package/build/tests/ajv/final_test.js +42 -0
  237. package/build/tests/ajv/final_test.js.map +1 -0
  238. package/build/tests/ajv/simple_test.d.ts +2 -0
  239. package/build/tests/ajv/simple_test.d.ts.map +1 -0
  240. package/build/tests/ajv/simple_test.js +40 -0
  241. package/build/tests/ajv/simple_test.js.map +1 -0
  242. package/build/tests/ajv/test_schema_loading.d.ts +2 -0
  243. package/build/tests/ajv/test_schema_loading.d.ts.map +1 -0
  244. package/build/tests/ajv/test_schema_loading.js +39 -0
  245. package/build/tests/ajv/test_schema_loading.js.map +1 -0
  246. package/build/tools/mova-agent.d.ts +2 -0
  247. package/build/tools/mova-agent.d.ts.map +1 -0
  248. package/build/tools/mova-agent.js +15 -0
  249. package/build/tools/mova-agent.js.map +1 -0
  250. package/package.json +63 -0
  251. package/src/ajv/ajv_loader.ts +311 -0
  252. package/src/ajv/schema_registry.ts +92 -0
  253. package/src/drivers/httpDriver.ts +90 -0
  254. package/src/drivers/index.ts +48 -0
  255. package/src/drivers/restrictedShellDriver.ts +68 -0
  256. package/src/episodes/episode_writer.ts +675 -0
  257. package/src/episodes/episode_writer_atomic.ts +44 -0
  258. package/src/evidence/evidence_writer.ts +74 -0
  259. package/src/handlers/registry.ts +53 -0
  260. package/src/interpreter/interpreter.ts +1009 -0
  261. package/src/interpreter/interpreter_with_budget.ts +923 -0
  262. package/src/logging/logger.ts +269 -0
  263. package/src/policy/policy_engine.ts +395 -0
  264. package/src/skills/skills_layer.ts +510 -0
  265. package/src/telemetry/token_budget_enforcer.ts +338 -0
  266. package/src/telemetry/token_budget_loader.ts +133 -0
  267. package/src/telemetry/token_meter.ts +185 -0
  268. package/src/types/generated/ds.connector_core_v1.d.ts +116 -0
  269. package/src/types/generated/ds.instruction_profile_core_v1.d.ts +141 -0
  270. package/src/types/generated/ds.mova4_core_catalog_v1.d.ts +80 -0
  271. package/src/types/generated/ds.mova_agent_run_summary_v1.d.ts +120 -0
  272. package/src/types/generated/ds.mova_agent_step_v1.d.ts +53 -0
  273. package/src/types/generated/ds.mova_agent_tool_pool_v1.d.ts +152 -0
  274. package/src/types/generated/ds.mova_agent_validation_report_v1.d.ts +43 -0
  275. package/src/types/generated/ds.mova_episode_core_v1.d.ts +56 -0
  276. package/src/types/generated/ds.mova_schema_core_v1.d.ts +49 -0
  277. package/src/types/generated/ds.mova_token_budget_contract_v0.d.ts +140 -0
  278. package/src/types/generated/ds.runtime_binding_core_v1.d.ts +112 -0
  279. package/src/types/generated/ds.security_event_episode_core_v1.d.ts +138 -0
  280. package/src/types/generated/ds.ui_text_bundle_core_v1.d.ts +118 -0
  281. package/src/types/generated/env.instruction_profile_publish_v1.d.ts +159 -0
  282. package/src/types/generated/env.mova4_core_catalog_publish_v1.d.ts +25 -0
  283. package/src/types/generated/env.mova_agent_plan_v1.d.ts +40 -0
  284. package/src/types/generated/env.mova_agent_request_v1.d.ts +43 -0
  285. package/src/types/generated/env.security_event_store_v1.d.ts +191 -0
  286. package/src/types/generated/index.d.ts +25 -0
  287. package/src/ux/cli_interface.ts +719 -0
package/README.md ADDED
@@ -0,0 +1,94 @@
1
+ # MOVA Agent (TypeScript)
2
+
3
+ ### Localization
4
+ Russian originals are kept in `docs/ru/`. This README and all docs are the English versions for the global community.
5
+
6
+ ## Overview
7
+ Deterministic interpreter runtime for MOVA envelopes with strict typing, atomic evidence/episode writing, plugin driver registry, and CI/CD with Docker.
8
+
9
+ ## Plugin Driver Registry
10
+ - Location: `src/drivers/index.ts`.
11
+ - API: `registerDriver(name, factory)`, `getDriver(name)`, `listDrivers()`.
12
+ - DriverContext supports `allowlist`, `limits`, `bindings`.
13
+ - Built-in drivers: `noop`, `http` (fetch with allowlist + timeout), `restricted_shell` (execFile with allowlist).
14
+
15
+ Example:
16
+ ```ts
17
+ import { registerDriver } from './src/drivers';
18
+
19
+ registerDriver('my_driver', () => ({
20
+ async execute(input) {
21
+ return { ok: true, input };
22
+ },
23
+ }));
24
+ ```
25
+
26
+ ## Linting & Formatting
27
+ ```bash
28
+ npm run lint # ESLint check
29
+ npm run format # Prettier auto-format
30
+ npm run format:check # Prettier check only
31
+ npm run check:structure # Ensure .ts files stay in allowed folders
32
+ npm run check:docs # Validate docs have headings (excluding docs/ru)
33
+ ```
34
+
35
+ ## Docker Build Verification
36
+ - Dockerfile: multi-stage on `node:18-alpine`, builds TS + generated types.
37
+ - Docker Compose: `docker-compose.yml` exposes port 3000.
38
+ - CI job `docker-build` builds `mova-agent:ci` and runs CLI help:
39
+ `docker run --rm mova-agent:ci node build/tools/mova-agent.js --help`
40
+ - Local check:
41
+ ```bash
42
+ docker compose up --build
43
+ curl http://localhost:3000/health
44
+ ```
45
+
46
+ ## SDK CLI
47
+ - Published package: `@leryk1981/mova-sdk-cli` (npm). Repo: `sdk-cli/` in this project.
48
+ - Install globally: `npm i -g @leryk1981/mova-sdk-cli`
49
+ - Quick use:
50
+ ```bash
51
+ mova init my-project # scaffold configs/episodes/plans
52
+ mova plan -s env.mova_agent_plan_v1.json plans/plan.sample.json
53
+ mova run plans/plan.sample.json # local; add --endpoint <url> for MCP gateway
54
+ mova driver:add http # generate/register driver skeleton
55
+ mova policy:set --role admin --verb noop --allow
56
+ mova episode:list --verb noop
57
+ ```
58
+ - More details: `sdk-cli/README.md`, `sdk-cli/USAGE.md`.
59
+
60
+ ## Scripts
61
+ - `npm run build` — compile to `build/`.
62
+ - `npm run gen:types` — generate `.d.ts` from JSON Schemas.
63
+ - `npm run lint` / `npm run format:check` — style checks.
64
+ - `npm test` — build + gen:types + unit tests (atomic writer, drivers).
65
+ - `npm run build:sdk-cli` — build the MOVA SDK CLI locally.
66
+ - `npm run test:integration` — smoke test CLI → Agent → Episodes flow.
67
+ - `npm run release:version` — bump patch version (uses `npm version patch`).
68
+ - `npm publish` — publish package (CI does this automatically on tags).
69
+
70
+ ## Compatibility
71
+ - Matrix: see `COMPATIBILITY_MATRIX.md` for tested Agent / SDK CLI / schema-set versions.
72
+ - Check locally: `npm run verify:compat` (runs in CI).
73
+ - On releases: bump versions (Agent `package.json`, `sdk-cli/package.json`, `@leryk1981/mova-spec` dependency) and update the top row of the matrix.
74
+
75
+ ## Documentation
76
+ - Architecture: `docs/MOVA_AGENT_ARCHITECTURE.md`
77
+ - Roadmap: `docs/MOVA_AGENT_ROADMAP.md`
78
+ - Production spec: `docs/prod_tz.md`
79
+ - Token budgeting: `docs/TOKEN_BUDGETING.md`
80
+ - Linting rules: `docs/linting.md`
81
+
82
+ ## CI/CD
83
+ GitHub Actions: lint → format check → tests → docker-build. Node 18, npm ci.
84
+ - Release workflow (`.github/workflows/release.yml`): runs on tags `v*.*.*`, verifies `package.json` version matches the tag, builds, and publishes to npm using `NPM_TOKEN` secret. Release notes are generated automatically.
85
+
86
+ ## Release
87
+ - Local manual publish:
88
+ ```bash
89
+ npm install
90
+ npm run release:version # or npm version <patch|minor|major>
91
+ git push --follow-tags
92
+ npm publish --access public
93
+ ```
94
+ - CI publish: push a tag `vX.Y.Z` to trigger `release.yml` (requires `NPM_TOKEN` secret set in repo settings). Docker image publishing can be added later via Docker Hub credentials.
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=check_docs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check_docs.d.ts","sourceRoot":"","sources":["../../scripts/check_docs.ts"],"names":[],"mappings":""}
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const fs_1 = __importDefault(require("fs"));
7
+ const path_1 = __importDefault(require("path"));
8
+ const DOCS_DIR = path_1.default.resolve(__dirname, '..', 'docs');
9
+ const RU_DIR = path_1.default.join(DOCS_DIR, 'ru');
10
+ function isMarkdown(file) {
11
+ return file.toLowerCase().endsWith('.md');
12
+ }
13
+ function verifyDoc(filePath, violations) {
14
+ const content = fs_1.default.readFileSync(filePath, 'utf8');
15
+ const firstLine = content.split('\n').find((line) => line.trim().length > 0) || '';
16
+ if (!firstLine.trim().startsWith('#')) {
17
+ violations.push(`${path_1.default.relative(process.cwd(), filePath)}: missing top-level heading (# ...)`);
18
+ }
19
+ }
20
+ function walkDocs(dir, violations) {
21
+ const entries = fs_1.default.readdirSync(dir, { withFileTypes: true });
22
+ for (const entry of entries) {
23
+ const fullPath = path_1.default.join(dir, entry.name);
24
+ if (entry.isDirectory()) {
25
+ if (fullPath.startsWith(RU_DIR))
26
+ continue; // skip Russian originals
27
+ walkDocs(fullPath, violations);
28
+ continue;
29
+ }
30
+ if (entry.isFile() && isMarkdown(entry.name)) {
31
+ verifyDoc(fullPath, violations);
32
+ }
33
+ }
34
+ }
35
+ function main() {
36
+ const violations = [];
37
+ walkDocs(DOCS_DIR, violations);
38
+ if (violations.length > 0) {
39
+ console.error('Documentation check failed:');
40
+ for (const v of violations) {
41
+ console.error(`- ${v}`);
42
+ }
43
+ process.exit(1);
44
+ }
45
+ console.log('All docs verified.');
46
+ }
47
+ main();
48
+ //# sourceMappingURL=check_docs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check_docs.js","sourceRoot":"","sources":["../../scripts/check_docs.ts"],"names":[],"mappings":";;;;;AAAA,4CAAoB;AACpB,gDAAwB;AAExB,MAAM,QAAQ,GAAG,cAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;AACvD,MAAM,MAAM,GAAG,cAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;AAEzC,SAAS,UAAU,CAAC,IAAY;IAC9B,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC5C,CAAC;AAED,SAAS,SAAS,CAAC,QAAgB,EAAE,UAAoB;IACvD,MAAM,OAAO,GAAG,YAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAClD,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IACnF,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACtC,UAAU,CAAC,IAAI,CAAC,GAAG,cAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,CAAC,qCAAqC,CAAC,CAAC;IAClG,CAAC;AACH,CAAC;AAED,SAAS,QAAQ,CAAC,GAAW,EAAE,UAAoB;IACjD,MAAM,OAAO,GAAG,YAAE,CAAC,WAAW,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7D,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAC5C,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YACxB,IAAI,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC;gBAAE,SAAS,CAAC,yBAAyB;YACpE,QAAQ,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;YAC/B,SAAS;QACX,CAAC;QACD,IAAI,KAAK,CAAC,MAAM,EAAE,IAAI,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7C,SAAS,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,IAAI;IACX,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,QAAQ,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IAE/B,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,OAAO,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;QAC7C,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;YAC3B,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC1B,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;AACpC,CAAC;AAED,IAAI,EAAE,CAAC"}
@@ -0,0 +1,3 @@
1
+ declare const AjvLoaderSrc: any;
2
+ declare const getLogger: any;
3
+ //# sourceMappingURL=check_schema_paths.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check_schema_paths.d.ts","sourceRoot":"","sources":["../../scripts/check_schema_paths.ts"],"names":[],"mappings":"AACA,QAAA,MAAM,YAAY,KAAmC,CAAC;AACtD,QAAA,MAAQ,SAAS,KAAqC,CAAC"}
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ // @ts-nocheck
3
+ const AjvLoaderSrc = require('../src/ajv/ajv_loader');
4
+ const { getLogger } = require('../src/logging/logger');
5
+ (async () => {
6
+ const logger = getLogger();
7
+ const loader = new AjvLoaderSrc.AjvSchemaLoader();
8
+ const schemaId = 'ds.security_event_episode_core_v1';
9
+ logger.info(`Checking paths for ${schemaId}`);
10
+ await loader
11
+ .loadSchema(schemaId)
12
+ .then((sch) => logger.info(`Loaded schema keys: ${Object.keys(sch).join(', ')}`))
13
+ .catch((e) => logger.error(`loadSchema error: ${e.message}`));
14
+ })();
15
+ //# sourceMappingURL=check_schema_paths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check_schema_paths.js","sourceRoot":"","sources":["../../scripts/check_schema_paths.ts"],"names":[],"mappings":";AAAA,cAAc;AACd,MAAM,YAAY,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAAC;AACtD,MAAM,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAAC;AAEvD,CAAC,KAAK,IAAI,EAAE;IACV,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC,eAAe,EAAE,CAAC;IAClD,MAAM,QAAQ,GAAG,mCAAmC,CAAC;IACrD,MAAM,CAAC,IAAI,CAAC,sBAAsB,QAAQ,EAAE,CAAC,CAAC;IAC9C,MAAM,MAAM;SACT,UAAU,CAAC,QAAQ,CAAC;SACpB,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,uBAAuB,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;SAChF,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;AAClE,CAAC,CAAC,EAAE,CAAC"}
@@ -0,0 +1,3 @@
1
+ declare const loader: any;
2
+ declare const getLogger: any;
3
+ //# sourceMappingURL=check_schema_paths_dist.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check_schema_paths_dist.d.ts","sourceRoot":"","sources":["../../scripts/check_schema_paths_dist.ts"],"names":[],"mappings":"AACA,QAAA,MAAM,MAAM,KAAyC,CAAC;AACtD,QAAA,MAAQ,SAAS,KAAqC,CAAC"}
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ // @ts-nocheck
3
+ const loader = require('../build/src/ajv/ajv_loader');
4
+ const { getLogger } = require('../src/logging/logger');
5
+ (async () => {
6
+ const logger = getLogger();
7
+ const schemaId = 'ds.security_event_episode_core_v1';
8
+ try {
9
+ const schema = await loader.ajvLoader.loadSchema(schemaId);
10
+ logger.info(`Loaded schema id: ${schema.$id || '[no $id]'} keys: ${Object.keys(schema).join(', ')}`);
11
+ }
12
+ catch (err) {
13
+ logger.error(`dist loader loadSchema error: ${err.message}`);
14
+ }
15
+ })();
16
+ //# sourceMappingURL=check_schema_paths_dist.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check_schema_paths_dist.js","sourceRoot":"","sources":["../../scripts/check_schema_paths_dist.ts"],"names":[],"mappings":";AAAA,cAAc;AACd,MAAM,MAAM,GAAG,OAAO,CAAC,6BAA6B,CAAC,CAAC;AACtD,MAAM,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAAC;AAEvD,CAAC,KAAK,IAAI,EAAE;IACV,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,MAAM,QAAQ,GAAG,mCAAmC,CAAC;IACrD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QAC3D,MAAM,CAAC,IAAI,CACT,qBAAqB,MAAM,CAAC,GAAG,IAAI,UAAU,UAAU,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACxF,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,KAAK,CAAC,iCAAiC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;IAC/D,CAAC;AACH,CAAC,CAAC,EAAE,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=check_structure.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check_structure.d.ts","sourceRoot":"","sources":["../../scripts/check_structure.ts"],"names":[],"mappings":""}
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const fs_1 = __importDefault(require("fs"));
7
+ const path_1 = __importDefault(require("path"));
8
+ const allowedRoots = new Set([
9
+ 'src',
10
+ 'scripts',
11
+ 'test',
12
+ 'tests',
13
+ 'docs',
14
+ 'configs',
15
+ 'tools',
16
+ 'sdk-cli',
17
+ 'vendor',
18
+ '.github',
19
+ ]);
20
+ const ignored = new Set([
21
+ 'node_modules',
22
+ 'build',
23
+ 'dist',
24
+ 'artifacts',
25
+ 'temp_dist',
26
+ 'test_dist',
27
+ '.git',
28
+ ]);
29
+ function walk(dir, violations) {
30
+ const entries = fs_1.default.readdirSync(dir, { withFileTypes: true });
31
+ for (const entry of entries) {
32
+ if (ignored.has(entry.name))
33
+ continue;
34
+ const fullPath = path_1.default.join(dir, entry.name);
35
+ if (entry.isDirectory()) {
36
+ walk(fullPath, violations);
37
+ }
38
+ else if (entry.isFile() && entry.name.endsWith('.ts')) {
39
+ const rel = path_1.default.relative(process.cwd(), fullPath);
40
+ const top = rel.split(path_1.default.sep)[0];
41
+ if (!allowedRoots.has(top)) {
42
+ violations.push(rel);
43
+ }
44
+ }
45
+ }
46
+ }
47
+ function main() {
48
+ const violations = [];
49
+ walk(process.cwd(), violations);
50
+ if (violations.length > 0) {
51
+ console.error('Found TypeScript files outside allowed directories:', violations);
52
+ process.exit(1);
53
+ }
54
+ else {
55
+ console.log('Structure check passed: no stray TypeScript files.');
56
+ }
57
+ }
58
+ main();
59
+ //# sourceMappingURL=check_structure.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check_structure.js","sourceRoot":"","sources":["../../scripts/check_structure.ts"],"names":[],"mappings":";;;;;AAAA,4CAAoB;AACpB,gDAAwB;AAExB,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC;IAC3B,KAAK;IACL,SAAS;IACT,MAAM;IACN,OAAO;IACP,MAAM;IACN,SAAS;IACT,OAAO;IACP,SAAS;IACT,QAAQ;IACR,SAAS;CACV,CAAC,CAAC;AACH,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC;IACtB,cAAc;IACd,OAAO;IACP,MAAM;IACN,WAAW;IACX,WAAW;IACX,WAAW;IACX,MAAM;CACP,CAAC,CAAC;AAEH,SAAS,IAAI,CAAC,GAAW,EAAE,UAAoB;IAC7C,MAAM,OAAO,GAAG,YAAE,CAAC,WAAW,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7D,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;YAAE,SAAS;QACtC,MAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAC5C,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YACxB,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QAC7B,CAAC;aAAM,IAAI,KAAK,CAAC,MAAM,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACxD,MAAM,GAAG,GAAG,cAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,CAAC,CAAC;YACnD,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,cAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACnC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC3B,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACvB,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,IAAI;IACX,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,UAAU,CAAC,CAAC;IAChC,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,OAAO,CAAC,KAAK,CAAC,qDAAqD,EAAE,UAAU,CAAC,CAAC;QACjF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAC;IACpE,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC"}
@@ -0,0 +1,3 @@
1
+ declare const path: any;
2
+ declare const fs: any;
3
+ //# sourceMappingURL=debug_validate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"debug_validate.d.ts","sourceRoot":"","sources":["../../scripts/debug_validate.ts"],"names":[],"mappings":"AACA,QAAA,MAAM,IAAI,KAAkB,CAAC;AAC7B,QAAA,MAAM,EAAE,KAAgB,CAAC"}
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ // @ts-nocheck
3
+ const path = require('path');
4
+ const fs = require('fs');
5
+ (async function () {
6
+ try {
7
+ const epPath = path.join('artifacts', 'mova_agent', 'req_89228ac4-6377-469b-9972-25e3f643382a', 'runs', 'run_dba1cec9-de6a-41d7-98de-5c7cce822dc0', 'episodes', 'sec_1768237057635_v3gpy8yex.json');
8
+ const ep = JSON.parse(fs.readFileSync(epPath, 'utf8'));
9
+ console.log('Loaded episode:', ep.episode_id, ep.episode_type);
10
+ // Inline referenced schema to produce a merged schema for debugging
11
+ const Ajv = require('ajv');
12
+ const ajv = new Ajv({ allErrors: true, strict: false });
13
+ const securitySchemaPath = path.join('vendor', 'MOVA', 'schemas', 'ds.security_event_episode_core_v1.schema.json');
14
+ const movaEpisodePath = path.join('vendor', 'MOVA', 'schemas', 'ds.mova_episode_core_v1.schema.json');
15
+ const securitySchema = JSON.parse(fs.readFileSync(securitySchemaPath, 'utf8'));
16
+ const movaEpisodeSchema = JSON.parse(fs.readFileSync(movaEpisodePath, 'utf8'));
17
+ // Replace $ref in allOf with actual content for debugging
18
+ if (securitySchema.allOf && Array.isArray(securitySchema.allOf)) {
19
+ for (let i = 0; i < securitySchema.allOf.length; i++) {
20
+ const item = securitySchema.allOf[i];
21
+ if (item.$ref && item.$ref.includes('ds.mova_episode_core_v1')) {
22
+ securitySchema.allOf[i] = movaEpisodeSchema;
23
+ }
24
+ }
25
+ }
26
+ // Remove $schema to avoid meta-schema resolution issues in this ad-hoc AJV instance
27
+ delete securitySchema.$schema;
28
+ delete movaEpisodeSchema.$schema;
29
+ const validateFunc = ajv.compile(securitySchema);
30
+ const ok = validateFunc(ep);
31
+ console.log('compiled ok=', ok);
32
+ console.log('errors:', JSON.stringify(validateFunc.errors, null, 2));
33
+ }
34
+ catch (e) {
35
+ console.error('Error during debug:', e);
36
+ process.exit(2);
37
+ }
38
+ })();
39
+ //# sourceMappingURL=debug_validate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"debug_validate.js","sourceRoot":"","sources":["../../scripts/debug_validate.ts"],"names":[],"mappings":";AAAA,cAAc;AACd,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;AAC7B,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AACzB,CAAC,KAAK;IACJ,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CACtB,WAAW,EACX,YAAY,EACZ,0CAA0C,EAC1C,MAAM,EACN,0CAA0C,EAC1C,UAAU,EACV,kCAAkC,CACnC,CAAC;QACF,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;QACvD,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,EAAE,CAAC,UAAU,EAAE,EAAE,CAAC,YAAY,CAAC,CAAC;QAE/D,oEAAoE;QACpE,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;QAC3B,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;QACxD,MAAM,kBAAkB,GAAG,IAAI,CAAC,IAAI,CAClC,QAAQ,EACR,MAAM,EACN,SAAS,EACT,+CAA+C,CAChD,CAAC;QACF,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAC/B,QAAQ,EACR,MAAM,EACN,SAAS,EACT,qCAAqC,CACtC,CAAC;QACF,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAAC,CAAC;QAC/E,MAAM,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC,CAAC;QAC/E,0DAA0D;QAC1D,IAAI,cAAc,CAAC,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;YAChE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACrD,MAAM,IAAI,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBACrC,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,yBAAyB,CAAC,EAAE,CAAC;oBAC/D,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC;gBAC9C,CAAC;YACH,CAAC;QACH,CAAC;QACD,oFAAoF;QACpF,OAAO,cAAc,CAAC,OAAO,CAAC;QAC9B,OAAO,iBAAiB,CAAC,OAAO,CAAC;QACjC,MAAM,YAAY,GAAG,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;QACjD,MAAM,EAAE,GAAG,YAAY,CAAC,EAAE,CAAC,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;QAChC,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IACvE,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,qBAAqB,EAAE,CAAC,CAAC,CAAC;QACxC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,EAAE,CAAC"}
@@ -0,0 +1,3 @@
1
+ declare const path: any;
2
+ declare const fs: any;
3
+ //# sourceMappingURL=debug_validate2.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"debug_validate2.d.ts","sourceRoot":"","sources":["../../scripts/debug_validate2.ts"],"names":[],"mappings":"AACA,QAAA,MAAM,IAAI,KAAkB,CAAC;AAC7B,QAAA,MAAM,EAAE,KAAgB,CAAC"}
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ // @ts-nocheck
3
+ const path = require('path');
4
+ const fs = require('fs');
5
+ (async function () {
6
+ try {
7
+ const epPath = path.join('artifacts', 'mova_agent', 'req_89228ac4-6377-469b-9972-25e3f643382a', 'runs', 'run_dba1cec9-de6a-41d7-98de-5c7cce822dc0', 'episodes', 'sec_1768237057635_v3gpy8yex.json');
8
+ const ep = JSON.parse(fs.readFileSync(epPath, 'utf8'));
9
+ const validate = require('../build/src/ajv/ajv_loader').validate;
10
+ const res = await validate('ds.security_event_episode_core_v1', ep);
11
+ console.log('validate result:');
12
+ console.log(JSON.stringify(res, null, 2));
13
+ }
14
+ catch (e) {
15
+ console.error('Error during debug2:', e);
16
+ }
17
+ })();
18
+ //# sourceMappingURL=debug_validate2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"debug_validate2.js","sourceRoot":"","sources":["../../scripts/debug_validate2.ts"],"names":[],"mappings":";AAAA,cAAc;AACd,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;AAC7B,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AACzB,CAAC,KAAK;IACJ,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CACtB,WAAW,EACX,YAAY,EACZ,0CAA0C,EAC1C,MAAM,EACN,0CAA0C,EAC1C,UAAU,EACV,kCAAkC,CACnC,CAAC;QACF,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;QACvD,MAAM,QAAQ,GAAG,OAAO,CAAC,6BAA6B,CAAC,CAAC,QAAQ,CAAC;QACjE,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,mCAAmC,EAAE,EAAE,CAAC,CAAC;QACpE,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;QAChC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC5C,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,sBAAsB,EAAE,CAAC,CAAC,CAAC;IAC3C,CAAC;AACH,CAAC,CAAC,EAAE,CAAC"}
@@ -0,0 +1,3 @@
1
+ declare const fs: any;
2
+ declare const path: any;
3
+ //# sourceMappingURL=debug_validate_runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"debug_validate_runtime.d.ts","sourceRoot":"","sources":["../../scripts/debug_validate_runtime.ts"],"names":[],"mappings":"AACA,QAAA,MAAM,EAAE,KAAsB,CAAC;AAC/B,QAAA,MAAM,IAAI,KAAkB,CAAC"}
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ // @ts-nocheck
3
+ const fs = require('fs-extra');
4
+ const path = require('path');
5
+ (async () => {
6
+ try {
7
+ const indexPath = path.join('artifacts', 'mova_agent', 'req_99be755e-3a41-40f6-9be0-6df3829e3f09', 'runs', 'run_958577be-c4f1-4149-af40-17aa27daa93c', 'episodes', 'index.jsonl');
8
+ const content = await fs.readFile(indexPath, 'utf8');
9
+ const lines = content.trim().split('\n').filter(Boolean);
10
+ const eps = lines.map((l) => JSON.parse(l));
11
+ const sec = eps.find((e) => e.episode_type && e.episode_type.startsWith('security_event'));
12
+ console.log('Found security event:', sec.episode_id, sec.episode_type);
13
+ const ajvLoader = require('../build/src/ajv/ajv_loader');
14
+ const validate = ajvLoader.validate;
15
+ const ajvInst = ajvLoader.ajvLoader.getAjv;
16
+ console.log('AJV registered schema keys:', Object.keys(ajvInst.schemas || {}));
17
+ const s1 = ajvInst.getSchema('ds.security_event_episode_core_v1');
18
+ console.log('getSchema short id:', !!s1);
19
+ // try canonical id from known vendor URL
20
+ const canonical = 'https://mova.dev/schemas/ds.security_event_episode_core_v1.schema.json';
21
+ const s2 = ajvInst.getSchema(canonical);
22
+ console.log('getSchema canonical id:', !!s2);
23
+ const validation = await validate('ds.security_event_episode_core_v1', sec);
24
+ console.log('validate result.ok =', validation.ok);
25
+ console.log('validation.errors raw =', validation.errors);
26
+ if (s1) {
27
+ console.log('Validator (short id) errors:', s1.errors);
28
+ }
29
+ if (s2) {
30
+ console.log('Validator (canonical) errors:', s2.errors);
31
+ }
32
+ process.exit(0);
33
+ }
34
+ catch (e) {
35
+ console.error('Error in debug script:', e);
36
+ process.exit(2);
37
+ }
38
+ })();
39
+ //# sourceMappingURL=debug_validate_runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"debug_validate_runtime.js","sourceRoot":"","sources":["../../scripts/debug_validate_runtime.ts"],"names":[],"mappings":";AAAA,cAAc;AACd,MAAM,EAAE,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAC/B,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;AAC7B,CAAC,KAAK,IAAI,EAAE;IACV,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CACzB,WAAW,EACX,YAAY,EACZ,0CAA0C,EAC1C,MAAM,EACN,0CAA0C,EAC1C,UAAU,EACV,aAAa,CACd,CAAC;QACF,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QACrD,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACzD,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5C,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,YAAY,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC,CAAC;QAC3F,OAAO,CAAC,GAAG,CAAC,uBAAuB,EAAE,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,YAAY,CAAC,CAAC;QAEvE,MAAM,SAAS,GAAG,OAAO,CAAC,6BAA6B,CAAC,CAAC;QACzD,MAAM,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC;QACpC,MAAM,OAAO,GAAG,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC;QAE3C,OAAO,CAAC,GAAG,CAAC,6BAA6B,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC;QAC/E,MAAM,EAAE,GAAG,OAAO,CAAC,SAAS,CAAC,mCAAmC,CAAC,CAAC;QAClE,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;QACzC,yCAAyC;QACzC,MAAM,SAAS,GAAG,wEAAwE,CAAC;QAC3F,MAAM,EAAE,GAAG,OAAO,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QACxC,OAAO,CAAC,GAAG,CAAC,yBAAyB,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;QAE7C,MAAM,UAAU,GAAG,MAAM,QAAQ,CAAC,mCAAmC,EAAE,GAAG,CAAC,CAAC;QAC5E,OAAO,CAAC,GAAG,CAAC,sBAAsB,EAAE,UAAU,CAAC,EAAE,CAAC,CAAC;QACnD,OAAO,CAAC,GAAG,CAAC,yBAAyB,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;QAE1D,IAAI,EAAE,EAAE,CAAC;YACP,OAAO,CAAC,GAAG,CAAC,8BAA8B,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC;QACzD,CAAC;QACD,IAAI,EAAE,EAAE,CAAC;YACP,OAAO,CAAC,GAAG,CAAC,+BAA+B,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC;QAC1D,CAAC;QAED,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,CAAC,CAAC,CAAC;QAC3C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,EAAE,CAAC"}
@@ -0,0 +1,2 @@
1
+ declare const loader: any;
2
+ //# sourceMappingURL=dump_ajv_schemas.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dump_ajv_schemas.d.ts","sourceRoot":"","sources":["../../scripts/dump_ajv_schemas.ts"],"names":[],"mappings":"AACA,QAAA,MAAM,MAAM,KAAyC,CAAC"}
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ // @ts-nocheck
3
+ const loader = require('../build/src/ajv/ajv_loader');
4
+ (async () => {
5
+ try {
6
+ await loader.ajvLoader.registerSchema('ds.security_event_episode_core_v1');
7
+ const ajv = loader.ajvLoader.ajv;
8
+ const keys = Object.keys(ajv.schemas || {});
9
+ console.log('ajv schemas keys count:', keys.length);
10
+ console.log(keys.slice(0, 50));
11
+ const vf = ajv.getSchema('ds.security_event_episode_core_v1') ||
12
+ ajv.getSchema('https://mova.dev/schemas/ds.security_event_episode_core_v1.schema.json');
13
+ console.log('validator found:', !!vf);
14
+ if (vf) {
15
+ console.log('schema id from validator:', vf.schema && vf.schema.$id);
16
+ }
17
+ }
18
+ catch (e) {
19
+ console.error('error:', e.message);
20
+ }
21
+ })();
22
+ //# sourceMappingURL=dump_ajv_schemas.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dump_ajv_schemas.js","sourceRoot":"","sources":["../../scripts/dump_ajv_schemas.ts"],"names":[],"mappings":";AAAA,cAAc;AACd,MAAM,MAAM,GAAG,OAAO,CAAC,6BAA6B,CAAC,CAAC;AACtD,CAAC,KAAK,IAAI,EAAE;IACV,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,mCAAmC,CAAC,CAAC;QAC3E,MAAM,GAAG,GAAG,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC;QACjC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;QAC5C,OAAO,CAAC,GAAG,CAAC,yBAAyB,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QACpD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QAC/B,MAAM,EAAE,GACN,GAAG,CAAC,SAAS,CAAC,mCAAmC,CAAC;YAClD,GAAG,CAAC,SAAS,CAAC,wEAAwE,CAAC,CAAC;QAC1F,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;QACtC,IAAI,EAAE,EAAE,CAAC;YACP,OAAO,CAAC,GAAG,CAAC,2BAA2B,EAAE,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACvE,CAAC;IACH,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;IACrC,CAAC;AACH,CAAC,CAAC,EAAE,CAAC"}
@@ -0,0 +1,3 @@
1
+ declare const fs: any;
2
+ declare const path: any;
3
+ //# sourceMappingURL=dump_resolved_schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dump_resolved_schema.d.ts","sourceRoot":"","sources":["../../scripts/dump_resolved_schema.ts"],"names":[],"mappings":"AACA,QAAA,MAAM,EAAE,KAAsB,CAAC;AAC/B,QAAA,MAAM,IAAI,KAAkB,CAAC"}
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ // @ts-nocheck
3
+ const fs = require('fs-extra');
4
+ const path = require('path');
5
+ (async () => {
6
+ try {
7
+ const ajvLoader = require('../build/src/ajv/ajv_loader');
8
+ const loader = ajvLoader.ajvLoader;
9
+ const schema = await loader.loadSchema('ds.security_event_episode_core_v1');
10
+ console.log('Loaded schema $id =', schema.$id);
11
+ const resolved = await loader.resolveRefs(schema);
12
+ await fs.ensureDir('tmp');
13
+ await fs.writeJson(path.join('tmp', 'resolved_security_event.json'), resolved, { spaces: 2 });
14
+ console.log('Wrote tmp/resolved_security_event.json');
15
+ process.exit(0);
16
+ }
17
+ catch (e) {
18
+ console.error(e);
19
+ process.exit(2);
20
+ }
21
+ })();
22
+ //# sourceMappingURL=dump_resolved_schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dump_resolved_schema.js","sourceRoot":"","sources":["../../scripts/dump_resolved_schema.ts"],"names":[],"mappings":";AAAA,cAAc;AACd,MAAM,EAAE,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAC/B,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;AAC7B,CAAC,KAAK,IAAI,EAAE;IACV,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,OAAO,CAAC,6BAA6B,CAAC,CAAC;QACzD,MAAM,MAAM,GAAG,SAAS,CAAC,SAAS,CAAC;QACnC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,mCAAmC,CAAC,CAAC;QAC5E,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;QAC/C,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAClD,MAAM,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAC1B,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,8BAA8B,CAAC,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;QAC9F,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;QACtD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACjB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,EAAE,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=gen_types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gen_types.d.ts","sourceRoot":"","sources":["../../scripts/gen_types.ts"],"names":[],"mappings":""}