moflo 4.8.21 → 4.8.22
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/agents/browser/browser-agent.yaml +182 -182
- package/.claude/agents/core/coder.md +265 -265
- package/.claude/agents/core/planner.md +167 -167
- package/.claude/agents/core/researcher.md +189 -189
- package/.claude/agents/core/reviewer.md +325 -325
- package/.claude/agents/core/tester.md +318 -318
- package/.claude/agents/database-specialist.yaml +21 -21
- package/.claude/agents/dual-mode/codex-coordinator.md +224 -224
- package/.claude/agents/dual-mode/codex-worker.md +211 -211
- package/.claude/agents/dual-mode/dual-orchestrator.md +291 -291
- package/.claude/agents/github/code-review-swarm.md +537 -537
- package/.claude/agents/github/github-modes.md +172 -172
- package/.claude/agents/github/issue-tracker.md +318 -318
- package/.claude/agents/github/multi-repo-swarm.md +552 -552
- package/.claude/agents/github/pr-manager.md +190 -190
- package/.claude/agents/github/project-board-sync.md +508 -508
- package/.claude/agents/github/release-manager.md +366 -366
- package/.claude/agents/github/release-swarm.md +582 -582
- package/.claude/agents/github/repo-architect.md +397 -397
- package/.claude/agents/github/swarm-issue.md +572 -572
- package/.claude/agents/github/swarm-pr.md +427 -427
- package/.claude/agents/github/sync-coordinator.md +451 -451
- package/.claude/agents/github/workflow-automation.md +634 -634
- package/.claude/agents/goal/code-goal-planner.md +445 -445
- package/.claude/agents/hive-mind/collective-intelligence-coordinator.md +129 -129
- package/.claude/agents/hive-mind/queen-coordinator.md +202 -202
- package/.claude/agents/hive-mind/scout-explorer.md +241 -241
- package/.claude/agents/hive-mind/swarm-memory-manager.md +192 -192
- package/.claude/agents/hive-mind/worker-specialist.md +216 -216
- package/.claude/agents/index.yaml +17 -17
- package/.claude/agents/neural/safla-neural.md +73 -73
- package/.claude/agents/project-coordinator.yaml +15 -15
- package/.claude/agents/python-specialist.yaml +21 -21
- package/.claude/agents/reasoning/goal-planner.md +72 -72
- package/.claude/agents/security-auditor.yaml +20 -20
- package/.claude/agents/swarm/adaptive-coordinator.md +395 -395
- package/.claude/agents/swarm/hierarchical-coordinator.md +326 -326
- package/.claude/agents/swarm/mesh-coordinator.md +391 -391
- package/.claude/agents/templates/migration-plan.md +745 -745
- package/.claude/agents/typescript-specialist.yaml +21 -21
- package/.claude/checkpoints/1767754460.json +8 -8
- package/.claude/commands/agents/agent-spawning.md +28 -28
- package/.claude/commands/github/github-modes.md +146 -146
- package/.claude/commands/github/github-swarm.md +121 -121
- package/.claude/commands/github/issue-tracker.md +291 -291
- package/.claude/commands/github/pr-manager.md +169 -169
- package/.claude/commands/github/release-manager.md +337 -337
- package/.claude/commands/github/repo-architect.md +366 -366
- package/.claude/commands/github/sync-coordinator.md +300 -300
- package/.claude/commands/memory/neural.md +47 -47
- package/.claude/commands/sparc/analyzer.md +51 -51
- package/.claude/commands/sparc/architect.md +53 -53
- package/.claude/commands/sparc/ask.md +97 -97
- package/.claude/commands/sparc/batch-executor.md +54 -54
- package/.claude/commands/sparc/code.md +89 -89
- package/.claude/commands/sparc/coder.md +54 -54
- package/.claude/commands/sparc/debug.md +83 -83
- package/.claude/commands/sparc/debugger.md +54 -54
- package/.claude/commands/sparc/designer.md +53 -53
- package/.claude/commands/sparc/devops.md +109 -109
- package/.claude/commands/sparc/docs-writer.md +80 -80
- package/.claude/commands/sparc/documenter.md +54 -54
- package/.claude/commands/sparc/innovator.md +54 -54
- package/.claude/commands/sparc/integration.md +83 -83
- package/.claude/commands/sparc/mcp.md +117 -117
- package/.claude/commands/sparc/memory-manager.md +54 -54
- package/.claude/commands/sparc/optimizer.md +54 -54
- package/.claude/commands/sparc/orchestrator.md +131 -131
- package/.claude/commands/sparc/post-deployment-monitoring-mode.md +83 -83
- package/.claude/commands/sparc/refinement-optimization-mode.md +83 -83
- package/.claude/commands/sparc/researcher.md +54 -54
- package/.claude/commands/sparc/reviewer.md +54 -54
- package/.claude/commands/sparc/security-review.md +80 -80
- package/.claude/commands/sparc/sparc-modes.md +174 -174
- package/.claude/commands/sparc/sparc.md +111 -111
- package/.claude/commands/sparc/spec-pseudocode.md +80 -80
- package/.claude/commands/sparc/supabase-admin.md +348 -348
- package/.claude/commands/sparc/swarm-coordinator.md +54 -54
- package/.claude/commands/sparc/tdd.md +54 -54
- package/.claude/commands/sparc/tester.md +54 -54
- package/.claude/commands/sparc/tutorial.md +79 -79
- package/.claude/commands/sparc/workflow-manager.md +54 -54
- package/.claude/commands/sparc.md +166 -166
- package/.claude/commands/swarm/analysis.md +95 -95
- package/.claude/commands/swarm/development.md +96 -96
- package/.claude/commands/swarm/examples.md +168 -168
- package/.claude/commands/swarm/maintenance.md +102 -102
- package/.claude/commands/swarm/optimization.md +117 -117
- package/.claude/commands/swarm/research.md +136 -136
- package/.claude/commands/swarm/testing.md +131 -131
- package/.claude/commands/workflows/development.md +77 -77
- package/.claude/commands/workflows/research.md +62 -62
- package/.claude/guidance/moflo-bootstrap.md +126 -126
- package/.claude/guidance/shipped/agent-bootstrap.md +126 -126
- package/.claude/guidance/shipped/guidance-memory-strategy.md +262 -262
- package/.claude/guidance/shipped/memory-strategy.md +204 -204
- package/.claude/guidance/shipped/moflo.md +668 -653
- package/.claude/guidance/shipped/task-swarm-integration.md +441 -441
- package/.claude/helpers/intelligence.cjs +207 -207
- package/.claude/helpers/statusline.cjs +851 -851
- package/.claude/settings.local.json +18 -0
- package/.claude/skills/fl/SKILL.md +583 -583
- package/.claude/skills/flo/SKILL.md +583 -583
- package/.claude/skills/github-code-review/SKILL.md +1140 -1140
- package/.claude/skills/github-multi-repo/SKILL.md +874 -874
- package/.claude/skills/github-project-management/SKILL.md +1277 -1277
- package/.claude/skills/github-release-management/SKILL.md +1081 -1081
- package/.claude/skills/github-workflow-automation/SKILL.md +1065 -1065
- package/.claude/skills/hive-mind-advanced/SKILL.md +712 -712
- package/.claude/skills/hooks-automation/SKILL.md +1201 -1201
- package/.claude/skills/performance-analysis/SKILL.md +563 -563
- package/.claude/skills/sparc-methodology/SKILL.md +1115 -1115
- package/.claude/skills/swarm-advanced/SKILL.md +973 -973
- package/.claude/workflow-state.json +4 -4
- package/LICENSE +21 -21
- package/README.md +685 -685
- package/bin/cli.js +0 -0
- package/bin/gate-hook.mjs +50 -50
- package/bin/gate.cjs +138 -138
- package/bin/generate-code-map.mjs +775 -775
- package/bin/hook-handler.cjs +83 -83
- package/bin/hooks.mjs +656 -656
- package/bin/index-guidance.mjs +892 -892
- package/bin/index-tests.mjs +709 -709
- package/bin/lib/process-manager.mjs +243 -243
- package/bin/lib/registry-cleanup.cjs +41 -41
- package/bin/prompt-hook.mjs +72 -72
- package/bin/semantic-search.mjs +472 -472
- package/bin/session-start-launcher.mjs +238 -238
- package/bin/setup-project.mjs +250 -250
- package/package.json +123 -123
- package/src/@claude-flow/cli/README.md +452 -452
- package/src/@claude-flow/cli/bin/cli.js +180 -180
- package/src/@claude-flow/cli/bin/preinstall.cjs +2 -2
- package/src/@claude-flow/cli/dist/src/commands/completions.js +409 -409
- package/src/@claude-flow/cli/dist/src/commands/doctor.js +5 -1
- package/src/@claude-flow/cli/dist/src/commands/embeddings.js +25 -25
- package/src/@claude-flow/cli/dist/src/commands/github.js +61 -61
- package/src/@claude-flow/cli/dist/src/commands/hive-mind.js +90 -90
- package/src/@claude-flow/cli/dist/src/commands/hooks.js +9 -9
- package/src/@claude-flow/cli/dist/src/commands/ruvector/import.js +14 -14
- package/src/@claude-flow/cli/dist/src/commands/ruvector/setup.js +624 -624
- package/src/@claude-flow/cli/dist/src/config/moflo-config.d.ts +3 -0
- package/src/@claude-flow/cli/dist/src/config/moflo-config.js +101 -91
- package/src/@claude-flow/cli/dist/src/index.d.ts +5 -0
- package/src/@claude-flow/cli/dist/src/index.js +44 -0
- package/src/@claude-flow/cli/dist/src/init/claudemd-generator.d.ts +29 -29
- package/src/@claude-flow/cli/dist/src/init/claudemd-generator.js +43 -43
- package/src/@claude-flow/cli/dist/src/init/executor.js +453 -453
- package/src/@claude-flow/cli/dist/src/init/helpers-generator.js +482 -482
- package/src/@claude-flow/cli/dist/src/init/moflo-init.d.ts +30 -30
- package/src/@claude-flow/cli/dist/src/init/moflo-init.js +140 -140
- package/src/@claude-flow/cli/dist/src/init/statusline-generator.js +876 -876
- package/src/@claude-flow/cli/dist/src/memory/memory-initializer.js +371 -371
- package/src/@claude-flow/cli/dist/src/runtime/headless.js +28 -28
- package/src/@claude-flow/cli/dist/src/services/container-worker-pool.d.ts +197 -0
- package/src/@claude-flow/cli/dist/src/services/container-worker-pool.js +584 -0
- package/src/@claude-flow/cli/dist/src/services/daemon-lock.d.ts +14 -0
- package/src/@claude-flow/cli/dist/src/services/daemon-lock.js +1 -1
- package/src/@claude-flow/cli/dist/src/services/headless-worker-executor.js +84 -84
- package/src/@claude-flow/cli/package.json +1 -1
- package/src/@claude-flow/guidance/README.md +1195 -1195
- package/src/@claude-flow/guidance/package.json +198 -198
- package/src/@claude-flow/memory/README.md +587 -587
- package/src/@claude-flow/memory/dist/agent-memory-scope.test.js +4 -7
- package/src/@claude-flow/memory/dist/agentdb-backend.d.ts +2 -0
- package/src/@claude-flow/memory/dist/agentdb-backend.js +28 -26
- package/src/@claude-flow/memory/dist/auto-memory-bridge.test.js +36 -39
- package/src/@claude-flow/memory/dist/benchmark.test.js +1 -1
- package/src/@claude-flow/memory/dist/controller-registry.test.js +43 -0
- package/src/@claude-flow/memory/dist/database-provider.d.ts +2 -2
- package/src/@claude-flow/memory/dist/database-provider.js +6 -3
- package/src/@claude-flow/memory/dist/database-provider.test.js +1 -3
- package/src/@claude-flow/memory/dist/hybrid-backend.d.ts +245 -0
- package/src/@claude-flow/memory/dist/hybrid-backend.js +569 -0
- package/src/@claude-flow/memory/dist/hybrid-backend.test.d.ts +8 -0
- package/src/@claude-flow/memory/dist/hybrid-backend.test.js +320 -0
- package/src/@claude-flow/memory/dist/index.d.ts +3 -0
- package/src/@claude-flow/memory/dist/index.js +3 -0
- package/src/@claude-flow/memory/dist/sqlite-backend.d.ts +121 -0
- package/src/@claude-flow/memory/dist/sqlite-backend.js +572 -0
- package/src/@claude-flow/memory/dist/sqljs-backend.d.ts +4 -3
- package/src/@claude-flow/memory/dist/sqljs-backend.js +31 -30
- package/src/@claude-flow/memory/package.json +44 -44
- package/src/@claude-flow/shared/README.md +323 -323
- package/src/@claude-flow/shared/dist/core/config/defaults.js +1 -1
- package/src/@claude-flow/shared/dist/core/config/loader.js +1 -1
- package/src/@claude-flow/shared/dist/core/config/schema.js +1 -1
- package/src/@claude-flow/shared/dist/events/event-store.js +34 -50
- package/src/@claude-flow/shared/dist/events/event-store.test.js +4 -8
- package/src/@claude-flow/shared/dist/hooks/executor.js +4 -7
- package/src/@claude-flow/shared/dist/hooks/safety/file-organization.js +1 -1
- package/src/@claude-flow/shared/dist/hooks/safety/git-commit.js +3 -3
- package/src/@claude-flow/shared/dist/hooks/verify-exports.test.js +6 -6
- package/src/@claude-flow/shared/dist/utils/secure-logger.js +1 -1
- package/src/README.md +493 -493
- package/src/@claude-flow/guidance/dist/adversarial.d.ts +0 -284
- package/src/@claude-flow/guidance/dist/adversarial.js +0 -572
- package/src/@claude-flow/guidance/dist/analyzer.d.ts +0 -530
- package/src/@claude-flow/guidance/dist/analyzer.js +0 -2518
- package/src/@claude-flow/guidance/dist/artifacts.d.ts +0 -283
- package/src/@claude-flow/guidance/dist/artifacts.js +0 -356
- package/src/@claude-flow/guidance/dist/authority.d.ts +0 -290
- package/src/@claude-flow/guidance/dist/authority.js +0 -558
- package/src/@claude-flow/guidance/dist/capabilities.d.ts +0 -209
- package/src/@claude-flow/guidance/dist/capabilities.js +0 -485
- package/src/@claude-flow/guidance/dist/coherence.d.ts +0 -233
- package/src/@claude-flow/guidance/dist/coherence.js +0 -372
- package/src/@claude-flow/guidance/dist/compiler.d.ts +0 -87
- package/src/@claude-flow/guidance/dist/compiler.js +0 -419
- package/src/@claude-flow/guidance/dist/conformance-kit.d.ts +0 -225
- package/src/@claude-flow/guidance/dist/conformance-kit.js +0 -629
- package/src/@claude-flow/guidance/dist/continue-gate.d.ts +0 -214
- package/src/@claude-flow/guidance/dist/continue-gate.js +0 -353
- package/src/@claude-flow/guidance/dist/crypto-utils.d.ts +0 -17
- package/src/@claude-flow/guidance/dist/crypto-utils.js +0 -24
- package/src/@claude-flow/guidance/dist/evolution.d.ts +0 -282
- package/src/@claude-flow/guidance/dist/evolution.js +0 -500
- package/src/@claude-flow/guidance/dist/gates.d.ts +0 -79
- package/src/@claude-flow/guidance/dist/gates.js +0 -302
- package/src/@claude-flow/guidance/dist/gateway.d.ts +0 -206
- package/src/@claude-flow/guidance/dist/gateway.js +0 -452
- package/src/@claude-flow/guidance/dist/generators.d.ts +0 -153
- package/src/@claude-flow/guidance/dist/generators.js +0 -682
- package/src/@claude-flow/guidance/dist/headless.d.ts +0 -177
- package/src/@claude-flow/guidance/dist/headless.js +0 -342
- package/src/@claude-flow/guidance/dist/hooks.d.ts +0 -109
- package/src/@claude-flow/guidance/dist/hooks.js +0 -347
- package/src/@claude-flow/guidance/dist/index.d.ts +0 -205
- package/src/@claude-flow/guidance/dist/index.js +0 -321
- package/src/@claude-flow/guidance/dist/ledger.d.ts +0 -162
- package/src/@claude-flow/guidance/dist/ledger.js +0 -375
- package/src/@claude-flow/guidance/dist/manifest-validator.d.ts +0 -289
- package/src/@claude-flow/guidance/dist/manifest-validator.js +0 -838
- package/src/@claude-flow/guidance/dist/memory-gate.d.ts +0 -222
- package/src/@claude-flow/guidance/dist/memory-gate.js +0 -382
- package/src/@claude-flow/guidance/dist/meta-governance.d.ts +0 -265
- package/src/@claude-flow/guidance/dist/meta-governance.js +0 -348
- package/src/@claude-flow/guidance/dist/optimizer.d.ts +0 -104
- package/src/@claude-flow/guidance/dist/optimizer.js +0 -329
- package/src/@claude-flow/guidance/dist/persistence.d.ts +0 -189
- package/src/@claude-flow/guidance/dist/persistence.js +0 -464
- package/src/@claude-flow/guidance/dist/proof.d.ts +0 -185
- package/src/@claude-flow/guidance/dist/proof.js +0 -238
- package/src/@claude-flow/guidance/dist/retriever.d.ts +0 -116
- package/src/@claude-flow/guidance/dist/retriever.js +0 -394
- package/src/@claude-flow/guidance/dist/ruvbot-integration.d.ts +0 -370
- package/src/@claude-flow/guidance/dist/ruvbot-integration.js +0 -738
- package/src/@claude-flow/guidance/dist/temporal.d.ts +0 -426
- package/src/@claude-flow/guidance/dist/temporal.js +0 -658
- package/src/@claude-flow/guidance/dist/trust.d.ts +0 -283
- package/src/@claude-flow/guidance/dist/trust.js +0 -473
- package/src/@claude-flow/guidance/dist/truth-anchors.d.ts +0 -276
- package/src/@claude-flow/guidance/dist/truth-anchors.js +0 -488
- package/src/@claude-flow/guidance/dist/types.d.ts +0 -378
- package/src/@claude-flow/guidance/dist/types.js +0 -10
- package/src/@claude-flow/guidance/dist/uncertainty.d.ts +0 -372
- package/src/@claude-flow/guidance/dist/uncertainty.js +0 -619
- package/src/@claude-flow/guidance/dist/wasm-kernel.d.ts +0 -48
- package/src/@claude-flow/guidance/dist/wasm-kernel.js +0 -158
|
@@ -1,473 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Trust Score Accumulation System
|
|
3
|
-
*
|
|
4
|
-
* Builds trust gradients from gate outcomes over time. Sits alongside the
|
|
5
|
-
* CoherenceScheduler (coherence.ts) but tracks a separate dimension:
|
|
6
|
-
* accumulated trust from successful/failed gate evaluations.
|
|
7
|
-
*
|
|
8
|
-
* TrustAccumulator:
|
|
9
|
-
* - Maintains a running trust score per agent (0.0 to 1.0)
|
|
10
|
-
* - Accumulates trust from gate outcomes (allow, deny, warn)
|
|
11
|
-
* - Applies exponential decay toward the initial value when idle
|
|
12
|
-
* - Maps trust scores to privilege tiers (trusted, standard, probation, untrusted)
|
|
13
|
-
*
|
|
14
|
-
* TrustLedger:
|
|
15
|
-
* - Records every trust score change with full context
|
|
16
|
-
* - Supports export/import for persistence
|
|
17
|
-
* - Querying by agent or threshold
|
|
18
|
-
*
|
|
19
|
-
* Trust-based rate limiting:
|
|
20
|
-
* - Adjusts rate limits proportionally to accumulated trust
|
|
21
|
-
*
|
|
22
|
-
* @module @claude-flow/guidance/trust
|
|
23
|
-
*/
|
|
24
|
-
// ============================================================================
|
|
25
|
-
// Default Configuration
|
|
26
|
-
// ============================================================================
|
|
27
|
-
const DEFAULT_TRUST_CONFIG = {
|
|
28
|
-
initialTrust: 0.5,
|
|
29
|
-
allowDelta: 0.01,
|
|
30
|
-
denyDelta: -0.05,
|
|
31
|
-
warnDelta: -0.02,
|
|
32
|
-
decayRate: 0.01,
|
|
33
|
-
decayIntervalMs: 60_000, // 1 minute
|
|
34
|
-
};
|
|
35
|
-
// ============================================================================
|
|
36
|
-
// Trust Tier Thresholds
|
|
37
|
-
// ============================================================================
|
|
38
|
-
const TIER_THRESHOLDS = {
|
|
39
|
-
trusted: 0.8,
|
|
40
|
-
standard: 0.5,
|
|
41
|
-
probation: 0.3,
|
|
42
|
-
};
|
|
43
|
-
// ============================================================================
|
|
44
|
-
// Rate Limit Multipliers
|
|
45
|
-
// ============================================================================
|
|
46
|
-
const RATE_LIMIT_MULTIPLIERS = {
|
|
47
|
-
trusted: 2.0,
|
|
48
|
-
standard: 1.0,
|
|
49
|
-
probation: 0.5,
|
|
50
|
-
untrusted: 0.1,
|
|
51
|
-
};
|
|
52
|
-
// ============================================================================
|
|
53
|
-
// Trust Accumulator
|
|
54
|
-
// ============================================================================
|
|
55
|
-
/**
|
|
56
|
-
* Maintains running trust scores per agent, accumulates trust from gate
|
|
57
|
-
* outcomes, applies time-based exponential decay, and maps scores to
|
|
58
|
-
* privilege tiers.
|
|
59
|
-
*/
|
|
60
|
-
export class TrustAccumulator {
|
|
61
|
-
config;
|
|
62
|
-
agents = new Map();
|
|
63
|
-
constructor(config = {}) {
|
|
64
|
-
this.config = { ...DEFAULT_TRUST_CONFIG, ...config };
|
|
65
|
-
}
|
|
66
|
-
/**
|
|
67
|
-
* Record a gate outcome for an agent, adjusting their trust score.
|
|
68
|
-
*
|
|
69
|
-
* - 'allow' increases trust by `allowDelta`
|
|
70
|
-
* - 'deny' decreases trust by `denyDelta` (negative value)
|
|
71
|
-
* - 'warn' decreases trust by `warnDelta` (negative value)
|
|
72
|
-
*
|
|
73
|
-
* Before applying the delta, exponential decay is applied if enough
|
|
74
|
-
* time has elapsed since the last update.
|
|
75
|
-
*
|
|
76
|
-
* Returns the trust record describing the change.
|
|
77
|
-
*/
|
|
78
|
-
recordOutcome(agentId, outcome, reason) {
|
|
79
|
-
const state = this.getOrCreateState(agentId);
|
|
80
|
-
const now = Date.now();
|
|
81
|
-
// Apply decay before the outcome delta
|
|
82
|
-
this.applyDecay(state, now);
|
|
83
|
-
const previousScore = state.score;
|
|
84
|
-
// Determine delta from outcome
|
|
85
|
-
let delta;
|
|
86
|
-
switch (outcome) {
|
|
87
|
-
case 'allow':
|
|
88
|
-
delta = this.config.allowDelta;
|
|
89
|
-
break;
|
|
90
|
-
case 'deny':
|
|
91
|
-
delta = this.config.denyDelta;
|
|
92
|
-
break;
|
|
93
|
-
case 'warn':
|
|
94
|
-
delta = this.config.warnDelta;
|
|
95
|
-
break;
|
|
96
|
-
}
|
|
97
|
-
// Apply delta and clamp to [0, 1]
|
|
98
|
-
state.score = clamp(state.score + delta, 0, 1);
|
|
99
|
-
state.totalEvents++;
|
|
100
|
-
state.lastUpdated = now;
|
|
101
|
-
return {
|
|
102
|
-
agentId,
|
|
103
|
-
previousScore,
|
|
104
|
-
newScore: state.score,
|
|
105
|
-
delta,
|
|
106
|
-
reason,
|
|
107
|
-
timestamp: now,
|
|
108
|
-
gateDecision: outcome,
|
|
109
|
-
};
|
|
110
|
-
}
|
|
111
|
-
/**
|
|
112
|
-
* Get the current trust score for an agent.
|
|
113
|
-
* Returns the configured initial trust if the agent is unknown.
|
|
114
|
-
*/
|
|
115
|
-
getScore(agentId) {
|
|
116
|
-
const state = this.agents.get(agentId);
|
|
117
|
-
if (!state)
|
|
118
|
-
return this.config.initialTrust;
|
|
119
|
-
// Apply decay before reading (non-mutating copy for read)
|
|
120
|
-
const now = Date.now();
|
|
121
|
-
const elapsed = now - state.lastUpdated;
|
|
122
|
-
if (elapsed >= this.config.decayIntervalMs) {
|
|
123
|
-
this.applyDecay(state, now);
|
|
124
|
-
}
|
|
125
|
-
return state.score;
|
|
126
|
-
}
|
|
127
|
-
/**
|
|
128
|
-
* Determine the privilege tier for an agent based on their trust score.
|
|
129
|
-
*
|
|
130
|
-
* - >= 0.8: 'trusted' (expanded privileges, higher rate limits)
|
|
131
|
-
* - >= 0.5: 'standard' (normal operation)
|
|
132
|
-
* - >= 0.3: 'probation' (restricted tools, lower rate limits)
|
|
133
|
-
* - < 0.3: 'untrusted' (read-only, must earn trust back)
|
|
134
|
-
*/
|
|
135
|
-
getTier(agentId) {
|
|
136
|
-
const score = this.getScore(agentId);
|
|
137
|
-
return scoreToTier(score);
|
|
138
|
-
}
|
|
139
|
-
/**
|
|
140
|
-
* Get a full snapshot of an agent's trust state.
|
|
141
|
-
*/
|
|
142
|
-
getSnapshot(agentId) {
|
|
143
|
-
const score = this.getScore(agentId);
|
|
144
|
-
const state = this.agents.get(agentId);
|
|
145
|
-
return {
|
|
146
|
-
agentId,
|
|
147
|
-
score,
|
|
148
|
-
tier: scoreToTier(score),
|
|
149
|
-
totalEvents: state?.totalEvents ?? 0,
|
|
150
|
-
lastUpdated: state?.lastUpdated ?? 0,
|
|
151
|
-
};
|
|
152
|
-
}
|
|
153
|
-
/**
|
|
154
|
-
* Get snapshots for all tracked agents.
|
|
155
|
-
*/
|
|
156
|
-
getAllSnapshots() {
|
|
157
|
-
const snapshots = [];
|
|
158
|
-
for (const agentId of this.agents.keys()) {
|
|
159
|
-
snapshots.push(this.getSnapshot(agentId));
|
|
160
|
-
}
|
|
161
|
-
return snapshots;
|
|
162
|
-
}
|
|
163
|
-
/**
|
|
164
|
-
* Get a trust-adjusted rate limit for an agent.
|
|
165
|
-
*
|
|
166
|
-
* Multipliers by tier:
|
|
167
|
-
* - trusted: 2x base limit
|
|
168
|
-
* - standard: 1x base limit
|
|
169
|
-
* - probation: 0.5x base limit
|
|
170
|
-
* - untrusted: 0.1x base limit
|
|
171
|
-
*/
|
|
172
|
-
getTrustBasedRateLimit(agentId, baseLimit) {
|
|
173
|
-
const tier = this.getTier(agentId);
|
|
174
|
-
return Math.floor(baseLimit * RATE_LIMIT_MULTIPLIERS[tier]);
|
|
175
|
-
}
|
|
176
|
-
/**
|
|
177
|
-
* Manually set an agent's trust score (e.g., from persistence restore).
|
|
178
|
-
* Clamps to [0, 1].
|
|
179
|
-
*/
|
|
180
|
-
setScore(agentId, score) {
|
|
181
|
-
const state = this.getOrCreateState(agentId);
|
|
182
|
-
state.score = clamp(score, 0, 1);
|
|
183
|
-
state.lastUpdated = Date.now();
|
|
184
|
-
}
|
|
185
|
-
/**
|
|
186
|
-
* Remove an agent from tracking entirely.
|
|
187
|
-
*/
|
|
188
|
-
removeAgent(agentId) {
|
|
189
|
-
return this.agents.delete(agentId);
|
|
190
|
-
}
|
|
191
|
-
/**
|
|
192
|
-
* Get the number of tracked agents.
|
|
193
|
-
*/
|
|
194
|
-
get agentCount() {
|
|
195
|
-
return this.agents.size;
|
|
196
|
-
}
|
|
197
|
-
/**
|
|
198
|
-
* Get all tracked agent IDs.
|
|
199
|
-
*/
|
|
200
|
-
getAgentIds() {
|
|
201
|
-
return [...this.agents.keys()];
|
|
202
|
-
}
|
|
203
|
-
/**
|
|
204
|
-
* Get the current configuration.
|
|
205
|
-
*/
|
|
206
|
-
getConfig() {
|
|
207
|
-
return { ...this.config };
|
|
208
|
-
}
|
|
209
|
-
/**
|
|
210
|
-
* Reset all tracked agents.
|
|
211
|
-
*/
|
|
212
|
-
clear() {
|
|
213
|
-
this.agents.clear();
|
|
214
|
-
}
|
|
215
|
-
// ===== Private =====
|
|
216
|
-
getOrCreateState(agentId) {
|
|
217
|
-
let state = this.agents.get(agentId);
|
|
218
|
-
if (!state) {
|
|
219
|
-
state = {
|
|
220
|
-
score: this.config.initialTrust,
|
|
221
|
-
totalEvents: 0,
|
|
222
|
-
lastUpdated: Date.now(),
|
|
223
|
-
};
|
|
224
|
-
this.agents.set(agentId, state);
|
|
225
|
-
}
|
|
226
|
-
return state;
|
|
227
|
-
}
|
|
228
|
-
/**
|
|
229
|
-
* Apply exponential decay toward the initial trust value.
|
|
230
|
-
*
|
|
231
|
-
* The decay formula moves the score toward `initialTrust` by a fraction
|
|
232
|
-
* proportional to the number of decay intervals elapsed:
|
|
233
|
-
*
|
|
234
|
-
* score = score + (initialTrust - score) * (1 - (1 - decayRate)^intervals)
|
|
235
|
-
*
|
|
236
|
-
* This ensures idle agents gradually return to the baseline.
|
|
237
|
-
*/
|
|
238
|
-
applyDecay(state, now) {
|
|
239
|
-
const elapsed = now - state.lastUpdated;
|
|
240
|
-
if (elapsed < this.config.decayIntervalMs)
|
|
241
|
-
return;
|
|
242
|
-
const intervals = Math.floor(elapsed / this.config.decayIntervalMs);
|
|
243
|
-
if (intervals <= 0)
|
|
244
|
-
return;
|
|
245
|
-
const retainFactor = Math.pow(1 - this.config.decayRate, intervals);
|
|
246
|
-
const target = this.config.initialTrust;
|
|
247
|
-
// Exponential interpolation toward target
|
|
248
|
-
state.score = target + (state.score - target) * retainFactor;
|
|
249
|
-
state.lastUpdated = now;
|
|
250
|
-
}
|
|
251
|
-
}
|
|
252
|
-
// ============================================================================
|
|
253
|
-
// Trust Ledger
|
|
254
|
-
// ============================================================================
|
|
255
|
-
/**
|
|
256
|
-
* Records all trust score changes with full context. Supports persistence
|
|
257
|
-
* via export/import and querying by agent or threshold.
|
|
258
|
-
*/
|
|
259
|
-
export class TrustLedger {
|
|
260
|
-
records = [];
|
|
261
|
-
static MAX_RECORDS = 10_000;
|
|
262
|
-
/**
|
|
263
|
-
* Append a trust record to the ledger.
|
|
264
|
-
*/
|
|
265
|
-
record(entry) {
|
|
266
|
-
this.records.push(entry);
|
|
267
|
-
// Evict oldest records when the ledger exceeds capacity
|
|
268
|
-
if (this.records.length > TrustLedger.MAX_RECORDS) {
|
|
269
|
-
this.records = this.records.slice(-TrustLedger.MAX_RECORDS);
|
|
270
|
-
}
|
|
271
|
-
}
|
|
272
|
-
/**
|
|
273
|
-
* Get the full trust history for a specific agent, ordered chronologically.
|
|
274
|
-
*/
|
|
275
|
-
getHistoryForAgent(agentId) {
|
|
276
|
-
return this.records.filter(r => r.agentId === agentId);
|
|
277
|
-
}
|
|
278
|
-
/**
|
|
279
|
-
* Get all agents whose most recent score is below the given threshold.
|
|
280
|
-
* Returns one record per agent (the most recent).
|
|
281
|
-
*/
|
|
282
|
-
getAgentsBelowThreshold(threshold) {
|
|
283
|
-
const latestByAgent = new Map();
|
|
284
|
-
for (const record of this.records) {
|
|
285
|
-
const existing = latestByAgent.get(record.agentId);
|
|
286
|
-
if (!existing || record.timestamp > existing.timestamp) {
|
|
287
|
-
latestByAgent.set(record.agentId, record);
|
|
288
|
-
}
|
|
289
|
-
}
|
|
290
|
-
const result = [];
|
|
291
|
-
for (const record of latestByAgent.values()) {
|
|
292
|
-
if (record.newScore < threshold) {
|
|
293
|
-
result.push(record);
|
|
294
|
-
}
|
|
295
|
-
}
|
|
296
|
-
return result;
|
|
297
|
-
}
|
|
298
|
-
/**
|
|
299
|
-
* Get all agents whose most recent score is at or above the given threshold.
|
|
300
|
-
* Returns one record per agent (the most recent).
|
|
301
|
-
*/
|
|
302
|
-
getAgentsAboveThreshold(threshold) {
|
|
303
|
-
const latestByAgent = new Map();
|
|
304
|
-
for (const record of this.records) {
|
|
305
|
-
const existing = latestByAgent.get(record.agentId);
|
|
306
|
-
if (!existing || record.timestamp > existing.timestamp) {
|
|
307
|
-
latestByAgent.set(record.agentId, record);
|
|
308
|
-
}
|
|
309
|
-
}
|
|
310
|
-
const result = [];
|
|
311
|
-
for (const record of latestByAgent.values()) {
|
|
312
|
-
if (record.newScore >= threshold) {
|
|
313
|
-
result.push(record);
|
|
314
|
-
}
|
|
315
|
-
}
|
|
316
|
-
return result;
|
|
317
|
-
}
|
|
318
|
-
/**
|
|
319
|
-
* Get records within a time range.
|
|
320
|
-
*/
|
|
321
|
-
getRecordsInRange(startMs, endMs) {
|
|
322
|
-
return this.records.filter(r => r.timestamp >= startMs && r.timestamp <= endMs);
|
|
323
|
-
}
|
|
324
|
-
/**
|
|
325
|
-
* Get the most recent N records.
|
|
326
|
-
*/
|
|
327
|
-
getRecentRecords(count) {
|
|
328
|
-
return this.records.slice(-count);
|
|
329
|
-
}
|
|
330
|
-
/**
|
|
331
|
-
* Get the total number of records.
|
|
332
|
-
*/
|
|
333
|
-
get recordCount() {
|
|
334
|
-
return this.records.length;
|
|
335
|
-
}
|
|
336
|
-
/**
|
|
337
|
-
* Export all records for persistence.
|
|
338
|
-
*/
|
|
339
|
-
exportRecords() {
|
|
340
|
-
return [...this.records];
|
|
341
|
-
}
|
|
342
|
-
/**
|
|
343
|
-
* Import records from persistence. Appends to existing records.
|
|
344
|
-
*/
|
|
345
|
-
importRecords(records) {
|
|
346
|
-
this.records.push(...records);
|
|
347
|
-
// Re-enforce capacity limit after import
|
|
348
|
-
if (this.records.length > TrustLedger.MAX_RECORDS) {
|
|
349
|
-
this.records = this.records.slice(-TrustLedger.MAX_RECORDS);
|
|
350
|
-
}
|
|
351
|
-
}
|
|
352
|
-
/**
|
|
353
|
-
* Clear all records.
|
|
354
|
-
*/
|
|
355
|
-
clear() {
|
|
356
|
-
this.records = [];
|
|
357
|
-
}
|
|
358
|
-
}
|
|
359
|
-
// ============================================================================
|
|
360
|
-
// Integrated Trust System
|
|
361
|
-
// ============================================================================
|
|
362
|
-
/**
|
|
363
|
-
* Combines TrustAccumulator and TrustLedger into a single coordinated
|
|
364
|
-
* system. Gate outcomes are accumulated and automatically logged.
|
|
365
|
-
*/
|
|
366
|
-
export class TrustSystem {
|
|
367
|
-
accumulator;
|
|
368
|
-
ledger;
|
|
369
|
-
constructor(config = {}) {
|
|
370
|
-
this.accumulator = new TrustAccumulator(config);
|
|
371
|
-
this.ledger = new TrustLedger();
|
|
372
|
-
}
|
|
373
|
-
/**
|
|
374
|
-
* Record a gate outcome, update the accumulator, and log to the ledger.
|
|
375
|
-
*/
|
|
376
|
-
recordOutcome(agentId, outcome, reason) {
|
|
377
|
-
const record = this.accumulator.recordOutcome(agentId, outcome, reason);
|
|
378
|
-
this.ledger.record(record);
|
|
379
|
-
return record;
|
|
380
|
-
}
|
|
381
|
-
/**
|
|
382
|
-
* Get the current trust score for an agent.
|
|
383
|
-
*/
|
|
384
|
-
getScore(agentId) {
|
|
385
|
-
return this.accumulator.getScore(agentId);
|
|
386
|
-
}
|
|
387
|
-
/**
|
|
388
|
-
* Get the current privilege tier for an agent.
|
|
389
|
-
*/
|
|
390
|
-
getTier(agentId) {
|
|
391
|
-
return this.accumulator.getTier(agentId);
|
|
392
|
-
}
|
|
393
|
-
/**
|
|
394
|
-
* Get a trust-adjusted rate limit for an agent.
|
|
395
|
-
*/
|
|
396
|
-
getTrustBasedRateLimit(agentId, baseLimit) {
|
|
397
|
-
return this.accumulator.getTrustBasedRateLimit(agentId, baseLimit);
|
|
398
|
-
}
|
|
399
|
-
/**
|
|
400
|
-
* Get a full snapshot of an agent's trust state.
|
|
401
|
-
*/
|
|
402
|
-
getSnapshot(agentId) {
|
|
403
|
-
return this.accumulator.getSnapshot(agentId);
|
|
404
|
-
}
|
|
405
|
-
/**
|
|
406
|
-
* Get snapshots for all tracked agents.
|
|
407
|
-
*/
|
|
408
|
-
getAllSnapshots() {
|
|
409
|
-
return this.accumulator.getAllSnapshots();
|
|
410
|
-
}
|
|
411
|
-
}
|
|
412
|
-
// ============================================================================
|
|
413
|
-
// Standalone Rate Limit Helper
|
|
414
|
-
// ============================================================================
|
|
415
|
-
/**
|
|
416
|
-
* Compute a trust-adjusted rate limit from a score and base limit.
|
|
417
|
-
*
|
|
418
|
-
* This is a stateless utility for cases where you have a trust score
|
|
419
|
-
* but no TrustAccumulator instance.
|
|
420
|
-
*
|
|
421
|
-
* Multipliers by tier:
|
|
422
|
-
* - trusted (>= 0.8): 2x
|
|
423
|
-
* - standard (>= 0.5): 1x
|
|
424
|
-
* - probation (>= 0.3): 0.5x
|
|
425
|
-
* - untrusted (< 0.3): 0.1x
|
|
426
|
-
*/
|
|
427
|
-
export function getTrustBasedRateLimit(score, baseLimit) {
|
|
428
|
-
const tier = scoreToTier(score);
|
|
429
|
-
return Math.floor(baseLimit * RATE_LIMIT_MULTIPLIERS[tier]);
|
|
430
|
-
}
|
|
431
|
-
// ============================================================================
|
|
432
|
-
// Factory Functions
|
|
433
|
-
// ============================================================================
|
|
434
|
-
/**
|
|
435
|
-
* Create a TrustAccumulator with optional configuration.
|
|
436
|
-
*/
|
|
437
|
-
export function createTrustAccumulator(config) {
|
|
438
|
-
return new TrustAccumulator(config);
|
|
439
|
-
}
|
|
440
|
-
/**
|
|
441
|
-
* Create an empty TrustLedger.
|
|
442
|
-
*/
|
|
443
|
-
export function createTrustLedger() {
|
|
444
|
-
return new TrustLedger();
|
|
445
|
-
}
|
|
446
|
-
/**
|
|
447
|
-
* Create a coordinated TrustSystem (accumulator + ledger).
|
|
448
|
-
*/
|
|
449
|
-
export function createTrustSystem(config) {
|
|
450
|
-
return new TrustSystem(config);
|
|
451
|
-
}
|
|
452
|
-
// ============================================================================
|
|
453
|
-
// Helpers
|
|
454
|
-
// ============================================================================
|
|
455
|
-
/**
|
|
456
|
-
* Map a trust score to a privilege tier.
|
|
457
|
-
*/
|
|
458
|
-
function scoreToTier(score) {
|
|
459
|
-
if (score >= TIER_THRESHOLDS.trusted)
|
|
460
|
-
return 'trusted';
|
|
461
|
-
if (score >= TIER_THRESHOLDS.standard)
|
|
462
|
-
return 'standard';
|
|
463
|
-
if (score >= TIER_THRESHOLDS.probation)
|
|
464
|
-
return 'probation';
|
|
465
|
-
return 'untrusted';
|
|
466
|
-
}
|
|
467
|
-
/**
|
|
468
|
-
* Clamp a number to the range [min, max].
|
|
469
|
-
*/
|
|
470
|
-
function clamp(value, min, max) {
|
|
471
|
-
return Math.min(max, Math.max(min, value));
|
|
472
|
-
}
|
|
473
|
-
//# sourceMappingURL=trust.js.map
|