thumbgate 1.35.0 → 1.37.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.
- package/.agents/skills/cobble-hot-store-compare-not-clone/SKILL.md +80 -0
- package/.agents/skills/colab-compute-honesty-not-clone/SKILL.md +70 -0
- package/.agents/skills/cyberstrike-compare-not-clone/SKILL.md +36 -0
- package/.agents/skills/gitlab-sandbox-allowlist-not-trust/SKILL.md +77 -0
- package/.agents/skills/jit-harness-compare-not-clone/SKILL.md +34 -0
- package/.agents/skills/openui-catalog-compose-honesty/SKILL.md +64 -0
- package/.agents/skills/token-shunt-honesty-not-clone/SKILL.md +67 -0
- package/.agents/skills/typesafe-typed-questions-not-clone/SKILL.md +82 -0
- package/.agents/skills/zvec-grep-compare-not-clone/SKILL.md +34 -0
- package/.claude-plugin/plugin.json +1 -1
- package/.well-known/llms.txt +1 -0
- package/.well-known/mcp/server-card.json +1 -1
- package/CONTRIBUTING.md +95 -0
- package/README.md +195 -632
- package/THIRD_PARTY_NOTICES.md +89 -0
- package/adapters/claude/.mcp.json +2 -2
- package/adapters/forge/forge.yaml +3 -3
- package/adapters/future-agi/.mcp.json +8 -0
- package/adapters/future-agi/FUTURE_AGI.md +23 -0
- package/adapters/future-agi/config.toml +3 -0
- package/adapters/future-agi/future-agi-bridge.js +9 -0
- package/adapters/future-agi/opencode.json +8 -0
- package/adapters/herdr/herdr-plugin.toml +18 -0
- package/adapters/mcp/server-stdio.js +238 -25
- package/adapters/opencode/opencode.json +1 -1
- package/adapters/workos/WORKOS.md +52 -0
- package/bin/cli.js +465 -3
- package/bin/futureagi-bridge +9 -0
- package/config/gate-templates.json +629 -4
- package/config/gates/actor-critic-audit.json +34 -0
- package/config/gates/default.json +9 -3
- package/config/gates/five-walls-governance.json +34 -0
- package/config/gates/future-agi-guardrails.json +34 -0
- package/config/gates/radware-threat-defense-2026.json +61 -0
- package/config/gates/simatree-data-governance.json +33 -0
- package/config/mcp-allowlists.json +4 -0
- package/config/merge-quality-checks.json +6 -0
- package/config/model-candidates.json +312 -29
- package/config/model-tiers.json +18 -0
- package/config/post-deploy-marketing-pages.json +10 -0
- package/config/progressive/01-wire-only.json +11 -0
- package/config/progressive/02-dashboard-empty-ok.json +10 -0
- package/config/progressive/03-one-lesson.json +10 -0
- package/config/progressive/04-warn-fires.json +11 -0
- package/config/progressive/05-strict-optional.json +11 -0
- package/config/progressive/README.md +15 -0
- package/config/schemas/broker-execution-receipt.schema.json +139 -0
- package/config/schemas/provider-execution-attestation-v1.schema.json +58 -0
- package/conformance/provider-attestation/vectors.json +320 -0
- package/docs/specs/provider-execution-attestation-v1.md +69 -0
- package/openapi/openapi.yaml +15 -0
- package/package.json +408 -150
- package/public/about.html +2 -2
- package/public/ai-malpractice-prevention.html +7 -7
- package/public/blog/a-10-dollar-vps-is-not-a-computer.html +143 -0
- package/public/blog/a-receipt-is-not-world-state.html +388 -0
- package/public/blog/git-at-agent-scale.html +374 -0
- package/public/blog/no-llm-in-the-gate.html +133 -0
- package/public/blog.html +80 -0
- package/public/case-studies.html +16 -1
- package/public/compare.html +28 -0
- package/public/diagnostic.html +216 -7
- package/public/docs/connectors.html +39 -0
- package/public/federal.html +2 -2
- package/public/founders.html +639 -0
- package/public/index.html +87 -9
- package/public/install.html +8 -8
- package/public/learn.html +39 -0
- package/public/numbers.html +2 -2
- package/public/peter.html +310 -0
- package/public/platform-partners.html +119 -0
- package/public/pricing.html +24 -3
- package/public/privacy.html +117 -0
- package/public/pro.html +17 -0
- package/public/support.html +62 -0
- package/public/terms.html +130 -0
- package/public/third-party-notices.html +95 -0
- package/public/yt.html +351 -0
- package/scripts/action-receipts.js +133 -3
- package/scripts/adaptive-governance-arena.js +349 -0
- package/scripts/admin-override.js +205 -0
- package/scripts/agent-action-inventory.js +869 -0
- package/scripts/agent-audit-trace.js +42 -2
- package/scripts/agent-egress-policy.js +1117 -0
- package/scripts/agent-memory-lifecycle.js +141 -2
- package/scripts/agent-operations-planner.js +441 -1
- package/scripts/agent-readiness.js +68 -0
- package/scripts/agent-security-central.js +647 -0
- package/scripts/allowlist-bridge-honesty.js +417 -0
- package/scripts/async-job-runner.js +102 -11
- package/scripts/audit-trail.js +212 -0
- package/scripts/billing.js +1 -1
- package/scripts/broker-execution-receipts.js +719 -0
- package/scripts/budget-aware-gates-proof.js +423 -0
- package/scripts/claude-feedback-sync.js +29 -3
- package/scripts/claw-harness-production.js +237 -0
- package/scripts/cli-schema.js +203 -1
- package/scripts/cobble-hot-store-split.js +600 -0
- package/scripts/codex-runbook-flywheel.js +318 -0
- package/scripts/colab-compute-honesty.js +281 -0
- package/scripts/context-footprint.js +186 -0
- package/scripts/contextfs.js +143 -61
- package/scripts/dashboard.js +251 -32
- package/scripts/deepseek-v4-runtime-guardrails.js +72 -6
- package/scripts/docker-sandbox-planner.js +18 -0
- package/scripts/double-blind-eval-protocol.js +252 -0
- package/scripts/edotenv-rl-gateway.js +259 -0
- package/scripts/ensure-production-search-corpus.js +162 -0
- package/scripts/eval-holdout.js +311 -0
- package/scripts/feedback-aggregate.js +21 -2
- package/scripts/feedback-loop.js +87 -5
- package/scripts/feedback-quality.js +9 -0
- package/scripts/file-ledger-lock.js +4 -1
- package/scripts/financial-control-plane.js +41 -1
- package/scripts/find-dormant-requires.js +118 -0
- package/scripts/fs-utils.js +84 -8
- package/scripts/gates-engine.js +826 -68
- package/scripts/generate-case-study-outreach.js +24 -15
- package/scripts/git-at-scale.js +628 -0
- package/scripts/governance-conflict-audit.js +1650 -0
- package/scripts/governance-difficulty-curriculum.js +328 -0
- package/scripts/graphrag-retrieval.js +275 -0
- package/scripts/gurobi-optimizer.js +324 -0
- package/scripts/gurobi_optimizer.py +485 -0
- package/scripts/harness-selector.js +82 -1
- package/scripts/hidden-entry-points.js +284 -0
- package/scripts/human-escalation.js +199 -1
- package/scripts/hybrid-feedback-context.js +152 -19
- package/scripts/intent-governed-execution.js +602 -0
- package/scripts/intervention-policy.js +123 -20
- package/scripts/jit-harness-compose.js +628 -0
- package/scripts/jsonl-watcher.js +10 -0
- package/scripts/lesson-embedding-index.js +95 -12
- package/scripts/lesson-retrieval.js +105 -19
- package/scripts/local-model-profile.js +19 -2
- package/scripts/mailer/resend-mailer.js +1 -1
- package/scripts/matryoshka-embedding.js +235 -0
- package/scripts/mcp-oauth.js +42 -4
- package/scripts/mcp-session-handles.js +1016 -0
- package/scripts/mcp-wiring-doctor.js +314 -0
- package/scripts/memory-firewall.js +115 -2
- package/scripts/memory-scope-readiness.js +299 -0
- package/scripts/memory-vs-rag-route.js +161 -0
- package/scripts/model-tier-router.js +148 -21
- package/scripts/nvidia-specdecode-al-doctor.js +536 -0
- package/scripts/openui-catalog-compose-honesty.js +593 -0
- package/scripts/operational-integrity.js +19 -1
- package/scripts/override-audit.js +213 -0
- package/scripts/package-manager-honesty-doctor.js +458 -0
- package/scripts/pr-manager.js +63 -1
- package/scripts/prove-herdr-adapter.js +52 -0
- package/scripts/prove-memory-pyramid-and-symbolic-canvas.js +95 -0
- package/scripts/prove-workos.js +73 -0
- package/scripts/provider-attestation-conformance.js +192 -0
- package/scripts/provider-receipt-contract.js +136 -0
- package/scripts/qwen38-max-cost-optimizer.js +401 -0
- package/scripts/radware-threat-defense.js +280 -0
- package/scripts/rag-embedding-identity.js +221 -0
- package/scripts/rag-precision-guardrails.js +112 -2
- package/scripts/remote-feedback-capture.js +159 -0
- package/scripts/research-agent-harness.js +256 -0
- package/scripts/rsi-safety-hillclimb.js +200 -0
- package/scripts/rule-sprawl.js +188 -0
- package/scripts/schedule-manager.js +147 -0
- package/scripts/self-heal.js +8 -0
- package/scripts/session-lease.js +415 -0
- package/scripts/simatree-data-governance.js +347 -0
- package/scripts/slo-alert-engine.js +172 -7
- package/scripts/solver-parity.js +539 -0
- package/scripts/stealth-memory-injection-gate.js +333 -0
- package/scripts/switchyard-router.js +366 -0
- package/scripts/telemetry-analytics.js +84 -27
- package/scripts/temporal-decay-weighting.js +138 -0
- package/scripts/test-all.js +165 -0
- package/scripts/token-savings.js +42 -0
- package/scripts/token-shunt-honesty.js +502 -0
- package/scripts/tool-kpi-tracker.js +108 -5
- package/scripts/tool-registry.js +193 -5
- package/scripts/typesafe-typed-questions.js +813 -0
- package/scripts/universal-claim-evaluator.js +14 -2
- package/scripts/vector-store.js +279 -9
- package/scripts/workflow-notebook.js +391 -0
- package/scripts/workflow-sentinel.js +111 -12
- package/scripts/workos-production-guard.js +260 -0
- package/scripts/workspace-search-route.js +515 -0
- package/server.json +2 -2
- package/src/agent-identity-boundary.js +76 -0
- package/src/agent-retrieval-cache.js +155 -0
- package/src/alert-noise-ledger.js +502 -0
- package/src/api/server.js +724 -153
- package/src/git-fast-cache.js +220 -0
- package/src/git-wal-sync.js +156 -0
- package/src/hash-anchored-edit.js +82 -0
- package/src/hermes-platform-protocol.js +475 -0
- package/src/hermes-sync-plane.js +241 -0
- package/src/index.js +30 -1
- package/src/iso42001-compliance-guard.js +97 -0
- package/src/latency-budget.js +244 -0
- package/src/mcp-writeguard.js +316 -0
- package/src/miminions-adapter.js +106 -0
- package/src/pipeline-compass.js +104 -0
- package/src/ppl-alert-pipeline.js +284 -0
- package/src/rendezvous-router.js +90 -0
- package/src/security-questionnaire.js +195 -0
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: cobble-hot-store-compare-not-clone
|
|
3
|
+
description: >
|
|
4
|
+
CobbleDB (Perplexity 2026-09) is a batch-read hot store, not a ThumbGate
|
|
5
|
+
clone. Steal the three-plane FORMAT (durable state / batched delivery /
|
|
6
|
+
query-time MultiGet + hedge + hot subset) onto existing lesson rails; never
|
|
7
|
+
vendor RocksDB, YTsaurus, Pillar, or Lorry. Slash: /cobble-hot-store-compare-not-clone.
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# CobbleDB — compare, do not clone
|
|
11
|
+
|
|
12
|
+
## Goal
|
|
13
|
+
|
|
14
|
+
Produce fail-closed honesty for whom: ThumbGate agents writing feedback or
|
|
15
|
+
serving lessons — so processing never contends with PreToolUse reads, batch
|
|
16
|
+
lookups hedge slow sources, and only promoted/matchable records occupy the
|
|
17
|
+
hot path.
|
|
18
|
+
|
|
19
|
+
## Constraints
|
|
20
|
+
|
|
21
|
+
| NEVER | ALWAYS |
|
|
22
|
+
| --- | --- |
|
|
23
|
+
| Clone CobbleDB / Pillar / Lorry / RocksDB / YTsaurus | Map planes onto existing lesson rails |
|
|
24
|
+
| Write processing output onto `hybrid-feedback-context` | Durable log → `feedback-to-memory` → retrieval |
|
|
25
|
+
| Sequential per-key hot reads of a batch | `batchGetPrepared` (partition + hedge) |
|
|
26
|
+
| Dump raw `feedback-log.jsonl` into retrieval | `promoted_matchable` (or `fresh_high_value`) subset |
|
|
27
|
+
| Overwrite embedding/chunk versions | Coexist representations |
|
|
28
|
+
| Dual-edit DIRTY lesson-graph PR #3650 | Leave graph layer alone |
|
|
29
|
+
| Quote Perplexity 5× / 20% as ours | Measure ThumbGate rails with `perf-budget-check` |
|
|
30
|
+
| Hero Continuity / net-new storage SKU | ECI: existing retrieval rails only |
|
|
31
|
+
|
|
32
|
+
HARD fail closed. REFUSE SKU clones.
|
|
33
|
+
|
|
34
|
+
## Reference
|
|
35
|
+
|
|
36
|
+
- https://www.perplexity.ai/hub/blog/cobbledb
|
|
37
|
+
- `scripts/cobble-hot-store-split.js`
|
|
38
|
+
- `scripts/lesson-retrieval.js` · `scripts/feedback-to-memory.js` · `scripts/memory-vs-rag-route.js`
|
|
39
|
+
- `docs/agents/cobble-hot-store-split.md`
|
|
40
|
+
- `/high-roi-steal-and-finish` · `/eci-thumbgate-ip-wall`
|
|
41
|
+
|
|
42
|
+
## Examples (show, don't tell)
|
|
43
|
+
|
|
44
|
+
Weak: Summarize CobbleDB and add a RocksDB cluster class.
|
|
45
|
+
|
|
46
|
+
Gold:
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
$ npx thumbgate cobble-hot-store-split --json
|
|
50
|
+
ok: true
|
|
51
|
+
status: ready
|
|
52
|
+
$ node --test tests/cobble-hot-store-split.test.js
|
|
53
|
+
# processing → hot write → coupled_processing_hot_write deny
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
## Procedures
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
npx thumbgate cobble-hot-store-split --json
|
|
60
|
+
npx thumbgate cobble-hot-store-split --map-only
|
|
61
|
+
npx thumbgate cobble-hot-store-split --trace=tests/fixtures/cobble-hot-store-split-coupled.json --json
|
|
62
|
+
npx thumbgate cobble-hot-store-split --keys=lesson-1,lesson-2 --json
|
|
63
|
+
npm run test:cobble-hot-store-split
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
1. Classify every write as `durable`, `delivery`, or `hot`.
|
|
67
|
+
2. Deny processing → hot coupling.
|
|
68
|
+
3. Require batched MultiGet (+ hedge) for ≥3 serving keys.
|
|
69
|
+
4. Keep the hot subset to promoted/matchable records.
|
|
70
|
+
5. Refuse `--clone-cobbledb`.
|
|
71
|
+
|
|
72
|
+
## Rubric
|
|
73
|
+
|
|
74
|
+
- gold default (this repo) → `ok=true`, `status=ready`
|
|
75
|
+
- `--trace` coupled fixture → `ok=false`, `coupled_processing_hot_write`
|
|
76
|
+
- `--clone-cobbledb` → `ok=false`, `cobble_clone_refused`
|
|
77
|
+
- sequential ≥3-key hot read → `sequential_hot_batch`
|
|
78
|
+
- unbounded hot subset → `unbounded_hot_subset`
|
|
79
|
+
- doctor: `npm run test:cobble-hot-store-split` PASS
|
|
80
|
+
- evidence: command output in the same turn
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: colab-compute-honesty-not-clone
|
|
3
|
+
description: >
|
|
4
|
+
Google Colab /signup is a compute-unit storefront, not a ThumbGate GPU SKU.
|
|
5
|
+
Steal CU-pack honesty (subscribe≠receipt, CU≠dedicated GPU, 24h background
|
|
6
|
+
is Pro+). Never buy Pro/Pro+/PAYG from an agent session. Never clone
|
|
7
|
+
colab-cli. Slash: /colab-compute-honesty-not-clone.
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Colab compute honesty — compare, do not clone
|
|
11
|
+
|
|
12
|
+
## Goal
|
|
13
|
+
|
|
14
|
+
Fail-closed compute claims for whom: ThumbGate evals and fleet offload talk —
|
|
15
|
+
so "Colab Pro+ A100" cannot pass without a live Current-plan receipt.
|
|
16
|
+
Colab stays a neighbor notebook host, not a product.
|
|
17
|
+
|
|
18
|
+
## Constraints
|
|
19
|
+
|
|
20
|
+
| NEVER | ALWAYS |
|
|
21
|
+
| --- | --- |
|
|
22
|
+
| Buy Colab Pro / Pro+ / Compute Units | `npx thumbgate colab-compute-honesty --json` |
|
|
23
|
+
| Claim Pro+ because Subscribe is on /signup | `--plan-proof` from a Current-plan receipt |
|
|
24
|
+
| colab-cli / ngrok SSH / zero-cost A100 | GitHub Actions remains the eval runner |
|
|
25
|
+
| Dual-edit unverified `google-colab-pro-runner` theater | Treat that skill as a claim to audit |
|
|
26
|
+
|
|
27
|
+
HARD fail closed. REFUSE SKU clones. Do NOT spend.
|
|
28
|
+
|
|
29
|
+
## Reference
|
|
30
|
+
|
|
31
|
+
- https://colab.research.google.com/signup (live 2026-09-17, `iganapolsky@gmail.com`)
|
|
32
|
+
- PAYG $9.99/100 CU and $49.99/500 CU (buttons disabled on that account)
|
|
33
|
+
- Pro $9.99/mo and Pro+ $49.99/mo still showed Subscribe
|
|
34
|
+
- `scripts/colab-compute-honesty.js`
|
|
35
|
+
|
|
36
|
+
## Examples (show, don't tell)
|
|
37
|
+
|
|
38
|
+
Weak: Subscribe to Pro+ and offload gate-eval to A100 via colab-cli.
|
|
39
|
+
|
|
40
|
+
Gold:
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
$ npx thumbgate colab-compute-honesty --json --map-only
|
|
44
|
+
ok: true
|
|
45
|
+
$ npx thumbgate colab-compute-honesty --json --claim='Colab Pro+ A100 eval sweep'
|
|
46
|
+
ok: false # paid_feature_without_plan_proof
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
## Procedures
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
npx thumbgate colab-compute-honesty --json --map-only
|
|
53
|
+
npx thumbgate colab-compute-honesty --json --claim='offload to Colab A100'
|
|
54
|
+
npx thumbgate colab-compute-honesty --json --clone-colab
|
|
55
|
+
npm run test:colab-compute-honesty
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
1. Open /signup signed in. Subscribe visible ⇒ not a receipt.
|
|
59
|
+
2. Do not click Buy / Subscribe.
|
|
60
|
+
3. Run the doctor on any Colab/GPU offload claim.
|
|
61
|
+
4. Keep ThumbGate tests on GitHub Actions.
|
|
62
|
+
|
|
63
|
+
## Rubric
|
|
64
|
+
|
|
65
|
+
- `--map-only` → `ok=true`
|
|
66
|
+
- Pro+/A100/24h without `--plan-proof` → fail
|
|
67
|
+
- live snapshot with Subscribe + `--plan-proof=proplus` → `subscribe_button_is_not_receipt`
|
|
68
|
+
- `--buy-pro` / `colab-cli` → fail
|
|
69
|
+
- doctor tests PASS
|
|
70
|
+
- evidence: `--json` in the same turn
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: cyberstrike-compare-not-clone
|
|
3
|
+
description: >
|
|
4
|
+
CyberStrikeAI (Ed1s0nZ) turns NL intent into governed cybersecurity actions
|
|
5
|
+
with HITL + RAG. Steal the FORMAT onto ThumbGate rails; never clone
|
|
6
|
+
CyberStrike, Eino, WebShell, or C2. Slash: /cyberstrike-compare-not-clone.
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# CyberStrikeAI — compare, do not clone
|
|
10
|
+
|
|
11
|
+
## When
|
|
12
|
+
CyberStrikeAI, Ed1s0nZ, tom_doerr Eino agents, intent becomes governed execution,
|
|
13
|
+
evidence becomes operational memory, human oversight pentest agent.
|
|
14
|
+
|
|
15
|
+
## Do
|
|
16
|
+
```bash
|
|
17
|
+
npx thumbgate intent-governed-execution --intent="<what to do>" --json
|
|
18
|
+
npx thumbgate intent-governed-execution --map-only
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
Map FORMAT onto existing rails:
|
|
22
|
+
- **classify** → intent-router + harness-selector
|
|
23
|
+
- **authorize** → session-lease / task-scope; offensive needs `THUMBGATE_ALLOW_OFFENSIVE=1`
|
|
24
|
+
- **gate** → PreToolUse / gates-engine / harness JSON
|
|
25
|
+
- **hitl** → admin-override / protectedApprovals (`--approved` only after a real human grant)
|
|
26
|
+
- **execute** → subagent-profiles + maxChars result governance
|
|
27
|
+
- **evidence** → capture-feedback → lessons → prevention rules
|
|
28
|
+
|
|
29
|
+
## Never
|
|
30
|
+
- Clone/vendor CyberStrikeAI or CloudWeGo Eino into ThumbGate
|
|
31
|
+
- Ship WebShell / C2 / metasploit recipe packs
|
|
32
|
+
- Invent automation ROI percentages
|
|
33
|
+
- Run offensive tools without authorization grant + HITL
|
|
34
|
+
|
|
35
|
+
## Source
|
|
36
|
+
https://github.com/Ed1s0nZ/CyberStrikeAI · https://x.com/tom_doerr/status/2094509419929174170 — FORMAT only; not affiliated.
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: gitlab-sandbox-allowlist-not-trust
|
|
3
|
+
description: >
|
|
4
|
+
GitLab 2026-09 FORMAT steal: sandbox allowlists are hops, not trust
|
|
5
|
+
boundaries. Audit package-registry/proxy/HF destinations and trust-handoff
|
|
6
|
+
writes on existing ThumbGate egress rails. Never clone GitLab Duo.
|
|
7
|
+
Slash: /gitlab-sandbox-allowlist-not-trust.
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# GitLab sandbox allowlist ≠ trust
|
|
11
|
+
|
|
12
|
+
## Goal
|
|
13
|
+
|
|
14
|
+
Produce fail-closed honesty for whom: ThumbGate agents treating
|
|
15
|
+
`deny-network-egress` / `agent-egress-policy` allowlists as sandbox
|
|
16
|
+
containment — so a permitted package proxy cannot silently become the
|
|
17
|
+
escape hop GitLab documented.
|
|
18
|
+
|
|
19
|
+
## Constraints
|
|
20
|
+
|
|
21
|
+
| NEVER | ALWAYS |
|
|
22
|
+
| --- | --- |
|
|
23
|
+
| Clone GitLab Duo Agent Platform / execution sandbox SKU | Classify registry/proxy/HF hosts as `bridge` |
|
|
24
|
+
| Treat allowlisted `registry.npmjs.org` as trusted | Independent auth before credentials ride a hop |
|
|
25
|
+
| Auto-promote observed proxy traffic onto `allowHosts` | Put bridge hosts on `bridgeHosts` only |
|
|
26
|
+
| Claim hook/CI/MCP writes are sandbox-contained | Call them trust-handoff |
|
|
27
|
+
| Dual-edit untracked `scripts/gitlab-ai-sandbox-integration.js` | Use this doctor + existing egress policy |
|
|
28
|
+
| Hero Continuity / net-new governance SKU | Map onto PreToolUse + `agent-egress-policy` |
|
|
29
|
+
|
|
30
|
+
HARD fail closed. REFUSE SKU clones. ECI: maintenance of existing egress rails only.
|
|
31
|
+
|
|
32
|
+
## Reference
|
|
33
|
+
|
|
34
|
+
- https://www.infoq.com/news/2026/09/gitlab-ai-sandbox-access/
|
|
35
|
+
- https://about.gitlab.com/blog/ai-agent-sandbox/
|
|
36
|
+
- `scripts/allowlist-bridge-honesty.js`
|
|
37
|
+
- `scripts/agent-egress-policy.js` (`STATIC_ALLOW_BRIDGE`, `ALLOWLIST_BRIDGE_CREDENTIAL`)
|
|
38
|
+
- `THREAT_MODEL.md` policy-vs-containment
|
|
39
|
+
- `/high-roi-steal-and-finish` · `/eci-thumbgate-ip-wall`
|
|
40
|
+
|
|
41
|
+
## Examples (show, don't tell)
|
|
42
|
+
|
|
43
|
+
Weak: Summarize GitLab Duo and add a container sandbox class.
|
|
44
|
+
|
|
45
|
+
Gold:
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
$ npx thumbgate@1.36.1 allowlist-bridge-honesty --json
|
|
49
|
+
allowlistIsTrustBoundary: false
|
|
50
|
+
$ node --test tests/allowlist-bridge-honesty.test.js
|
|
51
|
+
# Authorization to registry.npmjs.org → ALLOWLIST_BRIDGE_CREDENTIAL deny
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
## Procedures
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
npx thumbgate@1.36.1 allowlist-bridge-honesty --json
|
|
58
|
+
npx thumbgate@1.36.1 allowlist-bridge-honesty --allow-hosts=registry.npmjs.org --treat-allowlist-as-trust --json
|
|
59
|
+
npx thumbgate@1.36.1 allowlist-bridge-honesty --write=.github/workflows/ci.yml --claimed-contained --json
|
|
60
|
+
npm run test:allowlist-bridge-honesty
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
1. Classify every allowlisted host (`bridge` vs `public` vs `ssrf_private`).
|
|
64
|
+
2. Deny credentialed requests to bridge hops unless `independentAuth` is already granted.
|
|
65
|
+
3. Keep observe→draft from promoting package proxies onto `allowHosts`.
|
|
66
|
+
4. Label privileged-consumer writes as trust-handoff.
|
|
67
|
+
5. Refuse `--clone-gitlab-duo`.
|
|
68
|
+
|
|
69
|
+
## Rubric
|
|
70
|
+
|
|
71
|
+
- gold fixture (this repo default gate) → `ok=true`, `allowlistIsTrustBoundary=false`
|
|
72
|
+
- `--treat-allowlist-as-trust` with npm registry → `ok=false`
|
|
73
|
+
- `--clone-gitlab-duo` → `ok=false`
|
|
74
|
+
- observe draft of `registry.npmjs.org` → not in `allowHosts`
|
|
75
|
+
- Authorization to allowlisted npm → `ALLOWLIST_BRIDGE_CREDENTIAL`
|
|
76
|
+
- doctor: `npm run test:allowlist-bridge-honesty` PASS
|
|
77
|
+
- evidence: command output in the same turn
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: jit-harness-compare-not-clone
|
|
3
|
+
description: >
|
|
4
|
+
JIT-Agent (arXiv:2608.25593) is a harness-intelligence model, not a ThumbGate
|
|
5
|
+
clone. Steal the four-module FORMAT (memory/planning/action/capability) onto
|
|
6
|
+
existing rails; never train or download JIT-Agent. Slash: /jit-harness-compare-not-clone.
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# JIT-Agent — compare, do not clone
|
|
10
|
+
|
|
11
|
+
## When
|
|
12
|
+
JIT-Agent, arxiv 2608.25593, Rohan Paul harness intelligence, Model-as-a-Harness,
|
|
13
|
+
just-in-time harness evolution, HarnessFactory, four-module agent harness.
|
|
14
|
+
|
|
15
|
+
## Do
|
|
16
|
+
```bash
|
|
17
|
+
npx thumbgate jit-harness-compose --task="<what the agent should do>" --json
|
|
18
|
+
npx thumbgate jit-harness-compose --map-only
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
Map modules to existing rails:
|
|
22
|
+
- **memory** → lesson-retrieval / feedback / contextfs
|
|
23
|
+
- **planning** → `bin/agent-loop` Plan + GSD
|
|
24
|
+
- **action** → PreToolUse gates + `harness-selector` + `switchyard-router`
|
|
25
|
+
- **capability** → `subagent-profiles` + MCP allowlists + skills + model pool
|
|
26
|
+
|
|
27
|
+
## Never
|
|
28
|
+
- Train, serve, or download JIT-Agent-27B / `huggingface.co/JIT-Agent`
|
|
29
|
+
- Clone `bingreeky/JIT` HarnessFactory into ThumbGate
|
|
30
|
+
- Emit free-form harness programs as a new SKU
|
|
31
|
+
- Claim ThumbGate is JIT-Agent
|
|
32
|
+
|
|
33
|
+
## Source
|
|
34
|
+
https://arxiv.org/abs/2608.25593 · https://github.com/bingreeky/JIT — FORMAT only; not affiliated.
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: openui-catalog-compose-honesty
|
|
3
|
+
description: >
|
|
4
|
+
OpenUI FORMAT steal: catalog-compose-only, root-first streaming, repair-before-claim.
|
|
5
|
+
Audit agent-composed UI against an allowlisted component catalog; never clone OpenUI,
|
|
6
|
+
Thesys Gateway, or a generative-UI SKU. Slash: /openui-catalog-compose-honesty.
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# OpenUI Catalog-Compose Honesty
|
|
10
|
+
|
|
11
|
+
## Goal
|
|
12
|
+
Keep agent-composed UI honest: only allowlisted components, root-first streams, repair before any ready/done claim. Steal OpenUI FORMAT — do not clone the product.
|
|
13
|
+
|
|
14
|
+
## Constraints
|
|
15
|
+
- Never install `@openuidev/cli`, OpenUI Gateway, or Thesys Observability as ThumbGate
|
|
16
|
+
- Never invent components outside the catalog or `eval` / `new Function` generated UI
|
|
17
|
+
- Never claim UI/compose ready without `--repair --claim-ready` evidence
|
|
18
|
+
- Never dual-edit a sibling OpenUI/generative-UI WIP PR
|
|
19
|
+
- ECI: no net-new generative-UI SKU
|
|
20
|
+
|
|
21
|
+
## Reference
|
|
22
|
+
- https://www.openui.com/ (source FORMAT)
|
|
23
|
+
- Gates: `require-catalog-compose-only`, `require-repair-before-compose-claim`
|
|
24
|
+
- Script: `scripts/openui-catalog-compose-honesty.js`
|
|
25
|
+
- Docs: `docs/agents/openui-catalog-compose-honesty.md`
|
|
26
|
+
|
|
27
|
+
## Examples
|
|
28
|
+
```bash
|
|
29
|
+
# Clean catalog stream → ready
|
|
30
|
+
npx thumbgate openui-catalog-compose-honesty \
|
|
31
|
+
--catalog=catalog.json \
|
|
32
|
+
--stream=compose.txt \
|
|
33
|
+
--repair --claim-ready --json
|
|
34
|
+
|
|
35
|
+
# Unknown component / missing root → fail
|
|
36
|
+
npx thumbgate openui-catalog-compose-honesty \
|
|
37
|
+
--catalog='{"components":["Stack"]}' \
|
|
38
|
+
--stream=$'header = Ghost()\n' \
|
|
39
|
+
--json
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
Catalog:
|
|
43
|
+
```json
|
|
44
|
+
{ "components": ["Stack", "Card", "Table"] }
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
Stream (root first):
|
|
48
|
+
```
|
|
49
|
+
root = Stack([header, body])
|
|
50
|
+
header = Card()
|
|
51
|
+
body = Table([row])
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
## Procedures
|
|
55
|
+
1. Check sibling WIP for OpenUI/generative-UI PRs — do not duplicate.
|
|
56
|
+
2. Write or load a component catalog JSON.
|
|
57
|
+
3. Run doctor with `--catalog` + `--stream` (+ `--repair`).
|
|
58
|
+
4. Before any UI/compose done claim, re-run with `--claim-ready --strict`.
|
|
59
|
+
5. Wire gates from `config/gate-templates.json` Agent Honesty pair.
|
|
60
|
+
|
|
61
|
+
## Rubric
|
|
62
|
+
- ok=true when doctor status is `ready` with `repairClean=true` on the claimed stream
|
|
63
|
+
- ok=false on unknown components, missing root, arbitrary-code markers, or OpenUI SKU clone signals
|
|
64
|
+
- evidence: `--json` report in the same turn
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: token-shunt-honesty-not-clone
|
|
3
|
+
description: >
|
|
4
|
+
Steal Spotify Portal/shunt FORMAT: PreToolUse blocks untargeted Read above
|
|
5
|
+
350 lines, bare cat of large files, and full-file dumps. Do NOT install
|
|
6
|
+
shunt@portal, buy Portal, or claim 90% savings from GitHub App 162279530.
|
|
7
|
+
Slash: /token-shunt-honesty-not-clone.
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Token shunt FORMAT — intercept, don't clone Portal
|
|
11
|
+
|
|
12
|
+
## Goal
|
|
13
|
+
|
|
14
|
+
Produce fail-closed bulk-read intercepts for whom: ThumbGate agents — so
|
|
15
|
+
untargeted Read/cat of large files never dump into the frontier context, and
|
|
16
|
+
Spotify Portal stays a compare-not-clone neighbor, not a SKU or cash rail.
|
|
17
|
+
|
|
18
|
+
## Constraints
|
|
19
|
+
|
|
20
|
+
| NEVER | ALWAYS |
|
|
21
|
+
| --- | --- |
|
|
22
|
+
| Install `shunt@portal` / `@spotify/portal-cli` | `npx thumbgate token-shunt-honesty --json` |
|
|
23
|
+
| Buy Spotify Portal / Contact Sales as "make money" | Local slice (`offset`/`limit`, `cat \| grep`) |
|
|
24
|
+
| Claim 90% token savings from App 162279530 | Measure `--lines` + `--returned-lines` |
|
|
25
|
+
| Delegate architecture to Flash/Portal/AiKA | Frontier for reasoning; `local_slice` for boilerplate |
|
|
26
|
+
| Spam buy links via All-repositories write | ECI: no ThumbGate paid outreach through Portal |
|
|
27
|
+
|
|
28
|
+
## Reference
|
|
29
|
+
|
|
30
|
+
- https://github.com/spotify/portal-ai-plugins (Apache-2.0 shunt plugin — we do not vendor it)
|
|
31
|
+
- GitHub App install 162279530 = catalog connector, not revenue
|
|
32
|
+
- Marketplace (free cite only): https://github.com/marketplace/actions/thumbgate-agent-governance
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
npx thumbgate token-shunt-honesty --json --lines=800
|
|
36
|
+
npx thumbgate token-shunt-honesty --json --lines=800 --targeted
|
|
37
|
+
npx thumbgate token-shunt-honesty --json --clone-portal
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## Examples (show, don't tell)
|
|
41
|
+
|
|
42
|
+
Weak: "Install Portal, we will save 90% and make money."
|
|
43
|
+
|
|
44
|
+
Gold:
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
$ npx thumbgate token-shunt-honesty --json --lines=800
|
|
48
|
+
{"ok":false,"findings":[{"id":"untargeted_bulk_read"}]}
|
|
49
|
+
$ npx thumbgate token-shunt-honesty --json --lines=800 --targeted
|
|
50
|
+
{"ok":true}
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## Procedures
|
|
54
|
+
|
|
55
|
+
1. Block untargeted Read above 350 lines.
|
|
56
|
+
2. Block bare `cat`/`head`/`tail`/`less`/`more` of large files; allow pipes to grep/rg.
|
|
57
|
+
3. Block returning the whole file to the frontier model.
|
|
58
|
+
4. Refuse Portal/AiKA/Flash for architecture/debug.
|
|
59
|
+
5. Treat GitHub App all-repos write as a warn, not a payout.
|
|
60
|
+
|
|
61
|
+
## Rubric
|
|
62
|
+
|
|
63
|
+
- `--lines=800` → `untargeted_bulk_read`
|
|
64
|
+
- `--targeted` → `ok=true`
|
|
65
|
+
- `--clone-portal` → `portal_clone_refused`
|
|
66
|
+
- doctor: `npm run test:token-shunt-honesty` PASS
|
|
67
|
+
- evidence: command output in the same turn
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: typesafe-typed-questions-not-clone
|
|
3
|
+
description: >
|
|
4
|
+
TypeSafe (console.typesafe.ai/hook, Jev System One) is a calibrated decision
|
|
5
|
+
model, not a ThumbGate clone. Steal typed noul/choice/score + code-owned
|
|
6
|
+
route() + confidence-as-second-axis onto existing PreToolUse rails. Never
|
|
7
|
+
install typesafe-sdk, call api.typesafe.ai, clone Jev, or unpark the LLM
|
|
8
|
+
adjudicator (#3690/#3687). Slash: /typesafe-typed-questions-not-clone.
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# TypeSafe typed questions — compare, do not clone
|
|
12
|
+
|
|
13
|
+
## Goal
|
|
14
|
+
|
|
15
|
+
Produce fail-closed typed-question composition for whom: ThumbGate PreToolUse
|
|
16
|
+
— so a tool-call state is scored with independent noul/choice/score questions
|
|
17
|
+
and **code** routes pass|review|block. TypeSafe/Jev stays a neighbor FORMAT,
|
|
18
|
+
not a SKU, not an LLM adjudicator.
|
|
19
|
+
|
|
20
|
+
## Constraints
|
|
21
|
+
|
|
22
|
+
| NEVER | ALWAYS |
|
|
23
|
+
| --- | --- |
|
|
24
|
+
| Install `typesafe-sdk` / call `api.typesafe.ai` | `npx thumbgate typesafe-typed-questions --json` |
|
|
25
|
+
| Clone Jev / System One as the gate | Deterministic matchers answer the battery |
|
|
26
|
+
| Unpark LLM adjudicator (#3690/#3687) | Code owns `route()`; model does not emit the verdict |
|
|
27
|
+
| One free-form "should we allow this?" judge | Atomic noul per hazard + score for severity |
|
|
28
|
+
| Dual-edit untracked `llm-adjudicator` theater | Map onto existing `gate-check` rails |
|
|
29
|
+
|
|
30
|
+
HARD fail closed. REFUSE SKU clones. ECI: no net-new governance product.
|
|
31
|
+
Do NOT install `typesafe-sdk`. Do NOT call `api.typesafe.ai` from PreToolUse.
|
|
32
|
+
|
|
33
|
+
Complementary to trading `/typesafe-system-one-not-clone` (AGENT-651 claim gate). Do **not** dual-edit `IgorGanapolsky/trading` `scripts/typesafe_claim_gate.py`. This skill is ThumbGate PreToolUse only.
|
|
34
|
+
|
|
35
|
+
## Reference
|
|
36
|
+
|
|
37
|
+
- https://console.typesafe.ai/hook (signed-in intro / Replay intro)
|
|
38
|
+
- https://docs.typesafe.ai/cookbooks/llm_guardrails.md
|
|
39
|
+
- https://docs.typesafe.ai/patterns/confidence-routing.md
|
|
40
|
+
- Playground "Support agent audit" (noul battery + choice + score over one state)
|
|
41
|
+
- `scripts/typesafe-typed-questions.js`
|
|
42
|
+
- `/high-roi-steal-and-finish` · `/eci-thumbgate-ip-wall`
|
|
43
|
+
|
|
44
|
+
## Examples (show, don't tell)
|
|
45
|
+
|
|
46
|
+
Weak: Summarize Jev and `npm install typesafe-sdk` as the new PreToolUse hook.
|
|
47
|
+
|
|
48
|
+
Gold:
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
$ npx thumbgate typesafe-typed-questions --json --map-only
|
|
52
|
+
codeOwnsRoute: true
|
|
53
|
+
$ npx thumbgate typesafe-typed-questions --json --tool-name=Bash --command='git push --force origin main'
|
|
54
|
+
{"route":"block","answers":{"destructive":{"noul":1,"source":"deterministic"}}}
|
|
55
|
+
$ node --test tests/typesafe-typed-questions.test.js
|
|
56
|
+
# --clone-jev / --use-typesafe-api / --llm-adjudicate → fail
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
## Procedures
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
npx thumbgate typesafe-typed-questions --json --map-only
|
|
63
|
+
npx thumbgate typesafe-typed-questions --json --tool-name=Bash --command='git push --force origin main'
|
|
64
|
+
npx thumbgate typesafe-typed-questions --json --clone-jev
|
|
65
|
+
npm run test:typesafe-typed-questions
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
1. Put the PreToolUse payload in `state`.
|
|
69
|
+
2. Ask independent typed questions (noul per hazard, choice for family, score for severity).
|
|
70
|
+
3. Answer them with deterministic matchers — never Jev.
|
|
71
|
+
4. `route()` in code: action threshold → block, review threshold → review, severity ≥ 2 promotes review to block.
|
|
72
|
+
5. Refuse `--clone-jev`, `--use-typesafe-api`, `--llm-adjudicate`, and model-emitted verdicts.
|
|
73
|
+
|
|
74
|
+
## Rubric
|
|
75
|
+
|
|
76
|
+
- empty / ordinary Read → `route=pass`, `ok=true`
|
|
77
|
+
- `git push --force` → `route=block`, `destructive.noul=1`
|
|
78
|
+
- `git add -A` → `route=review` (warn-level noul=0.55)
|
|
79
|
+
- `--clone-jev` / `--use-typesafe-api` / `--llm-adjudicate` → `ok=false`
|
|
80
|
+
- playground-shaped noul without a matcher → `unevaluated_question` (do not call Jev)
|
|
81
|
+
- doctor: `npm run test:typesafe-typed-questions` PASS
|
|
82
|
+
- evidence: command output in the same turn
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: zvec-grep-compare-not-clone
|
|
3
|
+
description: >
|
|
4
|
+
zg (zvec-grep) is a local-first search layer (ripgrep + BM25 + vector), not a
|
|
5
|
+
ThumbGate clone. Steal the four-route FORMAT onto existing rails; never install
|
|
6
|
+
@zvec/zvec-grep. Slash: /zvec-grep-compare-not-clone.
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# zvec-grep — compare, do not clone
|
|
10
|
+
|
|
11
|
+
## When
|
|
12
|
+
Qwen zg, zvec-grep, MarkTechPost zvec, unify ripgrep BM25 vector, local-first search layer.
|
|
13
|
+
|
|
14
|
+
## Do
|
|
15
|
+
```bash
|
|
16
|
+
npx thumbgate workspace-search-route --query="<intent or symbol>" --json
|
|
17
|
+
npx thumbgate workspace-search-route --query="<symbol>" --rg --execute
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
Map routes to existing rails (see `docs/agents/code-search.md`):
|
|
21
|
+
- `--rg` → ripgrep / Grep
|
|
22
|
+
- `--fts` → filesystem-search / BM25F
|
|
23
|
+
- `--vector` → LanceDB (local); remote needs `THUMBGATE_ALLOW_REMOTE_EMBED=1`
|
|
24
|
+
- `--hybrid` → pragmatic-hybrid-search RRF (default)
|
|
25
|
+
- `--graph` → Graphify AST graph
|
|
26
|
+
|
|
27
|
+
## Never
|
|
28
|
+
- `npm install -g @zvec/zvec-grep` inside ThumbGate
|
|
29
|
+
- Claim ThumbGate is zg / zvec
|
|
30
|
+
- Dual-edit DIRTY lesson-graph PR #3650
|
|
31
|
+
- Silent remote embeddings
|
|
32
|
+
|
|
33
|
+
## Source
|
|
34
|
+
https://github.com/zvec-ai/zvec-grep (Apache-2.0) — FORMAT only; not affiliated.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "thumbgate",
|
|
3
3
|
"description": "One 👎 becomes a hard rule the agent cannot bypass. Captures thumbs-down feedback, distills it into PreToolUse Pre-Action Checks, enforced across every future Claude Code session.",
|
|
4
|
-
"version": "1.
|
|
4
|
+
"version": "1.37.2",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Igor Ganapolsky",
|
|
7
7
|
"email": "ig5973700@gmail.com",
|
package/.well-known/llms.txt
CHANGED
|
@@ -62,6 +62,7 @@ npx thumbgate init --agent claude-code
|
|
|
62
62
|
- Codex Plugin: https://thumbgate.ai/codex-plugin
|
|
63
63
|
- Free local CLI: 2 captures/day, 10 total captures, up to 3 active auto-promoted prevention rules, and local Pre-Action Checks after install (recall and lesson search are Pro-only)
|
|
64
64
|
- Pro: $19/mo or $149/yr — personal enforcement proof, local dashboard, check debugger, DPO export, synced lessons/rules across machines, and review-ready exports
|
|
65
|
+
- Managed AI Agent Workflow Gate: one-time engagement covering one supported workflow — a 60-minute review, one configured local gate, its regression test, and written rollout/rollback proof within two business days. Current terms: https://thumbgate.ai/pricing
|
|
65
66
|
- Enterprise: custom pricing, scoped after intake — shared hosted lesson database, org-wide dashboard, GCP/DFCX guardrails, VPC gating, and white-glove workflow hardening sprints
|
|
66
67
|
|
|
67
68
|
## Links
|
package/CONTRIBUTING.md
ADDED
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
# Contributing to ThumbGate
|
|
2
|
+
|
|
3
|
+
Thank you for your interest in improving ThumbGate.
|
|
4
|
+
|
|
5
|
+
This project follows the [Contributor Covenant Code of Conduct](CODE_OF_CONDUCT.md).
|
|
6
|
+
|
|
7
|
+
## How to Contribute
|
|
8
|
+
|
|
9
|
+
1. Open an issue to discuss significant changes before writing code.
|
|
10
|
+
2. Fork the repository and create a feature branch.
|
|
11
|
+
3. Follow the existing two-space indentation and single-quote style.
|
|
12
|
+
4. Add or update tests for any changed behavior.
|
|
13
|
+
5. Run the relevant test suites (`npm test` and targeted tests) before opening a
|
|
14
|
+
pull request.
|
|
15
|
+
6. Use [Conventional Commits](https://www.conventionalcommits.org/) for commit
|
|
16
|
+
messages.
|
|
17
|
+
7. Reference the relevant issue in your PR description.
|
|
18
|
+
|
|
19
|
+
## Contributor License Agreement / Developer Certificate of Origin
|
|
20
|
+
|
|
21
|
+
By contributing code, documentation, diagrams, or other materials to the
|
|
22
|
+
ThumbGate repository, you agree that:
|
|
23
|
+
|
|
24
|
+
- You have the right to submit the contribution.
|
|
25
|
+
- You grant ThumbGate and its maintainers a perpetual, worldwide, royalty-free,
|
|
26
|
+
irrevocable license to use, reproduce, modify, distribute, and sublicense your
|
|
27
|
+
contribution under the MIT License and any future dual-licensing arrangements
|
|
28
|
+
used by the project.
|
|
29
|
+
- Your contribution is your original work or you have obtained all necessary
|
|
30
|
+
rights and permissions from any third-party rights holders.
|
|
31
|
+
- You sign off each commit with `git commit -s`, certifying the
|
|
32
|
+
[Developer Certificate of Origin](https://developercertificate.org/):
|
|
33
|
+
|
|
34
|
+
```text
|
|
35
|
+
Developer Certificate of Origin
|
|
36
|
+
Version 1.1
|
|
37
|
+
|
|
38
|
+
Copyright (C) 2004, 2006 The Linux Foundation and its contributors.
|
|
39
|
+
|
|
40
|
+
Everyone is permitted to copy and distribute verbatim copies of this
|
|
41
|
+
license document, but changing it is not allowed.
|
|
42
|
+
|
|
43
|
+
Developer's Certificate of Origin 1.1
|
|
44
|
+
|
|
45
|
+
By making a contribution to this project, I certify that:
|
|
46
|
+
|
|
47
|
+
(a) The contribution was created in whole or in part by me and I
|
|
48
|
+
have the right to submit it under the open source license
|
|
49
|
+
indicated in the file; or
|
|
50
|
+
|
|
51
|
+
(b) The contribution is based upon previous work that, to the best
|
|
52
|
+
of my knowledge, is covered under an appropriate open source
|
|
53
|
+
license and I have the right under that license to submit that
|
|
54
|
+
work with modifications, whether created in whole or in part
|
|
55
|
+
by me, under the same open source license (unless I am
|
|
56
|
+
permitted to submit under a different license), as indicated
|
|
57
|
+
in the file; or
|
|
58
|
+
|
|
59
|
+
(c) The contribution was provided directly to me by some other
|
|
60
|
+
person who certified (a), (b) or (c) and I have not modified
|
|
61
|
+
it.
|
|
62
|
+
|
|
63
|
+
(d) I understand and agree that this project and the contribution
|
|
64
|
+
are public and that a record of the contribution (including all
|
|
65
|
+
personal information I submit with it, including my sign-off) is
|
|
66
|
+
maintained indefinitely and may be redistributed consistent with
|
|
67
|
+
this project or the open source license(s) involved.
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
Pull requests without a Signed-off-by line may be rejected.
|
|
71
|
+
|
|
72
|
+
## Compensation and Commercial Use
|
|
73
|
+
|
|
74
|
+
Contributions to the public repository are made on a volunteer basis unless a
|
|
75
|
+
separate consulting agreement is signed with ThumbGate. The project maintainers
|
|
76
|
+
may incorporate your contribution into both open-source and commercial hosted
|
|
77
|
+
offerings governed by separate terms.
|
|
78
|
+
|
|
79
|
+
## Employment / Confidentiality Boundary
|
|
80
|
+
|
|
81
|
+
If you are subject to an employment agreement, non-disclosure agreement, or
|
|
82
|
+
invention-assignment obligation that may overlap with ThumbGate's domain (for
|
|
83
|
+
example, work in agentic AI, engineering acceleration, or AI governance), you
|
|
84
|
+
must certify that each contribution is entirely your own work, created on your
|
|
85
|
+
own time, without using any employer or third-party confidential information,
|
|
86
|
+
trade secrets, equipment, or facilities. See
|
|
87
|
+
`docs/legal/ECI_EMPLOYMENT_BOUNDARY_POLICY.md` for the project-wide policy.
|
|
88
|
+
|
|
89
|
+
Your Signed-off-by line implicitly certifies this boundary in addition to the
|
|
90
|
+
Developer Certificate of Origin.
|
|
91
|
+
|
|
92
|
+
## Questions
|
|
93
|
+
|
|
94
|
+
Contact the maintainers via the issue tracker at:
|
|
95
|
+
https://github.com/IgorGanapolsky/ThumbGate/issues
|