@kirrosh/apitool 0.4.3

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 (191) hide show
  1. package/.github/workflows/ci.yml +27 -0
  2. package/.github/workflows/release.yml +97 -0
  3. package/.mcp.json +9 -0
  4. package/APITOOL.md +195 -0
  5. package/BACKLOG.md +62 -0
  6. package/CHANGELOG.md +88 -0
  7. package/LICENSE +21 -0
  8. package/README.md +105 -0
  9. package/bun.lock +291 -0
  10. package/docs/GLOSSARY.md +182 -0
  11. package/docs/INDEX.md +21 -0
  12. package/docs/agent.md +135 -0
  13. package/docs/archive/APITOOL-pre-M22.md +831 -0
  14. package/docs/archive/BACKLOG-AI-NATIVE.md +56 -0
  15. package/docs/archive/M1-M2-parser-runner.md +216 -0
  16. package/docs/archive/M4-M7-reporter-cli.md +179 -0
  17. package/docs/archive/M5-M7-storage-junit.md +300 -0
  18. package/docs/archive/M6-webui.md +339 -0
  19. package/docs/ci.md +274 -0
  20. package/docs/generation-issues.md +67 -0
  21. package/generated/.env.yaml +3 -0
  22. package/install.ps1 +80 -0
  23. package/install.sh +113 -0
  24. package/package.json +46 -0
  25. package/scripts/run-mocked-tests.ts +45 -0
  26. package/seed-demo.ts +53 -0
  27. package/self-tests/auth.yaml +18 -0
  28. package/self-tests/collections-crud.yaml +46 -0
  29. package/self-tests/environments-crud.yaml +48 -0
  30. package/self-tests/export.yaml +32 -0
  31. package/self-tests/runs.yaml +16 -0
  32. package/src/bun-types.d.ts +5 -0
  33. package/src/cli/commands/add-api.ts +51 -0
  34. package/src/cli/commands/ai-generate.ts +106 -0
  35. package/src/cli/commands/chat.ts +43 -0
  36. package/src/cli/commands/ci-init.ts +126 -0
  37. package/src/cli/commands/collections.ts +41 -0
  38. package/src/cli/commands/coverage.ts +65 -0
  39. package/src/cli/commands/doctor.ts +127 -0
  40. package/src/cli/commands/envs.ts +218 -0
  41. package/src/cli/commands/init.ts +84 -0
  42. package/src/cli/commands/mcp.ts +16 -0
  43. package/src/cli/commands/run.ts +137 -0
  44. package/src/cli/commands/runs.ts +108 -0
  45. package/src/cli/commands/serve.ts +22 -0
  46. package/src/cli/commands/update.ts +142 -0
  47. package/src/cli/commands/validate.ts +18 -0
  48. package/src/cli/index.ts +500 -0
  49. package/src/cli/output.ts +24 -0
  50. package/src/cli/runtime.ts +7 -0
  51. package/src/core/agent/agent-loop.ts +116 -0
  52. package/src/core/agent/context-manager.ts +41 -0
  53. package/src/core/agent/system-prompt.ts +33 -0
  54. package/src/core/agent/tools/diagnose-failure.ts +51 -0
  55. package/src/core/agent/tools/explore-api.ts +40 -0
  56. package/src/core/agent/tools/index.ts +48 -0
  57. package/src/core/agent/tools/manage-environment.ts +40 -0
  58. package/src/core/agent/tools/query-results.ts +40 -0
  59. package/src/core/agent/tools/run-tests.ts +38 -0
  60. package/src/core/agent/tools/send-request.ts +44 -0
  61. package/src/core/agent/tools/validate-tests.ts +23 -0
  62. package/src/core/agent/types.ts +22 -0
  63. package/src/core/generator/ai/ai-generator.ts +61 -0
  64. package/src/core/generator/ai/llm-client.ts +159 -0
  65. package/src/core/generator/ai/output-parser.ts +307 -0
  66. package/src/core/generator/ai/prompt-builder.ts +153 -0
  67. package/src/core/generator/ai/types.ts +56 -0
  68. package/src/core/generator/coverage-scanner.ts +87 -0
  69. package/src/core/generator/data-factory.ts +115 -0
  70. package/src/core/generator/index.ts +10 -0
  71. package/src/core/generator/openapi-reader.ts +142 -0
  72. package/src/core/generator/schema-utils.ts +52 -0
  73. package/src/core/generator/serializer.ts +189 -0
  74. package/src/core/generator/types.ts +47 -0
  75. package/src/core/parser/filter.ts +14 -0
  76. package/src/core/parser/index.ts +21 -0
  77. package/src/core/parser/schema.ts +175 -0
  78. package/src/core/parser/types.ts +50 -0
  79. package/src/core/parser/variables.ts +146 -0
  80. package/src/core/parser/yaml-parser.ts +85 -0
  81. package/src/core/reporter/console.ts +175 -0
  82. package/src/core/reporter/index.ts +23 -0
  83. package/src/core/reporter/json.ts +9 -0
  84. package/src/core/reporter/junit.ts +78 -0
  85. package/src/core/reporter/types.ts +12 -0
  86. package/src/core/runner/assertions.ts +172 -0
  87. package/src/core/runner/execute-run.ts +75 -0
  88. package/src/core/runner/executor.ts +150 -0
  89. package/src/core/runner/http-client.ts +69 -0
  90. package/src/core/runner/index.ts +12 -0
  91. package/src/core/runner/types.ts +48 -0
  92. package/src/core/setup-api.ts +97 -0
  93. package/src/core/utils.ts +9 -0
  94. package/src/db/queries.ts +868 -0
  95. package/src/db/schema.ts +215 -0
  96. package/src/mcp/server.ts +47 -0
  97. package/src/mcp/tools/ci-init.ts +57 -0
  98. package/src/mcp/tools/coverage-analysis.ts +58 -0
  99. package/src/mcp/tools/explore-api.ts +84 -0
  100. package/src/mcp/tools/generate-missing-tests.ts +80 -0
  101. package/src/mcp/tools/generate-tests-guide.ts +353 -0
  102. package/src/mcp/tools/manage-environment.ts +123 -0
  103. package/src/mcp/tools/manage-server.ts +87 -0
  104. package/src/mcp/tools/query-db.ts +141 -0
  105. package/src/mcp/tools/run-tests.ts +66 -0
  106. package/src/mcp/tools/save-test-suite.ts +164 -0
  107. package/src/mcp/tools/send-request.ts +53 -0
  108. package/src/mcp/tools/setup-api.ts +49 -0
  109. package/src/mcp/tools/validate-tests.ts +42 -0
  110. package/src/tui/chat-ui.ts +150 -0
  111. package/src/web/routes/api.ts +234 -0
  112. package/src/web/routes/dashboard.ts +348 -0
  113. package/src/web/routes/runs.ts +64 -0
  114. package/src/web/schemas.ts +121 -0
  115. package/src/web/server.ts +134 -0
  116. package/src/web/static/htmx.min.js +1 -0
  117. package/src/web/static/style.css +265 -0
  118. package/src/web/views/layout.ts +46 -0
  119. package/src/web/views/results.ts +209 -0
  120. package/tests/agent/agent-loop.test.ts +61 -0
  121. package/tests/agent/context-manager.test.ts +59 -0
  122. package/tests/agent/system-prompt.test.ts +42 -0
  123. package/tests/agent/tools/diagnose-failure.test.ts +85 -0
  124. package/tests/agent/tools/explore-api.test.ts +59 -0
  125. package/tests/agent/tools/manage-environment.test.ts +78 -0
  126. package/tests/agent/tools/query-results.test.ts +77 -0
  127. package/tests/agent/tools/run-tests.test.ts +89 -0
  128. package/tests/agent/tools/send-request.test.ts +78 -0
  129. package/tests/agent/tools/validate-tests.test.ts +59 -0
  130. package/tests/ai/ai-generator.integration.test.ts +131 -0
  131. package/tests/ai/llm-client.test.ts +145 -0
  132. package/tests/ai/output-parser.test.ts +132 -0
  133. package/tests/ai/prompt-builder.test.ts +67 -0
  134. package/tests/ai/types.test.ts +55 -0
  135. package/tests/cli/args.test.ts +63 -0
  136. package/tests/cli/chat.test.ts +38 -0
  137. package/tests/cli/ci-init.test.ts +112 -0
  138. package/tests/cli/commands.test.ts +316 -0
  139. package/tests/cli/coverage.test.ts +58 -0
  140. package/tests/cli/doctor.test.ts +39 -0
  141. package/tests/cli/envs.test.ts +181 -0
  142. package/tests/cli/init.test.ts +80 -0
  143. package/tests/cli/runs.test.ts +94 -0
  144. package/tests/cli/safe-run.test.ts +103 -0
  145. package/tests/cli/update.test.ts +32 -0
  146. package/tests/core/generator/schema-utils.test.ts +108 -0
  147. package/tests/core/parser/nested-assertions.test.ts +80 -0
  148. package/tests/core/runner/root-body-assertions.test.ts +70 -0
  149. package/tests/db/chat-queries.test.ts +88 -0
  150. package/tests/db/chat-schema.test.ts +37 -0
  151. package/tests/db/environments.test.ts +131 -0
  152. package/tests/db/queries.test.ts +409 -0
  153. package/tests/db/schema.test.ts +141 -0
  154. package/tests/fixtures/.env.yaml +3 -0
  155. package/tests/fixtures/auth-token-test.yaml +8 -0
  156. package/tests/fixtures/bail/suite-a.yaml +6 -0
  157. package/tests/fixtures/bail/suite-b.yaml +6 -0
  158. package/tests/fixtures/crud.yaml +35 -0
  159. package/tests/fixtures/invalid-missing-name.yaml +5 -0
  160. package/tests/fixtures/invalid-no-method.yaml +6 -0
  161. package/tests/fixtures/petstore-auth.json +295 -0
  162. package/tests/fixtures/petstore-simple.json +151 -0
  163. package/tests/fixtures/post-only.yaml +12 -0
  164. package/tests/fixtures/simple.yaml +6 -0
  165. package/tests/fixtures/valid/.env.yaml +1 -0
  166. package/tests/fixtures/valid/a.yaml +5 -0
  167. package/tests/fixtures/valid/b.yml +5 -0
  168. package/tests/generator/coverage-scanner.test.ts +129 -0
  169. package/tests/generator/data-factory.test.ts +133 -0
  170. package/tests/generator/openapi-reader.test.ts +131 -0
  171. package/tests/integration/auth-flow.test.ts +217 -0
  172. package/tests/mcp/coverage-analysis.test.ts +64 -0
  173. package/tests/mcp/explore-api-schemas.test.ts +105 -0
  174. package/tests/mcp/explore-api.test.ts +49 -0
  175. package/tests/mcp/generate-missing-tests.test.ts +69 -0
  176. package/tests/mcp/manage-environment.test.ts +89 -0
  177. package/tests/mcp/save-test-suite.test.ts +116 -0
  178. package/tests/mcp/send-request.test.ts +79 -0
  179. package/tests/mcp/setup-api.test.ts +106 -0
  180. package/tests/mcp/tools.test.ts +248 -0
  181. package/tests/parser/schema.test.ts +134 -0
  182. package/tests/parser/variables.test.ts +227 -0
  183. package/tests/parser/yaml-parser.test.ts +69 -0
  184. package/tests/reporter/console.test.ts +256 -0
  185. package/tests/reporter/json.test.ts +98 -0
  186. package/tests/reporter/junit.test.ts +284 -0
  187. package/tests/runner/assertions.test.ts +262 -0
  188. package/tests/runner/executor.test.ts +310 -0
  189. package/tests/runner/http-client.test.ts +138 -0
  190. package/tests/web/routes.test.ts +160 -0
  191. package/tsconfig.json +31 -0
package/docs/agent.md ADDED
@@ -0,0 +1,135 @@
1
+ # Agent Module — AI Chat Assistant
2
+
3
+ Интерактивный AI-агент для управления API-тестами через диалог в терминале.
4
+
5
+ ## Архитектура
6
+
7
+ ```
8
+ ┌──────────────┐
9
+ │ CLI: chat │ src/cli/commands/chat.ts
10
+ └──────┬───────┘
11
+
12
+ ┌──────▼───────┐
13
+ │ Chat UI │ src/tui/chat-ui.ts — readline TUI, ANSI colors
14
+ └──────┬───────┘
15
+ │ ModelMessage[]
16
+ ┌──────▼───────────────────────────────────────────┐
17
+ │ Agent Loop │
18
+ │ src/core/agent/agent-loop.ts │
19
+ │ │
20
+ │ ┌─────────────┐ ┌───────────────┐ │
21
+ │ │ buildModel │ │ prepareMessages│ │
22
+ │ │ (provider) │ │ (sys prompt) │ │
23
+ │ └──────┬──────┘ └───────┬───────┘ │
24
+ │ │ │ │
25
+ │ ▼ ▼ │
26
+ │ generateText({ model, messages, tools, │
27
+ │ stopWhen: stepCountIs(N) }) │
28
+ │ │ │
29
+ │ ▼ │
30
+ │ ┌──────────────────────────────────────┐ │
31
+ │ │ 7 Agent Tools │ │
32
+ │ │ run_tests validate_tests │ │
33
+ │ │ query_results manage_environment │ │
34
+ │ │ diagnose_failure send_request │ │
35
+ │ │ explore_api │ │
36
+ │ └──────────────────────────────────────┘ │
37
+ └───────────────────────────────────────────────────┘
38
+
39
+ ┌──────▼──────┐
40
+ │ Core APIs │ runner, parser, generator, db
41
+ └─────────────┘
42
+ ```
43
+
44
+ ## Запуск
45
+
46
+ ```bash
47
+ # Ollama (default: qwen3:4b)
48
+ apitool chat
49
+
50
+ # Другая модель
51
+ apitool chat --model llama3.2:3b
52
+
53
+ # OpenAI
54
+ apitool chat --provider openai --model gpt-4o --api-key sk-...
55
+
56
+ # Anthropic
57
+ apitool chat --provider anthropic --api-key sk-ant-...
58
+
59
+ # Safe mode — только GET тесты
60
+ apitool chat --safe
61
+ ```
62
+
63
+ ## Зависимости
64
+
65
+ - `ai@^6` — Vercel AI SDK v6 (`generateText`, `tool`, `stepCountIs`)
66
+ - `@ai-sdk/openai@^2` — провайдер для OpenAI/Ollama/Custom
67
+ - `@ai-sdk/anthropic@^2` — провайдер для Anthropic
68
+
69
+ ## Провайдеры
70
+
71
+ | Провайдер | API | Модель по умолчанию | Примечания |
72
+ |-----------|-----|---------------------|------------|
73
+ | `ollama` | OpenAI-compatible (.chat) | `qwen3:4b` | System prompt инжектируется в user message |
74
+ | `openai` | OpenAI Responses API | `gpt-4o` | Нативная поддержка system prompt |
75
+ | `anthropic` | Anthropic API | `claude-sonnet-4-20250514` | Нативная поддержка system prompt |
76
+ | `custom` | OpenAI-compatible (.chat) | — | Требуется `--base-url` и `--model` |
77
+
78
+ ### Quirk: Ollama + system prompt
79
+
80
+ Некоторые модели (qwen3 в thinking mode) не вызывают tools при наличии отдельного `system` сообщения.
81
+ Решение: для `ollama`/`custom` провайдеров system prompt инжектируется в первое user-сообщение.
82
+ Для `openai`/`anthropic` используется стандартный `system` параметр.
83
+
84
+ ## Tools
85
+
86
+ Каждый tool — AI SDK `tool()` с Zod `inputSchema`. Ошибки валидации аргументов автоматически возвращаются LLM для retry (фича AI SDK v6).
87
+
88
+ | Tool | Описание | Ключевые параметры |
89
+ |------|----------|--------------------|
90
+ | `run_tests` | Запуск тестов | `testPath`, `envName?`, `safe?` |
91
+ | `validate_tests` | Валидация YAML | `testPath` |
92
+ | `query_results` | Запрос к БД | `action`: `list_runs` / `get_run` / `list_collections` |
93
+ | `manage_environment` | Управление окружениями | `action`: `list` / `get` / `set`, `collectionName?` |
94
+ | `diagnose_failure` | Анализ падений | `runId` |
95
+ | `send_request` | Ad-hoc HTTP запрос | `method`, `url`, `headers?`, `body?`, `timeout?`, `envName?` |
96
+ | `explore_api` | Просмотр OpenAPI спеки | `specPath`, `tag?` |
97
+
98
+ ### Safe Mode
99
+
100
+ При `--safe` флаге `run_tests` принудительно получает `safe: true` — выполняются только GET-тесты. `send_request` в safe mode блокирует все методы кроме GET.
101
+
102
+ ## Context Manager
103
+
104
+ `context-manager.ts` управляет длиной диалога:
105
+ - До 20 сообщений — без изменений
106
+ - Более 20 — старые сообщения сжимаются в summary, последние 6 ходов сохраняются полностью
107
+ - Summary использует `role: "user"` для совместимости с API, требующими начала с user-сообщения
108
+
109
+ ## Файлы модуля
110
+
111
+ ```
112
+ src/core/agent/
113
+ ├── agent-loop.ts # buildProvider, buildModel, prepareMessages, runAgentTurn
114
+ ├── context-manager.ts # trimContext — управление длиной диалога
115
+ ├── system-prompt.ts # AGENT_SYSTEM_PROMPT — инструкции и примеры
116
+ ├── types.ts # AgentConfig, ToolEvent, AgentTurnResult
117
+ └── tools/
118
+ ├── index.ts # buildAgentTools — фабрика с safe mode wrapping
119
+ ├── run-tests.ts # tool() — запуск тестов
120
+ ├── validate-tests.ts # tool() — валидация YAML
121
+ ├── query-results.ts # tool() — запросы к БД
122
+ ├── manage-environment.ts # tool() — управление окружениями
123
+ ├── diagnose-failure.ts # tool() — анализ падений
124
+ ├── send-request.ts # tool() — ad-hoc HTTP запросы
125
+ └── explore-api.ts # tool() — просмотр OpenAPI спеки
126
+
127
+ src/tui/
128
+ └── chat-ui.ts # readline TUI — ввод, вывод, tool events
129
+
130
+ src/cli/commands/
131
+ └── chat.ts # CLI command — парсинг аргументов, запуск UI
132
+
133
+ tests/agent/ # 53 теста
134
+ tests/cli/chat.test.ts # 5 тестов CLI arg parsing
135
+ ```