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,238 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Proof Envelope - Cryptographic Evidence Trail
|
|
3
|
-
*
|
|
4
|
-
* Makes every run auditable and tamper-evident by producing a hash-chained,
|
|
5
|
-
* HMAC-signed envelope for each RunEvent. Each envelope captures:
|
|
6
|
-
*
|
|
7
|
-
* - SHA-256 content hash of the run event
|
|
8
|
-
* - Hash chain linking to the previous envelope (genesis = '0' x 64)
|
|
9
|
-
* - Individual tool call hashes
|
|
10
|
-
* - Memory lineage (reads/writes with value hashes)
|
|
11
|
-
* - HMAC-SHA256 signature over the entire envelope body
|
|
12
|
-
*
|
|
13
|
-
* @module @claude-flow/guidance/proof
|
|
14
|
-
*/
|
|
15
|
-
import { createHash, createHmac, randomUUID } from 'node:crypto';
|
|
16
|
-
import { timingSafeEqual } from './crypto-utils.js';
|
|
17
|
-
// ============================================================================
|
|
18
|
-
// Constants
|
|
19
|
-
// ============================================================================
|
|
20
|
-
const GENESIS_HASH = '0'.repeat(64);
|
|
21
|
-
const SERIALIZATION_VERSION = 1;
|
|
22
|
-
// ============================================================================
|
|
23
|
-
// ProofChain
|
|
24
|
-
// ============================================================================
|
|
25
|
-
/**
|
|
26
|
-
* A tamper-evident, hash-chained sequence of ProofEnvelopes.
|
|
27
|
-
*
|
|
28
|
-
* Each envelope links to the previous one via `previousHash`, forming
|
|
29
|
-
* a blockchain-like structure. Every envelope is HMAC-signed so any
|
|
30
|
-
* modification to the chain can be detected.
|
|
31
|
-
*/
|
|
32
|
-
export class ProofChain {
|
|
33
|
-
envelopes = [];
|
|
34
|
-
signingKey;
|
|
35
|
-
constructor(signingKey) {
|
|
36
|
-
if (!signingKey) {
|
|
37
|
-
throw new Error('ProofChain requires an explicit signingKey — hardcoded defaults are not secure');
|
|
38
|
-
}
|
|
39
|
-
this.signingKey = signingKey;
|
|
40
|
-
}
|
|
41
|
-
/**
|
|
42
|
-
* Append a new ProofEnvelope to the chain.
|
|
43
|
-
*
|
|
44
|
-
* @param runEvent - The RunEvent to wrap
|
|
45
|
-
* @param toolCalls - Tool call records from the run
|
|
46
|
-
* @param memoryOps - Memory operations from the run
|
|
47
|
-
* @param metadata - Optional metadata overrides
|
|
48
|
-
* @returns The newly created and signed ProofEnvelope
|
|
49
|
-
*/
|
|
50
|
-
append(runEvent, toolCalls = [], memoryOps = [], metadata) {
|
|
51
|
-
const previousHash = this.envelopes.length > 0
|
|
52
|
-
? this.envelopes[this.envelopes.length - 1].contentHash
|
|
53
|
-
: GENESIS_HASH;
|
|
54
|
-
const contentHash = this.computeContentHash(runEvent);
|
|
55
|
-
const toolCallHashes = {};
|
|
56
|
-
for (const call of toolCalls) {
|
|
57
|
-
toolCallHashes[call.callId] = this.computeToolCallHash(call);
|
|
58
|
-
}
|
|
59
|
-
const memoryLineage = memoryOps.map(op => ({
|
|
60
|
-
key: op.key,
|
|
61
|
-
namespace: op.namespace,
|
|
62
|
-
operation: op.operation,
|
|
63
|
-
hash: op.valueHash,
|
|
64
|
-
}));
|
|
65
|
-
const envelope = {
|
|
66
|
-
envelopeId: randomUUID(),
|
|
67
|
-
runEventId: runEvent.eventId,
|
|
68
|
-
timestamp: new Date().toISOString(),
|
|
69
|
-
contentHash,
|
|
70
|
-
previousHash,
|
|
71
|
-
toolCallHashes,
|
|
72
|
-
guidanceHash: runEvent.guidanceHash,
|
|
73
|
-
memoryLineage,
|
|
74
|
-
signature: '', // placeholder; signed below
|
|
75
|
-
metadata: {
|
|
76
|
-
agentId: metadata?.agentId ?? 'unknown',
|
|
77
|
-
sessionId: metadata?.sessionId ?? runEvent.sessionId ?? 'unknown',
|
|
78
|
-
parentEnvelopeId: metadata?.parentEnvelopeId,
|
|
79
|
-
},
|
|
80
|
-
};
|
|
81
|
-
envelope.signature = this.signEnvelope(envelope);
|
|
82
|
-
this.envelopes.push(envelope);
|
|
83
|
-
return envelope;
|
|
84
|
-
}
|
|
85
|
-
/**
|
|
86
|
-
* Verify a single envelope's HMAC signature and hash chain link.
|
|
87
|
-
*
|
|
88
|
-
* @returns true if the signature is valid and the previousHash is correct
|
|
89
|
-
*/
|
|
90
|
-
verify(envelope) {
|
|
91
|
-
// Verify HMAC signature
|
|
92
|
-
const expectedSignature = this.signEnvelope(envelope);
|
|
93
|
-
if (!timingSafeEqual(envelope.signature, expectedSignature)) {
|
|
94
|
-
return false;
|
|
95
|
-
}
|
|
96
|
-
// Verify hash chain linkage
|
|
97
|
-
const index = this.envelopes.findIndex(e => e.envelopeId === envelope.envelopeId);
|
|
98
|
-
if (index === -1) {
|
|
99
|
-
// Envelope not in this chain; verify signature only
|
|
100
|
-
return true;
|
|
101
|
-
}
|
|
102
|
-
if (index === 0) {
|
|
103
|
-
return envelope.previousHash === GENESIS_HASH;
|
|
104
|
-
}
|
|
105
|
-
return envelope.previousHash === this.envelopes[index - 1].contentHash;
|
|
106
|
-
}
|
|
107
|
-
/**
|
|
108
|
-
* Verify the entire chain from genesis to tip.
|
|
109
|
-
*
|
|
110
|
-
* Checks that every envelope:
|
|
111
|
-
* 1. Has a valid HMAC signature
|
|
112
|
-
* 2. Links correctly to the previous envelope's contentHash
|
|
113
|
-
*
|
|
114
|
-
* @returns true if the full chain is intact
|
|
115
|
-
*/
|
|
116
|
-
verifyChain() {
|
|
117
|
-
if (this.envelopes.length === 0) {
|
|
118
|
-
return true;
|
|
119
|
-
}
|
|
120
|
-
for (let i = 0; i < this.envelopes.length; i++) {
|
|
121
|
-
const envelope = this.envelopes[i];
|
|
122
|
-
// Verify signature (constant-time comparison)
|
|
123
|
-
const expectedSignature = this.signEnvelope(envelope);
|
|
124
|
-
if (!timingSafeEqual(envelope.signature, expectedSignature)) {
|
|
125
|
-
return false;
|
|
126
|
-
}
|
|
127
|
-
// Verify hash chain
|
|
128
|
-
if (i === 0) {
|
|
129
|
-
if (envelope.previousHash !== GENESIS_HASH) {
|
|
130
|
-
return false;
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
else {
|
|
134
|
-
if (envelope.previousHash !== this.envelopes[i - 1].contentHash) {
|
|
135
|
-
return false;
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
return true;
|
|
140
|
-
}
|
|
141
|
-
/**
|
|
142
|
-
* Retrieve an envelope by its ID.
|
|
143
|
-
*/
|
|
144
|
-
getEnvelope(id) {
|
|
145
|
-
return this.envelopes.find(e => e.envelopeId === id);
|
|
146
|
-
}
|
|
147
|
-
/**
|
|
148
|
-
* Get the most recent envelope in the chain.
|
|
149
|
-
*/
|
|
150
|
-
getChainTip() {
|
|
151
|
-
return this.envelopes.length > 0
|
|
152
|
-
? this.envelopes[this.envelopes.length - 1]
|
|
153
|
-
: undefined;
|
|
154
|
-
}
|
|
155
|
-
/**
|
|
156
|
-
* Get the number of envelopes in the chain.
|
|
157
|
-
*/
|
|
158
|
-
getChainLength() {
|
|
159
|
-
return this.envelopes.length;
|
|
160
|
-
}
|
|
161
|
-
/**
|
|
162
|
-
* Export the chain as a serializable object.
|
|
163
|
-
*/
|
|
164
|
-
export() {
|
|
165
|
-
return {
|
|
166
|
-
envelopes: this.envelopes.map(e => ({ ...e })),
|
|
167
|
-
createdAt: new Date().toISOString(),
|
|
168
|
-
version: SERIALIZATION_VERSION,
|
|
169
|
-
};
|
|
170
|
-
}
|
|
171
|
-
/**
|
|
172
|
-
* Restore the chain from a previously exported object.
|
|
173
|
-
*
|
|
174
|
-
* Replaces the current chain contents entirely.
|
|
175
|
-
*/
|
|
176
|
-
import(data) {
|
|
177
|
-
if (data.version !== SERIALIZATION_VERSION) {
|
|
178
|
-
throw new Error(`Unsupported proof chain version: ${data.version} (expected ${SERIALIZATION_VERSION})`);
|
|
179
|
-
}
|
|
180
|
-
this.envelopes = data.envelopes.map(e => ({ ...e }));
|
|
181
|
-
}
|
|
182
|
-
// ===========================================================================
|
|
183
|
-
// Private helpers
|
|
184
|
-
// ===========================================================================
|
|
185
|
-
/**
|
|
186
|
-
* Compute the SHA-256 content hash of a RunEvent.
|
|
187
|
-
*/
|
|
188
|
-
computeContentHash(event) {
|
|
189
|
-
const payload = JSON.stringify(event, Object.keys(event).sort());
|
|
190
|
-
return createHash('sha256').update(payload).digest('hex');
|
|
191
|
-
}
|
|
192
|
-
/**
|
|
193
|
-
* Compute the SHA-256 hash of a single tool call.
|
|
194
|
-
*
|
|
195
|
-
* Hash = SHA-256(toolName + JSON(params) + JSON(result))
|
|
196
|
-
*/
|
|
197
|
-
computeToolCallHash(call) {
|
|
198
|
-
const payload = call.toolName
|
|
199
|
-
+ JSON.stringify(call.params)
|
|
200
|
-
+ JSON.stringify(call.result);
|
|
201
|
-
return createHash('sha256').update(payload).digest('hex');
|
|
202
|
-
}
|
|
203
|
-
/**
|
|
204
|
-
* Produce the HMAC-SHA256 signature for an envelope.
|
|
205
|
-
*
|
|
206
|
-
* The signature covers every field except `signature` itself.
|
|
207
|
-
*/
|
|
208
|
-
signEnvelope(envelope) {
|
|
209
|
-
const body = {
|
|
210
|
-
envelopeId: envelope.envelopeId,
|
|
211
|
-
runEventId: envelope.runEventId,
|
|
212
|
-
timestamp: envelope.timestamp,
|
|
213
|
-
contentHash: envelope.contentHash,
|
|
214
|
-
previousHash: envelope.previousHash,
|
|
215
|
-
toolCallHashes: envelope.toolCallHashes,
|
|
216
|
-
guidanceHash: envelope.guidanceHash,
|
|
217
|
-
memoryLineage: envelope.memoryLineage,
|
|
218
|
-
metadata: envelope.metadata,
|
|
219
|
-
};
|
|
220
|
-
const payload = JSON.stringify(body);
|
|
221
|
-
return createHmac('sha256', this.signingKey).update(payload).digest('hex');
|
|
222
|
-
}
|
|
223
|
-
}
|
|
224
|
-
// ============================================================================
|
|
225
|
-
// Factory
|
|
226
|
-
// ============================================================================
|
|
227
|
-
/**
|
|
228
|
-
* Create a new ProofChain instance.
|
|
229
|
-
*
|
|
230
|
-
* @param config - Configuration with a required `signingKey` for HMAC signing.
|
|
231
|
-
* Callers that previously relied on the optional signature must now provide
|
|
232
|
-
* an explicit key (see ADR-G026).
|
|
233
|
-
* @returns A fresh ProofChain
|
|
234
|
-
*/
|
|
235
|
-
export function createProofChain(config) {
|
|
236
|
-
return new ProofChain(config.signingKey);
|
|
237
|
-
}
|
|
238
|
-
//# sourceMappingURL=proof.js.map
|
|
@@ -1,116 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Task Intent Classifier + Shard Retriever
|
|
3
|
-
*
|
|
4
|
-
* Stores rule shards in vector storage with embeddings and metadata.
|
|
5
|
-
* At task start, retrieves the top N shards by semantic similarity
|
|
6
|
-
* with hard filters by risk class and repo scope.
|
|
7
|
-
*
|
|
8
|
-
* Retrieval contract:
|
|
9
|
-
* 1. Always include the constitution
|
|
10
|
-
* 2. Retrieve up to 5 shards by semantic similarity
|
|
11
|
-
* 3. Add hard filters by risk class and repo scope
|
|
12
|
-
* 4. Contradiction check: prefer higher-priority rule ID
|
|
13
|
-
*
|
|
14
|
-
* @module @claude-flow/guidance/retriever
|
|
15
|
-
*/
|
|
16
|
-
import type { PolicyBundle, Constitution, TaskIntent, RetrievalRequest, RetrievalResult } from './types.js';
|
|
17
|
-
export interface IEmbeddingProvider {
|
|
18
|
-
embed(text: string): Promise<Float32Array>;
|
|
19
|
-
batchEmbed(texts: string[]): Promise<Float32Array[]>;
|
|
20
|
-
}
|
|
21
|
-
/**
|
|
22
|
-
* Deterministic hash-based embedding provider — **test-only**.
|
|
23
|
-
*
|
|
24
|
-
* Produces fixed-dimension vectors from a simple character-hash → sin()
|
|
25
|
-
* transform. The resulting embeddings have no real semantic meaning;
|
|
26
|
-
* they are stable and fast, which makes them useful for unit/integration
|
|
27
|
-
* tests that need a concrete {@link IEmbeddingProvider} without loading
|
|
28
|
-
* an ONNX model.
|
|
29
|
-
*
|
|
30
|
-
* **Do NOT use in production** — replace with a real model-backed
|
|
31
|
-
* provider (e.g. the agentic-flow ONNX integration).
|
|
32
|
-
*/
|
|
33
|
-
export declare class HashEmbeddingProvider implements IEmbeddingProvider {
|
|
34
|
-
private dimensions;
|
|
35
|
-
private cache;
|
|
36
|
-
constructor(dimensions?: number);
|
|
37
|
-
embed(text: string): Promise<Float32Array>;
|
|
38
|
-
batchEmbed(texts: string[]): Promise<Float32Array[]>;
|
|
39
|
-
private hashEmbed;
|
|
40
|
-
}
|
|
41
|
-
export declare class ShardRetriever {
|
|
42
|
-
private shards;
|
|
43
|
-
private constitution;
|
|
44
|
-
private embeddingProvider;
|
|
45
|
-
private indexed;
|
|
46
|
-
private globCache;
|
|
47
|
-
constructor(embeddingProvider?: IEmbeddingProvider);
|
|
48
|
-
/**
|
|
49
|
-
* Load a compiled policy bundle
|
|
50
|
-
*/
|
|
51
|
-
loadBundle(bundle: PolicyBundle): Promise<void>;
|
|
52
|
-
/**
|
|
53
|
-
* Index all shards by generating embeddings
|
|
54
|
-
*/
|
|
55
|
-
indexShards(): Promise<void>;
|
|
56
|
-
/**
|
|
57
|
-
* Classify task intent
|
|
58
|
-
*/
|
|
59
|
-
classifyIntent(taskDescription: string): {
|
|
60
|
-
intent: TaskIntent;
|
|
61
|
-
confidence: number;
|
|
62
|
-
};
|
|
63
|
-
/**
|
|
64
|
-
* Retrieve relevant shards for a task
|
|
65
|
-
*
|
|
66
|
-
* Contract:
|
|
67
|
-
* 1. Always include the constitution
|
|
68
|
-
* 2. Up to maxShards by semantic similarity
|
|
69
|
-
* 3. Hard filters by risk class and repo scope
|
|
70
|
-
* 4. Contradiction check: prefer higher priority
|
|
71
|
-
*/
|
|
72
|
-
retrieve(request: RetrievalRequest): Promise<RetrievalResult>;
|
|
73
|
-
/**
|
|
74
|
-
* Score all shards against the query
|
|
75
|
-
*/
|
|
76
|
-
private scoreShards;
|
|
77
|
-
/**
|
|
78
|
-
* Select top N shards with contradiction checking
|
|
79
|
-
* When two rules contradict, keep the one with higher priority
|
|
80
|
-
*/
|
|
81
|
-
private selectWithContradictionCheck;
|
|
82
|
-
/**
|
|
83
|
-
* Check if two rules are contradictory
|
|
84
|
-
*/
|
|
85
|
-
private areContradictory;
|
|
86
|
-
/**
|
|
87
|
-
* Count contradictions in selected set
|
|
88
|
-
*/
|
|
89
|
-
private countContradictions;
|
|
90
|
-
/**
|
|
91
|
-
* Build combined policy text for injection
|
|
92
|
-
*/
|
|
93
|
-
private buildPolicyText;
|
|
94
|
-
/**
|
|
95
|
-
* Simple glob matching (supports * and **).
|
|
96
|
-
* Compiled regexes are cached per glob to avoid re-compiling on every call.
|
|
97
|
-
*/
|
|
98
|
-
private matchGlob;
|
|
99
|
-
/**
|
|
100
|
-
* Cosine similarity between two vectors
|
|
101
|
-
*/
|
|
102
|
-
private cosineSimilarity;
|
|
103
|
-
/**
|
|
104
|
-
* Get current shard count
|
|
105
|
-
*/
|
|
106
|
-
get shardCount(): number;
|
|
107
|
-
/**
|
|
108
|
-
* Get constitution
|
|
109
|
-
*/
|
|
110
|
-
getConstitution(): Constitution | null;
|
|
111
|
-
}
|
|
112
|
-
/**
|
|
113
|
-
* Create a retriever instance
|
|
114
|
-
*/
|
|
115
|
-
export declare function createRetriever(embeddingProvider?: IEmbeddingProvider): ShardRetriever;
|
|
116
|
-
//# sourceMappingURL=retriever.d.ts.map
|