@barissozen/csns 0.7.4 → 0.7.6
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 +215 -225
- package/dist/agent/index.d.ts +1 -0
- package/dist/agent/index.d.ts.map +1 -1
- package/dist/agent/index.js +1 -0
- package/dist/agent/index.js.map +1 -1
- package/dist/agent/tracer/index.d.ts +2 -0
- package/dist/agent/tracer/index.d.ts.map +1 -1
- package/dist/agent/tracer/index.js +1 -0
- package/dist/agent/tracer/index.js.map +1 -1
- package/dist/agent/tracer/reverse-engineer.d.ts.map +1 -1
- package/dist/agent/tracer/reverse-engineer.js +21 -5
- package/dist/agent/tracer/reverse-engineer.js.map +1 -1
- package/dist/agent/tracer/security-scanner.d.ts +54 -0
- package/dist/agent/tracer/security-scanner.d.ts.map +1 -0
- package/dist/agent/tracer/security-scanner.js +397 -0
- package/dist/agent/tracer/security-scanner.js.map +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,64 +1,93 @@
|
|
|
1
|
-
#
|
|
1
|
+
# CSNS
|
|
2
2
|
|
|
3
|
-
>
|
|
3
|
+
> **C**ode-aware **S**elf-correcting **N**ever-forgetting **S**ystem
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
Just say what you want. It handles the rest.
|
|
6
|
+
Or point it at existing code — it reverse-engineers, audits, and scores your architecture.
|
|
6
7
|
|
|
7
|
-
**Multi-model** · **Multi-language** · **Memory-first** · **Self-correcting**
|
|
8
|
+
**Multi-model** · **Multi-language** · **Memory-first** · **Self-correcting** · **Codebase auditor**
|
|
9
|
+
|
|
10
|
+
```bash
|
|
11
|
+
npm install -g @barissozen/csns
|
|
12
|
+
csns
|
|
13
|
+
```
|
|
8
14
|
|
|
9
15
|
---
|
|
10
16
|
|
|
11
|
-
##
|
|
17
|
+
## What It Does
|
|
12
18
|
|
|
13
19
|
```
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
>
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
20
|
+
csns> /new "URL shortener with auth" → builds it from scratch
|
|
21
|
+
csns> /audit → reverse-engineers & scores existing code
|
|
22
|
+
csns> /trace → 4-layer deep analysis
|
|
23
|
+
csns> /health → checks LLM + agent + memory status
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
**Two modes:**
|
|
27
|
+
1. **Build** — describe what you want, CSNS makes technical decisions, writes code, tests it, audits the result
|
|
28
|
+
2. **Audit** — point it at any TypeScript project, it classifies layers, traces data flows, checks architectural decisions, scores health 0–100
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
## Demo: Build
|
|
33
|
+
|
|
34
|
+
```
|
|
35
|
+
$ csns
|
|
36
|
+
|
|
37
|
+
╔══════════════════════════════════════════════╗
|
|
38
|
+
║ CSNS v0.7.5 ║
|
|
39
|
+
║ Code-aware Self-correcting ║
|
|
40
|
+
║ Never-forgetting System ║
|
|
41
|
+
╚══════════════════════════════════════════════╝
|
|
42
|
+
|
|
43
|
+
Type /help for commands, /quit to exit.
|
|
44
|
+
|
|
45
|
+
csns> /new
|
|
46
|
+
📋 What do you want to build?
|
|
47
|
+
> URL shortener with user registration
|
|
48
|
+
|
|
49
|
+
🔍 Analyzing...
|
|
50
|
+
✅ JWT Auth · ✅ SQLite · ✅ REST API · ✅ TypeScript
|
|
51
|
+
|
|
52
|
+
🚀 Starting orchestration...
|
|
53
|
+
📦 M01: Foundation → ✅ (tsc ✅, test ✅)
|
|
54
|
+
📦 M02: Auth → ✅ (tsc ✅, test ✅, endpoint ✅)
|
|
55
|
+
📦 M03: Shortener → ✅ (tsc ✅, test ✅, endpoint ✅)
|
|
56
|
+
|
|
57
|
+
🔍 Post-build audit...
|
|
58
|
+
💯 Health: 94/100 — 2 minor violations, auto-fixing...
|
|
59
|
+
✅ Re-audit: 100/100
|
|
60
|
+
|
|
61
|
+
csns> /quit
|
|
62
|
+
👋 Bye.
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
## Demo: Audit
|
|
66
|
+
|
|
67
|
+
```
|
|
68
|
+
csns> /audit
|
|
69
|
+
🔍 Running reverse engineering audit...
|
|
70
|
+
|
|
71
|
+
═══════════════════════════════════════════
|
|
72
|
+
📋 AUDIT REPORT
|
|
73
|
+
═══════════════════════════════════════════
|
|
74
|
+
|
|
75
|
+
🏗️ Layer Distribution:
|
|
76
|
+
controller 42 service 37 middleware 17
|
|
77
|
+
repository 239 config 16 schema 10
|
|
78
|
+
|
|
79
|
+
🔀 Data Flows: 5/68 complete
|
|
80
|
+
|
|
81
|
+
⚠️ Violations: 43 (43 acknowledged, 0 real)
|
|
82
|
+
✅ 19x GraphQL resolver-first pattern
|
|
83
|
+
✅ 30x Inline resolver logic — accepted convention
|
|
84
|
+
|
|
85
|
+
🧩 Patterns:
|
|
86
|
+
GraphQL Federation · GraphQL Resolvers · Event-Driven
|
|
87
|
+
Circuit Breaker · Service Layer · Middleware Chain
|
|
88
|
+
|
|
89
|
+
💯 Health Score: 96/100
|
|
90
|
+
═══════════════════════════════════════════
|
|
62
91
|
```
|
|
63
92
|
|
|
64
93
|
---
|
|
@@ -66,11 +95,8 @@ $ pc run
|
|
|
66
95
|
## Install
|
|
67
96
|
|
|
68
97
|
```bash
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
npm install -g project-consciousness
|
|
72
|
-
pc init
|
|
73
|
-
pc run
|
|
98
|
+
npm install -g @barissozen/csns
|
|
99
|
+
csns
|
|
74
100
|
```
|
|
75
101
|
|
|
76
102
|
**Requirements:** Node.js 20+, at least one LLM provider
|
|
@@ -86,8 +112,6 @@ export OLLAMA_HOST=http://localhost:11434 # Local (Llama, Mistral, etc.)
|
|
|
86
112
|
|
|
87
113
|
## Multi-Model Support
|
|
88
114
|
|
|
89
|
-
Use any LLM provider — switch with a single env variable:
|
|
90
|
-
|
|
91
115
|
| Provider | Env Variable | Models |
|
|
92
116
|
|----------|-------------|--------|
|
|
93
117
|
| **Anthropic** (default) | `ANTHROPIC_API_KEY` | Claude Sonnet, Opus, Haiku |
|
|
@@ -96,177 +120,151 @@ Use any LLM provider — switch with a single env variable:
|
|
|
96
120
|
| **OpenAI-compatible** | `OPENAI_API_KEY` + `LLM_BASE_URL` | Groq, Together, Azure, etc. |
|
|
97
121
|
|
|
98
122
|
```bash
|
|
99
|
-
# Auto-detect
|
|
100
|
-
|
|
101
|
-
pc run "Build a todo API"
|
|
123
|
+
# Auto-detect from env
|
|
124
|
+
csns
|
|
102
125
|
|
|
103
126
|
# Explicit override
|
|
104
|
-
LLM_PROVIDER=openai OPENAI_API_KEY=sk-...
|
|
127
|
+
LLM_PROVIDER=openai OPENAI_API_KEY=sk-... csns
|
|
105
128
|
|
|
106
|
-
# Local
|
|
107
|
-
LLM_PROVIDER=ollama
|
|
129
|
+
# Local — no API key needed
|
|
130
|
+
LLM_PROVIDER=ollama csns
|
|
108
131
|
```
|
|
109
132
|
|
|
110
|
-
|
|
133
|
+
---
|
|
111
134
|
|
|
112
|
-
|
|
113
|
-
import { createProvider } from 'project-consciousness/llm';
|
|
135
|
+
## CLI Commands
|
|
114
136
|
|
|
115
|
-
|
|
116
|
-
const provider = createProvider();
|
|
137
|
+
### Interactive (REPL)
|
|
117
138
|
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
139
|
+
```
|
|
140
|
+
csns → starts interactive prompt
|
|
141
|
+
csns> /new [brief] → build a new project
|
|
142
|
+
csns> /audit → reverse-engineer & audit codebase
|
|
143
|
+
csns> /trace → full 4-layer analysis
|
|
144
|
+
csns> /status → show STATE.md
|
|
145
|
+
csns> /log → show DECISIONS.md
|
|
146
|
+
csns> /health → check LLM + agent CLI + memory files
|
|
147
|
+
csns> /help → list commands
|
|
148
|
+
csns> /quit → exit
|
|
122
149
|
```
|
|
123
150
|
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
## Multi-Language (i18n)
|
|
127
|
-
|
|
128
|
-
All user-facing messages, prompts, and agent personas support multiple languages:
|
|
151
|
+
### Non-interactive (CI / scripts)
|
|
129
152
|
|
|
130
153
|
```bash
|
|
131
|
-
|
|
132
|
-
|
|
154
|
+
csns new "Build a todo API with auth"
|
|
155
|
+
csns audit
|
|
156
|
+
csns trace
|
|
157
|
+
csns status
|
|
158
|
+
csns health
|
|
133
159
|
```
|
|
134
160
|
|
|
135
|
-
Currently supported: **English** (`en`), **Turkish** (`tr`). Adding a new locale is one file — see `src/i18n/`.
|
|
136
|
-
|
|
137
161
|
---
|
|
138
162
|
|
|
139
|
-
##
|
|
140
|
-
|
|
141
|
-
The orchestrator spawns coding agents via CLI. Default is Claude Code, but any compatible CLI works:
|
|
163
|
+
## Audit Engine
|
|
142
164
|
|
|
143
|
-
|
|
144
|
-
AGENT_BINARY=claude pc run "..." # Claude Code (default)
|
|
145
|
-
AGENT_BINARY=codex pc run "..." # OpenAI Codex CLI
|
|
146
|
-
AGENT_BINARY=aider pc run "..." # Aider
|
|
147
|
-
```
|
|
165
|
+
The `/audit` command reverse-engineers any TypeScript project:
|
|
148
166
|
|
|
149
|
-
|
|
167
|
+
### 4 Layers
|
|
150
168
|
|
|
151
|
-
|
|
169
|
+
| Layer | What | How |
|
|
170
|
+
|-------|------|-----|
|
|
171
|
+
| **Static** | Import/export graph, dead exports, circular deps, phantom deps | Regex scan of all `.ts` files |
|
|
172
|
+
| **Semantic** | "This service should be injected but isn't" | LLM reasoning over graph + file summaries |
|
|
173
|
+
| **Runtime** | Server started, HTTP probed, handler chain traced | Express middleware + HTTP probing |
|
|
174
|
+
| **Audit** | Architecture recovery, decision archaeology, pattern detection | Layer classification + cross-reference |
|
|
152
175
|
|
|
153
|
-
|
|
176
|
+
### What It Finds
|
|
154
177
|
|
|
155
|
-
|
|
178
|
+
| Finding | Example |
|
|
179
|
+
|---------|---------|
|
|
180
|
+
| **Layer skip** | Controller → Repository (skipping service layer) |
|
|
181
|
+
| **Wrong direction** | Service imports controller (upward dependency) |
|
|
182
|
+
| **Dead export** | `unusedHelper()` exported but never imported |
|
|
183
|
+
| **Circular dep** | `logger → config → logger` |
|
|
184
|
+
| **Phantom dep** | `winston` imported but not in `package.json` |
|
|
185
|
+
| **Decision contradiction** | ARCHITECTURE says JWT but code uses session |
|
|
186
|
+
| **Pattern inconsistency** | 7 routes use service layer, 52 don't |
|
|
156
187
|
|
|
157
|
-
|
|
188
|
+
### Smart Acknowledgement
|
|
158
189
|
|
|
159
|
-
|
|
160
|
-
|------|-----------------|----------|
|
|
161
|
-
| `MISSION.md` | What to build, what NOT to build, success criteria | You (immutable) |
|
|
162
|
-
| `ARCHITECTURE.md` | Technical decisions — auth, DB, API style | System (auto) |
|
|
163
|
-
| `DECISIONS.md` | Every decision, why it was made, when | Log (append-only) |
|
|
164
|
-
| `STATE.md` | Current phase, what's done, what's left | Live status |
|
|
165
|
-
|
|
166
|
-
### Architecture
|
|
190
|
+
CSNS distinguishes **design decisions** from **real bugs**:
|
|
167
191
|
|
|
168
192
|
```
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
│
|
|
175
|
-
|
|
176
|
-
│ → MISSION.md + ARCHITECTURE.md │
|
|
177
|
-
└──────────┬──────────────────────┘
|
|
178
|
-
▼
|
|
179
|
-
┌─────────────────────────────────┐
|
|
180
|
-
│ Orchestrator │
|
|
181
|
-
│ Plan → Milestone → Agent → Test │
|
|
182
|
-
│ Failed? → 3x retry → ask you │
|
|
183
|
-
└──────────┬──────────────────────┘
|
|
184
|
-
▼
|
|
185
|
-
┌─────────────────────────────────┐
|
|
186
|
-
│ Memory Layer │
|
|
187
|
-
│ Every decision → DECISIONS.md │
|
|
188
|
-
│ Every step → STATE.md │
|
|
189
|
-
│ Nothing is lost │
|
|
190
|
-
└─────────────────────────────────┘
|
|
193
|
+
Violation found
|
|
194
|
+
│
|
|
195
|
+
├── GraphQL resolver → DB direct? → ✅ Acknowledged (resolver-first pattern)
|
|
196
|
+
├── Written in ARCHITECTURE.md? → ✅ Acknowledged (explicit decision)
|
|
197
|
+
├── >80% routes follow same way? → ✅ Acknowledged (project convention)
|
|
198
|
+
│
|
|
199
|
+
└── None of the above? → ⚠️ Real issue — counts against health
|
|
191
200
|
```
|
|
192
201
|
|
|
193
|
-
###
|
|
194
|
-
|
|
195
|
-
| Asks you ✅ | Decides itself ❌ |
|
|
196
|
-
|---|---|
|
|
197
|
-
| "Are links public or private?" | JWT or session? |
|
|
198
|
-
| "Can users see each other's data?" | Which database? |
|
|
199
|
-
| "Will there be payments?" | REST or GraphQL? |
|
|
200
|
-
| "Do links expire?" | File structure? |
|
|
201
|
-
|
|
202
|
-
Technical decisions are inferred from your brief. Only **product decisions** — things you need to know — are asked.
|
|
203
|
-
|
|
204
|
-
### Quality Control Pipeline
|
|
205
|
-
|
|
206
|
-
After code is written, it's verified:
|
|
207
|
-
|
|
208
|
-
1. **Type checking** — `tsc --noEmit`
|
|
209
|
-
2. **Test execution** — `vitest run` / `pytest` / `go test`
|
|
210
|
-
3. **HTTP endpoint testing** — server started, real HTTP requests sent
|
|
211
|
-
4. **Anti-scope enforcement** — protected files touched? forbidden deps added?
|
|
202
|
+
### Tested On Real Projects
|
|
212
203
|
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
204
|
+
```
|
|
205
|
+
Project Files Violations Health
|
|
206
|
+
──────────────────────────────────────────────────────────
|
|
207
|
+
Cayman Data 37 0 (0 ack, 0 real) 100.0 💯
|
|
208
|
+
Yieldex 84 1 (0 ack, 1 real) 98.3
|
|
209
|
+
Wallet SDK 26 1 (0 ack, 1 real) 97.8
|
|
210
|
+
Cayman-Hashlock 530 43 (43 ack, 0 real) 96.0
|
|
211
|
+
CSNS (self) 72 6 (2 ack, 4 real) 93.0
|
|
212
|
+
Cayman Mobile 32 5 (0 ack, 5 real) 89.4
|
|
213
|
+
```
|
|
216
214
|
|
|
217
|
-
|
|
215
|
+
### Programmatic
|
|
218
216
|
|
|
219
217
|
```typescript
|
|
220
|
-
import {
|
|
218
|
+
import { ReverseEngineer } from '@barissozen/csns/agent';
|
|
221
219
|
|
|
222
|
-
const
|
|
223
|
-
|
|
224
|
-
llmProvider: provider, // any LLMProvider
|
|
225
|
-
port: 3000,
|
|
226
|
-
});
|
|
220
|
+
const auditor = new ReverseEngineer('/path/to/project');
|
|
221
|
+
const report = await auditor.audit();
|
|
227
222
|
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
//
|
|
223
|
+
report.classifications // file → layer mapping
|
|
224
|
+
report.dataFlows // end-to-end request chains
|
|
225
|
+
report.violations // architectural issues (acknowledged vs real)
|
|
226
|
+
report.decisionAudit // DECISIONS.md cross-check
|
|
227
|
+
report.patterns // detected design patterns
|
|
228
|
+
report.summary.healthScore // 0–100
|
|
232
229
|
```
|
|
233
230
|
|
|
234
|
-
**3-layer analysis:**
|
|
235
|
-
|
|
236
|
-
| Layer | What | How |
|
|
237
|
-
|-------|------|-----|
|
|
238
|
-
| **Static** | Import/export graph, dead code, circular deps, phantom deps | Regex scan of all `.ts` files |
|
|
239
|
-
| **Semantic** | "This service should be injected but isn't" | LLM reasoning over graph + file summaries |
|
|
240
|
-
| **Runtime** | Server started, HTTP probed, handler chain traced | Express middleware injection + HTTP probing |
|
|
241
|
-
|
|
242
231
|
---
|
|
243
232
|
|
|
244
|
-
##
|
|
245
|
-
|
|
246
|
-
| Command | What It Does |
|
|
247
|
-
|---------|-------------|
|
|
248
|
-
| `pc init` | Collect brief → create 4 memory files |
|
|
249
|
-
| `pc run` | Start the orchestrator |
|
|
250
|
-
| `pc run "Build a todo API"` | Start with inline brief |
|
|
251
|
-
| `pc status` | Show STATE.md |
|
|
252
|
-
| `pc log` | Show DECISIONS.md |
|
|
253
|
-
| `pc help` | Help |
|
|
233
|
+
## Build Engine
|
|
254
234
|
|
|
255
|
-
|
|
235
|
+
### The 4-File Memory System
|
|
256
236
|
|
|
257
|
-
|
|
237
|
+
| File | What | Who |
|
|
238
|
+
|------|------|-----|
|
|
239
|
+
| `MISSION.md` | What to build, what NOT to build, success criteria | You (immutable) |
|
|
240
|
+
| `ARCHITECTURE.md` | Technical decisions — auth, DB, API style | System (auto) |
|
|
241
|
+
| `DECISIONS.md` | Every decision + rationale (append-only) | Log |
|
|
242
|
+
| `STATE.md` | Current phase, what's done, what's left | Live |
|
|
258
243
|
|
|
259
|
-
|
|
244
|
+
### Build → Audit → Fix Loop
|
|
260
245
|
|
|
261
|
-
```
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
246
|
+
```
|
|
247
|
+
/new "Build a todo API"
|
|
248
|
+
│
|
|
249
|
+
▼
|
|
250
|
+
SmartBrief → Scaffold → Orchestrator → Agents write code
|
|
251
|
+
│ │
|
|
252
|
+
│ tsc ✅ test ✅
|
|
253
|
+
│ │
|
|
254
|
+
▼ ▼
|
|
255
|
+
MISSION.md Audit Gate (automatic)
|
|
256
|
+
ARCHITECTURE.md Health < 70? → Fix tasks
|
|
257
|
+
DECISIONS.md Re-audit → ✅ Done
|
|
258
|
+
STATE.md
|
|
267
259
|
```
|
|
268
260
|
|
|
269
|
-
|
|
261
|
+
### What It Asks vs. What It Decides
|
|
262
|
+
|
|
263
|
+
| Asks you ✅ | Decides itself ❌ |
|
|
264
|
+
|---|---|
|
|
265
|
+
| "Are links public or private?" | JWT or session? |
|
|
266
|
+
| "Can users see each other's data?" | Which database? |
|
|
267
|
+
| "Will there be payments?" | REST or GraphQL? |
|
|
270
268
|
|
|
271
269
|
---
|
|
272
270
|
|
|
@@ -279,84 +277,76 @@ Everything is logged, nothing is deleted:
|
|
|
279
277
|
| `ANTHROPIC_API_KEY` | Anthropic API key | — |
|
|
280
278
|
| `OPENAI_API_KEY` | OpenAI API key | — |
|
|
281
279
|
| `OLLAMA_HOST` | Ollama server URL | `http://localhost:11434` |
|
|
282
|
-
| `LLM_PROVIDER` | Force
|
|
280
|
+
| `LLM_PROVIDER` | Force: `anthropic` / `openai` / `ollama` | auto-detect |
|
|
283
281
|
| `LLM_MODEL` | Model name | provider default |
|
|
284
|
-
| `LLM_BASE_URL` | Custom API base URL
|
|
282
|
+
| `LLM_BASE_URL` | Custom API base URL | — |
|
|
285
283
|
| `AGENT_BINARY` | Coding agent CLI binary | `claude` |
|
|
286
|
-
| `
|
|
284
|
+
| `CSNS_LOCALE` | Language: `en` / `tr` | `en` |
|
|
287
285
|
|
|
288
286
|
### Programmatic
|
|
289
287
|
|
|
290
288
|
```typescript
|
|
291
|
-
import { Orchestrator } from '
|
|
289
|
+
import { Orchestrator } from '@barissozen/csns/orchestrator';
|
|
290
|
+
import { createProvider } from '@barissozen/csns/llm';
|
|
291
|
+
import { TracerAgent } from '@barissozen/csns/agent';
|
|
292
292
|
|
|
293
|
+
// Build
|
|
293
294
|
const orchestrator = new Orchestrator({
|
|
294
295
|
projectRoot: process.cwd(),
|
|
295
296
|
llmProvider: 'openai',
|
|
296
297
|
llmApiKey: 'sk-...',
|
|
297
|
-
llmModel: 'gpt-4o',
|
|
298
|
-
agentBinary: 'claude',
|
|
299
298
|
locale: 'en',
|
|
300
299
|
maxRetries: 3,
|
|
301
|
-
escalationThreshold: 0.4,
|
|
302
|
-
maxParallelAgents: 3,
|
|
303
300
|
verbose: true,
|
|
304
301
|
});
|
|
302
|
+
await orchestrator.run('Build a REST API for todos');
|
|
305
303
|
|
|
306
|
-
|
|
304
|
+
// Audit
|
|
305
|
+
const tracer = new TracerAgent({
|
|
306
|
+
projectRoot: '/path/to/project',
|
|
307
|
+
llmProvider: createProvider(),
|
|
308
|
+
});
|
|
309
|
+
const report = await tracer.run();
|
|
307
310
|
```
|
|
308
311
|
|
|
309
312
|
---
|
|
310
313
|
|
|
311
|
-
##
|
|
312
|
-
|
|
313
|
-
### Project Structure
|
|
314
|
+
## Project Structure
|
|
314
315
|
|
|
315
316
|
```
|
|
316
317
|
src/
|
|
318
|
+
├── bin/ CLI — csns (interactive REPL + non-interactive)
|
|
317
319
|
├── brief/ SmartBrief + BriefCollector
|
|
318
320
|
├── agent/ Agent Runner, Context Builder, Codebase Reader
|
|
319
|
-
│ └── tracer/
|
|
320
|
-
|
|
321
|
+
│ └── tracer/ Static Analyzer, Semantic Analyzer, Runtime Tracer,
|
|
322
|
+
│ Reverse Engineer (audit engine)
|
|
323
|
+
├── orchestrator/ Planner, Evaluator, Escalator, Scaffold, Audit Gate
|
|
321
324
|
├── memory/ 4-file read/write layer
|
|
322
|
-
├── llm/
|
|
325
|
+
├── llm/ Provider abstraction (Anthropic, OpenAI, Ollama)
|
|
323
326
|
├── i18n/ Internationalization (en, tr)
|
|
324
|
-
|
|
325
|
-
└── bin/ CLI (pc init/run/status/log)
|
|
327
|
+
└── types/ TypeScript interfaces
|
|
326
328
|
```
|
|
327
329
|
|
|
328
|
-
|
|
330
|
+
## Tests
|
|
329
331
|
|
|
330
332
|
```bash
|
|
331
|
-
npm test
|
|
332
|
-
|
|
333
|
-
SKIP_E2E=1 npm test # skip real CLI tests
|
|
333
|
+
npm test # 229 tests, 19 suites
|
|
334
|
+
SKIP_E2E=1 npm test # skip real CLI tests
|
|
334
335
|
```
|
|
335
336
|
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
### Stack
|
|
339
|
-
|
|
340
|
-
- **TypeScript + Node.js** — strict mode, ESM
|
|
341
|
-
- **LLM Providers** — Anthropic SDK, OpenAI API, Ollama REST (pluggable)
|
|
342
|
-
- **Agent Execution** — Claude Code CLI (configurable)
|
|
343
|
-
- **Testing** — Vitest (229 tests)
|
|
344
|
-
- **Storage** — File system (markdown, no DB)
|
|
345
|
-
|
|
346
|
-
### Design Principles
|
|
337
|
+
## Design Principles
|
|
347
338
|
|
|
348
339
|
1. **Memory-First** — Every decision leaves a trace in files
|
|
349
340
|
2. **Fail-Safe** — When in doubt, ask the human
|
|
350
341
|
3. **Append-Only** — DECISIONS.md is never edited
|
|
351
|
-
4. **
|
|
352
|
-
5. **
|
|
353
|
-
6. **Provider-Agnostic** — Works with any LLM, any agent CLI
|
|
342
|
+
4. **Provider-Agnostic** — Any LLM, any agent CLI
|
|
343
|
+
5. **Acknowledged vs Real** — Design decisions ≠ bugs
|
|
354
344
|
|
|
355
|
-
|
|
345
|
+
## Contributing
|
|
356
346
|
|
|
357
347
|
1. Fork → branch → test → PR
|
|
358
348
|
2. `npm test` must pass
|
|
359
|
-
3. `npx tsc --noEmit`
|
|
349
|
+
3. `npx tsc --noEmit` — 0 errors
|
|
360
350
|
4. Conventional commits (`feat:`, `fix:`, `docs:`)
|
|
361
351
|
|
|
362
352
|
## License
|
package/dist/agent/index.d.ts
CHANGED
|
@@ -11,4 +11,5 @@ export { StaticAnalyzer } from './tracer/index.js';
|
|
|
11
11
|
export { SemanticAnalyzer } from './tracer/index.js';
|
|
12
12
|
export { RuntimeTracer } from './tracer/index.js';
|
|
13
13
|
export { ReverseEngineer } from './tracer/index.js';
|
|
14
|
+
export { SecurityScanner } from './tracer/index.js';
|
|
14
15
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/agent/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,YAAY,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/agent/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,YAAY,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC"}
|
package/dist/agent/index.js
CHANGED
|
@@ -9,4 +9,5 @@ export { StaticAnalyzer } from './tracer/index.js';
|
|
|
9
9
|
export { SemanticAnalyzer } from './tracer/index.js';
|
|
10
10
|
export { RuntimeTracer } from './tracer/index.js';
|
|
11
11
|
export { ReverseEngineer } from './tracer/index.js';
|
|
12
|
+
export { SecurityScanner } from './tracer/index.js';
|
|
12
13
|
//# sourceMappingURL=index.js.map
|
package/dist/agent/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/agent/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/agent/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -5,4 +5,6 @@ export { SemanticAnalyzer } from './semantic-analyzer.js';
|
|
|
5
5
|
export { RuntimeTracer } from './runtime-tracer.js';
|
|
6
6
|
export { ReverseEngineer } from './reverse-engineer.js';
|
|
7
7
|
export type { AuditReport, FileClassification, DataFlowChain, ArchitectureViolation, DecisionAuditResult, ArchLayer, } from './reverse-engineer.js';
|
|
8
|
+
export { SecurityScanner } from './security-scanner.js';
|
|
9
|
+
export type { SecurityReport, SecurityFinding } from './security-scanner.js';
|
|
8
10
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/agent/tracer/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,YAAY,EACV,WAAW,EACX,kBAAkB,EAClB,aAAa,EACb,qBAAqB,EACrB,mBAAmB,EACnB,SAAS,GACV,MAAM,uBAAuB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/agent/tracer/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,YAAY,EACV,WAAW,EACX,kBAAkB,EAClB,aAAa,EACb,qBAAqB,EACrB,mBAAmB,EACnB,SAAS,GACV,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,YAAY,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC"}
|
|
@@ -3,4 +3,5 @@ export { StaticAnalyzer } from './static-analyzer.js';
|
|
|
3
3
|
export { SemanticAnalyzer } from './semantic-analyzer.js';
|
|
4
4
|
export { RuntimeTracer } from './runtime-tracer.js';
|
|
5
5
|
export { ReverseEngineer } from './reverse-engineer.js';
|
|
6
|
+
export { SecurityScanner } from './security-scanner.js';
|
|
6
7
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/agent/tracer/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/agent/tracer/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AASxD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reverse-engineer.d.ts","sourceRoot":"","sources":["../../../src/agent/tracer/reverse-engineer.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"reverse-engineer.d.ts","sourceRoot":"","sources":["../../../src/agent/tracer/reverse-engineer.ts"],"names":[],"mappings":"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"}
|