thumbgate 0.9.9

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 (369) hide show
  1. package/.claude-plugin/README.md +134 -0
  2. package/.claude-plugin/bundle/icon.png +0 -0
  3. package/.claude-plugin/bundle/icon.svg +18 -0
  4. package/.claude-plugin/bundle/server/index.js +24 -0
  5. package/.claude-plugin/marketplace.json +36 -0
  6. package/.claude-plugin/plugin.json +21 -0
  7. package/.well-known/mcp/server-card.json +231 -0
  8. package/LICENSE +21 -0
  9. package/README.md +375 -0
  10. package/adapters/README.md +9 -0
  11. package/adapters/amp/skills/rlhf-feedback/SKILL.md +22 -0
  12. package/adapters/chatgpt/INSTALL.md +83 -0
  13. package/adapters/chatgpt/openapi.yaml +1281 -0
  14. package/adapters/claude/.mcp.json +14 -0
  15. package/adapters/codex/config.toml +9 -0
  16. package/adapters/gemini/function-declarations.json +224 -0
  17. package/adapters/mcp/server-stdio.js +788 -0
  18. package/adapters/opencode/opencode.json +15 -0
  19. package/bin/cli.js +1483 -0
  20. package/bin/memory.sh +64 -0
  21. package/bin/obsidian-sync.sh +20 -0
  22. package/bin/postinstall.js +37 -0
  23. package/config/build-metadata.json +4 -0
  24. package/config/e2e-critical-flows.json +45 -0
  25. package/config/gate-templates.json +77 -0
  26. package/config/gates/claim-verification.json +29 -0
  27. package/config/gates/computer-use.json +39 -0
  28. package/config/gates/default.json +117 -0
  29. package/config/github-about.json +25 -0
  30. package/config/mcp-allowlists.json +135 -0
  31. package/config/model-tiers.json +33 -0
  32. package/config/partner-routing.json +132 -0
  33. package/config/policy-bundles/constrained-v1.json +64 -0
  34. package/config/policy-bundles/default-v1.json +91 -0
  35. package/config/rubrics/default-v1.json +52 -0
  36. package/config/skill-packs/react-testing.json +23 -0
  37. package/config/skill-packs/stripe-integration/references/api-spec.json +1 -0
  38. package/config/skill-packs/stripe-integration/references/webhook-guide.md +3 -0
  39. package/config/skill-specs/pr-reviewer.json +9 -0
  40. package/config/skill-specs/release-status.json +9 -0
  41. package/config/skill-specs/ticket-triage.json +9 -0
  42. package/config/subagent-profiles.json +32 -0
  43. package/config/tessl-tiles.json +29 -0
  44. package/config/thumbgate-settings.managed.json +12 -0
  45. package/openapi/openapi.yaml +1281 -0
  46. package/package.json +286 -0
  47. package/plugins/amp-skill/INSTALL.md +52 -0
  48. package/plugins/amp-skill/SKILL.md +64 -0
  49. package/plugins/claude-codex-bridge/.claude-plugin/plugin.json +22 -0
  50. package/plugins/claude-codex-bridge/.mcp.json +12 -0
  51. package/plugins/claude-codex-bridge/INSTALL.md +43 -0
  52. package/plugins/claude-codex-bridge/README.md +46 -0
  53. package/plugins/claude-codex-bridge/scripts/codex-bridge.js +288 -0
  54. package/plugins/claude-codex-bridge/skills/adversarial-review/SKILL.md +24 -0
  55. package/plugins/claude-codex-bridge/skills/result/SKILL.md +22 -0
  56. package/plugins/claude-codex-bridge/skills/review/SKILL.md +28 -0
  57. package/plugins/claude-codex-bridge/skills/second-pass/SKILL.md +27 -0
  58. package/plugins/claude-codex-bridge/skills/setup/SKILL.md +21 -0
  59. package/plugins/claude-codex-bridge/skills/status/SKILL.md +19 -0
  60. package/plugins/claude-skill/INSTALL.md +55 -0
  61. package/plugins/claude-skill/SKILL.md +46 -0
  62. package/plugins/codex-profile/.codex-plugin/plugin.json +43 -0
  63. package/plugins/codex-profile/.mcp.json +12 -0
  64. package/plugins/codex-profile/AGENTS.md +20 -0
  65. package/plugins/codex-profile/INSTALL.md +66 -0
  66. package/plugins/codex-profile/README.md +37 -0
  67. package/plugins/cursor-marketplace/.cursor-plugin/plugin.json +23 -0
  68. package/plugins/cursor-marketplace/CHANGELOG.md +30 -0
  69. package/plugins/cursor-marketplace/LICENSE +21 -0
  70. package/plugins/cursor-marketplace/README.md +124 -0
  71. package/plugins/cursor-marketplace/agents/reliability-reviewer.md +31 -0
  72. package/plugins/cursor-marketplace/assets/logo-400x400.png +0 -0
  73. package/plugins/cursor-marketplace/commands/capture-feedback.md +33 -0
  74. package/plugins/cursor-marketplace/commands/check-gates.md +25 -0
  75. package/plugins/cursor-marketplace/commands/show-lessons.md +27 -0
  76. package/plugins/cursor-marketplace/hooks/hooks.json +10 -0
  77. package/plugins/cursor-marketplace/mcp.json +12 -0
  78. package/plugins/cursor-marketplace/rules/feedback-capture.mdc +34 -0
  79. package/plugins/cursor-marketplace/rules/pre-action-gates.mdc +30 -0
  80. package/plugins/cursor-marketplace/rules/session-continuity.mdc +28 -0
  81. package/plugins/cursor-marketplace/scripts/gate-check.sh +11 -0
  82. package/plugins/cursor-marketplace/skills/capture-feedback/SKILL.md +47 -0
  83. package/plugins/cursor-marketplace/skills/prevention-rules/SKILL.md +31 -0
  84. package/plugins/cursor-marketplace/skills/recall-context/SKILL.md +30 -0
  85. package/plugins/cursor-marketplace/skills/search-lessons/SKILL.md +33 -0
  86. package/plugins/gemini-extension/INSTALL.md +92 -0
  87. package/plugins/gemini-extension/gemini_prompt.txt +14 -0
  88. package/plugins/gemini-extension/tool_contract.json +45 -0
  89. package/plugins/opencode-profile/INSTALL.md +57 -0
  90. package/public/assets/instagram-card.png +0 -0
  91. package/public/assets/tiktok-agent-memory.mp4 +0 -0
  92. package/public/blog.html +400 -0
  93. package/public/dashboard.html +1093 -0
  94. package/public/guide.html +317 -0
  95. package/public/index.html +1195 -0
  96. package/public/learn/agent-harness-pattern.html +180 -0
  97. package/public/learn/ai-agent-persistent-memory.html +202 -0
  98. package/public/learn/learn.css +45 -0
  99. package/public/learn/mcp-pre-action-gates-explained.html +172 -0
  100. package/public/learn/stop-ai-agent-force-push.html +134 -0
  101. package/public/learn/vibe-coding-safety-net.html +142 -0
  102. package/public/learn.html +213 -0
  103. package/public/lessons.html +650 -0
  104. package/public/vercel.json +8 -0
  105. package/scripts/__pycache__/train_from_feedback.cpython-314.pyc +0 -0
  106. package/scripts/a2ui-engine.js +73 -0
  107. package/scripts/access-anomaly-detector.js +12 -0
  108. package/scripts/adk-consolidator.js +266 -0
  109. package/scripts/agent-readiness.js +220 -0
  110. package/scripts/agent-security-hardening.js +227 -0
  111. package/scripts/agentic-data-pipeline.js +847 -0
  112. package/scripts/analytics-report.js +328 -0
  113. package/scripts/analytics-window.js +158 -0
  114. package/scripts/async-job-runner.js +1001 -0
  115. package/scripts/audit-trail.js +398 -0
  116. package/scripts/auto-promote-gates.js +293 -0
  117. package/scripts/auto-wire-hooks.js +316 -0
  118. package/scripts/autonomous-sales-agent.js +39 -0
  119. package/scripts/autoresearch-runner.js +216 -0
  120. package/scripts/background-agent-governance.js +237 -0
  121. package/scripts/behavioral-extraction.js +93 -0
  122. package/scripts/belief-update.js +84 -0
  123. package/scripts/billing.js +2438 -0
  124. package/scripts/bot-detector.js +50 -0
  125. package/scripts/budget-guard.js +173 -0
  126. package/scripts/build-claude-mcpb.js +189 -0
  127. package/scripts/build-metadata.js +97 -0
  128. package/scripts/check-congruence.js +322 -0
  129. package/scripts/cli-feedback.js +135 -0
  130. package/scripts/cli-telemetry.js +87 -0
  131. package/scripts/cloudflare-dynamic-sandbox.js +315 -0
  132. package/scripts/code-reasoning.js +350 -0
  133. package/scripts/codegraph-context.js +466 -0
  134. package/scripts/commercial-offer.js +56 -0
  135. package/scripts/computer-use-firewall.js +250 -0
  136. package/scripts/context-engine.js +694 -0
  137. package/scripts/contextfs.js +1287 -0
  138. package/scripts/conversation-context.js +119 -0
  139. package/scripts/creator-campaigns.js +239 -0
  140. package/scripts/daemon-manager.js +108 -0
  141. package/scripts/daily-digest.js +11 -0
  142. package/scripts/dashboard-render-spec.js +395 -0
  143. package/scripts/dashboard.js +1058 -0
  144. package/scripts/data-governance.js +173 -0
  145. package/scripts/delegation-runtime.js +900 -0
  146. package/scripts/deploy-gcp.sh +44 -0
  147. package/scripts/deploy-policy.js +231 -0
  148. package/scripts/disagreement-mining.js +315 -0
  149. package/scripts/dispatch-brief.js +159 -0
  150. package/scripts/distribution-surfaces.js +44 -0
  151. package/scripts/dpo-optimizer.js +206 -0
  152. package/scripts/ensure-repo-bootstrap.js +129 -0
  153. package/scripts/ephemeral-agent-store.js +219 -0
  154. package/scripts/eval-harness.js +56 -0
  155. package/scripts/evolution-state.js +241 -0
  156. package/scripts/experiment-tracker.js +267 -0
  157. package/scripts/export-databricks-bundle.js +242 -0
  158. package/scripts/export-dpo-pairs.js +344 -0
  159. package/scripts/export-kto-pairs.js +309 -0
  160. package/scripts/export-training.js +450 -0
  161. package/scripts/failure-diagnostics.js +558 -0
  162. package/scripts/feedback-attribution.js +313 -0
  163. package/scripts/feedback-fallback.js +110 -0
  164. package/scripts/feedback-history-distiller.js +391 -0
  165. package/scripts/feedback-inbox-read.js +162 -0
  166. package/scripts/feedback-loop.js +1887 -0
  167. package/scripts/feedback-paths.js +145 -0
  168. package/scripts/feedback-quality.js +139 -0
  169. package/scripts/feedback-root-consolidator.js +238 -0
  170. package/scripts/feedback-schema.js +426 -0
  171. package/scripts/feedback-session.js +286 -0
  172. package/scripts/feedback-to-memory.js +185 -0
  173. package/scripts/feedback-to-rules.js +164 -0
  174. package/scripts/filesystem-search.js +405 -0
  175. package/scripts/funnel-analytics.js +35 -0
  176. package/scripts/gate-satisfy.js +42 -0
  177. package/scripts/gate-stats.js +116 -0
  178. package/scripts/gate-templates.js +70 -0
  179. package/scripts/gates-engine.js +816 -0
  180. package/scripts/generate-paperbanana-diagrams.sh +99 -0
  181. package/scripts/generate-pretool-hook.sh +40 -0
  182. package/scripts/github-about.js +350 -0
  183. package/scripts/github-outreach.js +65 -0
  184. package/scripts/gtm-revenue-loop.js +520 -0
  185. package/scripts/hallucination-detector.js +226 -0
  186. package/scripts/hf-papers.js +317 -0
  187. package/scripts/history-distiller.js +200 -0
  188. package/scripts/hook-auto-capture.sh +100 -0
  189. package/scripts/hook-stop-pr-thread-check.sh +68 -0
  190. package/scripts/hook-stop-self-score.sh +51 -0
  191. package/scripts/hook-stop-verify-deploy.sh +31 -0
  192. package/scripts/hook-thumbgate-cache-updater.js +48 -0
  193. package/scripts/hook-verify-before-done.sh +20 -0
  194. package/scripts/hosted-config.js +156 -0
  195. package/scripts/hybrid-feedback-context.js +675 -0
  196. package/scripts/install-mcp.js +159 -0
  197. package/scripts/intent-router.js +392 -0
  198. package/scripts/internal-agent-bootstrap.js +490 -0
  199. package/scripts/jsonl-watcher.js +155 -0
  200. package/scripts/lesson-db.js +613 -0
  201. package/scripts/lesson-inference.js +310 -0
  202. package/scripts/lesson-retrieval.js +95 -0
  203. package/scripts/lesson-rotation.js +137 -0
  204. package/scripts/lesson-search.js +644 -0
  205. package/scripts/lesson-synthesis.js +196 -0
  206. package/scripts/license.js +50 -0
  207. package/scripts/local-model-profile.js +384 -0
  208. package/scripts/markdown-escape.js +12 -0
  209. package/scripts/marketing-experiment.js +671 -0
  210. package/scripts/mcp-config.js +149 -0
  211. package/scripts/mcp-policy.js +99 -0
  212. package/scripts/memalign-recall.js +111 -0
  213. package/scripts/memory-firewall.js +222 -0
  214. package/scripts/memory-migration.js +296 -0
  215. package/scripts/meta-policy.js +190 -0
  216. package/scripts/metered-billing.js +16 -0
  217. package/scripts/model-tier-router.js +301 -0
  218. package/scripts/money-watcher.js +71 -0
  219. package/scripts/multi-hop-recall.js +240 -0
  220. package/scripts/natural-language-harness.js +330 -0
  221. package/scripts/obsidian-export.js +713 -0
  222. package/scripts/operational-dashboard.js +103 -0
  223. package/scripts/operational-summary.js +93 -0
  224. package/scripts/optimize-context.js +17 -0
  225. package/scripts/org-dashboard.js +201 -0
  226. package/scripts/partner-orchestration.js +146 -0
  227. package/scripts/per-step-scoring.js +165 -0
  228. package/scripts/perplexity-marketing.js +466 -0
  229. package/scripts/pii-scanner.js +153 -0
  230. package/scripts/plan-gate.js +154 -0
  231. package/scripts/post-everywhere.js +308 -0
  232. package/scripts/post-to-x-retry.sh +22 -0
  233. package/scripts/post-to-x.js +369 -0
  234. package/scripts/pr-manager.js +236 -0
  235. package/scripts/predictive-insights.js +356 -0
  236. package/scripts/principle-extractor.js +162 -0
  237. package/scripts/pro-features.js +40 -0
  238. package/scripts/pro-local-dashboard.js +174 -0
  239. package/scripts/problem-detail.js +53 -0
  240. package/scripts/product-feedback.js +134 -0
  241. package/scripts/profile-router.js +245 -0
  242. package/scripts/prompt-dlp.js +221 -0
  243. package/scripts/prompt-guard.js +83 -0
  244. package/scripts/prove-adapters.js +863 -0
  245. package/scripts/prove-attribution.js +365 -0
  246. package/scripts/prove-automation.js +653 -0
  247. package/scripts/prove-autoresearch.js +304 -0
  248. package/scripts/prove-claim-verification.js +277 -0
  249. package/scripts/prove-cloudflare-sandbox.js +163 -0
  250. package/scripts/prove-data-pipeline.js +410 -0
  251. package/scripts/prove-data-quality.js +227 -0
  252. package/scripts/prove-evolution.js +352 -0
  253. package/scripts/prove-harnesses.js +287 -0
  254. package/scripts/prove-intelligence.js +259 -0
  255. package/scripts/prove-lancedb.js +371 -0
  256. package/scripts/prove-local-intelligence.js +342 -0
  257. package/scripts/prove-loop-closure.js +263 -0
  258. package/scripts/prove-predictive-insights.js +357 -0
  259. package/scripts/prove-runtime.js +350 -0
  260. package/scripts/prove-seo-gsd.js +234 -0
  261. package/scripts/prove-settings.js +279 -0
  262. package/scripts/prove-subway-upgrades.js +277 -0
  263. package/scripts/prove-tessl.js +229 -0
  264. package/scripts/prove-training-export.js +327 -0
  265. package/scripts/prove-workflow-contract.js +116 -0
  266. package/scripts/prove-xmemory.js +332 -0
  267. package/scripts/publish-decision.js +133 -0
  268. package/scripts/pulse.js +80 -0
  269. package/scripts/rate-limiter.js +125 -0
  270. package/scripts/reddit-dm-outreach.js +182 -0
  271. package/scripts/reddit-monitor-cron.sh +26 -0
  272. package/scripts/reflector-agent.js +221 -0
  273. package/scripts/reminder-engine.js +132 -0
  274. package/scripts/revenue-status.js +472 -0
  275. package/scripts/risk-scorer.js +459 -0
  276. package/scripts/rlaif-self-audit.js +129 -0
  277. package/scripts/rlhf_session_start.sh +32 -0
  278. package/scripts/rubric-engine.js +230 -0
  279. package/scripts/schedule-manager.js +251 -0
  280. package/scripts/secret-scanner.js +414 -0
  281. package/scripts/self-heal.js +147 -0
  282. package/scripts/self-healing-check.js +188 -0
  283. package/scripts/semantic-layer.js +98 -0
  284. package/scripts/seo-gsd.js +1153 -0
  285. package/scripts/settings-hierarchy.js +214 -0
  286. package/scripts/shieldcortex-memory-firewall-runner.mjs +53 -0
  287. package/scripts/skill-exporter.js +262 -0
  288. package/scripts/skill-generator.js +446 -0
  289. package/scripts/skill-materializer.js +134 -0
  290. package/scripts/skill-packs.js +136 -0
  291. package/scripts/skill-proposer.js +99 -0
  292. package/scripts/skill-quality-tracker.js +282 -0
  293. package/scripts/slo-alert-engine.js +14 -0
  294. package/scripts/slow-loop.js +72 -0
  295. package/scripts/social-analytics/db/schema.sql +32 -0
  296. package/scripts/social-analytics/db/social-analytics.db +0 -0
  297. package/scripts/social-analytics/digest.js +256 -0
  298. package/scripts/social-analytics/generate-instagram-card.js +97 -0
  299. package/scripts/social-analytics/instagram-thumbgate-post.js +107 -0
  300. package/scripts/social-analytics/load-env.js +46 -0
  301. package/scripts/social-analytics/mcp-server.js +289 -0
  302. package/scripts/social-analytics/normalizer.js +580 -0
  303. package/scripts/social-analytics/notify.js +162 -0
  304. package/scripts/social-analytics/poll-all.js +92 -0
  305. package/scripts/social-analytics/pollers/github.js +195 -0
  306. package/scripts/social-analytics/pollers/instagram.js +253 -0
  307. package/scripts/social-analytics/pollers/linkedin.js +330 -0
  308. package/scripts/social-analytics/pollers/plausible.js +247 -0
  309. package/scripts/social-analytics/pollers/reddit.js +306 -0
  310. package/scripts/social-analytics/pollers/threads.js +233 -0
  311. package/scripts/social-analytics/pollers/tiktok.js +203 -0
  312. package/scripts/social-analytics/pollers/x.js +227 -0
  313. package/scripts/social-analytics/pollers/youtube.js +304 -0
  314. package/scripts/social-analytics/pollers/zernio.js +183 -0
  315. package/scripts/social-analytics/publish-instagram-thumbgate.js +98 -0
  316. package/scripts/social-analytics/publish-thumbgate-launch.js +316 -0
  317. package/scripts/social-analytics/publishers/devto.js +122 -0
  318. package/scripts/social-analytics/publishers/instagram.js +317 -0
  319. package/scripts/social-analytics/publishers/linkedin.js +294 -0
  320. package/scripts/social-analytics/publishers/reddit.js +390 -0
  321. package/scripts/social-analytics/publishers/threads.js +275 -0
  322. package/scripts/social-analytics/publishers/tiktok.js +217 -0
  323. package/scripts/social-analytics/publishers/x.js +259 -0
  324. package/scripts/social-analytics/publishers/youtube.js +223 -0
  325. package/scripts/social-analytics/publishers/zernio.js +378 -0
  326. package/scripts/social-analytics/run-digest.js +34 -0
  327. package/scripts/social-analytics/store.js +257 -0
  328. package/scripts/social-analytics/utm.js +143 -0
  329. package/scripts/social-pipeline.js +2628 -0
  330. package/scripts/social-quality-gate.js +18 -0
  331. package/scripts/social-reply-monitor.js +445 -0
  332. package/scripts/status-dashboard.js +155 -0
  333. package/scripts/statusline-lesson.js +16 -0
  334. package/scripts/statusline-tower.js +8 -0
  335. package/scripts/statusline.sh +116 -0
  336. package/scripts/stripe-live-status.js +115 -0
  337. package/scripts/subagent-profiles.js +79 -0
  338. package/scripts/sync-gh-secrets-from-env.sh +70 -0
  339. package/scripts/sync-github-about.js +52 -0
  340. package/scripts/sync-version.js +447 -0
  341. package/scripts/synthetic-dpo.js +234 -0
  342. package/scripts/telemetry-analytics.js +821 -0
  343. package/scripts/tessl-export.js +371 -0
  344. package/scripts/test-coverage.js +120 -0
  345. package/scripts/thompson-sampling.js +417 -0
  346. package/scripts/thumbgate-search.js +189 -0
  347. package/scripts/tool-kpi-tracker.js +12 -0
  348. package/scripts/tool-registry.js +811 -0
  349. package/scripts/train_from_feedback.py +933 -0
  350. package/scripts/user-profile.js +78 -0
  351. package/scripts/validate-feedback.js +581 -0
  352. package/scripts/validate-workflow-contract.js +287 -0
  353. package/scripts/vector-store.js +197 -0
  354. package/scripts/verification-loop.js +291 -0
  355. package/scripts/verify-obsidian-setup.sh +269 -0
  356. package/scripts/verify-run.js +269 -0
  357. package/scripts/webhook-delivery.js +62 -0
  358. package/scripts/weekly-auto-post.js +124 -0
  359. package/scripts/workflow-runs.js +154 -0
  360. package/scripts/workflow-sprint-intake.js +475 -0
  361. package/scripts/workspace-evolver.js +374 -0
  362. package/scripts/x-autonomous-marketing.js +139 -0
  363. package/scripts/xmemory-lite.js +405 -0
  364. package/skills/agent-memory/SKILL.md +97 -0
  365. package/skills/rlhf-feedback/SKILL.md +49 -0
  366. package/skills/solve-architecture-autonomy/SKILL.md +17 -0
  367. package/skills/solve-architecture-autonomy/tool.js +33 -0
  368. package/skills/thumbgate/SKILL.md +114 -0
  369. package/src/api/server.js +4206 -0
@@ -0,0 +1,1281 @@
1
+ openapi: 3.1.0
2
+ info:
3
+ title: ThumbGate API
4
+ version: 1.2.0
5
+ description: |
6
+ Production API for feedback capture, schema-validated memory promotion,
7
+ prevention rule generation, and DPO export.
8
+ Bare up/down signals are logged immediately, but the API returns
9
+ clarification_required until one sentence explains what worked or failed.
10
+ When the explanation is specific enough, ThumbGate infers a domain tag if
11
+ the caller omitted manual tags so the feedback can still promote cleanly.
12
+ servers:
13
+ - url: https://thumbgate-production.up.railway.app
14
+ security:
15
+ - bearerAuth: []
16
+ components:
17
+ securitySchemes:
18
+ bearerAuth:
19
+ type: http
20
+ scheme: bearer
21
+ bearerFormat: API Key
22
+ schemas:
23
+ RubricScore:
24
+ type: object
25
+ required: [criterion, score]
26
+ properties:
27
+ criterion:
28
+ type: string
29
+ score:
30
+ type: number
31
+ minimum: 1
32
+ maximum: 5
33
+ evidence:
34
+ type: string
35
+ judge:
36
+ type: string
37
+ CaptureFeedbackRequest:
38
+ type: object
39
+ required: [signal]
40
+ properties:
41
+ signal:
42
+ type: string
43
+ enum: [up, down, positive, negative]
44
+ context:
45
+ type: string
46
+ description: One-sentence reason describing what worked or failed
47
+ whatWentWrong:
48
+ type: string
49
+ whatToChange:
50
+ type: string
51
+ whatWorked:
52
+ type: string
53
+ rubricScores:
54
+ type: array
55
+ items:
56
+ $ref: '#/components/schemas/RubricScore'
57
+ guardrails:
58
+ type: object
59
+ properties:
60
+ testsPassed:
61
+ type: boolean
62
+ pathSafety:
63
+ type: boolean
64
+ budgetCompliant:
65
+ type: boolean
66
+ tags:
67
+ oneOf:
68
+ - type: array
69
+ items:
70
+ type: string
71
+ - type: string
72
+ description: Optional domain tags. If omitted, ThumbGate infers one from the feedback text before promotion.
73
+ skill:
74
+ type: string
75
+ IntentPlanRequest:
76
+ type: object
77
+ required: [intentId]
78
+ properties:
79
+ intentId:
80
+ type: string
81
+ context:
82
+ type: string
83
+ mcpProfile:
84
+ type: string
85
+ bundleId:
86
+ type: string
87
+ partnerProfile:
88
+ type: string
89
+ delegationMode:
90
+ type: string
91
+ enum: [off, auto, sequential]
92
+ approved:
93
+ type: boolean
94
+ repoPath:
95
+ type: string
96
+ InternalAgentBootstrapRequest:
97
+ type: object
98
+ required: [source]
99
+ properties:
100
+ source:
101
+ type: string
102
+ enum: [github, slack, linear, api, cli]
103
+ repoPath:
104
+ type: string
105
+ prepareSandbox:
106
+ type: boolean
107
+ sandboxRoot:
108
+ type: string
109
+ intentId:
110
+ type: string
111
+ context:
112
+ type: string
113
+ mcpProfile:
114
+ type: string
115
+ partnerProfile:
116
+ type: string
117
+ delegationMode:
118
+ type: string
119
+ enum: [off, auto, sequential]
120
+ approved:
121
+ type: boolean
122
+ trigger:
123
+ type: object
124
+ properties:
125
+ type:
126
+ type: string
127
+ id:
128
+ type: string
129
+ url:
130
+ type: string
131
+ actor:
132
+ type: string
133
+ thread:
134
+ type: object
135
+ properties:
136
+ id:
137
+ type: string
138
+ title:
139
+ type: string
140
+ url:
141
+ type: string
142
+ task:
143
+ type: object
144
+ properties:
145
+ title:
146
+ type: string
147
+ body:
148
+ type: string
149
+ number:
150
+ type: string
151
+ branch:
152
+ type: string
153
+ labels:
154
+ type: array
155
+ items:
156
+ type: string
157
+ comments:
158
+ type: array
159
+ items:
160
+ type: object
161
+ properties:
162
+ author:
163
+ type: string
164
+ text:
165
+ type: string
166
+ timestamp:
167
+ type: string
168
+ messages:
169
+ type: array
170
+ items:
171
+ type: object
172
+ properties:
173
+ author:
174
+ type: string
175
+ text:
176
+ type: string
177
+ timestamp:
178
+ type: string
179
+ HandoffStartRequest:
180
+ type: object
181
+ required: [intentId]
182
+ properties:
183
+ intentId:
184
+ type: string
185
+ context:
186
+ type: string
187
+ mcpProfile:
188
+ type: string
189
+ bundleId:
190
+ type: string
191
+ partnerProfile:
192
+ type: string
193
+ approved:
194
+ type: boolean
195
+ repoPath:
196
+ type: string
197
+ delegateProfile:
198
+ type: string
199
+ plannedChecks:
200
+ type: array
201
+ items:
202
+ type: string
203
+ HandoffCompleteRequest:
204
+ type: object
205
+ required: [handoffId, outcome]
206
+ properties:
207
+ handoffId:
208
+ type: string
209
+ outcome:
210
+ type: string
211
+ enum: [accepted, rejected, aborted]
212
+ resultContext:
213
+ type: string
214
+ attempts:
215
+ type: number
216
+ violationCount:
217
+ type: number
218
+ tokenEstimate:
219
+ type: number
220
+ latencyMs:
221
+ type: number
222
+ summary:
223
+ type: string
224
+ BillingCheckoutRequest:
225
+ type: object
226
+ properties:
227
+ successUrl:
228
+ type: string
229
+ format: uri
230
+ cancelUrl:
231
+ type: string
232
+ format: uri
233
+ customerEmail:
234
+ type: string
235
+ format: email
236
+ installId:
237
+ type: string
238
+ metadata:
239
+ type: object
240
+ additionalProperties:
241
+ type: string
242
+ BillingProvisionRequest:
243
+ type: object
244
+ required: [customerId]
245
+ properties:
246
+ customerId:
247
+ type: string
248
+ installId:
249
+ type: string
250
+ WorkflowSprintIntakeRequest:
251
+ type: object
252
+ required: [email, workflow, owner, blocker, runtime]
253
+ properties:
254
+ email:
255
+ type: string
256
+ format: email
257
+ company:
258
+ type: string
259
+ workflow:
260
+ type: string
261
+ owner:
262
+ type: string
263
+ blocker:
264
+ type: string
265
+ runtime:
266
+ type: string
267
+ note:
268
+ type: string
269
+ acquisitionId:
270
+ type: string
271
+ visitorId:
272
+ type: string
273
+ sessionId:
274
+ type: string
275
+ traceId:
276
+ type: string
277
+ installId:
278
+ type: string
279
+ source:
280
+ type: string
281
+ utmSource:
282
+ type: string
283
+ utmMedium:
284
+ type: string
285
+ utmCampaign:
286
+ type: string
287
+ utmContent:
288
+ type: string
289
+ utmTerm:
290
+ type: string
291
+ community:
292
+ type: string
293
+ postId:
294
+ type: string
295
+ commentId:
296
+ type: string
297
+ campaignVariant:
298
+ type: string
299
+ offerCode:
300
+ type: string
301
+ ctaId:
302
+ type: string
303
+ ctaPlacement:
304
+ type: string
305
+ planId:
306
+ type: string
307
+ page:
308
+ type: string
309
+ landingPath:
310
+ type: string
311
+ referrerHost:
312
+ type: string
313
+ referrer:
314
+ type: string
315
+ WorkflowSprintIntakeResponse:
316
+ type: object
317
+ properties:
318
+ ok:
319
+ type: boolean
320
+ leadId:
321
+ type: string
322
+ status:
323
+ type: string
324
+ offer:
325
+ type: string
326
+ nextStep:
327
+ type: string
328
+ proofPackUrl:
329
+ type: string
330
+ format: uri
331
+ sprintBriefUrl:
332
+ type: string
333
+ format: uri
334
+ WorkflowSprintAdvanceRequest:
335
+ type: object
336
+ required: [leadId, status]
337
+ properties:
338
+ leadId:
339
+ type: string
340
+ status:
341
+ type: string
342
+ enum: [new, qualified, named_pilot, proof_backed_run, paid_team]
343
+ actor:
344
+ type: string
345
+ note:
346
+ type: string
347
+ reviewedBy:
348
+ type: string
349
+ workflowId:
350
+ type: string
351
+ teamId:
352
+ type: string
353
+ proofArtifacts:
354
+ type: array
355
+ items:
356
+ type: string
357
+ WorkflowSprintAdvanceResponse:
358
+ type: object
359
+ properties:
360
+ ok:
361
+ type: boolean
362
+ unchanged:
363
+ type: boolean
364
+ lead:
365
+ type: object
366
+ additionalProperties: true
367
+ workflowRun:
368
+ type: object
369
+ nullable: true
370
+ additionalProperties: true
371
+ FunnelAnalyticsResponse:
372
+ type: object
373
+ properties:
374
+ totalEvents:
375
+ type: integer
376
+ stageCounts:
377
+ type: object
378
+ properties:
379
+ acquisition:
380
+ type: integer
381
+ activation:
382
+ type: integer
383
+ paid:
384
+ type: integer
385
+ eventCounts:
386
+ type: object
387
+ additionalProperties:
388
+ type: integer
389
+ conversionRates:
390
+ type: object
391
+ properties:
392
+ acquisitionToActivation:
393
+ type: number
394
+ activationToPaid:
395
+ type: number
396
+ acquisitionToPaid:
397
+ type: number
398
+ paidProviderEvents:
399
+ type: integer
400
+ BillingSummaryResponse:
401
+ type: object
402
+ properties:
403
+ generatedAt:
404
+ type: string
405
+ format: date-time
406
+ coverage:
407
+ type: object
408
+ properties:
409
+ source:
410
+ type: string
411
+ tracksBookedRevenue:
412
+ type: boolean
413
+ tracksPaidOrders:
414
+ type: boolean
415
+ tracksInvoices:
416
+ type: boolean
417
+ tracksAttribution:
418
+ type: boolean
419
+ providerCoverage:
420
+ type: object
421
+ additionalProperties:
422
+ type: string
423
+ funnel:
424
+ allOf:
425
+ - $ref: '#/components/schemas/FunnelAnalyticsResponse'
426
+ - type: object
427
+ properties:
428
+ uniqueAcquisitionLeads:
429
+ type: integer
430
+ uniquePaidCustomers:
431
+ type: integer
432
+ firstPaidAt:
433
+ type: string
434
+ nullable: true
435
+ lastPaidAt:
436
+ type: string
437
+ nullable: true
438
+ lastPaidEvent:
439
+ type: object
440
+ nullable: true
441
+ properties:
442
+ timestamp:
443
+ type: string
444
+ nullable: true
445
+ event:
446
+ type: string
447
+ nullable: true
448
+ evidence:
449
+ type: string
450
+ nullable: true
451
+ customerId:
452
+ type: string
453
+ nullable: true
454
+ traceId:
455
+ type: string
456
+ nullable: true
457
+ signups:
458
+ type: object
459
+ properties:
460
+ total:
461
+ type: integer
462
+ uniqueLeads:
463
+ type: integer
464
+ bySource:
465
+ type: object
466
+ additionalProperties:
467
+ type: integer
468
+ byCampaign:
469
+ type: object
470
+ additionalProperties:
471
+ type: integer
472
+ pipeline:
473
+ type: object
474
+ properties:
475
+ workflowSprintLeads:
476
+ type: object
477
+ properties:
478
+ total:
479
+ type: integer
480
+ bySource:
481
+ type: object
482
+ additionalProperties:
483
+ type: integer
484
+ qualifiedWorkflowSprintLeads:
485
+ type: object
486
+ properties:
487
+ total:
488
+ type: integer
489
+ bySource:
490
+ type: object
491
+ additionalProperties:
492
+ type: integer
493
+ revenue:
494
+ type: object
495
+ properties:
496
+ paidProviderEvents:
497
+ type: integer
498
+ paidOrders:
499
+ type: integer
500
+ paidCustomers:
501
+ type: integer
502
+ bookedRevenueCents:
503
+ type: integer
504
+ bookedRevenueByCurrency:
505
+ type: object
506
+ additionalProperties:
507
+ type: integer
508
+ amountKnownOrders:
509
+ type: integer
510
+ amountUnknownOrders:
511
+ type: integer
512
+ amountKnownCoverageRate:
513
+ type: number
514
+ unreconciledPaidEvents:
515
+ type: integer
516
+ latestPaidAt:
517
+ type: string
518
+ nullable: true
519
+ latestPaidOrder:
520
+ type: object
521
+ nullable: true
522
+ properties:
523
+ timestamp:
524
+ type: string
525
+ nullable: true
526
+ provider:
527
+ type: string
528
+ nullable: true
529
+ event:
530
+ type: string
531
+ nullable: true
532
+ orderId:
533
+ type: string
534
+ nullable: true
535
+ customerId:
536
+ type: string
537
+ nullable: true
538
+ amountCents:
539
+ type: integer
540
+ nullable: true
541
+ currency:
542
+ type: string
543
+ nullable: true
544
+ amountKnown:
545
+ type: boolean
546
+ byProvider:
547
+ type: object
548
+ additionalProperties:
549
+ type: object
550
+ properties:
551
+ paidOrders:
552
+ type: integer
553
+ bookedRevenueCents:
554
+ type: integer
555
+ amountKnownOrders:
556
+ type: integer
557
+ amountUnknownOrders:
558
+ type: integer
559
+ bookedRevenueByCurrency:
560
+ type: object
561
+ additionalProperties:
562
+ type: integer
563
+ attribution:
564
+ type: object
565
+ properties:
566
+ acquisitionBySource:
567
+ type: object
568
+ additionalProperties:
569
+ type: integer
570
+ acquisitionByCampaign:
571
+ type: object
572
+ additionalProperties:
573
+ type: integer
574
+ paidBySource:
575
+ type: object
576
+ additionalProperties:
577
+ type: integer
578
+ paidByCampaign:
579
+ type: object
580
+ additionalProperties:
581
+ type: integer
582
+ bookedRevenueBySourceCents:
583
+ type: object
584
+ additionalProperties:
585
+ type: integer
586
+ bookedRevenueByCampaignCents:
587
+ type: object
588
+ additionalProperties:
589
+ type: integer
590
+ conversionBySource:
591
+ type: object
592
+ additionalProperties:
593
+ type: number
594
+ conversionByCampaign:
595
+ type: object
596
+ additionalProperties:
597
+ type: number
598
+ keys:
599
+ type: object
600
+ properties:
601
+ total:
602
+ type: integer
603
+ active:
604
+ type: integer
605
+ disabled:
606
+ type: integer
607
+ activeCustomers:
608
+ type: integer
609
+ totalUsage:
610
+ type: integer
611
+ bySource:
612
+ type: object
613
+ additionalProperties:
614
+ type: integer
615
+ activeBySource:
616
+ type: object
617
+ additionalProperties:
618
+ type: integer
619
+ customers:
620
+ type: array
621
+ items:
622
+ type: object
623
+ properties:
624
+ customerId:
625
+ type: string
626
+ activeKeys:
627
+ type: integer
628
+ totalKeys:
629
+ type: integer
630
+ usageCount:
631
+ type: integer
632
+ source:
633
+ type: string
634
+ installId:
635
+ type: string
636
+ nullable: true
637
+ createdAt:
638
+ type: string
639
+ nullable: true
640
+ disabledAt:
641
+ type: string
642
+ nullable: true
643
+ trafficMetrics:
644
+ type: object
645
+ properties:
646
+ visitors:
647
+ type: integer
648
+ sessions:
649
+ type: integer
650
+ pageViews:
651
+ type: integer
652
+ ctaClicks:
653
+ type: integer
654
+ checkoutStarts:
655
+ type: integer
656
+ buyerLossFeedback:
657
+ type: integer
658
+ seoLandingViews:
659
+ type: integer
660
+ operatorGeneratedAcquisition:
661
+ type: object
662
+ properties:
663
+ totalEvents:
664
+ type: integer
665
+ uniqueLeads:
666
+ type: integer
667
+ bySource:
668
+ type: object
669
+ additionalProperties:
670
+ type: integer
671
+ dataQuality:
672
+ type: object
673
+ properties:
674
+ telemetryCoverage:
675
+ type: number
676
+ attributionCoverage:
677
+ type: number
678
+ amountKnownCoverage:
679
+ type: number
680
+ unreconciledPaidEvents:
681
+ type: integer
682
+ paths:
683
+ /healthz:
684
+ get:
685
+ operationId: healthz
686
+ responses:
687
+ '200':
688
+ description: Service health
689
+ '401':
690
+ description: Unauthorized
691
+ /v1/feedback/capture:
692
+ post:
693
+ operationId: captureFeedback
694
+ requestBody:
695
+ required: true
696
+ content:
697
+ application/json:
698
+ schema:
699
+ $ref: '#/components/schemas/CaptureFeedbackRequest'
700
+ responses:
701
+ '200':
702
+ description: Feedback accepted and promoted to memory
703
+ '422':
704
+ description: Feedback logged only; clarification required or promotion rejected
705
+ '401':
706
+ description: Unauthorized
707
+ /v1/feedback/stats:
708
+ get:
709
+ operationId: getFeedbackStats
710
+ responses:
711
+ '200':
712
+ description: Aggregated feedback statistics
713
+ '401':
714
+ description: Unauthorized
715
+ /v1/feedback/infer:
716
+ post:
717
+ operationId: inferLessonFromHistory
718
+ requestBody:
719
+ required: true
720
+ content:
721
+ application/json:
722
+ schema:
723
+ $ref: '#/components/schemas/InferLessonRequest'
724
+ responses:
725
+ '200':
726
+ description: Distilled lesson from chat history
727
+ '401':
728
+ description: Unauthorized
729
+ /v1/telemetry/ping:
730
+ post:
731
+ operationId: recordTelemetryPing
732
+ requestBody:
733
+ required: false
734
+ content:
735
+ application/json:
736
+ schema:
737
+ type: object
738
+ additionalProperties: true
739
+ responses:
740
+ '204':
741
+ description: Telemetry accepted on a best-effort basis
742
+ /v1/analytics/funnel:
743
+ get:
744
+ operationId: getFunnelAnalytics
745
+ responses:
746
+ '200':
747
+ description: Acquisition/activation/paid funnel metrics from append-only ledger
748
+ content:
749
+ application/json:
750
+ schema:
751
+ $ref: '#/components/schemas/FunnelAnalyticsResponse'
752
+ '401':
753
+ description: Unauthorized
754
+ /v1/dashboard:
755
+ get:
756
+ operationId: getDashboard
757
+ parameters:
758
+ - in: query
759
+ name: window
760
+ schema:
761
+ type: string
762
+ enum: [today, 7d, 30d, lifetime]
763
+ - in: query
764
+ name: timezone
765
+ schema:
766
+ type: string
767
+ - in: query
768
+ name: now
769
+ schema:
770
+ type: string
771
+ format: date-time
772
+ responses:
773
+ '200':
774
+ description: Full ThumbGate dashboard with feedback, telemetry, funnel, and observability analytics
775
+ content:
776
+ application/json:
777
+ schema:
778
+ type: object
779
+ additionalProperties: true
780
+ '401':
781
+ description: Unauthorized
782
+ /v1/dashboard/render-spec:
783
+ get:
784
+ operationId: getDashboardRenderSpec
785
+ parameters:
786
+ - in: query
787
+ name: view
788
+ schema:
789
+ type: string
790
+ enum: [team-review, incident-review, workflow-rollout]
791
+ - in: query
792
+ name: window
793
+ schema:
794
+ type: string
795
+ enum: [today, 7d, 30d, lifetime]
796
+ - in: query
797
+ name: timezone
798
+ schema:
799
+ type: string
800
+ - in: query
801
+ name: now
802
+ schema:
803
+ type: string
804
+ format: date-time
805
+ responses:
806
+ '200':
807
+ description: Constrained JSON render spec for hosted Team and operations dashboard views
808
+ content:
809
+ application/json:
810
+ schema:
811
+ type: object
812
+ additionalProperties: true
813
+ '400':
814
+ description: Invalid dashboard render view or query
815
+ '401':
816
+ description: Unauthorized
817
+ /v1/settings/status:
818
+ get:
819
+ operationId: getSettingsStatus
820
+ responses:
821
+ '200':
822
+ description: Resolved settings hierarchy with per-field origin metadata for managed, user, project, and local scopes
823
+ content:
824
+ application/json:
825
+ schema:
826
+ type: object
827
+ additionalProperties: true
828
+ '401':
829
+ description: Unauthorized
830
+ /v1/billing/summary:
831
+ get:
832
+ operationId: getBillingSummary
833
+ responses:
834
+ '200':
835
+ description: Admin-only business summary from the funnel ledger, revenue ledger, and key store
836
+ content:
837
+ application/json:
838
+ schema:
839
+ $ref: '#/components/schemas/BillingSummaryResponse'
840
+ '401':
841
+ description: Unauthorized
842
+ '403':
843
+ description: Forbidden
844
+ /v1/intake/workflow-sprint:
845
+ post:
846
+ operationId: submitWorkflowSprintIntake
847
+ requestBody:
848
+ required: true
849
+ content:
850
+ application/json:
851
+ schema:
852
+ $ref: '#/components/schemas/WorkflowSprintIntakeRequest'
853
+ responses:
854
+ '201':
855
+ description: Workflow Hardening Sprint lead accepted
856
+ content:
857
+ application/json:
858
+ schema:
859
+ $ref: '#/components/schemas/WorkflowSprintIntakeResponse'
860
+ '400':
861
+ description: Invalid sprint intake request
862
+ /v1/intake/workflow-sprint/advance:
863
+ post:
864
+ operationId: advanceWorkflowSprintLead
865
+ requestBody:
866
+ required: true
867
+ content:
868
+ application/json:
869
+ schema:
870
+ $ref: '#/components/schemas/WorkflowSprintAdvanceRequest'
871
+ responses:
872
+ '200':
873
+ description: Workflow Hardening Sprint lead advanced to the next state
874
+ content:
875
+ application/json:
876
+ schema:
877
+ $ref: '#/components/schemas/WorkflowSprintAdvanceResponse'
878
+ '400':
879
+ description: Invalid sprint advancement request
880
+ '403':
881
+ description: Forbidden
882
+ /v1/intents/catalog:
883
+ get:
884
+ operationId: listIntentCatalog
885
+ parameters:
886
+ - in: query
887
+ name: mcpProfile
888
+ schema:
889
+ type: string
890
+ - in: query
891
+ name: bundleId
892
+ schema:
893
+ type: string
894
+ - in: query
895
+ name: partnerProfile
896
+ schema:
897
+ type: string
898
+ responses:
899
+ '200':
900
+ description: Intent catalog with risk and checkpoint metadata
901
+ '401':
902
+ description: Unauthorized
903
+ /v1/intents/plan:
904
+ post:
905
+ operationId: planIntent
906
+ requestBody:
907
+ required: true
908
+ content:
909
+ application/json:
910
+ schema:
911
+ $ref: '#/components/schemas/IntentPlanRequest'
912
+ responses:
913
+ '200':
914
+ description: Policy-scoped intent execution plan
915
+ '400':
916
+ description: Invalid intent request
917
+ '401':
918
+ description: Unauthorized
919
+ /v1/handoffs/start:
920
+ post:
921
+ operationId: startHandoff
922
+ requestBody:
923
+ required: true
924
+ content:
925
+ application/json:
926
+ schema:
927
+ $ref: '#/components/schemas/HandoffStartRequest'
928
+ responses:
929
+ '200':
930
+ description: Sequential handoff started
931
+ '400':
932
+ description: Invalid handoff request
933
+ '401':
934
+ description: Unauthorized
935
+ /v1/handoffs/complete:
936
+ post:
937
+ operationId: completeHandoff
938
+ requestBody:
939
+ required: true
940
+ content:
941
+ application/json:
942
+ schema:
943
+ $ref: '#/components/schemas/HandoffCompleteRequest'
944
+ responses:
945
+ '200':
946
+ description: Sequential handoff completed
947
+ '400':
948
+ description: Invalid handoff completion request
949
+ '401':
950
+ description: Unauthorized
951
+ /v1/internal-agent/bootstrap:
952
+ post:
953
+ operationId: bootstrapInternalAgent
954
+ requestBody:
955
+ required: true
956
+ content:
957
+ application/json:
958
+ schema:
959
+ $ref: '#/components/schemas/InternalAgentBootstrapRequest'
960
+ responses:
961
+ '200':
962
+ description: Normalized trigger context, recall pack, sandbox, and reviewer-ready execution plan
963
+ '400':
964
+ description: Invalid internal-agent bootstrap request
965
+ '401':
966
+ description: Unauthorized
967
+ /v1/feedback/summary:
968
+ get:
969
+ operationId: getFeedbackSummary
970
+ parameters:
971
+ - in: query
972
+ name: recent
973
+ schema:
974
+ type: integer
975
+ default: 20
976
+ responses:
977
+ '200':
978
+ description: Feedback summary text
979
+ '401':
980
+ description: Unauthorized
981
+ /v1/lessons/search:
982
+ get:
983
+ operationId: searchLessons
984
+ parameters:
985
+ - in: query
986
+ name: q
987
+ schema:
988
+ type: string
989
+ description: Search query. Leave empty to list recent lessons.
990
+ - in: query
991
+ name: limit
992
+ schema:
993
+ type: integer
994
+ default: 10
995
+ - in: query
996
+ name: category
997
+ schema:
998
+ type: string
999
+ enum: [error, learning, preference]
1000
+ - in: query
1001
+ name: tags
1002
+ schema:
1003
+ type: string
1004
+ description: Comma-separated tags that must all be present on a lesson.
1005
+ responses:
1006
+ '200':
1007
+ description: Searchable promoted lessons with linked corrective actions, prevention rules, and auto-gates
1008
+ '401':
1009
+ description: Unauthorized
1010
+ /v1/search:
1011
+ get:
1012
+ operationId: searchRlhf
1013
+ parameters:
1014
+ - in: query
1015
+ name: q
1016
+ schema:
1017
+ type: string
1018
+ description: Search query for raw ThumbGate state.
1019
+ - in: query
1020
+ name: limit
1021
+ schema:
1022
+ type: integer
1023
+ default: 10
1024
+ - in: query
1025
+ name: source
1026
+ schema:
1027
+ type: string
1028
+ enum: [all, feedback, context, rules]
1029
+ default: all
1030
+ - in: query
1031
+ name: signal
1032
+ schema:
1033
+ type: string
1034
+ enum: [up, down, positive, negative]
1035
+ responses:
1036
+ '200':
1037
+ description: Search results across feedback logs, ContextFS, and prevention rules
1038
+ '401':
1039
+ description: Unauthorized
1040
+ post:
1041
+ operationId: searchRlhfPost
1042
+ requestBody:
1043
+ required: true
1044
+ content:
1045
+ application/json:
1046
+ schema:
1047
+ type: object
1048
+ properties:
1049
+ query:
1050
+ type: string
1051
+ q:
1052
+ type: string
1053
+ limit:
1054
+ type: integer
1055
+ default: 10
1056
+ source:
1057
+ type: string
1058
+ enum: [all, feedback, context, rules]
1059
+ default: all
1060
+ signal:
1061
+ type: string
1062
+ enum: [up, down, positive, negative]
1063
+ responses:
1064
+ '200':
1065
+ description: Search results across feedback logs, ContextFS, and prevention rules
1066
+ '401':
1067
+ description: Unauthorized
1068
+ /v1/feedback/rules:
1069
+ post:
1070
+ operationId: generatePreventionRules
1071
+ requestBody:
1072
+ required: false
1073
+ content:
1074
+ application/json:
1075
+ schema:
1076
+ type: object
1077
+ properties:
1078
+ minOccurrences:
1079
+ type: integer
1080
+ default: 2
1081
+ outputPath:
1082
+ type: string
1083
+ responses:
1084
+ '200':
1085
+ description: Prevention rules generated
1086
+ '401':
1087
+ description: Unauthorized
1088
+ /v1/dpo/export:
1089
+ post:
1090
+ operationId: exportDpoPairs
1091
+ requestBody:
1092
+ required: false
1093
+ content:
1094
+ application/json:
1095
+ schema:
1096
+ type: object
1097
+ properties:
1098
+ inputPath:
1099
+ type: string
1100
+ memoryLogPath:
1101
+ type: string
1102
+ outputPath:
1103
+ type: string
1104
+ responses:
1105
+ '200':
1106
+ description: DPO export completed
1107
+ '401':
1108
+ description: Unauthorized
1109
+ /v1/analytics/databricks/export:
1110
+ post:
1111
+ operationId: exportDatabricksBundle
1112
+ requestBody:
1113
+ required: false
1114
+ content:
1115
+ application/json:
1116
+ schema:
1117
+ type: object
1118
+ properties:
1119
+ outputPath:
1120
+ type: string
1121
+ responses:
1122
+ '200':
1123
+ description: Databricks bundle exported
1124
+ '401':
1125
+ description: Unauthorized
1126
+ /v1/context/construct:
1127
+ post:
1128
+ operationId: constructContextPack
1129
+ requestBody:
1130
+ required: false
1131
+ content:
1132
+ application/json:
1133
+ schema:
1134
+ type: object
1135
+ properties:
1136
+ query:
1137
+ type: string
1138
+ maxItems:
1139
+ type: integer
1140
+ default: 8
1141
+ maxChars:
1142
+ type: integer
1143
+ default: 6000
1144
+ namespaces:
1145
+ type: array
1146
+ items:
1147
+ type: string
1148
+ enum:
1149
+ - raw_history
1150
+ - memory/error
1151
+ - memory/learning
1152
+ - rules
1153
+ - tools
1154
+ - provenance
1155
+ responses:
1156
+ '200':
1157
+ description: Context pack created
1158
+ '400':
1159
+ description: Invalid namespace selection
1160
+ '401':
1161
+ description: Unauthorized
1162
+ /v1/context/evaluate:
1163
+ post:
1164
+ operationId: evaluateContextPack
1165
+ requestBody:
1166
+ required: true
1167
+ content:
1168
+ application/json:
1169
+ schema:
1170
+ type: object
1171
+ required: [packId, outcome]
1172
+ properties:
1173
+ packId:
1174
+ type: string
1175
+ outcome:
1176
+ type: string
1177
+ signal:
1178
+ type: string
1179
+ notes:
1180
+ type: string
1181
+ rubricScores:
1182
+ type: array
1183
+ items:
1184
+ $ref: '#/components/schemas/RubricScore'
1185
+ guardrails:
1186
+ type: object
1187
+ properties:
1188
+ testsPassed:
1189
+ type: boolean
1190
+ pathSafety:
1191
+ type: boolean
1192
+ budgetCompliant:
1193
+ type: boolean
1194
+ responses:
1195
+ '200':
1196
+ description: Evaluation recorded
1197
+ '400':
1198
+ description: Invalid rubric payload
1199
+ '401':
1200
+ description: Unauthorized
1201
+ /v1/context/provenance:
1202
+ get:
1203
+ operationId: getContextProvenance
1204
+ parameters:
1205
+ - in: query
1206
+ name: limit
1207
+ schema:
1208
+ type: integer
1209
+ default: 50
1210
+ responses:
1211
+ '200':
1212
+ description: Recent provenance events
1213
+ '401':
1214
+ description: Unauthorized
1215
+ /v1/billing/checkout:
1216
+ post:
1217
+ operationId: createBillingCheckoutSession
1218
+ security: []
1219
+ requestBody:
1220
+ required: false
1221
+ content:
1222
+ application/json:
1223
+ schema:
1224
+ $ref: '#/components/schemas/BillingCheckoutRequest'
1225
+ responses:
1226
+ '200':
1227
+ description: Stripe checkout session created
1228
+ /v1/billing/usage:
1229
+ get:
1230
+ operationId: getBillingUsage
1231
+ responses:
1232
+ '200':
1233
+ description: Usage count for authenticated billing key
1234
+ '401':
1235
+ description: Unauthorized
1236
+ /v1/billing/provision:
1237
+ post:
1238
+ operationId: provisionBillingKey
1239
+ requestBody:
1240
+ required: true
1241
+ content:
1242
+ application/json:
1243
+ schema:
1244
+ $ref: '#/components/schemas/BillingProvisionRequest'
1245
+ responses:
1246
+ '200':
1247
+ description: API key provisioned
1248
+ '400':
1249
+ description: Missing required customerId
1250
+ '401':
1251
+ description: Unauthorized
1252
+ '403':
1253
+ description: Forbidden - requires static THUMBGATE_API_KEY admin token
1254
+ /v1/billing/webhook:
1255
+ post:
1256
+ operationId: stripeBillingWebhook
1257
+ security: []
1258
+ responses:
1259
+ '200':
1260
+ description: Webhook accepted
1261
+ '400':
1262
+ description: Invalid webhook signature or payload
1263
+ /v1/billing/github-webhook:
1264
+ post:
1265
+ operationId: githubMarketplaceWebhook
1266
+ security: []
1267
+ responses:
1268
+ '200':
1269
+ description: Webhook accepted
1270
+ '400':
1271
+ description: Invalid webhook signature or payload
1272
+ k signature or payload
1273
+ /v1/billing/github-webhook:
1274
+ post:
1275
+ operationId: githubMarketplaceWebhook
1276
+ security: []
1277
+ responses:
1278
+ '200':
1279
+ description: Webhook accepted
1280
+ '400':
1281
+ description: Invalid webhook signature or payload