thumbgate 1.28.4 → 1.29.2

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 (87) hide show
  1. package/.claude/commands/dashboard.md +11 -1
  2. package/.claude/commands/thumbgate-dashboard.md +23 -8
  3. package/.claude-plugin/plugin.json +1 -1
  4. package/.well-known/llms.txt +18 -10
  5. package/.well-known/mcp/server-card.json +1 -1
  6. package/README.md +66 -3
  7. package/adapters/claude/.mcp.json +2 -2
  8. package/adapters/forge/forge.yaml +3 -3
  9. package/adapters/mcp/server-stdio.js +88 -2
  10. package/adapters/opencode/opencode.json +1 -1
  11. package/bin/cli.js +8 -8
  12. package/bin/postinstall.js +4 -13
  13. package/commands/dashboard.md +11 -1
  14. package/commands/thumbgate-dashboard.md +23 -8
  15. package/config/agent-outcome-monitor-thresholds.json +63 -0
  16. package/config/evals/agent-outcomes-baseline.json +17 -0
  17. package/config/evals/agent-outcomes-golden.json +412 -0
  18. package/config/evals/prompt-eval-baseline.json +23 -0
  19. package/config/github-about.json +5 -4
  20. package/config/post-deploy-marketing-pages.json +6 -6
  21. package/config/schemas/task-outcome-receipt.schema.json +296 -0
  22. package/docs/integrations/grafana/README.md +109 -0
  23. package/docs/integrations/grafana/thumbgate-revenue-evidence-dashboard.json +1930 -0
  24. package/openapi/openapi.yaml +475 -5
  25. package/package.json +75 -22
  26. package/public/agent-manager.html +10 -11
  27. package/public/agents-cost-savings.html +2 -2
  28. package/public/assets/brand/thumbgate-logo-transparent.svg +6 -11
  29. package/public/assets/brand/thumbgate-mark-inline-v3.svg +11 -10
  30. package/public/assets/brand/thumbgate-mark.svg +10 -11
  31. package/public/blog/inside-your-boundary.html +114 -0
  32. package/public/blog/process-over-outcome-gates.html +119 -0
  33. package/public/blog.html +296 -402
  34. package/public/brand/thumbgate-mark.svg +5 -9
  35. package/public/codex-enterprise.html +2 -2
  36. package/public/compare.html +12 -3
  37. package/public/diagnostic.html +79 -29
  38. package/public/guide.html +4 -4
  39. package/public/index.html +1090 -2098
  40. package/public/install.html +3 -3
  41. package/public/js/buyer-intent.js +33 -18
  42. package/public/numbers.html +2 -2
  43. package/public/pricing.html +268 -408
  44. package/public/pro.html +4 -4
  45. package/scripts/agent-outcome-eval.js +130 -0
  46. package/scripts/agent-outcome-monitor.js +261 -0
  47. package/scripts/agent-reasoning-traces.js +8 -9
  48. package/scripts/async-job-runner.js +107 -13
  49. package/scripts/billing.js +456 -126
  50. package/scripts/buyer-paths.js +102 -0
  51. package/scripts/cli-feedback.js +2 -2
  52. package/scripts/commercial-offer.js +18 -10
  53. package/scripts/durability/step.js +121 -12
  54. package/scripts/external-customer-audit.js +881 -0
  55. package/scripts/feedback-loop.js +26 -0
  56. package/scripts/gates-engine.js +554 -19
  57. package/scripts/grafana-revenue-evidence.js +856 -0
  58. package/scripts/human-escalation.js +265 -0
  59. package/scripts/hybrid-feedback-context.js +93 -50
  60. package/scripts/jsonl-window.js +89 -0
  61. package/scripts/judge-reward-function.js +30 -18
  62. package/scripts/lesson-embedding-index.js +3 -7
  63. package/scripts/meta-agent-loop.js +20 -2
  64. package/scripts/observability-env.js +139 -0
  65. package/scripts/observability-setup.js +55 -0
  66. package/scripts/plausible-domain-config.js +4 -0
  67. package/scripts/prompt-eval.js +81 -4
  68. package/scripts/provider-live-evidence.js +1290 -0
  69. package/scripts/provider-payment-reconciler.js +442 -0
  70. package/scripts/provider-revenue-evidence.js +249 -0
  71. package/scripts/rate-limiter.js +1 -5
  72. package/scripts/revenue-action-eligibility.js +414 -0
  73. package/scripts/revenue-evidence-remediation.js +694 -0
  74. package/scripts/revenue-offer-system.js +709 -0
  75. package/scripts/sales-pipeline.js +1117 -0
  76. package/scripts/schedule-manager.js +249 -0
  77. package/scripts/seo-gsd.js +8 -4
  78. package/scripts/stripe-credentials.js +37 -0
  79. package/scripts/stripe-revenue-catalog-audit.js +363 -0
  80. package/scripts/stripe-revenue-catalog.js +164 -0
  81. package/scripts/task-outcomes.js +425 -0
  82. package/scripts/telemetry-analytics.js +23 -3
  83. package/scripts/tool-contract-validator.js +287 -59
  84. package/scripts/tool-registry.js +143 -0
  85. package/scripts/vector-store.js +83 -7
  86. package/scripts/workflow-intake-queue.js +483 -0
  87. package/src/api/server.js +647 -118
@@ -19,6 +19,11 @@ components:
19
19
  type: http
20
20
  scheme: bearer
21
21
  bearerFormat: API Key
22
+ humanReviewerKey:
23
+ type: apiKey
24
+ in: header
25
+ name: X-ThumbGate-Human-Reviewer-Key
26
+ description: Independently revocable credential for the server-configured human reviewer identity.
22
27
  schemas:
23
28
  RubricScore:
24
29
  type: object
@@ -77,6 +82,135 @@ components:
77
82
  enum: [chatgpt_gpt]
78
83
  default: chatgpt_gpt
79
84
  description: Attribution marker for ThumbGate analytics. The published ThumbGate GPT should send `chatgpt_gpt` so owner dashboards can distinguish GPT Action calls from local API calls.
85
+ TaskOutcomeReceipt:
86
+ type: object
87
+ additionalProperties: false
88
+ required: [taskId, goal, status, verification, toolCalls, policy, efficiency]
89
+ properties:
90
+ taskId:
91
+ type: string
92
+ taskType:
93
+ type: string
94
+ goal:
95
+ type: string
96
+ expectedOutcome:
97
+ type: string
98
+ status:
99
+ type: string
100
+ enum: [completed, failed, partial, escalated]
101
+ verification:
102
+ type: object
103
+ required: [performed, passed, evidence]
104
+ properties:
105
+ performed:
106
+ type: boolean
107
+ passed:
108
+ type: boolean
109
+ verifier:
110
+ type: string
111
+ method:
112
+ type: string
113
+ evidence:
114
+ type: array
115
+ items:
116
+ type: string
117
+ unsupportedClaims:
118
+ type: integer
119
+ minimum: 0
120
+ toolCalls:
121
+ type: array
122
+ items:
123
+ type: object
124
+ required: [name, contractValid, allowed, succeeded, attempts]
125
+ properties:
126
+ name:
127
+ type: string
128
+ contractValid:
129
+ type: boolean
130
+ allowed:
131
+ type: boolean
132
+ succeeded:
133
+ type: boolean
134
+ attempts:
135
+ type: integer
136
+ minimum: 1
137
+ idempotencyKey:
138
+ type: string
139
+ duplicateSideEffect:
140
+ type: boolean
141
+ policy:
142
+ type: object
143
+ required: [violations, unsafeEscapes, falseBlocks]
144
+ properties:
145
+ violations:
146
+ type: integer
147
+ unsafeEscapes:
148
+ type: integer
149
+ falseBlocks:
150
+ type: integer
151
+ efficiency:
152
+ type: object
153
+ required: [latencyMs, costUsd]
154
+ properties:
155
+ latencyMs:
156
+ type: number
157
+ costUsd:
158
+ type: number
159
+ firstAttempt:
160
+ type: boolean
161
+ idempotencyKey:
162
+ type: string
163
+ EscalationIdentity:
164
+ type: object
165
+ additionalProperties: false
166
+ required: [id, kind]
167
+ properties:
168
+ id:
169
+ type: string
170
+ minLength: 1
171
+ kind:
172
+ type: string
173
+ enum: [agent, service, human]
174
+ displayName:
175
+ type: string
176
+ HumanEscalationRequest:
177
+ type: object
178
+ additionalProperties: false
179
+ required: [taskId, reason, requester, evidence]
180
+ properties:
181
+ taskId:
182
+ type: string
183
+ minLength: 1
184
+ reason:
185
+ type: string
186
+ minLength: 1
187
+ severity:
188
+ type: string
189
+ enum: [low, medium, high, critical]
190
+ requester:
191
+ $ref: '#/components/schemas/EscalationIdentity'
192
+ evidence:
193
+ type: array
194
+ minItems: 1
195
+ items:
196
+ type: string
197
+ minLength: 1
198
+ ttlMs:
199
+ type: number
200
+ minimum: 1
201
+ idempotencyKey:
202
+ type: string
203
+ HumanEscalationDecision:
204
+ type: object
205
+ additionalProperties: false
206
+ required: [decision, reason]
207
+ properties:
208
+ decision:
209
+ type: string
210
+ enum: [approved, rejected, cancelled]
211
+ reason:
212
+ type: string
213
+ minLength: 1
80
214
  IntentPlanRequest:
81
215
  type: object
82
216
  required: [intentId]
@@ -338,6 +472,150 @@ components:
338
472
  sprintBriefUrl:
339
473
  type: string
340
474
  format: uri
475
+ WorkflowIntakeClosePacket:
476
+ type: object
477
+ required:
478
+ - status
479
+ - leadId
480
+ - blockers
481
+ - verificationPlan
482
+ - externalActionAuthorized
483
+ - revenueRecognized
484
+ properties:
485
+ status:
486
+ type: string
487
+ enum: [approval_ready_not_authorized, hold_not_approval_ready]
488
+ leadId:
489
+ type: string
490
+ destination:
491
+ type: object
492
+ nullable: true
493
+ properties:
494
+ channel:
495
+ type: string
496
+ enum: [email]
497
+ address:
498
+ type: string
499
+ format: email
500
+ offer:
501
+ type: object
502
+ nullable: true
503
+ additionalProperties: true
504
+ draft:
505
+ type: object
506
+ nullable: true
507
+ properties:
508
+ subject:
509
+ type: string
510
+ body:
511
+ type: string
512
+ approvalPhrase:
513
+ type: string
514
+ nullable: true
515
+ blockers:
516
+ type: array
517
+ items:
518
+ type: string
519
+ evidence:
520
+ type: object
521
+ additionalProperties: true
522
+ verificationPlan:
523
+ type: array
524
+ items:
525
+ type: string
526
+ externalActionAuthorized:
527
+ type: boolean
528
+ enum: [false]
529
+ revenueRecognized:
530
+ type: boolean
531
+ enum: [false]
532
+ WorkflowIntakeDiscoveryPacket:
533
+ type: object
534
+ required:
535
+ - type
536
+ - status
537
+ - leadId
538
+ - blockers
539
+ - verificationPlan
540
+ - externalActionAuthorized
541
+ - revenueRecognized
542
+ properties:
543
+ type:
544
+ type: string
545
+ enum: [discovery_questions]
546
+ status:
547
+ type: string
548
+ enum: [approval_ready_not_authorized, hold_not_approval_ready]
549
+ leadId:
550
+ type: string
551
+ destination:
552
+ type: object
553
+ nullable: true
554
+ properties:
555
+ channel:
556
+ type: string
557
+ enum: [email]
558
+ address:
559
+ type: string
560
+ format: email
561
+ draft:
562
+ type: object
563
+ nullable: true
564
+ properties:
565
+ subject:
566
+ type: string
567
+ body:
568
+ type: string
569
+ approvalPhrase:
570
+ type: string
571
+ nullable: true
572
+ blockers:
573
+ type: array
574
+ items:
575
+ type: string
576
+ evidence:
577
+ type: object
578
+ additionalProperties: true
579
+ verificationPlan:
580
+ type: array
581
+ items:
582
+ type: string
583
+ externalActionAuthorized:
584
+ type: boolean
585
+ enum: [false]
586
+ revenueRecognized:
587
+ type: boolean
588
+ enum: [false]
589
+ WorkflowIntakeQueueResponse:
590
+ type: object
591
+ required: [generatedAt, total, eligibleTotal, returned, approvalReadyTotal, discoveryReadyTotal, leads]
592
+ properties:
593
+ generatedAt:
594
+ type: string
595
+ format: date-time
596
+ total:
597
+ type: integer
598
+ eligibleTotal:
599
+ type: integer
600
+ returned:
601
+ type: integer
602
+ approvalReadyTotal:
603
+ type: integer
604
+ discoveryReadyTotal:
605
+ type: integer
606
+ primaryApprovalAction:
607
+ nullable: true
608
+ allOf:
609
+ - $ref: '#/components/schemas/WorkflowIntakeClosePacket'
610
+ primaryDiscoveryAction:
611
+ nullable: true
612
+ allOf:
613
+ - $ref: '#/components/schemas/WorkflowIntakeDiscoveryPacket'
614
+ leads:
615
+ type: array
616
+ items:
617
+ type: object
618
+ additionalProperties: true
341
619
  WorkflowSprintAdvanceRequest:
342
620
  type: object
343
621
  required: [leadId, status]
@@ -361,6 +639,66 @@ components:
361
639
  type: array
362
640
  items:
363
641
  type: string
642
+ qualificationReview:
643
+ type: object
644
+ description: Required evidence-based buyer qualification review when advancing to qualified.
645
+ required:
646
+ - severityAndFrequency
647
+ - measurableImpact
648
+ - urgencyAndTrigger
649
+ - decisionAuthority
650
+ - budgetMechanism
651
+ - offerFit
652
+ - proofRequired
653
+ - nextStep
654
+ - evidenceReferences
655
+ - zeroSpendStatus
656
+ properties:
657
+ severityAndFrequency:
658
+ type: string
659
+ measurableImpact:
660
+ type: string
661
+ urgencyAndTrigger:
662
+ type: string
663
+ decisionAuthority:
664
+ type: string
665
+ budgetMechanism:
666
+ type: string
667
+ offerFit:
668
+ type: string
669
+ proofRequired:
670
+ type: string
671
+ nextStep:
672
+ type: string
673
+ evidenceReferences:
674
+ type: array
675
+ minItems: 1
676
+ items:
677
+ type: string
678
+ zeroSpendStatus:
679
+ type: string
680
+ enum: [proceed_zero_cost]
681
+ priceUnderstandingConfirmed:
682
+ type: boolean
683
+ workflowCount:
684
+ type: integer
685
+ minimum: 1
686
+ authorityConfirmed:
687
+ type: boolean
688
+ urgencyDays:
689
+ type: integer
690
+ minimum: 1
691
+ budgetCents:
692
+ type: integer
693
+ minimum: 0
694
+ readyToImplement:
695
+ type: boolean
696
+ proofBackedSprint:
697
+ type: boolean
698
+ completedEnterprisePilot:
699
+ type: boolean
700
+ requiresUnavailableHostedFeature:
701
+ type: boolean
364
702
  WorkflowSprintAdvanceResponse:
365
703
  type: object
366
704
  properties:
@@ -1104,6 +1442,36 @@ paths:
1104
1442
  $ref: '#/components/schemas/WorkflowSprintIntakeResponse'
1105
1443
  '400':
1106
1444
  description: Invalid sprint intake request
1445
+ /v1/intake/workflow-sprint/queue:
1446
+ get:
1447
+ operationId: getWorkflowSprintCloseQueue
1448
+ parameters:
1449
+ - in: query
1450
+ name: status
1451
+ description: Comma-separated workflow lifecycle statuses or all.
1452
+ schema:
1453
+ type: string
1454
+ default: new,qualified
1455
+ - in: query
1456
+ name: limit
1457
+ schema:
1458
+ type: integer
1459
+ minimum: 1
1460
+ maximum: 100
1461
+ default: 50
1462
+ responses:
1463
+ '200':
1464
+ description: Private no-store intake queue with fail-closed approval packets
1465
+ content:
1466
+ application/json:
1467
+ schema:
1468
+ $ref: '#/components/schemas/WorkflowIntakeQueueResponse'
1469
+ '400':
1470
+ description: Invalid queue filter
1471
+ '403':
1472
+ description: Forbidden
1473
+ '503':
1474
+ description: Workflow intake capability is unavailable in this runtime
1107
1475
  /v1/intake/workflow-sprint/advance:
1108
1476
  post:
1109
1477
  operationId: advanceWorkflowSprintLead
@@ -1695,13 +2063,115 @@ paths:
1695
2063
  description: Webhook accepted
1696
2064
  '400':
1697
2065
  description: Invalid webhook signature or payload
1698
- k signature or payload
1699
- /v1/billing/github-webhook:
2066
+ /v1/billing/paypal-webhook:
1700
2067
  post:
1701
- operationId: githubMarketplaceWebhook
2068
+ operationId: paypalBillingWebhook
1702
2069
  security: []
1703
2070
  responses:
1704
2071
  '200':
1705
- description: Webhook accepted
2072
+ description: PayPal-verified payment event durably recorded
1706
2073
  '400':
1707
- description: Invalid webhook signature or payload
2074
+ description: Invalid PayPal transmission headers, event, or remote signature verification
2075
+ '503':
2076
+ description: PayPal verified the event but durable evidence storage failed
2077
+ /v1/task-outcomes:
2078
+ post:
2079
+ operationId: recordTaskOutcome
2080
+ requestBody:
2081
+ required: true
2082
+ content:
2083
+ application/json:
2084
+ schema:
2085
+ $ref: '#/components/schemas/TaskOutcomeReceipt'
2086
+ responses:
2087
+ '201':
2088
+ description: Task outcome recorded
2089
+ '400':
2090
+ description: Invalid or conflicting task outcome
2091
+ '401':
2092
+ description: Unauthorized
2093
+ get:
2094
+ operationId: listTaskOutcomes
2095
+ parameters:
2096
+ - in: query
2097
+ name: taskId
2098
+ schema:
2099
+ type: string
2100
+ - in: query
2101
+ name: limit
2102
+ schema:
2103
+ type: integer
2104
+ default: 20
2105
+ responses:
2106
+ '200':
2107
+ description: Task outcomes
2108
+ '401':
2109
+ description: Unauthorized
2110
+ /v1/task-outcomes/metrics:
2111
+ get:
2112
+ operationId: getTaskOutcomeMetrics
2113
+ responses:
2114
+ '200':
2115
+ description: Transparent task, tool, safety, escalation, cost, latency, and business metrics
2116
+ '401':
2117
+ description: Unauthorized
2118
+ /v1/task-outcomes/monitor:
2119
+ get:
2120
+ operationId: monitorTaskOutcomes
2121
+ responses:
2122
+ '200':
2123
+ description: Production task outcome threshold verdict
2124
+ '401':
2125
+ description: Unauthorized
2126
+ /v1/escalations:
2127
+ post:
2128
+ operationId: requestHumanEscalation
2129
+ requestBody:
2130
+ required: true
2131
+ content:
2132
+ application/json:
2133
+ schema:
2134
+ $ref: '#/components/schemas/HumanEscalationRequest'
2135
+ responses:
2136
+ '201':
2137
+ description: Human escalation requested
2138
+ '400':
2139
+ description: Invalid or conflicting request
2140
+ '401':
2141
+ description: Unauthorized
2142
+ get:
2143
+ operationId: listHumanEscalations
2144
+ responses:
2145
+ '200':
2146
+ description: Human escalation queue and metrics
2147
+ '401':
2148
+ description: Unauthorized
2149
+ /v1/escalations/{escalationId}/decision:
2150
+ post:
2151
+ operationId: decideHumanEscalation
2152
+ security:
2153
+ - bearerAuth: []
2154
+ humanReviewerKey: []
2155
+ parameters:
2156
+ - in: path
2157
+ name: escalationId
2158
+ required: true
2159
+ schema:
2160
+ type: string
2161
+ requestBody:
2162
+ required: true
2163
+ content:
2164
+ application/json:
2165
+ schema:
2166
+ $ref: '#/components/schemas/HumanEscalationDecision'
2167
+ responses:
2168
+ '200':
2169
+ description: Human escalation decision recorded
2170
+ '400':
2171
+ description: Invalid decision or the authenticated reviewer matches the requester
2172
+ '401':
2173
+ description: Unauthorized
2174
+ '403':
2175
+ description: Missing or invalid human reviewer credential
2176
+ '503':
2177
+ description: Human reviewer identity is not configured