agentic-qe 1.8.4 → 1.9.0
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/skills/agentic-jujutsu/SKILL.md +645 -0
- package/CHANGELOG.md +375 -0
- package/README.md +86 -18
- package/dist/App.d.ts +5 -0
- package/dist/App.d.ts.map +1 -0
- package/dist/App.js +15 -0
- package/dist/App.js.map +1 -0
- package/dist/cli/commands/constitution.d.ts +34 -0
- package/dist/cli/commands/constitution.d.ts.map +1 -0
- package/dist/cli/commands/constitution.js +679 -0
- package/dist/cli/commands/constitution.js.map +1 -0
- package/dist/cli/commands/init.d.ts +8 -75
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +22 -2292
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/telemetry.d.ts +36 -0
- package/dist/cli/commands/telemetry.d.ts.map +1 -0
- package/dist/cli/commands/telemetry.js +364 -0
- package/dist/cli/commands/telemetry.js.map +1 -0
- package/dist/cli/index.js +66 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/init/agents.d.ts +22 -0
- package/dist/cli/init/agents.d.ts.map +1 -0
- package/dist/cli/init/agents.js +522 -0
- package/dist/cli/init/agents.js.map +1 -0
- package/dist/cli/init/bash-wrapper.d.ts +14 -0
- package/dist/cli/init/bash-wrapper.d.ts.map +1 -0
- package/dist/cli/init/bash-wrapper.js +47 -0
- package/dist/cli/init/bash-wrapper.js.map +1 -0
- package/dist/cli/init/claude-config.d.ts +24 -0
- package/dist/cli/init/claude-config.d.ts.map +1 -0
- package/dist/cli/init/claude-config.js +275 -0
- package/dist/cli/init/claude-config.js.map +1 -0
- package/dist/cli/init/claude-md.d.ts +19 -0
- package/dist/cli/init/claude-md.d.ts.map +1 -0
- package/dist/cli/init/claude-md.js +153 -0
- package/dist/cli/init/claude-md.js.map +1 -0
- package/dist/cli/init/commands.d.ts +6 -0
- package/dist/cli/init/commands.d.ts.map +1 -0
- package/dist/cli/init/commands.js +83 -0
- package/dist/cli/init/commands.js.map +1 -0
- package/dist/cli/init/database-init.d.ts +15 -0
- package/dist/cli/init/database-init.d.ts.map +1 -0
- package/dist/cli/init/database-init.js +203 -0
- package/dist/cli/init/database-init.js.map +1 -0
- package/dist/cli/init/directory-structure.d.ts +14 -0
- package/dist/cli/init/directory-structure.d.ts.map +1 -0
- package/dist/cli/init/directory-structure.js +107 -0
- package/dist/cli/init/directory-structure.js.map +1 -0
- package/dist/cli/init/documentation.d.ts +14 -0
- package/dist/cli/init/documentation.d.ts.map +1 -0
- package/dist/cli/init/documentation.js +195 -0
- package/dist/cli/init/documentation.js.map +1 -0
- package/dist/cli/init/fleet-config.d.ts +34 -0
- package/dist/cli/init/fleet-config.d.ts.map +1 -0
- package/dist/cli/init/fleet-config.js +269 -0
- package/dist/cli/init/fleet-config.js.map +1 -0
- package/dist/cli/init/helpers.d.ts +6 -0
- package/dist/cli/init/helpers.d.ts.map +1 -0
- package/dist/cli/init/helpers.js +94 -0
- package/dist/cli/init/helpers.js.map +1 -0
- package/dist/cli/init/index.d.ts +32 -0
- package/dist/cli/init/index.d.ts.map +1 -0
- package/dist/cli/init/index.js +294 -0
- package/dist/cli/init/index.js.map +1 -0
- package/dist/cli/init/skills.d.ts +6 -0
- package/dist/cli/init/skills.d.ts.map +1 -0
- package/dist/cli/init/skills.js +138 -0
- package/dist/cli/init/skills.js.map +1 -0
- package/dist/cli/init/utils/file-utils.d.ts +74 -0
- package/dist/cli/init/utils/file-utils.d.ts.map +1 -0
- package/dist/cli/init/utils/file-utils.js +187 -0
- package/dist/cli/init/utils/file-utils.js.map +1 -0
- package/dist/cli/init/utils/index.d.ts +18 -0
- package/dist/cli/init/utils/index.d.ts.map +1 -0
- package/dist/cli/init/utils/index.js +48 -0
- package/dist/cli/init/utils/index.js.map +1 -0
- package/dist/cli/init/utils/log-utils.d.ts +47 -0
- package/dist/cli/init/utils/log-utils.d.ts.map +1 -0
- package/dist/cli/init/utils/log-utils.js +68 -0
- package/dist/cli/init/utils/log-utils.js.map +1 -0
- package/dist/cli/init/utils/path-utils.d.ts +91 -0
- package/dist/cli/init/utils/path-utils.d.ts.map +1 -0
- package/dist/cli/init/utils/path-utils.js +208 -0
- package/dist/cli/init/utils/path-utils.js.map +1 -0
- package/dist/cli/init/utils/validation-utils.d.ts +44 -0
- package/dist/cli/init/utils/validation-utils.d.ts.map +1 -0
- package/dist/cli/init/utils/validation-utils.js +68 -0
- package/dist/cli/init/utils/validation-utils.js.map +1 -0
- package/dist/cli/init/utils.d.ts +183 -0
- package/dist/cli/init/utils.d.ts.map +1 -0
- package/dist/cli/init/utils.js +354 -0
- package/dist/cli/init/utils.js.map +1 -0
- package/dist/components/Dashboard/Dashboard.d.ts +4 -0
- package/dist/components/Dashboard/Dashboard.d.ts.map +1 -0
- package/dist/components/Dashboard/Dashboard.js +148 -0
- package/dist/components/Dashboard/Dashboard.js.map +1 -0
- package/dist/components/Dashboard/DashboardHeader.d.ts +4 -0
- package/dist/components/Dashboard/DashboardHeader.d.ts.map +1 -0
- package/dist/components/Dashboard/DashboardHeader.js +138 -0
- package/dist/components/Dashboard/DashboardHeader.js.map +1 -0
- package/dist/constitution/evaluators/ast-evaluator.d.ts +42 -0
- package/dist/constitution/evaluators/ast-evaluator.d.ts.map +1 -0
- package/dist/constitution/evaluators/ast-evaluator.js +303 -0
- package/dist/constitution/evaluators/ast-evaluator.js.map +1 -0
- package/dist/constitution/evaluators/base.d.ts +144 -0
- package/dist/constitution/evaluators/base.d.ts.map +1 -0
- package/dist/constitution/evaluators/base.js +144 -0
- package/dist/constitution/evaluators/base.js.map +1 -0
- package/dist/constitution/evaluators/index.d.ts +19 -0
- package/dist/constitution/evaluators/index.d.ts.map +1 -0
- package/dist/constitution/evaluators/index.js +56 -0
- package/dist/constitution/evaluators/index.js.map +1 -0
- package/dist/constitution/evaluators/metric-evaluator.d.ts +59 -0
- package/dist/constitution/evaluators/metric-evaluator.d.ts.map +1 -0
- package/dist/constitution/evaluators/metric-evaluator.js +195 -0
- package/dist/constitution/evaluators/metric-evaluator.js.map +1 -0
- package/dist/constitution/evaluators/pattern-evaluator.d.ts +66 -0
- package/dist/constitution/evaluators/pattern-evaluator.d.ts.map +1 -0
- package/dist/constitution/evaluators/pattern-evaluator.js +221 -0
- package/dist/constitution/evaluators/pattern-evaluator.js.map +1 -0
- package/dist/constitution/evaluators/semantic-evaluator.d.ts +68 -0
- package/dist/constitution/evaluators/semantic-evaluator.d.ts.map +1 -0
- package/dist/constitution/evaluators/semantic-evaluator.js +250 -0
- package/dist/constitution/evaluators/semantic-evaluator.js.map +1 -0
- package/dist/contexts/DashboardContext.d.ts +41 -0
- package/dist/contexts/DashboardContext.d.ts.map +1 -0
- package/dist/contexts/DashboardContext.js +187 -0
- package/dist/contexts/DashboardContext.js.map +1 -0
- package/dist/core/memory/SwarmMemoryManager.d.ts +40 -0
- package/dist/core/memory/SwarmMemoryManager.d.ts.map +1 -1
- package/dist/core/memory/SwarmMemoryManager.js +279 -120
- package/dist/core/memory/SwarmMemoryManager.js.map +1 -1
- package/dist/hooks/useKeyboardShortcuts.d.ts +12 -0
- package/dist/hooks/useKeyboardShortcuts.d.ts.map +1 -0
- package/dist/hooks/useKeyboardShortcuts.js +69 -0
- package/dist/hooks/useKeyboardShortcuts.js.map +1 -0
- package/dist/telemetry/instrumentation/agent.d.ts +158 -0
- package/dist/telemetry/instrumentation/agent.d.ts.map +1 -0
- package/dist/telemetry/instrumentation/agent.js +372 -0
- package/dist/telemetry/instrumentation/agent.js.map +1 -0
- package/dist/telemetry/instrumentation/index.d.ts +24 -0
- package/dist/telemetry/instrumentation/index.d.ts.map +1 -0
- package/dist/telemetry/instrumentation/index.js +54 -0
- package/dist/telemetry/instrumentation/index.js.map +1 -0
- package/dist/telemetry/instrumentation/memory.d.ts +313 -0
- package/dist/telemetry/instrumentation/memory.d.ts.map +1 -0
- package/dist/telemetry/instrumentation/memory.js +552 -0
- package/dist/telemetry/instrumentation/memory.js.map +1 -0
- package/dist/telemetry/instrumentation/task.d.ts +146 -0
- package/dist/telemetry/instrumentation/task.d.ts.map +1 -0
- package/dist/telemetry/instrumentation/task.js +305 -0
- package/dist/telemetry/instrumentation/task.js.map +1 -0
- package/dist/telemetry/metrics/collectors/cost.d.ts +246 -0
- package/dist/telemetry/metrics/collectors/cost.d.ts.map +1 -0
- package/dist/telemetry/metrics/collectors/cost.js +526 -0
- package/dist/telemetry/metrics/collectors/cost.js.map +1 -0
- package/dist/telemetry/metrics/collectors/pricing-config.d.ts +87 -0
- package/dist/telemetry/metrics/collectors/pricing-config.d.ts.map +1 -0
- package/dist/telemetry/metrics/collectors/pricing-config.js +207 -0
- package/dist/telemetry/metrics/collectors/pricing-config.js.map +1 -0
- package/dist/telemetry/metrics/index.d.ts +4 -1
- package/dist/telemetry/metrics/index.d.ts.map +1 -1
- package/dist/telemetry/metrics/index.js +18 -2
- package/dist/telemetry/metrics/index.js.map +1 -1
- package/dist/telemetry/types.d.ts +1 -1
- package/dist/telemetry/types.d.ts.map +1 -1
- package/dist/visualization/api/RestEndpoints.d.ts +136 -0
- package/dist/visualization/api/RestEndpoints.d.ts.map +1 -0
- package/dist/visualization/api/RestEndpoints.js +428 -0
- package/dist/visualization/api/RestEndpoints.js.map +1 -0
- package/dist/visualization/api/WebSocketServer.d.ts +165 -0
- package/dist/visualization/api/WebSocketServer.d.ts.map +1 -0
- package/dist/visualization/api/WebSocketServer.js +518 -0
- package/dist/visualization/api/WebSocketServer.js.map +1 -0
- package/dist/visualization/core/DataTransformer.d.ts +89 -0
- package/dist/visualization/core/DataTransformer.d.ts.map +1 -0
- package/dist/visualization/core/DataTransformer.js +478 -0
- package/dist/visualization/core/DataTransformer.js.map +1 -0
- package/dist/visualization/index.d.ts +92 -0
- package/dist/visualization/index.d.ts.map +1 -0
- package/dist/visualization/index.js +121 -0
- package/dist/visualization/index.js.map +1 -0
- package/dist/visualization/types.d.ts +148 -0
- package/dist/visualization/types.d.ts.map +1 -0
- package/dist/visualization/types.js +7 -0
- package/dist/visualization/types.js.map +1 -0
- package/dist/voting/consensus.d.ts +87 -0
- package/dist/voting/consensus.d.ts.map +1 -0
- package/dist/voting/consensus.js +568 -0
- package/dist/voting/consensus.js.map +1 -0
- package/dist/voting/index.d.ts +12 -0
- package/dist/voting/index.d.ts.map +1 -0
- package/dist/voting/index.js +36 -0
- package/dist/voting/index.js.map +1 -0
- package/dist/voting/orchestrator.d.ts +65 -0
- package/dist/voting/orchestrator.d.ts.map +1 -0
- package/dist/voting/orchestrator.js +306 -0
- package/dist/voting/orchestrator.js.map +1 -0
- package/dist/voting/panel-assembly.d.ts +54 -0
- package/dist/voting/panel-assembly.d.ts.map +1 -0
- package/dist/voting/panel-assembly.js +192 -0
- package/dist/voting/panel-assembly.js.map +1 -0
- package/dist/voting/protocol.d.ts +119 -0
- package/dist/voting/protocol.d.ts.map +1 -0
- package/dist/voting/protocol.js +18 -0
- package/dist/voting/protocol.js.map +1 -0
- package/dist/voting/types.d.ts +125 -0
- package/dist/voting/types.d.ts.map +1 -0
- package/dist/voting/types.js +7 -0
- package/dist/voting/types.js.map +1 -0
- package/package.json +27 -2
|
@@ -0,0 +1,645 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: agentic-jujutsu
|
|
3
|
+
version: 2.3.2
|
|
4
|
+
description: Quantum-resistant, self-learning version control for AI agents with ReasoningBank intelligence and multi-agent coordination
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Agentic Jujutsu - AI Agent Version Control
|
|
8
|
+
|
|
9
|
+
> Quantum-ready, self-learning version control designed for multiple AI agents working simultaneously without conflicts.
|
|
10
|
+
|
|
11
|
+
## When to Use This Skill
|
|
12
|
+
|
|
13
|
+
Use **agentic-jujutsu** when you need:
|
|
14
|
+
- ✅ Multiple AI agents modifying code simultaneously
|
|
15
|
+
- ✅ Lock-free version control (23x faster than Git)
|
|
16
|
+
- ✅ Self-learning AI that improves from experience
|
|
17
|
+
- ✅ Quantum-resistant security for future-proof protection
|
|
18
|
+
- ✅ Automatic conflict resolution (87% success rate)
|
|
19
|
+
- ✅ Pattern recognition and intelligent suggestions
|
|
20
|
+
- ✅ Multi-agent coordination without blocking
|
|
21
|
+
|
|
22
|
+
## Quick Start
|
|
23
|
+
|
|
24
|
+
### Installation
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
npx agentic-jujutsu
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
### Basic Usage
|
|
31
|
+
|
|
32
|
+
```javascript
|
|
33
|
+
const { JjWrapper } = require('agentic-jujutsu');
|
|
34
|
+
|
|
35
|
+
const jj = new JjWrapper();
|
|
36
|
+
|
|
37
|
+
// Basic operations
|
|
38
|
+
await jj.status();
|
|
39
|
+
await jj.newCommit('Add feature');
|
|
40
|
+
await jj.log(10);
|
|
41
|
+
|
|
42
|
+
// Self-learning trajectory
|
|
43
|
+
const id = jj.startTrajectory('Implement authentication');
|
|
44
|
+
await jj.branchCreate('feature/auth');
|
|
45
|
+
await jj.newCommit('Add auth');
|
|
46
|
+
jj.addToTrajectory();
|
|
47
|
+
jj.finalizeTrajectory(0.9, 'Clean implementation');
|
|
48
|
+
|
|
49
|
+
// Get AI suggestions
|
|
50
|
+
const suggestion = JSON.parse(jj.getSuggestion('Add logout feature'));
|
|
51
|
+
console.log(`Confidence: ${suggestion.confidence}`);
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
## Core Capabilities
|
|
55
|
+
|
|
56
|
+
### 1. Self-Learning with ReasoningBank
|
|
57
|
+
|
|
58
|
+
Track operations, learn patterns, and get intelligent suggestions:
|
|
59
|
+
|
|
60
|
+
```javascript
|
|
61
|
+
// Start learning trajectory
|
|
62
|
+
const trajectoryId = jj.startTrajectory('Deploy to production');
|
|
63
|
+
|
|
64
|
+
// Perform operations (automatically tracked)
|
|
65
|
+
await jj.execute(['git', 'push', 'origin', 'main']);
|
|
66
|
+
await jj.branchCreate('release/v1.0');
|
|
67
|
+
await jj.newCommit('Release v1.0');
|
|
68
|
+
|
|
69
|
+
// Record operations to trajectory
|
|
70
|
+
jj.addToTrajectory();
|
|
71
|
+
|
|
72
|
+
// Finalize with success score (0.0-1.0) and critique
|
|
73
|
+
jj.finalizeTrajectory(0.95, 'Deployment successful, no issues');
|
|
74
|
+
|
|
75
|
+
// Later: Get AI-powered suggestions for similar tasks
|
|
76
|
+
const suggestion = JSON.parse(jj.getSuggestion('Deploy to staging'));
|
|
77
|
+
console.log('AI Recommendation:', suggestion.reasoning);
|
|
78
|
+
console.log('Confidence:', (suggestion.confidence * 100).toFixed(1) + '%');
|
|
79
|
+
console.log('Expected Success:', (suggestion.expectedSuccessRate * 100).toFixed(1) + '%');
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
**Validation (v2.3.1)**:
|
|
83
|
+
- ✅ Tasks must be non-empty (max 10KB)
|
|
84
|
+
- ✅ Success scores must be 0.0-1.0
|
|
85
|
+
- ✅ Must have operations before finalizing
|
|
86
|
+
- ✅ Contexts cannot be empty
|
|
87
|
+
|
|
88
|
+
### 2. Pattern Discovery
|
|
89
|
+
|
|
90
|
+
Automatically identify successful operation sequences:
|
|
91
|
+
|
|
92
|
+
```javascript
|
|
93
|
+
// Get discovered patterns
|
|
94
|
+
const patterns = JSON.parse(jj.getPatterns());
|
|
95
|
+
|
|
96
|
+
patterns.forEach(pattern => {
|
|
97
|
+
console.log(`Pattern: ${pattern.name}`);
|
|
98
|
+
console.log(` Success rate: ${(pattern.successRate * 100).toFixed(1)}%`);
|
|
99
|
+
console.log(` Used ${pattern.observationCount} times`);
|
|
100
|
+
console.log(` Operations: ${pattern.operationSequence.join(' → ')}`);
|
|
101
|
+
console.log(` Confidence: ${(pattern.confidence * 100).toFixed(1)}%`);
|
|
102
|
+
});
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
### 3. Learning Statistics
|
|
106
|
+
|
|
107
|
+
Track improvement over time:
|
|
108
|
+
|
|
109
|
+
```javascript
|
|
110
|
+
const stats = JSON.parse(jj.getLearningStats());
|
|
111
|
+
|
|
112
|
+
console.log('Learning Progress:');
|
|
113
|
+
console.log(` Total trajectories: ${stats.totalTrajectories}`);
|
|
114
|
+
console.log(` Patterns discovered: ${stats.totalPatterns}`);
|
|
115
|
+
console.log(` Average success: ${(stats.avgSuccessRate * 100).toFixed(1)}%`);
|
|
116
|
+
console.log(` Improvement rate: ${(stats.improvementRate * 100).toFixed(1)}%`);
|
|
117
|
+
console.log(` Prediction accuracy: ${(stats.predictionAccuracy * 100).toFixed(1)}%`);
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
### 4. Multi-Agent Coordination
|
|
121
|
+
|
|
122
|
+
Multiple agents work concurrently without conflicts:
|
|
123
|
+
|
|
124
|
+
```javascript
|
|
125
|
+
// Agent 1: Developer
|
|
126
|
+
const dev = new JjWrapper();
|
|
127
|
+
dev.startTrajectory('Implement feature');
|
|
128
|
+
await dev.newCommit('Add feature X');
|
|
129
|
+
dev.addToTrajectory();
|
|
130
|
+
dev.finalizeTrajectory(0.85);
|
|
131
|
+
|
|
132
|
+
// Agent 2: Reviewer (learns from Agent 1)
|
|
133
|
+
const reviewer = new JjWrapper();
|
|
134
|
+
const suggestion = JSON.parse(reviewer.getSuggestion('Review feature X'));
|
|
135
|
+
|
|
136
|
+
if (suggestion.confidence > 0.7) {
|
|
137
|
+
console.log('High confidence approach:', suggestion.reasoning);
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
// Agent 3: Tester (benefits from both)
|
|
141
|
+
const tester = new JjWrapper();
|
|
142
|
+
const similar = JSON.parse(tester.queryTrajectories('test feature', 5));
|
|
143
|
+
console.log(`Found ${similar.length} similar test approaches`);
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
### 5. Quantum-Resistant Security (v2.3.0+)
|
|
147
|
+
|
|
148
|
+
Fast integrity verification with quantum-resistant cryptography:
|
|
149
|
+
|
|
150
|
+
```javascript
|
|
151
|
+
const { generateQuantumFingerprint, verifyQuantumFingerprint } = require('agentic-jujutsu');
|
|
152
|
+
|
|
153
|
+
// Generate SHA3-512 fingerprint (NIST FIPS 202)
|
|
154
|
+
const data = Buffer.from('commit-data');
|
|
155
|
+
const fingerprint = generateQuantumFingerprint(data);
|
|
156
|
+
console.log('Fingerprint:', fingerprint.toString('hex'));
|
|
157
|
+
|
|
158
|
+
// Verify integrity (<1ms)
|
|
159
|
+
const isValid = verifyQuantumFingerprint(data, fingerprint);
|
|
160
|
+
console.log('Valid:', isValid);
|
|
161
|
+
|
|
162
|
+
// HQC-128 encryption for trajectories
|
|
163
|
+
const crypto = require('crypto');
|
|
164
|
+
const key = crypto.randomBytes(32).toString('base64');
|
|
165
|
+
jj.enableEncryption(key);
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
### 6. Operation Tracking with AgentDB
|
|
169
|
+
|
|
170
|
+
Automatic tracking of all operations:
|
|
171
|
+
|
|
172
|
+
```javascript
|
|
173
|
+
// Operations are tracked automatically
|
|
174
|
+
await jj.status();
|
|
175
|
+
await jj.newCommit('Fix bug');
|
|
176
|
+
await jj.rebase('main');
|
|
177
|
+
|
|
178
|
+
// Get operation statistics
|
|
179
|
+
const stats = JSON.parse(jj.getStats());
|
|
180
|
+
console.log(`Total operations: ${stats.total_operations}`);
|
|
181
|
+
console.log(`Success rate: ${(stats.success_rate * 100).toFixed(1)}%`);
|
|
182
|
+
console.log(`Avg duration: ${stats.avg_duration_ms.toFixed(2)}ms`);
|
|
183
|
+
|
|
184
|
+
// Query recent operations
|
|
185
|
+
const ops = jj.getOperations(10);
|
|
186
|
+
ops.forEach(op => {
|
|
187
|
+
console.log(`${op.operationType}: ${op.command}`);
|
|
188
|
+
console.log(` Duration: ${op.durationMs}ms, Success: ${op.success}`);
|
|
189
|
+
});
|
|
190
|
+
|
|
191
|
+
// Get user operations (excludes snapshots)
|
|
192
|
+
const userOps = jj.getUserOperations(20);
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
## Advanced Use Cases
|
|
196
|
+
|
|
197
|
+
### Use Case 1: Adaptive Workflow Optimization
|
|
198
|
+
|
|
199
|
+
Learn and improve deployment workflows:
|
|
200
|
+
|
|
201
|
+
```javascript
|
|
202
|
+
async function adaptiveDeployment(jj, environment) {
|
|
203
|
+
// Get AI suggestion based on past deployments
|
|
204
|
+
const suggestion = JSON.parse(jj.getSuggestion(`Deploy to ${environment}`));
|
|
205
|
+
|
|
206
|
+
console.log(`Deploying with ${(suggestion.confidence * 100).toFixed(0)}% confidence`);
|
|
207
|
+
console.log(`Expected duration: ${suggestion.estimatedDurationMs}ms`);
|
|
208
|
+
|
|
209
|
+
// Start tracking
|
|
210
|
+
jj.startTrajectory(`Deploy to ${environment}`);
|
|
211
|
+
|
|
212
|
+
// Execute recommended operations
|
|
213
|
+
for (const op of suggestion.recommendedOperations) {
|
|
214
|
+
console.log(`Executing: ${op}`);
|
|
215
|
+
await executeOperation(op);
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
jj.addToTrajectory();
|
|
219
|
+
|
|
220
|
+
// Record outcome
|
|
221
|
+
const success = await verifyDeployment();
|
|
222
|
+
jj.finalizeTrajectory(
|
|
223
|
+
success ? 0.95 : 0.5,
|
|
224
|
+
success ? 'Deployment successful' : 'Issues detected'
|
|
225
|
+
);
|
|
226
|
+
}
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
### Use Case 2: Multi-Agent Code Review
|
|
230
|
+
|
|
231
|
+
Coordinate review across multiple agents:
|
|
232
|
+
|
|
233
|
+
```javascript
|
|
234
|
+
async function coordinatedReview(agents) {
|
|
235
|
+
const reviews = await Promise.all(agents.map(async (agent) => {
|
|
236
|
+
const jj = new JjWrapper();
|
|
237
|
+
|
|
238
|
+
// Start review trajectory
|
|
239
|
+
jj.startTrajectory(`Review by ${agent.name}`);
|
|
240
|
+
|
|
241
|
+
// Get AI suggestion for review approach
|
|
242
|
+
const suggestion = JSON.parse(jj.getSuggestion('Code review'));
|
|
243
|
+
|
|
244
|
+
// Perform review
|
|
245
|
+
const diff = await jj.diff('@', '@-');
|
|
246
|
+
const issues = await agent.analyze(diff);
|
|
247
|
+
|
|
248
|
+
jj.addToTrajectory();
|
|
249
|
+
jj.finalizeTrajectory(
|
|
250
|
+
issues.length === 0 ? 0.9 : 0.6,
|
|
251
|
+
`Found ${issues.length} issues`
|
|
252
|
+
);
|
|
253
|
+
|
|
254
|
+
return { agent: agent.name, issues, suggestion };
|
|
255
|
+
}));
|
|
256
|
+
|
|
257
|
+
// Aggregate learning from all agents
|
|
258
|
+
return reviews;
|
|
259
|
+
}
|
|
260
|
+
```
|
|
261
|
+
|
|
262
|
+
### Use Case 3: Error Pattern Detection
|
|
263
|
+
|
|
264
|
+
Learn from failures to prevent future issues:
|
|
265
|
+
|
|
266
|
+
```javascript
|
|
267
|
+
async function smartMerge(jj, branch) {
|
|
268
|
+
// Query similar merge attempts
|
|
269
|
+
const similar = JSON.parse(jj.queryTrajectories(`merge ${branch}`, 10));
|
|
270
|
+
|
|
271
|
+
// Analyze past failures
|
|
272
|
+
const failures = similar.filter(t => t.successScore < 0.5);
|
|
273
|
+
|
|
274
|
+
if (failures.length > 0) {
|
|
275
|
+
console.log('⚠️ Similar merges failed in the past:');
|
|
276
|
+
failures.forEach(f => {
|
|
277
|
+
if (f.critique) {
|
|
278
|
+
console.log(` - ${f.critique}`);
|
|
279
|
+
}
|
|
280
|
+
});
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
// Get AI recommendation
|
|
284
|
+
const suggestion = JSON.parse(jj.getSuggestion(`merge ${branch}`));
|
|
285
|
+
|
|
286
|
+
if (suggestion.confidence < 0.7) {
|
|
287
|
+
console.log('⚠️ Low confidence. Recommended steps:');
|
|
288
|
+
suggestion.recommendedOperations.forEach(op => console.log(` - ${op}`));
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
// Execute merge with tracking
|
|
292
|
+
jj.startTrajectory(`Merge ${branch}`);
|
|
293
|
+
try {
|
|
294
|
+
await jj.execute(['merge', branch]);
|
|
295
|
+
jj.addToTrajectory();
|
|
296
|
+
jj.finalizeTrajectory(0.9, 'Merge successful');
|
|
297
|
+
} catch (err) {
|
|
298
|
+
jj.addToTrajectory();
|
|
299
|
+
jj.finalizeTrajectory(0.3, `Merge failed: ${err.message}`);
|
|
300
|
+
throw err;
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
```
|
|
304
|
+
|
|
305
|
+
### Use Case 4: Continuous Learning Loop
|
|
306
|
+
|
|
307
|
+
Implement a self-improving agent:
|
|
308
|
+
|
|
309
|
+
```javascript
|
|
310
|
+
class SelfImprovingAgent {
|
|
311
|
+
constructor() {
|
|
312
|
+
this.jj = new JjWrapper();
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
async performTask(taskDescription) {
|
|
316
|
+
// Get AI suggestion
|
|
317
|
+
const suggestion = JSON.parse(this.jj.getSuggestion(taskDescription));
|
|
318
|
+
|
|
319
|
+
console.log(`Task: ${taskDescription}`);
|
|
320
|
+
console.log(`AI Confidence: ${(suggestion.confidence * 100).toFixed(1)}%`);
|
|
321
|
+
console.log(`Expected Success: ${(suggestion.expectedSuccessRate * 100).toFixed(1)}%`);
|
|
322
|
+
|
|
323
|
+
// Start trajectory
|
|
324
|
+
this.jj.startTrajectory(taskDescription);
|
|
325
|
+
|
|
326
|
+
// Execute with recommended approach
|
|
327
|
+
const startTime = Date.now();
|
|
328
|
+
let success = false;
|
|
329
|
+
|
|
330
|
+
try {
|
|
331
|
+
for (const op of suggestion.recommendedOperations) {
|
|
332
|
+
await this.execute(op);
|
|
333
|
+
}
|
|
334
|
+
success = true;
|
|
335
|
+
} catch (err) {
|
|
336
|
+
console.error('Task failed:', err.message);
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
const duration = Date.now() - startTime;
|
|
340
|
+
|
|
341
|
+
// Record learning
|
|
342
|
+
this.jj.addToTrajectory();
|
|
343
|
+
this.jj.finalizeTrajectory(
|
|
344
|
+
success ? 0.9 : 0.4,
|
|
345
|
+
success
|
|
346
|
+
? `Completed in ${duration}ms using ${suggestion.recommendedOperations.length} operations`
|
|
347
|
+
: `Failed after ${duration}ms`
|
|
348
|
+
);
|
|
349
|
+
|
|
350
|
+
// Check improvement
|
|
351
|
+
const stats = JSON.parse(this.jj.getLearningStats());
|
|
352
|
+
console.log(`Improvement rate: ${(stats.improvementRate * 100).toFixed(1)}%`);
|
|
353
|
+
|
|
354
|
+
return success;
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
async execute(operation) {
|
|
358
|
+
// Execute operation logic
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
// Usage
|
|
363
|
+
const agent = new SelfImprovingAgent();
|
|
364
|
+
|
|
365
|
+
// Agent improves over time
|
|
366
|
+
for (let i = 1; i <= 10; i++) {
|
|
367
|
+
console.log(`\n--- Attempt ${i} ---`);
|
|
368
|
+
await agent.performTask('Deploy application');
|
|
369
|
+
}
|
|
370
|
+
```
|
|
371
|
+
|
|
372
|
+
## API Reference
|
|
373
|
+
|
|
374
|
+
### Core Methods
|
|
375
|
+
|
|
376
|
+
| Method | Description | Returns |
|
|
377
|
+
|--------|-------------|---------|
|
|
378
|
+
| `new JjWrapper()` | Create wrapper instance | JjWrapper |
|
|
379
|
+
| `status()` | Get repository status | Promise<JjResult> |
|
|
380
|
+
| `newCommit(msg)` | Create new commit | Promise<JjResult> |
|
|
381
|
+
| `log(limit)` | Show commit history | Promise<JjCommit[]> |
|
|
382
|
+
| `diff(from, to)` | Show differences | Promise<JjDiff> |
|
|
383
|
+
| `branchCreate(name, rev?)` | Create branch | Promise<JjResult> |
|
|
384
|
+
| `rebase(source, dest)` | Rebase commits | Promise<JjResult> |
|
|
385
|
+
|
|
386
|
+
### ReasoningBank Methods
|
|
387
|
+
|
|
388
|
+
| Method | Description | Returns |
|
|
389
|
+
|--------|-------------|---------|
|
|
390
|
+
| `startTrajectory(task)` | Begin learning trajectory | string (trajectory ID) |
|
|
391
|
+
| `addToTrajectory()` | Add recent operations | void |
|
|
392
|
+
| `finalizeTrajectory(score, critique?)` | Complete trajectory (score: 0.0-1.0) | void |
|
|
393
|
+
| `getSuggestion(task)` | Get AI recommendation | JSON: DecisionSuggestion |
|
|
394
|
+
| `getLearningStats()` | Get learning metrics | JSON: LearningStats |
|
|
395
|
+
| `getPatterns()` | Get discovered patterns | JSON: Pattern[] |
|
|
396
|
+
| `queryTrajectories(task, limit)` | Find similar trajectories | JSON: Trajectory[] |
|
|
397
|
+
| `resetLearning()` | Clear learned data | void |
|
|
398
|
+
|
|
399
|
+
### AgentDB Methods
|
|
400
|
+
|
|
401
|
+
| Method | Description | Returns |
|
|
402
|
+
|--------|-------------|---------|
|
|
403
|
+
| `getStats()` | Get operation statistics | JSON: Stats |
|
|
404
|
+
| `getOperations(limit)` | Get recent operations | JjOperation[] |
|
|
405
|
+
| `getUserOperations(limit)` | Get user operations only | JjOperation[] |
|
|
406
|
+
| `clearLog()` | Clear operation log | void |
|
|
407
|
+
|
|
408
|
+
### Quantum Security Methods (v2.3.0+)
|
|
409
|
+
|
|
410
|
+
| Method | Description | Returns |
|
|
411
|
+
|--------|-------------|---------|
|
|
412
|
+
| `generateQuantumFingerprint(data)` | Generate SHA3-512 fingerprint | Buffer (64 bytes) |
|
|
413
|
+
| `verifyQuantumFingerprint(data, fp)` | Verify fingerprint | boolean |
|
|
414
|
+
| `enableEncryption(key, pubKey?)` | Enable HQC-128 encryption | void |
|
|
415
|
+
| `disableEncryption()` | Disable encryption | void |
|
|
416
|
+
| `isEncryptionEnabled()` | Check encryption status | boolean |
|
|
417
|
+
|
|
418
|
+
## Performance Characteristics
|
|
419
|
+
|
|
420
|
+
| Metric | Git | Agentic Jujutsu |
|
|
421
|
+
|--------|-----|-----------------|
|
|
422
|
+
| Concurrent commits | 15 ops/s | 350 ops/s (23x) |
|
|
423
|
+
| Context switching | 500-1000ms | 50-100ms (10x) |
|
|
424
|
+
| Conflict resolution | 30-40% auto | 87% auto (2.5x) |
|
|
425
|
+
| Lock waiting | 50 min/day | 0 min (∞) |
|
|
426
|
+
| Quantum fingerprints | N/A | <1ms |
|
|
427
|
+
|
|
428
|
+
## Best Practices
|
|
429
|
+
|
|
430
|
+
### 1. Trajectory Management
|
|
431
|
+
|
|
432
|
+
```javascript
|
|
433
|
+
// ✅ Good: Meaningful task descriptions
|
|
434
|
+
jj.startTrajectory('Implement user authentication with JWT');
|
|
435
|
+
|
|
436
|
+
// ❌ Bad: Vague descriptions
|
|
437
|
+
jj.startTrajectory('fix stuff');
|
|
438
|
+
|
|
439
|
+
// ✅ Good: Honest success scores
|
|
440
|
+
jj.finalizeTrajectory(0.7, 'Works but needs refactoring');
|
|
441
|
+
|
|
442
|
+
// ❌ Bad: Always 1.0
|
|
443
|
+
jj.finalizeTrajectory(1.0, 'Perfect!'); // Prevents learning
|
|
444
|
+
```
|
|
445
|
+
|
|
446
|
+
### 2. Pattern Recognition
|
|
447
|
+
|
|
448
|
+
```javascript
|
|
449
|
+
// ✅ Good: Let patterns emerge naturally
|
|
450
|
+
for (let i = 0; i < 10; i++) {
|
|
451
|
+
jj.startTrajectory('Deploy feature');
|
|
452
|
+
await deploy();
|
|
453
|
+
jj.addToTrajectory();
|
|
454
|
+
jj.finalizeTrajectory(wasSuccessful ? 0.9 : 0.5);
|
|
455
|
+
}
|
|
456
|
+
|
|
457
|
+
// ❌ Bad: Not recording outcomes
|
|
458
|
+
await deploy(); // No learning
|
|
459
|
+
```
|
|
460
|
+
|
|
461
|
+
### 3. Multi-Agent Coordination
|
|
462
|
+
|
|
463
|
+
```javascript
|
|
464
|
+
// ✅ Good: Concurrent operations
|
|
465
|
+
const agents = ['agent1', 'agent2', 'agent3'];
|
|
466
|
+
await Promise.all(agents.map(async (agent) => {
|
|
467
|
+
const jj = new JjWrapper();
|
|
468
|
+
// Each agent works independently
|
|
469
|
+
await jj.newCommit(`Changes by ${agent}`);
|
|
470
|
+
}));
|
|
471
|
+
|
|
472
|
+
// ❌ Bad: Sequential with locks
|
|
473
|
+
for (const agent of agents) {
|
|
474
|
+
await agent.waitForLock(); // Not needed!
|
|
475
|
+
await agent.commit();
|
|
476
|
+
}
|
|
477
|
+
```
|
|
478
|
+
|
|
479
|
+
### 4. Error Handling
|
|
480
|
+
|
|
481
|
+
```javascript
|
|
482
|
+
// ✅ Good: Record failures with details
|
|
483
|
+
try {
|
|
484
|
+
await jj.execute(['complex-operation']);
|
|
485
|
+
jj.finalizeTrajectory(0.9);
|
|
486
|
+
} catch (err) {
|
|
487
|
+
jj.finalizeTrajectory(0.3, `Failed: ${err.message}. Root cause: ...`);
|
|
488
|
+
}
|
|
489
|
+
|
|
490
|
+
// ❌ Bad: Silent failures
|
|
491
|
+
try {
|
|
492
|
+
await jj.execute(['operation']);
|
|
493
|
+
} catch (err) {
|
|
494
|
+
// No learning from failure
|
|
495
|
+
}
|
|
496
|
+
```
|
|
497
|
+
|
|
498
|
+
## Validation Rules (v2.3.1+)
|
|
499
|
+
|
|
500
|
+
### Task Description
|
|
501
|
+
- ✅ Cannot be empty or whitespace-only
|
|
502
|
+
- ✅ Maximum length: 10,000 bytes
|
|
503
|
+
- ✅ Automatically trimmed
|
|
504
|
+
|
|
505
|
+
### Success Score
|
|
506
|
+
- ✅ Must be finite (not NaN or Infinity)
|
|
507
|
+
- ✅ Must be between 0.0 and 1.0 (inclusive)
|
|
508
|
+
|
|
509
|
+
### Operations
|
|
510
|
+
- ✅ Must have at least one operation before finalizing
|
|
511
|
+
|
|
512
|
+
### Context
|
|
513
|
+
- ✅ Cannot be empty
|
|
514
|
+
- ✅ Keys cannot be empty or whitespace-only
|
|
515
|
+
- ✅ Keys max 1,000 bytes, values max 10,000 bytes
|
|
516
|
+
|
|
517
|
+
## Troubleshooting
|
|
518
|
+
|
|
519
|
+
### Issue: Low Confidence Suggestions
|
|
520
|
+
|
|
521
|
+
```javascript
|
|
522
|
+
const suggestion = JSON.parse(jj.getSuggestion('new task'));
|
|
523
|
+
|
|
524
|
+
if (suggestion.confidence < 0.5) {
|
|
525
|
+
// Not enough data - check learning stats
|
|
526
|
+
const stats = JSON.parse(jj.getLearningStats());
|
|
527
|
+
console.log(`Need more data. Current trajectories: ${stats.totalTrajectories}`);
|
|
528
|
+
|
|
529
|
+
// Recommend: Record 5-10 trajectories first
|
|
530
|
+
}
|
|
531
|
+
```
|
|
532
|
+
|
|
533
|
+
### Issue: Validation Errors
|
|
534
|
+
|
|
535
|
+
```javascript
|
|
536
|
+
try {
|
|
537
|
+
jj.startTrajectory(''); // Empty task
|
|
538
|
+
} catch (err) {
|
|
539
|
+
if (err.message.includes('Validation error')) {
|
|
540
|
+
console.log('Invalid input:', err.message);
|
|
541
|
+
// Use non-empty, meaningful task description
|
|
542
|
+
}
|
|
543
|
+
}
|
|
544
|
+
|
|
545
|
+
try {
|
|
546
|
+
jj.finalizeTrajectory(1.5); // Score > 1.0
|
|
547
|
+
} catch (err) {
|
|
548
|
+
// Use score between 0.0 and 1.0
|
|
549
|
+
jj.finalizeTrajectory(Math.max(0, Math.min(1, score)));
|
|
550
|
+
}
|
|
551
|
+
```
|
|
552
|
+
|
|
553
|
+
### Issue: No Patterns Discovered
|
|
554
|
+
|
|
555
|
+
```javascript
|
|
556
|
+
const patterns = JSON.parse(jj.getPatterns());
|
|
557
|
+
|
|
558
|
+
if (patterns.length === 0) {
|
|
559
|
+
// Need more trajectories with >70% success
|
|
560
|
+
// Record at least 3-5 successful trajectories
|
|
561
|
+
}
|
|
562
|
+
```
|
|
563
|
+
|
|
564
|
+
## Examples
|
|
565
|
+
|
|
566
|
+
### Example 1: Simple Learning Workflow
|
|
567
|
+
|
|
568
|
+
```javascript
|
|
569
|
+
const { JjWrapper } = require('agentic-jujutsu');
|
|
570
|
+
|
|
571
|
+
async function learnFromWork() {
|
|
572
|
+
const jj = new JjWrapper();
|
|
573
|
+
|
|
574
|
+
// Start tracking
|
|
575
|
+
jj.startTrajectory('Add user profile feature');
|
|
576
|
+
|
|
577
|
+
// Do work
|
|
578
|
+
await jj.branchCreate('feature/user-profile');
|
|
579
|
+
await jj.newCommit('Add user profile model');
|
|
580
|
+
await jj.newCommit('Add profile API endpoints');
|
|
581
|
+
await jj.newCommit('Add profile UI');
|
|
582
|
+
|
|
583
|
+
// Record operations
|
|
584
|
+
jj.addToTrajectory();
|
|
585
|
+
|
|
586
|
+
// Finalize with result
|
|
587
|
+
jj.finalizeTrajectory(0.85, 'Feature complete, minor styling issues remain');
|
|
588
|
+
|
|
589
|
+
// Next time, get suggestions
|
|
590
|
+
const suggestion = JSON.parse(jj.getSuggestion('Add settings page'));
|
|
591
|
+
console.log('AI suggests:', suggestion.reasoning);
|
|
592
|
+
}
|
|
593
|
+
```
|
|
594
|
+
|
|
595
|
+
### Example 2: Multi-Agent Swarm
|
|
596
|
+
|
|
597
|
+
```javascript
|
|
598
|
+
async function agentSwarm(taskList) {
|
|
599
|
+
const agents = taskList.map((task, i) => ({
|
|
600
|
+
name: `agent-${i}`,
|
|
601
|
+
jj: new JjWrapper(),
|
|
602
|
+
task
|
|
603
|
+
}));
|
|
604
|
+
|
|
605
|
+
// All agents work concurrently (no conflicts!)
|
|
606
|
+
const results = await Promise.all(agents.map(async (agent) => {
|
|
607
|
+
agent.jj.startTrajectory(agent.task);
|
|
608
|
+
|
|
609
|
+
// Get AI suggestion
|
|
610
|
+
const suggestion = JSON.parse(agent.jj.getSuggestion(agent.task));
|
|
611
|
+
|
|
612
|
+
// Execute task
|
|
613
|
+
const success = await executeTask(agent, suggestion);
|
|
614
|
+
|
|
615
|
+
agent.jj.addToTrajectory();
|
|
616
|
+
agent.jj.finalizeTrajectory(success ? 0.9 : 0.5);
|
|
617
|
+
|
|
618
|
+
return { agent: agent.name, success };
|
|
619
|
+
}));
|
|
620
|
+
|
|
621
|
+
console.log('Results:', results);
|
|
622
|
+
}
|
|
623
|
+
```
|
|
624
|
+
|
|
625
|
+
## Related Documentation
|
|
626
|
+
|
|
627
|
+
- **NPM Package**: https://npmjs.com/package/agentic-jujutsu
|
|
628
|
+
- **GitHub**: https://github.com/ruvnet/agentic-flow/tree/main/packages/agentic-jujutsu
|
|
629
|
+
- **Full README**: See package README.md
|
|
630
|
+
- **Validation Guide**: docs/VALIDATION_FIXES_v2.3.1.md
|
|
631
|
+
- **AgentDB Guide**: docs/AGENTDB_GUIDE.md
|
|
632
|
+
|
|
633
|
+
## Version History
|
|
634
|
+
|
|
635
|
+
- **v2.3.2** - Documentation updates
|
|
636
|
+
- **v2.3.1** - Validation fixes for ReasoningBank
|
|
637
|
+
- **v2.3.0** - Quantum-resistant security with @qudag/napi-core
|
|
638
|
+
- **v2.1.0** - Self-learning AI with ReasoningBank
|
|
639
|
+
- **v2.0.0** - Zero-dependency installation with embedded jj binary
|
|
640
|
+
|
|
641
|
+
---
|
|
642
|
+
|
|
643
|
+
**Status**: ✅ Production Ready
|
|
644
|
+
**License**: MIT
|
|
645
|
+
**Maintained**: Active
|