@plures/praxis 1.2.13 → 1.2.41
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/README.md +44 -0
- package/dist/browser/{chunk-VOMLVI6V.js → chunk-BBP2F7TT.js} +70 -1
- package/dist/browser/{chunk-K377RW4V.js → chunk-FCEH7WMH.js} +1 -1
- package/dist/browser/{engine-YJZV4SLD.js → engine-65QDGCAN.js} +1 -1
- package/dist/browser/index.d.ts +104 -2
- package/dist/browser/index.js +181 -5
- package/dist/browser/integrations/svelte.d.ts +2 -2
- package/dist/browser/integrations/svelte.js +2 -2
- package/dist/browser/{reactive-engine.svelte-9aS0kTa8.d.ts → reactive-engine.svelte-Cqd8Mod2.d.ts} +56 -1
- package/dist/node/{chunk-PRPQO6R5.js → chunk-32YFEEML.js} +1 -1
- package/dist/node/{chunk-VOMLVI6V.js → chunk-BBP2F7TT.js} +70 -1
- package/dist/node/{chunk-5RH7UAQC.js → chunk-PTH6MD6P.js} +1 -0
- package/dist/node/cli/index.cjs +1553 -839
- package/dist/node/cli/index.js +39 -2
- package/dist/node/cloud/index.d.cts +1 -1
- package/dist/node/cloud/index.d.ts +1 -1
- package/dist/node/components/index.d.cts +2 -2
- package/dist/node/components/index.d.ts +2 -2
- package/dist/node/conversations-KQBXTP3N.js +596 -0
- package/dist/node/{engine-2DQBKBJC.js → engine-7CXQV6RC.js} +1 -1
- package/dist/node/index.cjs +408 -3
- package/dist/node/index.d.cts +308 -7
- package/dist/node/index.d.ts +308 -7
- package/dist/node/index.js +336 -6
- package/dist/node/integrations/svelte.cjs +70 -1
- package/dist/node/integrations/svelte.d.cts +3 -3
- package/dist/node/integrations/svelte.d.ts +3 -3
- package/dist/node/integrations/svelte.js +2 -2
- package/dist/node/{protocol-Qek7ebBl.d.ts → protocol-BocKczNv.d.cts} +1 -1
- package/dist/node/{protocol-Qek7ebBl.d.cts → protocol-BocKczNv.d.ts} +1 -1
- package/dist/node/{reactive-engine.svelte-CRNqHlbv.d.ts → reactive-engine.svelte-CGe8SpVE.d.cts} +57 -2
- package/dist/node/{reactive-engine.svelte-BFIZfawz.d.cts → reactive-engine.svelte-D-xTDxT5.d.ts} +57 -2
- package/dist/node/{terminal-adapter-B-UK_Vdz.d.ts → terminal-adapter-CvIvgTo4.d.ts} +1 -1
- package/dist/node/{terminal-adapter-BQSIF5bf.d.cts → terminal-adapter-Db-snPJ3.d.cts} +1 -1
- package/dist/node/{validate-CNHUULQE.js → validate-EN3M4FUR.js} +1 -1
- package/dist/node/{verify-KLJRXVJS.js → verify-7VZRP2WS.js} +2 -2
- package/docs/BOT_UPDATE_POLICY.md +125 -0
- package/docs/DOGFOODING_CHECKLIST.md +254 -0
- package/docs/DOGFOODING_INDEX.md +169 -0
- package/docs/DOGFOODING_QUICK_START.md +140 -0
- package/docs/KNO_ENG_EXTRACTION_PLAN.md +577 -0
- package/docs/PLURES_TOOLS_INVENTORY.md +170 -0
- package/docs/README.md +12 -0
- package/docs/TESTING_BOT_WORKFLOWS.md +154 -0
- package/docs/conversations/INTEGRATION_POINTS.md +719 -0
- package/docs/conversations/README.md +168 -0
- package/docs/core/extending-praxis-core.md +604 -0
- package/docs/core/praxis-core-api.md +385 -0
- package/docs/decision-ledger/contract-index.json +2 -2
- package/docs/decision-ledger/decisions/2026-02-01-monorepo-organization.md +130 -0
- package/docs/examples/DOGFOODING_WORKFLOW_EXAMPLE.md +295 -0
- package/docs/examples/README.md +41 -0
- package/docs/workflows/pr-overlap-guard.md +50 -0
- package/package.json +7 -2
- package/src/__tests__/chronicle.test.ts +512 -0
- package/src/__tests__/conversations.test.ts +312 -0
- package/src/__tests__/edge-cases.test.ts +1 -1
- package/src/__tests__/engine-dx.test.ts +355 -0
- package/src/cli/commands/conversations.ts +252 -0
- package/src/cli/index.ts +73 -0
- package/src/conversations/README.md +230 -0
- package/src/conversations/candidate.schema.json +123 -0
- package/src/conversations/candidates.ts +114 -0
- package/src/conversations/capture.ts +56 -0
- package/src/conversations/classify.ts +110 -0
- package/src/conversations/conversation.schema.json +106 -0
- package/src/conversations/emitters/fs.ts +65 -0
- package/src/conversations/emitters/github.ts +115 -0
- package/src/conversations/gate.ts +102 -0
- package/src/conversations/index.ts +28 -0
- package/src/conversations/normalize.ts +51 -0
- package/src/conversations/redact.ts +57 -0
- package/src/conversations/types.ts +96 -0
- package/src/core/chronicle/chronicle.ts +227 -0
- package/src/core/chronicle/context.ts +80 -0
- package/src/core/chronicle/index.ts +53 -0
- package/src/core/chronicle/mcp.ts +135 -0
- package/src/core/chronicle/types.ts +61 -0
- package/src/core/engine.ts +99 -1
- package/src/core/pluresdb/index.ts +22 -0
- package/src/core/pluresdb/store.ts +162 -5
- package/src/core/rules.ts +12 -0
- package/src/dsl/index.ts +6 -0
- package/src/index.ts +18 -0
- package/src/integrations/pluresdb.ts +22 -0
|
@@ -0,0 +1,577 @@
|
|
|
1
|
+
# kno-eng Extraction Plan: Integration into Praxis
|
|
2
|
+
|
|
3
|
+
**Status**: Planning Phase
|
|
4
|
+
**Created**: 2026-02-01
|
|
5
|
+
**Owner**: Praxis Team
|
|
6
|
+
|
|
7
|
+
## Executive Summary
|
|
8
|
+
|
|
9
|
+
This document outlines the plan to refactor `kno-eng` (knowledge engineering tool) into Praxis, preserving its IDE capture/UX value while avoiding duplication of sync functionality that already exists in Praxis via PluresDB.
|
|
10
|
+
|
|
11
|
+
## Background
|
|
12
|
+
|
|
13
|
+
### Current State
|
|
14
|
+
- **kno-eng**: External knowledge capture and engineering tool with IDE integration
|
|
15
|
+
- **Praxis**: Full-stack framework with local-first architecture, PluresDB integration, and visual tooling
|
|
16
|
+
- **Overlap**: Both systems have sync capabilities; kno-eng has its own sync while Praxis uses PluresDB + Unum
|
|
17
|
+
|
|
18
|
+
### Goals
|
|
19
|
+
1. **Preserve Value**: Keep the IDE capture and UX features that make kno-eng valuable
|
|
20
|
+
2. **Eliminate Duplication**: Remove redundant sync implementation from kno-eng
|
|
21
|
+
3. **Leverage Praxis**: Use Praxis's existing local-first + PluresDB architecture
|
|
22
|
+
4. **Seamless Integration**: Create natural integration points within praxis-conversations
|
|
23
|
+
|
|
24
|
+
## Analysis: What kno-eng Provides
|
|
25
|
+
|
|
26
|
+
### Core Value Propositions (KEEP)
|
|
27
|
+
|
|
28
|
+
#### 1. IDE Capture/UX Layer
|
|
29
|
+
- **In-IDE knowledge capture**: Capture thoughts, decisions, and context without leaving the IDE
|
|
30
|
+
- **Contextual annotations**: Link knowledge to specific code locations
|
|
31
|
+
- **Quick capture workflows**: Minimal friction for developers to record insights
|
|
32
|
+
- **Search and retrieval**: Fast access to previously captured knowledge
|
|
33
|
+
- **Visual organization**: Graph-based or hierarchical knowledge organization
|
|
34
|
+
|
|
35
|
+
**Decision**: KEEP - This is unique value that Praxis doesn't currently provide
|
|
36
|
+
|
|
37
|
+
#### 2. Knowledge Engineering Features
|
|
38
|
+
- **Structured knowledge templates**: Templates for different knowledge types (decisions, patterns, bugs, etc.)
|
|
39
|
+
- **Tagging and categorization**: Flexible taxonomy for organizing knowledge
|
|
40
|
+
- **Relationship mapping**: Connect related pieces of knowledge
|
|
41
|
+
- **Export capabilities**: Extract knowledge in various formats
|
|
42
|
+
|
|
43
|
+
**Decision**: KEEP - Integrate into Praxis schema system
|
|
44
|
+
|
|
45
|
+
#### 3. Developer Experience
|
|
46
|
+
- **Minimal context switching**: Stay in the IDE for knowledge capture
|
|
47
|
+
- **Keyboard-driven workflows**: Fast, developer-friendly interactions
|
|
48
|
+
- **Smart defaults**: Intelligent suggestions based on context
|
|
49
|
+
|
|
50
|
+
**Decision**: KEEP - Core UX value
|
|
51
|
+
|
|
52
|
+
### Redundant Features (CUT)
|
|
53
|
+
|
|
54
|
+
#### 1. Custom Sync Implementation
|
|
55
|
+
- **Local storage layer**: Redundant with PluresDB
|
|
56
|
+
- **Sync protocol**: Redundant with Praxis + Unum
|
|
57
|
+
- **Conflict resolution**: Already handled by PluresDB CRDTs
|
|
58
|
+
- **Offline queue**: PluresDB provides this
|
|
59
|
+
|
|
60
|
+
**Decision**: CUT - Use Praxis/PluresDB instead
|
|
61
|
+
|
|
62
|
+
#### 2. Data Persistence
|
|
63
|
+
- **Custom database**: Replace with PluresDB collections
|
|
64
|
+
- **Schema management**: Use Praxis schema system
|
|
65
|
+
- **Migrations**: Use PluresDB migration system
|
|
66
|
+
|
|
67
|
+
**Decision**: CUT - Use Praxis infrastructure
|
|
68
|
+
|
|
69
|
+
#### 3. Authentication/Authorization
|
|
70
|
+
- If kno-eng has its own auth system, replace with Praxis Cloud GitHub OAuth
|
|
71
|
+
|
|
72
|
+
**Decision**: CUT - Use Praxis Cloud auth
|
|
73
|
+
|
|
74
|
+
### Features to Defer (DEFER)
|
|
75
|
+
|
|
76
|
+
#### 1. Advanced Analytics
|
|
77
|
+
- Knowledge graph analytics
|
|
78
|
+
- Usage patterns and insights
|
|
79
|
+
- AI-powered knowledge suggestions
|
|
80
|
+
|
|
81
|
+
**Decision**: DEFER - Can be added post-migration
|
|
82
|
+
|
|
83
|
+
#### 2. Collaboration Features
|
|
84
|
+
- Real-time collaborative editing
|
|
85
|
+
- Team knowledge spaces
|
|
86
|
+
- Permission systems
|
|
87
|
+
|
|
88
|
+
**Decision**: DEFER - Praxis has basic team support; advanced features can come later
|
|
89
|
+
|
|
90
|
+
#### 3. External Integrations
|
|
91
|
+
- Integrations with external knowledge bases
|
|
92
|
+
- API for third-party tools
|
|
93
|
+
- Plugin system
|
|
94
|
+
|
|
95
|
+
**Decision**: DEFER - Focus on core functionality first
|
|
96
|
+
|
|
97
|
+
## Integration Architecture
|
|
98
|
+
|
|
99
|
+
### Target: praxis-conversations
|
|
100
|
+
|
|
101
|
+
Create a new module/package within Praxis for conversation and knowledge management:
|
|
102
|
+
|
|
103
|
+
```
|
|
104
|
+
/praxis
|
|
105
|
+
/src
|
|
106
|
+
/conversations # NEW: Knowledge capture and conversations
|
|
107
|
+
/capture # IDE capture layer from kno-eng
|
|
108
|
+
/vscode # VS Code extension
|
|
109
|
+
/jetbrains # JetBrains plugin (defer)
|
|
110
|
+
/core # Core capture logic
|
|
111
|
+
/schema # Knowledge schemas
|
|
112
|
+
/components # UI components for knowledge views
|
|
113
|
+
/rules # Logic rules for knowledge processing
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
### Data Model
|
|
117
|
+
|
|
118
|
+
#### Knowledge Schema (PluresDB Collections)
|
|
119
|
+
|
|
120
|
+
```typescript
|
|
121
|
+
// Core knowledge model
|
|
122
|
+
{
|
|
123
|
+
name: 'KnowledgeEntry',
|
|
124
|
+
schema: {
|
|
125
|
+
id: { type: 'uuid', primary: true },
|
|
126
|
+
type: { type: 'string' }, // decision, pattern, note, bug, etc.
|
|
127
|
+
title: { type: 'string', required: true },
|
|
128
|
+
content: { type: 'string', required: true },
|
|
129
|
+
tags: { type: 'array', items: 'string' },
|
|
130
|
+
|
|
131
|
+
// Code context
|
|
132
|
+
filePath: { type: 'string' },
|
|
133
|
+
lineNumber: { type: 'number' },
|
|
134
|
+
commitSha: { type: 'string' },
|
|
135
|
+
|
|
136
|
+
// Metadata
|
|
137
|
+
createdBy: { type: 'string' },
|
|
138
|
+
createdAt: { type: 'datetime' },
|
|
139
|
+
updatedAt: { type: 'datetime' },
|
|
140
|
+
|
|
141
|
+
// Relationships
|
|
142
|
+
relatedTo: { type: 'array', items: 'string' }, // IDs of related entries
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
// Conversation threads
|
|
147
|
+
{
|
|
148
|
+
name: 'ConversationThread',
|
|
149
|
+
schema: {
|
|
150
|
+
id: { type: 'uuid', primary: true },
|
|
151
|
+
topic: { type: 'string', required: true },
|
|
152
|
+
participants: { type: 'array', items: 'string' },
|
|
153
|
+
entries: { type: 'array', items: 'string' }, // KnowledgeEntry IDs
|
|
154
|
+
status: { type: 'string' }, // active, archived, resolved
|
|
155
|
+
createdAt: { type: 'datetime' },
|
|
156
|
+
updatedAt: { type: 'datetime' },
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
// Knowledge relationships
|
|
161
|
+
{
|
|
162
|
+
name: 'KnowledgeLink',
|
|
163
|
+
schema: {
|
|
164
|
+
id: { type: 'uuid', primary: true },
|
|
165
|
+
fromId: { type: 'string', required: true },
|
|
166
|
+
toId: { type: 'string', required: true },
|
|
167
|
+
type: { type: 'string' }, // relates-to, depends-on, implements, etc.
|
|
168
|
+
strength: { type: 'number', default: 1.0 },
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
### Integration Points
|
|
174
|
+
|
|
175
|
+
#### 1. IDE Extension Layer (VS Code)
|
|
176
|
+
|
|
177
|
+
**Location**: `/src/conversations/capture/vscode/`
|
|
178
|
+
|
|
179
|
+
**Functionality**:
|
|
180
|
+
- Command palette integration for quick capture
|
|
181
|
+
- Code context extraction (file, line, git info)
|
|
182
|
+
- Inline annotations and code lenses
|
|
183
|
+
- Search and navigation
|
|
184
|
+
- Sync via Praxis PluresDB adapter
|
|
185
|
+
|
|
186
|
+
**Architecture**:
|
|
187
|
+
```typescript
|
|
188
|
+
// VS Code Extension
|
|
189
|
+
import { createPraxisLocalFirst } from '@plures/praxis';
|
|
190
|
+
import { KnowledgeCaptureEngine } from '@plures/praxis/conversations';
|
|
191
|
+
|
|
192
|
+
export async function activate(context: vscode.ExtensionContext) {
|
|
193
|
+
// Initialize Praxis with PluresDB
|
|
194
|
+
const db = await createPraxisLocalFirst({
|
|
195
|
+
mode: 'auto',
|
|
196
|
+
dbName: 'praxis-knowledge'
|
|
197
|
+
});
|
|
198
|
+
|
|
199
|
+
// Initialize knowledge capture engine
|
|
200
|
+
const captureEngine = new KnowledgeCaptureEngine({
|
|
201
|
+
db,
|
|
202
|
+
workspace: vscode.workspace.rootPath,
|
|
203
|
+
});
|
|
204
|
+
|
|
205
|
+
// Register commands
|
|
206
|
+
context.subscriptions.push(
|
|
207
|
+
vscode.commands.registerCommand('praxis.captureKnowledge', async () => {
|
|
208
|
+
// Capture current context
|
|
209
|
+
const editor = vscode.window.activeTextEditor;
|
|
210
|
+
await captureEngine.capture({
|
|
211
|
+
content: await vscode.window.showInputBox(),
|
|
212
|
+
context: {
|
|
213
|
+
filePath: editor?.document.fileName,
|
|
214
|
+
lineNumber: editor?.selection.active.line,
|
|
215
|
+
// ... more context
|
|
216
|
+
}
|
|
217
|
+
});
|
|
218
|
+
})
|
|
219
|
+
);
|
|
220
|
+
}
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
#### 2. Praxis Logic Engine Integration
|
|
224
|
+
|
|
225
|
+
**Location**: `/src/conversations/rules/`
|
|
226
|
+
|
|
227
|
+
**Functionality**:
|
|
228
|
+
- Auto-tagging based on content
|
|
229
|
+
- Smart linking of related knowledge
|
|
230
|
+
- Notification rules (e.g., unresolved decisions)
|
|
231
|
+
- Knowledge graph computations
|
|
232
|
+
|
|
233
|
+
**Example Rules**:
|
|
234
|
+
```typescript
|
|
235
|
+
import { defineRule, defineFact } from '@plures/praxis';
|
|
236
|
+
|
|
237
|
+
const KnowledgeCaptured = defineFact<'KnowledgeCaptured', {
|
|
238
|
+
entry: KnowledgeEntry;
|
|
239
|
+
}>('KnowledgeCaptured');
|
|
240
|
+
|
|
241
|
+
const autoTagRule = defineRule({
|
|
242
|
+
id: 'knowledge.auto-tag',
|
|
243
|
+
description: 'Automatically tag knowledge entries',
|
|
244
|
+
impl: (state, events) => {
|
|
245
|
+
const captured = events.find(KnowledgeCaptured.is);
|
|
246
|
+
if (!captured) return [];
|
|
247
|
+
|
|
248
|
+
const entry = captured.payload.entry;
|
|
249
|
+
const tags = extractTags(entry.content);
|
|
250
|
+
|
|
251
|
+
return [
|
|
252
|
+
EntryTagged.create({
|
|
253
|
+
entryId: entry.id,
|
|
254
|
+
tags
|
|
255
|
+
})
|
|
256
|
+
];
|
|
257
|
+
}
|
|
258
|
+
});
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
#### 3. UI Components (Svelte)
|
|
262
|
+
|
|
263
|
+
**Location**: `/src/conversations/components/`
|
|
264
|
+
|
|
265
|
+
**Components**:
|
|
266
|
+
- `KnowledgeEntryEditor.svelte`: Create/edit knowledge entries
|
|
267
|
+
- `KnowledgeGraph.svelte`: Visual graph of knowledge relationships
|
|
268
|
+
- `ConversationThread.svelte`: Thread view for discussions
|
|
269
|
+
- `KnowledgeSearch.svelte`: Search interface
|
|
270
|
+
- `QuickCapture.svelte`: Minimal capture form
|
|
271
|
+
|
|
272
|
+
**Integration with Praxis Component System**:
|
|
273
|
+
```typescript
|
|
274
|
+
// Use Praxis component generation
|
|
275
|
+
const knowledgeComponents = generateComponents({
|
|
276
|
+
schema: knowledgeSchema,
|
|
277
|
+
target: 'svelte5',
|
|
278
|
+
theme: 'praxis-default'
|
|
279
|
+
});
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
#### 4. PluresDB Sync Integration
|
|
283
|
+
|
|
284
|
+
**Location**: `/src/conversations/sync/`
|
|
285
|
+
|
|
286
|
+
**Functionality**:
|
|
287
|
+
- Leverage existing PluresDB sync
|
|
288
|
+
- Team knowledge sharing
|
|
289
|
+
- Cloud backup via Praxis Cloud
|
|
290
|
+
|
|
291
|
+
**Configuration**:
|
|
292
|
+
```typescript
|
|
293
|
+
import { createPluresDBAdapter } from '@plures/praxis';
|
|
294
|
+
|
|
295
|
+
const pluresAdapter = createPluresDBAdapter({
|
|
296
|
+
db,
|
|
297
|
+
collections: ['KnowledgeEntry', 'ConversationThread', 'KnowledgeLink'],
|
|
298
|
+
sync: {
|
|
299
|
+
enabled: true,
|
|
300
|
+
endpoint: process.env.PRAXIS_CLOUD_URL,
|
|
301
|
+
autoSync: true,
|
|
302
|
+
}
|
|
303
|
+
});
|
|
304
|
+
```
|
|
305
|
+
|
|
306
|
+
#### 5. CLI Integration
|
|
307
|
+
|
|
308
|
+
**Location**: `/src/cli/commands/knowledge.ts`
|
|
309
|
+
|
|
310
|
+
**Commands**:
|
|
311
|
+
```bash
|
|
312
|
+
# Capture knowledge from CLI
|
|
313
|
+
praxis knowledge capture "Important decision about architecture"
|
|
314
|
+
|
|
315
|
+
# Search knowledge
|
|
316
|
+
praxis knowledge search "authentication"
|
|
317
|
+
|
|
318
|
+
# Export knowledge
|
|
319
|
+
praxis knowledge export --format markdown --output ./docs/decisions/
|
|
320
|
+
|
|
321
|
+
# Start knowledge server (for IDE extensions)
|
|
322
|
+
praxis knowledge serve --port 3000
|
|
323
|
+
```
|
|
324
|
+
|
|
325
|
+
## Migration Strategy
|
|
326
|
+
|
|
327
|
+
### Phase 1: Core Infrastructure (Week 1-2)
|
|
328
|
+
- [ ] Create `/src/conversations` module structure
|
|
329
|
+
- [ ] Define PluresDB schemas for knowledge data
|
|
330
|
+
- [ ] Implement core capture logic (without IDE integration)
|
|
331
|
+
- [ ] Create basic Praxis rules for knowledge processing
|
|
332
|
+
- [ ] Add CLI commands for knowledge management
|
|
333
|
+
|
|
334
|
+
### Phase 2: IDE Integration (Week 3-4)
|
|
335
|
+
- [ ] Port VS Code extension from kno-eng
|
|
336
|
+
- [ ] Replace kno-eng sync with PluresDB calls
|
|
337
|
+
- [ ] Update extension to use Praxis schema
|
|
338
|
+
- [ ] Test local-first functionality
|
|
339
|
+
- [ ] Add code lens and inline annotations
|
|
340
|
+
|
|
341
|
+
### Phase 3: UI Components (Week 5-6)
|
|
342
|
+
- [ ] Generate Svelte components from schema
|
|
343
|
+
- [ ] Create knowledge graph visualization
|
|
344
|
+
- [ ] Build conversation thread UI
|
|
345
|
+
- [ ] Implement search interface
|
|
346
|
+
- [ ] Add quick capture modal
|
|
347
|
+
|
|
348
|
+
### Phase 4: Sync & Collaboration (Week 7-8)
|
|
349
|
+
- [ ] Integrate with Praxis Cloud
|
|
350
|
+
- [ ] Enable team knowledge sharing
|
|
351
|
+
- [ ] Test conflict resolution
|
|
352
|
+
- [ ] Add usage analytics
|
|
353
|
+
- [ ] Performance optimization
|
|
354
|
+
|
|
355
|
+
### Phase 5: Polish & Documentation (Week 9-10)
|
|
356
|
+
- [ ] User documentation
|
|
357
|
+
- [ ] Migration guide for existing kno-eng users
|
|
358
|
+
- [ ] Example knowledge bases
|
|
359
|
+
- [ ] Performance benchmarks
|
|
360
|
+
- [ ] Security audit
|
|
361
|
+
|
|
362
|
+
## Technical Decisions
|
|
363
|
+
|
|
364
|
+
### Decision 1: Storage Layer
|
|
365
|
+
**Choice**: PluresDB
|
|
366
|
+
**Rationale**: Already integrated, local-first, CRDT-based, proven sync
|
|
367
|
+
**Tradeoff**: Slight learning curve for kno-eng users, but better long-term
|
|
368
|
+
|
|
369
|
+
### Decision 2: UI Framework
|
|
370
|
+
**Choice**: Svelte 5
|
|
371
|
+
**Rationale**: Praxis standard, component generation support
|
|
372
|
+
**Tradeoff**: Need to port any existing UI
|
|
373
|
+
|
|
374
|
+
### Decision 3: IDE Support Priority
|
|
375
|
+
**Choice**: VS Code first, JetBrains defer
|
|
376
|
+
**Rationale**: Broader user base, easier integration
|
|
377
|
+
**Tradeoff**: JetBrains users wait longer
|
|
378
|
+
|
|
379
|
+
### Decision 4: Sync Protocol
|
|
380
|
+
**Choice**: PluresDB + Unum (not custom)
|
|
381
|
+
**Rationale**: Don't reinvent the wheel, proven architecture
|
|
382
|
+
**Tradeoff**: Less control over sync details
|
|
383
|
+
|
|
384
|
+
### Decision 5: Module Structure
|
|
385
|
+
**Choice**: `/src/conversations` within praxis core
|
|
386
|
+
**Rationale**: First-class feature, not a separate package
|
|
387
|
+
**Tradeoff**: Increases praxis bundle size slightly
|
|
388
|
+
|
|
389
|
+
## Success Metrics
|
|
390
|
+
|
|
391
|
+
### Functional
|
|
392
|
+
- [ ] Can capture knowledge from VS Code
|
|
393
|
+
- [ ] Knowledge persists locally via PluresDB
|
|
394
|
+
- [ ] Knowledge syncs across devices
|
|
395
|
+
- [ ] Search returns relevant results < 100ms
|
|
396
|
+
- [ ] No data loss during offline->online transitions
|
|
397
|
+
|
|
398
|
+
### Performance
|
|
399
|
+
- [ ] Capture latency < 50ms
|
|
400
|
+
- [ ] Search results < 100ms for 10k entries
|
|
401
|
+
- [ ] Sync < 1s for typical knowledge base
|
|
402
|
+
- [ ] VS Code extension bundle < 500KB
|
|
403
|
+
|
|
404
|
+
### UX
|
|
405
|
+
- [ ] < 3 clicks to capture knowledge
|
|
406
|
+
- [ ] Zero config for local-first usage
|
|
407
|
+
- [ ] < 5 min setup for cloud sync
|
|
408
|
+
- [ ] Keyboard shortcuts for all common actions
|
|
409
|
+
|
|
410
|
+
## Open Questions
|
|
411
|
+
|
|
412
|
+
1. **Namespace**: Should it be `@plures/praxis/conversations` or `@plures/praxis-conversations`?
|
|
413
|
+
- **Recommendation**: `/conversations` subpath export for now, can extract later if needed
|
|
414
|
+
|
|
415
|
+
2. **Knowledge Graph UI**: Use existing library (e.g., react-flow) or build custom?
|
|
416
|
+
- **Recommendation**: Start with existing library (adapt to Svelte), optimize later
|
|
417
|
+
|
|
418
|
+
3. **Migration Tool**: How do existing kno-eng users migrate their data?
|
|
419
|
+
- **Recommendation**: Build a CLI migration tool: `praxis knowledge migrate --from kno-eng`
|
|
420
|
+
|
|
421
|
+
4. **Pricing**: Should knowledge features be free or part of paid tiers?
|
|
422
|
+
- **Recommendation**: Free for local-only, cloud sync requires Praxis Cloud subscription
|
|
423
|
+
|
|
424
|
+
5. **Conversation Features**: Full chat-like interface or simple threaded comments?
|
|
425
|
+
- **Recommendation**: Start simple (threaded comments), add chat features if needed
|
|
426
|
+
|
|
427
|
+
## Resources Required
|
|
428
|
+
|
|
429
|
+
### Development
|
|
430
|
+
- 1 full-stack developer (10 weeks)
|
|
431
|
+
- 1 VS Code extension developer (4 weeks)
|
|
432
|
+
- 1 UX designer (2 weeks, part-time)
|
|
433
|
+
|
|
434
|
+
### Testing
|
|
435
|
+
- 10 beta users from kno-eng community
|
|
436
|
+
- 2 weeks testing period
|
|
437
|
+
|
|
438
|
+
### Documentation
|
|
439
|
+
- User guide (20 pages)
|
|
440
|
+
- Migration guide (10 pages)
|
|
441
|
+
- API documentation (generated)
|
|
442
|
+
- Video tutorials (3x 5min videos)
|
|
443
|
+
|
|
444
|
+
## Risks & Mitigation
|
|
445
|
+
|
|
446
|
+
### Risk 1: Feature Parity
|
|
447
|
+
**Risk**: Missing features that kno-eng users depend on
|
|
448
|
+
**Mitigation**: Survey existing users, beta program, phased rollout
|
|
449
|
+
|
|
450
|
+
### Risk 2: Performance
|
|
451
|
+
**Risk**: PluresDB overhead vs. custom solution
|
|
452
|
+
**Mitigation**: Benchmark early, optimize indexes, consider caching
|
|
453
|
+
|
|
454
|
+
### Risk 3: Adoption
|
|
455
|
+
**Risk**: Existing kno-eng users resist migration
|
|
456
|
+
**Mitigation**: Migration tool, maintain kno-eng for 6 months, clear benefits communication
|
|
457
|
+
|
|
458
|
+
### Risk 4: Scope Creep
|
|
459
|
+
**Risk**: Adding too many new features during migration
|
|
460
|
+
**Mitigation**: Strict phase gates, defer non-essential features
|
|
461
|
+
|
|
462
|
+
## Next Steps
|
|
463
|
+
|
|
464
|
+
1. **Approval**: Get stakeholder sign-off on this plan
|
|
465
|
+
2. **Prototyping**: Build Phase 1 prototype (1 week)
|
|
466
|
+
3. **Beta Recruitment**: Recruit 10 beta testers from kno-eng community
|
|
467
|
+
4. **Kickoff**: Start Phase 1 development
|
|
468
|
+
5. **Weekly Reviews**: Track progress against milestones
|
|
469
|
+
|
|
470
|
+
## Appendix A: Praxis Integration Points Summary
|
|
471
|
+
|
|
472
|
+
| Feature | Integration Point | Status |
|
|
473
|
+
|---------|------------------|--------|
|
|
474
|
+
| Knowledge Storage | PluresDB collections | Plan complete |
|
|
475
|
+
| Sync | PluresDB + Unum | Plan complete |
|
|
476
|
+
| UI Components | Svelte 5 components | Plan complete |
|
|
477
|
+
| Logic Rules | Praxis logic engine | Plan complete |
|
|
478
|
+
| CLI | Praxis CLI commands | Plan complete |
|
|
479
|
+
| Auth | Praxis Cloud OAuth | Plan complete |
|
|
480
|
+
| IDE Extension | VS Code extension | Plan complete |
|
|
481
|
+
| Documentation | State-Docs | Planned |
|
|
482
|
+
| Visual Editing | CodeCanvas | Deferred |
|
|
483
|
+
|
|
484
|
+
## Appendix B: File Structure
|
|
485
|
+
|
|
486
|
+
```
|
|
487
|
+
/praxis
|
|
488
|
+
/src
|
|
489
|
+
/conversations/
|
|
490
|
+
/core/
|
|
491
|
+
index.ts # Main entry point
|
|
492
|
+
engine.ts # KnowledgeCaptureEngine
|
|
493
|
+
types.ts # TypeScript types
|
|
494
|
+
/capture/
|
|
495
|
+
/vscode/
|
|
496
|
+
extension.ts # VS Code extension entry
|
|
497
|
+
commands.ts # Command implementations
|
|
498
|
+
provider.ts # Code lens provider
|
|
499
|
+
/core/
|
|
500
|
+
capturer.ts # Core capture logic
|
|
501
|
+
context.ts # Context extraction
|
|
502
|
+
/schema/
|
|
503
|
+
knowledge.schema.ts # PluresDB schema definitions
|
|
504
|
+
contracts.ts # Decision ledger contracts
|
|
505
|
+
/components/
|
|
506
|
+
KnowledgeEntry.svelte
|
|
507
|
+
KnowledgeGraph.svelte
|
|
508
|
+
ConversationThread.svelte
|
|
509
|
+
QuickCapture.svelte
|
|
510
|
+
/rules/
|
|
511
|
+
auto-tag.ts # Auto-tagging rule
|
|
512
|
+
link-detection.ts # Smart linking rule
|
|
513
|
+
notifications.ts # Notification rules
|
|
514
|
+
/cli/
|
|
515
|
+
capture.ts # CLI capture command
|
|
516
|
+
search.ts # CLI search command
|
|
517
|
+
export.ts # CLI export command
|
|
518
|
+
/sync/
|
|
519
|
+
adapter.ts # PluresDB adapter config
|
|
520
|
+
|
|
521
|
+
/docs
|
|
522
|
+
/conversations/
|
|
523
|
+
README.md # Overview
|
|
524
|
+
GETTING_STARTED.md # Quick start
|
|
525
|
+
MIGRATION.md # Migration from kno-eng
|
|
526
|
+
ARCHITECTURE.md # Architecture details
|
|
527
|
+
|
|
528
|
+
/examples
|
|
529
|
+
/knowledge-capture/
|
|
530
|
+
README.md
|
|
531
|
+
src/
|
|
532
|
+
basic-example.ts
|
|
533
|
+
vscode-integration.ts
|
|
534
|
+
```
|
|
535
|
+
|
|
536
|
+
## Appendix C: Example API Usage
|
|
537
|
+
|
|
538
|
+
```typescript
|
|
539
|
+
import {
|
|
540
|
+
KnowledgeCaptureEngine,
|
|
541
|
+
createKnowledgeDB
|
|
542
|
+
} from '@plures/praxis/conversations';
|
|
543
|
+
|
|
544
|
+
// Initialize
|
|
545
|
+
const db = await createKnowledgeDB({ mode: 'auto' });
|
|
546
|
+
const engine = new KnowledgeCaptureEngine({ db });
|
|
547
|
+
|
|
548
|
+
// Capture knowledge
|
|
549
|
+
const entry = await engine.capture({
|
|
550
|
+
type: 'decision',
|
|
551
|
+
title: 'Use PluresDB for storage',
|
|
552
|
+
content: 'We decided to use PluresDB because...',
|
|
553
|
+
tags: ['architecture', 'storage'],
|
|
554
|
+
context: {
|
|
555
|
+
filePath: '/src/db.ts',
|
|
556
|
+
lineNumber: 42,
|
|
557
|
+
}
|
|
558
|
+
});
|
|
559
|
+
|
|
560
|
+
// Search
|
|
561
|
+
const results = await engine.search('PluresDB');
|
|
562
|
+
|
|
563
|
+
// Create conversation thread
|
|
564
|
+
const thread = await engine.createThread({
|
|
565
|
+
topic: 'Storage architecture discussion',
|
|
566
|
+
entries: [entry.id],
|
|
567
|
+
});
|
|
568
|
+
|
|
569
|
+
// Link related knowledge
|
|
570
|
+
await engine.link(entry.id, relatedEntryId, 'implements');
|
|
571
|
+
```
|
|
572
|
+
|
|
573
|
+
---
|
|
574
|
+
|
|
575
|
+
**Document Version**: 1.0
|
|
576
|
+
**Last Updated**: 2026-02-01
|
|
577
|
+
**Next Review**: After Phase 1 completion
|