thumbgate 1.5.2 โ 1.5.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +2 -2
- package/.claude-plugin/plugin.json +1 -1
- package/.well-known/mcp/server-card.json +1 -1
- package/README.md +10 -6
- package/adapters/README.md +1 -1
- package/adapters/claude/.mcp.json +2 -2
- package/adapters/codex/config.toml +2 -2
- package/adapters/mcp/server-stdio.js +1 -1
- package/adapters/opencode/opencode.json +1 -1
- package/package.json +8 -3
- package/public/dashboard.html +39 -2
- package/public/index.html +8 -9
- package/public/lessons.html +16 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "thumbgate-marketplace",
|
|
3
|
-
"version": "1.5.
|
|
3
|
+
"version": "1.5.3",
|
|
4
4
|
"owner": {
|
|
5
5
|
"name": "Igor Ganapolsky",
|
|
6
6
|
"email": "ig5973700@gmail.com"
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
"source": "npm",
|
|
14
14
|
"package": "thumbgate"
|
|
15
15
|
},
|
|
16
|
-
"version": "1.5.
|
|
16
|
+
"version": "1.5.3",
|
|
17
17
|
"author": {
|
|
18
18
|
"name": "Igor Ganapolsky"
|
|
19
19
|
},
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "thumbgate",
|
|
3
3
|
"description": "Type ๐ or ๐ on any agent action. ThumbGate captures it, distills a lesson, and blocks the pattern from repeating. One thumbs-down = the agent physically cannot make that mistake again. 33 pre-action gates, budget enforcement, self-protection, and NIST/SOC2 compliance tags.",
|
|
4
|
-
"version": "1.5.
|
|
4
|
+
"version": "1.5.3",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Igor Ganapolsky"
|
|
7
7
|
},
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "thumbgate",
|
|
3
|
-
"version": "1.5.
|
|
3
|
+
"version": "1.5.3",
|
|
4
4
|
"description": "ThumbGate โ ๐๐ feedback that teaches your AI agent. Thumbs down a mistake, it never happens again.",
|
|
5
5
|
"homepage": "https://github.com/IgorGanapolsky/thumbgate",
|
|
6
6
|
"transport": "stdio",
|
package/README.md
CHANGED
|
@@ -221,9 +221,9 @@ npx thumbgate bench # run reliability benchmark
|
|
|
221
221
|
| | Free | Pro ($19/mo) | Team ($49/seat/mo) |
|
|
222
222
|
|---|---|---|---|
|
|
223
223
|
| Local CLI + enforced gates | โ
| โ
| โ
|
|
|
224
|
-
| Feedback captures
|
|
225
|
-
|
|
|
226
|
-
|
|
|
224
|
+
| Feedback captures (lifetime) | 3 | Unlimited | Unlimited |
|
|
225
|
+
| Auto-promoted prevention rules | 1 | Unlimited | Unlimited |
|
|
226
|
+
| MCP agent integrations | All | All | All |
|
|
227
227
|
| Personal dashboard | โ | โ
| โ
|
|
|
228
228
|
| DPO export (model fine-tuning) | โ | โ
| โ
|
|
|
229
229
|
| Team lesson export/import | โ | โ
| โ
|
|
|
@@ -231,7 +231,9 @@ npx thumbgate bench # run reliability benchmark
|
|
|
231
231
|
| Org-wide dashboard | โ | โ | โ
|
|
|
232
232
|
| Approval + audit proof | โ | โ | โ
|
|
|
233
233
|
|
|
234
|
-
The free tier gives you 3 feedback captures
|
|
234
|
+
The free tier gives you 3 lifetime feedback captures and 1 auto-promoted prevention rule โ enough to prove the enforcement loop works. MCP integrations for all agents (Claude Code, Cursor, Codex, Gemini, Amp, OpenCode) ship free.
|
|
235
|
+
|
|
236
|
+
Pro ($19/mo or $149/yr) lifts those caps and adds history-aware lesson recall, lesson search, DPO export, and a personal dashboard. Team ($49/seat/mo) adds a shared hosted lesson DB, org dashboard, and shared enforcement across the org. Pro and Team include `open_feedback_session`, `append_feedback_context`, and `finalize_feedback_session` for structured multi-turn feedback capture.
|
|
235
237
|
|
|
236
238
|
**Best first paid motion for teams:** the **Workflow Hardening Sprint** โ qualify one repeated failure before committing to a full rollout. **[Start intake โ](https://thumbgate-production.up.railway.app/?utm_source=github&utm_medium=readme&utm_campaign=team_rollout#workflow-sprint-intake)**
|
|
237
239
|
|
|
@@ -320,7 +322,7 @@ curl -X POST http://localhost:3456/v1/dpo/export \
|
|
|
320
322
|
| Layer | Technology |
|
|
321
323
|
|-------|-----------|
|
|
322
324
|
| **Storage** | SQLite + FTS5, LanceDB vectors, JSONL logs |
|
|
323
|
-
| **Capture** | 3 feedback
|
|
325
|
+
| **Capture** | 3 feedback captures lifetime (free), unlimited (Pro) |
|
|
324
326
|
| **Intelligence** | MemAlign dual recall, Thompson Sampling |
|
|
325
327
|
| **Enforcement** | PreToolUse hook engine, Gates config |
|
|
326
328
|
| **Interfaces** | MCP stdio, HTTP API, CLI (Node.js >=18) |
|
|
@@ -378,7 +380,9 @@ Those are suggestions the agent can ignore. ThumbGate gates are enforced โ the
|
|
|
378
380
|
If it supports MCP or pre-action hooks, yes. Claude Code, Claude Desktop, Cursor, Codex, Gemini CLI, Amp, OpenCode all work out of the box.
|
|
379
381
|
|
|
380
382
|
**Is it free?**
|
|
381
|
-
The free tier gives you 3
|
|
383
|
+
The free tier gives you 3 lifetime feedback captures and 1 auto-promoted prevention rule โ enough to prove the enforcement loop works. MCP integrations ship free for every agent.
|
|
384
|
+
|
|
385
|
+
Pro ($19/mo or $149/yr) lifts those caps and adds history-aware lesson recall, lesson search, and a personal dashboard. Team ($49/seat/mo) adds a shared hosted lesson DB, org dashboard, and shared enforcement.
|
|
382
386
|
|
|
383
387
|
---
|
|
384
388
|
|
package/adapters/README.md
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
- `chatgpt/openapi.yaml`: import into GPT Actions.
|
|
4
4
|
- `gemini/function-declarations.json`: Gemini function-calling definitions.
|
|
5
5
|
- `mcp/server-stdio.js`: underlying local MCP stdio server implementation.
|
|
6
|
-
- `claude/.mcp.json`: example Claude Code MCP config using `npx --yes --package thumbgate@1.5.
|
|
6
|
+
- `claude/.mcp.json`: example Claude Code MCP config using `npx --yes --package thumbgate@1.5.3 thumbgate serve`.
|
|
7
7
|
- `codex/config.toml`: example Codex MCP profile section using the same version-pinned portable launcher.
|
|
8
8
|
- `amp/skills/thumbgate-feedback/SKILL.md`: Amp skill template.
|
|
9
9
|
- `opencode/opencode.json`: portable OpenCode MCP profile using the same version-pinned portable launcher.
|
|
@@ -2,13 +2,13 @@
|
|
|
2
2
|
"mcpServers": {
|
|
3
3
|
"thumbgate": {
|
|
4
4
|
"command": "npx",
|
|
5
|
-
"args": ["--yes", "--package", "thumbgate@1.5.
|
|
5
|
+
"args": ["--yes", "--package", "thumbgate@1.5.3", "thumbgate", "serve"]
|
|
6
6
|
}
|
|
7
7
|
},
|
|
8
8
|
"hooks": {
|
|
9
9
|
"preToolUse": {
|
|
10
10
|
"command": "npx",
|
|
11
|
-
"args": ["--yes", "--package", "thumbgate@1.5.
|
|
11
|
+
"args": ["--yes", "--package", "thumbgate@1.5.3", "thumbgate", "gate-check"]
|
|
12
12
|
}
|
|
13
13
|
}
|
|
14
14
|
}
|
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
# ~/.codex/config.json with the ThumbGate hooks and status line.
|
|
4
4
|
[mcp_servers.thumbgate]
|
|
5
5
|
command = "npx"
|
|
6
|
-
args = ["--yes", "--package", "thumbgate@1.5.
|
|
6
|
+
args = ["--yes", "--package", "thumbgate@1.5.3", "thumbgate", "serve"]
|
|
7
7
|
|
|
8
8
|
# Hard PreToolUse hook for Codex
|
|
9
9
|
[hooks.pre_tool_use]
|
|
10
10
|
command = "npx"
|
|
11
|
-
args = ["--yes", "--package", "thumbgate@1.5.
|
|
11
|
+
args = ["--yes", "--package", "thumbgate@1.5.3", "thumbgate", "gate-check"]
|
|
@@ -146,7 +146,7 @@ const {
|
|
|
146
146
|
finalizeSession: finalizeFeedbackSession,
|
|
147
147
|
} = require('../../scripts/feedback-session');
|
|
148
148
|
|
|
149
|
-
const SERVER_INFO = { name: 'thumbgate-mcp', version: '1.5.
|
|
149
|
+
const SERVER_INFO = { name: 'thumbgate-mcp', version: '1.5.3' };
|
|
150
150
|
const COMMERCE_CATEGORIES = [
|
|
151
151
|
'product_recommendation',
|
|
152
152
|
'brand_compliance',
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "thumbgate",
|
|
3
|
-
"version": "1.5.
|
|
3
|
+
"version": "1.5.3",
|
|
4
4
|
"description": "Self-improving agent governance: type thumbs-up or thumbs-down on any AI agent action. ThumbGate turns every mistake into a prevention rule and blocks the pattern from repeating. One thumbs-down, never again. 33 pre-action gates, budget enforcement, and self-protection for Claude Code, Cursor, Codex, Gemini CLI, and Amp.",
|
|
5
5
|
"homepage": "https://thumbgate-production.up.railway.app",
|
|
6
6
|
"repository": {
|
|
@@ -245,7 +245,7 @@
|
|
|
245
245
|
"trace:eval": "node scripts/decision-trace.js eval",
|
|
246
246
|
"social:reply-monitor": "node scripts/social-reply-monitor.js",
|
|
247
247
|
"social:reply-monitor:dry": "node scripts/social-reply-monitor.js --dry-run",
|
|
248
|
-
"test": "npm run test:schema && npm run test:loop && npm run test:dpo && npm run test:kto && npm run test:api && npm run test:proof && npm run test:e2e && npm run test:rlaif && npm run test:attribution && npm run test:quality && npm run test:intelligence && npm run test:training-export && npm run test:deployment && npm run test:operational-integrity && npm run test:workflow && npm run test:billing && npm run test:cli && npm run test:watcher && npm run test:autoresearch && npm run test:ops && npm run test:session-analyzer && npm run test:tessl && npm run test:gates && npm run test:evoskill && npm run test:gates-hardening && npm run test:workers && npm run test:social-analytics && npm run test:memalign && npm run test:xmemory-lite && npm run test:filesystem-search && npm run test:zernio && npm run test:post-video && npm run test:post-everywhere-instagram && npm run test:obsidian-export && npm run test:lesson-db && npm run test:lesson-rotation && npm run test:memory-dedup && npm run test:feedback-quality && npm run test:sync-version && npm run test:check-congruence && npm run test:tool-registry && npm run test:feedback-to-rules && npm run test:memory-firewall && npm run test:belief-update && npm run test:hosted-config && npm run test:operational-summary && npm run test:operator-key-auth && npm run test:cloudflare-sandbox && npm run test:mcp-config && npm run test:plan-gate && npm run test:pulse && npm run test:semantic-layer && npm run test:data-pipeline && npm run test:optimize-context && npm run test:principle-extractor && npm run test:analytics-window && npm run test:funnel-analytics && npm run test:experiment-tracker && npm run test:build-metadata && npm run test:context-engine && npm run test:hf-papers && npm run test:marketing-experiment && npm run test:seo-gsd && npm run test:verify-run && npm run test:export-dpo-pairs && npm run test:export-hf-dataset && npm run test:license && npm run test:bot-detector && npm run test:postinstall && npm run test:funnel-invariants && npm run test:cli-telemetry && npm run test:pro-parity && npm run test:model-tier-router && npm run test:computer-use-firewall && npm run test:skill-exporter && npm run test:statusline && npm run test:evolution && npm run test:org-dashboard && npm run test:multi-hop-recall && npm run test:synthetic-dpo && npm run test:thumbgate-skill && npm run test:learn-hub && npm run test:feedback-fallback && npm run test:metaclaw && npm run test:server-lock && npm run test:control-tower && npm run test:pii-scanner && npm run test:data-governance && npm run test:lesson-inference && npm run test:semantic-dedup && npm run test:fs-utils && npm run test:cli-schema && npm run test:explore && npm run test:lesson-reranker && npm run test:lesson-retrieval && npm run test:cross-encoder && npm run test:reflector-agent && npm run test:feedback-session && npm run test:feedback-history-distiller && npm run test:hallucination-detector && npm run test:history-distiller && npm run test:predictive-insights && npm run test:prove-predictive-insights && npm run test:statusbar-cli && npm run test:generate-instagram-card && npm run test:instagram-thumbgate-post && npm run test:publish-instagram-thumbgate && npm run test:lesson-synthesis && npm run test:background-governance && npm run test:memory-migration && npm run test:prompt-dlp && npm run test:ephemeral-store && npm run test:agent-security && npm run test:skill-progressive && npm run test:per-step-scoring && npm run test:weekly-auto-post && npm run test:social-post-hourly && npm run test:social-quality-gate && npm run test:a2ui-engine && npm run test:gate-satisfy && npm run test:money-watcher && npm run test:budget && npm run test:quick-start && npm run test:utm && npm run test:product-feedback && npm run test:feedback-root-consolidator && npm run test:engagement-audit && npm run test:install-growth-automation && npm run test:publish-thumbgate-launch && npm run test:reconcile-thumbgate-campaign && npm run test:reddit-publisher && npm run test:schedule-thumbgate-campaign && npm run test:social-reply-monitor && npm run test:sync-launch-assets && npm run test:ai-search-visibility && npm run test:perplexity && npm run test:security-scanner && npm run test:llm-client && npm run test:managed-lesson-agent && npm run test:self-distill && npm run test:meta-agent && npm run test:harness-selector && npm run test:thumbgate-bench && npm run test:seo-guides && npm run test:enforcement-loop && npm run test:cli-agent-experience && npm run test:bot-detection && npm run test:checkout-bot-guard && npm run test:session-health && npm run test:session-episodes && npm run test:spec-gate && npm run test:decision-trace && npm run test:dashboard-insights && npm run test:prompt-eval && npm run test:demo-voiceover && npm run test:gate-coherence && npm run test:gate-eval && npm run test:high-roi && npm run test:public-static-assets && npm run test:token-savings && npm run test:workflow-gate-checkpoint && npm run test:lesson-export-import",
|
|
248
|
+
"test": "npm run test:schema && npm run test:loop && npm run test:dpo && npm run test:kto && npm run test:api && npm run test:proof && npm run test:e2e && npm run test:rlaif && npm run test:attribution && npm run test:quality && npm run test:intelligence && npm run test:training-export && npm run test:deployment && npm run test:operational-integrity && npm run test:workflow && npm run test:billing && npm run test:cli && npm run test:watcher && npm run test:autoresearch && npm run test:ops && npm run test:session-analyzer && npm run test:tessl && npm run test:gates && npm run test:evoskill && npm run test:gates-hardening && npm run test:workers && npm run test:social-analytics && npm run test:memalign && npm run test:xmemory-lite && npm run test:filesystem-search && npm run test:zernio && npm run test:post-video && npm run test:post-everywhere-instagram && npm run test:obsidian-export && npm run test:lesson-db && npm run test:lesson-rotation && npm run test:memory-dedup && npm run test:feedback-quality && npm run test:sync-version && npm run test:check-congruence && npm run test:tool-registry && npm run test:feedback-to-rules && npm run test:memory-firewall && npm run test:belief-update && npm run test:hosted-config && npm run test:operational-summary && npm run test:operator-key-auth && npm run test:cloudflare-sandbox && npm run test:mcp-config && npm run test:plan-gate && npm run test:pulse && npm run test:semantic-layer && npm run test:data-pipeline && npm run test:optimize-context && npm run test:principle-extractor && npm run test:analytics-window && npm run test:funnel-analytics && npm run test:experiment-tracker && npm run test:build-metadata && npm run test:context-engine && npm run test:hf-papers && npm run test:marketing-experiment && npm run test:seo-gsd && npm run test:verify-run && npm run test:export-dpo-pairs && npm run test:export-hf-dataset && npm run test:license && npm run test:bot-detector && npm run test:postinstall && npm run test:funnel-invariants && npm run test:cli-telemetry && npm run test:pro-parity && npm run test:model-tier-router && npm run test:computer-use-firewall && npm run test:skill-exporter && npm run test:statusline && npm run test:evolution && npm run test:org-dashboard && npm run test:multi-hop-recall && npm run test:synthetic-dpo && npm run test:thumbgate-skill && npm run test:learn-hub && npm run test:feedback-fallback && npm run test:metaclaw && npm run test:server-lock && npm run test:control-tower && npm run test:pii-scanner && npm run test:data-governance && npm run test:lesson-inference && npm run test:semantic-dedup && npm run test:fs-utils && npm run test:cli-schema && npm run test:explore && npm run test:lesson-reranker && npm run test:lesson-retrieval && npm run test:cross-encoder && npm run test:reflector-agent && npm run test:feedback-session && npm run test:feedback-history-distiller && npm run test:hallucination-detector && npm run test:history-distiller && npm run test:predictive-insights && npm run test:prove-predictive-insights && npm run test:statusbar-cli && npm run test:generate-instagram-card && npm run test:instagram-thumbgate-post && npm run test:publish-instagram-thumbgate && npm run test:lesson-synthesis && npm run test:background-governance && npm run test:memory-migration && npm run test:prompt-dlp && npm run test:ephemeral-store && npm run test:agent-security && npm run test:skill-progressive && npm run test:per-step-scoring && npm run test:weekly-auto-post && npm run test:social-post-hourly && npm run test:social-quality-gate && npm run test:a2ui-engine && npm run test:gate-satisfy && npm run test:money-watcher && npm run test:budget && npm run test:quick-start && npm run test:utm && npm run test:product-feedback && npm run test:feedback-root-consolidator && npm run test:engagement-audit && npm run test:install-growth-automation && npm run test:publish-thumbgate-launch && npm run test:reconcile-thumbgate-campaign && npm run test:reddit-publisher && npm run test:schedule-thumbgate-campaign && npm run test:social-reply-monitor && npm run test:sync-launch-assets && npm run test:ai-search-visibility && npm run test:perplexity && npm run test:security-scanner && npm run test:llm-client && npm run test:managed-lesson-agent && npm run test:self-distill && npm run test:meta-agent && npm run test:harness-selector && npm run test:thumbgate-bench && npm run test:seo-guides && npm run test:enforcement-loop && npm run test:cli-agent-experience && npm run test:bot-detection && npm run test:checkout-bot-guard && npm run test:session-health && npm run test:session-episodes && npm run test:spec-gate && npm run test:decision-trace && npm run test:dashboard-insights && npm run test:prompt-eval && npm run test:demo-voiceover && npm run test:gate-coherence && npm run test:gate-eval && npm run test:high-roi && npm run test:public-static-assets && npm run test:token-savings && npm run test:workflow-gate-checkpoint && npm run test:lesson-export-import && npm run test:landing-page-claims && npm run test:dashboard-deeplink-e2e",
|
|
249
249
|
"test:session-health": "node --test tests/session-health-sensor.test.js",
|
|
250
250
|
"test:session-episodes": "node --test tests/session-episode-store.test.js",
|
|
251
251
|
"test:spec-gate": "node --test tests/spec-gate.test.js",
|
|
@@ -340,6 +340,9 @@
|
|
|
340
340
|
"feedback:summary": "npm run test:api && node scripts/feedback-to-rules.js",
|
|
341
341
|
"feedback:rules": "node scripts/feedback-to-rules.js --rules",
|
|
342
342
|
"feedback:stats": "node .claude/scripts/feedback/capture-feedback.js --stats",
|
|
343
|
+
"demo:narration": "node scripts/render-demo-video/generate-narration.js",
|
|
344
|
+
"demo:render": "node scripts/render-demo-video/render.js",
|
|
345
|
+
"demo:render:full": "npm run demo:narration && npm run demo:render",
|
|
343
346
|
"adk:consolidate": "node scripts/adk-consolidator.js",
|
|
344
347
|
"adk:watch": "node scripts/adk-consolidator.js --watch",
|
|
345
348
|
"pr:manage": "node scripts/pr-manager.js",
|
|
@@ -476,7 +479,9 @@
|
|
|
476
479
|
"test:public-static-assets": "node --test tests/public-static-assets.test.js",
|
|
477
480
|
"test:token-savings": "node --test tests/token-savings.test.js",
|
|
478
481
|
"test:workflow-gate-checkpoint": "node --test tests/workflow-gate-checkpoint.test.js",
|
|
479
|
-
"test:lesson-export-import": "node --test tests/lesson-export-import.test.js"
|
|
482
|
+
"test:lesson-export-import": "node --test tests/lesson-export-import.test.js",
|
|
483
|
+
"test:landing-page-claims": "node --test tests/landing-page-claims.test.js",
|
|
484
|
+
"test:dashboard-deeplink-e2e": "node --test tests/dashboard-deeplink-e2e.test.js"
|
|
480
485
|
},
|
|
481
486
|
"keywords": [
|
|
482
487
|
"mcp",
|
package/public/dashboard.html
CHANGED
|
@@ -620,8 +620,45 @@ function setSource(el, source) {
|
|
|
620
620
|
function switchTab(name) {
|
|
621
621
|
document.querySelectorAll('.tab').forEach(function(t) { t.classList.remove('active'); });
|
|
622
622
|
document.querySelectorAll('.tab-content').forEach(function(c) { c.classList.remove('active'); });
|
|
623
|
-
document.querySelector('[onclick*="' + name + '"]')
|
|
624
|
-
document.getElementById('tab-' + name)
|
|
623
|
+
var tabEl = document.querySelector('[onclick*="' + name + '"]');
|
|
624
|
+
var contentEl = document.getElementById('tab-' + name);
|
|
625
|
+
if (tabEl) tabEl.classList.add('active');
|
|
626
|
+
if (contentEl) contentEl.classList.add('active');
|
|
627
|
+
// Sync URL hash so deep-links stay shareable without scroll jump
|
|
628
|
+
try {
|
|
629
|
+
if (('#' + name) !== window.location.hash) {
|
|
630
|
+
history.replaceState(null, '', '#' + name);
|
|
631
|
+
}
|
|
632
|
+
} catch (e) { /* ignore: older browsers or sandboxed frames */ }
|
|
633
|
+
}
|
|
634
|
+
|
|
635
|
+
/**
|
|
636
|
+
* Resolve deep-link tab target from URL hash or query string.
|
|
637
|
+
* Supports: /dashboard#insights, /dashboard?tab=gates, /dashboard#tab-export.
|
|
638
|
+
* Valid targets match tab-content ids (search, gates, team, generated,
|
|
639
|
+
* settings, templates, insights, export).
|
|
640
|
+
*/
|
|
641
|
+
function getDeepLinkTab() {
|
|
642
|
+
var valid = ['search', 'gates', 'team', 'generated', 'settings', 'templates', 'insights', 'export'];
|
|
643
|
+
var raw = (window.location.hash || '').replace(/^#/, '').replace(/^tab-/, '');
|
|
644
|
+
if (!raw) {
|
|
645
|
+
try {
|
|
646
|
+
var q = new URLSearchParams(window.location.search);
|
|
647
|
+
raw = (q.get('tab') || '').trim();
|
|
648
|
+
} catch (e) { raw = ''; }
|
|
649
|
+
}
|
|
650
|
+
return valid.indexOf(raw) >= 0 ? raw : null;
|
|
651
|
+
}
|
|
652
|
+
|
|
653
|
+
function applyDeepLinkTab() {
|
|
654
|
+
var target = getDeepLinkTab();
|
|
655
|
+
if (target) switchTab(target);
|
|
656
|
+
}
|
|
657
|
+
|
|
658
|
+
// Apply deep-link on initial load AND on hash change (so back/forward works)
|
|
659
|
+
if (typeof window !== 'undefined') {
|
|
660
|
+
window.addEventListener('DOMContentLoaded', applyDeepLinkTab);
|
|
661
|
+
window.addEventListener('hashchange', applyDeepLinkTab);
|
|
625
662
|
}
|
|
626
663
|
|
|
627
664
|
async function loadGates() {
|
package/public/index.html
CHANGED
|
@@ -872,7 +872,7 @@ __GA_BOOTSTRAP__
|
|
|
872
872
|
<!-- HOW IT WORKS -->
|
|
873
873
|
<section class="how-it-works" id="how-it-works">
|
|
874
874
|
<div class="container">
|
|
875
|
-
<div class="section-label">New in v1.5.
|
|
875
|
+
<div class="section-label">New in v1.5.3</div>
|
|
876
876
|
<h2 class="section-title">Three steps to stop repeated AI failures</h2>
|
|
877
877
|
<div class="steps">
|
|
878
878
|
<div class="step">
|
|
@@ -1024,12 +1024,11 @@ __GA_BOOTSTRAP__
|
|
|
1024
1024
|
<p style="font-size:13px;color:#aaa;margin-bottom:16px;">3 captures, 1 rule, 1 agent. Enough to prove the enforcement loop works. When you need more, you will know.</p>
|
|
1025
1025
|
<ul>
|
|
1026
1026
|
<li><strong>3 feedback captures total</strong> (not per day)</li>
|
|
1027
|
-
<li>1 prevention rule</li>
|
|
1028
|
-
<li>1 agent</li>
|
|
1027
|
+
<li>1 auto-promoted prevention rule</li>
|
|
1029
1028
|
<li>No recall or lesson search</li>
|
|
1030
|
-
<li>No exports</li>
|
|
1031
|
-
<li>All MCP integrations (Claude Code, Cursor, Codex,
|
|
1032
|
-
<li>PreToolUse hook blocking</li>
|
|
1029
|
+
<li>No exports (DPO, Databricks, HuggingFace)</li>
|
|
1030
|
+
<li>All MCP integrations (Claude Code, Cursor, Codex, Gemini, Amp, any MCP agent)</li>
|
|
1031
|
+
<li>PreToolUse hook blocking with built-in safety gates (force-push, destructive SQL, secrets)</li>
|
|
1033
1032
|
<li><a href="/guide" style="color:var(--cyan);text-decoration:underline;">Setup guide for all agents โ</a></li>
|
|
1034
1033
|
</ul>
|
|
1035
1034
|
<div class="hero-install" onclick="copyInstall(this)" title="Click to copy" style="margin-bottom:12px;width:100%;justify-content:center;">
|
|
@@ -1060,9 +1059,9 @@ __GA_BOOTSTRAP__
|
|
|
1060
1059
|
</div>
|
|
1061
1060
|
<ul>
|
|
1062
1061
|
<li>Everything in Free, plus:</li>
|
|
1063
|
-
<li><a href="/dashboard" style="color:var(--cyan);text-decoration:underline;">Visual gate debugger โ</a> see every blocked action and the gate that fired so you can trust the system in minutes</li>
|
|
1062
|
+
<li><a href="/dashboard#insights" style="color:var(--cyan);text-decoration:underline;">Visual gate debugger โ</a> see every blocked action and the gate that fired so you can trust the system in minutes</li>
|
|
1064
1063
|
<li>Auto-connect โ activate once with your license key, then your running agents appear automatically on your local dashboard</li>
|
|
1065
|
-
<li><a href="/dashboard" style="color:var(--cyan);text-decoration:underline;">DPO training data export โ</a> turn real thumbs-downs into ready-to-use preference pairs for fine-tuning (LoRA / JSONL)</li>
|
|
1064
|
+
<li><a href="/dashboard#export" style="color:var(--cyan);text-decoration:underline;">DPO training data export โ</a> turn real thumbs-downs into ready-to-use preference pairs for fine-tuning (LoRA / JSONL)</li>
|
|
1066
1065
|
<li><strong>HuggingFace dataset export</strong> โ share PII-redacted agent traces as open training datasets (<code>npm run export:hf</code>)</li>
|
|
1067
1066
|
<li><strong>Model Hardening Advisor</strong> โ get recommendations on when and how to fine-tune your model to natively avoid recurring failures</li>
|
|
1068
1067
|
<li>Personal local dashboard โ every Pro user gets a localhost dashboard without extra cloud setup</li>
|
|
@@ -1229,7 +1228,7 @@ __GA_BOOTSTRAP__
|
|
|
1229
1228
|
<a href="https://www.linkedin.com/in/igorganapolsky" target="_blank" rel="noopener">LinkedIn</a>
|
|
1230
1229
|
<a href="/blog">Blog</a>
|
|
1231
1230
|
</div>
|
|
1232
|
-
<span class="footer-copy">ยฉ 2026 Max Smith KDP LLC ยท MIT License ยท v1.5.
|
|
1231
|
+
<span class="footer-copy">ยฉ 2026 Max Smith KDP LLC ยท MIT License ยท v1.5.3</span>
|
|
1233
1232
|
</div>
|
|
1234
1233
|
</footer>
|
|
1235
1234
|
|
package/public/lessons.html
CHANGED
|
@@ -936,6 +936,22 @@ loadLive().then(function() {
|
|
|
936
936
|
el.style.borderColor = 'var(--cyan)';
|
|
937
937
|
el.style.boxShadow = '0 0 12px rgba(34,211,238,0.3)';
|
|
938
938
|
setTimeout(function() { el.style.borderColor = ''; el.style.boxShadow = ''; }, 4000);
|
|
939
|
+
} else {
|
|
940
|
+
// Deep-link hash was provided but no matching lesson/feedback was found.
|
|
941
|
+
// Surface this to the user instead of silently loading the page top โ the
|
|
942
|
+
// linked lesson may have been pruned, rotated, or the ID may be stale.
|
|
943
|
+
var banner = document.createElement('div');
|
|
944
|
+
banner.setAttribute('role', 'alert');
|
|
945
|
+
banner.style.cssText = 'margin:12px 0;padding:12px 16px;border:1px solid rgba(251,191,36,0.4);background:rgba(251,191,36,0.08);border-radius:10px;color:var(--text);font-size:13px;';
|
|
946
|
+
banner.innerHTML =
|
|
947
|
+
'<strong style="color:#fbbf24;">Lesson not found:</strong> ' +
|
|
948
|
+
'<code style="background:var(--bg-card);padding:2px 6px;border-radius:4px;font-size:12px;">' +
|
|
949
|
+
hash.replace(/[<>&"]/g, function(c) { return {'<':'<','>':'>','&':'&','"':'"'}[c]; }) +
|
|
950
|
+
'</code>' +
|
|
951
|
+
' โ this ID is not in the active lesson index. It may have been rotated or the statusbar link is stale. ' +
|
|
952
|
+
'Browse rules and timeline below to find what you were looking for.';
|
|
953
|
+
var container = document.querySelector('.container') || document.body;
|
|
954
|
+
container.insertBefore(banner, container.firstChild);
|
|
939
955
|
}
|
|
940
956
|
});
|
|
941
957
|
</script>
|